
Cuando uso renewcommand
, a veces deseo verificar primero cuál es el código fuente original de un comando en particular, como chapter
era antes de cambiarlo, para poder estar seguro de no realizar cambios no deseados. Cuando tengo muchos paquetes cargados, a veces buscar en el código fuente de un paquete para encontrar la respuesta no es tan sencillo. ¿Existe alguna forma de imprimir el código fuente utilizado para definir un comando en particular?
Respuesta1
Utilice
\meaning
,\show
para obtener el significado de una macro. (Ver TeXbook o TeX por tema)Utilice
\the
,\showthe
para obtener el valor de los registros. (Ver TeXbook o TeX por tema)Utilice
\tracingcommands
(\tracingmacros
consulte TeXbook o TeX por tema) ytrace
paquete para obtener más información en el archivo de registro.Utilice el comando o truco de eTeX
\ifdefined
(\ifcsname
consulte el manual de eTeX) o LaTeX\@ifundefined
(consultesource2e
)\ifx\foo\undefined
para comprobar si una macro está definida.Utilice el comando LaTeX
\CheckCommand
(descrito enclsguide
) para verificar la definición de una macro LaTeX.
Respuesta2
Sí, usar \show\mycommand
imprimirá la definición de macro \mycommand
en la consola (su .log
archivo).
Por ejemplo, compilar
\documentclass{book}
\begin{document}
test
\show\chapter
\end{document}
salidas
> \chapter=\long macro:
->\if@openright \cleardoublepage \else \clearpage \fi \thispagestyle {plain}\gl
obal \@topnum \z@ \@afterindentfalse \secdef \@chapter \@schapter .
a la consola. Tenga en cuenta que la alineación de la salida no es la misma que cuando se escribe código. Como tal, a veces es más fácil ver la estructura exacta (si tiene la sangría adecuada) cuando se ve la fuente directamente. Aquí está la entrada fuente debook.cls
para \chapter
:
\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
\thispagestyle{plain}%
\global\@topnum\z@
\@afterindentfalse
\secdef\@chapter\@schapter}
También tenga en cuenta que el uso \show
solo muestra un nivel de expansión para la macro dada. Usando lo anterior como ejemplo, uno tendría que emitir (digamos) \show\@chapter
y \show\@schapter
(con la modificación del código de categoría adecuada mediante \makeatletter
y \makeatother
pares) para ver el significado de llamadas posteriores dentro de \chapter
.
\meaning
se puede utilizar en un contexto similar.
Desde elLibro de texto(pág. 10):
Puede mostrar el significado de una secuencia de control mientras ejecuta TeX. Si escribe
\show\cs
dónde\cs
está cualquier secuencia de control, TeX responderá con su significado actual. Por ejemplo,\show\input
da como resultado> \input=\input.
, porque\input
es primitivo. Por otra parte,\show\thinspace
los rendimientos> \thinspace=macro: ->\kern .16667em .
Esto significa que
\thinspace
se ha definido como una abreviatura de\kern .16667em
. Al escribir\show\kern
puedes verificar que\kern
es primitivo. Los resultados\show
aparecen en su terminal y en el.log
archivo que obtiene después de ejecutar TeX.
Respuesta3
Puedes usartexdef
para imprimir definiciones en una terminal. Para usarlo con definiciones de LaTeX, debe llamarlo con la opción -t latex
o usar el alias correspondiente latexdef
(si el alias está definido en su sistema).
Para comprobar la definición, \chapter
puede emitir texdef -t latex -c book chapter
. La razón por la que tienes que invocarlo con la opción -c book
es que lo \chapter
que pareces estar buscando está definido en esa clase. Para comprobar también en qué archivo se encuentra la definición, agregue la opción -f
o -F
para la ruta completa. En mi sistema texdef -t latex -c book -F chapter
regresa
\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
Si deseas ver las opciones disponibles texdef
u obtener más información al respecto, puedes acceder a su documentación con texdoc texdef
.