2010-03-17 8 views

Respuesta

5

Escribir

\edef\xxx{Any text with any commands. For example, $\phantom x$.} 

Y a continuación, para la salida en el archivo de registro

\show\xxx 

o para la salida en el documento

\meaning\xxx 
3

No hay un "pre-procesador" en Texas. El texto de reemplazo para cualquier secuencia de control en cualquier etapa puede variar (¡esto se usa para muchas cosas!). Por ejemplo,

\def\demo{\def\demo{cde}} 
\demo 

primero definirá \ demo de una manera y luego la cambiará. De la misma manera, puedes redirigir primitivas TeX. Por ejemplo, el kernel LaTeX mueve \ input a una posición interna y lo altera. Una versión simplificada:

\let\@@input\input 
\def\input#1{\@@input#1 } 
+0

Pero sus ejemplos pueden ser claramente analizados. '\ def \ demo {\ def \ demo {cde}} \ demo' evalúa como' \ def \ demo {\ def \ demo {cde}} \ def \ demo {cde} 'y porque no hay evaluaciones posibles después de esto paso, podemos eliminar todas las declaraciones '\ def' y así tenerlo reducido a ∅. - '\ def \ demo {\ def \ demo {c {\ it de}}} \ demo \ demo' sin embargo, eventualmente se evaluaría como' c {\ it de} '. – Debilski

+0

En este caso sí, pero en un uso real podríamos tener varias definiciones para \ demo y se usa en varios lugares. El punto al que me refería es que cada macro no tiene un texto de reemplazo fijo, por lo que no puedes simplemente reemplazar las cosas con su código. Por supuesto, TeX sí reemplaza las cosas si son macros, pero no en "una sola vez": cada token se examina según sea necesario. –

4
+0

El enlace está roto. – holdenlee

+0

@holdenlee, intente https://web.archive.org/web/20100310064605/http://www.astro.indiana.edu/~jthorn/software.html. – lhf

4

TeX tiene muchas herramientas de seguimiento de diferencias integradas, incluida la expansión de macro de rastreo. Esto solo rastrea las macros en vivo, ya que en realidad están expandidas, pero sigue siendo bastante útil. Todos los detalles en El TeXbook y probablemente en otro lugar.

Cuando estoy tratando de depurar un problema macro por lo general sólo tiene que utilizar el martillo grande :

\tracingall\tracingonline 

entonces cavar en la salida o el archivo .log para lo que yo quiero saber.

+0

Según [esta respuesta] (http://tex.stackexchange.com/a/60494/15665), '\ tracingonline' requiere un parámetro. (Pero '\ tracingall' ya debería cubrir todo, ¿no?) –

0

Hay mucha discusión sobre este tema en this question en tex.SE y this question. Pero aprovecharé la oportunidad para notar que la mejor respuesta (IMO) es usar el programa de-macro, que es un script de Python que viene con TeXLive. Es bastante capaz y puede manejar argumentos y reemplazos simples.

Para usarlo, usted pasa las macros que desea que se expandió en un archivo <something>-private.sty, e incluirla en el documento con \usepackage{<something>-private}, a continuación, ejecutar de-macro <mydocument>. Escupe <mydocument>-private.tex, que es lo mismo que tu original, pero con tus macros privadas reemplazadas por sus elementos más básicos.

Cuestiones relacionadas