我如何找到乳胶宏的定义?

我如何找到乳胶宏的定义?

所以我开始对 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

texdef 的文档可以在这里找到这里。我还发现了很多 latex 宏的定义乳胶基底特别是在类文档

答案2

打字后texdoc source2e您将获得超过 600 页的内容,其中包含所有基本的 LaTeX 代码定义。对于包和其他类中使用的宏定义,texdoc class/package通常会显示它们的代码,具体取决于作者提供的文档。

相关内容