我可以从 texdef 中获取定义的行号吗?

我可以从 texdef 中获取定义的行号吗?

使用texdef它可以轻松找到 (La)TeX 命令的定义。它可以显示给定命令的定义是什么以及在哪个文件中找到它。有时了解它显示的定义的行号也会很方便。这可以用吗texdef

举例来说\sectiontexdef -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 }

为了方便获取\sectionarticle.cls 中的定义,获取定义开始的行号会很方便,这样我就可以在编辑器中打开文件并转到该行号,而不必搜索文件。

答案1

texdef2012/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的:其中许多是隐式定义的,即使程序已扩展为扫描输入文件,也无法在特定行中找到它们的定义。

相关内容