![我如何找到乳胶宏的定义?](https://linux22.com/image/368427/%E6%88%91%E5%A6%82%E4%BD%95%E6%89%BE%E5%88%B0%E4%B9%B3%E8%83%B6%E5%AE%8F%E7%9A%84%E5%AE%9A%E4%B9%89%EF%BC%9F.png)
所以我开始对 LaTeX 更加熟悉了,虽然还是个初学者,但已经足够熟练地尝试 etoolbox 包中可怕的 patchcmd。但让我困惑的是人们如何找出原始宏(尤其是原生 latex 宏)的定义,以便对其进行修补。
例如,我已经看到可以\listoftables
按照类似这样的方式修改内置功能:
\documentclass{report}
\usepackage{etoolbox}
\usepackage{float}
\floatstyle{ruled}
\newfloat{algorithm}{tbp}{loa}
\providecommand{\algorithmname}{Algorithm}
\floatname{algorithm}{\protect\algorithmname}
\let \listofalgorithms\listoftables
\patchcmd{\listofalgorithms}{\listtablename}{\algorithmname}{}{}
\patchcmd{\listofalgorithms}{\listtablename}{\algorithmname}{}{}
\patchcmd{\listofalgorithms}{\listtablename}{\algorithmname}{}{}
\patchcmd{\listofalgorithms}{lot}{loa}{}{}
\begin{document}
\listofalgorithms
\begin{algorithm}
Step 1: Do something complicated \\
Step 2: Do something even more complicated \\
\caption{Complicated algorithm}
\label{algo:complicated}
\end{algorithm}
\end{document}
通过一些实验,我发现第一patchcmd
行似乎正在改变列表的标题,但我不知道其他两行的作用,因为我不知道的原始定义\listoftables
。
除了强制性的谷歌搜索之外,我还检查了:
我在我的 MikTeX 发行版中查找了该字符串的文件
listoftables
,但没有找到任何似乎定义该宏的东西。这LateX2e 文档但只找到参考文献而没有定义
我发现有一个名为 texdef 的包可以使用(在终端中),但由于某种原因,以下命令:
latexdef -c report listoftables -s
latexdef -c report section -s
两者都给出了undefined
答案。
答案1
与往常一样,在发布问题之前最后一次尝试寻找答案会得到答案。
在乳胶文档中可以使用一些命令来显示宏的来源:
\show\listoftables
将打印出的定义listoftables
到日志中\meaning\listoftables
将其打印在文档中- 更多内容可参见这个答案作者 Leo Liu
为了让 texdef 工作,我必须使用标志指定 TeX 格式-t
,同时还必须在 MikTeX 中安装 currfile 包。我删除了 -s(用于查看原始源代码),因为这对我的目的来说没有必要。
latexdef -t latex -c report -f listoftables
答案2
打字后texdoc source2e
您将获得超过 600 页的内容,其中包含所有基本的 LaTeX 代码定义。对于包和其他类中使用的宏定义,texdoc class/package
通常会显示它们的代码,具体取决于作者提供的文档。