在读的时候这个问题以及它的答案,我试图找到,例如,在哪里\@ifnextchar
记录。恐怕我不能……我看了TeX:程序和缺乏耐心的 TeX可以在texdoc
(关联) 当然也在 Google 中搜索过,但没有找到真正的文献。我的问题是它记录在哪里?
实际上,一个更广泛的问题是,类似的内部命令(La)TeX
记录在哪里?我在 TeX.SE 中遇到许多涉及核心组件的答案,La(Tex)
但我通常无法找到这些元素的严格文档。这使得更难以更深入地理解答案,尤其是尝试修改/采用略有不同的问题的解决方案。所以主要问题是:核心命令记录在哪里?
编辑:让我微调一下我的问题,因为大多数答案主要针对的是\@ifnextchr
。什么是(the?)典范TeX
和的文档LaTeX
,其中记录了 magic like\@ifnextchr
和 similar @
involving 元素?只有 TeXbook 吗?LaTeX
TeXbook 的等价物是什么?
答案1
LaTeX 内核文档的权威来源是source2e.pdf
,它编译自 ,并从中提取了创建格式时加载的.dtx
文件和辅助文件。PDF 文件应该可以在您的 TeX 发行版 ( ) 中找到。latex.ltx
texdoc source2e
例如,\@ifnextchar
在source2e.pdf
它的定义位于 的第 253 行及以下行ltdefns.dtx
,但通过示例可以更好地理解。
\def\input{\@ifnextchar\bgroup\@iinput\@@input}
如果后面的标记\input
是开括号,则执行\@iinput
,否则执行\@@input
(这是 的原始含义\input
)。
\DeclareRobustCommand\sqrt{\@ifnextchar[\@sqrt\sqrtsign}
如果后面跟着的标记\sqrt
是一个开(方)括号,则执行\@sqrt
(有可选参数),否则执行更简单的\sqrtsign
:\def\@sqrt[#1]{\root #1\of}
简化\@sqrt[#1]
为 Plain TeX 派生构造。
请注意,以下标记是不是删除(除非它是一个空间标记),所以之后\sqrt[3]{x}
会有
\@sqrt[3]{x}
然后就可以正确解析了。
\@ifnextchar
用于定义\@ifstar
:
\def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}}
接下来\def\xyz{\@ifstar\s@xyz\@xyz}
是*
\xyz*
\@ifstar\s@xyz\@xyz*
\@ifnextchar *{\@firstoftwo{\s@xyz}}\@xyz*
\@firstoftwo{\s@xyz}*
\s@xyz
当没有 * 时,
\xyz t
\@ifstar\s@xyz\@xyz t
\@ifnextchar *{\@firstoftwo{\s@xyz}}\@xyz t
\@xyz t
所以我们看到\@ifstar
做删除*
(使用巧妙的技巧)。这里t
代表任何不是 的标记*
。
值得注意的是,\@ifnextchar
使用什么\if
来进行测试,例如,
\let\myasterisk=*
\xyz\myasterisk
将与 相同\xyz*
。
答案2
\@ifnextchar
不是原始的 TeX 命令,而是 LaTeX 的内部宏。它的文档记录在来源2e在部分
11.3 命令定义
答案3
您可以查看 »宏2e«。这是对常用宏(主要由软件包编写者编写)的相当全面的概述。texdoc macros2e
在命令行中键入即可立即访问。
答案4
正如@egreg所说,source2e 是 LaTeX“核心”宏的规范来源。您可以使用“ ”从命令行启动 source2e texdoc source2e
。
但是,source2e 是一份巨大的文档。您需要知道如何使用索引来查找宏的定义。例如,这是\@ifnextchar
(truncated) 的条目:
\@ifnextchar .......................................................................................................................................................................................I3,I13,23,a45,__ d253 __,d258,d274,i44,i206,k163,m13 ...
在 PDF 中,您会看到“ d253
”带有下划线。下划线表示可在该部分中找到宏的定义。
要查找给定宏的定义,请在 source2e 中查找它,然后单击带下划线的部分。
关于 TeX,您可以使用“TeX for the Impatient”查找“Plain TeX”宏。同样,在命令提示符下,输入“texdoc impatient
”。该书的索引遵循与 source2e 相同的约定(事实上,它遵循“The TeXbook”的约定)。TeXbook 是确定的纯 TeX 宏的源代码,但您需要购买一份;它不随任何 TeX 发行版一起提供(PDF 格式)。因此“TeX for the Impatient”已经足够了。
不幸的是,没有明确的方法来判断某个特定的宏在哪里定义;例如,它是“Plain TeX”、“LaTeX”还是其他包宏。