顯示命令的來源

顯示命令的來源

使用時renewcommand,有時我希望首先檢查特定命令的原始原始程式碼,例如chapter在更改它之前,這樣我就可以確定我不會進行意外的更改。當我加載了很多包時,有時查看包的源代碼來找到答案並不是那麼簡單。有沒有辦法列印出用於定義特定命令的源代碼?

答案1

  • 使用\meaning,\show來取得宏的意思。 (按主題查看 TeXbook 或 TeX)

  • 使用\the,\showthe來取得暫存器的值。 (按主題查看 TeXbook 或 TeX)

  • 使用\tracingcommands, \tracingmacros(請參閱 TeXbook 或 TeX 按主題)和tracepackage 來取得日誌檔案中的更多資訊。

  • 使用 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\@chapterand (通過和對\show\@schapter進行適當的類別代碼修改)才能查看 中後續調用的含義。\makeatletter\makeatother\chapter

\meaning可以在類似的上下文中使用。


來自TeX 書(第 10 頁):

您可以在執行 TeX 時顯示控制序列的含義。如果您鍵入\show\cswhere\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

相關內容