"etex.src" (V2.0)
The primary e-TeX format source file, "etex.src"
, is in principle
merely a wrapper for "plain.tex"
, providing modified definitions
for some Plain TeX commands (at present, just
one: \tracingall
), improving and generalising
the register allocation mechanism, and adding new commands
In so doing, we have taken the opportunity to (a) provide intrinsic support for multiple-language typesetting (by deferring the processing of patterns and exceptions until a rudimentary language-handling environment has been defined), (b) provide a local as well as a global register allocation mechanism, (c) provide for the allocation of blocks of registers as well as single registers, (d) provide a means of allocating and accessing vectors (monodimensional arrays) of registers, and finally (e) provide a simple but effective module-handling system, to allow e-TeX ancilliary source files to be structured as libraries rather than as flat linear text files.
As the new commands and other features are not documented elsewhere, a brief explanation of their syntax and semantics is provided here.
\tracingall
\tracingassigns
,
\tracinggroups
, \tracingifs
,
\tracingnesting
and \tracingscantokens
; the numeric value assigned
to the TeX primitives \tracingcommands
and
\tracinglostchars
is increased
as e-TeX will report additional detail in these circumstances.
\eTeX
etexdefs.lib
in due course.
\loggingall
\tracingall
\tracingonline = 0
.
\tracingnone
\tracing...
primitives following use of
\tracingall
or \loggingall
.
\newmarks
\marks
rather than the single
\mark
of TeX, an allocator mechanism is required; we
believe that \marks
are closer to
\box
es than to (say) \count
s or
\dimen
s and so have provided an analogous allocation
mechanism, in that \newmarks
 <control
