blob: decdfd06ff8a14e248cf0402320586f3c7355e4b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
Variations on the `\expandafter` TeX primitive
==============================================
* E-mail: blflatex@gmail.com
* Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
The package defines `\multiexpand`, `\multiexpandafter`, `\MultiExpand`
and `\MultiExpandAfter`, replacing large chains of `\expandafter`.
These four commands take as an argument the number of expansion to be
done. If eTeX is available, this number is evaluated using `\numexpr`.
Say we want to expand `\C` five times before `\A` and `\B` in `\A\B\C`.
The traditional approach would be to insert 31 `\expandafter` before
`\A` and the same number before `\B`. With this package one can use
any of
\expandafter\A\expandafter\B\romannumeral\multiexpand{5}\C
\expandafter\A\romannumeral\multiexpandafter{5}\B\C
\MultiExpandAfter{2}\A\MultiExpandAfter{5}\B\C
\MultiExpandAfter{2}\A\MultiExpandAfter{2}\B\MultiExpand{5}\C
In one step of expansion (triggered by the `\expandafter`'s),
`\romannumeral\multiexpand{5}` expands the following token 5 times,
whereas `\romannumeral\multiexpandafter{5}` expands the token after
that 5 times. The macros `\MultiExpandAfter` and `\MultiExpand`
take two steps of expansion, but do not require `\romannumeral`.
Another example is that in two steps of expansion,
\MultiExpandAfter{2}\a\MultiExpandAfter{3}{%
\MultiExpandAfter{9}\b\MultiExpandAfter{10}\c\d}
expands `\d` 10 times, then `\c` 7 times (9-2), then `\b` once (3-2).
The package can be built from the file `multiexpand.dtx' by running
pdflatex multiexpand.dtx
pdflatex multiexpand.dtx
|