
使用時renewcommand
,有時我希望首先檢查特定命令的原始原始程式碼,例如chapter
在更改它之前,這樣我就可以確定我不會進行意外的更改。當我加載了很多包時,有時查看包的源代碼來找到答案並不是那麼簡單。有沒有辦法列印出用於定義特定命令的源代碼?
答案1
使用
\meaning
,\show
來取得宏的意思。 (按主題查看 TeXbook 或 TeX)使用
\the
,\showthe
來取得暫存器的值。 (按主題查看 TeXbook 或 TeX)使用
\tracingcommands
,\tracingmacros
(請參閱 TeXbook 或 TeX 按主題)和trace
package 來取得日誌檔案中的更多資訊。使用 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
and (通過和對\show\@schapter
進行適當的類別代碼修改)才能查看 中後續調用的含義。\makeatletter
\makeatother
\chapter
\meaning
可以在類似的上下文中使用。
來自TeX 書(第 10 頁):
您可以在執行 TeX 時顯示控制序列的含義。如果您鍵入
\show\cs
where\cs
是任何控制序列,TeX 將以其目前意義進行回應。例如,\show\input
結果為> \input=\input.
,因為\input
是原始的。另一方面,\show\thinspace
收益率> \thinspace=macro: ->\kern .16667em .
這意味著
\thinspace
已被定義為 的縮寫\kern .16667em
。透過輸入,\show\kern
您可以驗證它\kern
是否是原始的。結果\show
顯示在您的終端機上以及.log
執行 TeX 後獲得的文件中。
答案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
。