根本不扩展的新命令

根本不扩展的新命令

如何定义一个命令,将其内容准确地插入回源文件而无需任何重新解释、扩展等?

换句话说,我希望无论我坚持什么,使用\exactly{ugly stuff}和之间永远不会有区别。ugly stuffugly stuff

谢谢!

\documentclass{article}

\newcommand{\exactly}[1]{#1}


\begin{document}



\exactly{ugly stuff}

\end{document}

答案1

宏的(第一级)扩展,无论是由\def还是(间接)由定义\newcommand,都是其替换文本中的标记。因此,在正常情况下,行为正如您所问的那样。

但是如果你使用

\documentclass{article}

\newcommand{\exactly}[1]{#1}


\begin{document}



\exactly{ugly \verb|{| stuff}

\end{document}

然后它不是像工作一样

\documentclass{article}

\newcommand{\exactly}[1]{#1}


\begin{document}



ugly \verb|{| stuff

\end{document}

而这实际上无法修复。在执行\exactly\exactly以重新插入该参数之前,将扫描 的参数以匹配括号并标记输入字符。因此\verb不会执行,因此{被视为正常(catcode 1)括号,因此 的参数\exactly永远不会关闭。

即使你使用(比如说)\verb|&|而不是\verb|{|这样,参数的结尾也会被正确找到,&并且已经被标记化,因此\verb|&|会产生表格特殊字符&而不是逐字字符。

相关内容