关于这个问题如何让 \meaningbody 说命令未定义?\meaningbody
来自的命令相当于 \show,用于在文档中显示 LaTeX 代码已修复,可以正确显示未定义的命令。但之后@egreg评论了@大卫·卡莱尔回答说:那怎么样\meaningbody\box
?然后我尝试了这个:
\documentclass{article}
\makeatletter
\newcommand{\meaningbody}[1]
{%
{\ttfamily
\ifdefined#1
\expandafter\strip@prefix\meaning#1
\else
`The command \string#1 is undefined.'
\fi}%
}
\makeatother
\begin{document}
\meaningbody\box
\meaning\box
\end{document}
它确实出现了奇怪的错误:
! Argument of \strip@prefix has an extra }.
<inserted text>
\par
l.17 \meaningbody\box
当我这样做时,PDF 上\meaning\box
输出:“box
为什么会有所\box
不同呢?
答案1
它不能工作,因为的定义\strip@prefix
实际上是
\def\strip@prefix#1>{}
这意味着,它会删除 之前的所有内容>
。这在宏(例如 )的情况下非常有效\mbox
。如果我们查看,\meaning\mbox
我们会发现
\long macro:#1->\leavevmode \hbox {#1}
因此,如果我们将其剪断,我们就>
可以\expandafter\strip@prefix\meaning\mbox
得到其余部分:\leavevmode \hbox {#1}
。
现在\box
是一个原始的,因此\meaning\box
只是
\box
那么现在应该在哪里\strip@prefix
剪辑?它只是不断吸收标记,寻找>
,直到在您的情况下遇到无效的内容,然后抛出错误。