summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/FAQ-en/html/FAQ-isdef.html
diff options
context:
space:
mode:
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.html86
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> &lt;<i>stuff</i>&gt; &#8230;
-</blockquote><p>
-(which of course actually tests that the command <em>doesn&#8217;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 &#8216;<code>\</code>&#8217; 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&#8217;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&#8217;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 &#8220;<code>\</code><code>relax</code>&#8221;
-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&#8217;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 &#8220;creates&#8221; 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>&#8230;, the conditionals will detect the
-command as &#8220;existing&#8221; (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>