将类似 HTML 的标签定义为 TeX 宏

将类似 HTML 的标签定义为 TeX 宏

我必须承认,我的 catcode 技巧不太好。

我正在使用一些将由程序填充的模板(HTML::Template,为 LaTeX 制作HTML,但对 LaTeX 也非常方便)。我希望我的模板即使没有替换标签也可以编译。

标签的形式为<TMPL_#1 #2></TMPL_#1>,有什么想法可以将它们本身制作成宏吗?

这是我目前的尝试,其中 ` 不起作用(因此被注释掉)加上 catcode 更改影响整个文档,这不是我真正想要的。

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}

% enable this to make a WEB template compilable
% he <TMPL_VAR ..>'s will be replaced by the template system
\catcode`\_=\active                     
\let\_\textunderscore%
\catcode`<=\active
\gdef<TMPL_#1 #2>{\texttt{\textless TMPL\_#1 #2\textgreater}}
%\def</TMPL_#1>{\texttt{\textless /TMPL\_#1\textgreater}}

\begin{document}

<TMPL_VAR TEST>

<TMPL_IF NAME=TEST>
something
%</TMPL_IF>

\end{document}

有什么建议么?

答案1

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}

% enable this to make a WEB template compilable
% he <TMPL_VAR ..>'s will be replaced by the template system

\catcode`<=\active
\catcode`_=12
\gdef<#1>{\texttt{\textless #1\textgreater}}


\begin{document}

<TMPL_VAR TEST>

<TMPL_IF NAME=TEST>
something
</TMPL_IF>

\end{document}

如果 catcode 更改应该是本地的,只需移动

\catcode`<=\active
\catcode`_=12

到某个环境的开始代码,例如\begin{template}..\end{template}然后<>用这个环境包围你

或者,如果你不想弄乱 catcode,_你可以使用

\catcode`<=\active

\gdef<#1>{\texttt{\textless \detokenize{#1}\textgreater}}

相关内容