在这种情况下 \abc 的定义是什么?

在这种情况下 \abc 的定义是什么?

当我编译以下代码时出现错误:

“\abc 的使用与其定义不符”

\abc 的定义是什么?

\documentclass{article}

\begin{document}

\def\foo#1{\def\abc#1{test}}
\foo{gh}

\abc x y z

\end{document}

答案1

添加\show\foo\show\abc。然后以交互模式运行 LaTeX:

\documentclass{article}

\begin{document}

\def\foo#1{\def\abc#1{test}}
\foo{gh}

\show\foo
\show\abc

\abc x y z

\end{document}

TeX 将因错误而停止并显示

> \foo=macro:
#1->\def \abc #1{test}.
l.8 \show\foo

按回车键查看下一条消息

> \abc=macro:
gh->test.
l.9 \show\abc

再次按回车键

! Use of \abc doesn't match its definition.
l.11 \abc x
            y z

如果您无法以交互模式运行,请\meaning\foo改为说并查看生成的输出。

\show当要显示的令牌是宏时,格式为

<parameter text>-><replacement text>.

(请注意,最后一个句号不是替换文本的一部分)。

中的参数文本\foo#1,这意味着 TeX 将按照通常的规则查找参数。请注意,参数文本表示 TeX必须找到。例如,如果你调用{\foo},TeX 会抱怨,因为它找不到参数:右括号不是适合作为参数的标记。

\abc在参数文本显示为 的情况下gh,这意味着在\abcTeX必须找不到gh。如果没有,则会引发错误。

但你实际上并不需要\show: 只需遵循扩展即可。调用

\foo{gh}

将导致 TeX\foo在查找参数后用其替换文本进行替换:

\def\abc gh{test}

可能并非\def\abcgh你所期望的那样。在 的替换文本中\foo\abc是一个标记,而 TeX 只处理标记。因此,对于除以标记,你得到

\def•\abc•g•h•{•t•e•s•t•}

参数文本是定义宏之后直到第一个 的任何内容{。它可以包含#,表示必需参数,就像 的情况一样\foo,但这不是必须的。

答案2

\def\abc gh{test}

定义为必须跟在后面并扩展为\abc的宏,使用如下ghtest

\abc gh x y z

相关内容