我现在感觉特别受到亚原子粒子的轰炸(这主要是威尔的错:)
)。首先,在威尔的回答中这个问题今天,他提到了expl3
命令\prg_case_str:nnn
。深入研究包后,我注意到该命令涉及一个有趣的宏,名为\quark_if_recursion_tail_stop_do:nn
。从文档中,我所能收集到的有关名称中expl3
带有单词 (particle ;)
)的事物的信息quark
如下:
l3夸克“quark” 是定义为扩展为自身的命令!因此,它们绝不能被扩展,因为这会产生无限递归;但它们确实有很多用途,例如作为代码中的特殊标记和分隔符。
嗯。
巧合的是,Will 和 Kevin 的新hardwrap
软件包今天在 CTAN 上发布了(恭喜大家!)。深入研究文档代码后,我注意到:
\hw@scanstop
这是来自 expl3 的“夸克”,用于限定扫描;它永远不会被执行,否则会导致无限循环。
\protected\def\hw@scanstop{\hw@scanstop}
hardwrap
阅读代码的其余部分,是的,\hw@scanstop
它的使用方式与定义中描述的方式完全相同l3夸克, 多于。
不过,我还是感到很困惑。与任何其他被赋予特殊用途名称的标记(即任何其他普通符号,无论是否是命令序列)相比,自引用标记有什么特别之处?它们的自引用只是为了捕捉错误吗?
如果 LaTeX 夸克确实具有有趣的特性,而不仅仅是被特别定义和使用的符号,那么我应该在哪里、何时、如何以及为什么最好地使用它们?
他们真的 expl3
具体的,或者它更像是被纳入 LaTeX3 编程模式集的惯例?
最后,出于兴趣(本着扬尼斯的精神)最近的问题关于 Lispcar
和cdr
TeX 词典中的“遗迹”),这个词是如何quark
进入 LaTeX3 词汇表的?(请告诉我LaTeX3
夸克不被认为具有颜色、味道等属性!)
答案1
问题太多了。我只想回答“自引用标记有什么特别之处?”,我会给出一个简单的 TeX 答案。正如我从 TH 那里学到的(在相当长的评论讨论结束时这里),它们可以用于\ifx
测试。如果我知道这#1
是一个 token,并且我进行测试
\ifx#1\my@test@token
找出是否#1
是\my@test@token
,那么最好有定义
\def\my@test@token{\my@test@token}
对于\ifx
,如果两个控制序列具有相同的定义(包括参数和其他内容等每个细节),则它们是相同的,但它们不会为了比较而展开。(正如您上面所解释的那样,这不应该发生。)有关示例,请参阅我上面链接的 TH 的非常好的答案。
注意:\ifx
如果未定义,测试也会有效,但只要是未定义的控制序列,测试\my@test@token
结果就会为真。#1