例如,我正在尝试\textsuperscript
以原始形式执行(从其定义来看)。
我甚至不知道从哪里开始寻找来源!
当然,我发现了\show
。我也可以\expandafter\show\csname textsuperscript \endcsname
对受保护的宏执行此操作,然后我发现了\makeatletter\show\@textsuperscript\makeatother
。
是的,kpsewhich
如果我知道源文件的名称,就会找到源文件。
但这是最好的方法吗?有没有真正更新的文档,以便我和我的团队不必费力研究源代码?
答案1
从字面上理解这个问题,如何彻底学习 (La)TeX。从最底层开始:
[跳过布尔逻辑、晶体管、计算机架构、操作系统等...]
有一个名为 TeX 的程序,由 DE Knuth 编写,你可以阅读(记录的)源代码
texdoc tex
(也出版为 B 卷计算机和排版)以及用户手册(TeXbook= 卷 A)。 (另一个独立文献是TeX 按主题分类)如果你决定阅读源代码,你还必须了解 Pascal 编程语言(的一个子集),以及 Knuth 的WEB读写编程系统。接下来是一个名为 LaTeX 的程序(TeX 宏的集合),最初由 Leslie Lamport 编写,然后由其他的,您可以阅读(记录的)源代码
texdoc source2e
以及(印刷版、实体)书中的用户手册LaTeX:文档准备系统以及其他书籍(LaTeX 伴侣,lshort
等;请参阅本网站上的问题)。接下来,有成千上万个程序(又称为包,基于 TeX、LaTeX 和其他包构建的宏集合),由不同的人编写,用于 TeX/LaTeX。它们的用户手册中的文档质量各不相同,源代码中的文档质量也各不相同。
[省略 TeX 的扩展,如 eTeX、pdfTeX、XeTeX、LuaTeX 等。]
[同样省略了 TeX 核心工作完成之前或之后发生的事情:输入编码、字体(OpenType 和其他)、DVI 驱动程序或 PDF 查看器等。]
因此,当您遇到想要了解更多信息的特定宏或行为时,它可能来自以下任何来源。您可以从顶部开始:
首先,看看这个定义是否在任何包中。要知道要查看哪个包的源代码,首先你可以获取 TeX 程序打开的所有包文件的列表:你可以使用 和在文件
pdflatex -recorder
中查找<jobname>.fls
,或者使用mkjobtexmf
,或者一堆其他解决方案. 使用粗略grep
或其他任何方法在这些文件中搜索您的宏。接下来,检查它是否是 LaTeX 本身的一部分:你可以使用 grep in
latex.ltx
。最后,检查它是否是 TeX 本身的一部分:你可以查看 TeXbook 的索引。
不幸的是,没有更好的解决方案,例如 TeX 记录遇到宏定义的位置。
例子:对于\textsuperscript
,您可以首先检查它是否未在任何包中定义(可能会发生,具体取决于您包含的包集),然后在texdoc source2e
:
您可以对找到的定义重复该过程,即此处\DeclareRobustCommand
,\selectfont
,\m@th
,\ensuremath
,\mbox
,\fontsize
,,\sf@size
\z@
并重复你在其定义中找到的东西,等等。当然,许多这些定义(例如的定义\sf@size
)只有在其他定义或特定语境下的预期下才有意义,所以你也需要理解它们。