为什么 \meaningbody\box 会抛出 \strip@prefix 的参数有一个额外的 }?

为什么 \meaningbody\box 会抛出 \strip@prefix 的参数有一个额外的 }?

关于这个问题如何让 \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剪辑?它只是不断吸收标记,寻找>,直到在您的情况下遇到无效的内容,然后抛出错误。

相关内容