summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-linmacnames.html
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-linmacnames.html')
-rw-r--r--Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-linmacnames.html148
1 files changed, 0 insertions, 148 deletions
diff --git a/Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-linmacnames.html b/Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-linmacnames.html
deleted file mode 100644
index 227f87446d3..00000000000
--- a/Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-linmacnames.html
+++ /dev/null
@@ -1,148 +0,0 @@
-<head>
-<title>UK TeX FAQ -- question label linmacnames</title>
-</head><body>
-<h3>Non-letters in macro names</h3>
-<p/>New LaTeX users are often suprised that macro definitions
-containing non-letters, such as
-<blockquote>
-<pre>
-\newcommand{\cul8r}{Goodbye!}
-</pre>
-</blockquote><p>
-fail to compile. The reason is that the TeX macro language, unlike
-most programming languages, allows
-<a href="FAQ-whatmacros.html">nothing but letters in macro names</a>.
-<p/>There are a number of techniques for defining a macro with a name like
-<code>\</code><code>cul8r</code>. Unfortunately, none of the techniques is particularly
-good:
-<ol>
-<li> Use <code>\</code><code>csname</code>\dots<code>\</code><code>endcsname</code> to define and invoke the
- macro:
- <blockquote>
-
-<pre>
-\expandafter\newcommand\csname cul8r\endcsname{Goodbye!}
-I said, ``\csname cul8r\endcsname''.
-</pre>
- </blockquote><p>
- <dl>
- <dt>Pro:<dd> No unexpected side effects
- <dt>Con:<dd> So verbose as to be unusable
- </dl>
-<li> Define a &#8220;special-command generator&#8221;, and use the resulting
- commands:
-<blockquote>
-
-<pre>
-\newcommand{\DefineRemark}[2]{%
- \expandafter\newcommand\csname rmk-#1\endcsname{#2}%
-}
-\newcommand{\Remark}[1]{\csname rmk-#1\endcsname}
-...
-\DefineRemark{cul8r}{Goodbye!}
-...
-\Remark{cul8r}
-</pre>
-</blockquote><p>
- <dl>
- <dt>Pro:<dd> Straightforward to use, not too untidy
- <dt>Con:<dd> It&#8217;s hardly doing what we set out to do (experts will
- see that you are defining a macro, but others likely won&#8217;t)
- </dl>
-<li> Convince TeX that &#8220;<code>8</code>&#8221; is a letter:
- <blockquote>
-<pre>
-\catcode`8 = 11
-\newcommand{\cul8r}{Goodbye!}
-I said, ``\cul8r''.
-</pre>
- </blockquote><p>
- <dl>
- <dt>Pro:<dd> <code>\</code><code>cul8r</code> can be used directly
- <dt>Con:<dd> Likely to break other uses of &#8220;<code>8</code>&#8221; (such as
- numbers or dimensions; so
- <code>\</code><code>setlength{<code>\</code><code>paperwidth</code>}{8in}</code> tells us:
- <blockquote>
-<pre>
-! Missing number, treated as zero.
-&#60;to be read again&#62;
- 8
-</pre>
- </blockquote><p>
- </dl>
- As a general rule, changing category codes is something to use
- <em>in extremis</em>, after detailed examination of options. It is
- conceivable that such drastic action could be useful for you, but
- most ordinary users are well advised not even to try such a
- technique.
-<li> Define a macro <code>\</code><code>cul</code> which must always be followed by
- &#8220;<code>8r</code>&#8221;:
- <blockquote>
-<pre>
-\def\cul8r{Goodbye!}
-I said, ``\cul8r''.
-</pre>
- </blockquote><p>
- <dl>
- <dt>Pro:<dd> <code>\</code><code>cul8r</code> can be used directly
- <dt>Con #1:<dd> Breaks if <code>\</code><code>cul</code> is followed by anything other
- than &#8220;<code>8r</code>&#8221;, with a confusing diagnostic &#8212;
- <code>\</code><code>cul99</code> produces:
- <blockquote>
-<pre>
-! Use of \cul doesn't match its definition.
-&#60;*&#62; \cul9
- 9
-</pre>
-
- </blockquote><p>
- (which would confuse someone who hadn&#8217;t even realised there
- <em>was</em> a definition of <code>\</code><code>cul</code> in the document).
- <dt>Con #2:<dd> Silently redefines existing <code>\</code><code>cul</code>, if any;
- as a result, the technique cannot be used to define both a
- <code>\</code><code>cul8r</code> and, say, a <code>\</code><code>cul123</code> macro in the same
- document.
- </dl>
-</ol>
-Technique 3 is in fact commonly used &#8212; in a limited form &#8212; within
-most LaTeX packages and within LaTeX itself. The convention is to
-use &#8220;<code>@</code>&#8221; within the names of internal macros to hide them
-from the user and thereby prevent naming conflicts. To this end,
-LaTeX automatically treats &#8220;<code>@</code>&#8221; as a letter while
-processing classes and packages and as a non-letter while processing
-the user&#8217;s document. The key to this technique is the separation:
-internally a non-letter is used for macro names, and the user doesn&#8217;t
-see anything of it, while the status remains &#8220;frozen&#8221; in all the
-definitions created within the class or package. See
-<a href="FAQ-atsigns.html"><code>\</code><code>@</code> and <code>@</code> in macro names</a> for
-more information.
-<p/>Note that analogous use of technique 3 in this example would give us
-<blockquote>
-<pre>
-\begingroup
- \catcode`8 = 11
- \gdef\cul8r{Goodbye!}
- \gdef\later{\cul8r}
-\endgroup
-I said, ``\later''.
-</pre>
-</blockquote><p>
-which works, but rather defeats the object of the exercise.
-(<code>\</code><code>later</code> has the &#8220;frozen&#8221; catcode for &#8216;8&#8217;, even though the value
-has reverted to normal by the time it&#8217;s used; note, also, the use of
-the primitive command <code>\</code><code>gdef</code>, since <code>\</code><code>newcommand</code> can&#8217;t make a
-macro that&#8217;s available outside the group.)
-<p/><em>Recommendation</em>: Either choose another mechanism (such as
-<code>\</code><code>DefineRemark</code> above), or choose another name for your macro, one
-that contains only ordinary letters. A common approach is to use
-roman numerals in place of arabic ones:
-<blockquote>
-<pre>
-\newcommand{\culVIIIr}{Goodbye!}
-</pre>
-</blockquote><p>
-which rather spoils the intent of the joke implicit in the example
-<code>\</code><code>cul8r</code>!
-<p><em>This answer was added: 2009-06-03</em></p>
-<p/><p>This question on the Web: <a href="http://www.tex.ac.uk/cgi-bin/texfaq2html?label=linmacnames">http://www.tex.ac.uk/cgi-bin/texfaq2html?label=linmacnames</a>
-</body>