我如何检查令牌?

我如何检查令牌?

...让我数一数。
我可以用和来测试它 ,并且\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

相关内容