diff options
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.html | 148 |
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 “special-command generator”, 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’s hardly doing what we set out to do (experts will - see that you are defining a macro, but others likely won’t) - </dl> -<li> Convince TeX that “<code>8</code>” 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 “<code>8</code>” (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. -<to be read again> - 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 - “<code>8r</code>”: - <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 “<code>8r</code>”, with a confusing diagnostic — - <code>\</code><code>cul99</code> produces: - <blockquote> -<pre> -! Use of \cul doesn't match its definition. -<*> \cul9 - 9 -</pre> - - </blockquote><p> - (which would confuse someone who hadn’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 — in a limited form — within -most LaTeX packages and within LaTeX itself. The convention is to -use “<code>@</code>” within the names of internal macros to hide them -from the user and thereby prevent naming conflicts. To this end, -LaTeX automatically treats “<code>@</code>” as a letter while -processing classes and packages and as a non-letter while processing -the user’s document. The key to this technique is the separation: -internally a non-letter is used for macro names, and the user doesn’t -see anything of it, while the status remains “frozen” 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 “frozen” catcode for ‘8’, even though the value -has reverted to normal by the time it’s used; note, also, the use of -the primitive command <code>\</code><code>gdef</code>, since <code>\</code><code>newcommand</code> can’t make a -macro that’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> |