1  The eval feature

Consider a TeX document circle.tex with the following contents:

\input eval4tex  % defines the \eval macro 
 
The ratio of the circumference of a circle 
to its diameter is 
\eval{ 

;following prints pi, because cos(pi) = -1
(display (acos -1))

}. 
 
\bye 

We have chosen a plain TeX document for our example, but the same approach works for LaTeX documents too.

circle.tex first inputs the TeX macro file eval4tex.tex, which is available in the eval4tex distribution, and which defines a TeX macro called \eval. This \eval macro is used in the body of circle.tex and its argument is some Scheme code enclosed in braces.

Now run TeX on circle.tex:

tex circle 

(If circle.tex were a LaTeX file, you would use latex circle here.) This creates an auxiliary file called circle.eval4tex that extracts the \eval-embedded Scheme code from circle.tex.

Now evaluate the Scheme file circle.eval4tex. For example, with Racket, you could do

racket -f circle.eval4tex 

This produces an auxiliary TeX file circle‑Z‑E‑1.tex containing an appropriate TeX replacement for the \eval’d Scheme code in circle.tex. In general, you will get an aux TeX file for each \eval in the source document, and if the source document is named circle.tex, the aux files are named circle‑Z‑E‑n.tex, where n = 1, 2, ….

Re-running TeX on circle.tex will now insert the aux file circle‑Z‑E‑1.tex at the point of the \eval, so the final DVI output, circle.dvi, looks like:

The ratio of the circumference of a circle to its diameter is 3.141592653589793.

To summarize, we did

tex circle; racket -f circle.eval4tex; tex circle 

The first call to tex wrote out an aux file; the call to eval4tex processed this aux file to produce one or more other aux files; and the final call to tex slurped these latter aux files into the document.

This strategy is quite common in the TeX world. The popular TeX-support programs BibTeX and MakeIndex, which generate bibliographies and indices respectively, both operate this way.

TeX2page

You can also run the program TeX2page [5] on circle.tex to get an HTML version of the document with the same content. As TeX2page is written in Scheme, it will automatically convert the \evals in circle.tex without requiring you to call Scheme separately.

tex2page circle 

N.B. TeX documents intended to be processed by TeX2page typically load the macro file tex2page.tex. Please see the TeX2page documentation for more details.