Отображение источника команды

Отображение источника команды

При использовании 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}

Также обратите внимание, что using \showпоказывает только один уровень расширения для данного макроса. Используя вышеприведенный пример, нужно было бы выполнить (скажем) \show\@chapterи \show\@schapter(с соответствующей модификацией кода категории через пары \makeatletterи \makeatother), чтобы увидеть значение последующих вызовов в пределах \chapter.

\meaningможет использоваться в аналогичном контексте.


ИзКнига TeX(стр. 10):

Вы можете отобразить значение управляющей последовательности во время работы TeX. Если вы введете \show\cswhere \csis any control sequence, TeX ответит ее текущим значением. Например, \show\inputрезультат в > \input=\input., потому что \inputпримитивен. С другой стороны, \show\thinspaceyields

> \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.

Связанный контент