diff options
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.html | 120 |
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> |