Mostrar fuente para un comando

Mostrar fuente para un comando

Cuando uso renewcommand, a veces deseo verificar primero cuál es el código fuente original de un comando en particular, como chapterera 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, \showpara obtener el significado de una macro. (Ver TeXbook o TeX por tema)

  • Utilice \the, \showthepara obtener el valor de los registros. (Ver TeXbook o TeX por tema)

  • Utilice \tracingcommands( \tracingmacrosconsulte TeXbook o TeX por tema) y tracepaquete para obtener más información en el archivo de registro.

  • Utilice el comando o truco de eTeX \ifdefined( \ifcsnameconsulte el manual de eTeX) o LaTeX \@ifundefined(consulte source2e) \ifx\foo\undefinedpara comprobar si una macro está definida.

  • Utilice el comando LaTeX \CheckCommand(descrito en clsguide) para verificar la definición de una macro LaTeX.

Respuesta2

Sí, usar \show\mycommandimprimirá la definición de macro \mycommanden la consola (su .logarchivo).

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.clspara \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 \showsolo muestra un nivel de expansión para la macro dada. Usando lo anterior como ejemplo, uno tendría que emitir (digamos) \show\@chaptery \show\@schapter(con la modificación del código de categoría adecuada mediante \makeatlettery \makeatotherpares) para ver el significado de llamadas posteriores dentro de \chapter.

\meaningse 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\csdónde \csestá cualquier secuencia de control, TeX responderá con su significado actual. Por ejemplo, \show\inputda como resultado > \input=\input., porque \inputes primitivo. Por otra parte, \show\thinspacelos rendimientos

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

Esto significa que \thinspacese ha definido como una abreviatura de \kern .16667em. Al escribir \show\kernpuedes verificar que \kern es primitivo. Los resultados \showaparecen en su terminal y en el .logarchivo que obtiene después de ejecutar TeX.

Respuesta3

Puedes usartexdefpara imprimir definiciones en una terminal. Para usarlo con definiciones de LaTeX, debe llamarlo con la opción -t latexo usar el alias correspondiente latexdef(si el alias está definido en su sistema).

Para comprobar la definición, \chapterpuede emitir texdef -t latex -c book chapter. La razón por la que tienes que invocarlo con la opción -c bookes que lo \chapterque pareces estar buscando está definido en esa clase. Para comprobar también en qué archivo se encuentra la definición, agregue la opción -fo -Fpara la ruta completa. En mi sistema texdef -t latex -c book -F chapterregresa

\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 texdefu obtener más información al respecto, puedes acceder a su documentación con texdoc texdef.

información relacionada