Is it possible to see the output of the TeX ‘pre-processor’, i. e. the intermediate step before the actual output is done but with all user-defined macros replaced and only a subset of TeX primitives left?
Or is there no such intermediate step?
Is it possible to see the output of the TeX ‘pre-processor’, i. e. the intermediate step before the actual output is done but with all user-defined macros replaced and only a subset of TeX primitives left?
Or is there no such intermediate step?
Write
\edef\xxx{Any text with any commands. For example, $\phantom x$.}
And then for output in the log-file
\show\xxx
or for output in your document
\meaning\xxx
There is no "pre-processor" in TeX. The replacement text for any control sequence at any stage can vary (this is used for a lot of things!). For example
\def\demo{\def\demo{cde}}
\demo
will first define \demo in one way and then change it. In the same way, you can redirect TeX primitives. For example, the LaTeX kernel moves \input to an internal position and alters it. A simplified version:
\let\@@input\input
\def\input#1{\@@input#1 }
Try the Selective Macro Expander.
TeX has a lot of difference tracing tools built in, including tracing macro expansion. This only traces live macros as they are actually expanded, but it's still quite useful. Full details in The TeXbook and probably elsewhere.
When I'm trying to debug a macro problem I generally just use the big hammer:
\tracingall\tracingonline
then I dig in the output or the .log file for what I want to know.
\tracingonline
requires a parameter. (But \tracingall
should already cover everything, no?) –
Mcgann There's a lot of discussion of this issue on this question at tex.SE, and this question. But I'll take the opportunity to note that the best answer (IMO) is to use the de-macro
program, which is a python script that comes with TeXLive. It's quite capable, and can handle arguments as well as simple replacements.
To use it, you move the macros that you want expanded into a <something>-private.sty
file, and include it into your document with \usepackage{<something>-private}
, then run de-macro <mydocument>
. It spits out <mydocument>-clean.tex
, which is the same as your original, but with your private macros replaced by their more basic things.
© 2022 - 2024 — McMap. All rights reserved.
\def\demo{\def\demo{cde}}\demo
evaluates to\def\demo{\def\demo{cde}}\def\demo{cde}
and because there are no evaluations possible after this step, we can delete all\def
statements and thus have it reduced to ∅. —\def\demo{\def\demo{c{\it de}}}\demo\demo
however would eventually evaluate toc{\it de}
. – Luncheon