...让我数一数。
我可以用和来测试它 ,并且\if
它的\ifx
\show
\meaning
我的知识和诗歌创作能力就此止步(尽管有些人可能会说后者从未开始)。
背景:我仍在努力理解这句话的含义\noexpand
:
\noexpand
暂时地将下一个标记设置为\relax
。
将其设置为的目的\relax
似乎是,由于\relax
不可扩展,因此下次 TeX 尝试扩展它时,下一个标记不会扩展。但它做之后的时间会扩大,所以这似乎就是“暂时”的意思。
但事实是,它暂时被设置为\relax
可检测的吗?为了测试这一点,我想检查一下 TeX 认为\noexpand\foo
是什么,但“暂时”总是会妨碍:这一切都有点量子化,因为观察的行为似乎\noexpand\foo
会以某种方式改变它。
无论如何,我想构建一个测试套件来查看是否可以以有意义的方式检测到的值\noexpand\foo
,为此,我需要知道可以获取其值的所有方法,例如条件和\show
。这就是我的问题。
问题:有哪些方法可以检查 TeX 中的宏或活动标记,从而揭示其指向/扩展的内容?
答案1
希望我理解了这个问题,选项是:
\show
,它在终端中显示标记的含义。对于寄存器,它显示寄存器编号而不是寄存器的内容。例如,原语会给你一个标识,\show = \show
而对于宏,你会得到扩展。\showthe
,在终端显示寄存器的内容。\meaning
,它将非常相似的信息放在输入流中,除空格外,所有标记的类别代码均为“其他”。这对于显示宏的含义以及各种测试和标记化技巧都很有用。例如,LaTeX 用于\meaning
清理类别代码(尽管现在\scantokens
可能是更好的选择。)\ifx
,它根据两个标记的含义进行比较。这两个标记不必\let
彼此对应,但必须具有相同的定义才能使测试为真。因此,\def\testa{stuff} \def\testb{stuff} \ifx\testa\testb
是真的,但是
\def\testa{stuff} \long\def\testb{stuff} \ifx\testa\testb
是错误的。
\if
,测试两个不可扩展的 token 是否相同,忽略类别代码。两个 token 业务意味着\def\test{aa} \if\test\SomeOtherThing
将在这里比较两个
a
字符,这\SomeOtherThing
是分支的一部分true
。