sequence or active character
> assigns a numeric
value to the parameter rather than making it a synonym for an
actual \mark
; this numeric value can then be used to access
individual \marks
, \topmarks
,
\splitbotmarks
, etc., as in
\newmarks \rectomarks . . . \marks \rectomarks {This may form part of the recto running head} . . . \leftline {\topmarks \rectomarks}It should be noted that as
\marks 0
is synonymous with
\mark
, \newmarks
will never allocate that
particular value.
\newmark
in V1.1; the alternative
spelling has been retained for compatibility, although it is now classed
as deprecated.
\globbox
,
\globcount
,
\globdimen
,
\globmarks
,
\globmuskip
,
\globskip
,
\globtoks
\newbox
(etc), these commands globally allocate
registers from e-TeX's extended register pool (i.e. from the register
range from 20 (for \marks) or from 28
(for all other classes) to 215-1). Registers are globally
allocated from the lower end of the range.
\locbox
,
\loccount
,
\locdimen
,
\locmarks
,
\locmuskip
,
\locskip
,
\loctoks
\globbox
(etc), these commands locally allocate
registers from e-TeX's extended register pool (i.e. from the register
range from 20 (for \marks) or from 28
(for all other classes) to 215-1). Registers are locally
allocated from the upper end of the range.
\globboxblk
,
\globcountblk
,
\globdimenblk
,
\globmarksblk
,
\globmuskipblk
,
\globskipblk
,
\globtoksblk
\globbox
(etc) by globally allocating
contiguous blocks of registers from e-TeX's extended register pool.
The syntax used is:
\glob(whatever)blk <control sequence or active char> nwhere n specifies the length of the desired block. As n is parsed as an undelimited parameter, it must be expressed as a balanced text if it exceeds a single token. The <control sequence or active character> will be
\mathchardef
'd to the ordinal of the lowest register allocated.
\locboxblk
,
\loccountblk
,
\locdimenblk
,
\locmarksblk
,
\locmuskipblk
,
\locskipblk
,
\loctoksblk
\locbox
(etc) by locally allocating
contiguous blocks of registers from e-TeX's extended register pool.
The syntax used is:
\loc(whatever)blk <control sequence or active char> nwhere n specifies the length of the desired block. As n is parsed as an undelimited parameter, it must be expressed as a balanced text if it exceeds a single token. The <control sequence or active character> will be
\mathchardef
'd to the ordinal of the lowest register allocated.
\globcountvector
,
\globdimenvector
,
\globmuskipvector
,
\globskipvector
,
\globtoksvector
\globcountblk
(etc), these commands use
e-TeX's arithmetic expression capabilities to globally allocate
vectors of boxes (etc) from e-TeX's extended register pool.
The syntax used is:
\glob(whatever)vector <control sequence or active char> nwhere n specifies the length of the desired block. As n is parsed as an undelimited parameter, it must be expressed as a balanced text if it exceeds a single token. Once the vector has been defined, element m can be accessed in both left- and right-hand contexts as
<control sequence or active char> mwhere 0 <= m < n. As with n, m must be expressed as a balanced text if it exceeds a single token.
\globboxvector
,
\globmarksvector
,
\glob(box-or-marks)vector <control sequence or active char> nwhere n specifies the length of the desired block. As n is parsed as an undelimited parameter, it must be expressed as a balanced text if it exceeds a single token. Once the vector has been defined, element m can be accessed in left-hand contexts as
<box-or-marks-referencer> <control sequence or active char> mand in right-hand contexts as
<box-or-marks-dereferencer> <control sequence or active char> mwhere 0 <= m < n. As with n, m must be expressed as a balanced text if it exceeds a single token.
The significance of <box-or-marks-(de)referencer>
is that
boxes and marks are unlike other registers in that there exists a whole family
of (de)referencers, one of which must be used in order to access
the particular element required. For boxes, the sole referencer is
\setbox
, whilst the possible dereferencers include
\box
,
\copy,
\unhbox,
\unvbox,
,
\unhcopy
and
\unvcopy
.
For marks, the sole referencer is
\marks
, whilst the possible dereferencers include
\topmarks
,
\firstmarks
,
\botmarks
,
\splitfirstmarks
and
\splitbotmarks
.
\loccountvector
,
\locdimenvector
,
\locmuskipvector
,
\locskipvector
,
\loctoksvector
\loccountblk
(etc), these commands use
e-TeX's arithmetic expression capabilities to locally allocate
vectors of boxes (etc) from e-TeX's extended register pool.
The syntax used is:
\loc(whatever)vector <control sequence or active char> nwhere n specifies the length of the desired block. As n is parsed as an undelimited parameter, it must be expressed as a balanced text if it exceeds a single token. Once the vector has been defined, element m can be accessed in both left- and right-hand contexts as
<control sequence or active char> mwhere 0 <= m < n. As with n, m must be expressed as a balanced text if it exceeds a single token.
\locboxvector
,
\locmarksvector
,
\loc(box-or-marks)vector <control sequence or active char> nwhere n specifies the length of the desired block. As n is parsed as an undelimited parameter, it must be expressed as a balanced text if it exceeds a single token. Once the vector has been defined, element m can be accessed in left-hand contexts as
<box-or-marks-referencer> <control sequence or active char> mand in right-hand contexts as
<box-or-marks-dereferencer> <control sequence or active char> mwhere 0 <= m < n. As with n, m must be expressed as a balanced text if it exceeds a single token.
The significance of <box-or-marks-(de)referencer>
is that
boxes and marks are unlike other registers in that there exists a whole family
of (de)referencers, one of which must be used in order to access
the particular element required. For boxes, the sole referencer is
\setbox
, whilst the possible dereferencers include
\box
,
\copy,
\unhbox,
\unvbox,
,
\unhcopy
and
\unvcopy
.
For marks, the sole referencer is
\marks
, whilst the possible dereferencers include
\topmarks
,
\firstmarks
,
\botmarks
,
\splitfirstmarks
and
\splitbotmarks
.
\reserveinserts
\reserveinserts
n allows a package writer or user to
reserve an additional n insertions above and beyond those already
allocated. The syntax used is:
\reserveinserts nn must be expressed as a balanced text if it exceeds a single token.
\load
\input
ting a complete file or for \read
ing a
file line-by-line, it makes no provision for any intermediate level of
file access. In e-TeX, we provide facilities for
\input
ting one or more named modules from a
suitably structured library file. The syntax used is:
\load <module>[, <module>...] from <file>whilst the library file itself should be structured as:
%% e-TeXlib Vx.y \module {<name>} . . . \endmodule \module {<name>} . . . \endmodule etc.The %% header is required, and the actual values in
Vx.y
must correspond to the current version/revision
of e-TeX; for the current release, the header must therefore
be:
%% e-TeXlib V2.0If a library file is changed during the lifetime of the system, it is recommended (but not required) that this amendment be recorded in a cycle number appended to the header; a cycle number is of the form
;
digit[s],
and thus a valid header for the current release of e-TeX might be
any of:
%% e-TeXlib V2.0 %% e-TeXlib V2.0;1 %% e-TeXlib V2.0;247etc. The necessity for a perfect match between the library header and the current version/revision of e-TeX may be relaxed in a future release if it transpires that no changes in the structure of user libraries are required for compatibility with future versions of e-TeX.
etexdefs.lib
)grouptypes
,
nodetypes
,
interactionmodes
and
iftypes
. The standard format source, etex.src
,
loads interactionmodes
by default; the others can be loaded
using the appropriate one of the following:
\load grouptypes from etexdefs.lib \load nodetypes from etexdefs.lib \load iftypes from etexdefs.libOnce the relevant module has been loaded, the numeric values associated with each of the possible types/modes can be retrieved using one of the following commands with one of the parameters shewn:
\grouptypes {simple} {hbox} {adjustedhbox} {vbox} {vtop} {align} {noalign} {output} {math} {disc} {insert} {vcenter} {mathchoice} {semisimple} {mathshift} {mathleft} \nodetypes {char} {hlist} {vlist} {rule} {ins} {mark} {adjust} {ligature} {disc} {whatsit} {math} {glue} {kern} {penalty} {unset} {maths} \conditionaltypes {charif} {catif} {numif} {dimif} {oddif} {vmodeif} {hmodeif} {mmodeif} {innerif} {voidif} {hboxif} {vboxif} {xif} {eofif} {trueif} {falseif} {caseif} {definedif} {csnameif} {fontcharif} \interactionmodes {batch} {nonstop} {scroll} {errorstop}
\language
and
\setlanguage
primitives with the advent of TeX 3.0, no
change was made to the Plain TeX source code to really exploit these
features with the single exception of the \newlanguage
command. In "etex.src
", we defer the loading of
patterns and hyphenation exceptions until a
rudimentary language handling environment has been defined. We now
assume that the user (or rather the format-creator) will,
if required, modify the file
called "language.def
" by adding the
various languages to be supported by the format. Each entry apart from
the last in "language.def
" is of the form:
\addlanguage {<language>} {<patterns file>} {<exceptions file>} {<left hyphen min>} {<right hyphen min>} %%% shewn wrapped for clarityThe first line must be:
\addlanguage {USenglish}{hyphen.tex}{}{2}{3}whilst the last must be
\uselanguage {USenglish}to ensure that legacy documents not explicitly specifying a language process in a manner identical to TeX (that is, using American English patterns, exceptions and left- and right-hyphen minima). In the absence of a suitable
language.def
file, the default fallback mode (USenglish, with the canonical patterns,
exceptions and left- and right-hyphen minima for TeX) will be used.
Within the user document, \uselanguage {<some
language>}
should be used to switch languages, which
will have the effect of loading appropriate patterns, exceptions, and
left- and right hyphen minima. To allow the use of more powerful
language-handling environments (e.g. Babel),
the \uselanguage
command finishes by testing whether the
putative control sequence \uselanguage@hook
is defined; if
it is, then it is expanded, passing as parameter the name of the
language to be used. It should be noted that \uselanguage
is automatically invoked during the expansion of
\addlanguage
prior to the reading of patterns;
a further hook, \addlanguage@hook
, is invoked in an
identical manner after the reading of patterns and exceptions
so as to allow (for example) category-codes to be changed for the
duration of the pattern- and exception-loading régime. This code is
still classed as experimental, and if it transpires that a superior
mechanism would improve the interface to
Babel
or LaTeX, it may be
enhanced in the future.
The e-TeX format source "etex.src" is a product of the NTS group.
Please notify any errors in this document to its creator;
Last updated and
validated
24-MAR-1998 19:45:12
/PT