2010-03-17 18 views

Répondre

5

Ecrire

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

Et pour la sortie dans le fichier journal

\show\xxx 

ou pour la sortie dans votre document

\meaning\xxx 
3

Il n'y a pas "pré-processeur" dans Texas. Le texte de remplacement pour n'importe quelle séquence de contrôle peut varier (ceci est utilisé pour beaucoup de choses!). Par exemple,

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

va d'abord définir \ démo d'une certaine façon, puis le modifier. De la même manière, vous pouvez rediriger les primitives TeX. Par exemple, le noyau LaTeX déplace \ input vers une position interne et l'altère. Une version simplifiée:

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

Mais vos exemples peuvent être clairement analysés. '\ def \ démo {\ def \ démo {cde}} \ demo' évalue à \ def \ démo {\ def \ démo {cde}} \ def \ démo {cde}' et parce qu'il n'y a pas d'évaluation possible après étape, nous pouvons supprimer toutes les instructions 'def 'et ainsi l'avoir réduit à ∅. - '\ def \ demo {\ def \ démo {c {\ it de}}} \ demo \ demo' mais finirait par évaluer' c {\ it de} '. – Debilski

+0

Dans ce cas oui, mais dans une utilisation réelle, nous pourrions avoir plusieurs définitions pour \ demo et utilisé à plusieurs endroits. Le point que je voulais savoir, c'est que chaque macro n'a pas de texte de remplacement fixe, et donc vous ne pouvez pas simplement remplacer les choses avec leur code. Bien sûr, TeX lui-même remplace les choses si elles sont des macros, mais pas en "one shot": chaque jeton est examiné comme il le faut. –

4
+0

Le lien est cassé. – holdenlee

+0

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

4

TeX intègre de nombreux outils de suivi des différences, notamment l'extension des macros de suivi. Cela ne fait que retracer les macros en direct car elles sont réellement développées, mais c'est quand même assez utile. Tous les détails dans Le TeXbook et probablement ailleurs.

Quand je suis en train de déboguer un problème macro général, je viens d'utiliser le gros marteau:

\tracingall\tracingonline 

puis je creuse dans la sortie ou le fichier .log pour ce que je veux savoir.

+0

Selon [cette réponse] (http://tex.stackexchange.com/a/60494/15665), '\ tracingonline' nécessite un paramètre. (Mais '\ tracingall' devrait déjà couvrir tout, non?) –

0

Il y a beaucoup de discussion de ce problème sur this question à tex.SE et this question. Mais je profite de l'occasion pour noter que la meilleure réponse (IMO) est d'utiliser le programme de-macro, qui est un script python fourni avec TeXLive. C'est tout à fait capable, et peut gérer des arguments aussi bien que des remplacements simples. Pour l'utiliser, vous devez déplacer les macros que vous souhaitez développer dans un fichier <something>-private.sty et l'inclure dans votre document avec \usepackage{<something>-private}, puis exécuter de-macro <mydocument>. Il crache <mydocument>-private.tex, qui est le même que votre original, mais avec vos macros privées remplacées par leurs choses plus basiques.