我必须承认,我的 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}}