On the
MiKTeX mailing list, a thread descended into a flame that someone bracketed with
\flameon and
\flameoff, which is a sort of
Fantastic Four version of a
LaTeX environment. The thread involved the differences between
TeX,
Plain TeX, and
LaTeX, and so I took the opportunity to point a few things out. I received several positive responses, and so I decided to reproduce my post here.
\pedagogical
There's a TeX vs. LaTeX teachable moment here . . .
> > \flameon
...
> > \flameoff
As an example, if you're using LaTeX, the proper code for a flame environment is:\begin{flame}
\end{flame}
However, the \begin and \end macros do nothing more than call:\flame
\endflame
and so bracketing an environment in these macros is (in principle) equivalent to using the \begin and \end environments.
Further, a naive implementation of \begin and \end is:\newcommand\begin[1]{\csname #1\endcsname}
\newcommand\end[1]{\csname end#1\endcsname}
which is equivalent to the "raw" TeX (which may also be used in LaTeX):\def\begin#1{\csname #1\endcsname}
\def\end#1{\csname end#1\endcsname}
In other words, \newcommand and \def are basically the same beast. However, \newcommand is a macro (created with \def) that checks to make sure you haven't already \newcommand'd before. SIMILARLY, the REAL \begin and \end wrappers have extra sanity checks for safety.
Finally, that leaves\csname BLAH\endcsname
which is equivalent to\BLAH
Notice that it looks like an environment. So I could also do:\begin{csname}today\end{csname}
which actually gives me the same output as \today.
\endpedagogical
--Ted
I should also note that the source code for
LaTeX is listed in the
source2e.pdf documentation that comes with nearly every
LaTeX distribution (it does not appear to come with
MiKTeX). Execute
texdoc source2e
to see the document on your system.
No comments:
Post a Comment