The @if…
conditionals just described must be used only
with normal Texinfo source. For instance, most features of plain
TeX will not work within @iftex
. The purpose of
@if…
is to provide conditional processing for Texinfo
source, not provide access to underlying formatting features. For
that, Texinfo provides so-called raw formatter commands. They
should only be used when truly required (most documents do not need
them).
The first raw formatter command is @tex
. You can enter plain
TeX completely, and use ‘\’ in the TeX commands, by
delineating a region with the @tex
and @end tex
commands. All plain TeX commands and category codes are restored
within a @tex
region. The sole exception is that the
@
character still introduces a command, so that @end
tex
can be recognized. Texinfo processors will not output material
in such a region unless TeX output is being produced.
In complex cases, you may wish to define new TeX macros within
@tex
. You must use \gdef
to do this, not \def
,
because @tex
regions are processed in a TeX group. If you
need to make several definitions, you may wish to set
\globaldefs=1
(its value will be restored to zero as usual when
the group ends at @end tex
, so it won’t cause problems with
the rest of the document).
As an example, here is a displayed equation written in plain TeX:
@tex $$ \chi^2 = \sum_{i=1}^N \left (y_i - (a + b x_i) \over \sigma_i\right)^2 $$ @end tex
The output of this example will appear only in a printed manual. If you are reading this in a format not generated by TeX, you will not see the equation that appears in the printed manual.
Analogously, you can use @html … @end html
for a region of
raw HTML, @docbook … @end docbook
for a
region of raw DocBook, @latex … @end latex
for a
region of raw LaTeX, and @xml … @end xml
for a
region of raw XML.
The behavior of newlines in raw regions is unspecified.
In all cases, in raw processing, @
retains the same meaning as
in the remainder of the document. Thus, the Texinfo processors must
recognize and even execute, to some extent, the contents of the raw
regions, regardless of the final output format. Therefore, specifying
changes that globally affect the document inside a raw region leads to
unpredictable and generally undesirable behavior. For example, using
the @kbdinputstyle
command inside a raw region is undefined.
The remedy is simple: don’t do that.