コマンドのソースを表示する

コマンドのソースを表示する

を使用する場合renewcommand、変更する前に、 などの特定のコマンドの元のソース コードがどのようなものであったかをまず確認しchapter、意図しない変更が行われていないことを確認したい場合があります。多数のパッケージがロードされている場合、パッケージのソース コードを調べて答えを見つけるのは簡単ではない場合があります。特定のコマンドを定義するために使用されたソース コードを印刷する方法はありますか?

答え1

  • マクロの意味を知るには\meaning、を使用します。(TeXbook または TeX by Topic を参照してください)\show

  • レジスタの値を取得するには\the、を使用します。(TeXbook または TeX by Topic を参照してください)\showthe

  • ログ ファイルで詳細情報を取得するには、 、\tracingcommands( \tracingmacrosTeXbook または 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}

また、 を使用すると、指定されたマクロの展開レベルが 1 つだけ表示されることに注意してください。上記を例として使用すると、内の後続の呼び出しの意味を確認するには、 (たとえば) および (およびのペアによる適切なカテゴリ コードの変更付き)\showを発行する必要があります。\show\@chapter\show\@schapter\makeatletter\makeatother\chapter

\meaning同様の文脈で使用できます。


からTeXブック(p 10):

TeXの実行中に制御シーケンスの意味を表示することができます。 が制御シーケンスである場合、 と入力すると\show\cs\csTeXはその現​​在の意味を返します。たとえば、 はプリミティブであるため、\show\inputになります。一方、は になります。> \input=\input.\input\show\thinspace

> \thinspace=macro:
->\kern .16667em .

これは、\thinspaceが の省略形として定義されている ことを意味します\kern .16667em。 と入力すると、 がプリミティブである\show\kernことを確認できます\kern 。 の結果は、\showターミナルと、TeX を実行した後に取得するファイルに表示されます.log

答え3

使用できますtexdef定義を端末に印刷します。LaTeX 定義で使用するには、オプションを指定して呼び出す-t latexか、対応するエイリアスlatexdef(エイリアスがシステムで定義されている場合) を使用する必要があります。

の定義を確認するには、\chapterを発行しますtexdef -t latex -c book chapter。 オプションを指定して呼び出す必要があるのは、探している がそのクラスで定義されている-c bookためです。定義がどのファイルにあるかを確認するには、フルパスに\chapterオプション-fまたは を追加します。私のシステムでは、-Ftexdef -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

関連情報