summaryrefslogtreecommitdiff
path: root/Master/texmf-doc/doc/english/FAQ-en/html/FAQ-activechars.html
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-doc/doc/english/FAQ-en/html/FAQ-activechars.html')
-rw-r--r--Master/texmf-doc/doc/english/FAQ-en/html/FAQ-activechars.html120
1 files changed, 120 insertions, 0 deletions
diff --git a/Master/texmf-doc/doc/english/FAQ-en/html/FAQ-activechars.html b/Master/texmf-doc/doc/english/FAQ-en/html/FAQ-activechars.html
new file mode 100644
index 00000000000..af47d69125b
--- /dev/null
+++ b/Master/texmf-doc/doc/english/FAQ-en/html/FAQ-activechars.html
@@ -0,0 +1,120 @@
+<head>
+<title>UK TeX FAQ -- question label activechars</title>
+</head><body>
+<h3>Defining characters as macros</h3>
+<p>Single characters can act as macros (defined commands), and both
+Plain TeX and LaTeX define the character
+"<code>~</code>" as a "non-breakable space". A
+character is made definable, or "active", by setting its
+<em>category code</em> (catcode) to be <code>\</code><code>active</code> (13):
+<code>\catcode'_=\active</code>.
+<p>Any character could, in principle, be activated this way and defined
+as a macro (<code>\def_{</code><code>\</code><code><code>}</code> - the simple answer to
+
+<a href="FAQ-underscore.html">using underscores</a>), but you must be
+wary: whereas people expect an active tilde, other active characters
+may be unexpected and interact badly with other macros. Furthermore,
+by defining an active character, you preclude the character's use for
+other purposes, and there are few characters "free" to be subverted
+in this way.
+<p>To define the character "<code>z</code>" as a command, one would say something
+like:
+<blockquote>
+<pre>
+\catcode`\z=\active
+\def z{Yawn, I'm tired}%
+</pre>
+</blockquote>
+and each subsequent "<code>z</code>" in the text would become a yawn. This would be
+an astoundingly bad idea for most documents, but might have special
+applications. (Note that, in "<code>\def z</code>", "<code>z</code>" is no longer interpreted as
+a letter; the space is therefore not necessary - "<code>\defz</code>" would do; we
+choose to retain the space, for what little clarity we can manage.)
+Some LaTeX packages facilitate such definitions. For example, the
+<i>shortvrb</i> package with its <code>\</code><code>MakeShortVerb</code> command.
+<p>TeX uses category codes to interpret characters as they are read
+from the input.
+
+<em>Changing a catcode value will not affect characters that have already been read</em>.
+Therefore, it is best if characters have fixed category codes for the
+duration of a document. If catcodes are changed for particular
+purposes (the <code>\</code><code>verb</code> command does this), then the altered
+characters will not be interpreted properly when they appear in the
+argument to another command (as, for example, in
+
+"<a href="FAQ-verbwithin.html"><code>\</code><code>verb</code> in command arguments</a>").
+An exemplary case is the <i>doc</i> package, which processes .dtx
+files using the <i>shortvrb</i> package to define
+<code>|...|</code> as a shorthand for
+<code>\</code><code>verb</code><code>|...|</code>. But <code>|</code> is
+also used in the preambles of tabular environments, so that tables in
+<code>.dtx</code> files can only have vertical line separation between columns by
+employing special measures of some sort.
+<p>Another consequence is that catcode assignments made
+in macros often don't work as expected
+(see "<a href="FAQ-actinarg.html">Active characters in command arguments</a>").
+For example, the definition
+<blockquote>
+<pre>
+\def\mistake{%
+\catcode`_=\active
+\def_{\textunderscore\-}%
+}
+</pre>
+</blockquote>
+does not work because it attemts to define an ordinary <code>_</code> character:
+When the macro is used, the category change does not apply to the
+underscore character already in the macro definition. Instead, one may
+use:
+<blockquote>
+<pre>
+\begingroup
+\catcode`_=\active
+\gdef\works{% note the global \gdef
+ \catcode`_=\active
+ \def_{\textunderscore\-}%
+}
+\endgroup
+</pre>
+</blockquote>
+The alternative ("tricksy") way of creating such an isolated
+definition depends on the curious properties of <code>\</code><code>lowercase</code>, which
+changes characters without altering their catcodes. Since there is
+always <em>one</em> active character ("<code>~</code>"), we
+can fool <code>\</code><code>lowercase</code> into patching up a definition without ever
+explicitly changing a catcode:
+<blockquote>
+<pre>
+\begingroup
+ \lccode`\~=`\_
+ \lowercase{\endgroup
+ \def~{\textunderscore\-}%
+ }%
+</pre>
+</blockquote>
+The two definitions have the same overall effect (the character is
+defined as a command, but the character does not remain active),
+except that the first defines a <code>\</code><code>global</code> command.
+<p>For active characters to be used only in maths mode, it is much better
+to leave the character having its ordinary catcode, but assign it a
+special active <em>maths code</em>, as with
+<blockquote>
+<pre>
+\begingroup
+ \lccode`~=`x
+ \lowercase{\endgroup
+ \def~{\times}%
+ }%
+\mathcode`x="8000
+</pre>
+</blockquote>
+The special character does not need to be redefined whenever it is
+made active - the definition of the command persists even if the
+character's catcode reverts to its original value; the definition
+becomes accessible again if the character once again becomes active.
+<dl>
+<dt><tt><i>doc.sty</i></tt><dd>Distributed as part of the source of LaTeX, <a href="ftp://cam.ctan.org/tex-archive/macros/latex/base.zip">macros/latex/base</a> (<a href="ftp://cam.ctan.org/tex-archive/macros/latex/base.tar.gz">gzipped tar</a>, <a href="http://www.tex.ac.uk/tex-archive/macros/latex/base/">browse</a>)
+<dt><tt><i>shortvrb.sty</i></tt><dd>Distributed as part of <a href="ftp://cam.ctan.org/tex-archive/macros/latex/required/tools.zip">macros/latex/required/tools</a> (<a href="ftp://cam.ctan.org/tex-archive/macros/latex/required/tools.tar.gz">gzipped tar</a>, <a href="http://www.tex.ac.uk/tex-archive/macros/latex/required/tools/">browse</a>)
+</dl>
+<p><p><p>This question on the Web: <a href="http://www.tex.ac.uk/cgi-bin/texfaq2html?label=activechars">http://www.tex.ac.uk/cgi-bin/texfaq2html?label=activechars</a>
+</body>