diff options
Diffstat (limited to 'Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-isdef.html')
-rw-r--r-- | Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-isdef.html | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-isdef.html b/Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-isdef.html deleted file mode 100644 index 76a2c5ca5d8..00000000000 --- a/Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-isdef.html +++ /dev/null @@ -1,86 +0,0 @@ -<head> -<title>UK TeX FAQ -- question label isdef</title> -</head><body> -<h3>Is this command defined?</h3> -<p/>Macro sets from the earliest days of TeX programming may be -observed to test whether commands exist by using -<blockquote> -<code>\</code><code>ifx</code> csx<code><em>command</em></code> <code>\</code><code>undefined</code> <<i>stuff</i>> … -</blockquote><p> -(which of course actually tests that the command <em>doesn’t</em> -exist). LaTeX programmers can make use of the internal command -<blockquote> - <code>\</code><code>@ifundefined{</code><em>cmd name</em><code>}{</code><em>action1</em><code>}{</code><em>action2</em><code>}</code> -</blockquote><p> -which executes <code>action1</code> if the command is undefined, and -<code>action2</code> if it is defined -(<em>cmd name</em> is the command name only, omitting the ‘<code>\</code>’ character). -<p/>The <code>\</code><code>@ifundefined</code> command is based on the sequence -<blockquote> - -<pre> -\expandafter \ifx \csname cmd name\endcsname \relax -</pre> -</blockquote><p> -which relies on the way <code>\</code><code>csname</code> works: if the command doesn’t -exist, it simply creates it as an alias for <code>\</code><code>relax</code>. -<p/>So: what is wrong with these techniques? -<p/>Using <code>\</code><code>undefined</code> blithely assumes that the command is indeed not -defined. This isn’t entirely safe; one could make the name more -improbable, but that may simply make it more difficult to spot a -problem when things go wrong. LaTeX programmers who use the -technique will typically employ <code>\</code><code>@undefined</code>, adding a single -level of obscurity. -<p/>The <code>\</code><code>@ifundefined</code> mechanism has the unfortunate property of -polluting the name space: each test that turns out undefined adds a -name to the set TeX is holding, and often all those “<code>\</code><code>relax</code>” -names serve no purpose whatever. Even so (sadly) there are places in -the code of LaTeX where the existence of the <code>\</code><code>relax</code> is relied -upon, after the test, so we can’t get away from <code>\</code><code>@ifundefined</code> -altogether. -<p/>David Kastrup offers the (rather tricky) -<blockquote> -<pre> -{\expandafter}\expandafter\ifx \csname cmd name\endcsname\relax ... -</pre> - -</blockquote><p> -which “creates” the <code>\</code><code>relax</code>-command inside the group of the first -<code>\</code><code>expandafter</code>, therefore forgets it again once the test is done. -The test is about as good as you can do with macros. -<p/>The <a href="FAQ-etex.html">e-TeX system</a> system comes to our help here: it -defines two new primitives: -<ul> -<li> <code>\</code><code>ifdefined</code>, which tests whether a thing is defined (the - negative of comparing with <code>\</code><code>undefined</code>, as it were), and -<li> <code>\</code><code>ifcsname</code> <code>cmd name</code><code>\</code><code>endcsname</code>, which does the - negative of <code>\</code><code>@ifundefined</code> without the <code>\</code><code>relax</code>-command - side-effect. -</ul> -So, in an e-TeX-based system, the following two conditional clauses do -the same thing: -<blockquote> -<pre> -\ifdefined\foo - \message{\string\foo\space is defined}% -\else - \message{no command \string\foo}% -\fi -% -\ifcsname foo\endcsname - \message{\string\foo\space is defined}% -\else - \message{no command \string\foo}% -\fi -</pre> -</blockquote><p> -However, after using the LaTeX -<code>\</code><code>@ifundefined{foo}</code>…, the conditionals will detect the -command as “existing” (since it has been <code>\</code><code>let</code> to <code>\</code><code>relax</code>); -so it is important not to mix mechanisms for detecting the state of a -command. -<p/>Since most distributions nowadays use e-TeX as their base executable -for most packages, these two primitives may be expected appear widely -in new macro packages. -<p/><p/><p/><p>This question on the Web: <a href="http://www.tex.ac.uk/cgi-bin/texfaq2html?label=isdef">http://www.tex.ac.uk/cgi-bin/texfaq2html?label=isdef</a> -</body> |