Everything of course depends on what the Scheme code
inside the \eval
s is. As above, one can use Scheme
as a scratchpad to perform calculations that are beyond
TeX. But one can also use \eval
to define a
specification language in Scheme, and then make
effective use of that language in subsequent
\eval
s.
In the following, we use a picture language
called PicScheme, which is defined in Scheme. The
operators of PicScheme generate TeX and
MetaPost [1, 2] code fragments, but
their true power lies in their allowing the use of the
high-level language Scheme to compose complex pictures.
The PicScheme code is defined inside an \eval
in
the TeX macro file picscheme.tex
. For a sample use
of PicScheme, create a file circlepic.tex
with
the following contents:
\input eval4tex % load \eval \input picscheme % load picture language PicScheme
\eval{ (set! *unit‑length* (dimen 4 'cm)) (picture (lambda () ;draw circle of dia 1 with center at (0,0) (draw (full‑circle)) ;draw horizontal diameter (draw (path (point ‑.5 0) '‑‑ (point .5 0))) ;write length of diameter just above center (label (point 0 .05) "1") ;write length of circumference just outside ;circle, at 45 degrees (let ((x (/ .55 (sqrt 2)))) (label (point x x) "$\\pi$")))) }
\bye
Note that this example contains two \eval
s:
The first is the \eval
in picscheme.tex
which defines the PicScheme operators, and the second
is the \eval
in the body of circlepic.tex
that uses the PicScheme operators to draw the circle.
We enable the \eval
Scheme code in
circlepic.tex
the same way as before. We run
TeX on circlepic.tex
, then Scheme on
circlepic.eval4tex
, and then TeX again on
circlepic.tex
:
tex circlepic racket -f circlepic.eval4tex tex circlepic
The resulting circlepic.dvi
has the
following picture:
In addition, you can run TeX2page directly on
circlepic.tex
to produce a Web-browsable
version:
tex2page circlepic
We will now describe in detail the capabilities provided by PicScheme.