diff options
Diffstat (limited to 'Master/texmf-doc/doc/english/FAQ-en/html/FAQ-subverttoks.html')
-rw-r--r-- | Master/texmf-doc/doc/english/FAQ-en/html/FAQ-subverttoks.html | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/Master/texmf-doc/doc/english/FAQ-en/html/FAQ-subverttoks.html b/Master/texmf-doc/doc/english/FAQ-en/html/FAQ-subverttoks.html new file mode 100644 index 00000000000..aac602ef668 --- /dev/null +++ b/Master/texmf-doc/doc/english/FAQ-en/html/FAQ-subverttoks.html @@ -0,0 +1,42 @@ +<head> +<title>UK TeX FAQ -- question label subverttoks</title> +</head><body> +<h3>Subverting a token register</h3> +<p>A common requirement is to "subvert" a token register that other +macros may use. The requirement arises when you want to add something +to a system token register (<code>\</code><code>output</code> or <code>\</code><code>every*</code>), but know +that other macros use the token register, too. (A common requirement +is to work on <code>\</code><code>everypar</code>, but LaTeX changes <code>\</code><code>everypar</code> at +every touch and turn.) +<p>The following technique, due to David Kastrup, does what you need, and +allows an independent package to play the exact same game: +<blockquote> +<pre> +\let\mypkg@@everypar\everypar +\newtoks\mypkg@everypar +\mypkg@everypar\expandafter{\the\everypar} +\mypkg@@everypar{\mypkgs@ownstuff\the\mypkg@everypar} +\def\mypkgs@ownstuff{% + <stuff to do at the start of the token register>% +} +\let\everypar\mypkg@everypar +</pre> + +</blockquote> +As you can see, the package (<i>mypkg</i>) +<ul> +<li> creates an alias for the existing "system" <code>\</code><code>everypar</code> + (which is frozen into any surrounding environment, which will carry + on using the original); +<li> creates a token register to subvert <code>\</code><code>everypar</code> and + initialises it with the current contents of <code>\</code><code>everypar</code>; +<li> sets the "old" <code>\</code><code>everypar</code> to execute its own extra code, + as well as the contents of its own token register; +<li> defines the macro for the extra code; and +<li> points the token <code>\</code><code>everypar</code> at the new token register. +</ul> +and away we go. +<p>The form <code>\</code><code>mypkg@...</code> is (sort of) blessed for LaTeX package +internal names, which is why this example uses macros of that form. +<p><p><p><p>This question on the Web: <a href="http://www.tex.ac.uk/cgi-bin/texfaq2html?label=subverttoks">http://www.tex.ac.uk/cgi-bin/texfaq2html?label=subverttoks</a> +</body> |