使用时renewcommand
,有时我希望先检查某个特定命令的原始源代码(例如chapter
在我更改它之前),这样我就可以确定我没有做出意外的更改。当我加载了很多包时,有时查看包的源代码来找到答案并不那么简单。有没有办法打印出用于定义特定命令的源代码?
答案1
使用
\meaning
,\show
来获取宏的含义。(参见 TeXbook 或 TeX by Topic)使用
\the
,\showthe
获取寄存器的值。(参见 TeXbook 或 TeX by Topic)使用
\tracingcommands
、\tracingmacros
(参见 TeXbook 或 TeX by Topic)和trace
包来在日志文件中获取更多信息。使用 eTeX 的
\ifdefined
(\ifcsname
参见 eTeX 手册)或 LaTeX 命令\@ifundefined
(参见source2e
)或\ifx\foo\undefined
技巧来检查宏是否已定义。使用 LaTeX 命令
\CheckCommand
(如中所述clsguide
)检查 LaTeX 宏的定义。
答案2
是的,使用\show\mycommand
将会把宏定义打印\mycommand
到控制台(您的.log
文件)。
例如,编译
\documentclass{book}
\begin{document}
test
\show\chapter
\end{document}
输出
> \chapter=\long macro:
->\if@openright \cleardoublepage \else \clearpage \fi \thispagestyle {plain}\gl
obal \@topnum \z@ \@afterindentfalse \secdef \@chapter \@schapter .
到控制台。请注意,输出的对齐方式与在代码中输入时不同。因此,有时直接查看源代码更容易看到确切的结构(如果缩进正确)。以下是来自book.cls
为了\chapter
:
\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
\thispagestyle{plain}%
\global\@topnum\z@
\@afterindentfalse
\secdef\@chapter\@schapter}
还请注意,使用\show
仅显示给定宏的一个扩展级别。使用上面的示例,必须发出(例如)\show\@chapter
和(通过和对进行\show\@schapter
适当的类别代码修改)才能查看 中后续调用的含义。\makeatletter
\makeatother
\chapter
\meaning
可以在类似的上下文中使用。
来自TeX 书(第 10 页):
您可以在运行 TeX 时显示控制序列的含义。如果您输入
\show\cs
是\cs
任何控制序列,TeX 将响应其当前含义。例如,\show\input
结果为> \input=\input.
,因为\input
是原始的。另一方面,\show\thinspace
产生> \thinspace=macro: ->\kern .16667em .
这意味着
\thinspace
已被定义为 的缩写\kern .16667em
。通过输入,\show\kern
您可以验证\kern
是原始的。 的结果出现在您的终端上以及运行 TeX 后获得的文件\show
中。.log
答案3
您可以使用texdef
在终端中打印定义。要将其与 LaTeX 定义一起使用,您必须使用选项调用它-t latex
或使用相应的别名latexdef
(如果您的系统上定义了别名)。
要检查 的定义,\chapter
您可以发出texdef -t latex -c book chapter
。您必须使用 选项调用它的原因-c book
是\chapter
您似乎正在寻找的 已在那个类中定义。要检查在哪个文件中可以找到定义,请添加选项-f
或-F
获取完整路径。在我的系统上texdef -t latex -c book -F chapter
返回
\chapter first defined in "/usr/local/texlive/2011/texmf-dist/tex/latex/base/book.cls".
\chapter:
\long macro:->\if@openright \cleardoublepage \else \clearpage \fi \thispagestyle {plain}\global \@topnum \z@ \@afterindentfalse \secdef \@chapter \@schapter
如果您想要查看可用选项texdef
或了解更多信息,您可以通过 访问其文档texdoc texdef
。