tags:

views:

77

answers:

4

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?

+2  A: 

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
Alexey Malistov
+1  A: 

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 }
Joseph Wright
But your examples can clearly be analysed. `\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 to `c{\it de}`.
Debilski
In this case yes, but in a real use we could have several definitions for \demo and it used in several places. The point I was getting at is that each macro does not have a fixed replacement text, and so you can't just replace things with their code. Of course TeX itself does replace things if they are macros, but not in "one shot": each token is examined as it is needed.
Joseph Wright
+3  A: 

Try the Selective Macro Expander.

lhf
+2  A: 

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.

Norman Ramsey