如何定义一个命令,将其内容准确地插入回源文件而无需任何重新解释、扩展等?
换句话说,我希望无论我坚持什么,使用\exactly{ugly stuff}
和之间永远不会有区别。ugly stuff
ugly 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|&|
会产生表格特殊字符&
而不是逐字字符。