diff options
Diffstat (limited to 'Master/texmf-dist/doc')
-rw-r--r-- | Master/texmf-dist/doc/plain/zztex/README | 17 | ||||
-rw-r--r-- | Master/texmf-dist/doc/plain/zztex/zzbuiltin.dat | 325 | ||||
-rw-r--r-- | Master/texmf-dist/doc/plain/zztex/zzdetails.dat | 1597 | ||||
-rw-r--r-- | Master/texmf-dist/doc/plain/zztex/zzphrase.dat | 3085 | ||||
-rw-r--r-- | Master/texmf-dist/doc/plain/zztex/zzplain.dat | 1315 |
5 files changed, 6339 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/plain/zztex/README b/Master/texmf-dist/doc/plain/zztex/README new file mode 100644 index 00000000000..dedbd028967 --- /dev/null +++ b/Master/texmf-dist/doc/plain/zztex/README @@ -0,0 +1,17 @@ +ZzTeX Macro Package, version 17.7 + +The ZzTeX macro package is a full-featured TeX macro package specially +designed for producing books, journals, and manuals. Development of the +package began in 1989. Since then, about 500 textbooks and journals have +been produced with it for a variety of publishers. Numerous authors have +used the package to produce subsequent editions of their books. + +I provide the TeX files for ZzTeX under The MIT License. You may use any or +all of the code for whatever purpose you desire. ZzTeX runs under Plain TeX. +The only documentation available for the package is contained in the zz*.dat +files that accompany the TeX files. + +I hope you find some of the code useful for your TeX projects. + +Copyright 1989--2020 by Paul C. Anagnostopoulos +under The MIT License (opensource.org/licenses/MIT) diff --git a/Master/texmf-dist/doc/plain/zztex/zzbuiltin.dat b/Master/texmf-dist/doc/plain/zztex/zzbuiltin.dat new file mode 100644 index 00000000000..09599a8a483 --- /dev/null +++ b/Master/texmf-dist/doc/plain/zztex/zzbuiltin.dat @@ -0,0 +1,325 @@ +\@catcodes %~ Establish INITEX catcode defaults. +\@markdef \botmark %~ Last mark on the current page. +\@markdef \firstmark %~ First mark on the current page. +\@markdef \splitbotmark %~ Last mark in material split off by |\vsplit.| +\@markdef \splitfirstmark %~ First mark in material split off by |\vsplit.| +\@markdef \topmark %~ Last mark from previous page. +\@prefix \global %~ Establishes a global definition. +\@prefix \immediate %~ Performs the I/O operation immediately. +\@prefix \long %~ Allows command arguments to be multiple paragraphs. +\@prefix \outer %~ Restricts command to appear at top level. +\@suffix \displaylimits %~ Limits are set above/below in display style, as scripts otherwise. +\@suffix \limits %~ Limits are set above and below symbols. +\@suffix \nolimits %~ Limits are set next to symbol like scripts. +\countdef \adjdemerits = 0 %~ Demerits for adjacent incompatible lines. +\countdef \badness = 0 +\countdef \binoppenalty = 0 %~ Penalty for line break after binary operator. +\countdef \brokenpenalty = 0 +\countdef \clubpenalty = 0 +\countdef \day = 0 +\countdef \deadcycles = 0 +\countdef \defaulthyphenchar = 0 +\countdef \defaultskewchar = 0 +\countdef \delimiterfactor = 0 +\countdef \displaywidowpenalty = 0 +\countdef \doublehyphendemerits = 0 +\countdef \endlinechar = 0 +\countdef \errorcontextlines = 0 +\countdef \escapechar = 0 +\countdef \exhyphenpenalty = 0 +\countdef \fam = 0 +\countdef \finalhyphendemerits = 0 +\countdef \floatingpenalty = 0 +\countdef \globaldefs = 0 +\countdef \hangafter = 0 +\countdef \hbadness = 0 +\countdef \holdinginserts = 0 +\countdef \hypenchar = 0 +\countdef \hyphenpenalty = 0 +\countdef \insertpenalties = 0 +\countdef \interlinepenalty = 0 +\countdef \language = 0 +\countdef \lastpenalty = 0 +\countdef \lefthyphenmin = 0 +\countdef \linepenalty = 0 +\countdef \looseness = 0 +\countdef \mag = 0 +\countdef \maxdeadcycles = 0 +\countdef \month = 0 +\countdef \newlinechar = 0 +\countdef \outputpenalty = 0 +\countdef \pausing = 0 +\countdef \postdisplaypenalty = 0 +\countdef \predisplaypenalty = 0 +\countdef \pretolerance = 0 +\countdef \pretolerand = 0 +\countdef \prevgraf = 0 +\countdef \relpenalty = 0 +\countdef \righthyphenmin = 0 +\countdef \showboxbreadth = 0 +\countdef \showboxdepth = 0 +\countdef \skewchar = 0 +\countdef \spacefactor = 0 +\countdef \time = 0 +\countdef \tolerance = 0 +\countdef \tracingcommands = 0 +\countdef \tracinglostchars = 0 +\countdef \tracinglostchars = 0 +\countdef \tracingmacros = 0 +\countdef \tracingonline = 0 +\countdef \tracingoutput = 0 +\countdef \tracingpages = 0 +\countdef \tracingparagraphs = 0 +\countdef \tracingrestores = 0 +\countdef \tracingstats = 0 +\countdef \uchyph = 0 +\countdef \vbadness = 0 +\countdef \widowpenalty = 0 +\countdef \year = 0 +\def \ { %~ Command space. +\def \"{ % {char} %~ Umlaut accent %^accent +\def \'{ % {char} %~ Accute accent %^accent +\def \-{ +\def \.{ % {char} %~ Dot accent %^accent +\def \/{ +\def \={ % {char} %~ Macron accent %^accent +\def \AA { %~ Scandinavian A with circle +\def \aa { %~ Scandinavian a with circle +\def \above { % dimen +\def \abovewithdelims { % delim delim dimen +\def \accent { % nnn +\def \advance { % \name by value +\def \AE { %~ Scandinavian ligature OE +\def \ae { %~ Scandinavian ligature oe +\def \afterassignment { % token +\def \aftergroup { % token +\def \atop +\def \atopwithdelims { % delim delim +\def \batchmode +\def \begingroup +\def \bgroup +\def \box { % nnn +\def \b{ % {char} %~ Bar-under accent %^accent +\def \catcode { % char = nn +\def \char +\def \chardef { % \name = nn +\def \cleaders +\def \closein { % nn +\def \closeout { % nn +\def \copy { % nnn +\def \count { % nnn = integer +\def \countdef { % \name +\def \cr +\def \crcr +\def \c{ % {char} %~ Cedilla accent %^accent +\def \dag { %~ Dagger +\def \ddag { %~ Double dagger +\def \def +\def \delcode +\def \delimiter +\def \dimendef { % \name +\def \diment { % nnn +\def \discretionary{text}{text}{text} +\def \displaystyle +\def \divide { % \name by number +\def \dp +\def \dump +\def \d{ % {char} %~ Dot-under accent %^accent +\def \edef +\def \egroup +\def \end +\def \endgroup +\def \errmessage{text} +\def \errorstopmode +\def \font { % \name = file-name [at size] +\def \fontdiment { % nn \font = dimen +\def \futurelet { % \name token token +\def \gdef +\def \halign{material} +\def \hbox { % [to dimen] {text} +\def \hfil +\def \hfill +\def \hfilneg +\def \hrule { % width dimen height dimen depth dimen +\def \hskip { % skip +\def \hss +\def \ht +\def \hyphenation{text} +\def \hyphenchar { % \font = nn +\def \H{ % {char} %~ Long Hungarian umlaut accent %^accent +\def \ignorespaces +\def \indent +\def \insert { % nnn {text} +\def \kern { % dimen +\def \L { %~ Polish suppressed L +\def \l { %~ Polish suppressed l +\def \lastbox +\def \lccode { % char = char +\def \leaders +\def \left { % delim math \right delim +\def \let { % \name = token +\def \lower { % dimen box +\def \lowercase { % {text} +\def \mark { % {text} +\def \mathaccent { % nnnnn math +\def \mathbin { % {expression} %~ Binary operator class (2) %^math_class +\def \mathchar { % "cfnn +\def \mathchardef { % \name = nnnnn +\def \mathchoice{text}{text}{text}{text} +\def \mathclose { % {expression} %~ Closing fence class (5) %^math_class +\def \mathcode +\def \mathinner { % {expression} %~ Inner subexpression +\def \mathop { % {expression} %~Large operator class (1) %^math_class +\def \mathopen { % {expression} %~ Opening fence class (4) %^math_class +\def \mathord { % {expression} %~ Ordinary symbol class (0) %^math_class +\def \mathpunct { % {expression} %~ Punctuation class (6) %^math_class +\def \mathrel { % {expression} %~ Relation class (3) %^math_class +\def \message { % {text} +\def \moveleft { % dimen box +\def \moveright { % dimen box +\def \mukern { % mudimen +\def \multiply { % \name by number +\def \muskip { % nnn = mu-glue +\def \muskipdef { % \name +\def \noalign { % {text} +\def \noboundary +\def \noboundary +\def \noindent +\def \nonscript +\def \nonstopmode +\def \number { % {number} %~ This command formats an integer as Arabic numerals. +\def \O { %~ Scandinavian O with slash +\def \o { %~ Scandinavian o with slash +\def \OE { %~ French ligature OE +\def \oe { %~ French ligature oe +\def \omit +\def \openin { % nn = file-name +\def \openout { % nn = file-name +\def \over +\def \overline{text} +\def \overwithdelims { % delim delim +\def \P { %~ Paragraph sign (pilcrow) +\def \par +\def \parshape { % = nn dimen ... +\def \patterns{text} +\def \penalty { % nnnnn +\def \radical { % nnnnn math +\def \raise { % dimen box +\def \read { % n to \name +\def \relax +\def \romannumeral { % {number} %~ This command formats an integer as uppercase Roman numerals. +\def \S { %~ Section sign +\def \scriptfont +\def \scriptscriptfont +\def \scriptscriptstyle +\def \scriptstyle +\def \scrollmode +\def \setbox { % nnn = box +\def \setlanguage { % nnn +\def \sfcode +\def \shipout { % box +\def \show { % token +\def \showbox { % nnn +\def \showlists +\def \showthe { % internal-quantity +\def \skewchar { % \font = nn +\def \skip { % nnn = glue +\def \skipdef { % \name +\def \span +\def \special { % {text} +\def \ss { %~ German es-zet +\def \t { % {char} %~ Tie-after accent %^accent +\def \textfont +\def \textstylestyle +\def \toks { % nnn +\def \toksdef { % \name +\def \uccode { % char = char +\def \underline{text} +\def \unhbox { % nnn +\def \unhcopy { % nnn +\def \unkern +\def \unpenalty +\def \unskip +\def \unvbox { % nnn +\def \unvcopy { % nnn +\def \uppercase { % {text} +\def \u{ % {char} %~ Breve accent %^accent +\def \vadjust{text} +\def \valign{text} +\def \vbox { % [to dimen] {text} +\def \vcenter{text} +\def \vfil +\def \vfill +\def \vfilneg +\def \vrule { % width dimen height dimen depth dimen +\def \vskip { % dimen +\def \vsplit { % nnn to dimen +\def \vss +\def \vtop { % [to dimen] {text} +\def \v{ % {char} %~ Hacek accent %^accent +\def \wd +\def \write { % nn {text} +\def \xdef +\def \xleaders +\def \^{ % {char} %~ Circumflex accent %^accent +\def \`{ % {char} %~ Grave accent %^accent +\def \~{ % {char} %~ Tilde accent %^accent +\dimendef \boxmaxdepth = 0 +\dimendef \delimitershortfall = 0 +\dimendef \displayindent = 0 +\dimendef \displaywidth = 0 +\dimendef \emergencystretch = 0 +\dimendef \hangindent = 0 +\dimendef \hfuzz = 0 +\dimendef \hoffset = 0 +\dimendef \hsize = 0 +\dimendef \lastkern = 0 +\dimendef \lineskiplimit = 0 +\dimendef \mathsurround = 0 +\dimendef \maxdepth = 0 +\dimendef \nulldelimiterspace = 0 +\dimendef \overfullrule = 0 +\dimendef \pagedepth = 0 +\dimendef \pagefilllstretch = 0 +\dimendef \pagefillstretch = 0 +\dimendef \pagefilstretch = 0 +\dimendef \pagegoal = 0 +\dimendef \pageshrink = 0 +\dimendef \pagestretch = 0 +\dimendef \pagetotal = 0 +\dimendef \parindent = 0 +\dimendef \predisplaysize = 0 +\dimendef \prevdepth = 0 +\dimendef \scriptspace = 0 +\dimendef \splitmaxdepth = 0 +\dimendef \vfuzz = 0 +\dimendef \voffset = 0 +\dimendef \vsize = 0 +\muskipdef \medmuskip = 0 +\muskipdef \thickmuskip = 0 +\muskipdef \thinmuskip = 0 +\skipdef \abovedisplayshortskip = 0 +\skipdef \abovedisplayskip = 0 +\skipdef \baselineskip = 0 +\skipdef \belowdisplayshortskip = 0 +\skipdef \belowdisplayskip = 0 +\skipdef \lastskip = 0 +\skipdef \leftskip = 0 +\skipdef \lineskip = 0 +\skipdef \parfillskip = 0 +\skipdef \parskip = 0 +\skipdef \rightskip = 0 +\skipdef \spaceskip = 0 +\skipdef \splittopskip = 0 +\skipdef \tabskip = 0 +\skipdef \topskip = 0 +\skipdef \xspaceskip = 0 +\toksdef \errhelp = 0 +\toksdef \everycr = 0 +\toksdef \everydisplay = 0 +\toksdef \everyhbox = 0 +\toksdef \everyjob = 0 +\toksdef \everymath = 0 +\toksdef \everypar = 0 +\toksdef \everyvbox = 0 +\toksdef \output = 0 diff --git a/Master/texmf-dist/doc/plain/zztex/zzdetails.dat b/Master/texmf-dist/doc/plain/zztex/zzdetails.dat new file mode 100644 index 00000000000..c1ef6d0b8f6 --- /dev/null +++ b/Master/texmf-dist/doc/plain/zztex/zzdetails.dat @@ -0,0 +1,1597 @@ +//--------------------------------------------------------------------------- +// +// Copyright (c) 2012--2018 by Paul C. Anagnostopoulos +// +// This software may be used on your own computer systems and may +// be distributed freely to other people. It may not be sold or +// incorporated into any commercial products. +// +// Paul C. Anagnostopoulos +// Windfall Software +// 978 371-2316 +// paul@windfall.com +// +//--------------------------------------------------------------------------- +// +// ZzExplore: Describe built-in TeX, Plain TeX, ZzTeX, and design +// file entities for compositors. +// +// This is the details phrase file. +// +// Created: 7 May 2016 + +// \art Block +// ---- ----- + +.details art_details \art +.template art_details +== The |\art| Block + +This tutorial describes the ZzTeX |\art| block, which is used to place +Encapsulated PostScript (EPS) files on the page. EPS files can be created +with many different applications, the most common being Adobe Illustrator +and PhotoShop. + +=== The |\art| Command + +The format of the |\art| command is: + +| \art{*type*}{*file*,*width*,*height*,*scale*[,*gutter*,*file*,*width*,*height*,*scale*,...]} + +The *type* argument specifies the type of the code block and thus its +design. Common examples are |figure| for art in floating figures and +|text| for art in text. + +A single piece of art is described by four values in the second argument: + +& *file*& The name of the EPS file. See below. +& *width*& The width of the art, usually specified in picas. +& *height*& The height of the art. +& *scale*& The scale factor for the art. See below. +&. + +You can place multiple pieces of art, or panels, side-by-side by including +additional values in the second argument. The *gutter* specifies the +horizontal distance between the adjacent panels. The next four arguments specify +the second art file, in the same manner as the first. This sequence can be +continued to place three or four panels side-by-side. + +=== File Name + +The file name specified in the |\art| command is the name of an EPS file to be +placed on the page. There is no need to specify the extension |.eps|. The +file is assumed to reside in the directory specifed by the |\setartroot| +command in the book's root file. If the name is preceded by an exclamation +point (|!|), then the file is located in the main project directory (this +feature is used for design art). + +Occasionally, a piece of art will include spurious whitespace on the edges +of the art, but within its bounding box. This whitespace is called *slop*, +and will result in the art appearing out of position. ZzTeX can compensate +for the slops if you specify them with the file name, as follows: + + \art{figure}{{smi01f01,0pt,5pt,0pt,3pt},...} + +Note the extra set of braces around the file name and slops. All four slops +must be specified, in this order: left side, right side, top, bottom. If all +the slops are less than 1.5 points or so, there is no need to include them. +We haven't used slops much in the past decade or so; we simply ask the +illustrator to eliminate the whitespace. + +=== Width and Height + +If both the width and height are specified as zero (i.e., |0pc,0pc|), then the +art will be dynamically sized when the file is processed. ZzTeX inspects the +EPS file to determine the art size. If it cannot find the |%%BoundingBox| +comment that specifies the size, an error results. We use this feature +only for design art. + +The ZzSizeArt utility can automatically size the art in a chapter file. +Try |~.facility; sizing art| for more details. + +=== Scale Factor + +The scale factor specifies the scale at which the piece of art should be +placed, relative to its natural size. The scale factor must always be +specified, even if it is 100. There are three ways to specify it: + +* *percentage*&_A number that specifes the percentage of scaling. +The number may include decimal places. + +* |=|&_An equal sign specifies that the art should be scaled +to fit in the prevailing width. The width is usually the +text measure or the type area width. + +* |=*width*|&_An equal sign and a width specifies that the art should +be scaled to the specified width. +*. + +=== Aligning Side-by-Side Panels + +The |\art| command aligns side-by-side panels along their top edges. Sometimes +you want them aligned differently. To shift a panel vertically, specify a +top slop that is positive to shift the panel up or negative to shift the panel +down. + +Note that the slops are scaled by the scale factor, so the exact slop +required to shift the panel correctly may not be obvious. + +// Art Sizing +// --- ------ + + +.phrase art_sizing art sizing : text +.synonym sizing art +.synonym zzsizeart +.template += ZzSizeArt Art Sizing Utility + +The ZzSizeArt utility allows you to manipulate the art sizes specified in +|\art| commands in ZzTeX source files. Its two primary capabilities are to set +the sizes of art files by inspecting the Encapsulated PostScript (EPS) files +and to replace existing EPS files with new versions. + +The ZzSizeArt facility relies on the following conventions for art files: + +* The bulk of the art files for a book are stored in the art/ +subdirectory under the primary project directory. + +* Replacement art files are loaded into the new/ subdirectory under +the art/ directory before eventually being hoisted into the +art/ directory. + +* Before an art file in an |\art| command is sized, its width and height are +coded as |20pc,10pc|. This special combination signals that the art has not +been sized. + +* ZzTeX supports dynamic sizing by setting the |\art| size +to |0pc,0pc|. In this case, the size is determined by inspecting the +EPS file every time the chapter is processed, rather than being set +statically. Most ZzSizeArt commands ignore dynamically sized files. +*. + +== zzsizeart Command + +The zzsizeart command has the following syntax: + +| zzsizeart *root* *command* *additional-items* + +The *root* parameter specifies the root name of the book. It is usually +specified as a period (|.|), which causes ZzSizeArt to figure out the root +name. The command parameter is a keyword that determines which function +ZzSizeArt performs. Its functions are described in alphabetical order +in the following paragraphs. + +* |zzsizeart *root* reset *source-file*| + +This command resets all the art sizes in the specified ZzTeX source file to +|20pc,10pc|. Dynamically sized art files are ignored unless the |-all| option is +included, in which case they are reset also. + +If the |-scale| option is specified, then ZzSizeArt also resets the scale of +the art files to 100. + +* |zzsizeart *root* replace *optional-file-spec*| + +This command analyzes the replacement art files in the art/new/ subdirectory +to determine whether they are the same size as the existing art files and +can safely replace them. If a *file-spec* parameter is provided, only the +replacement files that match the file spec are analyzed. The command +generates a report about the replacement art files and displays it on the +screen. This reports tells you whether the replacement art files are the +same size or a different size. + +If the |-hoist| option is included, then any replacement art files that are the +same size as the existing files are hoisted from the new/ subdirectory up to +the art/ directory, replacing the old art files of the same names. The rest of +the replacement art files are left in the new/ subdirectory. You can use the +PrintEPS utility to generate a proof of the remaining art files, from which +you can read the sizes of those files. Also see the |tell| command below. + +If the |-all| option is also specified, then all replacement art files are +hoisted, including those that are a different size from the existing art +files. + +The |-epsilon=*w*,*h*| option specifies the epsilon values for the width (*w*) and +height (*h*). If the difference in size is within these epsilons, the +replacement file is considered the same size as the existing file. The +default width and heigh epsilons are both 1.5 points. + +* |zzsizeart *root* size *source-file*| + +This command sizes the |\art| commands in the specified ZzTeX source file by +analyzing the EPS files named in those |\art| commands. Every art file must have +the size |20pc,10pc|, except for dynamically-sized art files, which are +ignored. Every named art file must exist in the art/ subdirectory. The +source file is modified so that the art files have their actual sizes. + +If the |-ifexists| option is specified, then ZzSizeArt will size those art +files that exist in the art/ subdirectory and ignore any other files named +in |\art| commands. *All* art files must still have the size |20pc,10pc|, but any +files that do not exist will not be set to their actual sizes. + +If the |-partial| option is specified, then ZzSizeArt will size those art +files whose sizes are |20pc,10pc| and ignore any other art files named in |\art| +commands. This allows you to size art files that were not sized previously +for whatever reason, possibly due to a prior use of the |-ifexists| option. + +If both |-ifexists| and |-partial| are specified, then ZzTeX will size any +art file who size is |20pc,10pc| and that exists in the art/ subdirectory. + +* |zzsizeart *root* tell *eps-file* ...| + +This command analyzes the specified EPS files and displays a report giving +their sizes. This is useful when you need to know the sizes of a few EPS +files in order to update their |\art| commands by hand. +*. +---- +For more details on the |\art| command, try |~.facility; \art|. + +// Cleanup Report +// ------- ------ + + +.phrase cleanup_report cleanup report +.synonym clean-up report +.synonym clean up report +.template += Cleanup Report for ~.project; + +This report describes the chapter cleanup activities for books +in general and ~.project; in particular. + +Before reading this report, it's a good idea to read the design +report for ~.project;. Try |~.facility; design report|. + +== General Cleanup + +=== Clean Up Headings + +The heads in sectioning commands (e.g., |\chapter|, |\section|) and +tables, along with the titles in captions, must be formatted according +to the design. This involves + +* Captitalizing them correctly + +* Adding or removing trailing punctuation + +* Ensuring that run-in heads have no blank lines after them + +* Adding |\noindent| commands where they might be missing + +* Once the chapter is processed, turning multi-line heads with +|\titlenl;| or |\titletl;| +*. + +Here are the styles of the various heads and titles. + +&= Command& Style +---- +~foreach cmd, style_table; +& ~.cmd;& ~.style_table[cmd]; +~end; +&. + +=== Clean Up Floats + +The cleanup for floats involves + +* Making sure there is a blank line on either side + +* Determining whether the author embedded floats in the middle of +paragraphs and merging the broken paragraph segments + +* Moving floats after the first paragraph of reference (this may be +easier during page make-up) + +* Placing the correct file names in |\art| commands. + +* Checking captions to see if they need a |\legend| marker. +*. + +// \code Block +// ----- ----- + +.details code_details \code +.template code_details subclass_set command code +== Code Facilities + +This tutorial describes the ZzTeX code facilities. These facilities are +used to produce computer program code examples. + +=== The |\code| Block + +The |\code| command has the following syntax: + +| \code{*type*} +| *line of code* +| ... +| *line of code* +| \endcode + +The *type* argument specifies the type of the code block and thus its +design. Each line of code is set more or less verbatim and line breaks +are preserved as they are. Code blocks are almost always set in a monospaced +font so that indentation can be accomplished with spaces at the beginnings +of lines. + +=== Verbatim Lines + +The degree to which the code lines are taken verbatim is determined +by certain block design parameters. To investigate the design +parameters for a code block, try |~.facility; \code*type* details|. + +* |\allowTeXcommands|&_If this flag is on, ZzTeX commands can be +included in the code, as long as they use only backslash and +braces (|\|, |{|, |}|). This flag is on in most code blocks. +To include those characters in the code itself, you must use: +|\\|, |\{|, |\}|. + +* |\allowTeXmath|&_If this flag is on, math expressions can be +included in the code, using dollar sign, underscore, and hat (|$|, +|_|, |^|). This flag is off in most code blocks. To include those +character in the code itself, you must use: |\$|, |\_|, |\hat|. +(See |\codemath| for another way to include math in code.) + +* |\allowatsigncommands|&_If this flag is on, at-sign commands +can be included in the code and would probably be provided by +the code design. This flag is off in most code blocks. To include an +at-sign in the code itself, you must use: |\@|. + +=== |\code| Tools + +The following list includes all the tools that can be used within a |\code| +block. You can explore these various commands to learn what they do. + +~foreach name, name_set; +* |~.name;| +~end; +*. + +// \enunciation Block +// ------------ ----- + +.details enunciation_details \enunciation +.template enunciation_details +== The |\enunciation| Block + +This tutorial describes the ZzTeX |\enunciation| block, which produces +mathematical "enunciations" such as theorems, corollaries, and proofs. +Using the |\enunciation| command is reasonably straightforward, +but defining the various types of enunciations is a bit trickier. + +The format is the |\enunciation| command is: + +| \enunciation{*type*}{*optional-attribution*} + +The *type* argument specifies the type of the code block and thus its +design. The *optional-attribution* argument can have one of three +formats. Note that the second set of braces is required in *all* cases. + +# |{}|&_If empty, there is no attribution for the enunciation. +& Theorem 1.1.&_There exist irrational numbers ... +&. + +# |{Smith's Conjecture}|&_The specified text is the attribution for the +enunciation. +& Conjecture 1.2 (Smith's Conjecture).&_Let *K* be the *n*th cyclotomic field ... +&. + +# |{\title Kleene's Theorem}|&_The text specified after the |\title| marker +is the complete title for the enunciation. +& Kleene's Theorem.&_Every language definable with a regular expression ... +&. +#. + +=== Defining an Enunciation Type + +Prior to ZzTeX v5.8, each enunciation type had to be defined by +writing a complete design macro, as with other block types. There +are some subtle issues that make this difficult. In v5.8, the +|\definenunciation| command was added. + +| \defineenunciation{*type*}{*association*}{*design*} + +The first argument is the enunciation's type. The second argument +can be empty or specify the type of another enunciation whose +number counter is to be shared. Both types of enunciation will be +numbered sequentially with the same counter. + +The third argument specifies a design macro for the base design +that is to be used for this new enunciation type. Multiple enunciations +can share the same base design. For example, + + \defineenunciation{conjecture}{}{\enunciationtheoremlikedesign{Conjecture}} + \defineenunciation{corollary}{}{\enunciationtheoremlikedesign{Corollary}} + \defineenunciation{definition}{}{\enunciationtheoremlikedesign{Definition}} + \defineenunciation{lemma}{}{\enunciationtheoremlikedesign{Lemma}} + \defineenunciation{proof}{}{\enunciationprooflikedesign{Proof}} + \defineenunciation{proposition}{}{\enunciationtheoremlikedesign{Proposition}} + +There are two base designs for these enunciations: |\enunciationtheoremlikedesign| +for enunciations formatted like theorems, and |\enunciationprooflikedesign| +for enunciations formatted like proofs. Note that the two design macros expect +an argument that is the word to appear in the title of the enunciation (e.g., +"Conjecture", "Proof"). + +So defining a set of related enunciations boils down to writing one +base design macro. + +=== Base Enunciation Design + +Most of the details about enunciation design macros are the same +as other design macros. There are two interesting additions. + + \def \enunciationtheoremlikedesign #1{% + \aboveskip = \standardskip + ... + \def \labelformat ##1{% + \noindent + \attributiontypecase + {\llap{\colortext{darkblue}{\enunnumbersize\dbf #1 \the\enunciationcomptext}% + \hspace{10pt}}}% no attribution + {\llap{\colortext{darkblue}{\enunnumbersize\dbf #1 \the\enunciationcomptext}% + \hspace{10pt}}##1.\quad}% normal attribution + {\llap{\colortext{darkblue}{\enunnumbersize\dbf ##1}% + \hspace{10pt}}}% title override + \ignorespaces}% + +The first addition is that the design macro accepts an argument that is +the word to be set in the title. The |#1| in the first line represents +that argument. + +The second addition is the |\attributiontypecase| command in the +label formatter. It takes three arguments, each of which formats the +title (label) of the enunciation. The three arguments correspond to the +three title argument formats described above. + +# The attribution argument is empty. +# The attribution argument specifies an attribution. +# The attribution argument includes the |\title| marker. +#. + +=== The |\defineeoedingbat| Command + +The |\enunciation| block includes a design parameter named |\autoqed|. +This parameter can specify the name of an "end-of-enunciation dingbat" +that should appear at the end of the enunciation. + + \def \enunciationprooflikedesign #1{% + ... + \autoqed = {\qed}% + +The |\qed| command, which typesets a dingbat, is automatically performed +at the end of enunciations based on the |\enunciationprooflikedesign| +design. To override the position of the resulting dingbat, you can +specify the |\qed| command explicitly in the text of the enunciation. + +An end-of-enunciation dingbat is defined with + +| \defineeoedingbat{*name*}{*text*}{*space*} + +The first argument is the name of the dingbat command. The second argument +is the text of the dingbat. The third argument specifies how to +separate the dingbat from the final word of the enunciation. + +* |{10pt}|&_The dingbat is set 10 points from the final word. + +* |{\flushright 8pt}|&_The dingbat is set flush right, but a minimum +of 8 points must separate it from the final word. +*. + +So the |\qed| dingbat used above could be defined with + + \defineeoedingbat{\qed}{\colortext{darkblue}{\slug{5pt}{5pt}}}{\flushright 8pt} + +// Environments +// ------------ + + +.phrase environments environments : text +.synonym LaTeX environments +.template += LaTeX Environments + +A LaTeX *environment* is the equivalent of a ZzTeX *block*. +The term environment is not used in ZzTeX. + +// \eqno Marker +// ----- ------ + +.details eqno_details \eqno +.template eqno_details +== Equation Numbers + +This tutorial describes the ZzTeX facilities for setting equation numbers on +math displays. An equation number is set with the |\eqno| marker, which can +appear in three places: + +# At the end of a single-line math display, before the closing |$$|. + +# At the end of an aligned math display, *after* the close brace of the +|\eqaligned| and before the closing |$$|. In this case, the number pertains +to the entire display. + +# At the end of a row of an aligned display, just *before* the |\cr| or +close brace of the |\eqaligned|. In this case, the number pertains to +the row in which it appears. +#. + +Almost all book designs call for one of two formats of equation number. In +most cases, the number consists of the chapter composite text and a sequence +number within the chapter, as in "3.17". In a few cases, only a sequence +number is used, as in "17". In the descriptions below, *chap* stands for the +chapter composite text, while *num* stands for the equation sequence number. The +sequence number is derived from the math display counter, in the same manner +as section numbers are derived from the section counter. + +You can code an equation number in one of four ways: + +| \eqno +| \eqno \tag{*xyz*} +| \eqno *override* +| \eqno *override* \tag{*xyz*} + +The optional *override* text is used to override the normal numbering sequence. +A space or line break can be placed before and/or after the |\tag| command to +aid readability. The |\tag| command must appear immediately following its +paired |\eqno| in order to associate the tag with the correct equation +number. + +The following paragraphs present the various forms of the *override* text for +overriding the numbering sequence. Each case includes two examples, the +first where the equations are numbered in the common (*chap*.*num*) format, and +the second where the equations are numbered with only a sequence number, as +in (*num*). The examples assume that the chapter number is 2 and the +math display counter is at 4 prior to the display +and also show the counter *after* the equation number is typeset. + +* |\eqno|&_&_&_Next sequence number + +The math display counter is incremented and its arabic form is used as +the *num* text. This is the common case. + +&= Result when& Result when +&= (*chap*.*num*) style& (*num*) style& Counter After +---- +& (2.5)& (5)& 5 +&. + +* |\eqno +a|&_&_&_Next sequence number; use with suffix + +The math display counter is incremented and its arabic form is joined +with the suffix following the plus sign to make up the *num* text. + +&= Result when& Result when +&= (*chap*.*num*) style& (*num*) style& Counter After +---- +& (2.6a)& (6a)& 5 +&. + +* |\eqno ,b|&_&_&_Same sequence number with suffix + +The math display counter is *not* incremented. Its arabic form is joined +with the suffix following the comma to make up the *num* text. + +&= Result when& Result when +&= (*chap*.*num*) style& (*num*) style& Counter After +---- +& (2.4b)& (4b)& 4 +&. + +* |\eqno ,$'$|&_&_&_Same sequence number with suffix + +This is another example of the preceding case, showing the common use +of a prime after the *num* text. + +&= Result when& Result when +&= (*chap*.*num*) style& (*num*) style& Counter After +---- +& (2.4′)& (4′)& 4 +&. + +* |\eqno A1|&_&_&_Ignore sequence number; use specified *num* + +The math display counter is ignored. The specified text is used as the +complete *num* text. + +&= Result when& Result when +&= (*chap*.*num*) style& (*num*) style& Counter After +---- +& (2.A1)& (A1)& 4 +&. + +* |\eqno :A1|&_&_&_Next sequence number; use specified *num* + +The math display counter is incremented *but then ignored*. The specified +text is used as the complete *num* text. + +&= Result when& Result when +&= (*chap*.*num*) style& (*num*) style& Counter After +---- +& (2.A1)& (A1)& 5 +&. + +* |\eqno =12;a|&_&_&_Set sequence number; use with suffix + +The math display counter is set to 12 and its arabic form is joined +with the suffix following the semicolon to make up the *num* text. Note that +the suffix (|a| here) is optional but the semicolon is required. + +&= Result when& Result when +&= (*chap*.*num*) style& (*num*) style& Counter After +---- +& (2.12a)& (12a)& 12 +&. + +* |\eqno !2B.1|&_&_&_Use specified text for number + +The chapter composite text and math display counter are ignored. The text +following the exclamation point is the complete equation number. This +feature is useful when you need to set an out-of-sequence equation number +in something like a sidebar or a chapter appendix. + +&= Result when& Result when +&= (*chap*.*num*) style& (*num*) style& Counter After +---- +& (2B.1)& (2B.1)& 4 +&. + +* |\eqno >{*tag*}|&_&_&_Use equation number associated with tag + +The chapter composite text and math display counter are ignored. The equation +number associated with the tag is duplicated for the equation number +of this display. +*. + +If you ever need to reset the math display counter, the following command +will do it: + +| \setmathdisplaynumber{*num*} + +// Indexing +// -------- + +.phrase indexing indexing : text +.template += Indexing Facilities, version 2 + +This tutorial describes the second generation ZzTeX indexing facilities. +These facilities are used to index a document with embedded indexing commands and +then generate one or more indexes for typesetting. + +First, some definitions. + +* Locator.&_An item followng a heading that refers the reader to related +information in the book. This is usually a page number or range, +but sometimes a "See" or "See also." The term *locator* is also used +for the commands that are inserted in the text to create index entries. + +* Main heading.&_The heading of a top-level entry in an index. + +* Raw index entry.&_A locator command such as |\xpage| generates +a raw index entry in the raw index entry files. The entry contains +unformatted information about the locator. + +* Sort override.&_An alternate heading used in place of a regular heading +to specify how it should be sorted, For example, the heading "3-D" +might have a sort heading of "three D". + +* Subheading.&_The heading of a second- or third-level entry in an index, +subordinate to a main heading. +*. + +== Indexing Locators + +Indexing locators are commands that are inserted in the text to produce raw index +entries that ultimately make up the index. This section describes typical +indexing locators. For another overview of locators, try |~.facility; +locators|. + +Most locator commands produce a raw index entry that identifies a page or range of +pages relevant to the headings. + + \xpage{Automobiles} + \xpage{Automobiles|muscle cars} + +Locator commands begin with an |x| and include a type word that identifies +the type of locator produced. The argument specifies one to three +headings, separated by vertical bars (|&||). The first heading is the main heading +and any remaining headings are subheadings. + +If the locator allows a page range, then the commands |\x*type*begin| and +|\x*type*end| identify the beginning and ending positions of the range. + + \xpagebegin{Automobiles} + ... + \xpageend{Automobiles} + +Some locators require an additional argument called the "text." This provides +more information about the locator. + + \xsee{Cars}{Automobiles} + \xseealso{Automobiles|muscle cars}{Automobiles|pony cars} + +Such locator commands produce locators that do not include a page number +but rather text that refers the reader to other entries. The additional +text argument is always the first argument of the locator command. + +=== Sort Overrides + +(To be supplied.) + +== Design File + +This section describes the commands that appear in the design file to define +locators and their formatting and specify the design of the indexes in the +book. The commands are described in the order in which they must appear in +the design file. + + \indexversion{2} + +This command must appear at the beginning of the Index section of the design +file. It specifies that version 2 of the indexing facility is being used. + +=== Generating Indexes + +Multiple indexes can be generated from the raw index entries of a book. Each +index is assigned a name and declared using the following command. + +| \generateindex{*name*} + +Typical names are |subject|, |author|, and |symbol|. For each generated +index, ZzTeX produces an "index parameter file" with the same name as the +index and the extension |zzp|. A parameter file contains information about +the defined locators and information taken from the design definition for +the named index. This information is used by the index generator to build +the final index file. (See below for a description of index parameter files.) + +=== Defining Locators + +| \definelocator{*type*}{*attributes*}{*optional-format*} + +This command defines an index locator and establishes the indexing commands +used to include the locator in the index. The first argument is the type word that +identifies the type of locator. Typical examples are |page|, |figure|, and +|see|. + +The second argument gives the attributes of the locator. It is a series +of keywords: + +* |\page|, |\nopage|&_Indicates whether the locator includes a page number. + +* |\range|, |\norange|&_Indicates whether the locator may be used to specify +a range of pages in addition to a single page. + +* |\text|, |\notext|&_Indicates whether the locator includes additional text. +*. + +Assume that the type is |thing|. In all cases, the following locator command +is defined: + +| \xthing{*headings*} + +If a range is allowed, then two additional commands are defined: + +| \xthingbegin{*headings*} +| \xthingend{*headings*} + +If the locator includes additional text, then all commands take a first +argument specifying the text: + +| \xthing{*text*}{*headings*} +| \xthingbegin{*text*}{*headings*} +| \xthingend{*text*}{*headings*} + +The third argument to |\definelocator| is optional and specifies the format +of the locator in the final index. If the braces are empty, then the +separetely defined format with the same name as the locator is used. To +provide the format, use three sets of braces to specify the second, third, +and fourth arguments for the |\definelocatorformat| command (below). The new +format will be given the same name as the locator. + +=== Defining Formats + +| \definelocatorformat{*name*}{*rank*.*order*}{*level-1-items*}{*level-2-items*} + +This command defines a locator format with the given name for the final index. +The third and fourth arguments specify items that are needed to format +the locator. The level-1-items are used for locators associated with main +headings, while the level-2-items include overrides that pertain to +subheadings (both second- and third-level). + +The second argument specifies the rank and order of this locator. The *rank* +determines this locator's position in the overall sequence of locators for a +heading. Typically, the page locators appear first, then the "see" locator, +then any "see also" locators. + +The *order* determines the order of the locator within a series of locators +all with the same page number. Typically, plain page numbers appear first, +then pages with suffix 'f' for figure, then pages with suffix 't' for table, +etc. + +& Mustang, 13, 44--49, 45*f*, 45*t* +&. + +Each item list argument is in the following format: + +| {*item*:*text*&|*item*:*text*&|...} + +There is a sequence of items separated by bars (|&||). Each item consists of +an item tag, a colon (|:|), and some text. The following item tags are +available. + +* |prefix1|&_Text to precede all locators of this rank, when this is +the first locator after the heading. Defaults to empty. + +* |prefix2|&_Text to precede all locators of this rank, when this is +not the first locator after the heading. Defaults to |prefix1|. + +* |tmplt|&_Template for this locator when there is a single page +or no page (only text). No default. + +* |rtmplt|&_Template for this locator when there is a range of pages. +No default. + +* |sep|&_Separator between locators of this rank. Defaults to empty. + +* |suffix|&_Text to follow all locators of this rank. Defaults to empty. + +* |term|&_Text to terminate the entire sequence of locators. Defaults to empty. +*. + +The templates |tmplt| and |rtmplt| may include the following substitutors. + +&= Substitutor& What is substituted +---- +& |?P|& Single page or first page of range. +& |?Q|& Second page of range. +& |?T|& Text (e.g., for |see| or |seealso| locators). +& |??|& Single question mark (|?|). +&. + +The builtin locators can be found in the ZzTeX file zzindexv2.tex. They +are good examples of how locator formats are defined. + +== Index Design + +Each index of a book is typeset inside an index block whose design is +specified, as usual, with a design macro. The parameters of the design macro +include many common ones, but also a few that are special for index designs. +The following paragraphs describe the special parameters. + +* |\def \alphaformat ##1{*text*}| + +This parameter specifies how to format the break between letters produced by +the |\alphbreak{...}| command. The macro is passed the argument text from the +|\alphabreak|. + +* |\divisions = {*div1*,*div2*,...}| + +This parameter specifies the book divisions to be included in the index. +The value can be |\all|; a list of division names; or |\allbut| followed by a +list of division names. + +* |\locators = {*loc1*,*loc2*,...}| + +This parameter specifies the locators to be included in the index. The value +can be |\all|; a list of locators; or |\allbut| followed by a list of locators. +Each locator consists of the locator type followed by an optional colon and +format name. If a format name is not included, then the locator is formatted +according to the format with the same name as the locator. + +* |\indexparams = {...}| + +This parameter specifies index parameter statements to be included in the +index parameter file. See below for a description of the parameter +statements. + +* |\position = {*options*}| + +This parameter specifies the overall format of the index. It consists of a +sequence of the following options: + +&= Option& Meaning +---- +& |\oneup|& Run index in one column. +& |\outline|& Format entries in outline style. +& |\runin|& Format entries in run-in (paragraph) style. +& |\threeup|& Run index in three columns. +& |\twoup|& Run index in two columns. +& |\usetextmeasure|& Use the text measure for the columns. +& |\usetextwidth|& Synonym for |\usetextmeasure|. +& |\usetypewidth|& Use the type area width for the columns. +&. +*. + +=== Entry Formatters + +(To be supplied.) + +== Raw Index Entry Files + +ZzTeX populates raw index entry files as it encounters indexing locator +commands in the book files. Each indexing locator generates one raw entry +record in the file whose name is the same as the division with an extension +of |.zzi|. A raw entry record has the following format. The semicolon (|;|) +represents the field separator character hex B8, chosen because it cannot +appear in an index heading. + +| *type*;*code*;*folio*;*main-head*;*subhead*;*sub-subhead*;*text* + +The *code* is |S| for a single page entry, |B| for a begin page range entry, +or |E| for an end range entry. + +== Index Parameter Files + +(This material is highly technical and incomplete.) + +An index parameter file contains a series of statements that specify +parameters for the index generator (zzindex2.exe). Each time an index is +generated, at least two parameter files are read: + +* *index-name*.zzp&_The parameter file generated by the |\generateindex| +command for the specific index being generated. + +* zzindex2.zzp&_A generic parameter file included with ZzTeX. +*. + +Each statement in a parameter file has the following format: + +| [*mode*] *keyword* *item* ... ; + +The optional mode is enclosed in brackets and specifies the mode to which +the statement pertains. If the mode is not specified, the statement is used +in all modes. The items are separated by spaces. The statement ends with a +semicolon. + +A parameter file may also contain blank lines and comment lines beginning +with |//|. Comment lines are ignored. + +Statements that specify actions for tokens in headings include the token for +which the action is to be performed. A token can be one of the following: + +&= Token& Meaning +---- +& |SP|& space +& |\SP|& TeX \<space> command +& |\*name*|& TeX |\*name*| command +& |\*c*|& TeX |\*c*| character command +& *x*& any other character +&. + +The following statements can appear in an index parameter file. + +* |begin-group *token* ;| + +The token begins a group and is discarded. The mode stack is pushed with the +current mode. + +* |define-format *format-text* ;| + +(To be supplied.) + +* |define-locator *definition-text* ;| + +(To be supplied.) + +* |[mode] discard *token* ;| + +The token is discarded and does not appear in the canonicalized heading. + +* |[mode] discard/u *token* ;| + +The token is removed from the heading but suffixed to the canonicalized +heading. + +* |divisions *divisions-text* ;| + +This statement specifies the required divisions from the |\divisions| parameter +of the index design. + +* |end-group *token* ;| + +The token ends a group and is discarded. The mode stack is popped. + +* |include-param *file* ;| + +This statement requests that the named index parameter file be loaded. + +* |include-raw *file* ;| + +This statement requests that the named raw index entry file be included in +the set of raw index entry files. + +* |index "*name*" ;| + +This statement specifies the name of the index to be generated. + +* |[mode] invalid *token* ;| + +The token is invalid and an error message is produced. + +* |[mode] keep *token* ;| + +The token is preserved as is on the canonicalized heading. + +* |locators *locators-text* ;| + +This statement specifies the required locators from the |\locators| parameter +of the index design. + +* |math/u *token* ;| + +The token begins or ends math mode. The mode stack is pushed or popped as +appropriate. The token is suffixed to the canonicalized heading. + +* |noise/u "*word*" ;| + +If the word appears at the beginning of a subheading or sub-subheading, it +is removed but suffixed to the canonicalized heading. + +* |[mode] replace *token* "*text*" ;| + +The token is discarded and replaced with the specified text, which is not +rescanned. + +* |[mode] replace/u *token* "*text*" ;| + +The token is discarded and replaced with the specified text, which is not +rescanned. The token is, however, suffixed to the canonicalized heading. + +* |root "*name*" ;| + +This statement specifies the name of the book's root file. + +* |sort *mode* ;| + +(To be supplied.) + +* |[mode] synonym *token* "*text*" ;| + +The token is discarded and replaced with the specified text, which is then +rescanned. +*. + +// Letterspacing +// ------------- + +.details letterspace_details \letterspace +.template letterspace_details +== Letterspacing + +This tutorial describes the letterspacing facility in ZzTeX. All letterspacing +is accomplished with the \letterspace command, which comes in two flavors: + +| \letterspace{*amount*}{*text*} + +This command letterspaces the specified text. The amount of letterspace is +specified by the first argument, usually in ems. + +| \letterspace{*amount*,*space*}{*text*} + +This command operates like the first variant, except that the width of a +space is specified explicitly after the letterspace amount. + +Note that |\letterspace| commands are usually embedded in design macros in +the design file. Rarely does one appear directly in book files. However, to +code titles that will be letterspaced, the compositor needs to understand +the behavior of the |\letterspace| command. + +=== What Happens Automatically + +What a title or other text is letterspaced, the |\letterspace| command does +the following things automatically: + +* Inserts the letterspace amount between adjacent pairs of keyboarded +characters (e.g, |AB|, |01|, |l.|). A "keyboarded character" is one that +is typed on the keyboard, not coded like |\copyright| or |\alpha|. + +* Replaces explicit spaces and tie characters (|~~|) with the space width +derived from the first argument to the |\letterspace| command. + +* Recognizes en dashes (|--|), em dashes (|---|), and double quotes (|``...''|) +and does not break them apart with letterspace. + +* Does *not* letterspace before or after ZzTeX commands, open braces (|{|), or +close braces (|}|). This means that there will be no letterspacing around +|\copyright|, |\ellipsis|, |\alpha|, |\times|, etc. +*. + +=== Explicit Control of Letterspacing + +The automatic rules take care of many letterspacing problems. However, +sometimes you need explicit control over letterspacing, so the following +commands can be used within a title that is letterspaced. If the same +title is carried elsewhere (such as into a running head) +but is not letterspaced there, these commands have no effect. + +& |\lsp|& Insert a letterspace amount here. +& |\lspspace|& Insert a letterspaced space here. +& |\lspoff|& Turn off letterspacing completely. +& |\lspon|& Restore letterspacing. +&. + +=== An Example + +The following diabolical example shows the power of the letterspacing +facility. Here is a chapter title that is letterspaced: + + \chapter{Text Access\titlenl; ``Methods''\titlenl; + \lspoff$a-b'\times c$\lspon\lsp---Why~~Isn't It?} + +This produces the following title, where the vertical bar represents a +letterspace and the underscore represents a space: + +& T&|e&|x&|t_A&|c&|c&|e&|s&|s +& "&|M&|e&|t&|h&|o&|d&|s&|" +& *a* - *b*′ × *c*&|---&|W&|h&|y_I&|s&|n&|'&|t_I&|t&|? +&. + +If this title is used in a running head or table of contents, the control +commands |\lspoff|, |\lspon|, and |\lsp| are ignored (as well as |\titlenl|, +of course). Note that the |\lsp| command is necessary to produce a +letterspace before the em-dash, since letterspacing is automatically +supressed after the |\lspon| command. + +// Runners +// ------- + +.phrase runners runners +.synonym running heads +.synonym running feet +.template += Running Heads and Feet + +Running heads and feet are collectively called *runners*. A design file can +make use of multiple styles of runners. One is built into ZzTeX: + +* |blind|&_A style with empty running heads and feet. +*. + +ZzTeX assumes the existence of two styles that must be defined in the +design file: + +* |normal|&_The style for normal body pages. +* |chapter|&_the style for chapter opener pages. +*. + +Specific designs may use additional styles defined in the design file, +for example: + +* |part|&_The style for part opener pages. +*. + +For each style (except |blind|), the design file contains two definitions, +one for the running head and one for the foot. These macros are responsible +for formatting the header and footer, often using mark information to +obtain chapter numbers, section titles, etc., and using |\folio| to obtain +the page number: + + \def \headernormalformat {...} + + \def \footernormalformat {...} + + \def \headerchapterformat {...} + + \def \footerchapterformat {...} + +== Runner Commands + +The following commands are used to establish the runner styles +for subsequent pages in the book. + +~foreach cmd, command_set; +* |~.cmd;| +~end; +*. + +Those commands are lovely but rarely used explicitly, except in +the front matter. Instead, runners are established using the |\runners| +parameter of certain blocks. + +== |\runners| Parameter + +The |\runners| parameter is a design parameter for certain blocks in ZzTeX. +It is usually specified in the design macros for those blocks in the design +file, but you can override the normal styles by using the |\with| modifier on +such blocks. + +The following list specifies the blocks that use the |\runner| parameter to +perform an implicit |\setrunners| command. Each entry shows the standard +value of the parameter: + +& |\part|& | \runners={blind,normal}| +& |\quasipart|& |\runners={blind,normal}| +& |\chapter|& |\runners={chapter,normal}| +& |\quasichapter|& |\runners={chapter,normal}| +& |\appendix|& |\runners={chapter,normal}| +& |\float|& |\runners={normal}| +&. + +Imagine you had a quasichapter and you wanted to suppress the drop folio +normally set by the chapter runners. You simply do the following: + + \with{\runners={blind,normal}} + \quasichapter{Weird Back Matter} + +You must remember to specify a second style of |normal| for the remaining +pages of the quasichapter or they will all have blind runners. + +You can accomplish the same goal as follows: + + \quasichapter{Weird Back Matter} + \overriderunners{blind} + +The |\float| block uses the |\runner| parameter to perform an implicit +|\overriderunners| command. +The float mechanism arranges to perform an |\overriderunners| with the +style specified by the |\runner| parameter when it is about set a page +containing *only floats*. If you want to suppress the running head on such a +page: + + \with{\runners={blind}} + \float{figure} + +However, see the |\userharea| block modifier for the best way to +accomplish this. + +== Some Examples + +A book with a two-page-spread chapter opener could use the |\runners| +parameter in the chapter design to set the correct runners for both +opener pages: + + \def \chapterdesign {% + ... + \def \paging {\freshpage{\short\floats\even}}% + ... + \runners = {blind,chapter,normal}% + ...} + +Some books have part pages but Chapter 1 occurs before Part I. If the +running heads include the part number and title, that will probably fail in +Chapter 1 because no part has been established. If the design file provides +a special runners style |normalnopart| for such "part-less" chapters, you +can use it quite easily: + + \with{\runners={chapter,normalnopart}} + \chapter{The First Chapter} + +// \tabbing Block +// -------- ----- + +.details tabbing_details \tabbing +.template tabbing_details +== Tabbing Facilities + +This tutorial describes the ZzTeX tabbing facilities. The primary +tabbing feature is the |\tabbing| block, which replaced the tabbing +capability of the |\text| block in ZzTeX v17.2. + +=== The |\tabbing| Block + +The |\tabbing| command has the following syntax: + +| \tabbing{*type*} +| *line of text*\nl +| *another line* +| &_*of text*\nl +| ... +| *last line of text*\nl +| \endtabbing + +The *type* argument specifies the type of the tabbing block and thus its +design. A line in the typeset block can occupy multiple lines in the +TeX file but must end with an |\nl| command. Line breaks in the file are +not taken verbatim. The |\nl| after the final line is optional. + +=== Setting Tab Stops + +There are two ways to set tab stops for the lines in a tabbing block. +The first is to set uniform tab stops across the line. The distance +between tab stops is specified by the |\defaulttabwidth| design +parameter. If this parameter is a positive dimension, say, |14pt|, +then tab stops are set every 14 points across the line. + +The second method of setting tab stops is to include a *template line* +at the beginning of the tabbing block. For example, + + \tabbing{algorithm} + @Cxxxxx@.xxxxx@.xxxxx@.xxxxxxxxxxxxxxx@.@D + +The |@C| command clears any existing tab stops. Each |@.| command +sets a tab stop at the current width of the line. In this example, +there will be a tab stop at the width of 5 |x| letters, 10 letters, +15 letters, and 30 letters. The |@D| command discards the line +so it doesn't show up on the page. The line exists only for the +purpose of setting the stops. + +=== Tabbing + +The |@>| command is used to tab from one tab stop to the next. In this +example, assume that tab stops are set every 14 points. + + \tabbing{algorithm} + $\mvar{scores} = \{\}$\qquad // score accumulator maps doc IDs to scores\nl + \For $w\in q$ \Do\nl + @>\For $d, \mvar{count}\in \mvar{Idx}.\mvar{fetch}\_\mvar{docs}(w)$ \Do\nl + @>@>$\mvar{scores}[d] = \mvar{scores}[d] + \mvar{score}\_\mvar{term}(\mvar{count})$ + @>\EndFor\nl + \EndFor\nl + \Return top $k$ documents from $\mvar{scores}$\nl + \endtabbing + +The third line is indented 14 points, the fourth line is indented 28 points, etc. + +Note that each |@>| command tabs to the next tab stop in the sequence of stops, +regardless of whether the width of the text is beyond that stop. If the width +of the text is beyond the next stop, the text following that stop will overprint +the preceding text. + +=== Vertical Adjustments + +The are two ways to make vertical adjustments between lines of text. +The first is to code a blank line: + + \tabbing{algorithm} + $\mvar{scores} = \{\}$\qquad // score accumulator maps doc IDs to scores\nl + \nl + \For $w\in q$ \Do\nl + +A blank line produces the amount of vertical space specified by the +|\tabbinggapskip| design parameter. This vertical space is usually +less than a full line. + +The second method of performaing a vertical adjustment is to use the +|\adjusttabbing| command in between two lines. Try |~.facility; \adjusttabbing| +for more information. + +=== Line Numbers + +[To be supplied.] + +// \tabular Block +// -------- ----- + +.details tabular_details \tabular +.template tabular_details subclass_set command tabular +== Tabular Facilities, version 3 + +This tutorial describes the third generation of the ZzTeX tabular +facilities. These facilities are used to produce tabular material in +text or in a floating table. + +First, some definitions: + +* Cell.&_The intersection of each row and column is called a cell. +The cell contains the text at that row/column intersection. + +* Column.&_Tabular material is organized into vertical columns. +Each column has a particular format, specified in the template. + +* Gutter.&_The gutter is the horizontal space between columns. It is +typically 1 pica and can stretch or shrink if tables are +to be forced to a particular width. The gutter between two +columns can be changed on a case-by-case basis. + +* Interrow space.&_An extra amount of vertical space that is placed between +rows of tabular material. + +* Picture.&_A sequence of characters used to determine the alignment +of decimal-aligned numeric columns. + +* Row.&_Tabular material is organized into horizontal rows, with + +* Ruled table.&_Tabular material that includes vertical rules. + +* Template.&_An argument to the \tabular command that specifies the +number of columns and the format for each column. +*. + +=== The |\tabular| Command + +The |\tabular| command has the following syntax: + +| \tabular{*type*}{*template*} +| *row* ... \cr +| *row* ... \cr +| ... +| *row* ... \cr +| \endtabular + +The *type* argument specifies the type of the tabular block and thus its +design. The *template* argument specifies the number of columns and their +associated formats (see below). + +Each row consists of a series of cells and is terminated by the |\cr| command +("carriage return" or "complete row"). The cells are specified as follows: + +| *cell-1*&& *cell-2*&&&& *cell-4*&& ...&& *cell-n*\cr + +There is one cell for each column and they are separated by ampersands +(|&&|). It is important to eliminate any spaces *preceding* the ampersands, +although spaces following them are fine. An empty cell is allowed, as with +the third cell above. + +In a ruled table, every cell in a row must be specified, although some may +be empty (the cells corresponding to rule columns usually are). In a table +that is not ruled, rightmost cells that are empty need not be specified. + +=== How ZzTeX Formats Tabular Material + +ZzTeX goes through the following steps to format tabular material. + +# The template is analyzed to check it, count the columns, and prepare the +individual column formats. + +# All rows are read and each cell is formatted in its own box. + +# The maximum width of the cells in each column is determined, and all the +cell boxes in that column are set to the maximum width. (See |\hidewidth| for +an exception.) + +# All the boxes in each row are set side by side, with the column gutter +between them. The widths of the rows are forced to the specified overall +table width, if required by the design. The extra space is placed in the +gutters. + +# The rows are butted together vertically, with no extra space between +them. +#. + +There are some interesting implications of this scheme: + +* Because every cell box in a column, except the widest, will not be filled +with text, the template for each column must include at least one |\hfil| +command to take up the slack. These |\hfil| commands are included in the +builtin templates described below. + +* Because there is no extra space between the rows, each row must occupy the +full height and depth of the tabular body font, plus any interrow space. +Otherwise the rows will not be spaced uniformly. It is this requirement that +makes ruled tables tricky. +*. + +=== The Template + +The template argument to the |\tabular| command is coded as a sequence of +format specifications, one for each column, in the desired order. + +| \tabular{*type*}{@*x* @*y* ... @*z*} + +The available column formats are specified as follows. Spaces and line +breaks may appear in the template for readability. + +* |@l|&_Single line; text flush left. + +* |@c|&_Single line; text centered. + +* |@r|&_Single line; text flush right. + +* |@L{*picture*}|&_Decimal-aligned number; text flush left. See below. + +* |@C{*picture*}|&_Decimal-aligned number; text centered. + +* |@R{*picture*}|&_Decimal-aligned number; text flush right. + +* |@p{*width*}|&_Text set in multiple lines as one or more +paragraphs. The width of the line is specified. +The raggedness, hang, and paragraph skip is +determined by the design. + +* |@e{*width*}|&_Empty column of the specified width. + +* |@s{*sequence*}|&_Special custom column. See below. + +* |@&||&_Column contains a vertical rule whose color and +width are determined by the design. This is a real +column that must be included in each row, but is +normally empty. + +* |@!{*color*}{*width*}|&_Column contains a vertical rule whose color and +width are specified. + +* |@>{*width*}|&_This template may appear following any of the +above templates. It specifies the exact width of +the gutter between the current column and the next, +in place of the standard gutter determined by the +design. Rule columns are surrounded by gutters half +as wide as the standard, unless overridden with |@>|. +If the width is follow by an asterisk (|&*|), then +the gutter can vary in width according to the +|\columngutter| parameter of the design. +*. + +=== Decimal-Aligned Columns + +Decimal-aligned column templates include a picture that determines how the +cells are aligned. The picture is composed of the following characters: + +& |0|& Represents a digit. +& |.|& Specifies the position of the decimal point. +& |,|& Indicates a comma in the number. +& |$-$|& Indicates that the number may be preceded by a negative sign. +& |(...)|& Indicates that the number may be surrounded by parentheses. +&. + +If there is no decimal point in the picture, the cells are aligned on the +right. If there is a decimal point, they are aligned on the point. The +difference between left-, center-, and right-aligned number columns is +irrelevant unless a nonnumeric cell in the column is wider than the widest +numeric cell. In this case the numeric cells are set flush left, center, or +right on those wider cells. This happens when the column heads are wider +than the numbers. + +Because ZzTeX splits decimal-aligned numbers at their decimal points, it is +necessary that both halves of the picture and of all the cell numbers +be balanced with respect to braces and dollar signs. + +=== Special Custom Columns + +A special custom column can be used to construct a complex column that +contains boilerplate material. For example, imagine a left column in which +all entries should be in italic and enclosed in parentheses. This column +could be specified as follows: + +| \tabular{table}{... @s{\emph{(#)}\hfil} ...} +| ...& special& ...\cr +| ...& critical& ...\cr + +The two cells would appear in italic in this format: + +| ... *(special)* ... +| ... *(critical)* ... + +Each cell is formatted by replacing the template sequence's sharp sign (|#|) +with the text specified in the row cell, then using the resulting sequence as +the final text of the cell. In the first row above, the final text would be +|\emph{(special)}\hfil|. Note that the template includes an |\hfil| command to +take up the slack and left-align the text. Don't forget the sharp sign and +at least one |\hfil|. + +=== |\tabular| Tools + +The following list includes all the tools that can be used with a |\tabular| +block. You can explore these various commands to learn what they do. + +~foreach name, name_set; +* |~.name;| +~end; +*. + +// \todo Block +// ----- ----- + +.details todo_details \todo +.template todo_details +== To-Do Facility + +The to-do facility allows you to place a +reminder in a book file and optionally to typeset '???' to represent text +that is still to come. + +The \todo command has three forms. The first form is used most frequently. + +| \todo{This math display needs to be cleaned up later.} + +This command displays the message on your console and includes it in the log +file. Processing continues without interruption. A summary of the number of +to-do reminders is displayed at the end of the run. + +| \todo{!Cannot continue until this table is formatted correctly.} + +This variant includes the message in the log file, but then generates a +warning message and halts execution. You can continue processing by +pressing Enter. Use this variant to force a halt when the division is +processed. + +| \todo{?cover image credit} + +This command is similar to the first variant, but also typesets a triple +question mark (|???|) where the |\todo| appears. You can use this variant to set +the standard triple question mark where text will be supplied later. + +To obtain a list of all the outstanding to-dos, try |~.facility; to-dos|. + +.end diff --git a/Master/texmf-dist/doc/plain/zztex/zzphrase.dat b/Master/texmf-dist/doc/plain/zztex/zzphrase.dat new file mode 100644 index 00000000000..5265a533721 --- /dev/null +++ b/Master/texmf-dist/doc/plain/zztex/zzphrase.dat @@ -0,0 +1,3085 @@ +//--------------------------------------------------------------------------- +// +// Copyright (c) 2012--2018 by Paul C. Anagnostopoulos +// +// This software may be used on your own computer systems and may +// be distributed freely to other people. It may not be sold or +// incorporated into any commercial products. +// +// Paul C. Anagnostopoulos +// Windfall Software +// 978 371-2316 +// paul@windfall.com +// +//--------------------------------------------------------------------------- +// +// ZzExplore: Describe built-in TeX, Plain TeX, ZzTeX, and design +// file entities for compositors. +// +// This is the main phrase file. +// +// Created: 3 March 2016 + + +// The following three templates are used to produce helpful explanations +// for phrases that do not match. + +// No match to phrase + +.template no_match += No Match +Your request: ~.phrase; + +There is no match for "~.word;". + +~if not empty? choice; +Some possibilities are: +~foreach ph, choice; +* ~.ph; +~end; +*. +~fi; +---- +If you think your request is reasonable, please inform Paul. + +// Ambiguous match to phrase + +.template ambiguous_match += Ambiguous Match +Your request: ~.phrase; + +The word "~.word;" is ambiguous. + +Some possibilities are: +~foreach ph, choice; +* ~.ph; +~end; +*. +---- +If you think your request is unambiguous, please inform Paul. + +// Partial phrase + +.template partial_phrase += Partial Phrase +Your request: ~.phrase; + +These words match the beginning of a phrase, but additional +words are needed. + +~if not empty? choice; +Some possibilities are: +~foreach ph, choice; +* ~.ph; +~end; +*. +~fi; + +If you are looking for a concept instead of specific examples, +it might help to try the plural of the word. +---- +If you think your request is complete enough to produce +a description, please inform Paul. + +// Help Text +// ---- ---- + + +// Help + +.phrase help help : text +.template += ~.facility; v~.version; + +~.facility; allows you to view descriptions of characters, commands, +block designs, and other entities that are defined by built-in TeX, +Plain TeX, ZzTeX, and book design files. It can also present more +detailed reports on concepts such as tags and tabular material. + +Invoke ~.facility; as follows: + +| > ~.facility; *word* *word* ... + +The *word* parameters form a phrase that ~.facility; uses to determine +which information you want to see. If you don't include any words, this +help text is displayed. Do *not* include question words and verbs in your +request (e.g., "what is"). + +~include command_line_chars; + +Without any options, the description is displayed on your terminal. If you +want to view a more stylish description in your browser, enter + +| > ~.facility; -browser *word* *word* ... + +The browser starts up in an independent window, allowing you to work and +read the description at the same time. Remember that you can close the +browser window with Alt+F4. + +It is recommended that you add the following +alias to your 4NT/Take Command alias file: + + exp*lore=~.facility; -browser %$ + +For a list of interesting examples of ~.facility;, enter + +| > ~.facility; examples + +For a list of what's new in version ~.version; and earlier versions, enter + +| > ~.facility; what's new + +.phrase examples examples : text +.template += Examples + +Here are some examples of things you can do with ~.facility;. + +* To see an overview of the current project: + + ~.facility; overview + +* To learn about a particular command: + + ~.facility; \overrideparlength + +* To find out whether a command is available for the current book: + + ~.facility; \separatefloat + +* To get information about a particular math character: + + ~.facility; \beta + +* To find out which types of enunciations or lists are available: + + ~.facility; enunciations + ~.facility; lists + +* To see some details about a particular enunciation: + + ~.facility; \enunciation theorem + +* To learn the names of the zzd design macros for enunciations: + + ~.facility; enunciation designs + +* To see all the details about the design of a particular enunciation: + + ~.facility; \enunciationtheoremdesign details + +* To learn what a count register is: + + ~.facility; counts + +* To get a list of all count registers or learn about a particular one: + + ~.facility; all counts + ~.facility; \sectionnumber + +* To see which type styles are available in the current book: + + ~.facility; type styles + +* To find out which type relationship commands are available +for a particular style: + + ~.facility; \tt + +* To find out which styles are established for a particular type +size and whether they can be used in math: + + ~.facility; \footnotesize + +.phrase whats_new what's new : text +.synonym what is new +.template += What's New in ~.facility; v~.version; + +* Complete description of the |\enunciation| block. +* Complete description of the indexing facility. +* Report of all bibliography entries for the project. +* Report of missing art files. +* List of commands for bibliography citations. +* Improved word matching for design elements that are not blocks. +* Improved report on at-sign commands. +* Complete documentation on the ZzSizeArt utility. +* Complete documentation on the new |\tabbing| block. +*. + +== What's New in ~.facility; v1.1 + +* This "what's new" report. +* Improved report on math classes. +* Improved report on individual characters. +* Improved report on Greek letter commands. +* Report on the new |\immediatemathdisplay| modifier. +* Improved report on the |\immediatesublist| modifier. +* Reports on the new |\breakabove| and |\breakbelow| modifiers. +* Improved reports on the |\bottomfloat| et al. modifiers. +* New page make-up report. +* Complete documentation on the |\tabular| block and related commands. +* Lists of commands for horizontal spacing and vertical spacing. +* Report on penalties. +* Complete documentation on the |\todo| command. +* Complete documentation on the title adjustment commands. +* Report on block modifiers. +* Complete documentation on the |\code| block and related commands. +* Improved documentation on tags. +* Complete documentation on the various forms of |\eqno|. +* Complete documentation on the |\letterspace| command. +* Complete documentation on the |\art| block. +* Complete documentation on running heads and feet (runners). +*. + +// ZzTeX et al Phrases +// ----- -- -- ------- + + +// Accents + +.phrase accents accents +.synonym text accents +.template += Accent Commands + +An accent command produces an accent over a character. +For example, + + Ha\v{c}ek na\"{\i}vet\'e, anyone? + +produces + +& Haček naïveté, anyone? +&. + +Here is a list of all the accent commands. + +&= Command& Description +---- +~foreach acc, accent_table; +& |~.acc;|& ~.accent_table[acc]; +~end; +&. +---- +For information on a specific accent, try |~.facility; \*name*|. + +// (Assumes that the 'one_command' group will also be populated.) +.phrase one_accent <name> accent +.synonym accent <name> +.synonym <name> text accent +.synonym text accent <name> +.template += |~.name;| Accent Command + +~include common_info; + +~.comment; + +An accent command produces an accent over a character. +---- +For a list of all accents, try |~.facility; accents|. + +// Attributes + +.phrase attributes attributes : text +.synonym command attributes +.template += Attributes + +When ~.facility; reports information about commands, math characters, and +other entities, it includes an item called *attributes*. An attribute +specifies special behavior of the command or character. Here is a list +of all the attributes. + +* internal: The command is internal to Plain TeX or ZzTeX and is never +used directly in design or book files. +* long: The argument to the command can include multiple paragraphs. +* outer: The command can only be used directly in a book file; it cannot +be used by another command. +* limits: The large operator (e.g., |\sum|) sets its limits above and below. +* no limits: The large operator sets its limit as sub- and +superscripts. +* display limits: The large operator set its limits above and below when +used in a math display; as scripts when used in text. +*. + +// Blocks + +.phrase blocks blocks : text +.synonym elements +.template += Blocks + +The block is the primary design element provided by ZzTeX design +files. A block generally spans a large amount of text that must +be formatted in a special way. Examples are lists, footnotes, +and framed text. + +Most blocks are started and ended with specific commands: + + \list{bullet} + \item ... + ... + \endlist + +A few blocks, however, are started and ended with the same command: + + \footnote{This is a footnote that will appear at the bottom.} + +A footnote has only one design style, or *type*. However, there can be an +arbitrary number of different types of lists, such as bullet, number, +label, and dialog. If a block requires a type, the type name is the first +argument to the block command, as with |\list{bullet}| above. + +Two blocks, |\text| and |\list|, can also be nested to produce, say, +multi-level lists. ZzTeX maintains the level counter automatically. + +Each block type and level has its own design. The designs are +embodied in design macros in the design file. For example, +the name of the design macro for a second-level bullet list is +|\listbulletiidesign|. A design macro is essentially a list of +assignments to *parameters* that control the formatting of the +block's text. + +There are two ways to modify the design of a specific block. +The first is to use a variant modifier, which produces predetermined +changes to the design. Try |~.facility; variants| for more information. +The second method is the |\with| modifier, which alters specified +design parameters for the block. Try |~.facility; \with| for +more information. +---- +For a list of all the available blocks, try |~.facility; all blocks|.&/ +For details on a specific block, try |~.facility; \*name*|. + +.phrase all_blocks all blocks +.template += List of Blocks + +This is the list of all the block elements available in ZzTeX. + +&= & Multiple& Can be& Used in +&= Block command& types?& nested?& ~.project; design? +---- +~foreach blk, type_table; +& |~.blk;|& ~.type_table[blk];& ~.nest_table[blk];& ~.used_table[blk]; +~end; +&. +---- +For more information, try |~.facility; blocks|&/ +For information on a particular block, try |~.facility; \*name*| + +// (Assumes that the 'one_command' group will also be populated.) +.phrase one_block <name> block +.synonym block <name> +.synonym <name> element +.synonym element <name> +.synonym <name> types +.synonym <nb-name> +.synonym <nb-name> blocks +.synonym <nb-name> elements +.synonym <nb-name> types +.synonym <nb-name-s> +.template += |~.name;| Block + +~include common_info; + +~.comment; + +The ~.name; block is one of the primary elements supported +by ZzTeX. + +~if not used?; +This block is not used in the ~.project; book. +~elsif empty? level_table; +This block is used in the ~.project; book. +A ~.name; does not have multiple design types. Its single +design is defined in ~.design_where;. +~else; +This table presents all the different +types of |~.name;| blocks available in the ~.project; design. + +&= Type& Levels& Defined +---- +~foreach type, level_table; +& |~.type;|& ~.level_table[type];& ~.where_table[type]; +~end; +&. +~fi; +---- +To see a description of this block's design parameters, +try |~.facility; ~.name; parameters|.&/ +~if used?;~ +To see some details about the |~.name;| design~* not empty? level_table; for the ~.project; +book, try |~.facility; ~.name; design|.&/~ +~fi; +For more information about blocks in general, try |~.facility; blocks|.&/ +For a list of all available blocks, try |~.facility; all blocks|.&/ + +.phrase block_params <name> parameters +.synonym <name>=\mathdisplay:$$ parameters +.synonym <name> design parameters +.synonym <name>=\mathdisplay:$$ design parameters +.template += |~.name;| Block Design Parameters + +Here is a list of all the design parameters for the |~.name;| +block. + +&= Parameter& Type& Description +---- +~foreach param, type_table; +& |~.param;|& ~.type_table[param];& ~.desc_table[param]; +~end; +&. + +// Block variants + +.phrase block_variants block variants : text +.synonym variants +.synonym design variants +.template += Block Variants + +A block variant is a modifier that can be applied to a block +command to alter the design of the block. Variants may only +be applied to block commands. + +For example, the |\widefigure| variant might be applicable +to a |\float| command to select a wider style for the figure. + + \widefigure \float{figure} + +Often there is a group of variants that all vary the design +of a block is related ways. For example, in addition to +|\widefigure| we might have + +* |\sidebysidefigure| +* |\widefigure| +* |\broadsidefigure| +*. + +Each of these modifiers applies to a figure float and vary its +design in specific ways. The three variants are mutually exclusive: +only one may be specified on any given |\float| command. +---- +For more information about a specific variant, try |~.facility; \*name*|.&/ +To see a list of variants for a specific block, try |~.facility; \*block*|. + +.phrase one_block_variant <name> +.synonym <name> variant +.synonym variant <name> +.synonym <name> block variant +.synonym block variant <name> +.synonym <name> design variant +.synonym design variant <name> +.template += |~.name;| Block Variant + +~include common_info; + +~.comment; + +A block variant is a modifier that can be applied to a block +command to alter the design of the block. This variant +applies to the |~.block;| block. It is a member of a group +of variants: + +~foreach i, variant_list; +* |~.variant_list[i];| +~end; +*. + +---- +For more information on block variants, try |~.facility; variants|. + +// Block modifiers + +.phrase block_modifiers block modifiers +.synonym modifiers +.template += Block Modifiers + +A block modifier is a command that can be applied to a block +to alter the design of the block. Modifiers may only +be applied to block commands. + +For example, the |\bottomfloat| modifier can be applied to +a |\float| command to place the float at the bottom of the page. + + \bottomfloat \float{figure} + +Note that block variants are another type of block modifier. + +Here is a list of all the block modifiers provided by ZzTeX and +the ~.project; design. It does not include block variants. + +&= Modifier& Where defined +---- +~foreach mod, where_table; +& |~.mod;|& ~.where_table[mod]; +~end; +&. +---- +For more information about a specific modifier, try |~.facility; \*name*|.&/ +For more information on block variants, a type of modifier, +try |~.facility; variants|. + +.phrase one_block_modifier <name> +.synonym <name> modifier +.synonym modifier <name> +.synonym <name> block modifier +.synonym block modifier <name> +.template += |~.name;| Block Modifier + +~include common_info; + +~.comment; + +A block modifier is a command that can be applied to a block +to alter the design of the block. +---- +For more information on block modifiers, try |~.facility; modifiers|. + +// Box registers + +.phrase boxes box registers : text +.synonym boxes +.template += Box Registers + +A box register contains a box that has horizontal or vertical material +in it. A box can contain a paragraph, a vertical sequence of paragraphs, +a short text fragment for measuring, etc. + +A box register is accessed and set as follows: + +| \box \*name* +| \setbox \*name* = \hbox {*horizontal material*} +| \setbox \*name* = \vbox {*vertical material*} +| \setbox \*name* = \vtop {*vertical material*} + +Boxes are never used directly in book files. +---- +For a list of all boxes, try |~.facility; all boxes|.&/ +For information on a particular box, try |~.facility; \*name*| + +.phrase all_boxes all box registers +.synonym all boxes +.template += List of Box Registers + +This is the list of all box registers available in ZzTeX. + +&= Register& Description +---- +~foreach reg, reg_table; +& |~.reg;|& ~.reg_table[reg]; +~end; +&. +~include internal_note; +---- +For more information, try |~.facility; boxes| + +.phrase one_box <name> +.synonym <name> box +.synonym box <name> +.synonym <name> register +.synonym register <name> +.synonym <name> box register +.synonym box register <name> +.template += |~.name;| Box Register + +~include common_info; + +~.comment; + +Default: |~.default;| + +A box register contains a box that has horizontal or vertical material +in it. A box can contain a paragraph, a vertical sequence of paragraphs, +a short text fragment for measuring, etc. +---- +For more information, try |~.facility; boxes| + +// Catcodes + +.phrase catcodes catcodes +.synonym category codes +.synonym character categories +.synonym character category codes +.template += Catcodes (Category Codes) + +A category code is assigned to every character read by TeX as it +processes files. A character's category code determines how TeX handles +that character. + +Here is a list of all the category codes. + +&= Number& Name& Meaning (example) +---- +~foreach i, name_table; +& ~.i;& |~.name_table[i];|& ~.meaning_table[i]; +~end; +&. + +.phrase one_catcode <name> +.synonym <name> catcode +.synonym catcode <name> +.synonym <name> category code +.synonym category code <name> +.template += |~.name;| Category Code + +~include common_info; + +~.comment; + +Value: ~.value; + +A category code is assigned to every character read by TeX as it +processes files. A character's category code determines how TeX handles +that character. +---- +For more information and list of all catcodes, try |~.facility; catcodes| + +// Characters + +.phrase characters characters + +.phrase one_character <name> +.synonym <name>=`T:tab +.synonym <name>=`F:formfeed +.synonym <name>=`R:newline +.synonym <name>=`_:space +.synonym <name>=":quote +.synonym <name>=%:percent +.synonym <name>=&:ampersand +.synonym <name>=':apostrophe +.synonym <name>=(:lparen +.synonym <name>=,:comma +.synonym <name>=<:less +.synonym <name>=>:greater +.synonym <name>=^:hat +.synonym <name>=`=:equal +.synonym <name>=``:backquote +.synonym <name>=|:bar +.template += ~.name; Character + +~include common_info; + +~.comment; + +& Catcode:& |~.catcode;| +& Font position:& |~.position;| +& Math class:& |~.math_class;| +& Math family:& |~.math_family;| +&. +---- +For information on catcodes, try |~.facility; catcodes|.&/ +For information on math classes, try |~.facility; classes|.&/ +For information on math families, try |~.facility; families|. + +// Citation commands + +.phrase citations citations +.synonym citation commands +.template += Citation Commands + +A citation command is a command that accepts a bibliography item tag and produces +a citation (reference) to that item. For example + + As \citenoun{smith16} describes, the widget ... + +might produce + +& As Smith [2016] describes, the widget ... +&. + +The following table lists all the citation commands available +for the ~.project; book. Be careful to read about the commands +defined in the design file (~.project;.zzd) first; some of +them might specify that certain other citation commands should +not be used. + +&= Command& Defined +---- +~foreach cmd, where_table; +& |~.cmd;|& ~.where_table[cmd]; +~end; +&. + +// Command line + +.phrase command_line command line : text +.template += Command Line + +Some characters are difficult or impossible to specify on the +4NT/Take Command command line. The following table shows how to +specify such characters by themselves or as the second +character of a character command. + +& & How to Specify& How to Specify +& Character& Character& Character Command +---- +& <newline>& |newline|& |\.newline| +& <formfeed>& |formfeed|& |\.formfeed| +& <space>& |space|& |\.space| +& |"|& |quote|& |\.quote| +& |%|& |percent|& |\.percent| +& |&&|& |ampersand|& |\.ampersand| +& |'|& |apostrophe|& |\.apostrophe| +& |(|& |lparen|& |\.lparen| +& |,|& |comma|& |\.comma| +& |<|& |less|& |\.less| +& |&=|& |equal|& |\.equal| +& |>|& |greater|& |\.greater| +& |^|& |hat|& |\.hat| +& |`|& |backquote|& |\.backquote| +& |&||& |bar|& |\.bar| +&. + +// Commands + +.phrase commands commands +.synonym macros +.template += Commands + +Commands are the primary entity with which TeX files are coded +to produce beautiful text. A command name consists of a backslash +(|\|) followed by + +* A sequence of upper- and lowercase letters (e.g., |\sin|), or +* A single non-letter character (e.g., |\,|) +*. + +Command names are *case-sensitive;* that is, an uppercase letter +is different from the same lowercase letter. So |\big| and |\Big| +are two different commands. + +A command name can operate by itself or it can require *arguments,* +which are pieces of text that the command uses to perform its +function. Arguments are usually enclosing in braces (|{|...|}|). +However, if there is a single argument composed of a single Roman +or Greek letter, then no braces are necessary. + + For example, you can set an acute accent on a character using + braces, as in \'{a}, but the braces aren't necessary: \'a. + +When scanning a command, TeX has one rule that can cause trouble. +Spaces and a single line break following a letter command are ignored. +So the text + + Don't you love the text that \TeX can produce? + +will result in the following: + +& Don't you love the text that TeXcan produce? +&. + +There are two solutions, the first of which is preferred. + + Don't you love the text that \TeX\ can produce? + Don't you love the text that \TeX{} can produce? + +Command names containing an at-sign (|@|) or beginning with '|z|' +are internal to TeX and ZzTeX. +---- +For information on a specific command, try |~.facility; \*name*|.&/ +For information on the attributes item included with individual +command descriptions, try |~.facility; attributes|.&/ +~include command_line_chars; + +== Command Counts + +For your edification, this table presents the number of commands +defined by TeX and ZzTeX. + +&= Count& Origin of command +---- +& ~.builtin_count;& Built-in TeX +& ~.plain_count;& Plain TeX macro package (many superceded by ZzTeX) +& ~.zztex_count;& ZzTeX macro package +& ~.zzd_count;& Design file(s) +&. + +.phrase one_command <name> +.synonym <name>=\`R:\.newline +.synonym <name>=\`_:\.space +.synonym <name>=\":\.quote +.synonym <name>=\':\.apostrophe +.synonym <name>=\,:\.comma +.synonym <name>=\^:\.hat +.synonym <name>=\`=:\.equal +.synonym <name>=\``:\.backquote +.synonym <name>=\mathdisplay:$$ +.synonym <name> command +.synonym <name>=\`R:\.newline command +.synonym <name>=\`_:\.space command +.synonym <name>=\":\.quote command +.synonym <name>=\':\.apostrophe command +.synonym <name>=\,:\.comma command +.synonym <name>=\^:\.hat command +.synonym <name>=\`=:\.equal command +.synonym <name>=\``:\.backquote command +.synonym command <name> +.synonym <name> macro +.synonym macro <name> +.template += |~.name;| Command + +~include common_info; + +~.comment; +---- +~include command_info; + +// Count registers + +.phrase counts count registers : text +.synonym counts +.template += Count Registers + +A count register contains an integer that can be used as a counter, +to number elements, to hold an integer parameter value, etc. + +A count register is accessed and set as follows: + +| \*name* +| \*name* = *integer* + +Counts are rarely used directly in book files. +---- +For a list of all count registers, try |~.facility; all counts|.&/ +For information on a particular count register, try |~.facility; \*name*|. + +.phrase all_counts all count registers +.synonym all counts +.template += List of Count Registers + +This is the list of all count registers available in ZzTeX. + +&= Register& Description +---- +~foreach reg, reg_table; +& |~.reg;|& ~.reg_table[reg]; +~end; +&. +~include internal_note; +---- +For more information, try |~.facility; count registers| + +.phrase one_count <name> +.synonym <name> count +.synonym count <name> +.synonym <name> register +.synonym register <name> +.synonym <name> count register +.synonym count register <name> +.template += |~.name;| Count Register + +~include common_info; + +~.comment; + +Default: |~.default;| + +A count register contains an integer that can be used as a counter, +to number elements, to hold an integer parameter value, etc. +---- +For more information, try |~.facility; counts| + +// Declarations + +.phrase declarations declarations : text +.template += Declarations + +A TeX declaration has a name like a command, but it does not +take any arguments. Instead, it pertains to the following text in +the current brace group. + +Example: |{\it *text*}| + +The *text* is set in italic style, but text following the close brace +is not. The braces limit the scope of the declaration. + +Declarations are used in design files but rarely in book files. +There is almost always a command that should be used instead. + +Example: |\emph{*text*}| +---- +For information on commands, try |~.facility; commands| + +.phrase one_declaration <name> +.synonym <name> declaration +.synonym declaration <name> + +// Designs + +.phrase designs designs : text +.synonym block designs +.template += Block Designs + +A block design is embodied in a macro usually located in a +book's design file. There are a few block designs built into +ZzTeX. The block design macro contains a list of block +parameter assignments that together specify the features +and format of the block. + +The block design macro name comes in three flavors. + +& |\def \footnotedesign|& The block does not have multiple types +& |\def \floatfiguredesign|& The block has multiple types +& |\def \listbulletidesign|& The block has multiple types and levels +&. + +Within the design macro definition is a sequence of parameter +assignments and other TeX coding to establish the design for +that particular block, block type, or block type/level. Each +time ZzTeX encounters a block in a book file, it executes the +design macro to establish the design, then processes the contents +of the block. +---- +To see details about a design, try things like: + +| ~.facility; \listbulletidesign +| ~.facility; \float{figure} +| ~.facility; list bullet i + +// The phrases for a block with no type; e.g., \footnotedesign. + +.phrase one_design_notype <name> +.synonym <name> macro +.synonym <block> design +.synonym <block>=\mathdisplay:$$ design +.synonym <block> design macro +.synonym <nb-block> design +.synonym <nb-block> design macro +.template += |~.name;| Design Macro + +~include common_info; + +~include design_info; + +~.comment; +---- +~include gory_details; + +// The phrases for a block with a type, but no type specified. + +.phrase-dups one_design_type_general <block> designs +.synonym <block> design macros +.synonym <nb-block> designs +.synonym <nb-block> design macros +.template += |~.block;| Design Macros + +The following table shows a list of all the design macros +available in the ~.project; book for the various types of |~.block;|. + +&= Design Macro& Element +---- +~foreach des, design_table; +& |~.des;|& ~.design_table[des]; +~end; +&. +---- +For information on a specific type, try |~.facility; ~.block; *type*|. + +// The phrases for a block with a specified type. + +.phrase one_design_type_specific <name> +.synonym <name> macro +.synonym <block> <type> +.synonym <block> <type> design +.synonym <block> <type> design macro +.synonym <nb-block> <type> +.synonym <nb-block> <type> design +.synonym <nb-block> <type> design macro +.synonym <type> <nb-block-s> +.synonym <type> <nb-block> designs +.synonym <type> <nb-block> design macros +.template += |~.name;| Design Macro + +~include common_info; + +~include design_info; + +~.comment; +---- +~include gory_details; + +// The phrases for a block with a type and level, but no type or level specified. + +.phrase-dups one_design_level_general <block> designs +.synonym <block> design macros +.synonym <nb-block> designs +.synonym <nb-block> design macros +.synonym <block> <type> designs +.synonym <block> <type> design macros +.synonym <nb-block> <type> designs +.synonym <nb-block> <type> design macros +.synonym <type> <nb-block-s> +.synonym <type> <nb-block> designs +.synonym <type> <nb-block> design macros +.template += |~.block;| Design Macros + +The following table shows a list of all the design macros +available in the ~.project; book for the various types of |~.block;|. + +&= Design Macro& Element +---- +~foreach des, design_table; +& |~.des;|& ~.design_table[des]; +~end; +&. +---- +For information on a specific type and level, +try |~.facility; ~.block; *type* *level*|. + +// The phrases for a block with a specified type and level. + +.phrase one_design_level_specific <name> +.synonym <name> macro +.synonym <block> <type> <level> +.synonym <block> <type> <level> design +.synonym <block> <type> <level> design macro +.synonym <nb-block> <type> <level> +.synonym <nb-block> <type> <level> design +.synonym <nb-block> <type> <level> design macro +.template += |~.name;| Design Macro + +~include common_info; + +~include design_info; + +~.comment; +---- +~include gory_details; + +.phrase design_details <name> details +.template += ~.name; Design Details + +~include common_info; + +~include design_info; + +~if not empty? inblock_set; +The design is modified when the block appears inside these surrounding blocks: +~foreach blk,inblock_set,iter;~,blk,iter /= 1;~end; +~fi; + +Here is a table of all the parameter values set by this design macro. + +&= Parameter& Type& Value& Note +---- +~foreach param, type_table; +& |~.param;|& ~.type_table[param];& |~.value_table[param];|& ~.note_table[param]; +~end; +&. + +~if affected?; +(Some parameters may be missing due to design changes caused by variants +or nesting inside outer blocks.) +~fi; +---- +For the complete story on this design, see ~.where;. + +// Dimen registers + +.phrase dimens dimension registers : text +.synonym dimensions +.template += Dimen(sion) Registers + +A dimen register contains a dimension that can be used as the width, +height, or depth of a box, an indentation amount, a page dimension, etc. + +A dimen register is accessed and set as follows: + +| \*name* +| \*name* = *dimension* + +Dimensions are rarely used directly in book files. +---- +For a list of all dimen registers, try |~.facility; all dimens|.&/ +For information on a particular dimen register, try |~.facility; \*name*|. + +.phrase all_dimens all dimension registers +.synonym all dimensions +.template += List of Dimen(sion) Registers + +This is the list of all dimen registers available in ZzTeX. + +&= Register& Description +---- +~foreach reg, reg_table; +& |~.reg;|& ~.reg_table[reg]; +~end; +&. +~include internal_note; +---- +For more information, try |~.facility; dimen registers| + +.phrase one_dimen <name> +.synonym <name> dimension +.synonym dimension <name> +.synonym <name> register +.synonym register <name> +.synonym <name> dimension register +.synonym dimension register <name> +.template += |~.name;| Dimen(sion) Register + +~include common_info; + +~.comment; + +Default: |~.default;| + +A dimen(sion) register contains a dimension that can be used as the width, +height, or depth of a box, an indentation amount, a page dimension, etc. +---- +For more information, try |~.facility; dimens| + +// Encodings + +.phrase encodings style encodings +.synonym encodings +.synonym font encodings +.template += Style Encodings + +A style encoding is an integer value that specifies the overall organization +of the fonts associated with that style. For example: + +* \encoderoman is the encoding for typical Roman text fonts. +* \encodeitalic is the encoding for typical italic text fonts. +* \encodemathitalic is the encoding for math fonts containing +italic letters for use as variables. +*. + +The encoding for a type style is specified in the |\definetypestyle| +command for that style. + +Here are all the style encodings supported by ZzTeX. + +&= Encoding& Value& Meaning +---- +~foreach val, value_set; +& ~.encoding_table[val];& ~.val;& ~.meaning_table[val]; +~end; +&. +---- +For a list of type styles and their encodings, try |~.facility; type styles|. + +.phrase one_encoding <name> +.synonym <name> encoding +.synonym encoding <name> +.synonym <name> style encoding +.synonym style encoding <name> +.synonym <name> font encoding +.synonym font encoding <name> +.template += |~.name;| Style Encoding + +~include common_info; + +~.comment; + +Value: ~.value; + +A style encoding is an integer value that specifies the overall organization +of the fonts associated with that style. +---- +For more information and list of all encodings, try |~.facility; style encodings| + +// End-of-enunciation dingbats + +.phrase eoe_dingbats end-of-enunciation dingbats : text +.synonym dingbats +.synonym eoe dingbats +.synonym enunciation dingbats +.template += End-of-Enunciation Dingbats + +An end-of-enunciation dingbat (eoe dingbat) is an icon that is set +at the end of an enunciation. A mathemtical proof, for example, almost +always has a dingbat at the end. The command for the dingbat would be +|\qed|. + +The dingbat is set automatically at the end of the enunciation, or you +can specify it explicitly using its command name. +---- +For information on a specific dingbat, try |~.facility; \*name*| + +// (Assumes that the 'one_command' group will also be populated.) +.phrase one_eoe_dingbat <name> dingbat +.synonym dingbat <name> +.synonym <name> eoe dingbat +.synonym eoe dingbat <name> +.synonym <name> enunciation dingbat +.synonym enunciation dingbat <name> +.synonym <name> end-of-enunciation dingbat +.synonym end-of-enunciation dingbat <name> +.template += |~.name;| End-of-Enunciation Dingbat Command + +~include common_info; + +~.comment; + +& Text of dingbat:& |~.text;| +& Position:& |~.position;| +&. + +An end-of-enunciation dingbat (eoe dingbat) is an icon that is set +at the end of an enunciation. +---- +For information on dingbats in general, try |~.facility; dingbats| + +// Enumerated Names + +.phrase one_chardef_enum <name> +.template += ~.name; Symbolic Number + +~include common_info; + +~.comment; + +Value: ~.value; + +A symbolic number is a name assigned to a number to make it easier +to refer to the number without having to remember its value. A symbolic +number is often referred to as an *enumerated value.* + +~include internal_note; + +// Flags + +.phrase flags flags : text +.synonym booleans +.template += Flags + +A flag is a true/false (boolean) value stored in a TeX macro +(not a register). It can be used to specify a yes/no option, +the state of some binary choice, the result of a test, etc. + +A flag is accessed and set as follows: + +| \*name* +| \setflag \*name* = \true +| \setflag \*name* = \false + +Flags are rarely used directly in book files. +---- +For a list of all flags, try |~.facility; all flags|.&/ +For information on a particular flag, try |~.facility; \*name*|. + +.phrase all_flags all flags +.synonym all booleans +.template += List of Flags + +This is the list of all flags available in ZzTeX. + +&= Name& Description +---- +~foreach flag, flag_table; +& |~.flag;|& ~.flag_table[flag]; +~end; +&. +~include internal_note; +---- +For more information, try |~.facility; flags| + +.phrase one_flag <name> +.synonym <name> flag +.synonym flag <name> +.synonym <name> boolean +.synonym boolean <name> +.template += |~.name;| Flag + +~include common_info; + +~.comment; + +Default: |~.default;| + +A flag is a true/false (boolean) value stored in a TeX macro +(not a register). It can be used to specify a yes/no option, +the state of some binary choice, the result of a test, etc. +---- +For more information, try |~.facility; flags| + +// Fonts + +.phrase fonts fonts : text +.synonym type fonts +.template += Font Declarations + +A font declaration establishes the type font for the current brace +group. In TeX, a font is a specific type family and style set at a +particular size. Some common examples: + +&= Font Declaration& Family, Style, Size +---- +& |\tenhalfrm|& morg at 10.5pt& (|morg| is Minion-Regular) +& |\tenhalfmit|& mtmiz at 10.5pt& (|mtmiz| is MathTime Math Italic) +& |\tenhalfit|& moi at 10.5pt& (|moi| is Minion-Italic) +& |\twelvedbf|& Flama-Bold at 12pt +&. + +Font declarations are never used directly in design or book files, instead +operating behind the scenes when font sizes and styles are selected. +---- +For a list of all fonts in the ~.project; book, try |~.facility; all fonts|.&/ +For information about a particular font, try |~.facility; \*name*|.&/ +For information on type sizes or styles, try |~.facility; sizes| or +|~.facility; styles|. + +.phrase all_fonts all fonts +.template += List of Fonts + +This is the list of all the fonts used in the ~.project; book. + +&= Fonts& Family, style, size +---- +~foreach font, font_table; +& |~.font;|& ~.font_table[font]; +~end; +&. +---- +For more information, try |~.facility; fonts|. + +// (Assumes that the 'one_declaration' group will also be populated.) +.phrase one_font <name> font +.synonym font <name> +.synonym <name> type font +.synonym type font <name> +.template += |~.name;| Font Declaration + +~include common_info; + +Font: ~.font_size;. + +A font declaration establishes the type font for the current brace group. +Font declarations are never used directly in design or book files, instead +operating behind the scenes when font sizes or styles are selected. +---- +For more information on fonts, try |~.facility; fonts|.&/ +~include declaration_info; + +// Glyphs + +.phrase glyphs glyphs + +// (Assumes that the 'one_command' group will also be populated.) +.phrase one_glyph <name> glyph +.synonym glyph <name> +.template += |~.name;| Glyph Command + +~include common_info; + +~.comment; + +Art spec: ~.art_spec; + +A glyph is a command that sets a small graphic used as an icon +or attention indicator. The glyph scales with the surrounding font. + +// Ifs + +.phrase ifs ifs : text +.synonym if flags +.template += If Flags + +An if flag is similar to ZzTeX's flags but is only used by Plain +TeX. Because all the if flags are internal to Plain TeX and +never used in design or book files, no more information will +be provided. + +// Inserts + +.phrase inserts inserts : text +.template += Inserts + +An insert is one or more chunks of text that are to be inserted on +the page at the top or bottom. Examples are floating figures, +floating tables, and footnotes. + +ZzTeX defines an insert for floats at the top of the page, +floats at the bottom, and footnotes. Each insert consist of +three registers needed to manage the text: a count, a dimen, +and a skip. + +Since the operation of inserts is entirely internal, there is no +additional information about them. + +// Lets + +.phrase one_let <name> +.synonym <name>=\%:\.percent +.synonym <name>=\&:\.ampersand +.synonym <name>=\<:\.less +.synonym <name>=\>:\.greater +.synonym <name> synonym +.synonym <name>=\&:\.ampersand synonym +.synonym <name>=\%:\.percent synonym +.synonym <name>=\<:\.less synonym +.synonym <name>=\>:\.greater synonym +.synonym synonym <name> +.template += |~.name;| Synonym + +~include common_info; + +Synonym for: |~.parent;| + +~.comment; + +A synonym is a name established with the |\let| command and is +equivalent to its "parent" command. To see information on this name's +parent command, try |~.facility; ~.parent;|. + +// Locators + +.phrase locators locators +.synonym indexing commands +.synonym indexing locators +.template += Index Locators + +An index locator is a command that creates an entry in the +book's index. It takes an argument with one, two, or three headings +separated by bars: + + \xpage{Main|subhead} + +Some locators can specify a page range, in which case there are +two additional commands: + + \xpagebegin{Main|subhead} + \xpageend{Main|subhead} + +If it is a command like |\xsee| and |\xseealso|, it takes an additional +first argument with the heading to consult. In this example, the heading +|Synonym| will refer to the heading |Primary|: + + \xsee{Primary}{Synonym} + +The following locators are available for the ~.project; book: + +&= & Begin/end& See-like +&= Command& commands?& reference? +---- +~foreach i, command_list; +& |~.command_list[i];|& ~.range_list[i];& ~.refers_list[i]; +~end; +&. +---- +~include indexing_info; + +// (Assumes that the 'one_command' group will also be populated.) +.phrase one_locator <name> locator +.synonym locator <name> +.synonym <name> indexer +.synonym indexer <name> +.synonym <name> indexing command +.synonym indexing command <name> +.synonym <name> locator command +.synonym locator command <name> +.template += |~.name;| Index Locator Command + +~include common_info; + +~.comment; + +An index locator is a command that creates an entry in the book's index. +The format of this locator command is shown above. There is one command +if this kind of locator can only specify a single page. There are three +commands if it can specify a single page or a page range. The commands for +this locator are: + +~foreach cmd, command_list; +* ~.command_list[cmd]; +~end; +*. +---- +For more information on locators, try |~.facility; locators|. + +// Marks + +.phrase marks marks +.synonym page marks +.template += Mark Pseudo-Commands + +A mark is a chunk of text inserted into the current page using the +|\mark| command. The purpose of a mark is to hold information +for running heads and feet. This information can be extracted from +the page using pseudo-commands such as |\topmark| in the header +and footer formatting macros. + +The |\mark| command and the extracting pseudo-commands are not used +directly in ZzTeX design or book files. Instead, |\setmarkinfo| and +|\markinfo| are used. + +Here is a list of all the mark pseudo-commands. + +&= Command& Description +---- +~foreach mark, desc_table; +& |~.mark;|& ~.desc_table[mark]; +~end; +&. + +(Do not confuse marks with markers.) +---- +For information on a specific mark, try |~.facility; \*name*|. + +.phrase one_mark <name> +.synonym <name> mark +.synonym mark <name> +.synonym <name> page mark +.synonym page mark <name> +.template += |~.name;| Mark Pseudo-Command + +~include common_info; + +~.comment; + +A mark is a chunk of text inserted into the current page using the +|\mark| command. The purpose of a mark is to hold information +for running heads and feet. +---- +For more information on marks, try |~.facility; marks|. + +// Markers + +.phrase markers markers +.synonym argument markers +.synonym command markers +.template += Markers + +A marker indicates a point in a command argument where the following +text is interpreted differently from the preceding text. For example, + + $$ + a = b \eqno + $$ + +The |\eqno| marker indicates that the following text (empty in this +example) should be interpreted as the equation number. + +Here is a list of all the markers provided by ZzTeX. + +&= Marker& Meaning +---- +~foreach marker, comment_table; +& |~.marker;|& ~.comment_table[marker]; +~end; +&. + +(Do not confuse markers with marks.) +---- +For information on a specific marker, try |~.facility; \*name*|. + +.phrase one_marker <name> +.synonym <name> marker +.synonym marker <name> +.template += |~.name;| Marker + +~include common_info; + +~.comment; + +A marker indicates a point in a command argument where the following +text is interpreted differently from the preceding text. +---- +For more information on markers, try |~.facility; markers|. + +// Math accents + +.phrase math_accents math accents +.template += Math Accent Commands + +A math accent command produces an accent over a math character. +For example, + + x = y \times \hat{a} + +produces + +& *x* = *y* × *â* +&. + +Here is a list of all the math accent commands. + +&= Command& Description +---- +~foreach acc, accent_table; +& |~.acc;|& ~.accent_table[acc]; +~end; +&. +~include internal_note; +---- +For information on a specific accent, try |~.facility; \*name*|. + +// (Assumes that the 'one_command' group will also be populated.) +.phrase one_math_accent <name> accent +.synonym accent <name> +.synonym <name> math accent +.synonym math accent <name> +.template += |~.name;| Math Accent Command + +~include common_info; + +~.comment; + +A math accent command produces an accent over a math character. +---- +For a list of all math accents, try |~.facility; math accents|. + +// Math characters + +// (Assumes that the 'one_command' group will also be populated.) +.phrase one_math_char <name> character +.synonym character <name> +.synonym <name> symbol +.synonym symbol <name> +.synonym <name> math character +.synonym math character <name> +.synonym <name> math symbol +.synonym math symbol <name> +.template += |~.name;| Math Character + +~include common_info; + +~.comment; + +This command sets a math character or symbol with the following properties. + +& Math class:& |~.math_class;| +& Math family:& |~.math_family;| +& Font position:& ~.position; +&. + +// Math character constants + +.phrase one_math_char_constant <name> + +// Math classes + +.phrase math_classes math classes +.synonym classes +.template += Math Classes + +Each math character and subexpression is assigned to one of the +math classes shown below. The class determines how the character or +subexpression is formatted. In particular, it determines the amount +of space on each side of it. Each class is assigned a number, although +you never need to worry about them. + +You can force a math expression into a particular class using the +commands in the following table. Each takes an argument that is +the expression to be classified. For example: + + x \mathbin{.} y + +This forces the period to act like a binary operator, thus being set +with a thin space on either side of it. + +&= Class& Number& Class Command& Description +---- +~foreach i, class_list; +& |~.class_list[i];|& ~.i;& |~.command_list[i];|& ~.desc_list[i]; +~end; +&. + +.phrase one_chardef_math_class <name> +.synonym <name> math class +.synonym math class <name> +.synonym <name> class +.synonym class <name> +.template += |~.name;| Math Class + +~include common_info; + +~.comment; + +Value: ~.value; + +Each math character and subexpression is assigned to a math class. +The class determines how the character or subexpression is formatted. +---- +For more information and list of all math classes, try |~.facility; math classes|. + +// (Assumes that the 'one_command' group will also be populated.) +.phrase one_command_math_class <name> math class +.synonym math class <name> +.synonym <name> class +.synonym class <name> +.template += |~.name;| Math Class Command + +~include common_info; + +~.comment; + +A math class command forces its argument to be interpreted +according to a particular math class (specified above) rather than its standard +math class. +---- +For more information on math classes, try |~.facility; math classes|.&/ +~include command_info; + +// Math families + +.phrase math_families math families : text +.synonym family +.synonym families +.synonym type family +.synonym type families +.template += Math Families + +A math family is a number that is assigned to a type style so the +style can be used in math expressions. Associated with the family +are three fonts, one each for text size, script size, and scriptscript +size. A type style cannot be used in math without a family number. +This is occasionally a problem because there is a limit of 15 families. +---- +For information about a particular family, try |~.facility; \*xx*fam|; +for example, |~.facility; \rmfam|&/ +For a list of type styles and their associated families, +try |~.facility; type styles|. + +.phrase one_math_family <name> +.synonym family <name> +.synonym <name> family +.synonym <name> math family +.synonym <name> type family +.synonym math family <name> +.synonym type family <name> +.template += |~.name;| Math Family + +~include common_info; + +~.comment; + +& Type style:& |~.style;| +& Family number:& ~.number; +&. + +A math family is a number assigned to a type style so the style +can be used in math expressions. Only families 0--14 are usable +in math. +---- +For more information on math families, try |~.facility; math families| + +// Math functions + +.phrase math_functions math functions : text +.synonym functions +.template += Math Functions + +Math functions are commands that set the names of mathematical functions +such as sin and max. If the command is followed by a fence, the fence +abuts the name. Otherwise a thin space follows the name. For example, + + ... the $\sin x$ and the $\sin(x)$ are both ways of writing ... + +produces + +& ... the sin *x* and the sin(*x*) are both ways of writing ... +&. +---- +For information on a specific function, try |~.facility; \*name*| + +// (Assumes that the 'one_command' group will also be populated.) +.phrase one_math_function <name> function +.synonym function <name> +.synonym <name> math function +.synonym math function <name> +.template += |~.name;| Math Function + +~include common_info; + +~.comment; + +& Sets:& ~.function; +& Limits:& ~.limits; +&. + +A math function is a command that sets a math function name, +usually in roman. +---- +For more information, try |~.facility; math functions| + +// Math joined symbols + +// (Assumes that the 'one_command' group will also be populated.) +.phrase one_math_joined <name> joined math symbol +.synonym joined math symbol <name> +.synonym <name> joined symbol +.synonym joined symbol <name> +.synonym <name> math symbol +.synonym math symbol <name> +.template += |~.name;| Joined Math Symbol + +~include common_info; + +~.comment; + +A joined math symbol is constructed by adjoining one symbol +with another. In this case, the symbol is built as: + + ~.left; ~.right; +---- +~include math_class_info; + +// Math stacked symbols + +// (Assumes that the 'one_command' group will also be populated.) +.phrase one_math_stacked <name> stacked math symbol +.synonym stacked math symbol <name> +.synonym <name> stacked symbol +.synonym stacked symbol <name> +.synonym <name> math symbol +.synonym math symbol <name> +.template += |~.name;| Stacked Math Symbol + +~include common_info; + +~.comment; + +A stacked math symbol is constructed by stacking one symbol +on top of another. In this case, the symbol is built as: + + ~.above; + ~.below; +---- +~include math_class_info; + +// Muskip registers + +.phrase muskips muskip registers : text +.synonym muskips +.template += Muskip Registers + +A muskip register contains a glue value (nominal, stretch, shrink) +measured in math mu units (1/18 em). It can specify a horizontal space +to be used in math. Muskip registers are only used in math. + +A muskip register is accessed and set as follows: + +| \*name* +| \*name* = *mu-glue* + +Muskip registers are never used directly in book files. +---- +For a list of all muskip registers, try |~.facility; all muskips|.&/ +For information on a particular muskip register, try |~.facility; \*name*|. + +.phrase all_muskips all muskip registers +.synonym all muskips +.template += List of Muskip Registers + +This is the list of all muskip registers available in ZzTeX. + +&= Register& Description +---- +~foreach reg, reg_table; +& |~.reg;|& ~.reg_table[reg]; +~end; +&. +~include internal_note; +---- +For more information, try |~.facility; muskip registers| + +.phrase one_muskip <name> +.synonym <name> muskip +.synonym muskip <name> +.synonym <name> register +.synonym register <name> +.synonym <name> muskip register +.synonym muskip register <name> +.template += |~.name;| Muskip Register + +~include common_info; + +~.comment; + +Default: |~.default;| + +A muskip register contains a glue value (nominal, stretch, shrink) +measured in math mu units (1/18 em). It can specify a horizontal space +to be used in math. +---- +For more information, try |~.facility; muskips| + +// Math \text command + +.phrase math_text math \text : text +.template += Math |\text| Command + +There is a |\text| command that can be used in math expressions +to typeset its argument in text mode. + +Usage: |\text{*text*}| + +For example, + + $$ + x = 0.999\ldots = 1\quad \text{(see limits description)} + $$ + +This math display would be set as follows. + +& *x* = 0.999... = 1&_(see limits description) +&. + +Note that this |\text| command is only defined in math mode. + +// Named Characters + +.phrase one_named_char <name> +.synonym <name>=\|:\.bar +.synonym <name> character +.synonym <name>=\|:\.bar character +.synonym character <name> +.template += ~.name; Named Character + +~include common_info; + +~.comment; + +Font position: |~.position;| + +A named character is a single character that is not on the keyboard but is +assigned a name so that it can be easily typed. Some named characters also +have a character command synonym (e.g., |\@| = |\atsign|). + +// Page make-up + +.phrase page_makeup page make-up +.synonym page makeup +.synonym paging +.template += Page Make-Up + +Page make-up is the process of formatting the text on each +page of a book. In particular, it involves deciding what +text should appear on each page and on each spread. + +The following ZzTeX commands can help with page make-up. + +~foreach name, makeup_set; +* |~.name;| +~end; +*. + +// Penalties + +.phrase penalties penalties +.synonym penalty +.template += Penalties + +A penalty is a number that specifies how much TeX should favor or +disfavor a line break or page break. Positive penalties cause TeX +to disfavor breaks, while negative penalties cause it to favor breaks. +Penalties range from -10,000 (meaning always break) to +10,000 (meaning +never break). + +Penalties are used in commands such as |\vpenalty|, |\linebreak|, and +|\columnbreak|. These commands are rarely used in book files. + +Here is a table of all the available penalties. + +&= Penalty& Meaning +---- +~foreach name, comment_table; +& |~.name;|& ~.comment_table[name]; +~end; +&. + +.phrase one_penalty <name> +.synonym <name> penalty +.synonym penalty <name> +.template += |~.name;| Penalty + +~include common_info; + +~.comment; +---- +For more information, try |~.facility; penalties|. + +// Prefixes + +.phrase prefixes prefixes +.synonym command prefixes +.template += Prefixes + +A prefix specifies an attribute of the name being defined +using |\def| and related commands. It also specifies an +attribute of I/O operations. + +Here is a list of all the prefixes. + +&= Prefix& Description +---- +~foreach pre, prefix_table; +& |~.pre;|& ~.prefix_table[pre]; +~end; +&. + +.phrase one_prefix <name> +.synonym <name> prefix +.synonym prefix <name> +.synonym <name> command prefix +.synonym command prefix <name> +.template += |~.name;| Prefix + +~include common_info; + +~.comment; + +A prefix specifies an attribute of the name being defined +using |\def| and related commands. It also specifies an +attribute of I/O operations. +---- +For more information, try |~.facility; prefixes|. + +// Skip (Glue) registers + +.phrase skips skip registers : text +.synonym skips +.synonym glue registers +.synonym glues +.template += Skip Registers + +A skip register contains a glue value (nominal, stretch, shrink) +that can specify a horizontal or vertical space, a left or right +indentation, a gutter, etc. + +A skip register is accessed and set as follows: + +| \*name* +| \*name* = *glue* + +Skip registers are never used directly in book files. +---- +For a list of all skip registers, try |~.facility; all skips|.&/ +For information on a particular skip register, try |~.facility; \*name*|. + +.phrase all_skips all skip registers +.synonym all skips +.synonym all glue registers +.template += List of Skip (Glue) Registers + +This is the list of all skip registers available in ZzTeX. + +&= Register& Description +---- +~foreach reg, reg_table; +& |~.reg;|& ~.reg_table[reg]; +~end; +&. +~include internal_note; +---- +For more information, try |~.facility; skip registers| + +.phrase one_skip <name> +.synonym <name> skip +.synonym skip <name> +.synonym <name> register +.synonym register <name> +.synonym <name> skip register +.synonym skip register <name> + +.synonym <name> glue +.synonym glue <name> +.synonym <name> glue register +.synonym glue register <name> +.template += |~.name;| Skip (Glue) Register + +~include common_info; + +~.comment; + +Default: |~.default;| + +A skip register contains a glue value (nominal, stretch, shrink) +that can specify a horizontal or vertical space, a left or right +indentation, a gutter, etc. +---- +For more information, try |~.facility; skips| + +// Spacing + +.phrase spacing spacing : text +.template += Spacing Commands + +To see a list of commands for horizontal spacing, +try |~.facility; horizontal spacing|. + +To see a list of commands for vertical spacing, +try |~.facility; vertical spacing|. + +.phrase horizontal_spacing horizontal spacing +.template += Horizontal Spacing + +This table presents a list of all the horizontal spacing commands +available in ZzTeX. + +A command described as *breakable* allows a preceding line break, and the +space is discarded. A command described as *unbreakable* does not allow a +preceding line break. + +~foreach cmd, comment_table; +& |~.cmd;|& ~.comment_table[cmd]; +~end; +&. +---- +For more information on any of these commands, try |~.facility; \*name*|. + +.phrase vertical_spacing vertical spacing +.template += Vertical Spacing + +Here is a list of all the vertical spacing commands available in ZzTeX. + +~foreach name, name_set; +* |~.name;| +~end; +*. +---- +For more information on any of these commands, try |~.facility; \*name*|. + +// Suffixes + +.phrase suffixes suffixes +.synonym command suffixes +.template += Suffixes + +A suffix can be affixed to certain math commands to specify +how limits are to be set. + +Here is a list of all the suffixes. + +&= Suffix& Description +---- +~foreach suf, suffix_table; +& |~.suf;|& ~.suffix_table[suf]; +~end; +&. + +.phrase one_suffix <name> +.synonym <name> suffix +.synonym suffix <name> +.synonym <name> command suffix +.synonym command suffix <name> +.template += |~.name;| Suffix + +~include common_info; + +~.comment; + +A suffix can be affixed to certain math commands to specify +how limits are to be set. +---- +For more information, try |~.facility; suffixes|. + +// Titles + +.phrase titles titles +.synonym heads +.synonym adjustments +.synonym head adjustments +.synonym title adjustments +.template += Titles and Their Adjustment + +A *title* or *head* appears in various ZzTeX commands, including +hierarchy commands such as |\chapter| and |\section|, captions, +enunciations, etc. Each of these commands takes an argument that +specifies the text of the title. + +| \chapter{*title-text*} + +The title text can appear in various places: + +* In the body of the text at the position of the |\chapter| command. +* In the running heads or feet of multiple pages. +* In the main table of contents or a "mini-ToC" such as might +appear at the beginning of each chapter. +*. + +Sometimes it is necessary to modify the title slightly when it appears in +these various places. For example, if a title has a footnote, that footnote +does not want to appear in the running head or table of contents. ZzTeX +provides the following commands that can be used within the text of a title +to make such adjustments. + +~foreach cmd, command_set; +* |~.cmd;| +~end; +*. + +// Toks registers + +.phrase toks toks registers : text +.synonym toks +.synonym tokens +.synonym token registers +.template += Toks (Token) Registers + +A toks (token) register contains a sequence of TeX tokens (characters, commands, +spaces, etc.) that can specify a text fragment, file name, tag, options +list, etc. + +A toks register is accessed and set as follows: + +| \*name* +| \*name* = {*tokens*} + +Toks registers are never used directly in book files. +---- +For a list of all toks registers, try |~.facility; all toks|.&/ +For information on a particular toks register, try |~.facility; \*name*|. + +.phrase all_toks all toks registers +.synonym all toks +.synonym all token registers +.synonym all tokens +.template += List of Toks (Token) Registers + +This is the list of all toks registers available in ZzTeX. + +&= Register& Description +---- +~foreach reg, reg_table; +& |~.reg;|& ~.reg_table[reg]; +~end; +&. +~include internal_note; +---- +For more information, try |~.facility; toks registers| + +.phrase one_toks <name> +.synonym <name> toks +.synonym toks <name> +.synonym <name> register +.synonym register <name> +.synonym <name> toks register +.synonym toks register <name> + +.synonym <name> token +.synonym token <name> +.synonym <name> token register +.synonym token register <name> +.template += |~.name;| Toks (Token) Register + +~include common_info; + +~.comment; + +Default: |~.default;| + +A toks register contains a sequence of TeX tokens (characters, commands, +spaces, etc.) that can specify a text fragment, file name, tag, options +list, etc. +---- +For more information, try |~.facility; toks| + +// Style relations + +.phrase style_relations style relations +.synonym relations +.synonym font relations +.synonym type relations +.template += Style Relation Commands + +A style relation is a command that selects a new type style for +its argument text based on the prevailing type style. The argument text +is set in the new style and then the prevailing style continues. +For example, + +| *...* a set of \emph{dependencies} on parent structures *...* + +might typeset the text as + +& *...* a set of *dependencies* on parent structures *...* +&. + +Style relation commands are used instead of the underlying type +style declarations (e.g., |\it|) for various reasons, the most +important one being that the style change is restricted to the +argument text. + +Here is a list of the relation commands available for the ~.project; +book. For more details about a particular relation, try |~.facility; +\*name*|. + +&= Relation& Where defined +---- +~foreach rel, relation_table; +& |~.rel;|& ~.relation_table[rel]; +~end; +&. + +*Note:* The |\mono| command is used like a relation, but it is +actually just a normal command. +---- +~include command_info; + +// (Assumes that the 'one_command' group will also be populated.) +.phrase one_style_relation relation <name> +.synonym <name> relation +.synonym <name> font relation +.synonym <name> style relation +.synonym <name> type relation +.synonym font relation <name> +.synonym style relation <name> +.synonym type relation <name> +.template += |~.name;| Style Relation Command + +~include common_info; + +~.comment; + +A style relation is a command that selects a new type style for +its argument based on the prevailing type style. The argument text +is set in the new style and then the prevailing style continues. + +Here is a table of all the relationships established by this command. + +&= Prevailing& & New +&= style& & style +---- +~foreach sty, style_map; +& ~.sty;& ⇒& ~.style_map[sty]; +~end; +&. +---- +For more information on style relations and a list of all available +relations, try |~.facility; style relations|.&/ +~include command_info; + +// Tags + +.phrase tags tags : text +.template += Tags + +A tag is a TeX name that is used to store information about a particular +spot in a book. You can tag a spot using the |\tag| command. + + \section{All About Tags} + \tag{S:about-tags} + +The following information is associated with the tag |S:about-tags|: + +* The page number on which the tag is defined. + +* The composite number text of the enclosing element (in the above example, +the section number). + +* The title or caption of the enclosing element. +*. + +The following cross-referencing commands can be used to typeset the +information asociated with a tag: + +& |\ref{*tag*}|& Set the composite number text. +& |\refpage{*tag*}|& Set the page number. +& |\reftitle{*tag*}|& Set the title (rarely used). +&. + +If the |\tag| command is used at a point in the text where there is +no surrounding taggable element, an error message is produced. In this +situation, if you only want to reference the page number, use the |\tagpageonly| +command instead. + +== Tag Names + +If you need to add a tag to a book, please follow the naming conventions +chosen by the author. If the author was haphazard, use the following +prefixes on tags of various kinds: + +&= Prefix& Meaning +---- +& |A:|& appendix +& |C:|& chapter or quasichapter +& |E:|& equation +& |F:|& figure +& |I:|& list item +& |P:|& page number of arbitrary text (with |\tagpageonly|) +& |S:|& section, subsection, etc. +& |T:|& table +& |X:|& exercise +&. + +Tags names beginning with |z*X*:|, where *X* is a capital letter, are +internal to ZzTeX. For a description of these internal tags, +try |~.facility; internal tags|. +---- +To obtain a list of all the tags in the ~.project; book, try +|~.facility; all tags|. + +.phrase internal_tags internal tags : text +.template += Internal Tags + +Here is a list of all the internal tags used by ZzTeX. + +&= Tag prefix& Usage +---- +& |zB:|& Bibliographic entry information. +& |zE:|& Page number of frame element. +& |zF:|& Page number of float element. +& |zH:|& Error message help text. +& |zM:|& Page number of marginnote element. +& |zP:|& Page number of proofnote element. +& |zR:|& Page number of marginrule element. +& |zS:|& Composite cross-reference snapshot information. +&. +---- +For a description of tags in general, try |~.facility; tags|. + +// Type styles + +.phrase type_styles type styles +.synonym styles +.synonym font styles +.template += Type Styles + +A type style is a declaration that establishes the current style for +text (e.g., roman, italic). As with all declarations, it pertains only +to the following text in the current brace group. + +Type styles are rarely used directly in book files. Instead, the current +style is established using a style relation command such as |\emph| or +|\bold|. To see a list of all the relation commands, try |~.facility; +type relations|. To see a list for a particular style, along with +information about that style, try |~.facility; \*style*|. + +Here are all the type styles available for the ~.project; book. +&= & & Family& Family& Usable +&= Style& Encoding& number& name& in math? +---- +~foreach fam, family_list; +& |~.style_list[fam];|& |~.encoding_list[fam];|& ~.fam;& |~.family_list[fam];|& +~.math_list[fam]; +~end; +&. +---- +For information on encodings, try |~.facility; encodings|.&/ +~include declaration_info; + +// (Assumes that the 'one_declaration' group will also be populated.) +.phrase one_type_style type style <name> +.synonym <name> style +.synonym style <name> +.synonym <name> font style +.synonym font style <name> +.template += |~.name;| Type Style Declaration + +~include common_info; + +~.comment; + +A type style is a declaration that establishes the current style for +text (e.g., roman, italic). Instead of using the style declaration, +you should use a style relation command. Here are the style relations +pertinent to this style. + +&= Current style& Relation& New style +---- +~foreach rel, new_style; +& |~.name;|& |~.rel;|& |~.new_style[rel];| +~end; +&. +---- +For more information on type styles, try |~.facility; type styles|&/ +For more information on type relations, try |~.facility; type relations| + +// Type sizes + +.phrase type_sizes type sizes : text +.synonym sizes +.synonym font sizes +.template += Type Sizes + +A type size is a declaration that establishes the current size +for text. As with all declarations, it pertains only +to the following text in the current brace group. + +When a type size is established, there is no current style +for the subsequent text. You must also establish a style +after establishing a size. + + {\footnotesize\it That '\it' command was necessary + to establish the style.} + +Type sizes are rarely used directly in book files. Instead, the +surrounding element (typically a block) establishes the size +for the text in that element. The main text size is always called +|\textsize|. +---- +To see a list of all the available type sizes, try |~.facility; all sizes|.&/ +To see the details of a particular size, try |~.facility; \*name*|. + +.phrase all_type_sizes all type sizes +.synonym all sizes +.synonym all font sizes +.template += List of Type Sizes + +This is the list of all type sizes available in the ~.project; book. + +&= Size declaration& Available styles +---- +~foreach size, style_table; +& |~.size;|& |~.style_table[size];| +~end; +&. +---- +For more information, try |~.facility; type sizes|.&/ +To see the details of a particular size, try |~.facility; \*name*|. + +// (Assumes that the 'one_declaration' group will also be populated.) +.phrase one_type_size size <name> +.synonym <name> size +.synonym <name> type size +.synonym type size <name> +.synonym <name> font size +.synonym font size <name> +.template += |~.name;| Type Size Declaration + +~include common_info; + +~.comment; + +A type size is a declaration that establishes the current size +for text. As with all declarations, it pertains only +to the following text in the current brace group. + +Here is a list of all the type styles available in |~.name;|. + +&= & Can use& Can use +&= Style& in math?& in scripts?& Family, style, size +---- +~foreach i, style_list; +& |~.style_list[i];|& ~.math_list[i];& ~.script_list[i];& ~.font_list[i]; +~end; +&. +---- +For more information on type sizes, try |~.facility; type sizes|.&/ +To see a list of all the available type sizes, try |~.facility; all sizes|. + +// Composite Cross-Reference Phrases +// --------- --------------- ------- + + +.phrase all_art_files all art files +.synonym art files +.template += List of All Art Files for ~.project; + +This is a list of all the art files used in ~.project;, in order +by file name. + +Count: ~.*div_table; + +&= Division& Page& File& Size at scale& Reused? +---- +~foreach file, div_table; +& ~.div_table[file];& ~.page_table[file];& ~.file;& ~.size_table[file];& ~.reused_table[file]; +~end; +&. +---- +For a list of just the missing art files, try |~.facility; missing art files|. + +.phrase all_biblio_entries all bibliography entries +.synonym all bibliography tags +.synonym bibliography entry list +.synonym bibliography entries +.template += List of All Bibliography Entries for ~.project; + +This is a list of all the bibliography entries in the ~.project; +bibliography, in order by tag. + +Count: ~.*page_table; + +&= Page& Tag& Author& Year +---- +~foreach tag, page_table; +& ~.page_table[tag];& |~.tag;|& ~.author_table[tag];& ~.year_table[tag]; +~end; +&. + +.phrase all_tags all tags +.synonym tag list +.template += List of All Tags for ~.project; + +This is a list of all the tags used in ~.project;, +in order by tag name. +(This list does not include bibliography entry tags.) + +Count: ~.*comp_table; + +&= Tag& Comp. Text& Division& Page +---- +~foreach tag, comp_table; +& |~.tag;|& ~.comp_table[tag];& ~.div_table[tag];& ~.page_table[tag]; +~end; +&. + +Tags beginning with |\z*X*:| are internal to ZzTeX. For a description +of those tags, try |~.facility; internal tags|.&/ +---- +For a list of all the bibliography entry tags, try |~.facility; +all biblio tags|. + +.phrase book_info book information : text +.template += Book Information + +~.facility; can show you all kinds of information about the +~.project; project. + +& |~.facility;| command words& Report produced +---- +& |overview|& Overview of the book and its design. +& |all art files|& List of all art files. +& |all biblio entries|& List of all bibliography entries. +& |all tags|& List of all tags. +& |cleanup report|& Report about cleanup of files. +& |contents|& High-level table of contents. +& |design report|& Report of elements with explanatory comments. +& |duplicate tags|& List of duplicate tags. +& |library|& List of documentation files in ZzTeX directory. +& |missing art files|& List of missing art files. +& |printer report|& Report to accompany final printer PDF. +& |proofnote list|& List of outstanding proofnotes. +& |to-do list|& List of outstanding to-dos. +& |undefined tags|& List of undefined tags. +&. + +.phrase contents contents +.synonym table of contents +.template += Table of Contents for ~.project; + +~foreach i, page_list; +& ~.page_list[i];& ~.comp_list[i];& ~.title_list[i]; +~end; +&. + +.phrase design_report design report +.synonym compositor's design report +.template += Design Report for ~.project; + +~include title_author_publisher_isbn; +&. + +== Summary of Design + +~include design_summary; + +Every project starts with a cleanup of the text files. +Try |~.facility; cleanup report| for a description of +the cleanup of ~.project;. + +== Documented Elements + +The following sections present the book design elements that +have specific documentation in the main design file ~.zzd_file;. +It is a good idea to review these elements at the start of a project. + +~foreach i, head_list; +~if not empty? head_list[i]; +=== ~.head_list[i]; +~fi; + +★&_~.usage_list[i]; + +~if value? style_list[i]; +& Style: ~.style_list[i]; +&. +~fi; + +~.comment_list[i]; +~end; + +.phrase duplicate_tags duplicate tags +.synonym duplicate tags list +.template += List of Duplicate Tags for ~.project; + +This is a list of all the duplicate tags in the ~.project; book. + +Count: ~.*comp_table; + +&= Tag& Comp. Texts& Divisions& Pages +---- +~foreach tag, comp_table; +& |~.tag;|& ~.comp_table[tag];& ~.div_table[tag];& ~.page_table[tag]; +~end; +&. +---- +To see a list of all the tags, try |~.facility; all tags|. + +.phrase library library +.synonym documentation +.template += ZzTeX Documentation library + +The following text documents are available in the ZzTeX directory. +They present details about various facilities in ZzTeX. + +&= Document& Topic +---- +~foreach file, title_table; +& ~.file;& ~.title_table[file]; +~end; +&. + +.phrase missing_art_files missing art files +.synonym missing art +.template += List of Missing Art Files for ~.project; + +This is a list of the missing art files used in ~.project;, in order +by file name. An art file is missing if there is an |\art| command +for it but it does not exist in the art directory. + +Count: ~.*div_table; + +&= Division& Page& File& Size at scale& Reused? +---- +~foreach file, div_table; +& ~.div_table[file];& ~.page_table[file];& ~.file;& ~.size_table[file];& ~.reused_table[file]; +~end; +&. +---- +For a list of all the art files, try |~.facility; all art files|. + +.phrase printer_report printer report +.template += Printer Report for ~.project; + +~include title_author_publisher_isbn; +& &` +& Trim:& ~.trimwidth; × ~.trimheight; +& Head&`margin:& ~.headmargin; +& Gutter:& ~.eveninnermargin; +& &` +& Fonts:& All embedded and subsetted at 100% +& Art:& All embedded +&. + +&` + +---- +Black: For 2-color books, please set Overprint Black as the default. +---- + +&` + +Paul C. Anagnostopoulos&/ +Windfall Software&/ +978 371-2316&/ +paul@windfall.com + +&` + += Pagination + +~foreach i, page_list; +& ~.page_list[i];& ~.comp_list[i];& ~.title_list[i]; +~end; +&. + +.phrase-dups project_overview <project> +.synonym book +.synonym overview +.synonym project +.synonym book overview +.synonym project overview +.template += ~.project; Overview + +~include title_author_publisher_isbn; +& &` +& Processed:& ~.date; ~.time; +& ZzTeX&`version:& v~.zztex_version; +& &` +& Art&`root:& ~.art_root; +& Placing&`art?& ~.place_art; +& PDF&`hyperlinks?& ~.hyperlinks; +& &` +& Proof&`ident:& ~.proof; +& Compositor:& ~.compositor; +& Company:& ~.company; +&. + +== Summary of Design + +~include design_summary; +---- +~.facility; can present all sorts of information about this project. +Try |~.facility; book info|. + +.phrase proofnote_list proofnote list +.synonym all proofnotes +.template += List of All Proofnotes for ~.project; + +This is a list of all the outstanding proofnotes in the ~.project; +files. + +Count: ~.*div_list; + +&= Division& Page& Note +---- +~foreach i, div_list; +& ~.div_list[i];& ~.page_list[i];& ~.note_list[i]; +~end; +&. + +.phrase todo_list to-dos +.synonym todos +.synonym to-do list +.synonym todo list +.synonym all to-dos +.synonym all todos +.template += List of All To-Dos for ~.project; + +This is a list of all the outstanding to-do notes in the ~.project; +files. + +Count: ~.*div_list; + +&= Division& Page& Note +---- +~foreach i, div_list; +& ~.div_list[i];& ~.page_list[i];& ~.note_list[i]; +~end; +&. +---- + +.phrase undefined_tags undefined tags +.synonym undefined tags list +.template += List of Undefined Tags for ~.project; + +This is a list of all the undefined tags in the ~.project; files. + +Count: ~.*div_table; + +&= & First& First +&= Tag& Division& Page& References +---- +~foreach tag, div_table; +& |~.tag;|& ~.div_table[tag];& ~.page_table[tag];& ~.refs_table[tag]; +~end; +&. +---- +To see a list of all the tags, try |~.facility; all tags|. + +// Footnotes +// --------- + + +.footnote defineenunciation_enunciation \defineenunciation one_command +.footnote defineenunciation_enunciation \title one_marker +.footnote defineenunciation_enunciation \attributiontypecase one_command +.footnote defineenunciation_enunciation \defineeoedingbat one_command +.template defineenunciation_enunciation +For a complete description of this item, try |~.facility; \enunciation|. + +.footnote definelocator_locators \definelocator one_command +.footnote definelocator_locators \definelocatorformat one_command +.footnote definelocator_locators \generateindex one_command +.footnote definelocator_locators \indexentry one_command +.footnote definelocator_locators \alphabreak one_command +.template definelocator_locators +~include indexing_info; + +.footnote hat_zmhat \hat one_named_char +.template hat_zmhat +*Note:* When used in math mode, |\hat| is a synonym for |\zmhat| +and produces a hat accent over its argument. + +.footnote space_spacing space one_character +.template space_spacing +If you are looking for information on spacing commands, +try |~.facility; spacing|. + +.footnote proofnote_note_list \proofnote one_block +.template proofnote_note_list +If you are looking for a list of the outstanding proofnotes +for the ~.project; project, try |~.facility; proofnote list|. + +.footnote text_math_text \text one_block +.template text_math_text +If you are looking for information on the \text command that +is used in math, try |~.facility; math \text|. + +.footnote tilde_zmtilde \tilde one_named_char +.template tilde_zmtilde +*Note:* When used in math mode, |\tilde| is a synonym for |\zmtilde| +and produces a tilde accent over its argument. + +.footnote toc_contents \toc one_block +.template toc_contents +If you are looking for a table of contents for ~.project;, +try |~.facility; contents|. + +.footnote zmhat_hat \zmhat one_math_accent +.template zmhat_hat +*Note:* This is the internal accent command. Use |\hat| in book files. + +.footnote zmtilde_tilde \zmtilde one_math_accent +.template zmtilde_tilde +*Note:* This is the internal accent command. Use |\tilde| in book files. + +// Included Templates +// -------- --------- + + +.template command_line_chars +Some characters are difficult or impossible to type on the 4NT/Take +Command command line. For an explanation of how to enter them, +try |~.facility; command line|. + +.template common_info +& What it is:& ~.class; +& Where it is:& ~.where; +& Attributes:& ~.attributes; +~if value? overridden;& Supercedes:& ~.overridden;~fi; +&. + +~if value? usage;Usage: |~.usage;|~fi; + +.template command_info +For information on commands in general, try |~.facility; commands|. + +.template declaration_info +For information on declarations in general, try |~.facility; declarations|. + +.template design_info +& Design macro for:& ~.design; +~if value? derived;& Derived from:& |~.derived;|~fi; +~if value? style;& Element style:& |~.style;|~fi; +~if not empty? variant_list;& Affecting variants:& ~ + |~foreach i,variant_list,iter;~,variant_list[i],iter /= 1;~end;|~fi; +&. + +.template design_summary +& Trim:& ~.trimwidth; × ~.trimheight; +& Text measure:& ~.textmeasure; +& Lines per page:& ~.linesperpage; +& For make-up:& ~.linesshort; short, ~.lineslong; long +& Even text margins:& left = ~.evenlefttextmargin;, right = ~.evenrighttextmargin; +& Odd text margins:& left = ~.oddlefttextmargin;, right = ~.oddrighttextmargin; +& Paragraph indent:& ~.parindent; +&. + +.template gory_details +To see more details about the design, try |~.facility; ~.name; details|. + +.template indexing_info +For a complete description of the ZzTeX indexing facility, +try |~.facility; indexing|. + +.template internal_note +(Note that names containing at-signs or beginning with 'z' are internal.) + +.template math_class_info +For more information on math classes, try |~.facility; math classes|. + +.template title_author_publisher_isbn +& Title:& *~.title;* +~foreach i,author,iter; +& ~if iter = 1;Author:~fi;& ~.author[i]; +~end; +& Publisher:& ~.publisher; +& ISBN:& ~.isbn; + +.include zzdetails.dat +.end diff --git a/Master/texmf-dist/doc/plain/zztex/zzplain.dat b/Master/texmf-dist/doc/plain/zztex/zzplain.dat new file mode 100644 index 00000000000..5aebd853cd7 --- /dev/null +++ b/Master/texmf-dist/doc/plain/zztex/zzplain.dat @@ -0,0 +1,1315 @@ +% This is the plain TeX format that's described in The TeXbook. +% N.B.: A version number is defined at the very end of this file; +% please change that number whenever the file is modified! +% And don't modify the file under any circumstances. + +\catcode`\{=1 % left brace is begin-group character +\catcode`\}=2 % right brace is end-group character +\catcode`\$=3 % dollar sign is math shift +\catcode`\&=4 % ampersand is alignment tab +\catcode`\#=6 % hash mark is macro parameter character +\catcode`\^=7 +\catcode`\^^K=7 % circumflex and uparrow are for superscripts +\catcode`\_=8 +\catcode`\^^A=8 % underline and downarrow are for subscripts +\catcode`\^^I=10 % ascii tab is a blank space +\chardef\active=13 +\catcode`\~=\active % tilde is active +\catcode`\^^L=\active +\outer\def^^L{\par} % ASCII formfeed is |\outer\par| + +\message{Preloading the plain format: codes,} + +% We had to define the \catcodes right away, before the message line, +% since \message uses the { and } characters. +% When INITEX (the TeX initializer) starts up, +% it has defined the following \catcode values: +% \catcode`\^^@=9 % ascii null is ignored +% \catcode`\^^M=5 % ascii return is end-line +% \catcode`\\=0 % backslash is TeX escape character +% \catcode`\%=14 % percent sign is comment character +% \catcode`\ =10 % ascii space is blank space +% \catcode`\^^?=15 % ascii delete is invalid +% \catcode`\A=11 ... \catcode`\Z=11 % uppercase letters +% \catcode`\a=11 ... \catcode`\z=11 % lowercase letters +% all others are type 12 (other) + +% Here is a list of the characters that have been specially catcoded: +\def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~} +% (not counting ascii null, tab, linefeed, formfeed, return, delete) +% Each symbol in the list is preceded by \do, which can be defined +% if you want to do something to every item in the list. + +% We make @ signs act like letters, temporarily, to avoid conflict +% between user names and internal control sequences of plain format. +\catcode`@=11 + +% INITEX sets up \mathcode x=x, for x=0..255, except that +% \mathcode x=x+"7100, for x = `A to `Z and `a to `z; +% \mathcode x=x+"7000, for x = `0 to `9. +% The following changes define internal codes as recommended +% in Appendix C of The TeXbook: +\mathcode`\^^@="2201 % \cdot +\mathcode`\^^A="3223 % \downarrow +\mathcode`\^^B="010B % \alpha +\mathcode`\^^C="010C % \beta +\mathcode`\^^D="225E % \land +\mathcode`\^^E="023A % \lnot +\mathcode`\^^F="3232 % \in +\mathcode`\^^G="0119 % \pi +\mathcode`\^^H="0115 % \lambda +\mathcode`\^^I="010D % \gamma +\mathcode`\^^J="010E % \delta +\mathcode`\^^K="3222 % \uparrow +\mathcode`\^^L="2206 % \pm +\mathcode`\^^M="2208 % \oplus +\mathcode`\^^N="0231 % \infty +\mathcode`\^^O="0140 % \partial +\mathcode`\^^P="321A % \subset +\mathcode`\^^Q="321B % \supset +\mathcode`\^^R="225C % \cap +\mathcode`\^^S="225B % \cup +\mathcode`\^^T="0238 % \forall +\mathcode`\^^U="0239 % \exists +\mathcode`\^^V="220A % \otimes +\mathcode`\^^W="3224 % \leftrightarrow +\mathcode`\^^X="3220 % \leftarrow +\mathcode`\^^Y="3221 % \rightarrow +\mathcode`\^^Z="8000 % \ne +\mathcode`\^^[="2205 % \diamond +\mathcode`\^^\="3214 % \le +\mathcode`\^^]="3215 % \ge +\mathcode`\^^^="3211 % \equiv +\mathcode`\^^_="225F % \lor +\mathcode`\ ="8000 % \space +\mathcode`\!="5021 +\mathcode`\'="8000 % ^\prime +\mathcode`\(="4028 +\mathcode`\)="5029 +\mathcode`\*="2203 % \ast +\mathcode`\+="202B +\mathcode`\,="613B +\mathcode`\-="2200 +\mathcode`\.="013A +\mathcode`\/="013D +\mathcode`\:="303A +\mathcode`\;="603B +\mathcode`\<="313C +\mathcode`\=="303D +\mathcode`\>="313E +\mathcode`\?="503F +\mathcode`\[="405B +\mathcode`\\="026E % \backslash +\mathcode`\]="505D +\mathcode`\_="8000 % \_ +\mathcode`\{="4266 +\mathcode`\|="026A +\mathcode`\}="5267 +\mathcode`\^^?="1273 % \smallint + +% INITEX sets \uccode`x=`X and \uccode `X=`X for all letters x, +% and \lccode`x=`x, \lccode`X=`x; all other values are zero. +% No changes to those tables are needed in plain TeX format. + +% INITEX sets \sfcode x=1000 for all x, except that \sfcode`X=999 +% for uppercase letters. The following changes are needed: +\sfcode`\)=0 +\sfcode`\'=0 +\sfcode`\]=0 +% The \nonfrenchspacing macro will make further changes to \sfcode values. + +% Finally, INITEX sets all \delcode values to -1, except \delcode`.=0 +\delcode`\(="028300 +\delcode`\)="029301 +\delcode`\[="05B302 +\delcode`\]="05D303 +\delcode`\<="26830A +\delcode`\>="26930B +\delcode`\/="02F30E +\delcode`\|="26A30C +\delcode`\\="26E30F +% N.B. { and } should NOT get delcodes; otherwise parameter grouping fails! + +% To make the plain macros more efficient in time and space, +% several constant values are declared here as control sequences. +% If they were changed, anything could happen; so they are private symbols. +\chardef\@ne=1 +\chardef\tw@=2 +\chardef\thr@@=3 +\chardef\sixt@@n=16 +\chardef\@cclv=255 +\mathchardef\@cclvi=256 +\mathchardef\@m=1000 +\mathchardef\@M=10000 +\mathchardef\@MM=20000 + +% Allocation of registers + +% Here are macros for the automatic allocation of \count, \box, \dimen, +% \skip, \muskip, and \toks registers, as well as \read and \write +% stream numbers, \fam codes, \language codes, and \insert numbers. + +\message{registers,} + +% When a register is used only temporarily, it need not be allocated; +% grouping can be used, making the value previously in the register return +% after the close of the group. The main use of these macros is for +% registers that are defined by one macro and used by others, possibly at +% different nesting levels. All such registers should be defined through +% these macros; otherwise conflicts may occur, especially when two or more +% macro packages are being used at once. + +% The following counters are reserved: +% 0 to 9 page numbering +% 10 count allocation +% 11 dimen allocation +% 12 skip allocation +% 13 muskip allocation +% 14 box allocation +% 15 toks allocation +% 16 read file allocation +% 17 write file allocation +% 18 math family allocation +% 19 language allocation +% 20 insert allocation +% 21 the most recently allocated number +% 22 constant -1 +% New counters are allocated starting with 23, 24, etc. Other registers are +% allocated starting with 10. This leaves 0 through 9 for the user to play +% with safely, except that counts 0 to 9 are considered to be the page and +% subpage numbers (since they are displayed during output). In this scheme, +% \count 10 always contains the number of the highest-numbered counter that +% has been allocated, \count 14 the highest-numbered box, etc. +% Inserts are given numbers 254, 253, etc., since they require a \count, +% \dimen, \skip, and \box all with the same number; \count 20 contains the +% lowest-numbered insert that has been allocated. Of course, \box255 is +% reserved for \output; \count255, \dimen255, and \skip255 can be used freely. + +% It is recommended that macro designers always use +% \global assignments with respect to registers numbered 1, 3, 5, 7, 9, and +% always non-\global assignments with respect to registers 0, 2, 4, 6, 8, 255. +% This will prevent ``save stack buildup'' that might otherwise occur. + +\count10=22 % allocates \count registers 23, 24, ... +\count11=9 % allocates \dimen registers 10, 11, ... +\count12=9 % allocates \skip registers 10, 11, ... +\count13=9 % allocates \muskip registers 10, 11, ... +\count14=9 % allocates \box registers 10, 11, ... +\count15=9 % allocates \toks registers 10, 11, ... +\count16=-1 % allocates input streams 0, 1, ... +\count17=-1 % allocates output streams 0, 1, ... +\count18=3 % allocates math families 4, 5, ... +\count19=0 % allocates \language codes 1, 2, ... +\count20=255 % allocates insertions 254, 253, ... +\countdef\insc@unt=20 % the insertion counter +\countdef\allocationnumber=21 % the most recent allocation +\countdef\m@ne=22 +\m@ne=-1 % a handy constant +\def\wlog{\immediate\write\m@ne} % write on log file (only) + +% Here are abbreviations for the names of scratch registers +% that don't need to be allocated. + +\countdef\count@=255 +\dimendef\dimen@=0 +\dimendef\dimen@i=1 % global only +\dimendef\dimen@ii=2 +\skipdef\skip@=0 +\toksdef\toks@=0 + +% Now, we define \newcount, \newbox, etc. so that you can say \newcount\foo +% and \foo will be defined (with \countdef) to be the next counter. +% To find out which counter \foo is, you can look at \allocationnumber. +% Since there's no \boxdef command, \chardef is used to define a \newbox, +% \newinsert, \newfam, and so on. + +\outer\def\newcount{\alloc@0\count\countdef\insc@unt} +\outer\def\newdimen{\alloc@1\dimen\dimendef\insc@unt} +\outer\def\newskip{\alloc@2\skip\skipdef\insc@unt} +\outer\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi} +\outer\def\newbox{\alloc@4\box\chardef\insc@unt} +\let\newtoks=\relax % we do this to allow plain.tex to be read in twice +\outer\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}} +\outer\def\newtoks{\alloc@5\toks\toksdef\@cclvi} +\outer\def\newread{\alloc@6\read\chardef\sixt@@n} +\outer\def\newwrite{\alloc@7\write\chardef\sixt@@n} +\outer\def\newfam{\alloc@8\fam\chardef\sixt@@n} +\outer\def\newlanguage{\alloc@9\language\chardef\@cclvi} +\def\alloc@#1#2#3#4#5{\global\advance\count1#1by\@ne + \ch@ck#1#4#2% make sure there's still room + \allocationnumber=\count1#1% + \global#3#5=\allocationnumber + \wlog{\string#5=\string#2\the\allocationnumber}} +\outer\def\newinsert#1{\global\advance\insc@unt by\m@ne + \ch@ck0\insc@unt\count + \ch@ck1\insc@unt\dimen + \ch@ck2\insc@unt\skip + \ch@ck4\insc@unt\box + \allocationnumber=\insc@unt + \global\chardef#1=\allocationnumber + \wlog{\string#1=\string\insert\the\allocationnumber}} +\def\ch@ck#1#2#3{\ifnum\count1#1<#2% + \else\errmessage{No room for a new #3}\fi} + +% Here are some examples of allocation. +\newdimen\maxdimen +\maxdimen=16383.99999pt % the largest legal <dimen> +\newskip\hideskip +\hideskip=-1000pt plus 1fill % negative but can grow +\newskip\centering +\centering=0pt plus 1000pt minus 1000pt +\newdimen\p@ +\p@=1pt % this saves macro space and time +\newdimen\z@ +\z@=0pt % can be used both for 0pt and 0 +\newskip\z@skip +\z@skip=0pt plus0pt minus0pt +\newbox\voidb@x % permanently void box register + +% And here's a different sort of allocation: +% For example, \newif\iffoo creates \footrue, \foofalse to go with \iffoo. +\outer\def\newif#1{\count@\escapechar \escapechar\m@ne + \expandafter\expandafter\expandafter + \def\@if#1{true}{\let#1=\iftrue}% + \expandafter\expandafter\expandafter + \def\@if#1{false}{\let#1=\iffalse}% + \@if#1{false}\escapechar\count@} % the condition starts out false +\def\@if#1#2{\csname\expandafter\if@\string#1#2\endcsname} +{\uccode`1=`i \uccode`2=`f \uppercase{\gdef\if@12{}}} % `if' is required + +% Assign initial values to TeX's parameters + +\message{parameters,} + +% All of TeX's numeric parameters are listed here, +% but the code is commented out if no special value needs to be set. +% INITEX makes all parameters zero except where noted. + +\pretolerance=100 +\tolerance=200 % INITEX sets this to 10000 +\hbadness=1000 +\vbadness=1000 +\linepenalty=10 +\hyphenpenalty=50 +\exhyphenpenalty=50 +\binoppenalty=700 +\relpenalty=500 +\clubpenalty=150 +\widowpenalty=150 +\displaywidowpenalty=50 +\brokenpenalty=100 +\predisplaypenalty=10000 +% \postdisplaypenalty=0 +% \interlinepenalty=0 +% \floatingpenalty=0, set during \insert +% \outputpenalty=0, set before TeX enters \output +\doublehyphendemerits=10000 +\finalhyphendemerits=5000 +\adjdemerits=10000 +% \looseness=0, cleared by TeX after each paragraph +% \pausing=0 +% \holdinginserts=0 +% \tracingonline=0 +% \tracingmacros=0 +% \tracingstats=0 +% \tracingparagraphs=0 +% \tracingpages=0 +% \tracingoutput=0 +\tracinglostchars=1 +% \tracingcommands=0 +% \tracingrestores=0 +% \language=0 +\uchyph=1 +% \lefthyphenmin=2 \righthyphenmin=3 set below +% \globaldefs=0 +% \maxdeadcycles=25 % INITEX does this +% \hangafter=1 % INITEX does this, also TeX after each paragraph +% \fam=0 +% \mag=1000 % INITEX does this +% \escapechar=`\\ % INITEX does this +\defaulthyphenchar=`\- +\defaultskewchar=-1 +% \endlinechar=`\^^M % INITEX does this +\newlinechar=-1 +\delimiterfactor=901 +% \time=now % TeX does this at beginning of job +% \day=now % TeX does this at beginning of job +% \month=now % TeX does this at beginning of job +% \year=now % TeX does this at beginning of job +\showboxbreadth=5 +\showboxdepth=3 +\errorcontextlines=5 + +\hfuzz=0.1pt +\vfuzz=0.1pt +\overfullrule=5pt +\hsize=6.5in +\vsize=8.9in +\maxdepth=4pt +\splitmaxdepth=\maxdimen +\boxmaxdepth=\maxdimen +% \lineskiplimit=0pt, changed by \normalbaselines +\delimitershortfall=5pt +\nulldelimiterspace=1.2pt +\scriptspace=0.5pt +% \mathsurround=0pt +% \predisplaysize=0pt, set before TeX enters $$ +% \displaywidth=0pt, set before TeX enters $$ +% \displayindent=0pt, set before TeX enters $$ +\parindent=20pt +% \hangindent=0pt, zeroed by TeX after each paragraph +% \hoffset=0pt +% \voffset=0pt + +% \baselineskip=0pt, changed by \normalbaselines +% \lineskip=0pt, changed by \normalbaselines +\parskip=0pt plus 1pt +\abovedisplayskip=12pt plus 3pt minus 9pt +\abovedisplayshortskip=0pt plus 3pt +\belowdisplayskip=12pt plus 3pt minus 9pt +\belowdisplayshortskip=7pt plus 3pt minus 4pt +% \leftskip=0pt +% \rightskip=0pt +\topskip=10pt +\splittopskip=10pt +% \tabskip=0pt +% \spaceskip=0pt +% \xspaceskip=0pt +\parfillskip=0pt plus 1fil + +\thinmuskip=3mu +\medmuskip=4mu plus 2mu minus 4mu +\thickmuskip=5mu plus 5mu + +% We also define special registers that function like parameters: +\newskip\smallskipamount +\smallskipamount=3pt plus 1pt minus 1pt +\newskip\medskipamount +\medskipamount=6pt plus 2pt minus 2pt +\newskip\bigskipamount +\bigskipamount=12pt plus 4pt minus 4pt +\newskip\normalbaselineskip +\normalbaselineskip=12pt +\newskip\normallineskip +\normallineskip=1pt +\newdimen\normallineskiplimit +\normallineskiplimit=0pt +\newdimen\jot +\jot=3pt +\newcount\interdisplaylinepenalty +\interdisplaylinepenalty=100 +\newcount\interfootnotelinepenalty +\interfootnotelinepenalty=100 + +% Definitions for preloaded fonts + +\def\magstephalf{1095 } +\def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or 2074\or 2488\fi\relax} + +% Fonts assigned to \preloaded are not part of "plain TeX", +% but they are preloaded so that other format packages can use them. +% For example, if another set of macros says "\font\ninerm=cmr9", +% TeX will not have to reload the font metric information for cmr9. + +\message{fonts,} + +\font\tenrm=cmr10 % roman text +% \font\preloaded=cmr9 +% \font\preloaded=cmr8 +\font\sevenrm=cmr7 +% \font\preloaded=cmr6 +\font\fiverm=cmr5 + +\font\teni=cmmi10 % math italic +% \font\preloaded=cmmi9 +% \font\preloaded=cmmi8 +\font\seveni=cmmi7 +% \font\preloaded=cmmi6 +\font\fivei=cmmi5 + +\font\tensy=cmsy10 % math symbols +% \font\preloaded=cmsy9 +% \font\preloaded=cmsy8 +\font\sevensy=cmsy7 +% \font\preloaded=cmsy6 +\font\fivesy=cmsy5 + +\font\tenex=cmex10 % math extension + +% \font\preloaded=cmss10 % sans serif +% \font\preloaded=cmssq8 + +% \font\preloaded=cmssi10 % sans serif italic +% \font\preloaded=cmssqi8 + +\font\tenbf=cmbx10 % boldface extended +% \font\preloaded=cmbx9 +% \font\preloaded=cmbx8 +\font\sevenbf=cmbx7 +% \font\preloaded=cmbx6 +\font\fivebf=cmbx5 + +\font\tentt=cmtt10 % typewriter +% \font\preloaded=cmtt9 +% \font\preloaded=cmtt8 + +% \font\preloaded=cmsltt10 % slanted typewriter + +\font\tensl=cmsl10 % slanted roman +% \font\preloaded=cmsl9 +% \font\preloaded=cmsl8 + +\font\tenit=cmti10 % text italic +% \font\preloaded=cmti9 +% \font\preloaded=cmti8 +% \font\preloaded=cmti7 + +\message{more fonts,} +% \font\preloaded=cmu10 % unslanted text italic + +% \font\preloaded=cmmib10 % bold math italic +% \font\preloaded=cmbsy10 % bold math symbols + +% \font\preloaded=cmcsc10 % caps and small caps + +% \font\preloaded=cmssbx10 % sans serif bold extended + +% \font\preloaded=cmdunh10 % Dunhill style + +% \font\preloaded=cmr7 scaled \magstep4 % for titles +% \font\preloaded=cmtt10 scaled \magstep2 +% \font\preloaded=cmssbx10 scaled \magstep2 + +% \font\preloaded=manfnt % METAFONT logo and dragon curve and special symbols + +% Additional \preloaded fonts can be specified here. +% (And those that were \preloaded above can be eliminated.) + +\let\preloaded=\undefined % preloaded fonts must be declared anew later. + +\skewchar\teni='177 +\skewchar\seveni='177 +\skewchar\fivei='177 +\skewchar\tensy='60 +\skewchar\sevensy='60 +\skewchar\fivesy='60 + +\textfont0=\tenrm +\scriptfont0=\sevenrm +\scriptscriptfont0=\fiverm +\def\rm{\fam\z@\tenrm} +\textfont1=\teni +\scriptfont1=\seveni +\scriptscriptfont1=\fivei +\def\mit{\fam\@ne} +\def\oldstyle{\fam\@ne\teni} +\textfont2=\tensy +\scriptfont2=\sevensy +\scriptscriptfont2=\fivesy +\def\cal{\fam\tw@} +\textfont3=\tenex +\scriptfont3=\tenex +\scriptscriptfont3=\tenex +\newfam\itfam +\def\it{\fam\itfam\tenit} % \it is family 4 +\textfont\itfam=\tenit +\newfam\slfam +\def\sl{\fam\slfam\tensl} % \sl is family 5 +\textfont\slfam=\tensl +\newfam\bffam +\def\bf{\fam\bffam\tenbf} % \bf is family 6 +\textfont\bffam=\tenbf +\scriptfont\bffam=\sevenbf +\scriptscriptfont\bffam=\fivebf +\newfam\ttfam +\def\tt{\fam\ttfam\tentt} % \tt is family 7 +\textfont\ttfam=\tentt + +% Macros for setting ordinary text +\message{macros,} + +\def\frenchspacing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m + \sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m} +\def\nonfrenchspacing{\sfcode`\.3000\sfcode`\?3000\sfcode`\!3000% + \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 } + +\def\normalbaselines{\lineskip\normallineskip + \baselineskip\normalbaselineskip \lineskiplimit\normallineskiplimit} + +\def\^^M{\ } % \<return> = \<space> +\def\^^I{\ } % \<tab> = \<space> + +\def\lq{`} +\def\rq{'} +\def\lbrack{[} +\def\rbrack{]} + +\let\endgraf=\par +\let\endline=\cr + +\def\space{ } +\def\empty{} +\def\null{\hbox{}} + +\let\bgroup={ +\let\egroup=} + +% In \obeylines, we say `\let^^M=\par' instead of `\def^^M{\par}' +% since this allows, for example, `\let\par=\cr \obeylines \halign{...' +{\catcode`\^^M=\active % these lines must end with % +\gdef\obeylines{\catcode`\^^M\active \let^^M\par}% +\global\let^^M=\par} % this is in case ^^M appears in a \write +\def\obeyspaces{\catcode`\ \active} +{\obeyspaces\global\let =\space} + +\def\loop#1\repeat{\def\body{#1}\iterate} +\def\iterate{\body \let\next\iterate \else\let\next\relax\fi \next} +\let\repeat=\fi % this makes \loop...\if...\repeat skippable + +\def\thinspace{\kern .16667em } +\def\negthinspace{\kern-.16667em } +\def\enspace{\kern.5em } + +\def\enskip{\hskip.5em\relax} +\def\quad{\hskip1em\relax} +\def\qquad{\hskip2em\relax} + +\def\smallskip{\vskip\smallskipamount} +\def\medskip{\vskip\medskipamount} +\def\bigskip{\vskip\bigskipamount} + +\def\nointerlineskip{\prevdepth-1000\p@} +\def\offinterlineskip{\baselineskip-1000\p@ + \lineskip\z@ \lineskiplimit\maxdimen} + +\def\topglue{\nointerlineskip\vglue-\topskip\vglue} % for top of page +\def\vglue{\afterassignment\vgl@\skip@=} +\def\vgl@{\par \dimen@\prevdepth \hrule height\z@ + \nobreak\vskip\skip@ \prevdepth\dimen@} +\def\hglue{\afterassignment\hgl@\skip@=} +\def\hgl@{\leavevmode \count@\spacefactor \vrule width\z@ + \nobreak\hskip\skip@ \spacefactor\count@} + +\def~{\penalty\@M \ } +\def\slash{/\penalty\exhyphenpenalty} % a `/' that acts like a `-' + +\def\break{\penalty-\@M} +\def\nobreak{\penalty \@M} +\def\allowbreak{\penalty \z@} + +\def\filbreak{\par\vfil\penalty-200\vfilneg} +\def\goodbreak{\par\penalty-500 } +\def\eject{\par\break} +\def\supereject{\par\penalty-\@MM} + +\def\removelastskip{\ifdim\lastskip=\z@\else\vskip-\lastskip\fi} +\def\smallbreak{\par\ifdim\lastskip<\smallskipamount + \removelastskip\penalty-50\smallskip\fi} +\def\medbreak{\par\ifdim\lastskip<\medskipamount + \removelastskip\penalty-100\medskip\fi} +\def\bigbreak{\par\ifdim\lastskip<\bigskipamount + \removelastskip\penalty-200\bigskip\fi} + +\def\line{\hbox to\hsize} +\def\leftline#1{\line{#1\hss}} +\def\rightline#1{\line{\hss#1}} +\def\centerline#1{\line{\hss#1\hss}} + +\def\rlap#1{\hbox to\z@{#1\hss}} +\def\llap#1{\hbox to\z@{\hss#1}} + +\def\m@th{\mathsurround\z@} +\def\underbar#1{$\setbox\z@\hbox{#1}\dp\z@\z@ + \m@th \underline{\box\z@}$} + +\newbox\strutbox +\setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@} +\def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi} + +\def\hidewidth{\hskip\hideskip} % for alignment entries that can stick out +\def\ialign{\everycr{}\tabskip\z@skip\halign} % initialized \halign +\newcount\mscount +\def\multispan#1{\omit \mscount#1\relax + \loop\ifnum\mscount>\@ne \sp@n\repeat} +\def\sp@n{\span\omit\advance\mscount\m@ne} + +\newif\ifus@ +\newif\if@cr +\newbox\tabs +\newbox\tabsyet +\newbox\tabsdone + +\def\cleartabs{\global\setbox\tabsyet\null \setbox\tabs\null} +\def\settabs{\setbox\tabs\null \futurelet\next\sett@b} +\let\+=\relax % in case this file is being read in twice +\def\sett@b{\ifx\next\+\def\nxt{\afterassignment\s@tt@b\let\nxt}% + \else\let\nxt\s@tcols\fi \let\next\relax \nxt} +\def\s@tt@b{\let\nxt\relax \us@false\m@ketabbox} +\def\tabalign{\us@true\m@ketabbox} % non-\outer version of \+ +\outer\def\+{\tabalign} +\def\s@tcols#1\columns{\count@#1\dimen@\hsize + \loop\ifnum\count@>\z@ \@nother \repeat} +\def\@nother{\dimen@ii\dimen@ \divide\dimen@ii\count@ + \setbox\tabs\hbox{\hbox to\dimen@ii{}\unhbox\tabs}% + \advance\dimen@-\dimen@ii \advance\count@\m@ne} + +\def\m@ketabbox{\begingroup + \global\setbox\tabsyet\copy\tabs + \global\setbox\tabsdone\null + \def\cr{\@crtrue\crcr\egroup\egroup + \ifus@\unvbox\z@\lastbox\fi\endgroup + \setbox\tabs\hbox{\unhbox\tabsyet\unhbox\tabsdone}}% + \setbox\z@\vbox\bgroup\@crfalse + \ialign\bgroup&\t@bbox##\t@bb@x\crcr} + +\def\t@bbox{\setbox\z@\hbox\bgroup} +\def\t@bb@x{\if@cr\egroup % now \box\z@ holds the column + \else\hss\egroup \global\setbox\tabsyet\hbox{\unhbox\tabsyet + \global\setbox\@ne\lastbox}% now \box\@ne holds its size + \ifvoid\@ne\global\setbox\@ne\hbox to\wd\z@{}% + \else\setbox\z@\hbox to\wd\@ne{\unhbox\z@}\fi + \global\setbox\tabsdone\hbox{\box\@ne\unhbox\tabsdone}\fi + \box\z@} + +\def\hang{\hangindent\parindent} +\def\textindent#1{\indent\llap{#1\enspace}\ignorespaces} +\def\item{\par\hang\textindent} +\def\itemitem{\par\indent \hangindent2\parindent \textindent} +\def\narrower{\advance\leftskip\parindent + \advance\rightskip\parindent} + +\outer\def\beginsection#1\par{\vskip\z@ plus.3\vsize\penalty-250 + \vskip\z@ plus-.3\vsize\bigskip\vskip\parskip + \message{#1}\leftline{\bf#1}\nobreak\smallskip\noindent} +\outer\def\proclaim #1. #2\par{\medbreak + \noindent{\bf#1.\enspace}{\sl#2\par}% + \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi} + +\def\raggedright{\rightskip\z@ plus2em \spaceskip.3333em \xspaceskip.5em\relax} +\def\ttraggedright{\tt\rightskip\z@ plus2em\relax} % for use with \tt only + +\chardef\%=`\% +\chardef\&=`\& +\chardef\#=`\# +\chardef\$=`\$ +\chardef\ss="19 +\chardef\ae="1A +\chardef\oe="1B +\chardef\o="1C +\chardef\AE="1D +\chardef\OE="1E +\chardef\O="1F +\chardef\i="10 % dotless i +\chardef\j="11 % dotless j +\def\aa{\accent23a} %^accent +\def\l{\char32l} +\def\L{\leavevmode\setbox0\hbox{L}\hbox to\wd0{\hss\char32L}} + +\def\leavevmode{\unhbox\voidb@x} % begins a paragraph, if necessary +\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em}} +\def\AA{\leavevmode\setbox0\hbox{!}\dimen@\ht0\advance\dimen@-1ex% + \rlap{\raise.67\dimen@\hbox{\char'27}}A} + +\def\mathhexbox#1#2#3{\leavevmode + \hbox{$\m@th \mathchar"#1#2#3$}} +\def\dag{\mathhexbox279} +\def\ddag{\mathhexbox27A} +\def\S{\mathhexbox278} +\def\P{\mathhexbox27B} +\def\Orb{\mathhexbox20D} + +\def\oalign#1{\leavevmode\vtop{\baselineskip\z@skip \lineskip.25ex% + \ialign{##\crcr#1\crcr}}} \def\o@lign{\lineskiplimit\z@ \oalign} +\def\ooalign{\lineskiplimit-\maxdimen \oalign} % chars over each other +{\catcode`p=12 \catcode`t=12 \gdef\\#1pt{#1}} \let\getf@ctor=\\ +\def\sh@ft#1{\dimen@#1\kern\expandafter\getf@ctor\the\fontdimen1\font + \dimen@} % kern by #1 times the current slant +\def\d#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{-1ex}.\hidewidth}}} +\def\b#1{{\o@lign{\relax#1\crcr\hidewidth\sh@ft{-3ex}% + \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}}} +\def\c#1{{\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1% %^accent + \else\ooalign{\unhbox\z@\crcr\hidewidth\char24\hidewidth}\fi}} +\def\copyright{{\ooalign{\hfil\raise.07ex\hbox{c}\hfil\crcr\Orb}}} + +\def\dots{\relax\ifmmode\ldots\else$\m@th\ldots\,$\fi} +\def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX} + +\def\`#1{{\accent18 #1}} %^accent +\def\'#1{{\accent19 #1}} %^accent +\def\v#1{{\accent20 #1}} %^accent +\let\^^_=\v +\def\u#1{{\accent21 #1}} %^accent +\let\^^S=\u +\def\=#1{{\accent22 #1}} %^accent +\def\^#1{{\accent94 #1}} %^accent +\let\^^D=\^ +\def\.#1{{\accent95 #1}} %^accent +\def\H#1{{\accent"7D #1}} %^accent +\def\~#1{{\accent"7E #1}} %^accent +\def\"#1{{\accent"7F #1}} %^accent +\def\t#1{{\edef\next{\the\font}\the\textfont1\accent"7F\next#1}} %^accent + +\def\hrulefill{\leaders\hrule\hfill} +\def\dotfill{\cleaders\hbox{$\m@th \mkern1.5mu.\mkern1.5mu$}\hfill} +\def\rightarrowfill{$\m@th\smash-\mkern-7mu% + \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill + \mkern-7mu\mathord\rightarrow$} +\def\leftarrowfill{$\m@th\mathord\leftarrow\mkern-7mu% + \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill + \mkern-7mu\smash-$} +\mathchardef\braceld="037A +\mathchardef\bracerd="037B +\mathchardef\bracelu="037C +\mathchardef\braceru="037D +\def\downbracefill{$\m@th \setbox\z@\hbox{$\braceld$}% + \braceld\leaders\vrule height\ht\z@ depth\z@\hfill\braceru + \bracelu\leaders\vrule height\ht\z@ depth\z@\hfill\bracerd$} +\def\upbracefill{$\m@th \setbox\z@\hbox{$\braceld$}% + \bracelu\leaders\vrule height\ht\z@ depth\z@\hfill\bracerd + \braceld\leaders\vrule height\ht\z@ depth\z@\hfill\braceru$} + +\outer\def\bye{\par\vfill\supereject\end} + +% Macros for math setting +\message{math definitions,} + +\let\sp=^ +\let\sb=_ +\def\,{\mskip\thinmuskip} +\def\>{\mskip\medmuskip} +\def\;{\mskip\thickmuskip} +\def\!{\mskip-\thinmuskip} +\def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}} +{\catcode`\'=\active \gdef'{^\bgroup\prim@s}} +\def\prim@s{\prime\futurelet\next\pr@m@s} +\def\pr@m@s{\ifx'\next\let\nxt\pr@@@s \else\ifx^\next\let\nxt\pr@@@t + \else\let\nxt\egroup\fi\fi \nxt} +\def\pr@@@s#1{\prim@s} +\def\pr@@@t#1#2{#2\egroup} +{\catcode`\^^Z=\active \gdef^^Z{\not=}} % ^^Z is like \ne in math + +{\catcode`\_=\active \global\let_=\_} % _ in math is either subscript or \_ + +\mathchardef\alpha="010B +\mathchardef\beta="010C +\mathchardef\gamma="010D +\mathchardef\delta="010E +\mathchardef\epsilon="010F +\mathchardef\zeta="0110 +\mathchardef\eta="0111 +\mathchardef\theta="0112 +\mathchardef\iota="0113 +\mathchardef\kappa="0114 +\mathchardef\lambda="0115 +\mathchardef\mu="0116 +\mathchardef\nu="0117 +\mathchardef\xi="0118 +\mathchardef\pi="0119 +\mathchardef\rho="011A +\mathchardef\sigma="011B +\mathchardef\tau="011C +\mathchardef\upsilon="011D +\mathchardef\phi="011E +\mathchardef\chi="011F +\mathchardef\psi="0120 +\mathchardef\omega="0121 +\mathchardef\varepsilon="0122 +\mathchardef\vartheta="0123 +\mathchardef\varpi="0124 +\mathchardef\varrho="0125 +\mathchardef\varsigma="0126 +\mathchardef\varphi="0127 +\mathchardef\Gamma="7000 +\mathchardef\Delta="7001 +\mathchardef\Theta="7002 +\mathchardef\Lambda="7003 +\mathchardef\Xi="7004 +\mathchardef\Pi="7005 +\mathchardef\Sigma="7006 +\mathchardef\Upsilon="7007 +\mathchardef\Phi="7008 +\mathchardef\Psi="7009 +\mathchardef\Omega="700A + +\mathchardef\aleph="0240 +\def\hbar{{\mathchar'26\mkern-9muh}} +\mathchardef\imath="017B +\mathchardef\jmath="017C +\mathchardef\ell="0160 +\mathchardef\wp="017D +\mathchardef\Re="023C +\mathchardef\Im="023D +\mathchardef\partial="0140 +\mathchardef\infty="0231 +\mathchardef\prime="0230 +\mathchardef\emptyset="023B +\mathchardef\nabla="0272 +\def\surd{{\mathchar"1270}} +\mathchardef\top="023E +\mathchardef\bot="023F +\def\angle{{\vbox{\ialign{$\m@th\scriptstyle##$\crcr + \not\mathrel{\mkern14mu}\crcr + \noalign{\nointerlineskip} + \mkern2.5mu\leaders\hrule height.34pt\hfill\mkern2.5mu\crcr}}}} +\mathchardef\triangle="0234 +\mathchardef\forall="0238 +\mathchardef\exists="0239 +\mathchardef\neg="023A +\let\lnot=\neg +\mathchardef\flat="015B +\mathchardef\natural="015C +\mathchardef\sharp="015D +\mathchardef\clubsuit="027C +\mathchardef\diamondsuit="027D +\mathchardef\heartsuit="027E +\mathchardef\spadesuit="027F + +\mathchardef\coprod="1360 +\mathchardef\bigvee="1357 +\mathchardef\bigwedge="1356 +\mathchardef\biguplus="1355 +\mathchardef\bigcap="1354 +\mathchardef\bigcup="1353 +\mathchardef\intop="1352 +\def\int{\intop\nolimits} +\mathchardef\prod="1351 +\mathchardef\sum="1350 +\mathchardef\bigotimes="134E +\mathchardef\bigoplus="134C +\mathchardef\bigodot="134A +\mathchardef\ointop="1348 +\def\oint{\ointop\nolimits} +\mathchardef\bigsqcup="1346 +\mathchardef\smallint="1273 + +\mathchardef\triangleleft="212F +\mathchardef\triangleright="212E +\mathchardef\bigtriangleup="2234 +\mathchardef\bigtriangledown="2235 +\mathchardef\wedge="225E +\let\land=\wedge +\mathchardef\vee="225F +\let\lor=\vee +\mathchardef\cap="225C +\mathchardef\cup="225B +\mathchardef\ddagger="227A +\mathchardef\dagger="2279 +\mathchardef\sqcap="2275 +\mathchardef\sqcup="2274 +\mathchardef\uplus="225D +\mathchardef\amalg="2271 +\mathchardef\diamond="2205 +\mathchardef\bullet="220F +\mathchardef\wr="226F +\mathchardef\div="2204 +\mathchardef\odot="220C +\mathchardef\oslash="220B +\mathchardef\otimes="220A +\mathchardef\ominus="2209 +\mathchardef\oplus="2208 +\mathchardef\mp="2207 +\mathchardef\pm="2206 +\mathchardef\circ="220E +\mathchardef\bigcirc="220D +\mathchardef\setminus="226E % for set difference A\setminus B +\mathchardef\cdot="2201 +\mathchardef\ast="2203 +\mathchardef\times="2202 +\mathchardef\star="213F + +\mathchardef\propto="322F +\mathchardef\sqsubseteq="3276 +\mathchardef\sqsupseteq="3277 +\mathchardef\parallel="326B +\mathchardef\mid="326A +\mathchardef\dashv="3261 +\mathchardef\vdash="3260 +\mathchardef\nearrow="3225 +\mathchardef\searrow="3226 +\mathchardef\nwarrow="322D +\mathchardef\swarrow="322E +\mathchardef\Leftrightarrow="322C +\mathchardef\Leftarrow="3228 +\mathchardef\Rightarrow="3229 +\def\neq{\not=} +\let\ne=\neq +\mathchardef\leq="3214 +\let\le=\leq +\mathchardef\geq="3215 +\let\ge=\geq +\mathchardef\succ="321F +\mathchardef\prec="321E +\mathchardef\approx="3219 +\mathchardef\succeq="3217 +\mathchardef\preceq="3216 +\mathchardef\supset="321B +\mathchardef\subset="321A +\mathchardef\supseteq="3213 +\mathchardef\subseteq="3212 +\mathchardef\in="3232 +\mathchardef\ni="3233 +\let\owns=\ni +\mathchardef\gg="321D +\mathchardef\ll="321C +\mathchardef\not="3236 +\mathchardef\leftrightarrow="3224 +\mathchardef\leftarrow="3220 +\let\gets=\leftarrow +\mathchardef\rightarrow="3221 +\let\to=\rightarrow +\mathchardef\mapstochar="3237 +\def\mapsto{\mapstochar\rightarrow} +\mathchardef\sim="3218 +\mathchardef\simeq="3227 +\mathchardef\perp="323F +\mathchardef\equiv="3211 +\mathchardef\asymp="3210 +\mathchardef\smile="315E +\mathchardef\frown="315F +\mathchardef\leftharpoonup="3128 +\mathchardef\leftharpoondown="3129 +\mathchardef\rightharpoonup="312A +\mathchardef\rightharpoondown="312B + +\def\joinrel{\mathrel{\mkern-3mu}} +\def\relbar{\mathrel{\smash-}} % \smash, because - has the same height as + +\def\Relbar{\mathrel=} +\mathchardef\lhook="312C +\def\hookrightarrow{\lhook\joinrel\rightarrow} +\mathchardef\rhook="312D +\def\hookleftarrow{\leftarrow\joinrel\rhook} +\def\bowtie{\mathrel\triangleright\joinrel\mathrel\triangleleft} +\def\models{\mathrel|\joinrel=} +\def\Longrightarrow{\Relbar\joinrel\Rightarrow} +\def\longrightarrow{\relbar\joinrel\rightarrow} +\def\longleftarrow{\leftarrow\joinrel\relbar} +\def\Longleftarrow{\Leftarrow\joinrel\Relbar} +\def\longmapsto{\mapstochar\longrightarrow} +\def\longleftrightarrow{\leftarrow\joinrel\rightarrow} +\def\Longleftrightarrow{\Leftarrow\joinrel\Rightarrow} +\def\iff{\;\Longleftrightarrow\;} + +\mathchardef\ldotp="613A % ldot as a punctuation mark +\mathchardef\cdotp="6201 % cdot as a punctuation mark +\mathchardef\colon="603A % colon as a punctuation mark +\def\ldots{\mathinner{\ldotp\ldotp\ldotp}} +\def\cdots{\mathinner{\cdotp\cdotp\cdotp}} +\def\vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@ + \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} +\def\ddots{\mathinner{\mkern1mu\raise7\p@\vbox{\kern7\p@\hbox{.}}\mkern2mu + \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu}} + +\def\acute{\mathaccent"7013 } %^math_accent +\def\grave{\mathaccent"7012 } %^math_accent +\def\ddot{\mathaccent"707F } %^math_accent +\def\tilde{\mathaccent"707E } %^math_accent +\def\bar{\mathaccent"7016 } %^math_accent +\def\breve{\mathaccent"7015 } %^math_accent +\def\check{\mathaccent"7014 } %^math_accent +\def\hat{\mathaccent"705E } %^math_accent +\def\vec{\mathaccent"017E } %^math_accent +\def\dot{\mathaccent"705F } %^math_accent +\def\widetilde{\mathaccent"0365 } %^math_accent +\def\widehat{\mathaccent"0362 } %^math_accent +\def\overrightarrow#1{\vbox{\m@th\ialign{##\crcr + \rightarrowfill\crcr\noalign{\kern-\p@\nointerlineskip} + $\hfil\displaystyle{#1}\hfil$\crcr}}} +\def\overleftarrow#1{\vbox{\m@th\ialign{##\crcr + \leftarrowfill\crcr\noalign{\kern-\p@\nointerlineskip} + $\hfil\displaystyle{#1}\hfil$\crcr}}} +\def\overbrace#1{\mathop{\vbox{\m@th\ialign{##\crcr\noalign{\kern3\p@} + \downbracefill\crcr\noalign{\kern3\p@\nointerlineskip} + $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits} +\def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr + $\hfil\displaystyle{#1}\hfil$\crcr\noalign{\kern3\p@\nointerlineskip} + \upbracefill\crcr\noalign{\kern3\p@}}}}\limits} +\def\skew#1#2#3{{\muskip\z@#1mu\divide\muskip\z@\tw@ \mkern\muskip\z@ + #2{\mkern-\muskip\z@{#3}\mkern\muskip\z@}\mkern-\muskip\z@}{}} + +\def\lmoustache{\delimiter"437A340 } % top from (, bottom from ) +\def\rmoustache{\delimiter"537B341 } % top from ), bottom from ( +\def\lgroup{\delimiter"462833A } % extensible ( with sharper tips +\def\rgroup{\delimiter"562933B } % extensible ) with sharper tips +\def\arrowvert{\delimiter"26A33C } % arrow without arrowheads +\def\Arrowvert{\delimiter"26B33D } % double arrow without arrowheads +\def\bracevert{\delimiter"77C33E } % the vertical bar that extends braces +\def\Vert{\delimiter"26B30D } +\let\|=\Vert +\def\vert{\delimiter"26A30C } +\def\uparrow{\delimiter"3222378 } +\def\downarrow{\delimiter"3223379 } +\def\updownarrow{\delimiter"326C33F } +\def\Uparrow{\delimiter"322A37E } +\def\Downarrow{\delimiter"322B37F } +\def\Updownarrow{\delimiter"326D377 } +\def\backslash{\delimiter"26E30F } % for double coset G\backslash H +\def\rangle{\delimiter"526930B } +\def\langle{\delimiter"426830A } +\def\rbrace{\delimiter"5267309 } +\let\}=\rbrace +\def\lbrace{\delimiter"4266308 } +\let\{=\lbrace +\def\rceil{\delimiter"5265307 } +\def\lceil{\delimiter"4264306 } +\def\rfloor{\delimiter"5263305 } +\def\lfloor{\delimiter"4262304 } + +\def\bigl{\mathopen\big} +\def\bigm{\mathrel\big} +\def\bigr{\mathclose\big} +\def\Bigl{\mathopen\Big} +\def\Bigm{\mathrel\Big} +\def\Bigr{\mathclose\Big} +\def\biggl{\mathopen\bigg} +\def\biggm{\mathrel\bigg} +\def\biggr{\mathclose\bigg} +\def\Biggl{\mathopen\Bigg} +\def\Biggm{\mathrel\Bigg} +\def\Biggr{\mathclose\Bigg} +\def\big#1{{\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}} +\def\Big#1{{\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}} +\def\bigg#1{{\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}} +\def\Bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}} +\def\n@space{\nulldelimiterspace\z@ \m@th} + +\def\choose{\atopwithdelims()} +\def\brack{\atopwithdelims[]} +\def\brace{\atopwithdelims\{\}} + +\def\sqrt{\radical"270370 } + +\def\mathpalette#1#2{\mathchoice{#1\displaystyle{#2}}% + {#1\textstyle{#2}}{#1\scriptstyle{#2}}{#1\scriptscriptstyle{#2}}} +\newbox\rootbox % Box to hold radicand for nth root commands. +\def\root#1\of{\setbox\rootbox + \hbox{$\m@th\scriptscriptstyle{#1}$}\mathpalette\r@@t} +\def\r@@t#1#2{\setbox\z@\hbox{$\m@th#1\sqrt{#2}$}\dimen@\ht\z@ + \advance\dimen@-\dp\z@ + \mkern5mu\raise.6\dimen@\copy\rootbox \mkern-10mu\box\z@} +\newif\ifv@ +\newif\ifh@ +\def\vphantom{\v@true\h@false\ph@nt} +\def\hphantom{\v@false\h@true\ph@nt} +\def\phantom{\v@true\h@true\ph@nt} +\def\ph@nt{\ifmmode\def\next{\mathpalette\mathph@nt}% + \else\let\next\makeph@nt\fi\next} +\def\makeph@nt#1{\setbox\z@\hbox{#1}\finph@nt} +\def\mathph@nt#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finph@nt} +\def\finph@nt{\setbox\tw@\null + \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi + \ifh@ \wd\tw@\wd\z@\fi \box\tw@} +\def\mathstrut{\vphantom(} +\def\smash{\relax % \relax, in case this comes first in \halign + \ifmmode\def\next{\mathpalette\mathsm@sh}\else\let\next\makesm@sh + \fi\next} +\def\makesm@sh#1{\setbox\z@\hbox{#1}\finsm@sh} +\def\mathsm@sh#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh} +\def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \box\z@} + +\def\cong{\mathrel{\mathpalette\@vereq\sim}} % congruence sign +\def\@vereq#1#2{\lower.5\p@\vbox{\lineskiplimit\maxdimen\lineskip-.5\p@ + \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}} +\def\notin{\mathrel{\mathpalette\c@ncel\in}} +\def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} +\def\rightleftharpoons{\mathrel{\mathpalette\rlh@{}}} +\def\rlh@#1{\vcenter{\m@th\hbox{\ooalign{\raise2pt + \hbox{$#1\rightharpoonup$}\crcr + $#1\leftharpoondown$}}}} +\def\buildrel#1\over#2{\mathrel{\mathop{\kern\z@#2}\limits^{#1}}} +\def\doteq{\buildrel\textstyle.\over=} + +\def\log{\mathop{\rm log}\nolimits} +\def\lg{\mathop{\rm lg}\nolimits} +\def\ln{\mathop{\rm ln}\nolimits} +\def\lim{\mathop{\rm lim}} +\def\limsup{\mathop{\rm lim\,sup}} +\def\liminf{\mathop{\rm lim\,inf}} +\def\sin{\mathop{\rm sin}\nolimits} +\def\arcsin{\mathop{\rm arcsin}\nolimits} +\def\sinh{\mathop{\rm sinh}\nolimits} +\def\cos{\mathop{\rm cos}\nolimits} +\def\arccos{\mathop{\rm arccos}\nolimits} +\def\cosh{\mathop{\rm cosh}\nolimits} +\def\tan{\mathop{\rm tan}\nolimits} +\def\arctan{\mathop{\rm arctan}\nolimits} +\def\tanh{\mathop{\rm tanh}\nolimits} +\def\cot{\mathop{\rm cot}\nolimits} +\def\coth{\mathop{\rm coth}\nolimits} +\def\sec{\mathop{\rm sec}\nolimits} +\def\csc{\mathop{\rm csc}\nolimits} +\def\max{\mathop{\rm max}} +\def\min{\mathop{\rm min}} +\def\sup{\mathop{\rm sup}} +\def\inf{\mathop{\rm inf}} +\def\arg{\mathop{\rm arg}\nolimits} +\def\ker{\mathop{\rm ker}\nolimits} +\def\dim{\mathop{\rm dim}\nolimits} +\def\hom{\mathop{\rm hom}\nolimits} +\def\det{\mathop{\rm det}} +\def\exp{\mathop{\rm exp}\nolimits} +\def\Pr{\mathop{\rm Pr}} +\def\gcd{\mathop{\rm gcd}} +\def\deg{\mathop{\rm deg}\nolimits} + +\def\bmod{\nonscript\mskip-\medmuskip\mkern5mu + \mathbin{\rm mod}\penalty900\mkern5mu\nonscript\mskip-\medmuskip} +\def\pmod#1{\allowbreak\mkern18mu({\rm mod}\,\,#1)} + +\def\cases#1{\left\{\,\vcenter{\normalbaselines\m@th + \ialign{$##\hfil$&\quad##\hfil\crcr#1\crcr}}\right.} +\def\matrix#1{\null\,\vcenter{\normalbaselines\m@th + \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr + \mathstrut\crcr\noalign{\kern-\baselineskip} + #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,} +\def\pmatrix#1{\left(\matrix{#1}\right)} +\newdimen\p@renwd +\setbox0=\hbox{\tenex B} +\p@renwd=\wd0 % width of the big left ( +\def\bordermatrix#1{\begingroup \m@th + \setbox\z@\vbox{\def\cr{\crcr\noalign{\kern2\p@\global\let\cr\endline}}% + \ialign{$##$\hfil\kern2\p@\kern\p@renwd&\thinspace\hfil$##$\hfil + &&\quad\hfil$##$\hfil\crcr + \omit\strut\hfil\crcr\noalign{\kern-\baselineskip}% + #1\crcr\omit\strut\cr}}% + \setbox\tw@\vbox{\unvcopy\z@\global\setbox\@ne\lastbox}% + \setbox\tw@\hbox{\unhbox\@ne\unskip\global\setbox\@ne\lastbox}% + \setbox\tw@\hbox{$\kern\wd\@ne\kern-\p@renwd\left(\kern-\wd\@ne + \global\setbox\@ne\vbox{\box\@ne\kern2\p@}% + \vcenter{\kern-\ht\@ne\unvbox\z@\kern-\baselineskip}\,\right)$}% + \null\;\vbox{\kern\ht\@ne\box\tw@}\endgroup} + +\def\openup{\afterassignment\@penup\dimen@=} +\def\@penup{\advance\lineskip\dimen@ + \advance\baselineskip\dimen@ + \advance\lineskiplimit\dimen@} +\def\eqalign#1{\null\,\vcenter{\openup\jot\m@th + \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil + \crcr#1\crcr}}\,} +\newif\ifdt@p +\def\displ@y{\global\dt@ptrue\openup\jot\m@th + \everycr{\noalign{\ifdt@p \global\dt@pfalse \ifdim\prevdepth>-1000\p@ + \vskip-\lineskiplimit \vskip\normallineskiplimit \fi + \else \penalty\interdisplaylinepenalty \fi}}} +\def\@lign{\tabskip\z@skip\everycr{}} % restore inside \displ@y +\def\displaylines#1{\displ@y \tabskip\z@skip + \halign{\hbox to\displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr + #1\crcr}} +\def\eqalignno#1{\displ@y \tabskip\centering + \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip + &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering + &\llap{$\@lign##$}\tabskip\z@skip\crcr + #1\crcr}} +\def\leqalignno#1{\displ@y \tabskip\centering + \halign to\displaywidth{\hfil$\@lign\displaystyle{##}$\tabskip\z@skip + &$\@lign\displaystyle{{}##}$\hfil\tabskip\centering + &\kern-\displaywidth\rlap{$\@lign##$}\tabskip\displaywidth\crcr + #1\crcr}} + +% Definitions related to output + +\message{output routines,} + +\countdef\pageno=0 +\pageno=1 % first page is number 1 +\newtoks\headline +\headline={\hfil} % headline is normally blank +\newtoks\footline +\footline={\hss\tenrm\folio\hss} + % footline is normally a centered page number in font \tenrm +\newif\ifr@ggedbottom +\def\raggedbottom{\topskip 10\p@ plus60\p@ \r@ggedbottomtrue} +\def\normalbottom{\topskip 10\p@ \r@ggedbottomfalse} % undoes \raggedbottom +\def\folio{\ifnum\pageno<\z@ \romannumeral-\pageno \else\number\pageno \fi} +\def\nopagenumbers{\footline{\hfil}} % blank out the footline +\def\advancepageno{\ifnum\pageno<\z@ \global\advance\pageno\m@ne + \else\global\advance\pageno\@ne \fi} % increase |pageno| + +\newinsert\footins +\def\footnote#1{\let\@sf\empty % parameter #2 (the text) is read later + \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi + #1\@sf\vfootnote{#1}} +\def\vfootnote#1{\insert\footins\bgroup + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox % top baseline for broken footnotes + \splitmaxdepth\dp\strutbox \floatingpenalty\@MM + \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip + \textindent{#1}\footstrut\futurelet\next\fo@t} +\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t + \else\let\next\f@t\fi \next} +\def\f@@t{\bgroup\aftergroup\@foot\let\next} +\def\f@t#1{#1\@foot} +\def\@foot{\strut\egroup} +\def\footstrut{\vbox to\splittopskip{}} +\skip\footins=\bigskipamount % space added when footnote is present +\count\footins=1000 % footnote magnification factor (1 to 1) +\dimen\footins=8in % maximum footnotes per page + +\newinsert\topins +\newif\ifp@ge +\newif\if@mid +\def\topinsert{\@midfalse\p@gefalse\@ins} +\def\midinsert{\@midtrue\@ins} +\def\pageinsert{\@midfalse\p@getrue\@ins} +\skip\topins=\z@skip % no space added when a topinsert is present +\count\topins=1000 % magnification factor (1 to 1) +\dimen\topins=\maxdimen % no limit per page +\def\@ins{\par\begingroup\setbox\z@\vbox\bgroup} % start a \vbox +\def\endinsert{\egroup % finish the \vbox + \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@ \advance\dimen@12\p@ + \advance\dimen@\pagetotal \advance\dimen@-\pageshrink + \ifdim\dimen@>\pagegoal\@midfalse\p@gefalse\fi\fi + \if@mid \bigskip\box\z@\bigbreak + \else\insert\topins{\penalty100 % floating insertion + \splittopskip\z@skip + \splitmaxdepth\maxdimen \floatingpenalty\z@ + \ifp@ge \dimen@\dp\z@ + \vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero + \else \box\z@\nobreak\bigskip\fi}\fi\endgroup} + +\output{\plainoutput} +\def\plainoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}% + \advancepageno + \ifnum\outputpenalty>-\@MM \else\dosupereject\fi} +\def\pagebody{\vbox to\vsize{\boxmaxdepth\maxdepth \pagecontents}} +\def\makeheadline{\vbox to\z@{\vskip-22.5\p@ + \line{\vbox to8.5\p@{}\the\headline}\vss}\nointerlineskip} +\def\makefootline{\baselineskip24\p@\lineskiplimit\z@\line{\the\footline}} +\def\dosupereject{\ifnum\insertpenalties>\z@ % something is being held over + \line{}\kern-\topskip\nobreak\vfill\supereject\fi} + +\def\pagecontents{\ifvoid\topins\else\unvbox\topins\fi + \dimen@=\dp\@cclv \unvbox\@cclv % open up \box255 + \ifvoid\footins\else % footnote info is present + \vskip\skip\footins + \footnoterule + \unvbox\footins\fi + \ifr@ggedbottom \kern-\dimen@ \vfil \fi} +\def\footnoterule{\kern-3\p@ + \hrule width 2truein \kern 2.6\p@} % the \hrule is .4pt high + +% Hyphenation, miscellaneous macros, and initial values for standard layout +\message{hyphenation} + +\lefthyphenmin=2 +\righthyphenmin=3 % disallow x- or -xx breaks +\input hyphen + +\def\magnification{\afterassignment\m@g\count@} +\def\m@g{\mag\count@ + \hsize6.5truein\vsize8.9truein\dimen\footins8truein} + +\def\tracingall{\tracingonline\@ne\tracingcommands\tw@\tracingstats\tw@ + \tracingpages\@ne\tracingoutput\@ne\tracinglostchars\@ne + \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne + \showboxbreadth\maxdimen\showboxdepth\maxdimen\errorstopmode} + +\def\showhyphens#1{\setbox0\vbox{\parfillskip\z@skip\hsize\maxdimen\tenrm + \pretolerance\m@ne\tolerance\m@ne\hbadness0\showboxdepth0\ #1}} + +\normalbaselines\rm % select roman font +\nonfrenchspacing % punctuation affects the spacing +\catcode`@=12 % at signs are no longer letters + +\def\fmtname{plain} +\def\fmtversion{3.1415926} % identifies the current format |