使用texdef
它可以轻松找到 (La)TeX 命令的定义。它可以显示给定命令的定义是什么以及在哪个文件中找到它。有时了解它显示的定义的行号也会很方便。这可以用吗texdef
?
举例来说\section
。texdef -t latex -F section
回报
\section first defined in "/usr/local/texlive/2011/texmf-dist/tex/latex/base/article.cls".
\section:
\long macro:->\@startsection {section}{1}{\z@ }{-3.5ex \@plus -1ex \@minus -.2ex}{2.3ex \@plus .2ex}{\normalfont \Large \bfseries }
为了方便获取\section
article.cls 中的定义,获取定义开始的行号会很方便,这样我就可以在编辑器中打开文件并转到该行号,而不必搜索文件。
答案1
从texdef
2012/05/02 开始,您可以使用--source
/-s
选项,该选项使脚本在源文件中查找原始定义(包括行号)。如果没有这个选项,它只会\show
在 (La)TeX 调用中使用。请注意,它-s
并不兼容所有宏定义,只兼容普通格式的宏定义。可能找不到逐字宏等。
$ latexdef -s section
% article.cls, line 312:
\newcommand\section{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries}}
如果您还使用-F
选项,则会显示完整路径:
$ latexdef -F -s section
% /usr/local/texlive/2011/texmf-dist/tex/latex/base/article.cls, line 312:
\newcommand\section{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries}}
这里latexdef
相当于texdef -t latex
。您还可以按照 INSTALL 文件中所述创建从latexdef
到 的符号链接texdef
。不幸的是,TeX Live 不包含符号链接。
答案2
正如在回答中解释的那样如何使 texdef 返回缩进的定义? texdef
不读取文件,但使用 TeX 与相应的文件,并\show\foo
在调用时执行
texdef -t latex foo
(可能与其他命令行选项一起使用)。宏定义并不总是用\def
或执行\newcommand
的:其中许多是隐式定义的,即使程序已扩展为扫描输入文件,也无法在特定行中找到它们的定义。