Exibir origem de um comando

Exibir origem de um comando

Ao usar renewcommand, às vezes desejo primeiro verificar qual é o código-fonte original de um comando específico, como chapterera antes de alterá-lo, para ter certeza de que não farei alterações indesejadas. Quando tenho muitos pacotes carregados, às vezes olhar o código-fonte de um pacote para encontrar a resposta não é tão simples. Existe uma maneira de imprimir o código-fonte usado para definir um comando específico?

Responder1

  • Use \meaning, \showpara obter o significado de uma macro. (Veja TeXbook ou TeX por tópico)

  • Use \the, \showthepara obter o valor dos registros. (Veja TeXbook ou TeX por tópico)

  • Use \tracingcommands, \tracingmacros(Veja TeXbook ou TeX por Tópico) e tracepacote para obter mais informações no arquivo de log.

  • Use o comando eTeX \ifdefined, \ifcsname(veja o manual do eTeX) ou o comando LaTeX \@ifundefined(veja source2e) ou \ifx\foo\undefinedtruque para verificar se uma macro está definida.

  • Use o comando LaTeX \CheckCommand(descrito em clsguide) para verificar a definição de uma macro LaTeX.

Responder2

Sim, usar \show\mycommandimprimirá a definição da macro \mycommandno console (seu .logarquivo).

Por exemplo, compilar

\documentclass{book}
\begin{document}
test
\show\chapter
\end{document}

saídas

> \chapter=\long macro:
->\if@openright \cleardoublepage \else \clearpage \fi \thispagestyle {plain}\gl
obal \@topnum \z@ \@afterindentfalse \secdef \@chapter \@schapter .

para o console. Observe que o alinhamento da saída não é o mesmo de quando ela é digitada no código. Como tal, às vezes é mais fácil ver a estrutura exata (se recuada corretamente) ao visualizar a fonte diretamente. Aqui está a entrada de origem debook.clspara \chapter:

\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
                    \thispagestyle{plain}%
                    \global\@topnum\z@
                    \@afterindentfalse
                    \secdef\@chapter\@schapter}

Observe também que using \showmostra apenas um nível de expansão para a macro fornecida. Usando o exemplo acima, seria necessário emitir (digamos) \show\@chaptere \show\@schapter(com a modificação apropriada do código de categoria via \makeatlettere \makeatotherpares) para ver o significado das chamadas subsequentes dentro de \chapter.

\meaningpode ser usado em um contexto semelhante.


DeLivro TeX(pág. 10):

Você pode exibir o significado de uma sequência de controle enquanto executa o TeX. Se você digitar \show\csonde \csestá qualquer sequência de controle, o TeX responderá com seu significado atual. Por exemplo, \show\inputresulta em > \input=\input., porque \inputé primitivo. Por outro lado, \show\thinspaceos rendimentos

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

Isso significa que \thinspacefoi definido como uma abreviatura de \kern .16667em. Digitando \show\kernvocê pode verificar se \kern é primitivo. Os resultados \showaparecem no seu terminal e no .logarquivo que você obtém após executar o TeX.

Responder3

Você pode usartexdefpara imprimir definições em um terminal. Para usá-lo com definições LaTeX você deve chamá-lo com a opção -t latexou usar o alias correspondente latexdef(se o alias estiver definido em seu sistema).

Para verificar a definição, \chaptervocê pode emitir texdef -t latex -c book chapter. A razão pela qual você deve invocá-lo com a opção -c booké que o que \chaptervocê parece estar procurando está definido nessa classe. Para verificar também em qual arquivo a definição se encontra adicione a opção -fou -Fpara o caminho completo. No meu sistema texdef -t latex -c book -F chapterretorna

\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

Se quiser ver as opções disponíveis texdefou saber mais sobre ele você pode acessar sua documentação com texdoc texdef.

informação relacionada