
Ao usar renewcommand
, às vezes desejo primeiro verificar qual é o código-fonte original de um comando específico, como chapter
era 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
,\show
para obter o significado de uma macro. (Veja TeXbook ou TeX por tópico)Use
\the
,\showthe
para obter o valor dos registros. (Veja TeXbook ou TeX por tópico)Use
\tracingcommands
,\tracingmacros
(Veja TeXbook ou TeX por Tópico) etrace
pacote 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
(vejasource2e
) ou\ifx\foo\undefined
truque para verificar se uma macro está definida.Use o comando LaTeX
\CheckCommand
(descrito emclsguide
) para verificar a definição de uma macro LaTeX.
Responder2
Sim, usar \show\mycommand
imprimirá a definição da macro \mycommand
no console (seu .log
arquivo).
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.cls
para \chapter
:
\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
\thispagestyle{plain}%
\global\@topnum\z@
\@afterindentfalse
\secdef\@chapter\@schapter}
Observe também que using \show
mostra apenas um nível de expansão para a macro fornecida. Usando o exemplo acima, seria necessário emitir (digamos) \show\@chapter
e \show\@schapter
(com a modificação apropriada do código de categoria via \makeatletter
e \makeatother
pares) para ver o significado das chamadas subsequentes dentro de \chapter
.
\meaning
pode 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\cs
onde\cs
está qualquer sequência de controle, o TeX responderá com seu significado atual. Por exemplo,\show\input
resulta em> \input=\input.
, porque\input
é primitivo. Por outro lado,\show\thinspace
os rendimentos> \thinspace=macro: ->\kern .16667em .
Isso significa que
\thinspace
foi definido como uma abreviatura de\kern .16667em
. Digitando\show\kern
você pode verificar se\kern
é primitivo. Os resultados\show
aparecem no seu terminal e no.log
arquivo que você obtém após executar o TeX.
Responder3
Você pode usartexdef
para imprimir definições em um terminal. Para usá-lo com definições LaTeX você deve chamá-lo com a opção -t latex
ou usar o alias correspondente latexdef
(se o alias estiver definido em seu sistema).
Para verificar a definição, \chapter
você 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 \chapter
você parece estar procurando está definido nessa classe. Para verificar também em qual arquivo a definição se encontra adicione a opção -f
ou -F
para o caminho completo. No meu sistema texdef -t latex -c book -F chapter
retorna
\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 texdef
ou saber mais sobre ele você pode acessar sua documentação com texdoc texdef
.