summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-subverttoks.html
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-subverttoks.html')
-rw-r--r--Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-subverttoks.html42
1 files changed, 42 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-subverttoks.html b/Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-subverttoks.html
new file mode 100644
index 00000000000..6becedead22
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/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 &ldquo;subvert&rdquo; 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{%
+ &lt;stuff to do at the start of the token register&gt;%
+}
+\let\everypar\mypkg@everypar
+</pre>
+
+</blockquote><p>
+As you can see, the package (<i>mypkg</i>)
+<ul>
+<li> creates an alias for the existing &ldquo;system&rdquo; <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 &ldquo;old&rdquo; <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>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>