summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/technica/TEXNIKA.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/technica/TEXNIKA.dtx')
-rw-r--r--macros/latex/contrib/technica/TEXNIKA.dtx10434
1 files changed, 10434 insertions, 0 deletions
diff --git a/macros/latex/contrib/technica/TEXNIKA.dtx b/macros/latex/contrib/technica/TEXNIKA.dtx
new file mode 100644
index 0000000000..70e9e2da6a
--- /dev/null
+++ b/macros/latex/contrib/technica/TEXNIKA.dtx
@@ -0,0 +1,10434 @@
+% \iffalse meta-comment
+%
+%
+% COPYRIGHT NOTICE AND LICENSE
+%
+%
+% COPYRIGHT
+% =========
+%
+% Copyright Gianfranco Boggio-Togna 2006
+%
+%
+% DEFINITIONS
+% ===========
+%
+% In this document the following terms are used:
+%
+% `Work'
+% The files TEXNIKA.dtx, poetry.dtx, drama.dtx, technica.ins and
+% the derived files TEXNIKA.sty, poetry.sty, drama.sty
+%
+% 'Copyright Holder'
+% Gianfranco Boggio-Togna
+%
+% `Derived Work'
+% Any work that under any applicable law is derived from the Work.
+%
+% `Modification'
+% Any procedure that produces a Derived Work under any applicable
+% law -- for example, the production of a file containing an
+% original file associated with the Work or a significant portion of
+% such a file, either verbatim or with modifications and/or
+% translated into another language.
+%
+% `Modify'
+% To apply any procedure that produces a Derived Work under any
+% applicable law.
+%
+% `Distribution'
+% Making copies of the Work available from one person to another, in
+% whole or in part. Distribution includes (but is not limited to)
+% making any electronic components of the Work accessible by
+% file transfer protocols such as FTP or HTTP or by shared file
+% systems such as Sun's Network File System (NFS).
+%
+%
+% CONDITIONS ON DISTRIBUTION AND MODIFICATION
+% ===========================================
+%
+% 1. You may distribute a complete, unmodified copy of the Work as you
+% received it. Distribution of only part of the Work is considered
+% modification of the Work, and no right to distribute such a Derived
+% Work may be assumed under the terms of this clause.
+%
+% 2. The Copyright Holder may, without restriction, modify the Work,
+% thus creating a Derived Work. The Copyright Holder may also distribute
+% the Derived Work without restriction. Derived Works distributed in
+% this manner by the Copyright Holder are considered to be updated
+% versions of the Work.
+%
+% 3. If you are not the Copyright Holder, you are not allowed
+% to modify the Work.
+%
+% 4. The conditions above are not intended to prohibit, and hence do
+% not apply to, the modification, by any method, of any component so that it
+% becomes identical to an updated version of that component of the Work as
+% it is distributed by the Copyright Holder under Clause 2, above.
+%
+% 5. Distribution of the Work in an alternative format, where the Work
+% is then produced by applying some process to that format, does not
+% relax or nullify any sections of this license as they pertain to the
+% results of applying that process.
+%
+% 6. This license places no restrictions on works that are unrelated to
+% the Work, nor does this license place any restrictions on aggregating
+% such works with the Work by any means.
+%
+% 7. Nothing in this license is intended to, or may be used to, prevent
+% complete compliance by all parties with all applicable laws.
+%
+%
+% CONDITIONS ON USE
+% =================
+%
+% The Work may be used without charge for non-commercial private
+% or academic purposes. Use of the Work for commercial purposes is
+% prohibited. To use the Work for commercial purposes you must obtain a
+% license for commercial use from the Copyright Holder.
+%
+%
+% NO WARRANTY
+% ===========
+%
+% There is no warranty for the Work. Except when otherwise stated in
+% writing, the Copyright Holder provides the Work `as is', without
+% warranty of any kind, either expressed or implied, including, but not
+% limited to, the implied warranties of merchantability and fitness for
+% a particular purpose. The entire risk as to the quality and performance
+% of the Work is with you. Should the Work prove defective, you
+% assume the cost of all necessary servicing, repair, or correction.
+%
+% In no event unless agreed to in writing will the Copyright Holder or
+% any other party who may distribute the Work as permitted above, be
+% liable to you for damages, including any general, special, incidental
+% or consequential damages arising out of any use of the Work or out
+% of inability to use the Work (including, but not limited to, loss of
+% data, data being rendered inaccurate, or losses sustained by anyone
+% as a result of any failure of the Work to operate with any other
+% programs), even if the Copyright Holder or said other party has been
+% advised of the possibility of such damages.
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[ibycus,english]{babel}
+\usepackage[pagestyles]{titlesec}
+\newpagestyle {TEXNIKA@page} {
+
+ \sethead {}
+ {\large {\itshape The} \texttt{TEXNIKA} {\itshape package}}
+ {\textup{\thepage}}
+ \setfoot {}
+ {Copyright \copyright\ Gianfranco Boggio--Togna 2006}
+ {}%
+ \setmarks {section}{subsection}
+
+}
+\setlength{\parindent}{0pt}
+\setlength{\textwidth}{5.5in}
+\setlength{\textheight}{8.5in}
+\setlength{\parskip}{\smallskipamount}
+\setcounter{tocdepth}{4}
+\MakeShortVerb{|}
+\AlsoImplementation
+\begin{document}
+\DocInput{texnika.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%\iftrue \CheckSum{16391}\fi
+%
+% \def\fileversion{0.99}
+% \def\filedate{2006/11/11}
+%
+\def\TEXNIKA {%
+ \expandafter
+ \ifx \csname l@polutonikogreek\endcsname \relax
+ \expandafter
+ \ifx \csname l@ibycus\endcsname \relax
+ $\tau\kern-.05em\epsilon\chi\nu\kern-.05em\iota
+ \kappa\kern.04em\acute\alpha$%
+ \else
+ \foreignlanguage{ibycus}{texnika'}%
+ \fi
+ \else
+ \foreignlanguage{polutonikogreek}{teqnik'a}%
+ \fi
+}
+\def \TeXbook {\textit{The \TeX{}book}{}}
+\def \TXN@cmd#1{\texttt{\protect\bslash #1}}%
+%
+% \thispagestyle{empty}
+% \begin{centering}
+% {\large \textsc{Gianfranco Boggio\,--Togna}}\par
+% \vspace*{1in}
+% {\Huge \TEXNIKA}\par
+% \vspace*{.15in}
+% {\LARGE Typesetting for the Humanities}\par
+% \vspace*{.5in}
+% {\Large The {\normalsize TEXNIKA} package}\par
+% \vfill
+% {\Large Version 0.9}\par
+% \end{centering}
+% \newpage
+% \thispagestyle{empty}
+% \vspace{6ex}
+% \section*{Copyright notice}
+% \noindent Copyright \copyright\ Gianfranco Boggio--Togna 2006\par
+% Author's address: C.P. 14021, I-20140 Milano\\
+% Email: \textsl{gbt\kern .08em @\kern .1em acm.org}
+% \vspace{6ex}
+% \section*{License}
+% \noindent This program is distributed under the terms of the license
+% that appears at the start of the file \texttt{TEXNIKA.dtx} (this file)
+% and in file \texttt{license.txt}
+%
+% This program consists of the files \texttt{TEXNIKA.dtx} and
+% \texttt{technica.ins}
+%
+% \newpage
+% \pagenumbering{roman}
+% \tableofcontents
+% \newpage
+% \pagenumbering{arabic}
+% \pagestyle {TEXNIKA@page}
+%
+% \StopEventually{}
+% \section{Preliminaries}
+% \subsection{External dependencies}
+% \begin{macrocode}
+\def \TXN@temp {LaTeX2e}
+\def \TXN@temp@bis {2003/12/01}
+\@tempswafalse
+\ifx \fmtname \TXN@temp
+ \ifx \fmtversion \TXN@temp@bis
+ \else
+ \def \TXN@temp@bis {2005/12/01}
+ \ifx \fmtversion \TXN@temp@bis
+ \else
+ \@tempswatrue
+ \fi
+ \fi
+\else
+ \@tempswatrue
+\fi
+\if@tempswa
+ \PackageError {TEXNIKA}
+ {The Technica suite requires the LaTex\MessageBreak
+ release dated `2003/12/01' or `2005/12/01'}
+ {}
+ \def\recurse{(\recurse)}\recurse
+\fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ProvidesPackage {TEXNIKA}[2006/11/11]
+\def \TXN@option@repeat {n}
+\def \TXN@option@stats {y}
+\def \TXN@warnings@level {2}
+\def \TXN@showlineno {n}
+\DeclareOption {repeat} {\def\TXN@option@repeat{y}}
+\DeclareOption {norepeat} {\def\TXN@option@repeat{n}}
+\DeclareOption {nostats} {\def\TXN@option@stats{n}}
+\DeclareOption {nowarnings} {\def\TXN@warnings@level{0}}
+\DeclareOption {warnings} {\def\TXN@warnings@level{1}}
+\DeclareOption {inplacewarnings} {\def\TXN@warnings@level{2}}
+\DeclareOption {lineno} {\def\TXN@showlineno{y}}
+\ProcessOptions
+\RequirePackage {keyval}[1999/03/16 v1.13]
+\RequirePackage {calc}[1998/07/07 v4.1b]
+\RequirePackage {txnline}
+\RequirePackage {txntitle}
+\RequirePackage {txndrop}
+\RequirePackage {ifmtarg}[2000/03/24 v1.2]
+\RequirePackage {ifthen}[2001/05/26 v1.1c]
+\RequirePackage {soul}[2003/11/17 v2.4]
+% \end{macrocode}
+% \newpage
+% \subsection{Booleans}
+% \begin{macrocode}
+% \end{macrocode}
+% A general-purpose switch, always used globally.
+% \begin{macrocode}
+\newif \ifTXN@sw
+\def \TXN@sw@true {\global\TXN@swtrue}
+\def \TXN@sw@false {\global\TXN@swfalse}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif \ifTXN@withinVersus
+\newif \ifTXN@withinProsa
+\newif \ifTXN@withinDrama
+\newif \ifTXN@withinSD
+\newif \ifTXN@withinPersona
+\newif \ifTXN@withinAd
+\newif \ifTXN@withinFaciesStrophae
+\newif \ifTXN@withinIndexes
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif \ifTXN@milestones
+\newif \ifTXN@replay
+\newif \ifTXN@lineating
+\newif \ifTXN@folio@set
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif \ifTXN@poetry
+\newif \ifTXN@leaders
+\newif \ifTXN@outside@preamble
+\newif \ifTXN@blank@line
+\newif \ifTXN@after@Spatium
+\newif \ifTXN@internal
+% \end{macrocode}
+% Visible to the user
+% \begin{macrocode}
+\newif \ifNewPage
+% \end{macrocode}
+% \subsection{Registers}
+% We stick to the rules for scratch registers.
+% Registers with names ending in `@' are even-numbered and used only
+% with local assignments; odd-numbered registers are used only with
+% global assignments.
+% \begin{macrocode}
+\dimendef \dimen@iii = 3
+\dimendef \dimen@@ = 4
+\toksdef \toks@i = 1
+\toksdef \toks@@ = 2
+\toksdef \toks@iii = 3
+\toksdef \toks@v = 5
+\skipdef \skip@i = 1
+\skipdef \skip@@ = 2
+% \end{macrocode}
+% Work registers
+% \begin{macrocode}
+\newcount \TXN@counter
+\newcount \TXN@counter@a
+\newcount \TXN@counter@b
+% \end{macrocode}
+% \begin{macrocode}
+\newdimen \TXN@dim@a
+\newdimen \TXN@dim@b
+\newdimen \TXN@dim@c
+% \end{macrocode}
+% \begin{macrocode}
+\newskip \TXN@skip@a
+\newskip \TXN@skip@b
+\newskip \TXN@skip@c
+% \end{macrocode}
+% \begin{macrocode}
+\newtoks \TXN@toks@a
+\newtoks \TXN@toks@b
+\newtoks \TXN@toks@c
+% \end{macrocode}
+% Dedicated registers
+% \begin{macrocode}
+\newskip \TXN@skip@depth@cclv
+% \end{macrocode}
+% Where the paragraph parameters are saved
+% \begin{macrocode}
+\newskip \TXN@baselineskip
+\newskip \TXN@leftskip
+\newskip \TXN@rightskip
+\newskip \TXN@hangindent
+\newskip \TXN@hangafter
+% \end{macrocode}
+% The leading space in the line, for both \textit{Versus} and \textit{Prosa}
+% \begin{macrocode}
+\newskip \TXN@leading@space
+% \end{macrocode}
+% The output of |\TXN@trim|
+% \begin{macrocode}
+\newtoks \TXN@trimmed
+% \end{macrocode}
+% The text measure
+% \begin{macrocode}
+\newdimen \TXN@measure
+\let \Measure = \TXN@measure
+% \end{macrocode}
+% \subsection{Boxes}
+% Work boxes
+% \begin{macrocode}
+\newbox \TXN@vbox
+\newbox \TXN@hbox
+% \end{macrocode}
+% Dedicated boxes
+% \begin{macrocode}
+\newbox \TXN@object@numerus
+\newbox \TXN@object@textus
+\newbox \TXN@marginalia
+\newbox \TXN@standalone
+% \end{macrocode}
+% A box for inserts (used for milestones)
+% \begin{macrocode}
+ \@next \TXN@insert \@freelist \relax \relax
+\def \TXN@max@floats {256\relax}
+% \end{macrocode}
+% \subsection{Options}
+% Options marked with an asterisk can be set/tested by the user:
+% the value must not be changed.
+% \begin{macrocode}
+% \end{macrocode}
+% Paragraph shape
+% \begin{macrocode}
+\def \TXN@o@Justified {j} % *
+\def \TXN@o@RangedLeft {l} % *
+\def \TXN@o@RangedRight {r} % *
+\def \TXN@o@Centred {c} % *
+\def \TXN@o@CentredFinal {f} % *
+% \end{macrocode}
+% Areas
+% \begin{macrocode}
+\def \TXN@o@AttachedToArea {A}
+\def \TXN@o@AreaBottom {B}
+\def \TXN@o@AreaMiddle {M}
+\def \TXN@o@AreaTop {T}
+\def \TXN@o@AreaWrap {W}
+\def \TXN@o@AreaExtend {E}
+% \end{macrocode}
+% Spacing
+% \begin{macrocode}
+\def \TXN@o@NoSpatiumAnte {a} % *
+\def \TXN@o@NoSpatiumPost {p} % *
+\def \TXN@o@NoSpatiumSupra {s} % *
+\def \TXN@o@NoSpatiumInfra {i} % *
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@o@SpatiumStar {*}
+\def \TXN@o@SpatiumExclude {x}
+\def \TXN@o@SpatiumExcludeDim {d}
+\def \TXN@o@SpatiumExcludeEject {[}
+% \end{macrocode}
+% Alignment
+% \begin{macrocode}
+\def \TXN@o@AlignedAxis {a}
+\def \TXN@o@AlignedBottom {b}
+\def \TXN@o@AlignedTop {t}
+\def \TXN@o@AlignedMiddle {m}
+\def \TXN@o@AlignedCentre {C}
+\def \TXN@o@AlignedLeft {L}
+\def \TXN@o@AlignedRight {R}
+\def \TXN@o@AlignedTail {y}
+\def \TXN@o@FieldAutoWidth {f}
+% \end{macrocode}
+% Drama
+% \begin{macrocode}
+\def \TXN@o@PersonaNormal {n}
+\def \TXN@o@PersonaCentre {c}
+\def \TXN@o@PersonaLeft {l}
+\def \TXN@o@DetachedSD {d} % *
+\def \TXN@o@EmbeddedSD {e} % *
+\def \TXN@o@InitialSD {b} % *
+\def \TXN@o@LeftSD {l} % *
+\def \TXN@o@RightSD {r} % *
+\def \TXN@o@NoHangindent {h} % *
+\def \TXN@o@NoFirstIndent {q} % *
+\def \TXN@o@FullWidth {w} % *
+% \end{macrocode}
+% |\textus|
+% \begin{macrocode}
+\def \TXN@o@Unhyphenated {u}
+\def \TXN@o@Multiples {x}
+\def \TXN@o@Leaders {.}
+% \end{macrocode}
+% |\numerus|
+% \begin{macrocode}
+\def \TXN@o@Pagewise {p}
+% \end{macrocode}
+% Delimiters
+% \begin{macrocode}
+\def \TXN@o@DelimiterAtStart {s}
+\def \TXN@o@DelimiterAtEnd {e}
+% \end{macrocode}
+% Miscellaneous
+% \begin{macrocode}
+\def \TXN@o@NoArgument {0}
+\def \TXN@o@NoFacies {1}
+% \end{macrocode}
+% \subsection{Short-hands}
+% \begin{macrocode}
+\def \TXN@exxxpandafter {\expandafter\expandafter\expandafter}
+\def \TXN@c {\the\TXN@counter}
+% \end{macrocode}
+% Most control sequence names in the suite are built with |\csname|
+% |\endcsname|. These macros make the code somewhat more
+% readable (and writable :)
+% \begin{macrocode}
+\def \TXN@def #1{\expandafter\def\csname #1\endcsname}
+\def \TXN@edef #1{\expandafter\edef\csname #1\endcsname}
+\def \TXN@gdef #1{\expandafter\gdef\csname #1\endcsname}
+\def \TXN@xdef #1{\expandafter\xdef\csname #1\endcsname}
+% \end{macrocode}
+% \begin{macrocode}
+\def \TXN@let #1=#2{\expandafter\let\expandafter#1\csname #2\endcsname\relax}
+\def \TXN@assign #1=#2{\expandafter #1 \csname #2\endcsname\relax}
+% \end{macrocode}
+% These macros are used after |\if| (a trick from the Grand Wizard himself...)
+% \begin{macrocode}
+\def \TXN@empty #1{00\fi\expandafter \ifx \csname #1\endcsname \empty}
+\def \TXN@relax #1{00\fi\expandafter \ifx \csname #1\endcsname \relax}
+\def \TXN@num #1#2#3{00\fi\expandafter \ifnum \csname #1\endcsname#2#3\relax}
+\def \TXN@x #1{00\fi\expandafter \ifx \csname #1\endcsname}
+\def \TXN@option #1#2{00\fi\TXN@test@option #1#2\if@tempswa}
+% \end{macrocode}
+% Two macros used to handle CR within \textit{Versus}
+% \begin{macrocode}
+\def \TXN@normalCR {\catcode`\^^M=5 }
+\def \TXN@activeCR {\catcode`\^^M=\active}
+\def \Strut {\leavevmode
+ \hbox{\vrule height \ht\strutbox depth \dp\strutbox width .25pt}}
+% \end{macrocode}
+% Macros to increment/decrement a number held in a control sequence
+% \begin{macrocode}
+\def \TXN@incr #1{%
+ \count@ = #1\relax
+ \advance \count@ by \@ne
+ \edef #1{\the\count@}%
+}
+\def \TXN@gincr #1{%
+ \count@ = #1\relax
+ \advance \count@ by \@ne
+ \xdef #1{\the\count@}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@decr #1{%
+ \count@ = #1\relax
+ \advance \count@ by \m@ne
+ \edef #1{\the\count@}%
+}
+\def \TXN@gdecr #1{%
+ \count@ = #1\relax
+ \advance \count@ by \m@ne
+ \xdef #1{\the\count@}%
+}
+% \end{macrocode}
+%
+% \subsection{Miscellaneous macros}
+%
+% The pass number
+% \begin{macrocode}
+\gdef \TXN@pass {1}%
+\def \TXN@theTextus {0}%
+% \end{macrocode}
+% A `sentinel' placed at the end of the parameter list for a macro
+% \begin{macrocode}
+\def \TXN@nil {}
+% \end{macrocode}
+% Self-explanatory
+% \begin{macrocode}
+\def \TXN@self #1{#1}
+% \end{macrocode}
+% This macro is placed wherever there is the risk (for example, after macros
+% that expand to numerals) of unwanted expansion as \TeX{} looks ahead.
+% It is also used in |\ifx| tests to check if a macro holds |\relax|,
+% so the definition must NOT be changed.
+% \begin{macrocode}
+\def \TXN@safe {\relax}
+% \end{macrocode}
+% Makes a new test available in |\ifthenelse|
+% \begin{macrocode}
+\def \isempty #1{\boolean{\ifx \empty#1true\else false\fi}}
+% \end{macrocode}
+% Used in some debugging output (and available to the user)
+% \begin{macrocode}
+\newcommand {\TXNcmr}{%
+ \fontencoding{OT1}\fontfamily{cmr}\fontseries{m}%
+ \fontshape{n}\selectfont
+}
+% \end{macrocode}
+% \section{Service macros}
+%
+% \subsection{Lists}
+%
+% Two types of lists are available. The first (\textit{Simple List}) has
+% the format described in section 3 of the \textit{Dirty Tricks}
+% chapter. The second (\textit{Name List}) holds named elements, each
+% consisting of a control sequence (the name) and a value (enclosed
+% within braces).
+%
+% A \textit{Simple List} is created by |\TXN@SimpleList|.
+% For \textit{Name List}s, |\TXN@NameList| defines a prototype, which
+% is never used directly. An instance of the \textit{Name List}
+% is created by means of an |\edef| using the prototype as argument;
+% for instance:
+%
+% |\TXN@NameList\ThePrototype{\first \second \third}|\par
+% |\edef\AnInstance{\ThePrototype}|
+%
+% Lists are defined and modified by \textbf{local} assignements.
+% If a list is a global structure the next boolean must be set
+% to |true| before calling a macro that modifies the list (the
+% boolean is automatically reset to |false| after use).
+%
+% \begin{macrocode}
+\newif \ifTXN@global@list
+\let \TXN@listname = \relax
+% \end{macrocode}
+% \subsubsection{Creating a list}
+%
+% Create a \textit{Simple List}.\\
+% |#1| the list name \\
+% |#2| the number of elements
+% \begin{macrocode}
+\def \TXN@SimpleList #1#2{%
+ \begingroup
+ \let \\ = \relax
+ \gdef#1{}%
+ \@tempcnta = #2\relax
+ \loop
+ \ifnum \@tempcnta > \z@
+ \xdef#1{#1\\{}}%
+ \advance \@tempcnta by \m@ne
+ \repeat
+ \endgroup
+}
+\TXN@SimpleList \TXN@SimpleList@work \z@
+% \end{macrocode}
+% Define a \textit{Name List} prototype. \\
+% |#1| the \textit{Name List} prototype name\\
+% |#2| the list element names\\
+% All the list element names are |\let| equal to |\relax|
+% \begin{macrocode}
+\def \TXN@NameList #1#2{%
+ \count@ = \escapechar
+ \escapechar = \m@ne
+ \edef #1{\TXN@listname {\string#1}}%
+ \escapechar = \count@
+ \def \TXN@temp {#1}%
+ \TXN@NameList@bis #2\TXN@nil
+}
+\def \TXN@NameList@bis #1{%
+ \ifx \TXN@nil #1\relax
+ \else
+ \let #1 = \relax
+ \expandafter
+ \edef \TXN@temp {\TXN@temp #1{\relax}}%
+ \expandafter \TXN@NameList@bis
+ \fi
+}
+% \end{macrocode}
+% Check if |#1| is \textit{Name List} of type |#2|
+% \begin{macrocode}
+\def \TXN@NameList@check #1#2{%
+ \count@ = \z@
+ \TXN@sw@false
+ \TXN@NameList@check@bis #1\TXN@nil
+ \ifTXN@sw
+ \TXN@sw@false
+ \begingroup
+ \TXN@List@gobble {#2}%
+ \def \TXN@listname ##1{%
+ \if \TXN@x {##1}#2\relax
+ \TXN@sw@true
+ \fi
+ }%
+ \setbox\z@ = \hbox {#1}%
+ \endgroup
+ \fi
+}
+\def \TXN@NameList@check@bis #1{%
+ \let \next = \TXN@NameList@check@bis
+ \def \TXN@parameter {#1}%
+ \ifx \empty \TXN@parameter
+ \else
+ \ifx \TXN@nil #1\relax
+ \let \next = \relax
+ \else
+ \ifnum \count@ = \z@
+ \ifx \TXN@listname #1\relax
+ \TXN@sw@true
+ \fi
+ \fi
+ \advance \count@ by \@ne
+ \fi
+ \fi
+ \next
+}
+% \end{macrocode}
+% \subsubsection{Service macros for lists}
+% Make all the elements of a \textit{Name List} equivalent to |\@gobble|.\\
+% |#1| is the list name.
+% \begin{macrocode}
+\def \TXN@List@gobble #1{%
+ \let \TXN@listname = \@gobble
+ \expandafter \TXN@List@gobble@bis #1\TXN@nil
+}
+\def \TXN@List@gobble@bis #1#2#3\TXN@nil{%
+ \TXN@List@gobble@ter #3\TXN@nil
+}
+\def \TXN@List@gobble@ter #1{%
+ \ifx \TXN@nil #1\relax
+ \else
+ \def \TXN@parameter {#1}%
+ \ifx \empty \TXN@parameter
+ \else
+ \ifx \TXN@parameter \TXN@safe
+ \else
+ \let #1 = \@gobble
+ \fi
+ \fi
+ \expandafter \TXN@List@gobble@ter
+ \fi
+}
+% \end{macrocode}
+%
+% Determine the list type.\\
+% The argument of the macro call is the expanded list.\\
+% If \textit{Simple List}, |\TXN@list@type| is |\empty|\\
+% If \textit{Name List}, |\TXN@list@type| is the list prototype
+%
+% \begin{macrocode}
+\def \TXN@check@list@type #1{%
+ \gdef \TXN@list@type {}%
+ \def \TXN@parameter {#1}%
+ \ifx \empty \TXN@parameter
+ \else
+ \expandafter \TXN@check@list@type@bis #1\TXN@nil
+ \fi
+}
+\def \TXN@check@list@type@bis #1#2#3\TXN@nil{%
+ \begingroup
+ \def \TXN@listname{\TXN@listname}%
+ \ifx \TXN@listname #1\relax
+ \gdef \TXN@list@type {#2}%
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+%
+% Check that the element name is defined for the \textit{Name List}
+% (to catch typos during development). |#1| is the list name,
+% |\TXN@token| holds the element name.
+%
+% \begin{macrocode}
+\def \TXN@check@name #1{%
+% \count@ = \@ne
+% \expandafter \TXN@check@name@bis #1\TXN@nil
+ \count@ = \z@
+}
+\def \TXN@check@name@bis #1#2#3\TXN@nil{%
+ \TXN@check@name@ter #3\TXN@nil
+% \expandafter \TXN@check@name@ter #3\TXN@nil
+}
+\def \TXN@check@name@ter #1{%
+ \ifx \TXN@nil #1\relax
+ \else
+ \expandafter
+ \ifx \TXN@token #1\relax
+ \count@ = \z@
+ \fi
+ \expandafter \TXN@check@name@ter
+ \fi
+}
+% \end{macrocode}
+% Returns the number of list elements in |\@tempcnta|.\\
+% |#1| is the list name.
+% \begin{macrocode}
+\def \TXN@SimpleList@length #1{%
+ \@tempcnta = \z@
+ \def \TXN@parameter {#1}%
+ \ifx \empty \TXN@parameter
+ \else
+ \begingroup
+ \def \\##1{\global\advance \@tempcnta by \@ne}%
+ #1%
+ \endgroup
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Getting a list element}
+%
+% The |\TXN@get| command fetches the value of a list element.\\
+% |#1| the list name, followed by a dot followed by...\\
+% |#2| the element name\\
+% |#3| a control sequence to which the value is assigned
+%
+% The macro first check |#1| to determine the list type and
+% then calls the appropriate macro.
+%
+% \begin{macrocode}
+\def \TXN@get #1{%
+ \TXN@check@list@type #1\relax
+ \ifx \empty \TXN@list@type
+ \expandafter \TXN@SimpleList@get
+ \else
+ \expandafter \TXN@NameList@get
+ \fi
+#1%
+}
+% \end{macrocode}
+%
+% Get a value from a \textit{Simple List}
+%
+% \begin{macrocode}
+\def \TXN@SimpleList@get #1.#2#3{%
+ \begingroup
+ \global \toks@i = {}%
+ \count@ = #2\relax
+ \def \\##1{%
+ \ifnum \count@ = \z@
+ \global \toks@i = {##1}%
+ \fi
+ \advance \count@ by \m@ne
+ }%
+ #1%
+ \endgroup
+ \edef #3{\the\toks@i}%
+}
+% \end{macrocode}
+% Get a value from a \textit{Name List}
+%
+% All list elements are |\let| equal to |\@gobble| except the
+% element being fetched and then the list is executed.
+%
+% \begin{macrocode}
+\def \TXN@NameList@get #1.#2#3{%
+ \begingroup
+ \def \TXN@token {#2}%
+ \expandafter \TXN@check@name \csname \TXN@list@type\endcsname
+ \ifodd \count@
+ \PackageError {TEXNIKA}
+ {\expandafter\protect\TXN@token\space
+ undefined for NameList\space \protect#1}
+ {Please report the error to the author}%
+ \fi
+ \expandafter \TXN@List@gobble \csname \TXN@list@type\endcsname
+ \def #2##1{\global \toks@i={##1}}%
+ #1%
+ \endgroup
+ \edef #3{\the\toks@i}%
+}
+% \end{macrocode}
+% \subsubsection{Setting a list element}
+%
+% The |\TXN@set| command sets the value of a list element\\
+% |#1| the list name, followed by a dot followed by... \\
+% |#2| the element name\\
+% |#3| the new value
+%
+% The macro first check |#1| to determine the list type and
+% the calls the appropriate macro.
+%
+% \begin{macrocode}
+\def \TXN@set #1{%
+ \TXN@check@list@type #1\relax
+ \ifx \empty \TXN@list@type
+ \expandafter \TXN@SimpleList@set
+ \else
+ \expandafter \TXN@NameList@set
+ \fi
+#1%
+}
+% \end{macrocode}
+%
+% Set the value of a \textit{Simple List} element.
+% \begin{macrocode}
+\def \TXN@SimpleList@set #1.#2#3{%
+ \begingroup
+ \TXN@SimpleList \TXN@gtemp \z@
+ \count@ = \z@
+ \def \\##1{%
+ \ifnum \count@ = #2\relax
+ \TXN@SimpleList@append \TXN@gtemp{#3}%
+ \else
+ \TXN@SimpleList@append \TXN@gtemp{##1}%
+ \fi
+ \advance \count@ by \@ne
+ }%
+ #1%
+ \ifnum \count@ < #2\relax
+ \PackageError{TEXNIKA}%
+ {Invalid element number for simple list}
+ {Please report the error to the author}%
+ \fi
+ \endgroup
+ \ifTXN@global@list \TXN@global@listfalse \global \fi
+ \let #1= \TXN@gtemp
+}
+% \end{macrocode}
+% Append an element to a \textit{Simple List}.
+% |#1| the list name\\
+% |#2| the element
+% \begin{macrocode}
+\def \TXN@SimpleList@append #1#2{%
+ \begingroup
+ \toks@ = \expandafter {#1}%
+ \toks@@ =\expandafter {#2}%
+ \xdef \TXN@gtemp{\the\toks@ \noexpand\\{\the\toks@@}}%
+ \endgroup
+ \ifTXN@global@list \TXN@global@listfalse \global \fi
+ \let #1= \TXN@gtemp
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@SimpleList@set@extend #1.#2#3{%
+ \begingroup
+ \TXN@SimpleList\TXN@gtemp \z@
+ \count@ = \z@
+ \def \\##1{%
+ \ifnum \count@ = #2\relax
+ \TXN@SimpleList@append \TXN@gtemp{#3}%
+ \else
+ \TXN@SimpleList@append \TXN@gtemp{##1}%
+ \fi
+ \advance \count@ by \@ne
+ }%
+ #1%
+ \ifnum #2 < \count@
+ \else
+ {\loop
+ \ifnum \count@ < #2\relax
+ \TXN@SimpleList@append \TXN@gtemp {}%
+ \advance \count@ by \@ne
+ \repeat
+ \TXN@SimpleList@append \TXN@gtemp{#3}%
+ }%
+ \fi
+ \endgroup
+ \ifTXN@global@list \TXN@global@listfalse \global \fi
+ \let #1 = \TXN@gtemp
+}
+% \end{macrocode}
+% Set the value of a \textit{Name List} element
+%
+% All list elements remain |\let| equal to |\relax| except the
+% element being set and then the list is redefined.
+%
+% \begin{macrocode}
+\def \TXN@NameList@set #1.#2#3{%
+ \def \TXN@token {#2}%
+ \count@=\@ne
+ \expandafter \TXN@check@name \csname \TXN@list@type\endcsname
+ \ifodd \count@
+ \PackageError{TEXNIKA}%
+ {\expandafter\protect\TXN@token\space
+ undefined for NameList \protect#1}
+ {Please report the error to the author}%
+ \fi
+ \def #2##1{\noexpand#2{#3}}%
+ \edef#1{#1}%
+ \let #2 = \relax
+}
+% \end{macrocode}
+% \subsection{Miscellanea}
+% \subsubsection{Issuing a warning message}
+%
+% The starred form of the command is used when we are in |vmode|: it
+% does not typeset the line number directly but adds it to the
+% |\TXN@marginalia| box.
+% \begin{macrocode}
+\newif \ifTXN@Warning@star
+\newcommand {\TXN@Warning}{%
+ \@ifstar {\TXN@Warning@startrue\TXN@Warning@bis}
+ {\TXN@Warning@starfalse\TXN@Warning@bis}%
+}
+\newcommand {\TXN@Warning@bis}[2][0]{%
+ \ifnum \TXN@warnings@level > \z@
+ \PackageWarningNoLine {TEXNIKA}
+ {Input line \number\inputlineno: \MessageBreak #2}%
+ \fi
+ \ifnum \TXN@warnings@level > \@ne
+ \begingroup
+ \TXNcmr \footnotesize
+ \dimen@ = \oddsidemargin
+ \ifdim \dimen@ < \evensidemargin
+ \dimen@ = \evensidemargin
+ \fi
+ \dimen@ = .5\dimen@
+ \setbox \z@ = \hbox {\lower .45ex \hbox{*}}%
+ \if@twocolumn
+ \if@firstcolumn
+ \setbox \tw@= \llap {%
+ \copy \z@ \number\inputlineno \copy \z@ \kern \dimen@}%
+ \else
+ \setbox \tw@= \rlap {\kern\TXN@measure
+ \kern \dimen@ \copy \z@ \number\inputlineno \copy \z@}%
+ \fi
+ \else
+ \setbox \tw@= \llap{%
+ \copy \z@ \number\inputlineno \copy \z@ \kern \dimen@}%
+ \fi
+ \ifTXN@Warning@star
+ \global \setbox \TXN@marginalia = \hbox to \z@ {%
+ \unhbox \TXN@marginalia \unhbox \tw@}%
+ \else
+ \ifvmode
+ \PackageError {TEXNIKA}
+ {WARNING in vmode}
+ {Please report the error to the author}%
+ \fi
+ \box\tw@
+ \fi
+ \endgroup
+ \fi
+}
+\let \TXN@PackageWarningNoLine = \PackageWarningNoLine
+% \end{macrocode}
+% Handling an error in the \texttt{keyval} package
+% \begin{macrocode}
+\def \TXN@keyval@error #1{%
+ \expandafter \TXN@keyval@error@bis \KV@prefix
+ \PackageError {TEXNIKA}
+ {Bad argument for \@backslashchar\TXN@temp}
+ {Please report the error to the author}%
+}
+\def \TXN@keyval@error@bis KV@#1@{\def \TXN@temp {#1}}
+% \end{macrocode}
+% \subsubsection{Checking for the beginning of a number}
+% \begin{macrocode}
+\newif \ifTXN@isdigit
+\newif \ifTXN@issign
+\def \TXN@check@start@of@number #1{%
+ \TXN@check@start@of@number@bis #1\TXN@nil
+}
+\def \TXN@check@start@of@number@bis #1#2\TXN@nil{%
+ \TXN@isdigittrue
+ \TXN@issignfalse
+ \ifx 0#1\else
+ \ifx 1#1\else
+ \ifx 2#1\else
+ \ifx 3#1\else
+ \ifx 4#1\else
+ \ifx 5#1\else
+ \ifx 6#1\else
+ \ifx 7#1\else
+ \ifx 8#1\else
+ \ifx 9#1\else
+ \TXN@isdigitfalse
+ \TXN@issigntrue
+ \ifx +#1\else
+ \ifx -#1\else
+ \TXN@issignfalse
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+}
+% \end{macrocode}
+% \subsubsection{Checking for glue}
+% \begin{macrocode}
+\def \TXN@check@if@glue #1\TXN@nil{%
+ \TXN@sw@true
+ \begingroup
+ \setbox \z@ = \hbox {\skip@ = #1 sp}%
+ \ifdim \wd\z@ = \z@
+ \TXN@sw@false
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+% \subsubsection{Checking for not infinitely stretchable glue}
+% \begin{macrocode}
+\def \TXN@check@if@normal@glue #1{%
+ \TXN@sw@true
+ \begingroup
+ \hbadness = \@M
+ \setbox \z@ = \hbox to \maxdimen {\hskip #1}%
+ \ifnum \badness = \z@ \TXN@sw@false \fi
+ \endgroup
+}
+% \end{macrocode}
+% \subsubsection{\TXN@cmd{futurenonspacelet}}
+% From \TeXbook
+% \begin{macrocode}
+\def \futurenonspacelet #1{%
+ \def \TXN@cs {#1}%
+ \afterassignment \TXN@fnsl@bis \let \TXN@fnsl@token= }
+\def \TXN@fnsl@bis {%
+ \expandafter \futurelet \TXN@cs \TXN@fnsl@ter}
+\def \TXN@fnsl@ter {%
+ \expandafter
+ \ifx \TXN@cs \@sptoken
+ \expandafter \TXN@fnsl@quater
+ \else
+ \expandafter \TXN@fnsl@token
+ \fi
+}
+\def \TXN@fnsl@quater {\afterassignment \TXN@fnsl@bis \let \next= }
+% \end{macrocode}
+% \subsubsection{Checking for an option}
+% If the option given in the first argument occurs in the option
+% string given in the second argument, set |\TXN@sw|
+% \begin{macrocode}
+\def \TXN@test@option #1#2{%
+ \@tempswafalse
+ \edef \TXN@token {#1}%
+ \expandafter \TXN@test@option@bis #2\TXN@nil
+}
+\def \TXN@test@option@bis #1{%
+ \ifx \TXN@nil #1\relax
+ \else
+ \if #1\TXN@token
+ \@tempswatrue
+ \TXN@exxxpandafter \TXN@test@option@ter
+ \else
+ \TXN@exxxpandafter \TXN@test@option@bis
+ \fi
+ \fi
+}
+\def \TXN@test@option@ter #1\TXN@nil{}
+% \end{macrocode}
+% \subsubsection{Trimming spaces from a string}
+% The result is in the token register |\TXN@trimmed|.\\
+% The code is taken from Michael Downes' Solution~5 to
+% exercise 15 of his wonderful \textit{Around the Bend} collection
+% (\texttt{tex-archive/info/aro-bend}).
+% \begin{macrocode}
+\catcode`\Q=3 %
+\def \TXN@trim #1{%
+ \begingroup
+ \aftergroup \global
+ \aftergroup \TXN@trimmed
+ \aftergroup {%
+ \expandafter \TXN@trim@bis \expandafter \noexpand#1Q Q}%
+}
+\def \TXN@trim@bis #1 Q{\TXN@trim@ter #1Q}
+\def \TXN@trim@ter #1Q#2{%
+ \afterassignment \endgroup
+ \vfuzz = \the\vfuzz
+ #1%
+}
+\catcode`\Q=11 %
+% \end{macrocode}
+% \subsubsection{Checking for a parameter in a macro definition}
+% Check if parameter `n' (`n' = |#1|) occurs in macro |#2|
+%
+% \begin{macrocode}
+{\catcode`\#=11 \global\def \TXN@hash{#}}
+\def \TXN@check@parm #1#2{%
+ \TXN@sw@false
+ \def \TXN@parm@number {#1}%
+ \edef\TXN@work{\expandafter\TXN@strip\meaning#2}%
+ \expandafter \TXN@check@parm@bis \TXN@work \TXN@check@parm}
+\def \TXN@check@parm@bis {%
+ \afterassignment
+ \TXN@check@parm@ter
+ \let\token= }
+\def \TXN@check@parm@ter {%
+ \ifx \token \TXN@check@parm
+ \let \next = \relax
+ \else
+ \let \next = \TXN@check@parm@bis
+ \if \TXN@hash\token
+ \ifTXN@sw
+ \else
+ \let \next = \TXN@check@parm@quater
+ \fi
+ \fi
+ \fi
+ \next
+}
+\def \TXN@check@parm@quater #1{%
+ \if \TXN@parm@number #1\relax
+ \TXN@sw@true
+ \fi
+ \let \token = #1\relax
+ \TXN@check@parm@ter
+}
+\def \TXN@strip #1>{}
+% \end{macrocode}
+%
+% \section{Special typographic features}
+% \subsection{General purpose commands}
+% \subsubsection{Changing the font size}
+% Changing the font size (and the inter-line spacing)
+% \begin{macrocode}
+\newcommand {\RelSize} [2] [\relax] {%
+ \def \TXN@parameter {#1}%
+ \ifx \TXN@parameter \TXN@safe
+ \else
+ \def \baselinestretch{#1}%
+ \fi
+% \end{macrocode}
+% The following code is from relsize.sty ver 2.0b, placed in the
+% public domain by Donald Arseneau.
+% \begin{macrocode}
+ \@tempcnta =
+ \ifx \@currsize \normalsize 4\else % funny order is to have most ...
+ \ifx \@currsize \small 3\else % ...likely sizes checked first
+ \ifx \@currsize \footnotesize 2\else
+ \ifx \@currsize \large 5\else
+ \ifx \@currsize \Large 6\else
+ \ifx \@currsize \LARGE 7\else
+ \ifx \@currsize \scriptsize 1\else
+ \ifx \@currsize \tiny 0\else
+ \ifx \@currsize \huge 8\else
+ \ifx \@currsize \Huge 9\else
+ 4%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \advance \@tempcnta by #2\relax
+ \ifnum \@tempcnta < \z@
+ \@tempcnta = \z@
+ \fi
+ \ifcase \@tempcnta
+ \tiny
+ \or \scriptsize
+ \or \footnotesize
+ \or \small
+ \or \normalsize
+ \or \large
+ \or \Large
+ \or \LARGE
+ \or \huge
+ \or \Huge
+ \else
+ \Huge
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Letter spacing, underlining etc.}
+% \begin{macrocode}
+\sodef \so {} {.15em\relax}{.66em plus .1em\relax}{.66em plus .15em\relax}
+\newcommand {\LetterSpace}[2][\relax]{%
+ \leavevmode
+ \def \TXN@parameter {#1}%
+ \ifx \TXN@parameter \TXN@safe
+ \expandafter \so \expandafter {#2}%
+ \else
+ \begingroup
+ \TXN@counter@a = \z@
+ \TXN@counter@b = \@ne
+ \TXN@LetterSpace@parm #1\TXN@nil
+ \let \TXN@temp = \SOUL@sopreamble
+ \let \SOUL@sopreamble = \relax
+ \so{}%
+ \SOUL@preamble
+ \TXN@skip@a = \SOUL@soletterskip \TXN@safe
+ \multiply \TXN@skip@a by \TXN@counter@a
+ \divide \TXN@skip@a by \TXN@counter@b
+ \TXN@skip@b = \SOUL@soinnerskip \TXN@safe
+ \multiply \TXN@skip@b by \TXN@counter@a
+ \divide \TXN@skip@b by \TXN@counter@b
+ \TXN@skip@c = \SOUL@soouterskip \TXN@safe
+ \multiply \TXN@skip@c by \TXN@counter@a
+ \divide \TXN@skip@c by \TXN@counter@b
+ \let \SOUL@sopreamble = \TXN@temp
+ \sodef \so {}{\TXN@skip@a}{\TXN@skip@b}{\TXN@skip@c}%
+ \expandafter \so \expandafter {#2}%
+ \endgroup
+ \fi
+}
+\def \TXN@LetterSpace@parm #1{%
+ \let \next = \TXN@LetterSpace@parm
+ \ifx \TXN@nil #1\relax
+ \let \next = \relax
+ \else
+ \ifx /#1\relax
+ \else
+ \ifnum \TXN@counter@a = \z@
+ \TXN@counter@a = #1\relax
+ \else
+ \TXN@counter@b = #1\relax
+ \fi
+ \fi
+ \fi
+ \next
+}
+\newcommand {\LETTERspace}[2][\relax]{\MakeUppercase{\LetterSpace[#1]{#2}}}
+\newcommand {\letterspace}[2][\relax]{\MakeLowercase{\LetterSpace[#1]{#2}}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\Underline}[2][\relax]{%
+ \leavevmode
+ \def \TXN@parameter {#1}%
+ \ifx \TXN@parameter \TXN@safe
+ \else
+ \begingroup
+ \setul #1\relax
+ \fi
+ \expandafter \ul \expandafter {#2}%
+ \ifx \TXN@parameter \TXN@safe
+ \else
+ \endgroup
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\Capitals}[1]{%
+ \leavevmode
+ \expandafter \caps \expandafter {#1}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\StrikeOut}[1]{%
+ \leavevmode
+ \expandafter \st \expandafter {#1}%
+}
+\let \Strikeout = \StrikeOut
+% \end{macrocode}
+% \subsubsection{\textit{guillemets}}
+% \begin{macrocode}
+\let \guillemetleft = \guillemotleft
+\let \guillemetright = \guillemotright
+% \end{macrocode}
+% \subsubsection{Old style numerals}
+% The same as |\oldstylenums| except that
+% it leaves unaltered any non-digit tokens within the argument.
+% \begin{macrocode}
+\newcommand {\OldStyleNums}[1]{%
+ \count@ = \z@
+ \toks@ = {}%
+ \TXN@toks@a = {}%
+ \TXN@OldStyleNums@bis #1\TXN@nil
+}
+\def \TXN@OldStyleNums@bis {\futurelet\TXN@token\TXN@OldStyleNums@ter}
+\def \TXN@OldStyleNums@ter {%
+ \ifx \TXN@token \@sptoken
+ \expandafter \TXN@OldStyleNums@space
+ \else
+ \expandafter \TXN@OldStyleNums@quater
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@OldStyleNums@space {%
+ \TXN@OldStyleNums@quater { }%
+ \afterassignment \TXN@OldStyleNums@bis \let \TXN@token = }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@OldStyleNums@quater #1{%
+ \ifx \TXN@nil #1\relax
+ \ifnum \count@ > \z@
+ \edef \TXN@temp {%
+ \the\TXN@toks@a\noexpand\oldstylenums{\the\toks@}}%
+ \TXN@toks@a = \expandafter {\TXN@temp#1}%
+ \fi
+ \the\TXN@toks@a
+ \else
+ \@tempswatrue
+ \ifx 0#1\else
+ \ifx 1#1\else
+ \ifx 2#1\else
+ \ifx 3#1\else
+ \ifx 4#1\else
+ \ifx 5#1\else
+ \ifx 6#1\else
+ \ifx 7#1\else
+ \ifx 8#1\else
+ \ifx 9#1\else
+ \@tempswafalse
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \if@tempswa
+ \toks@ = \expandafter {\the\toks@#1}%
+ \advance \count@ by \@ne
+ \else
+ \ifnum \count@ > \z@
+ \edef \TXN@temp
+ {\the\TXN@toks@a\noexpand\oldstylenums{\the\toks@}}%
+ \TXN@toks@a = \expandafter {\TXN@temp#1}%
+ \else
+ \TXN@toks@a = \expandafter {\the\TXN@toks@a#1}%
+ \fi
+ \count@ = \z@
+ \toks@ = {}%
+ \fi
+ \ifx \@sptoken #1\relax
+ \else
+ \TXN@exxxpandafter \TXN@OldStyleNums@bis
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Roman numerals}
+% \begin{macrocode}
+\newcommand {\RomanNumeral}[1]{{\scshape \romannumeral#1}}
+\newcommand {\ROMANnumeral}[1]{%
+ \expandafter \uppercase \expandafter{\romannumeral#1}}
+% \end{macrocode}
+% \subsubsection{Ordinals}
+% \begin{macrocode}
+\newcommand {\ordinal} [2] [m]{%
+ \xdef \theordinal {\csname TXN@ordinal@%
+ \ifx \@undefined\languagename english\else
+ \languagename\fi\endcsname{#1}{#2}{\relax}%
+ }%
+}
+\newcommand {\Ordinal} [2] [m]{%
+ \xdef \theordinal {\csname TXN@ordinal@%
+ \ifx \@undefined\languagename english\else
+ \languagename\fi\endcsname{#1}{#2}{i}%
+ }%
+}
+\def \TXN@ordinal@english #1#2#3{%
+ \ifcase #2\relax
+ ???%
+ \or \if #3iF\else f\fi irst%
+ \or \if #3iS\else s\fi econd%
+ \or \if #3iT\else t\fi hird%
+ \or \if #3iF\else f\fi ourth%
+ \or \if #3iF\else f\fi ifth%
+ \or \if #3iS\else s\fi ixth%
+ \or \if #3iS\else s\fi eventh%
+ \or \if #3iE\else e\fi ighth%
+ \or \if #3iN\else n\fi inth%
+ \or \if #3iT\else t\fi enth%
+ \or \if #3iE\else e\fi leventh%
+ \or \if #3iT\else t\fi welfth%
+ \or \if #3iT\else t\fi hirteenth%
+ \or \if #3iF\else f\fi ourteenth%
+ \or \if #3iF\else f\fi ifteenth%
+ \or \if #3iS\else s\fi ixteenth%
+ \or \if #3iS\else s\fi eventeenth%
+ \or \if #3iE\else e\fi ighteenth%
+ \or \if #3iN\else n\fi ineteenth%
+ \or \if #3iT\else t\fi wentieth%
+ \or \if #3iT\else t\fi wenty-first%
+ \or \if #3iT\else t\fi wenty-second%
+ \or \if #3iT\else t\fi wenty-third%
+ \or \if #3iT\else t\fi wenty-fourth%
+ \or \if #3iT\else t\fi wenty-fifth%
+ \or ??%
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@ordinal@german #1#2#3{%
+ \ifcase #2\relax
+ ??%
+ \or\if #3iE\else e\fi rste%
+ \or\if #3iZ\else z\fi weite%
+ \or\if #3iD\else d\fi ritte%
+ \or\if #3iV\else v\fi ierte%
+ \or\if #3iF\else f\fi \"unfte%
+ \or\if #3iS\else s\fi echste%
+ \or\if #3iS\else s\fi iebente%
+ \or\if #3iA\else a\fi chte%
+ \or\if #3iN\else n\fi eunte%
+ \or\if #3iZ\else z\fi ehnte%
+ \or\if #3iE\else e\fi lfte%
+ \or\if #3iZ\else z\fi w\"olfte%
+ \or\if #3iD\else d\fi reizhente%
+ \or\if #3iV\else v\fi ierzhente%
+ \or\if #3iF\else f\fi \"unzhente%
+ \or\if #3iS\else s\fi echzhente%
+ \or\if #3iS\else s\fi iebzhente%
+ \or\if #3iA\else a\fi chtzhente%
+ \or\if #3iN\else n\fi eunzhente%
+ \or\if #3iZ\else z\fi wanzigste%
+ \or\if #3iE\else e\fi inundzwanzigste%
+ \or\if #3iZ\else z\fi weiundzwanzigste%
+ \or\if #3iD\else d\fi reiundzwanzigste%
+ \or\if #3iV\else v\fi ierundzwanzigste%
+ \or\if #3iF\else f\fi \"unfundzwanzigste%
+ \else
+ ??%
+ \fi
+ \ifx f#1\else \ifx n#1\relax s\else r\fi\fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@ordinal@latin #1#2#3{%
+ \ifcase #2\relax
+ ??%
+ \or \if #3iP\else p\fi rim%
+ \or \if #3iS\else s\fi ecund%
+ \or \if #3iT\else t\fi erti%
+ \or \if #3iQ\else q\fi uart%
+ \or \if #3iQ\else q\fi uint%
+ \or \if #3iS\else s\fi ext%
+ \or \if #3iS\else s\fi eptim%
+ \or \if #3iO\else o\fi ctav%
+ \or \if #3iN\else n\fi on%
+ \or \if #3iD\else d\fi ecim%
+ \or \if #3iU\else u\fi ndecim%
+ \or \if #3iD\else d\fi uodecim%
+ \or \if #3iT\else t\fi erti%
+ \ifx f#1\relax a\else \ifx n#1\relax um\else us\fi\fi{} decim%
+ \or \if #3iQ\else q\fi uart%
+ \ifx f#1\relax a\else\ifx n#1\relax um\else us\fi\fi{} decim%
+ \or \if #3iQ\else q\fi uint\ifx f#1\relax a%
+ \else \ifx n#1\relax um\else us\fi\fi{} decim%
+ \or \if #3iS\else s\fi ext\ifx f#1\relax a%
+ \else \ifx n#1\relax um\else us\fi\fi{} decim%
+ \or \if #3iS\else s\fi eptim\ifx f#1\relax a%
+ \else \ifx n#1\relax um\else us\fi\fi{} decim%
+ \or\if #3iD\else d\fi uodevicesim%
+ \or\if #3iU\else u\fi ndevicesim%
+ \or\if #3iV\else v\fi icesim%
+ \or \if #3iU\else u\fi n%
+ \ifx f#1\relax a\else \ifx n#1\relax um\else us\fi\fi{} et vigesim%
+ \or \if #3iA\else a\fi lter%
+ \ifx f#1\relax a\else \ifx n#1\relax um\else\fi\fi{} et vigesim%
+ \or \if #3iT\else t\fi erti%
+ \ifx f#1\relax a\else \ifx n#1\relax um\else us\fi\fi{} et vigesim%
+ \or \if #3iQ\else q\fi uart%
+ \ifx f#1\relax a\else \ifx n#1\relax um\else us\fi\fi{} et vigesim%
+ \or \if #3iQ\else q\fi uint%
+ \ifx f#1\relax a\else \ifx n#1\relax um\else us\fi\fi{} et vigesim%
+ \else
+ ??%
+ \fi
+ \ifx f#1\relax a\else \ifx n#1\relax um\else us\fi\fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@ordinal@italian #1#2#3{%
+ \ifcase #2\relax
+ ??%
+ \or \if #3iP\else p\fi rim%
+ \or \if #3iS\else s\fi econd%
+ \or \if #3iT\else t\fi erz%
+ \or \if #3iQ\else q\fi uart%
+ \or \if #3iQ\else q\fi uint%
+ \or \if #3iS\else s\fi est%
+ \or \if #3iS\else s\fi ettim%
+ \or \if #3iO\else o\fi ttav%
+ \or \if #3iN\else n\fi on%
+ \or \if #3iD\else d\fi ecim%
+ \or \if #3iU\else u\fi ndicesim%
+ \or \if #3iD\else d\fi odicesim%
+ \or \if #3iT\else t\fi redicesim%
+ \or \if #3iQ\else q\fi uattordicesim%
+ \or \if #3iQ\else q\fi uindicesim%
+ \or \if #3iS\else s\fi edicesim%
+ \or \if #3iD\else d\fi iciassettesim%
+ \or \if #3iD\else d\fi iciottesim%
+ \or \if #3iD\else d\fi iciannovesim%
+ \or \if #3iV\else v\fi entesim%
+ \or \if #3iV\else v\fi entunesim%
+ \or \if #3iV\else v\fi entiduesim%
+ \or \if #3iV\else v\fi entitreesim%
+ \or \if #3iV\else v\fi entiquattresim%
+ \or \if #3iV\else v\fi enticinquesim%
+ \else
+ ??%
+ \fi
+ \ifx f#1\relax a\else o\fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@ordinal@french #1#2#3{%
+ \ifcase #2
+ \or \ifx f#1\relax
+ \if #3iP\else p\fi remi\`ere%
+ \else
+ \if #3iP\else p\fi remier%
+ \fi
+ \or \if #3iD\else d\fi euxi\`eme%
+ \or \if #3iT\else t\fi roisi\`eme%
+ \or \if #3iQ\else q\fi uatri\`eme%
+ \or \if #3iC\else c\fi inqui\`eme%
+ \or \if #3iS\else s\fi ixi\`eme%
+ \or \if #3iS\else s\fi epti\`eme%
+ \or \if #3iH\else h\fi uiti\`eme%
+ \or \if #3iN\else n\fi euvi\`eme%
+ \or \if #3iD\else d\fi ixi\`eme%
+ \or \if #3iO\else o\fi nzi\`eme%
+ \or \if #3iD\else d\fi ouzi\`eme%
+ \or \if #3iT\else t\fi reizi\`eme%
+ \or \if #3iQ\else q\fi uatorzi\`eme%
+ \or \if #3iQ\else q\fi uinzi\`eme%
+ \or \if #3iS\else s\fi eizi\`eme%
+ \or \if #3iD\else d\fi ix-septi\`eme%
+ \or \if #3iD\else d\fi ix-huiti\`eme%
+ \or \if #3iD\else d\fi ix-neuvi\`eme%
+ \or \if #3iV\else v\fi ingti\`eme%
+ \or \if #3iV\else v\fi ingt et uni\`eme%
+ \or \if #3iV\else v\fi ingt-deuxi\`eme%
+ \or \if #3iV\else v\fi ingt-troisi\`eme%
+ \or \if #3iV\else v\fi ingt-quatri\`eme%
+ \or \if #3iV\else v\fi ingt-cinqui\`eme%
+ \else
+ ????%
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Mapping numbers to letters}
+% The command to define a new alphabet. The first argument is the
+% name of the alphabet; the second a series of pairs of values
+% (lower case/upper case).
+% \begin{macrocode}
+\newcommand {\alphabetum} [2][]{%
+ \def \TXN@temp {#1}%
+ \toks@ = {??}%
+ \count@ = \z@
+ \TXN@make@alphabetum #2\TXN@nil
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def \TXN@make@alphabetum #1{%
+ \ifx \TXN@nil #1\relax
+ \expandafter \TXN@make@alphabetum@bis
+ \else
+ \ifodd \count@
+ \toks@ = \expandafter{\the\toks@ {#1}}%
+ \else
+ \toks@ = \expandafter{\the\toks@ \or {#1}}%
+ \fi
+ \advance \count@ by \@ne
+ \expandafter \TXN@make@alphabetum
+ \fi
+}
+% \end{macrocode}
+% \begin{macrocode}
+\def \TXN@make@alphabetum@bis {%
+ \ifodd \count@
+ \PackageError {TEXNIKA}
+ {The argument of \protect\alphabetum\space has an odd
+ number of entries}%
+ {There must be an even number of entries\MessageBreak
+ in the argument of \protect\alphabetum}%
+ \else
+ \divide \count@ by \tw@
+ \TXN@edef {TXN@alphabetum@\TXN@temp @count}{\the\count@}%
+ \toks@ = \expandafter{\the\toks@ \else??\fi}%
+ \fi
+ \TXN@edef {TXN@alphabetum@\TXN@temp}{\the\toks@}%
+}
+% \end{macrocode}
+% The commands to map a number to a lower/upper case letter.\\
+% The first (optional) argument is the name of the alphabet to use.
+% \begin{macrocode}
+\newcommand {\letter} [2][]{%
+ \TXN@letter {#1}{#2}%
+ \expandafter
+ \@firstoftwo \ifcase \the\count@\csname TXN@alphabetum@#1\endcsname
+}
+\newcommand {\Letter}[2][]{%
+ \TXN@letter {#1}{#2}%
+ \expandafter
+ \@secondoftwo \ifcase \the\count@\csname TXN@alphabetum@#1\endcsname
+}
+% \end{macrocode}
+% Check and adjust the value of the number
+% \begin{macrocode}
+\def \TXN@letter #1#2{%
+ \TXN@counter = \csname TXN@alphabetum@#1@count\endcsname
+ \count@ = #2\relax
+ \ifnum \count@ = \z@
+ \PackageError {TEXNIKA}
+ {The value of a \protect\numerus\space to be mapped to a letter
+ is zero}
+ {The first letter corresponds to 1}%
+ \else
+ \loop
+ \ifnum \count@ > \TXN@counter
+ \advance \count@ by -\TXN@counter
+ \repeat
+ \fi
+}
+% \end{macrocode}
+% The default alphabet
+% \begin{macrocode}
+\alphabetum {aA bB cC dD eE fF gG hH iI jJ kK lL mM
+ nN oO pP qQ rR sS tT uU vV wW xX yY zZ}
+% \end{macrocode}
+% Other alphabets:
+% \begin{macrocode}
+\alphabetum [latin]
+ {aA bB cC dD eE fF gG hH iI kK lL mM
+ nN oO pP qQ rR sS tT uU vV xX yY zZ}
+% \end{macrocode}
+% \begin{macrocode}
+\alphabetum [italian]
+ {aA bB cC dD eE fF gG hH iI lL mM
+ nN oO pP qQ rR sS tT uU vV zZ}
+% \end{macrocode}
+% \begin{macrocode}
+\alphabetum [ibycus]
+ {aA bB gG dD eE zZ hH qQ iI kK lL mM
+ nN cC oO pP rR sS tT uU fF xX yY wW}
+% \end{macrocode}
+% \begin{macrocode}
+\alphabetum [greek]
+ {aA bB gG dD eE zZ hH jJ iI kK lL mM
+ nN xX oO pP rR sS tT uU fF qQ yY wW}
+% \end{macrocode}
+% A special `alphabet'.
+% \begin{macrocode}
+\alphabetum [symbol]
+ {** \dag\dag \ddag\ddag \S\S \P\P {$\|$}{$\|$}}
+% \end{macrocode}
+% A shorthand for referring to the special alphabet
+% \begin{macrocode}
+\def \reference {\letter[symbol]}
+% \end{macrocode}
+% \subsubsection{Number range}
+% The first two arguments are the lower and upper
+% limits of a numeric range; the third argument (which must be a \LaTeX{}
+% counter) is set to the value to be used instead of the second argument
+% in printing the range. For instance:\\
+% |\NumberRange {1961}{1975}{counter}| sets |counter| to 75;\\
+% |\NumberRange {16}{18}{counter}| sets |counter| to 18.
+% \begin{macrocode}
+\newcommand {\NumberRange} [3]{%
+ \ifnum #1 > #2\relax
+ \PackageError {TEXNIKA}
+ {The upper limit of the range is less than the lower limit}
+ {\the#1-\the#2}%
+ \fi
+ \begingroup % to protect the counters
+ \TXN@counter = 10\relax
+ \loop
+ \TXN@counter@a = #1\relax
+ \TXN@counter@b = #2\relax
+ \divide \TXN@counter@a by \TXN@counter
+ \divide \TXN@counter@b by \TXN@counter
+ \ifnum \TXN@counter@a < \TXN@counter@b
+ \multiply \TXN@counter by 10\relax
+ \repeat
+ \count@ = #2
+ \multiply \TXN@counter@b by \TXN@counter
+ \advance \count@ by -\TXN@counter@b
+ \ifnum \TXN@counter = 10\relax
+ \TXN@counter@b = \TXN@counter@a
+ \divide \TXN@counter@b by 10\relax
+ \multiply \TXN@counter@b by 10\relax
+ \advance \TXN@counter@a by -\TXN@counter@b
+ \ifnum \TXN@counter@a = \@ne
+ \advance \count@ by 10\relax
+ \fi
+ \fi
+ \TXN@counter = #1\relax
+ \divide \TXN@counter by 10\relax
+ \multiply \TXN@counter by -10\relax
+ \advance \TXN@counter by #2\relax
+ \global \@nameuse {c@#3} = \count@
+ \endgroup
+}
+% \end{macrocode}
+% \subsubsection{`Driving out' the text in an emergency}
+% \begin{macrocode}
+\newif \ifTXN@drive@out
+\newcommand {\DriveOut} {%
+ \@ifstar {\TXN@DriveOutPar}{\TXN@DriveOut}}
+\def \TXN@DriveOutPar {%
+ \global \TXN@drive@outtrue
+ \begingroup
+ \TXN@DriveOut \def \par {\endgroup\global \TXN@drive@outfalse\par}}
+\def \TXN@DriveOut {%
+ \spaceskip .33em plus .33em minus .11em
+ \xspaceskip .5em
+ \nonfrenchspacing
+}
+\let \DrivenOut = \DriveOut
+% \end{macrocode}
+% \subsubsection{Allowing full hyphenation}
+% \begin{macrocode}
+\newcommand {\FullHyphenation} {%
+ \pretolerance -1
+ \hyphenpenalty 0
+ \exhyphenpenalty 0
+ \adjdemerits 0
+ \doublehyphendemerits 0
+ \finalhyphendemerits 0
+}
+% \end{macrocode}
+% \subsubsection{Generating some random text}
+% \begin{macrocode}
+\newcommand {\lorem}[1][6]{\TXN@lorem #1\TXN@nil}
+\def \TXN@lorem #1{%
+ \ifx \TXN@nil #1\relax
+ \else
+ \count@ = #1\relax
+ \loop
+ \ifnum \count@ > \z@
+ Lorem ipsum dolor sit amet, consectetur adipisicing elit,
+ sed do eiusmod tempor incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis nostrud exercitation
+ ullamco laboris nisi ut aliquip ex ea commodo consequat.
+ Duis aute irure dolor in reprehenderit in voluptate velit
+ esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
+ occaecat cupidatat non proident, sunt in culpa qui officia
+ deserunt mollit anim id est laborum.
+ \advance \count@ by \m@ne
+ \repeat
+ \par
+ \expandafter \TXN@lorem
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Generating rules}
+% \begin{macrocode}
+\newcommand{\TXN@rule}[1][]{%
+ \gdef \TXN@rule@height {0pt}%
+ \gdef \TXN@rule@Height {0pt}%
+ \gdef \TXN@rule@depth {0pt}%
+ \gdef \TXN@rule@level {\maxdimen}%
+ \gdef \TXN@rule@type {0}%
+ \define@key {rule}{height}[0pt]{\gdef\TXN@rule@height{##1}}%
+ \define@key {rule}{Height}[0pt]{\gdef\TXN@rule@Height{##1}}%
+ \define@key {rule}{depth}[0pt]{\gdef\TXN@rule@depth{##1}}%
+ \define@key {rule}{level}[\maxdimen]{\gdef\TXN@rule@level{##1}}%
+ \define@key {rule}{double}[1]{\gdef\TXN@rule@type{##1}}%
+ \define@key {rule}{parallel}[2]{\gdef\TXN@rule@type{##1}}%
+ \define@key {rule}{total}[3]{\gdef\TXN@rule@type{##1}}%
+ \let \KV@errx = \TXN@keyval@error
+ \setkeys {rule}{#1}%
+ \dimen@ = \hsize
+ \TXN@check@if@normal@glue \leftskip
+ \ifTXN@sw
+ \advance \dimen@ by -\leftskip
+ \fi
+ \TXN@check@if@normal@glue \rightskip
+ \ifTXN@sw
+ \advance \dimen@ by -\rightskip
+ \fi
+ \xdef \TXN@rule@width {\the\dimen@}%
+ \ifcase \TXN@rule@type
+ % single
+ \ifdim \TXN@rule@height = \z@
+ \gdef \TXN@rule@height {.4pt}%
+ \fi
+ \setbox \z@ = \hbox {\vrule width \TXN@rule@width
+ height \TXN@rule@height
+ depth \TXN@rule@depth}%
+ \or % double
+ \ifdim \TXN@rule@height = \z@
+ \gdef \TXN@rule@height {.4pt}%
+ \fi
+ \setbox\z@ = \vbox {%
+ \hrule width \TXN@rule@width
+ height \TXN@rule@height
+ depth \TXN@rule@depth
+ \dimen@ = \TXN@rule@height \TXN@safe
+ \vskip 4\dimen@ \TXN@safe
+ \hrule width \TXN@rule@width
+ height \TXN@rule@height
+ depth \TXN@rule@depth
+ }%
+ \or % parallel
+ \ifdim \TXN@rule@height = \z@
+ \gdef \TXN@rule@height {.2pt}%
+ \fi
+ \ifdim \TXN@rule@Height = \z@
+ \gdef \TXN@rule@Height {1.6pt}%
+ \fi
+ \setbox\z@ = \vbox {%
+ \hrule width \TXN@rule@width
+ height \TXN@rule@Height
+ depth \TXN@rule@depth
+ \dimen@ = \TXN@rule@Height \TXN@safe
+ \advance \dimen@ by -\TXN@rule@height \TXN@safe
+ \vskip \dimen@ \TXN@safe
+ \hrule width \TXN@rule@width
+ height \TXN@rule@height
+ depth \TXN@rule@depth
+ }%
+ \or % total
+ \ifdim \TXN@rule@height = \z@
+ \gdef \TXN@rule@height {.2pt}%
+ \fi
+ \ifdim \TXN@rule@Height = \z@
+ \gdef \TXN@rule@Height {1.6pt}%
+ \fi
+ \setbox\z@ = \vbox {%
+ \hrule width \TXN@rule@width
+ height \TXN@rule@height
+ depth \TXN@rule@depth
+ \dimen@ = \TXN@rule@Height \TXN@safe
+ \advance \dimen@ by -\TXN@rule@height \TXN@safe
+ \vskip \dimen@ \TXN@safe
+ \hrule width \TXN@rule@width
+ height \TXN@rule@Height
+ depth \TXN@rule@depth
+ }%
+ \fi
+ \dimen@ = \TXN@rule@level \TXN@safe
+ \ifdim \dimen@ = \maxdimen
+ \setbox \tw@ = \hbox {$\vcenter{}$}%
+ \dimen@ = \ht\tw@
+ \fi
+ \parindent \z@
+ \everypar {}%
+ \endgraf
+ \leavevmode \raise \dimen@ \box\z@
+ \endgraf
+}
+\def \Rule {\TXN@rule}
+% \end{macrocode}
+% \subsection{Incipit}
+% \begin{macrocode}
+\newif \ifTXN@incipit@check
+\def \noincipit {\incipit{}}
+% \end{macrocode}
+% The |\incipit| command
+% \begin{macrocode}
+\newcommand {\incipit} {%
+ \ifx \empty \TXN@attribute@name
+ \expandafter \TXN@incipit
+ \else
+ \def \TXN@subclass@name {incipit}%
+ \def \TXN@subclass@number {}%
+ \def \TXN@temp {TXN}%
+ \expandafter \TXN@attribute@set
+ \fi
+}
+% \end{macrocode}
+% Setting the |\Facies| attribute
+% \begin{macrocode}
+\def \TXN@setFacies@incipit #1{%
+ \ifx \empty #1\empty
+ \def \TXN@FaciesIncipit {}%
+ \else
+ \def \TXN@FaciesIncipit ##1##2##3##4{#1}%
+ \fi
+}
+% \end{macrocode}
+% The explicit command
+% \begin{macrocode}
+\def \TXN@incipit #1{%
+%<debug> \TXN@trace \TXN@incipit
+ \let \next = \relax
+ \def \TXN@temp {#1}%
+ \def \TXN@temp@bis {*}%
+ \global \TXN@incipit@checkfalse
+ \ifx \empty \TXN@FaciesIncipit
+ \ifx \TXN@temp \TXN@temp@bis
+ \else
+ #1\relax
+ \fi
+ \else
+ \ifx \empty \TXN@temp
+ \else
+ \xdef \TXN@everypar@incipit@save {}%
+ \def \TXN@temp@bis {*}%
+ \ifx \TXN@temp \TXN@temp@bis
+ \global \TXN@incipit@checktrue
+ \ifTXN@withinVersus
+ \else
+ \xdef \TXN@everypar@incipit@save {\the\everypar}%
+ \global \everypar {\TXN@check@incipit}%
+ \fi
+ \else
+ \toks@ = {#1}%
+ \let \next = \TXN@split@incipit
+ \fi
+ \fi
+ \fi
+ \next
+}
+% \end{macrocode}
+% Split the incipit into its components
+% \begin{macrocode}
+\def \TXN@split@incipit{%
+%<debug> \TXN@trace \TXN@split@incipit
+ \expandafter \TXN@split@incipit@bis \the\toks@\TXN@nil
+}
+\def \TXN@split@incipit@bis #1#2\TXN@nil{%
+%<debug> \TXN@trace \TXN@split@incipit@bis
+ \ifcat a\noexpand #1\relax
+ \def \TXN@parm@i {#1}%
+ \def \TXN@parm@ii {#2}%
+ \def \TXN@parm@iii {}%
+ \expandafter \TXN@typeset@Incipit
+ \else
+ \ifx \relax #1\relax
+ \else
+% \end{macrocode}
+% Check for |\leavevmode|.
+% \begin{macrocode}
+ \ifx \unhbox #1\relax
+ \TXN@split@incipit@quater #2\TXN@nil
+ \else
+ \def \TXN@parm@iii {#1}%
+ \TXN@split@incipit@ter #2\TXN@nil
+ \fi
+ \fi
+ \fi
+}
+\def \TXN@split@incipit@ter #1#2\TXN@nil{%
+ \def \TXN@parm@i {#1}%
+ \def \TXN@parm@ii {#2}%
+ \TXN@typeset@Incipit
+}
+% \end{macrocode}
+% We just assume this was the |\unhbox| from |\leavevmode|.
+% \begin{macrocode}
+\def \TXN@split@incipit@quater #1#2\TXN@nil{%
+ \TXN@split@incipit@quinquies #2\TXN@nil
+}
+\def \TXN@split@incipit@quinquies #1#2\TXN@nil{%
+ \ifcat a\noexpand #1\relax
+ \def \TXN@parm@i {#1}%
+ \def \TXN@parm@ii {#2}%
+ \def \TXN@parm@iii {}%
+ \expandafter \TXN@typeset@Incipit
+ \else
+ \def \TXN@parm@iii {#1}%
+ \TXN@split@incipit@ter #2\TXN@nil
+ \fi
+}
+% \end{macrocode}
+% Typeset the incipit
+% \begin{macrocode}
+\def \TXN@typeset@Incipit {%
+ \edef \TXN@parm@iv {\TXN@parm@i\TXN@parm@ii}%
+ \leavevmode
+ \begingroup
+ \ifTXN@withinVersus
+ \let \unindent = \relax
+ \else
+ \def \unindent {\hskip -\parindent}%
+ \fi
+ \TXN@FaciesIncipit {\TXN@parm@i} {\TXN@parm@ii}
+ {\TXN@parm@iii} {\TXN@parm@iv}%
+ \endgroup
+}
+% \end{macrocode}
+% Check if there is an explicit command; if not, set the incipit
+% automatically.
+% \begin{macrocode}
+\def \TXN@check@incipit {%
+ \ifTXN@incipit@check
+ \global \TXN@incipit@checkfalse
+ \ifx \empty \TXN@FaciesIncipit
+ \else
+ \TXN@exxxpandafter \TXN@check@incipit@bis
+ \fi
+ \fi
+}
+\def \TXN@check@incipit@bis {%
+%<debug> \TXN@trace \TXN@check@incipit@bis
+ \futurenonspacelet \TXN@temp \TXN@check@incipit@ter}
+\def \TXN@check@incipit@ter {%
+%<debug> \TXN@trace \TXN@check@incipit@ter
+ \ifx \noexpand\incipit \TXN@temp
+ \else
+ \ifx \empty \TXN@everypar@incipit@save
+ \else
+ \everypar = \expandafter{\TXN@everypar@incipit@save}%
+ \fi
+ \toks@ = {}%
+ \expandafter \TXN@incipit@auto
+ \fi
+}
+% \end{macrocode}
+% Automatic incipit
+% \begin{macrocode}
+\def \TXN@incipit@auto {%
+%<debug> \TXN@trace \TXN@incipit@auto
+ \futurelet \TXN@token \TXN@incipit@auto@bis
+}
+\def \TXN@incipit@auto@bis {%
+%<debug> \TXN@trace \TXN@incipit@auto@bis
+ \let \next = \TXN@split@incipit@auto
+ \ifx \TXN@token \PTR@atendofline % the current meaning of ^^M
+ \else
+ \ifx \@sptoken \TXN@token
+ \let \next = \TXN@incipit@auto@ter
+ \else
+ \ifx \\\TXN@token
+ \else
+ \let \next = \TXN@incipit@auto@quater
+ \fi
+ \fi
+ \fi
+ \next
+}
+\def \TXN@incipit@auto@ter {%
+ \afterassignment \TXN@split@incipit@auto \let \TXN@token= }
+\def \TXN@incipit@auto@quater #1{%
+%<debug> \TXN@trace \TXN@incipit@auto@ter
+ \toks@ = \expandafter {\the\toks@#1}%
+ \TXN@incipit@auto
+}
+\def \TXN@split@incipit@auto {%
+%<debug> \TXN@trace \TXN@split@incipit@auto
+ \expandafter \TXN@split@incipit@auto@bis \the\toks@\TXN@nil
+}
+\def \TXN@split@incipit@auto@bis #1#2\TXN@nil{%
+%<debug> \TXN@trace \TXN@split@incipit@auto@bis
+ \@ifmtarg {#2}
+ {\TXN@split@incipit@auto@ter#1}
+ {\TXN@split@incipit@bis #1#2\space\TXN@nil}%
+}
+\def \TXN@split@incipit@auto@ter #1{%
+%<debug> \TXN@trace \TXN@split@incipit@auto@ter
+ \ifcat \noexpand#1a
+ \toks@ = {#1\space}%
+ \expandafter \TXN@incipit@auto
+ \else
+ #1\space%
+ \fi
+}
+% \end{macrocode}
+% The interface with the \texttt{txndrop} package
+% \begin{macrocode}
+\gdef \TXN@DropCap@lines {\z@}
+\let \DropCap = \TXNd@DropCap
+% \end{macrocode}
+% \subsection{Setting the page height and width}
+% Adjust the |\textheight| so that a page can accomodate a whole
+% number of lines
+% \begin{macrocode}
+\newcommand {\TextHeight}{%
+ \@ifstar {\TXN@sw@true \TXN@textheight}{\TXN@sw@false \TXN@textheight}
+}
+\def \TXN@textheight #1{%
+ \ifTXN@sw
+ \setlength {\textheight}{\baselineskip}%
+ \multiply \textheight by #1\relax
+ \advance \textheight by -\baselineskip
+ \else
+ \setlength {\textheight}{#1}%
+ \divide \textheight by \baselineskip
+ \multiply \textheight by \baselineskip
+ \fi
+ \advance \textheight by \topskip
+}
+% \end{macrocode}
+% This is provided mailnly for symmetry with the previous command
+% \begin{macrocode}
+\newcommand {\TextWidth} [1]{%
+ \setlength {\textwidth}{#1}%
+ \linewidth = \textwidth
+ \columnwidth = \textwidth
+}
+% \end{macrocode}
+% \subsection{Setting the house style}
+% \begin{macrocode}
+\newcommand {\HouseStyle} [1] {%
+ \InputIfFileExists {#1.hs}
+ {\def \housestyle {#1}}
+ {\PackageError {TEXNIKA}
+ {House style `#1' not found}
+ {The file `#1.hs' does not exist}
+ }
+}
+% \end{macrocode}
+% \section{Paragraph formatting}
+% \begin{macrocode}
+\newif \ifTXN@nostyle
+\newif \ifTXN@style@set
+% \end{macrocode}
+% \subsection{\TXN@cmd{justified}}
+% \begin{macrocode}
+\newcommand {\justified} {\ifTXN@nostyle \else \TXN@style@justified \fi}
+\def \TXN@style@justified {\TXN@reset@skips \TXN@style@settrue}
+% \end{macrocode}
+% \subsection{\TXN@cmd{rangedleft}}
+% \begin{macrocode}
+\newcommand {\rangedleft} {\ifTXN@nostyle \else \TXN@style@rangedleft \fi}
+\def \TXN@style@rangedleft {%
+ \TXN@reset@skips
+ \advance \rightskip by \z@ plus 1filll\relax
+ \TXN@style@settrue
+}
+% \end{macrocode}
+% \subsection{\TXN@cmd{rangedright}}
+% \begin{macrocode}
+\newcommand {\rangedright} {\ifTXN@nostyle \else \TXN@style@rangedright \fi}
+\def \TXN@style@rangedright {%
+ \TXN@reset@skips
+ \advance \leftskip by \z@ plus 1filll\relax
+ \parfillskip = \z@skip
+ \TXN@style@settrue
+}
+% \end{macrocode}
+% \subsection{\TXN@cmd{centered}}
+% \begin{macrocode}
+\newcommand{\centered}{\ifTXN@nostyle \else \TXN@style@centered \fi}
+\def \TXN@style@centered {%
+ \TXN@reset@skips
+ \advance \leftskip by \z@ plus 1filll\relax
+ \advance \rightskip by \z@ plus 1filll\relax
+ \parfillskip = \z@skip
+ \TXN@style@settrue
+}
+% \end{macrocode}
+% \subsection{\TXN@cmd{centeredfinal}}
+% \begin{macrocode}
+\newif \ifTXN@centrefinal
+\newcommand{\centeredfinal}{%
+ \ifTXN@nostyle \else \TXN@style@centeredfinal \fi}
+\def \TXN@style@centeredfinal {%
+ \global \TXN@centrefinaltrue
+ \TXN@style@settrue
+}
+\let \centred = \centered
+\let \centredfinal = \centeredfinal
+% \end{macrocode}
+% Remove any stretchability and shrinkability from left and rightskips
+% \begin{macrocode}
+\def \TXN@reset@skips {%
+ \dimen@ = \leftskip
+ \leftskip = \dimen@ \TXN@safe
+ \dimen@ = \rightskip
+ \rightskip = \dimen@ \TXN@safe
+}
+\let \leading = \baselineskip
+% \end{macrocode}
+% \section{Creating a subclass}
+%
+% A subclass is associated with a control sequence of the form\\
+% |\csname TXN@|\meta{class name}|[|\meta{subclass number}|]\endcsname|\\
+% The \meta{subclass number} is assigned automatically but may
+% also be defined explicitly in the |\Novus| command (this is
+% an undocumented feature and its use is deprecated).
+%
+% The default subclass of each class has \meta{subclass number} $=0$
+% and $0$ is the default value of the \meta{optional parameter} of the
+% command defining the \meta{class}.
+%
+%
+%
+% The list of |\textus| subclasses.
+% \begin{macrocode}
+\TXN@SimpleList \TXN@textus@subclasses \@ne
+\TXN@set \TXN@textus@subclasses.\z@ {textus}
+% \end{macrocode}
+% The list of |\numerus| subclasses.
+% \begin{macrocode}
+\TXN@SimpleList \TXN@numerus@subclasses \@ne
+\TXN@set \TXN@numerus@subclasses.\z@ {numerus}
+\TXN@def {TXN@numerus[0]name}{numerus}
+\newcounter {numerus}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@c@numerus #1{%
+ \csname c@\csname TXN@numerus[#1]name\endcsname\endcsname}
+% \end{macrocode}
+% The list of |\titulus| subclasses.
+% \begin{macrocode}
+\TXN@SimpleList \TXN@titulus@subclasses \@ne
+\TXN@set \TXN@titulus@subclasses.\z@ {titulus}
+% \end{macrocode}
+% The list of |\spatium| subclasses.
+% \begin{macrocode}
+\TXN@SimpleList \TXN@spatium@subclasses \@ne
+\TXN@set \TXN@spatium@subclasses.\z@ {spatium}
+% \end{macrocode}
+% The list of special subclasses.
+% \begin{macrocode}
+\def \TXN@special@subclasses {%
+ \\{stropha}\\{incipit}\\{excessus}\\{persona}\\{commissura}\\{aparte}%
+ \\{[}\\{(}%
+}
+% \end{macrocode}
+% The list of classes that take line numbers
+% \begin{macrocode}
+\def \TXN@numbered@classes {}%
+% \end{macrocode}
+% Return the subclass number in |\@tempcnta| or |-1| if so such
+% subclass exists. The parameters are:
+% |#1| the class name (|\textus| or |\numerus| or |\titulus|),
+% |#2| the subclass name
+% \begin{macrocode}
+\def \TXN@get@subclass@number #1#2{%
+ \@tempcnta = \z@
+ \gdef \TXN@gtemp {}%
+ \begingroup
+ \def \\##1{%
+ \expandafter
+ \ifx \csname ##1\endcsname #2\relax
+ \xdef \TXN@gtemp {\the\@tempcnta}%
+ \fi
+ \advance \@tempcnta by \@ne
+ }%
+ \@nameuse {TXN@\expandafter\@gobble\string#1@subclasses}%
+ \endgroup
+ \ifx \empty \TXN@gtemp
+ \@tempcnta = \m@ne
+ \else
+ \@tempcnta = \TXN@gtemp \TXN@safe
+ \fi
+}
+% \end{macrocode}
+% Sets |\TXN@gtemp| to the subclass name (without the backslash)
+% or to |\empty| if no such subclass exists. The parameters are:
+% |#1| the class name (|\textus| or |\numerus| or |\titulus|),
+% |#2| the subclass number
+% \begin{macrocode}
+\def \TXN@get@subclass@name #1#2{%
+ \@tempcnta = \z@
+ \gdef \TXN@gtemp {}%
+ \begingroup
+ \def \\##1{%
+ \ifnum \@tempcnta = #2\relax
+ \xdef \TXN@gtemp {##1}%
+ \fi
+ \advance \@tempcnta by \@ne
+ }%
+ \@nameuse {TXN@\expandafter\@gobble\string#1@subclasses}%
+ \endgroup
+}
+% \end{macrocode}
+% Insert the \texttt{cs} (\textit{sans} the escape character) in the
+% list of subclasses.
+% \begin{macrocode}
+\def \TXN@insert@subclass@name #1#2#3{%
+ \TXN@counter = #3\relax
+ \advance \TXN@counter by \@ne
+ \expandafter \TXN@SimpleList@length
+ \csname TXN@\expandafter\@gobble\string#1@subclasses\endcsname
+ \ifnum \@tempcnta < \TXN@counter
+ \loop
+ \expandafter \TXN@SimpleList@append
+ \csname TXN@\expandafter\@gobble\string#1@subclasses\endcsname
+ \TXN@safe
+ \advance \@tempcnta by \@ne
+ \ifnum \@tempcnta < \TXN@counter
+ \repeat
+ \fi
+ \count@ = \escapechar \escapechar = \m@ne
+ \TXN@toks@a = \expandafter {\string#2}%
+ \escapechar = \count@
+ \advance \TXN@counter by \m@ne
+ \expandafter \TXN@set
+ \csname TXN@\expandafter\@gobble\string#1@subclasses\endcsname.%
+ \TXN@counter {\the\TXN@toks@a}%
+}
+% \end{macrocode}
+% \subsection{The \TXN@cmd{Novus} command}
+% \begin{macrocode}
+\newif \ifTXN@Novus@star
+\newcommand {\Novus}{%
+ \@ifstar {\TXN@Novus@startrue \TXN@Novus}
+ {\TXN@Novus@starfalse \TXN@Novus}%
+}
+\def \TXN@Novus {\futurenonspacelet \TXN@temp \TXN@Novus@bis}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@Novus@bis {%
+ \ifx \TXN@temp \textus
+ \let \next = \TXN@Novus@textus
+ \else \ifx \TXN@temp \numerus
+ \let \next = \TXN@Novus@numerus
+ \else \ifx \TXN@temp \titulus
+ \let \next = \TXN@Novus@titulus
+ \else \ifx \TXN@temp \spatium
+ \let \next = \TXN@Novum@spatium
+ \else
+ \PackageError{TEXNIKA}%
+ {Misplaced \protect\Novus\space command}%
+ {\protect\Novus\space must be followed by a class name}%
+ \fi\fi\fi\fi
+ \next
+}
+\def \TXN@Novus@textus {\afterassignment \TXN@new@textus \let\next= }
+\def \TXN@Novus@numerus {\afterassignment \TXN@new@numerus \let\next= }
+\def \TXN@Novus@titulus {\afterassignment \TXN@new@titulus \let\next= }
+\def \TXN@Novum@spatium {\afterassignment \TXN@new@spatium \let\next= }
+% \end{macrocode}
+% The usual synonyms
+% \begin{macrocode}
+\let \Nova = \Novus
+\let \Novum = \Novus
+% \end{macrocode}
+% \subsection{Creating a subclass of the \TXN@cmd{textus} class}
+% \begin{macrocode}
+\def \TXN@new@textus {%
+ \def \TXN@subclass@name {textus}%
+ \ifTXN@Novus@star
+ \expandafter \TXN@textus@reset
+ \else
+ \expandafter \TXN@new@textus@bis
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@textus@reset #1{%
+ \TXN@get@subclass@number \textus #1\relax
+ \ifnum \@tempcnta < \z@
+ \toks@ = {#1}%
+ \expandafter \TXN@new@textus@create
+ \else
+ \edef \TXN@subclass@number {[\the\@tempcnta]}%
+ \TXN@initialize@textus {\the\@tempcnta}%
+ \fi
+}
+\def \TXN@new@textus@create {%
+ \expandafter \TXN@new@textus@bis \the\toks@
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@new@textus@bis {\futurelet \TXN@token \TXN@new@textus@ter}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@new@textus@ter{%
+ \ifx [\TXN@token
+ \expandafter \TXN@new@textus@quinquies
+ \else
+ \count@ = \TXN@textus@max
+ \advance \count@ by \@ne
+ \expandafter \TXN@new@textus@quater
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@new@textus@quater{%
+ \expandafter \TXN@new@textus@quinquies \expandafter [\the\count@]}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@new@textus@quinquies [#1]#2{%
+ \ifTXN@internal
+ \else
+ \ifnum #1 < \z@
+ {\PackageError{TEXNIKA}%
+ {You cannot use a negative number as the \MessageBreak
+ identifier of \protect\textus\space subclass}
+ {}%
+ }%
+ \fi
+ \fi
+ \ifx \textus #2\relax
+ \PackageError{TEXNIKA}%
+ {The control sequence \protect\textus\MessageBreak
+ cannot be used for a new subclass}%
+ {\protect\textus\space is the default subclass}%
+ \fi
+ \TXN@get@subclass@number \textus #2\relax
+ \ifnum \@tempcnta > \z@
+ \PackageError{TEXNIKA}%
+ {The \protect#2 subclass already exists}
+ {}%
+ \fi
+% \end{macrocode}
+% Define the \textbf{cs}.
+% \begin{macrocode}
+ \def #2{\@ifstar{\textus*[#1]}{\textus[#1]}}%
+ \TXN@check@start@of@number {#1}%
+ \ifTXN@internal
+ \else
+ \ifnum #1 > \TXN@textus@max
+ \def \TXN@textus@max{#1}%
+ \fi
+ \PackageInfo{TEXNIKA}%
+ {\protect#2 defined as \protect\textus[#1]}%
+ \def \TXN@subclass@number {[#1]}%
+ \fi
+% \end{macrocode}
+% Initialize the variables for the class.
+% \begin{macrocode}
+ \TXN@initialize@textus{#1}%
+% \end{macrocode}
+% Add the subclass name to the list (not for \TXN@cmd{excessus})
+% \begin{macrocode}
+ \ifnum #1 < \z@
+ \else
+ \TXN@insert@subclass@name \textus #2{#1}%
+ \fi
+}
+% \end{macrocode}
+% Initialize a \TXN@cmd{textus} subclass
+%
+% Flags are stored in 3 \textbf{cs} (|\Modus| and |\Locus| may be redefined
+% indipendently of each other):
+% \halign {\quad\tt#&\kern 1em#\hfill
+% &\quad\tt#&\kern 1em#\hfill
+% &\quad\tt#&\kern 1em#\hfill\cr
+% \noalign{\texttt{flags}\vskip .3ex}
+% |\TXN@o@NoArgument|&|\TXN@o@DelimiterAtStart|&|\TXN@o@DelimiterAtEnd|\cr
+% \noalign{\texttt{flagsModus}\vskip .3ex}
+% |\TXN@o@AlignedLeft|&|\TXN@o@AlignedRight|&|\TXN@o@AlignedCentre|\cr
+% |\TXN@o@AlignedTtop|&|\TXN@o@AlignedMiddle|&|\TXN@o@AlignedBottom|\cr
+% |\TXN@o@RangedLeft|&|\TXN@o@RangedRight|&|\TXN@o@Centred|\cr
+% |\TXN@o@Justified|&|\TXN@o@FieldAutoWidth|&|\TXN@o@Unhyphenated|\cr
+% |\TXN@o@Multiples|\cr
+% \noalign{\texttt{flagsLocus}\vskip .3ex}
+% |\TXN@o@AttachedToArea|&|\TXN@o@AreaMiddle|&|\TXN@o@AreaTop|\cr
+% |\TXN@o@AreaBottom|&|\TXN@o@AreaWrap|&|\TXN@o@AreaExtend|\cr
+% }
+%
+% \begin{macrocode}
+\def \TXN@get@textus@flags #1{%
+ \edef \TXN@textus@flags {%
+ \csname TXN@textus[#1]flags@\TXN@theFolio\endcsname
+ \csname TXN@textus[#1]flagsLocus@\TXN@theFolio\endcsname
+ \csname TXN@textus[#1]flagsModus@\TXN@theFolio\endcsname
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@initialize@textus #1{%
+ \ifnum #1 = \z@
+ \TXN@edef {TXN@textus[#1]side@recto}{\TXN@leftmargin}%
+ \TXN@edef {TXN@textus[#1]side@verso}{\TXN@leftmargin}%
+ \else
+ \TXN@def {TXN@textus[#1]side@recto}{}%
+ \TXN@def {TXN@textus[#1]side@verso}{}%
+ \fi
+ \TXN@def {TXN@textus[#1]offset@recto}{\z@}%
+ \TXN@def {TXN@textus[#1]flags@recto}{}%
+ \TXN@def {TXN@textus[#1]flagsLocus@recto}{}%
+ \TXN@def {TXN@textus[#1]flagsModus@recto}{}%
+ \TXN@def {TXN@textus[#1]field@recto}{}%
+ \TXN@def {TXN@textus[#1]area@recto}{}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \TXN@def {TXN@textus[#1]offset@verso}{\z@}%
+ \TXN@def {TXN@textus[#1]flags@verso}{}%
+ \TXN@def {TXN@textus[#1]flagsLocus@verso}{}%
+ \TXN@def {TXN@textus[#1]flagsModus@verso}{}%
+ \TXN@def {TXN@textus[#1]field@verso}{}%
+ \TXN@def {TXN@textus[#1]area@verso}{}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \TXN@def {TXN@textus[#1]Facies}{}%
+ \TXN@def {TXN@textus[#1]measure}{}%
+ \TXN@def {TXN@textus[#1]shift}{\z@}%
+ \TXN@gdef {TXN@textus[#1]last@shift}{}%
+ \TXN@def {TXN@textus[#1]milestone}{0}%
+ \TXN@gdef {TXN@textus[#1]text}{}%
+ \TXN@def {TXN@textus[#1]star}{}%
+}
+% \end{macrocode}
+% \subsection{Creating a subclass of the \TXN@cmd{numerus} class}
+% \begin{macrocode}
+\def \TXN@new@numerus {%
+ \def \TXN@subclass@name {numerus}%
+ \ifTXN@Novus@star
+ \expandafter \TXN@numerus@reset
+ \else
+ \expandafter \TXN@new@numerus@bis
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@numerus@reset #1{%
+ \TXN@get@subclass@number \numerus #1\relax
+ \ifnum \@tempcnta < \z@
+ \toks@ = {#1}%
+ \expandafter \TXN@new@numerus@create
+ \else
+ \edef \TXN@subclass@number {[\the\@tempcnta]}%
+ \TXN@initialize@numerus {\the\@tempcnta}%
+ \fi
+}
+\def \TXN@new@numerus@create {%
+ \expandafter \TXN@new@numerus@bis \the\toks@
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@new@numerus@bis {%
+ \TXN@incr \TXN@numerus@max
+ \expandafter \TXN@new@numerus@ter \expandafter{\TXN@numerus@max}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@new@numerus@ter #1#2{%
+ \ifx \numerus #2\relax
+ \PackageError{TEXNIKA}%
+ {The control sequence \protect\numerus\MessageBreak
+ cannot be used for a new subclass}%
+ {\protect\numerus\space is the default subclass}%
+ \fi
+ \TXN@get@subclass@number \numerus #2\relax
+ \ifnum \@tempcnta > \z@
+ \PackageError{TEXNIKA}%
+ {The \protect#2 subclass already exists}
+ {}%
+ \fi
+ \PackageInfo{TEXNIKA}%
+ {\protect#2 defined as \protect\numerus[#1]}%
+ \def \TXN@subclass@number {[#1]}%
+% \end{macrocode}
+% Define the \textbf{cs}.
+% \begin{macrocode}
+ \def #2{\@ifstar{\numerus*[#1]}{\numerus[#1]}}%
+% \end{macrocode}
+% Initialize the variables for the class.
+% \begin{macrocode}
+ \TXN@edef {TXN@numerus[#1]name}{\expandafter\@gobble\string#2}%
+ \edef \TXN@temp {\expandafter\noexpand
+ \csname c@\csname TXN@numerus[#1]name\endcsname\endcsname}%
+ \expandafter
+ \ifx \TXN@temp \relax
+ \newcounter {\@nameuse {TXN@numerus[#1]name}}%
+ \fi
+ \TXN@initialize@numerus{#1}%
+% \end{macrocode}
+% Add the subclass name to the list
+% \begin{macrocode}
+ \TXN@insert@subclass@name \numerus #2{#1}%
+}
+% \end{macrocode}
+% Initialize a \TXN@cmd{numerus} subclass
+%
+% Flags:
+% \halign {\quad\tt#&\kern 1em#\hfill
+% &\quad\tt#&\kern 1em#\hfill
+% &\quad\tt#&\kern 1em#\hfill\cr
+% |\TXN@o@AlignedFeft|&|\TXN@o@AlignedRight|&|\TXN@o@AlignedCentre|\cr
+% |\TXN@o@AlignedTail|\cr
+% |\TXN@o@RangedLeft|&|\TXN@o@RangedRight|&|\TXN@o@Centred|\cr
+% |\TXN@o@Pagewise|\cr
+% }
+%
+% \begin{macrocode}
+\def \TXN@initialize@numerus #1{%
+ \TXN@gdef {TXN@numerus[#1]index}{0}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \TXN@gdef {TXN@numerus[#1]first@value}{}%
+ \TXN@gdef {TXN@numerus[#1]second@value}{}%
+ \TXN@gdef {TXN@numerus[#1]separator}{}%
+ \TXN@gdef {TXN@numerus[#1]head}{}%
+ \TXN@gdef {TXN@numerus[#1]tail}{}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \TXN@gdef {TXN@numerus[#1]previous}{}%
+ \TXN@gdef {TXN@numerus[#1]previous@incr}{}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \TXN@def {TXN@numerus[#1]side@recto}{}%
+ \TXN@def {TXN@numerus[#1]offset@recto}{\z@}%
+ \TXN@def {TXN@numerus[#1]flagsModus@recto}{}%
+ \TXN@def {TXN@numerus[#1]field@recto}{}%
+ \TXN@def {TXN@numerus[#1]fragment@recto}{lL}%
+ \TXN@def {TXN@numerus[#1]classes@recto}{}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \TXN@def {TXN@numerus[#1]side@verso}{}%
+ \TXN@def {TXN@numerus[#1]offset@verso}{\z@}%
+ \TXN@def {TXN@numerus[#1]flagsModus@verso}{}%
+ \TXN@def {TXN@numerus[#1]field@verso}{}%
+ \TXN@def {TXN@numerus[#1]fragment@verso}{lL}%
+ \TXN@def {TXN@numerus[#1]classes@verso}{}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \TXN@def {TXN@numerus[#1]progressio}{}%
+ \TXN@def {TXN@numerus[#1]milestone}{0}%
+ \TXN@def {TXN@numerus[#1]SpatiumAnte}{\hskip .5em\relax}%
+ \TXN@def {TXN@numerus[#1]printing}{0}%
+ \TXN@def {TXN@numerus[#1]frozen}{0}%
+ \TXN@def {TXN@numerus[#1]Caput}{}%
+ \TXN@def {TXN@numerus[#1]Facies}{}%
+}
+% \end{macrocode}
+% \subsection{Creating a subclass of the \TXN@cmd{titulus} class}
+% Create a new class of \textit{titulus}.\par
+% \begin{macrocode}
+\def \TXN@new@titulus {%
+ \def \TXN@subclass@name {titulus}%
+ \ifTXN@Novus@star
+ \expandafter \TXN@titulus@reset
+ \else
+ \expandafter \TXN@new@titulus@bis
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@titulus@reset #1{%
+ \TXN@get@subclass@number \titulus #1\relax
+ \ifnum \@tempcnta < \z@
+ \toks@ = {#1}%
+ \expandafter \TXN@new@titulus@create
+ \else
+ \edef \TXN@subclass@number {[\the\@tempcnta]}%
+ \TXN@initialize@titulus {\the\@tempcnta}%
+ \fi
+}
+\def \TXN@new@titulus@create {%
+ \expandafter \TXN@new@titulus@bis \the\toks@
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@new@titulus@bis {%
+ \TXN@incr \TXN@titulus@max
+ \expandafter \TXN@new@titulus@ter \expandafter{\TXN@titulus@max}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@new@titulus@ter #1#2{%
+ \ifx \titulus #2\relax
+ \PackageError{TEXNIKA}%
+ {The control sequence \protect\titulus\MessageBreak
+ cannot be used for a new subclass}%
+ {\protect\titulus\space is the default subclass}%
+ \fi
+ \TXN@get@subclass@number \titulus #2\relax
+ \ifnum \@tempcnta > \z@
+ \PackageError{TEXNIKA}%
+ {The \protect#2 subclass already exists}
+ {}%
+ \fi
+% \end{macrocode}
+% Define the \textbf{cs}.
+% \begin{macrocode}
+ \def #2{\@ifstar{\titulus*[#1]}{\titulus[#1]}}%
+ \PackageInfo {TEXNIKA} {\protect#2 defined as \protect\titulus[#1]}%
+ \def \TXN@subclass@number {[#1]}%
+ \TXN@initialize@titulus {#1}%
+ \TXN@insert@subclass@name \titulus #2{#1}%
+}
+% \end{macrocode}
+% Initialize a \TXN@cmd{titulus} subclass
+%
+% Flags are stored in 2 \textbf{cs} (|\Modus| may be redefined indipendently):
+% \halign {\quad\tt#&\kern 1em#\hfill
+% &\quad\tt#&\kern 1em#\hfill
+% &\quad\tt#&\kern 1em#\hfill\cr
+% \noalign{\texttt{flags}\vskip .3ex}
+% |\TXN@o@NoArgument|\cr
+% \noalign{\texttt{flagsModus}\vskip .3ex}
+% }
+%
+% \begin{macrocode}
+\def \TXN@initialize@titulus #1{%
+ \TXN@def {TXN@titulus[#1]Forma}{}%
+ \TXN@def {TXN@titulus[#1]Caput}{}%
+ \TXN@def {TXN@titulus[#1]flags}{}%
+ \TXN@def {TXN@titulus[#1]flagsModus}{}%
+ \TXN@def {TXN@titulus[#1]SpatiumSupra}{}%
+ \TXN@def {TXN@titulus[#1]SpatiumInfra}{}%
+}
+% \end{macrocode}
+% \subsection{Creating a subclass of the \TXN@cmd{spatium}\ class}
+% Create a new subclass of \textit{spatium}.\par
+% \begin{macrocode}
+\def \TXN@new@spatium {%
+ \def \TXN@subclass@name {spatium}%
+ \ifTXN@Novus@star
+ \expandafter \TXN@new@spatium@reset
+ \else
+ \expandafter \TXN@new@spatium@bis
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@new@spatium@reset #1{%
+ \TXN@get@subclass@number \spatium #1\relax
+ \ifnum \@tempcnta < \z@
+ \toks@ = {#1}%
+ \expandafter \TXN@new@spatium@create
+ \else
+ \edef \TXN@subclass@number {[\the\@tempcnta]}%
+ \TXN@initialize@spatium {\the\@tempcnta}%
+ \fi
+}
+\def \TXN@new@spatium@create {%
+ \expandafter \TXN@new@spatium@bis \the\toks@
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@new@spatium@bis {%
+ \TXN@incr \TXN@spatium@max
+ \expandafter \TXN@new@spatium@ter \expandafter{\TXN@spatium@max}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@new@spatium@ter #1#2{%
+ \ifx \spatium #2\relax
+ \PackageError{TEXNIKA}%
+ {The control sequence \protect\spatium\MessageBreak
+ cannot be used for a new subclass}%
+ {\protect\spatium\space is the default subclass}%
+ \fi
+ \TXN@get@subclass@number \spatium #2\relax
+ \ifnum \@tempcnta > \z@
+ \PackageError{TEXNIKA}%
+ {The \protect#2 subclass already exists}
+ {}%
+ \fi
+% \end{macrocode}
+% Define the \textbf{cs}.
+% \begin{macrocode}
+ \def #2{\@ifstar{\spatium*[#1]}{\spatium[#1]}}%
+ \PackageInfo {TEXNIKA} {\protect#2 defined as \protect\spatium[#1]}%
+ \def \TXN@subclass@number {[#1]}%
+ \TXN@initialize@spatium {#1}%
+ \TXN@insert@subclass@name \spatium #2{#1}%
+}
+% \end{macrocode}
+% Initialize a \TXN@cmd{spatium} subclass
+%
+% \begin{macrocode}
+\def \TXN@initialize@spatium #1{%
+ \TXN@def {TXN@spatium[#1]Facies}{}%
+ \TXN@def {TXN@spatium[#1]hFacies}{}%
+ \TXN@def {TXN@spatium[#1]flags}{}%
+}
+% \end{macrocode}
+%
+% \section {Setting the subclass attributes}
+% \subsection {The switching mechanism}
+% \begin{macrocode}
+\newif \ifTXN@attribute@starred
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@attribute@name {}
+\def \TXN@attribute@line {}
+\def \TXN@subclass@name {}
+\def \TXN@subclass@number {}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\Facies} {\TXN@attribute{Facies}}
+\newcommand {\Locus} {\TXN@attribute{Locus}}
+\newcommand {\Forma} {\TXN@attribute{Forma}}
+\newcommand {\Modus} {\TXN@attribute{Modus}}
+\newcommand {\Caput} {\TXN@attribute{Caput}}
+\newcommand {\Progressio} {\TXN@attribute{Progressio}}
+\newcommand {\SpatiumAnte} {\TXN@attribute{SpatiumAnte}}
+\newcommand {\SpatiumPost} {\TXN@attribute{SpatiumPost}}
+\newcommand {\SpatiumSupra} {\TXN@attribute{SpatiumSupra}}
+\let \SpatiumSuper = \SpatiumSupra
+\newcommand {\SpatiumInfra} {\TXN@attribute{SpatiumInfra}}
+% \end{macrocode}
+% Check for the starred form and supply, if needed, the implicit subclass
+% name and number.
+% \begin{macrocode}
+\def \TXN@attribute #1{%
+%<debug> \TXN@trace \TXN@attribute
+ \ifx \empty \TXN@attribute@name
+ \def \TXN@attribute@name {#1}%
+ \edef \TXN@attribute@line {\the\inputlineno}%
+ \expandafter \TXN@attribute@bis
+ \else
+ \PackageError{TEXNIKA}%
+ {The command \@bachslashchar\TXN@attribute@name\space at line %
+ \number\TXN@attribute@line\space\space was\MessageBreak
+ not followed by a subclass name}
+ {}%
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@attribute@bis {%
+%<debug> \TXN@trace \TXN@attribute@bis
+ \@ifstar {\TXN@attribute@starredtrue\TXN@attribute@ter}
+ {\TXN@attribute@starredfalse\TXN@attribute@ter}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@attribute@ter {%
+ \let \TXN@save@Delimiter = \Delimiter
+ \def \Delimiter {\Delimiter}%
+ \futurenonspacelet \TXN@token \TXN@attribute@quater
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@attribute@quater {%
+%<debug> \TXN@trace \TXN@attribute@quater
+ \ifx \\\TXN@token
+ \expandafter \TXN@attribute@esc@esc
+ \else
+ \ifx \TXN@token \Delimiter
+ \let \Delimiter = \TXN@save@Delimiter
+ \TXN@exxxpandafter \TXN@attribute@Delimiter
+ \else
+ \let \Delimiter = \TXN@save@Delimiter
+ \TXN@exxxpandafter \TXN@attribute@quinquies
+ \fi
+ \fi
+}
+% \end{macrocode}
+% The special case of |\\|
+% \begin{macrocode}
+\def \TXN@attribute@esc@esc #1{%
+%<debug> \TXN@trace \TXN@attribute@esc@esc
+ \def \TXN@subclass@name {esc@esc}%
+ \def \TXN@subclass@number {}%
+ \def \TXN@temp {TXN}%
+ \TXN@attribute@set
+}
+% \end{macrocode}
+% The special case of |\Delimiter|
+% \begin{macrocode}
+\def \TXN@attribute@Delimiter #1{%
+%<debug> \TXN@trace \TXN@attribute@Delimiter
+ \def \TXN@subclass@name {Delimiter}%
+ \def \TXN@subclass@number {}%
+ \def \TXN@temp {TXN}%
+ \TXN@attribute@set
+}
+% \end{macrocode}
+% If no subclass name precedes the opening brace, insert it.
+% \begin{macrocode}
+\def \TXN@attribute@quinquies {%
+%<debug> \TXN@trace \TXN@attribute@quinquies
+ \TXN@swfalse
+ \ifx \TXN@token \bgroup
+ \TXN@sw@true
+ \else
+ \ifx +\TXN@token
+ \TXN@sw@true
+ \else
+ \ifx -\TXN@token
+ \TXN@sw@true
+ \fi
+ \fi
+ \fi
+ \ifTXN@sw
+ \ifx \empty \TXN@subclass@name
+ \PackageError {TEXNIKA}
+ {There is no implicit subclass name}
+ {You must supply a subclass name after
+ \@backslashchar\TXN@attribute@name}%
+ \else
+ \TXN@exxxpandafter \TXN@attribute@sexies
+ \fi
+ \else
+ \TXN@get@subclass@number \textus \TXN@token
+ \ifnum \@tempcnta < \z@
+ \TXN@get@subclass@number \titulus \TXN@token
+ \ifnum \@tempcnta < \z@
+ \TXN@get@subclass@number \numerus \TXN@token
+ \ifnum \@tempcnta < \z@
+ \TXN@get@subclass@number \spatium \TXN@token
+ \ifnum \@tempcnta < \z@
+ \TXN@get@subclass@number \special \TXN@token
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifnum \@tempcnta < \z@
+ \TXN@exxxpandafter \TXN@attribute@quinquies@error
+ \fi
+ \fi
+}
+\def \TXN@attribute@quinquies@error #1{%
+ \PackageError {TEXNIKA}
+ {There is no \protect #1 subclass}
+ {You may have forgotten to define it or mispelled the name}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@attribute@sexies {%
+%<debug> \TXN@trace \TXN@attribute@sexies
+ \edef \TXN@temp {\TXN@subclass@name}%
+ \def \TXN@temp@bis {bracketSD}%
+ \ifx \TXN@temp \TXN@temp@bis
+ \def \TXN@temp {[}%
+ \else
+ \def \TXN@temp@bis {parenthesisSD}%
+ \ifx \TXN@temp \TXN@temp@bis
+ \def \TXN@temp {(}%
+ \fi
+ \fi
+ \csname \TXN@temp \expandafter\endcsname \TXN@subclass@number
+}
+% \end{macrocode}
+% Build the control sequence for the name of the macro that sets
+% the attribute and call it.
+% \begin{macrocode}
+\def \TXN@attribute@set {%
+%<debug> \TXN@trace \TXN@attribute@set
+ \ifx \empty \TXN@subclass@number
+ \expandafter \TXN@attribute@set@ter
+ \else
+ \expandafter \TXN@attribute@set@bis
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@attribute@set@bis}[1][0]{%
+%<debug> \TXN@trace \TXN@attribute@set@bis
+ \def \TXN@subclass@number {[#1]}%
+ \TXN@attribute@set@ter
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@attribute@set@ter {%
+%<debug> \TXN@trace \TXN@attribute@set@ter
+ \expandafter \def
+ \expandafter \TXN@temp
+ \expandafter {\csname \TXN@temp @set\TXN@attribute@name
+ @\TXN@subclass@name\endcsname}%
+ \TXN@sw@false
+ \expandafter
+ \ifx \TXN@temp \@undefined
+ \TXN@sw@true
+ \else
+ \expandafter
+ \ifx \TXN@temp \relax
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifTXN@sw
+ \PackageError {TEXNIKA}
+ {\@backslashchar\TXN@attribute@name\space is not an
+ attribute\MessageBreak of the \@backslashchar
+ \TXN@subclass@name\space class}
+ {}%
+ \fi
+ \def \TXN@attribute@name {}%
+ \expandafter \TXN@temp \TXN@subclass@number
+}
+% \end{macrocode}
+% \subsection {Setting the \TXN@cmd{Facies} attributes}
+% \subsubsection{Setting \TXN@cmd{Facies} for \TXN@cmd{textus}}
+% \begin{macrocode}
+\newcommand{\TXN@setFacies@textus}[2][0]{%
+ \ifnum #1 = \z@
+ \TXN@setFacies@textus@zero {#2}%
+ \else
+ \TXN@setFacies@textus@bis {#1}{#2}%
+ \fi
+}
+% \end{macrocode}
+% |\Facies| for the default subclass is a parameterless macro.
+% \begin{macrocode}
+\def \TXN@setFacies@textus@zero #1{%
+%<debug> \TXN@trace \TXN@setFacies@textus@zero
+ \def \TXN@temp ##1{#1}%
+ \TXN@check@parm 1\TXN@temp
+ \ifTXN@sw
+ \PackageError {TEXNIKA}
+ {\protect\Facies\space\protect\textus\space contains \TXN@hash1}
+ {The attribute cannot contain a reference to a parameter}%
+ \fi
+ \ifTXN@attribute@starred
+ \TXN@let \TXN@temp = {TXN@textus[\TXN@theTextus]Facies}%
+ \toks@ = \expandafter {\TXN@temp #1}%
+ \TXN@edef {TXN@textus[\TXN@theTextus]Facies}{\the\toks@}%
+ \else
+ \TXN@def {TXN@textus[\TXN@theTextus]Facies}{#1}%
+ \fi
+ \ifTXN@withinProsa
+ \@nameuse{TXN@textus[\TXN@theTextus]Facies}\relax
+ \fi
+}
+% \end{macrocode}
+% A subclass other than the default subclass.
+% \begin{macrocode}
+\def \TXN@setFacies@textus@bis #1#2{%
+ \TXN@sw@false
+ \if \TXN@empty {TXN@textus[#1]Facies}%
+ \else
+ \ifTXN@attribute@starred
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifTXN@sw
+ \TXN@let \TXN@temp = {TXN@textus[#1]Facies}%
+ \toks@ = \expandafter {\TXN@temp#2}%
+ \TXN@edef {TXN@textus[#1]Facies}##1{\the\toks@}%
+ \else
+ \TXN@def {TXN@textus[#1]Facies}##1{#2\relax}%
+ \fi
+ \def \TXN@temp ##1{#2}%
+ \TXN@check@parm 1\TXN@temp
+ \ifTXN@sw
+ \else
+ \TXN@def {TXN@textus[#1]Facies}{#2\relax}%
+ \TXN@setFacies@textus@flag {#1}{\TXN@o@NoArgument}%
+ \def \TXN@temp {#2}%
+ \ifx \empty \TXN@temp
+ \TXN@setFacies@textus@flag {#1}{\TXN@o@NoFacies}%
+ \fi
+ \fi
+ \TXN@setFacies@textus@delimiter {#1}{#2}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setFacies@textus@flag #1#2{%
+ \edef \TXN@flags {\@nameuse{TXN@textus[#1]flags@recto}}%
+ \TXN@edef {TXN@textus[#1]flags@recto}{#2\TXN@flags}%
+ \edef \TXN@flags {\@nameuse{TXN@textus[#1]flags@verso}}%
+ \TXN@edef {TXN@textus[#1]flags@verso}{#2\TXN@flags}%
+}
+% \end{macrocode}
+% Scan the argument for delimiters. Set option 's' if there is a
+% delimiter at the start of the argument, option 'e' if there is
+% one at the end.
+% \begin{macrocode}
+\def \TXN@setFacies@textus@delimiter #1#2{%
+ \TXN@counter@a = \z@
+ \TXN@counter@b = \z@
+ \count@ = \z@
+ \let \TXN@save@Delimiter = \Delimiter
+ \def \Delimiter {\Delimiter}%
+ \TXN@setFacies@textus@delimiter@bis #2\TXN@nil
+ \TXN@sw@false
+ \ifnum \TXN@counter@b = \z@
+ \else
+ \ifnum \TXN@counter@b = \count@
+ \TXN@setFacies@textus@flag {#1}{\TXN@o@DelimiterAtEnd}%
+ \else
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifnum \TXN@counter@a = \z@
+ \else
+ \ifnum \TXN@counter@a = \@ne
+ \TXN@setFacies@textus@flag {#1}{\TXN@o@DelimiterAtStart}%
+ \else
+ \ifnum \TXN@counter@a = \count@
+ \TXN@setFacies@textus@flag {#1}{\TXN@o@DelimiterAtEnd}%
+ \else
+ \TXN@sw@true
+ \fi
+ \fi
+ \fi
+ \ifTXN@sw
+ \PackageError {TEXNIKA}
+ {Misplaced \protect\Delimiter\space in \protect\Facies}
+ {\protect\Delimiter\space can only occur at either end}%
+ \fi
+ \let \Delimiter = \TXN@save@Delimiter
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setFacies@textus@delimiter@bis #1{%
+ \let \next = \TXN@setFacies@textus@delimiter@bis
+ \ifx \TXN@nil #1\relax
+ \let \next = \relax
+ \else
+ \advance \count@ by \@ne
+ \ifx \Delimiter #1\relax
+ \ifnum \TXN@counter@a = \z@
+ \TXN@counter@a = \count@
+ \else
+ \ifnum \TXN@counter@b = \z@
+ \TXN@counter@b = \count@
+ \else
+ \TXN@counter@b = \m@ne
+ \fi
+ \fi
+ \let \next = \TXN@setFacies@textus@delimiter@ter
+ \fi
+ \fi
+ \next
+}
+% \end{macrocode}
+% Gobble the star (if any) and the arguments of |\Delimiter|
+% and continue scanning.
+% \begin{macrocode}
+\def \TXN@setFacies@textus@delimiter@ter {%
+ \@ifstar {\TXN@setFacies@textus@delimiter@quater}
+ {\TXN@setFacies@textus@delimiter@quater}%
+}
+\newcommand {\TXN@setFacies@textus@delimiter@quater}[2][\relax]{%
+ \TXN@setFacies@textus@delimiter@bis
+}
+% \end{macrocode}
+% \subsubsection{Setting \TXN@cmd{Facies} for \TXN@cmd{numerus}}
+% \begin{macrocode}
+\newcommand{\TXN@setFacies@numerus}[2][0]{%
+ \TXN@def {TXN@numerus[#1]Facies}##1##2##3##4##5{%
+ \begingroup #2\endgroup}%
+}
+% \end{macrocode}
+% \subsubsection{Setting \TXN@cmd{Facies} for \TXN@cmd{titulus}}
+% \begin{macrocode}
+\newcommand{\TXN@setFacies@titulus}[2][0]{%
+ \TXN@def {TXN@titulus[#1]Facies}##1{#2}%
+ \@ifmtarg {#2}
+ {\TXN@def {TXN@titulus[#1]Facies}{}}
+ {%
+ \TXN@def {TXN@titulus[#1]Facies}##1{#2}%
+ \def \TXN@temp ##1{#2}%
+ \TXN@check@parm 1\TXN@temp
+ \ifTXN@sw
+ \else
+ \edef \TXN@flags {\@nameuse{TXN@titulus[#1]flags}}%
+ \TXN@edef {TXN@titulus[#1]flags}{\TXN@o@NoArgument\TXN@flags}%
+ \fi
+ }%
+}
+% \end{macrocode}
+% \subsubsection{Setting \TXN@cmd{Facies} for \TXN@cmd{spatium}}
+% \begin{macrocode}
+\newcommand{\TXN@setFacies@spatium}[2][0]{%
+%<debug> \TXN@trace \TXN@setFacies@spatium
+ \def \TXN@temp ##1{#2}%
+ \TXN@check@parm 1\TXN@temp
+ \ifTXN@sw
+ \TXN@def {TXN@spatium[#1]Facies}##1{#2}%
+ \else
+ \edef \TXN@flags {\@nameuse{TXN@spatium[#1]flags}}%
+ \def \TXN@temp {#2}%
+ \ifx \empty \TXN@temp
+ \TXN@edef {TXN@spatium[#1]flags}{\TXN@o@NoFacies\TXN@flags}%
+ \else
+ \TXN@build@spatium@list {#2}%
+ \TXN@edef {TXN@spatium[#1]Facies}{\TXN@L@spatium}%
+ \TXN@build@spatium@horizontal {#2}%
+ \TXN@edef {TXN@spatium[#1]hFacies}{\TXN@temp}%
+ \fi
+ \TXN@edef {TXN@spatium[#1]flags}{\TXN@o@NoArgument\TXN@flags}%
+ \fi
+}
+% \end{macrocode}
+% Build the command for horizontal spacing
+% \begin{macrocode}
+\def \TXN@build@spatium@horizontal #1{%
+%<debug> \TXN@trace \TXN@build@spatium@horizontal
+ \def \TXN@temp {}%
+ \TXN@build@spatium@horizontal@check #1\TXN@nil
+}
+\def \TXN@build@spatium@horizontal@check #1#2\TXN@nil {%
+ \@ifmtarg {#2}
+ {\TXN@build@spatium@horizontal@check@subclass {#1}}
+ {\TXN@build@spatium@horizontal@normal {#1#2}}%
+}
+\def \TXN@build@spatium@horizontal@check@subclass #1{%
+ \TXN@get@subclass@number \spatium #1\relax
+ \ifnum \@tempcnta = \m@ne
+ \TXN@build@spatium@horizontal@normal {#1}%
+ \else
+ \edef \TXN@flags {\@nameuse{TXN@spatium[\the\@tempcnta]flags}}%
+ \if \TXN@option \TXN@o@NoArgument \TXN@flags
+ \expandafter \def \expandafter \TXN@temp \expandafter
+ {\csname TXN@spatium[\the\@tempcnta]hFacies\endcsname}%
+ \else
+ \PackageError {TEXNIKA}
+ {The \protect\spatium\space subclass \protect#1
+ cannot be used\MessageBreak
+ as the argument for an attribute}
+ {The \protect\Facies\space attribute for the \protect#1 subclass
+ \MessageBreak contains a reference to a parameter}%
+ \fi
+ \fi
+}
+\def \TXN@build@spatium@horizontal@normal #1{%
+ \TXN@build@spatium@list {#1}%
+ \TXN@get \TXN@L@spatium.\TXN@s@glue \TXN@glue
+ \TXN@get \TXN@L@spatium.\TXN@s@penalty \TXN@penalty
+ \ifx \TXN@glue \TXN@safe
+ \else
+ \edef \TXN@temp {\hskip \TXN@glue\relax}%
+ \fi
+ \ifx \TXN@penalty \TXN@safe
+ \else
+ \edef \TXN@temp {\penalty \TXN@penalty\relax\TXN@temp}%
+ \fi
+}
+% \end{macrocode}
+% \subsection{Setting the \TXN@cmd{Locus} attribute}
+% \subsubsection{Setting \TXN@cmd{Locus} for \TXN@cmd{textus}}
+% \begin{macrocode}
+\newcommand{\TXN@setLocus@textus}[2][0]{%
+ \TXN@counter = #1\relax
+ \def \TXN@entity@code {t}%
+ \TXN@setLocus{#2}%
+}
+% \end{macrocode}
+% \subsubsection{Setting \TXN@cmd{Locus} for \TXN@cmd{numerus}}
+% \begin{macrocode}
+\newcommand{\TXN@setLocus@numerus}[2][0]{%
+ \TXN@counter = #1\relax
+ \def \TXN@entity@code {n}%
+ \TXN@setLocus{#2}%
+}
+% \end{macrocode}
+%
+% \subsubsection{The common code for \TXN@cmd{Locus}}
+%
+% |\TXN@counter| holds the subclass number.
+%
+% The codes for the text position (right = even)
+% \begin{macrocode}
+\def \TXN@auto {-3}
+\def \TXN@left {-2}
+\def \TXN@centre {-1}
+\def \TXN@rightmargin {0}
+\def \TXN@leftmargin {1}
+\def \TXN@textrightmargin {2}
+\def \TXN@textleftmargin {3}
+\def \TXN@textrightedge {4}
+\def \TXN@textleftedge {5}
+\newif \ifTXN@textus@shift
+\newif \ifTXN@textus@shift@minus
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setLocus #1{%
+ \global \TXN@textus@shiftfalse
+ \global \TXN@textus@shift@minusfalse
+ \if n\TXN@entity@code
+ \def \TXN@entity {TXN@numerus}%
+ \else \if t\TXN@entity@code
+ \def \TXN@entity {TXN@textus}%
+ \fi\fi
+% \end{macrocode}
+% Check for empty attribute (not allowed for the default |\textus|
+% subclass and |\persona|).
+% \begin{macrocode}
+ \def \TXN@parameter {#1}%
+ \TXN@sw@false
+ \ifx \empty \TXN@parameter
+ \if t\TXN@entity@code
+ \ifnum \TXN@counter = \z@
+ \TXN@sw@true
+ \fi
+ \else
+ \if p\TXN@entity@code
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifTXN@sw
+ \PackageError {TEXNIKA}
+ {The attribute cannot be null}
+ {}%
+ \else
+ \TXN@edef {\TXN@entity[\TXN@c]side@recto}{}%
+ \TXN@edef {\TXN@entity[\TXN@c]side@verso}{}%
+ \TXN@edef {\TXN@entity[\TXN@c]offset@recto}{\z@}%
+ \TXN@edef {\TXN@entity[\TXN@c]offset@verso}{\z@}%
+ \TXN@edef {\TXN@entity[\TXN@c]flagsLocus@recto}{}%
+ \TXN@edef {\TXN@entity[\TXN@c]flagsLocus@verso}{}%
+ \fi
+ \else
+ \TXN@toks@a = {}% flags
+ \let \TXN@save@esc@esc = \\%
+ \def \\{\relax}%
+ \TXN@setLocus@bis#1\\\\%
+ \let \\ = \TXN@save@esc@esc
+ \fi
+}
+% \end{macrocode}
+% Split the argument into the \textit{recto} and \textit{verso} parts,
+% both trimmed of leading and trailing spaces.
+% \begin{macrocode}
+\def \TXN@setLocus@bis #1\\#2\\{%
+ \def \TXN@folio {recto}%
+ \TXN@trim {\noexpand#1}%
+ \expandafter \TXN@setLocus@ter \the\TXN@trimmed \TXN@nil
+ \def \TXN@folio {verso}%
+ \@ifmtarg {#2} {\TXN@sw@false} {\TXN@sw@true}%
+ \ifTXN@sw
+ \ifTXN@textus@shift
+ \PackageError {TEXNIKA}
+ {You cannot specify different shift values \MessageBreak
+ for `recto' and `verso'}
+ {}%
+ \fi
+ \global \TXN@lineatingtrue
+ \TXN@run@LaTeX@again@reason \TXN@run@LaTeX@again@rectoverso
+ \TXN@trim {\noexpand#2}%
+ \else
+ \TXN@trim {\noexpand#1}%
+ \fi
+ \expandafter \TXN@setLocus@ter \the\TXN@trimmed \TXN@nil
+}
+% \end{macrocode}
+% Process one of the parts (\textit{recto} or \textit{verso}).
+% \begin{macrocode}
+\def \TXN@setLocus@ter #1#2\TXN@nil{%
+% \end{macrocode}
+% We start a group, to keep all \textbf{cs} definitions locals and
+% to protect the \textit{calc} innards.
+% \begin{macrocode}
+ \begingroup
+ \let \leftmargin = \relax
+ \let \rightmargin = \relax
+ \if n\TXN@entity@code
+ \def \rightmargin {\rightmargin}%
+ \def \leftmargin {\leftmargin}%
+ \def \textrightmargin {\textrightmargin}%
+ \def \textleftmargin {\textleftmargin}%
+ \def \textrightedge {\textrightedge}%
+ \def \textleftedge {\textleftedge}%
+ \else \if t\TXN@entity@code
+ \def \rightmargin {\rightmargin}%
+ \def \leftmargin {\leftmargin}%
+ \ifnum \TXN@counter = \z@
+ \else
+ \def \textrightmargin {\textrightmargin}%
+ \def \textleftmargin {\textleftmargin}%
+ \def \textrightedge {\textrightedge}%
+ \def \textleftedge {\textleftedge}%
+ \fi
+ \def \area {\area}%
+ \def \auto {\auto}%
+ \def \Auto {\Auto}%
+ \def \noauto {\noauto}%
+ \def \previous {\previous}%
+ \else \if p\TXN@entity@code
+ \def \center {\center}%
+ \def \centre {\centre}%
+ \def \left {\left}%
+ \fi\fi\fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \TXN@sw@false
+ \ifx +#1\relax
+ \else
+ \ifx -#1\relax
+ \else
+ \ifx \@undefined #1\relax
+ \PackageError {TEXNIKA}
+ {The parameter \string#1 is not valid \MessageBreak
+ for this instance of \protect\Locus}
+ {}%
+ \fi
+ \fi
+ \fi
+ \TXN@sw@false
+ \if t\TXN@entity@code
+ \ifnum \TXN@counter > \z@
+ \TXN@sw@true
+ \fi
+ \fi
+ \toks@ = {#1\TXN@nil#2\TXN@nil}%
+ \ifTXN@sw
+ \expandafter \TXN@setLocus@check@area
+ \else
+ \expandafter \TXN@setLocus@quater
+ \fi
+}
+% \end{macrocode}
+% For a |\textus| subclass (other than the default subclass) we
+% must check for the optional |\area| command.
+%
+% \begin{macrocode}
+\def \TXN@setLocus@check@area {%
+ \expandafter \TXN@setLocus@check@area@bis \the\toks@
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setLocus@check@area@bis #1\TXN@nil#2\TXN@nil{%
+ \ifx \area #1\relax
+ \toks@ = {#2\TXN@nil}%
+ \edef \TXN@area@options {\TXN@o@AttachedToArea}%
+ \expandafter
+ \TXN@SimpleList \csname TXN@textus[\TXN@c]text\endcsname
+ \TXN@max@area@ind
+ \expandafter \TXN@setLocus@check@area@ter
+ \else
+% \end{macrocode}
+% Re-join the main path.
+% \begin{macrocode}
+ \expandafter \TXN@setLocus@quater
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setLocus@check@area@ter {%
+ \expandafter \TXN@setLocus@check@area@quater \the\toks@
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setLocus@check@area@quater #1#2\TXN@nil{%
+ \ifx [#1\relax
+ \expandafter \TXN@setLocus@check@area@quinqies
+ \else
+ \edef \TXN@area@options {\TXN@area@options\TXN@o@AreaMiddle}%
+ \toks@ = {#1#2}%
+ \expandafter \TXN@setLocus@check@area@septies
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setLocus@check@area@quinqies {%
+ \expandafter \TXN@setLocus@check@area@sexies \the\toks@
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@set@area@flag #1{%
+ \edef \TXN@area@options {\TXN@area@options#1}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setLocus@check@area@sexies [#1]#2\TXN@nil{%
+ \define@key {area}{top} [\TXN@o@AreaTop]{\TXN@set@area@flag##1}%
+ \define@key {area}{bottom}[\TXN@o@AreaBottom]{\TXN@set@area@flag##1}%
+ \define@key {area}{middle}[\TXN@o@AreaMiddle]{\TXN@set@area@flag##1}%
+ \define@key {area}{wrap} [\TXN@o@AreaWrap]{\TXN@set@area@flag##1}%
+ \define@key {area}{extend}[\TXN@o@AreaExtend]{\TXN@set@area@flag##1}%
+ \let \KV@errx = \TXN@keyval@error
+ \setkeys {area}{#1}%
+ \toks@ = {#2}%
+ \TXN@sw@true
+ \if \TXN@option \TXN@o@AreaTop \TXN@area@options
+ \TXN@sw@false
+ \fi
+ \if \TXN@option \TXN@o@AreaBottom \TXN@area@options
+ \TXN@sw@false
+ \fi
+ \if \TXN@option \TXN@o@AreaMiddle \TXN@area@options
+ \TXN@sw@false
+ \fi
+ \ifTXN@sw
+ \edef \TXN@area@options {\TXN@area@options\TXN@o@AreaMiddle}%
+ \fi
+ \TXN@setLocus@check@area@septies
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setLocus@check@area@septies {%
+% \end{macrocode}
+% The area options apply to both recto and verso
+% \begin{macrocode}
+ \edef \TXN@temp {\@nameuse{TXN@textus[\TXN@c]flagsLocus@recto}}%
+ \TXN@xdef {TXN@textus[\TXN@c]flagsLocus@recto}%
+ {\TXN@temp\TXN@area@options}%
+ \edef \TXN@temp {\@nameuse{TXN@textus[\TXN@c]flagsLocus@verso}}%
+ \TXN@xdef {TXN@textus[\TXN@c]flagsLocus@verso}%
+ {\TXN@temp\TXN@area@options}%
+ \expandafter \TXN@setLocus@check@area@octies \the\toks@\TXN@nil
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setLocus@check@area@octies #1#2\TXN@nil{%
+ \toks@ = {#1\TXN@nil#2\TXN@nil}%
+ \TXN@setLocus@quater
+}
+% \end{macrocode}
+% Process the attribute.
+% \begin{macrocode}
+\def \TXN@setLocus@quater {%
+ \expandafter \TXN@setLocus@quinquies \the\toks@
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setLocus@quinquies #1#2\TXN@nil#3\TXN@nil{%
+ \TXN@skip@a = \z@
+ \def \TXN@calc@exp{0pt#2#3}%
+ \ifx \rightmargin #1\relax
+ \xdef \TXN@sideLocus {\TXN@rightmargin}%
+ \else \ifx \leftmargin #1\relax
+ \xdef \TXN@sideLocus {\TXN@leftmargin}%
+ \else \ifx \textrightmargin #1\relax
+ \xdef \TXN@sideLocus {\TXN@textrightmargin}%
+ \else \ifx \textleftmargin #1\relax
+ \xdef \TXN@sideLocus {\TXN@textleftmargin}%
+ \else \ifx \textrightedge #1\relax
+ \xdef \TXN@sideLocus {\TXN@textrightedge}%
+ \else \ifx \textleftedge #1\relax
+ \xdef \TXN@sideLocus {\TXN@textleftedge}%
+ \else \ifx \centre #1\relax
+ \xdef \TXN@sideLocus {\TXN@centre}%
+ \else \ifx \left #1\relax
+ \xdef \TXN@sideLocus {\TXN@left}%
+ \fi\fi\fi\fi\fi\fi\fi\fi
+% \end{macrocode}
+% Check for special cases.
+% \begin{macrocode}
+ \let \next = \TXN@setLocus@calc@offset
+ \ifx +#1\relax
+ \TXN@toks@a = {#1}%
+ \TXN@toks@b = {#2#3}%
+ \let \next = \TXN@setLocus@relative
+ \else \ifx -#1\relax
+ \TXN@toks@a = {#1}%
+ \TXN@toks@b = {#2#3}%
+ \let \next = \TXN@setLocus@relative
+ \else \ifx \TXN@sideLocus \TXN@left
+ \endgroup
+ \global \dimen@i = \z@
+ \let \next = \TXN@setLocus@finish
+ \else \if t\TXN@entity@code
+ \ifx \auto #1\relax
+ \endgroup
+ \def \TXN@temp {a}%
+ \TXN@toks@a = {#3}%
+ \let \next = \TXN@setLocus@auto
+ \else \ifx \Auto #1\relax
+ \endgroup
+ \def \TXN@temp {m}%
+ \TXN@toks@a = {#3}%
+ \let \next = \TXN@setLocus@auto
+ \else \ifx \noauto #1\relax
+ \endgroup
+ \let \next = \TXN@setLocus@noauto
+ \else \ifx \previous #1\relax
+ \endgroup
+ \let \next = \TXN@setLocus@previous
+ \fi\fi\fi\fi
+ \fi\fi\fi\fi
+ \next
+}
+% \end{macrocode}
+% Compute the offset.
+% \begin{macrocode}
+\def \TXN@setLocus@calc@offset{%
+% \end{macrocode}
+% We are still within the group, so we can change |\TXN@entity|.
+% \begin{macrocode}
+ \if n\TXN@entity@code
+ \def \TXN@entity {numerus}%
+ \else
+ \def \TXN@entity {textus}%
+ \fi
+ \TXN@calc@offset
+ \global \advance \dimen@i by \TXN@skip@a
+ \endgroup
+ \TXN@setLocus@finish
+}
+% \end{macrocode}
+% The actual call to \textbf{calc}.
+% \begin{macrocode}
+\def \TXN@calc@offset {%
+% \end{macrocode}
+% Set the appropriate hooks in the \textbf{calc} package and
+% compute the expression.
+% \begin{macrocode}
+ \expandafter
+ \let \csname calc@textsize\expandafter\endcsname
+ \csname TXN@\TXN@entity @calc@textsize\endcsname
+ \let \offset = \widthof
+ \let \WidthOf = \widthof
+ \calc@assign@dimen{\global\dimen@i}{\TXN@calc@exp}%
+}
+% \end{macrocode}
+% Set the |\Locus| variables
+% \begin{macrocode}
+\def \TXN@setLocus@finish{%
+ \if p\TXN@entity@code
+ \edef \DRM@persona@side {\TXN@sideLocus}%
+ \edef \DRM@persona@offset {\the\dimen@i}%
+ \else
+ \ifTXN@textus@shift
+ \TXN@edef {\TXN@entity[\TXN@c]shift}{\the\dimen@i}%
+ \ifTXN@textus@shift@minus
+ \else
+ \TXN@xdef {\TXN@entity[\TXN@c]last@shift}{\the\dimen@i}%
+ \fi
+ \else
+ \TXN@edef {\TXN@entity[\TXN@c]side@\TXN@folio}{\TXN@sideLocus}%
+ \TXN@edef {\TXN@entity[\TXN@c]offset@\TXN@folio}{\the\dimen@i}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% Processing a relative shift.
+% |\TXN@toks@a| holds the sign
+% |\TXN@toks@b| holds the rest
+% \begin{macrocode}
+\def \TXN@setLocus@relative {%
+ \if p\TXN@entity@code
+ \PackageError {TEXNIKA}
+ {You cannot specify a shift for this \protect\Locus}
+ {}%
+ \fi
+ \xdef \TXN@sideLocus {\@nameuse{\TXN@entity[\TXN@c]side@\TXN@folio}}%
+ \ifx \empty \TXN@sideLocus
+ \PackageError {TEXNIKA}
+ {The \protect\Locus\space has not been previously defined}
+ {}%
+ \fi
+ \ifnum \TXN@sideLocus < \z@
+ \PackageError {TEXNIKA}
+ {You cannot specify a shift for this \protect\Locus}
+ {}%
+ \fi
+ \if t\TXN@entity@code
+ \ifnum \TXN@counter = \z@
+ \global \TXN@textus@shifttrue
+ \fi
+ \fi
+ \edef \TXN@temp {\the\TXN@toks@b}%
+ \ifx \empty \TXN@temp
+ \ifTXN@textus@shift
+ \TXN@setLocus@textus@shift
+ \else
+ \PackageError {TEXNIKA}
+ {You cannot specify `+' or `-' for this \protect\Locus}
+ {}%
+ \fi
+ \else
+ \ifTXN@textus@shift
+ \TXN@skip@a = \z@skip
+ \else
+ \TXN@assign \TXN@skip@a = {\TXN@entity[\TXN@c]offset@\TXN@folio}%
+ \fi
+ \fi
+ \edef \TXN@calc@exp {0pt\the\TXN@toks@a\the\TXN@toks@b}%
+ \TXN@setLocus@calc@offset
+}
+% \end{macrocode}
+% If there is just a sign, we either use the previous shift (+) or
+% clear the shift (-).
+% \begin{macrocode}
+\def \TXN@setLocus@textus@shift {%
+ \edef \TXN@temp {\@nameuse{\TXN@entity[\TXN@c]last@shift}}%
+ \ifx \empty \TXN@temp
+ \PackageError {TEXNIKA}
+ {There is no previous shift for this \protect\Locus}
+ {}%
+ \fi
+ \edef \TXN@temp@bis {\the\TXN@toks@a}%
+ \if +\TXN@temp@bis
+ \expandafter \TXN@toks@b \expandafter{\TXN@temp}%
+ \else
+ \global \TXN@textus@shift@minustrue
+ \TXN@toks@b = {0pt}%
+ \fi
+ \TXN@skip@a = \z@skip
+}
+% \end{macrocode}
+% The argument is |\auto|
+% \begin{macrocode}
+\def \TXN@check@poetry {%
+ \ifTXN@outside@preamble
+ \else
+ \@ifpackageloaded{poetry}{\TXN@poetrytrue}{}%
+ \fi
+ \ifTXN@poetry
+ \else
+ \PackageError {TEXNIKA}
+ {\protect\Locus\protect\auto\space requires the `poetry' package}
+ {}%
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setLocus@auto {%
+ \TXN@check@poetry
+ \edef \PTR@auto@mode {\TXN@temp}%
+ \edef \TXN@temp {\the\TXN@toks@a}%
+% \end{macrocode}
+% Check the optional argument
+% \begin{macrocode}
+ \ifx \empty \TXN@temp
+ \TXN@setLocus@auto@bis \relax \TXN@nil
+ \else
+ \expandafter \TXN@setLocus@auto@bis \the\TXN@toks@a \TXN@nil
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setLocus@auto@bis #1#2\TXN@nil{%
+ \if *\noexpand#1\relax
+ \def \TXN@auto@delta {\z@}%
+ \else
+ \if [\noexpand#1\relax
+ \TXN@setLocus@auto@ter #2\relax
+ \else
+ \def \TXN@auto@delta {3mm}%
+ \fi
+ \fi
+ \PTR@auto@setup
+}
+\def \TXN@setLocus@auto@ter #1]{\def \TXN@auto@delta {#1}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setLocus@noauto {\TXN@check@poetry\PTR@auto@notrue}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setLocus@previous {%
+ \ifTXN@withinVersus
+ \else
+ \PackageError {TEXNIKA}
+ {\protect\Locus\protect\previous\space can be used only \MessageBreak
+ within the Versus domain}%
+ {}%
+ \fi
+ \TXN@edef {TXN@textus[\TXN@theTextus]shift}{\PTR@previous@shift}%
+}
+% \end{macrocode}
+%
+% The code replacing |\calc@textsize| for |\Locus\Numerus|.
+%
+% \begin{macrocode}
+\def \TXN@numerus@calc@textsize #1#2{%
+ \def \offset {\offset}%
+ \def \WidthOf {\WidthOf}%
+ \ifx \offset #1\relax
+ \begingroup
+ \let \numerus = \TXN@get@offset@numerus
+ \let \textus = \TXN@get@offset@textus
+ \expandafter{#2}%
+ \global \calc@A = \dimen@iii
+ \endgroup
+ \else
+ \ifx \WidthOf #1\relax
+ \setbox \z@ =
+ \hbox{\csname TXN@textus[\TXN@theTextus]Facies\endcsname#2}%
+ \else
+ \TXN@process@numerus@argument{#2}%
+ \edef\TXN@temp{%
+ \TXN@numerus@error
+ \TXN@numerus@sign
+ \TXN@numerus@set
+ }%
+ \ifx \empty \TXN@temp
+ \else
+ \PackageError {TEXNIKA}
+ {Bad prototype \protect\numerus}
+ {}%
+ \fi
+ \setbox \z@ = \hbox{%
+ \@nameuse {TXN@numerus[\TXN@c]Facies}%
+ \TXN@numerus@value
+ \empty
+ \TXN@numerus@separator
+ \TXN@numerus@second@value
+ \TXN@numerus@head
+ }%
+ \fi
+ \begingroup
+ \let\widthof = \wd
+ \let\WidthOf = \wd
+ \let\heightof = \ht
+ \let\depthof = \dp
+ \global\calc@A #10\relax
+ \endgroup
+ \fi
+ \calc@post@scan
+}
+% \end{macrocode}
+%
+% The code replacing |\calc@textsize| for |\Locus\Textus| \\
+% (and for |\Locus\personae|)
+%
+% \begin{macrocode}
+\def \TXN@textus@calc@textsize #1#2{%
+ \def \offset {\offset}%
+ \def \WidthOf {\WidthOf}%
+ \ifx \offset #1\relax
+ \begingroup
+ \let \numerus = \TXN@get@offset@numerus
+ \let \textus = \TXN@get@offset@textus
+ \expandafter{#2}%
+ \global \calc@A = \dimen@iii
+ \endgroup
+ \else
+ \ifx \WidthOf #1\relax
+ \setbox \z@ =
+ \hbox {\csname TXN@textus[\TXN@theTextus]Facies\endcsname#2}%
+ \else
+ \setbox \z@ = \hbox {\csname TXN@textus[\TXN@c]Facies\endcsname {#2}}%
+ \fi
+ \begingroup
+ \let\widthof = \wd
+ \let\WidthOf = \wd
+ \let\heightof = \ht
+ \let\depthof = \dp
+ \global\calc@A #10\relax
+ \endgroup
+ \fi
+ \calc@post@scan
+}
+\let \TXN@persona@calc@textsize = \TXN@textus@calc@textsize
+% \end{macrocode}
+%
+% The meaning of |\numerus| within \textbf{calc}.
+%
+% \begin{macrocode}
+\newcommand{\TXN@get@offset@numerus}[1][0]{%
+ \TXN@let \TXN@test = {TXN@numerus[#1]side@\TXN@folio}%
+ \ifx \empty \TXN@test
+ \PackageError {TEXNIKA}
+ {\protect\Locus\protect\numerus[#1] not defined yet}
+ {}%
+ \fi
+ \global \TXN@assign \dimen@iii = {TXN@numerus[#1]offset@\TXN@folio}%
+ \ifnum \TXN@test = \TXN@leftmargin \TXN@safe
+ \global \advance \dimen@iii by -\TXN@skip@a
+ \fi
+}
+% \end{macrocode}
+%
+% The meaning of |\textus| within \textbf{calc}.
+%
+% \begin{macrocode}
+\newcommand{\TXN@get@offset@textus}[1][0]{%
+ \TXN@let \TXN@test = {TXN@textus[#1]side@\TXN@folio}%
+ \ifx \TXN@test \relax
+ \PackageError {TEXNIKA}
+ {\protect\Locus\protect\textus[#1] not defined yet}
+ {}%
+ \fi
+ \global \TXN@assign \dimen@iii = {TXN@textus[#1]offset@\TXN@folio}%
+ \ifnum \TXN@test = \TXN@leftmargin \relax
+ \global \advance \dimen@iii by -\TXN@skip@a
+ \fi
+}
+% \end{macrocode}
+% Set |\dimen@| equal to the displacement from the |\textleftmargin|
+% |#1|\ textus/numerus[n]
+% |#2|\ the object type ('t' = textus, anything else = numerus)
+% \begin{macrocode}
+\def \TXN@get@Locus #1#2{%
+ \if \TXN@empty {TXN@#1side@\TXN@theFolio}%
+ \dimen@ = \maxdimen
+ \else
+ \TXN@sw@false
+ \ifx t#2\relax
+ \edef \TXN@temp {\@nameuse{TXN@#1flagsLocus@\TXN@theFolio}}%
+ \if \TXN@option \TXN@o@AttachedToArea \TXN@temp
+ \TXN@sw@true
+ \fi
+ \fi
+ \TXN@assign \@tempcnta = {TXN@#1side@\TXN@theFolio}%
+ \TXN@assign \dimen@ = {TXN@#1offset@\TXN@theFolio}%
+ \TXN@assign \dimen@@ = {TXN@textus[\TXN@theTextus]offset@\TXN@theFolio}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \ifcase \@tempcnta
+ \advance \dimen@ by \linewidth % right margin
+ \or % left margin
+ \relax
+ \or % text right margin
+ \advance \dimen@ by \TXN@measure
+ \advance \dimen@ by \dimen@@
+ \or % text left margin
+ \advance \dimen@ by \dimen@@
+ \TXN@assign \dimen@@ = {TXN@textus[\TXN@theTextus]shift}%
+ \advance \dimen@ by \dimen@@
+ \or % text right edge
+ \ifTXN@sw
+ \advance \dimen@ by \dimen@@
+ \TXN@assign \dimen@@ = {TXN@area[\TXN@area@ind]rightedge}%
+ \advance \dimen@ by \dimen@@
+ \else
+ \TXN@assign \dimen@@ = {TXN@textus[\TXN@theTextus]shift}%
+ \advance \dimen@ by \dimen@@
+ \ifx \empty \TXN@line@length
+ \ifTXN@withinVersus
+ \gdef \TXN@line@length {\the\wd\PTR@box@full@line}%
+ \else
+ \gdef \TXN@line@length {\the\TXN@measure}%
+ \fi
+ \fi
+ \advance \dimen@ by \TXN@line@length \TXN@safe
+ \fi
+ \or % text left edge
+ \ifTXN@sw
+ \TXN@assign \dimen@ = {TXN@area[\TXN@area@ind]leftedge}%
+ \else
+ \advance \dimen@ by \dimen@@
+ \TXN@assign \dimen@@ = {TXN@textus[\TXN@theTextus]shift}%
+ \advance \dimen@ by \dimen@@
+ \advance \dimen@ by \TXN@leading@space \TXN@safe
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \subsection{Setting the \TXN@cmd{Forma} attribute}
+% \subsubsection{Setting \TXN@cmd{Forma} for \TXN@cmd{textus}
+% \textit{(currently unused)}}
+% \begin{macrocode}
+\newcommand{\TXN@setForma@textus}[2][0]{%
+ \TXN@counter = #1\relax
+ \let \TXN@save@esc@esc = \\%
+ \def \\{\relax}%
+ \TXN@setForma@textus@bis#2\\\\%
+ \let \\ = \TXN@save@esc@esc
+}
+\def \TXN@setForma@textus@bis #1\\#2\\{%
+ \def \TXN@folio {recto}%
+ \TXN@trim{\noexpand#1}%
+ \expandafter
+ \TXN@setForma@textus@ter \expandafter {\the\TXN@trimmed}%
+ \def \TXN@folio {verso}%
+ \@ifmtarg {#2} {} {\TXN@trim{\noexpand#2}}%
+ \expandafter
+ \TXN@setForma@textus@ter \expandafter {\the\TXN@trimmed}%
+}
+\def \TXN@setForma@textus@ter #1{%
+ \TXN@sw@false
+ \if \TXN@empty {TXN@textus[\TXN@c]Forma@\TXN@folio}%
+ \else
+ \ifTXN@attribute@starred
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifTXN@sw
+ \TXN@let \TXN@temp = {TXN@textus[\TXN@c]Forma@\TXN@folio}%
+ \toks@ = \expandafter {\TXN@temp #1}%
+ \TXN@edef {TXN@textus[\TXN@c]Forma@\TXN@folio}{\the\toks@}%
+ \else
+ \TXN@def {TXN@textus[\TXN@c]Forma@\TXN@folio}{%
+ \global \noexpand \TXN@centrefinalfalse #1\relax}%
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Setting \TXN@cmd{Forma} for \TXN@cmd{titulus}}
+% \begin{macrocode}
+\newcommand{\TXN@setForma@titulus}[2][0]{%
+ \TXN@sw@false
+ \if \TXN@empty {TXN@titulus[#1]Forma}%
+ \else
+ \ifTXN@attribute@starred
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifTXN@sw
+ \TXN@let \TXN@temp = {TXN@titulus[#1]Forma}%
+ \toks@ = \expandafter {\TXN@temp #2}%
+ \TXN@edef {TXN@titulus[#1]Forma}{\the\toks@}%
+ \else
+ \TXN@def {TXN@titulus[#1]Forma}{#2\relax}%
+ \fi
+}
+% \end{macrocode}
+% \subsection{Setting the \TXN@cmd{Modus} attribute}
+%
+% \subsubsection{Setting \TXN@cmd{Modus} for \TXN@cmd{textus}}
+% \begin{macrocode}
+\newcommand{\TXN@setModus@textus}[2][0]{%
+ \TXN@counter = #1\relax
+ \def \TXN@entity@code {t}%
+ \TXN@setModus{#2}%
+}
+% \end{macrocode}
+% \subsubsection{Setting \TXN@cmd{Modus} for \TXN@cmd{numerus}}
+% \begin{macrocode}
+\newcommand{\TXN@setModus@numerus}[2][0]{%
+ \TXN@counter = #1\relax
+ \def \TXN@entity@code {n}%
+ \TXN@setModus{#2}%
+}
+% \end{macrocode}
+% \subsubsection{Setting \TXN@cmd{Modus} for \TXN@cmd{titulus}}
+% \begin{macrocode}
+\newcommand{\TXN@setModus@titulus}[2][0]{%
+ \TXN@counter = #1\relax
+ \def \TXN@entity@code {T}%
+ \TXN@setModus{#2}%
+}
+% \end{macrocode}
+% \subsubsection{Setting \TXN@cmd{Modus} for \TXN@cmd{Delimiter}}
+% \begin{macrocode}
+\def \TXN@ModusDelimiter {}%
+\def \TXN@setModus@Delimiter #1{%
+ \def \TXN@ModusDelimiter {#1}%
+}
+% \end{macrocode}
+% \subsubsection{Processing the \TXN@cmd{Modus} options}
+%
+% \begin{macrocode}
+\def \TXN@setModus #1{%
+ \let \TXN@save@esc@esc = \\%
+ \def \\{\relax}%
+ \TXN@setModus@bis#1\\\\%
+ \let \\ = \TXN@save@esc@esc
+}
+% \end{macrocode}
+% Split the argument into the \textit{recto} and \textit{verso} parts,
+% both trimmed of leading and trailing spaces.
+% \begin{macrocode}
+\def \TXN@setModus@bis #1\\#2\\{%
+ \def \TXN@folio {recto}%
+ \TXN@trim{\noexpand#1}%
+ \expandafter \TXN@setModus@ter \the\TXN@trimmed\TXN@nil
+ \def \TXN@folio {verso}%
+ \@ifmtarg {#2} {} {\TXN@trim{\noexpand#2}}%
+ \expandafter \TXN@setModus@ter \the\TXN@trimmed\TXN@nil
+}
+% \end{macrocode}
+% Process one of the parts (\textit{recto} or \textit{verso}).
+% \begin{macrocode}
+\def \TXN@setModus@ter #1\TXN@nil{%
+% \end{macrocode}
+% Note that |\TXN@entity@code| may also have the value `p' (for \texttt{persona})
+% \begin{macrocode}
+ \if n\TXN@entity@code
+ \def \TXN@entity {TXN@numerus}%
+ \else \if t\TXN@entity@code
+ \def \TXN@entity {TXN@textus}%
+ \else \if T\TXN@entity@code
+ \def \TXN@entity {TXN@titulus}%
+ \fi\fi\fi
+% \end{macrocode}
+% We start a group, to keep all \textbf{cs} definitions locals
+% \begin{macrocode}
+ \begingroup
+ \if T\TXN@entity@code
+ \else
+ \def \aligned {\TXN@setModus@aligned}%
+ \def \centred {\edef \TXN@temp {%
+ \TXN@o@RangedLeft\TXN@o@RangedRight}%
+ \toks@ = \expandafter{\TXN@temp}\TXN@setModus@ranged}%
+ \def \rangedleft {\toks@ = \expandafter {\TXN@o@RangedLeft}%
+ \TXN@setModus@ranged}%
+ \def \rangedright {\toks@ = \expandafter {\TXN@o@RangedRight}%
+ \TXN@setModus@ranged}%
+ \def \justified {\toks@ = \expandafter {\TXN@o@Justified}%
+ \TXN@setModus@justified}%
+ \def \milestone {\TXN@setModus@milestone}%
+ \let \centered = \centred
+ \fi
+ \if n\TXN@entity@code
+ \let \pagewise = \TXN@setModus@pagewise
+ \fi
+ \if t\TXN@entity@code
+ \let \hyphenless = \TXN@setModus@nohyphens
+ \let \unhyphenated = \TXN@setModus@nohyphens
+ \let \multiple = \TXN@setModus@multiples
+ \let \multiples = \TXN@setModus@multiples
+ \let \measure = \TXN@setModus@measure
+ \ifTXN@withinIndexes
+ \let \leaders = \TXN@setModus@leaders
+ \fi
+ \fi
+ \if T\TXN@entity@code
+ \let \hyphenless = \TXN@setModus@nohyphens
+ \let \unhyphenated = \TXN@setModus@nohyphens
+ \fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \TXN@toks@a = {}%
+ \TXN@toks@c = {}%
+ \gdef \TXN@Modus@measure@set {}%
+ \gdef \TXN@Modus@leaders@set {}%
+ \gdef \TXN@Modus@classes@set {}%
+ #1\relax
+ \global \toks@i = \TXN@toks@a
+ \global \toks@iii = \TXN@toks@c
+ \endgroup
+ \TXN@toks@a = \toks@i
+ \TXN@toks@c = \toks@iii
+ \if p\TXN@entity@code
+ \edef \DRM@persona@flags {\the\TXN@toks@a}%
+ \edef \DRM@persona@field {\the\TXN@toks@c}%
+ \else
+ \ifTXN@attribute@starred
+ \edef \TXN@temp {\@nameuse{\TXN@entity[\TXN@c]flagsModus@\TXN@folio}}%
+ \else
+ \edef \TXN@temp {}%
+ \fi
+ \if T\TXN@entity@code
+ \TXN@edef {\TXN@entity[\TXN@c]flagsModus}{\TXN@temp\the\TXN@toks@a}%
+ \else
+ \TXN@edef {\TXN@entity[\TXN@c]flagsModus@\TXN@folio}%
+ {\TXN@temp\the\TXN@toks@a}%
+ \TXN@edef {\TXN@entity[\TXN@c]field@\TXN@folio}{\the\TXN@toks@c}%
+ \fi
+ \fi
+ \ifx \empty \TXN@Modus@measure@set
+ \else
+ \ifx \TXN@folio \TXN@recto
+ \TXN@edef {\TXN@entity[\TXN@c]measure}{\TXN@Modus@measure@set}%
+ \TXN@measure = \TXN@Modus@measure@set \TXN@safe
+ \fi
+ \fi
+ \ifx \empty \TXN@Modus@leaders@set
+ \else
+ \TXN@edef {\TXN@entity[\TXN@c]leaders@\TXN@folio}%
+ {\TXN@Modus@leaders@set}%
+ \fi
+ \ifx \empty \TXN@Modus@classes@set
+ \else
+ \TXN@edef {\TXN@entity[\TXN@c]classes@\TXN@folio}{\TXN@Modus@classes@set}%
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setModus@flag #1{%
+ \edef \TXN@temp {\the\TXN@toks@a#1}%
+ \TXN@toks@a = \expandafter{\TXN@temp}%
+}
+% \end{macrocode}
+% \paragraph{\TXN@cmd{aligned}}
+% \begin{macrocode}
+\def \TXN@setModus@aligned #1{%
+ \define@key {aligned}{left} [\TXN@o@AlignedLeft]{\TXN@setModus@flag##1}%
+ \define@key {aligned}{right} [\TXN@o@AlignedRight]{\TXN@setModus@flag##1}%
+ \define@key {aligned}{centre}[\TXN@o@AlignedCentre]{\TXN@setModus@flag{##1}}%
+ \if t\TXN@entity@code
+ \define@key {aligned}{top} [\TXN@o@AlignedTop]{\TXN@setModus@flag##1}%
+ \define@key {aligned}{bottom}[\TXN@o@AlignedBottom]{\TXN@setModus@flag##1}%
+ \define@key {aligned}{middle}[\TXN@o@AlignedMiddle]{\TXN@setModus@flag##1}%
+ \define@key {aligned}{axis} [\TXN@o@AlignedAxis]{\TXN@setModus@flag##1}%
+ \fi
+ \if n\TXN@entity@code
+ \define@key {aligned}{tail}[\TXN@o@AlignedTail]{\TXN@setModus@flag##1}%
+ \fi
+ \setkeys {aligned}{#1}%
+}
+% \end{macrocode}
+% \paragraph{\TXN@cmd{justified}}
+% \begin{macrocode}
+\def \TXN@setModus@justified {%
+ \if t\TXN@entity@code
+ \ifnum \TXN@counter = \TXN@e \TXN@safe
+ \TXN@exxxpandafter \TXN@setModus@justified@excessus
+ \else
+ \TXN@exxxpandafter \TXN@setModus@justified@bis
+ \fi
+ \else
+ \expandafter \TXN@setModus@justified@bis
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setModus@justified@bis #1{%
+ \TXN@toks@c = {#1}%
+ \TXN@setModus@auto@field@width #1\TXN@nil
+ \edef \TXN@temp {\the\TXN@toks@a\the\toks@}%
+ \TXN@toks@a = \expandafter {\TXN@temp}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@setModus@justified@excessus}[1][200]{%
+ \TXN@toks@c = {#1}%
+ \edef \TXN@temp {\the\TXN@toks@a\the\toks@}%
+ \TXN@toks@a = \expandafter {\TXN@temp}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setModus@auto@field@width #1#2\TXN@nil{%
+ \@tempswafalse
+ \ifx +#1\relax
+ \@tempswatrue
+ \else
+ \ifx -#1\relax
+ \@tempswatrue
+ \fi
+ \fi
+ \if@tempswa
+ \edef \TXN@temp {\the\TXN@toks@a\TXN@o@FieldAutoWidth}%
+ \TXN@toks@a = \expandafter {\TXN@temp}%
+ \fi
+}
+% \end{macrocode}
+% \paragraph{\TXN@cmd{measure}}
+% \begin{macrocode}
+\def \TXN@setModus@measure #1{%
+ \begingroup
+ \TXN@sw@false
+ \TXN@setModus@measure@bis #1\TXN@nil
+ \setlength {\TXN@dim@a} {\ifTXN@sw \TXN@measure\fi #1}%
+ \xdef \TXN@Modus@measure@set {\the\TXN@dim@a}%
+ \endgroup
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setModus@measure@bis #1#2\TXN@nil{%
+ \ifx +#1\relax
+ \TXN@sw@true
+ \else
+ \ifx -#1\relax
+ \TXN@sw@true
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \paragraph{\TXN@cmd{milestone}}
+% \begin{macrocode}
+\def \TXN@setModus@milestone {%
+ \TXN@gdef {\TXN@entity[\TXN@c]milestone}{1}%
+ \global \TXN@milestonestrue
+}
+% \end{macrocode}
+% \paragraph{\TXN@cmd{multiples}}
+% \begin{macrocode}
+\def \TXN@setModus@multiples {%
+ \edef \TXN@temp {\the\TXN@toks@a \TXN@o@Multiples}%
+ \TXN@toks@a = \expandafter {\TXN@temp}%
+}
+% \end{macrocode}
+% \paragraph{\TXN@cmd{leaders}}
+% \begin{macrocode}
+\newcommand {\TXN@setModus@leaders} [1][.05\linewidth]{%
+ \gdef \TXN@Modus@leaders@set {#1}%
+ \edef \TXN@temp {\the\TXN@toks@a \TXN@o@Leaders}%
+ \TXN@toks@a = \expandafter {\TXN@temp}%
+}
+% \end{macrocode}
+% \paragraph{\TXN@cmd{nohyphens}}
+% \begin{macrocode}
+\def \TXN@setModus@nohyphens {%
+ \edef \TXN@temp {\the\TXN@toks@a\TXN@o@Unhyphenated}%
+ \TXN@toks@a = \expandafter {\TXN@temp}%
+}
+% \end{macrocode}
+% \paragraph{\TXN@cmd{pagewise}}
+% \begin{macrocode}
+\def \TXN@setModus@pagewise {%
+ \edef \TXN@temp {\the\TXN@toks@a \TXN@o@Pagewise}%
+ \global \TXN@lineatingtrue
+ \TXN@run@LaTeX@again@reason \TXN@run@LaTeX@again@pagewise
+ \TXN@toks@a = \expandafter {\TXN@temp}%
+}
+% \end{macrocode}
+% \paragraph{\TXN@cmd{ranged}}
+% \begin{macrocode}
+\def \TXN@setModus@ranged #1{%
+ \TXN@toks@c = {#1}%
+ \TXN@setModus@auto@field@width #1\TXN@nil
+ \edef \TXN@temp {\the\TXN@toks@a\the\toks@}%
+ \TXN@toks@a = \expandafter {\TXN@temp}%
+}
+% \end{macrocode}
+% \paragraph{\TXN@cmd{classes} \textit{(currently unused)}}
+% \begin{macrocode}
+\def \TXN@setModus@classes #1{%
+ \def \TXN@parameter {#1}%
+ \begingroup
+ \ifx \empty \TXN@parameter
+ \toks@ = {Z}%
+ \else
+ \def \TXN@temp {all}%
+ \ifx \TXN@temp \TXN@parameter
+ \toks@ = {tTp([}%
+ \else
+ \toks@ = {}%
+ \def \textus {\textus}%
+ \def \titulus {\titulus}%
+ \def \persona {\persona}%
+ \def \({\(}%
+ \def \[{\[}%
+ \TXN@setModus@classes@bis #1\TXN@nil
+ \fi
+ \fi
+ \xdef \TXN@Modus@classes@set {\the\toks@}%
+ \endgroup
+ \edef \TXN@numbered@classes {\TXN@numbered@classes\the\toks@}%
+}
+\def \TXN@setModus@classes@bis #1{%
+ \ifx \TXN@nil #1\relax
+ \else
+ \ifx \textus #1\relax
+ \toks@ = \expandafter {\the\toks@ t}%
+ \else \ifx \titulus #1\relax
+ \toks@ = \expandafter {\the\toks@ T}%
+ \else \ifx \persona #1\relax
+ \toks@ = \expandafter {\the\toks@ p}%
+ \else \ifx \(#1\relax
+ \toks@ = \expandafter {\the\toks@ (}%
+ \else \ifx \[#1\relax
+ \toks@ = \expandafter {\the\toks@ [}%
+ \else
+ \PackageError {TEXNIKA}
+ {Invalid class name: \protect#1}
+ {}%
+ \fi\fi\fi\fi\fi
+ \expandafter \TXN@setModus@classes@bis
+ \fi
+}
+% \end{macrocode}
+% \subsection{Setting \TXN@cmd{Spatium} attributes}
+% \subsubsection{Setting \TXN@cmd{Spatium} attributes for \TXN@cmd{numerus}}
+% \begin{macrocode}
+\newcommand{\TXN@setSpatiumAnte@numerus}[2][\z@]{%
+ \TXN@build@spatium@horizontal {#2}%
+ \toks@ = \expandafter {\TXN@temp}%
+ \TXN@edef {TXN@numerus[#1]SpatiumAnte}{\the\toks@}%
+}
+% \end{macrocode}
+% \subsubsection{Setting \TXN@cmd{Spatium} attributes for \TXN@cmd{titulus}}
+% \begin{macrocode}
+\newcommand{\TXN@setSpatiumSupra@titulus}[2][\z@]{%
+ \ifTXN@withinVersus
+ \TXN@normalCR
+ \fi
+ \TXN@build@spatium@list {#2}%
+ \ifTXN@withinVersus
+ \TXN@activeCR
+ \fi
+ \TXN@edef {TXN@titulus[#1]SpatiumSupra}{\TXN@L@spatium}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\TXN@setSpatiumInfra@titulus}[2][\z@]{%
+ \TXN@build@spatium@list {#2}%
+ \TXN@edef {TXN@titulus[#1]SpatiumInfra}{\TXN@L@spatium}%
+}
+% \end{macrocode}
+% \subsubsection{Setting \TXN@cmd{Spatium} attributes for%
+% \TXN@cmd{\protect\bslash}}
+%
+% \begin{macrocode}
+\def \TXN@setSpatiumInfra@esc@esc #1{%
+ \def \TXN@SpatiumInfraEscEsc {#1}%
+}
+\newif \ifTXN@SpatiumEscEsc@noauto
+\def \TXN@setSpatiumPost@esc@esc #1{%
+ \def \TXN@parameter {#1}%
+ \ifx \empty \TXN@parameter
+ \TXN@SpatiumEscEsc@noautotrue
+ \else
+ \TXN@build@spatium@horizontal {#1}%
+ \toks@ = \expandafter {\TXN@temp}%
+ \edef \TXN@SpatiumPostEscEsc {\the\toks@}%
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Setting \TXN@cmd{Spatium} attributes for \TXN@cmd{Delimiter}}
+%
+% \begin{macrocode}
+\def \TXN@SpatiumAnteDelimiter {\hskip \z@skip}%
+\def \TXN@setSpatiumAnte@Delimiter #1{%
+ \TXN@build@spatium@horizontal {#1}%
+ \toks@ = \expandafter {\TXN@temp}%
+ \edef \TXN@SpatiumAnteDelimiter {\the\toks@}%
+}
+\def \TXN@SpatiumPostDelimiter {\hskip \z@skip}%
+\def \TXN@setSpatiumPost@Delimiter #1{%
+ \TXN@build@spatium@horizontal {#1}%
+ \toks@ = \expandafter {\TXN@temp}%
+ \edef \TXN@SpatiumPostDelimiter {\the\toks@}%
+}
+% \end{macrocode}
+% \subsection{Setting the \TXN@cmd{Caput} attribute}
+% \subsubsection{Setting \TXN@cmd{Caput} for \TXN@cmd{numerus}}
+% \begin{macrocode}
+\newcommand{\TXN@setCaput@numerus}[2][0]{%
+%<debug> \TXN@trace \TXN@setCaput@numerus
+ \def \TXN@parameter {#2}%
+ \ifx \empty \TXN@parameter
+ \TXN@edef {TXN@numerus[#1]Caput}{}%
+ \else
+ \TXN@counter = #1\relax
+ \def \TXN@entity {numerus}%
+ \TXN@setCaput #2\TXN@nil
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Setting \TXN@cmd{Caput} for \TXN@cmd{textus}}
+% \begin{macrocode}
+\newcommand{\TXN@setCaput@textus}[2][0]{%
+%<debug> \TXN@trace \TXN@setCaput@textus
+ \def \TXN@parameter {#2}%
+ \ifx \empty \TXN@parameter
+ \TXN@edef {TXN@textus[#1]Caput}{}%
+ \else
+ \TXN@counter = #1\relax
+ \def \TXN@entity {textus}%
+ \TXN@setCaput #2\TXN@nil
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Setting \TXN@cmd{Caput} for \TXN@cmd{titulus}}
+% \begin{macrocode}
+\newcommand{\TXN@setCaput@titulus}[2][0]{%
+%<debug> \TXN@trace \TXN@setCaput@titulus
+ \def \TXN@parameter {#2}%
+ \ifx \empty \TXN@parameter
+ \TXN@edef {TXN@titulus[#1]Caput}{}%
+ \else
+ \TXN@counter = #1\relax
+ \def \TXN@entity {titulus}%
+ \TXN@setCaput #2\TXN@nil
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{The common code for \TXN@cmd{Caput}}
+% \begin{macrocode}
+\newif \ifTXN@caput@index@only
+\long \def \TXN@setCaput #1#2\TXN@nil{%
+%<debug> \TXN@trace \TXN@setCaput
+ \toks@ = {}%
+ \TXN@caput@index@onlyfalse
+ \def \indexes {\indexes}%
+ \ifx \indexes #1\relax
+ \toks@ = {\indexes}%
+ \TXN@caput@index@onlytrue
+ \else
+ \if \TXN@x {c@\expandafter\@gobble\string#1}\relax
+ \PackageError {TEXNIKA}
+ {\protect#1\space is not a valid section name}
+ {}%
+ \fi
+ \fi
+ \expandafter
+ \TXN@setCaput@contents@headline@index \expandafter {\the\toks@#2}%
+ \ifTXN@caput@index@only
+ \TXN@edef {TXN@\TXN@entity[\TXN@c]Caput}{indexonly}%
+ \TXN@sw@false
+ \edef \TXN@temp {\the\toks@i}%
+ \ifx \empty \TXN@temp \else \TXN@sw@true \fi
+ \edef \TXN@temp {\the\toks@iii}%
+ \ifx \empty \TXN@temp \else \TXN@sw@true \fi
+ \ifTXN@sw
+ \PackageError {TEXNIKA}
+ {Extraneous information in \protect\Caput\space argument}
+ {If the first token is \protect\indexes\space you cannot
+ specify \protect\headline\space or \protect\contents}%
+ \fi
+ \global \toks@i = {}%
+ \global \toks@iii = {}%
+ \else
+ \TXN@edef {TXN@\TXN@entity[\TXN@c]Caput}{\expandafter\@gobble\string#1}%
+ \fi
+ \TXN@edef {TXN@\TXN@entity[\TXN@c]Caput@contents}{\the\toks@i}%
+ \TXN@edef {TXN@\TXN@entity[\TXN@c]Caput@headline}{\the\toks@iii}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \edef \TXN@temp {\the\toks@v}%
+ \ifx \empty \TXN@temp
+ \global \toks@v = {\relax}%
+ \gdef \TXN@index@type {}%
+ \fi
+ \TXN@edef {TXN@\TXN@entity[\TXN@c]Caput@index}{\the\toks@v}%
+ \TXN@edef {TXN@\TXN@entity[\TXN@c]Caput@index@type}{\TXN@index@type}%
+}
+% \end{macrocode}
+% \paragraph{\TXN@cmd{contents} \TXN@cmd{headline} \TXN@cmd{index}}
+% \begin{macrocode}
+\def \TXN@setCaput@contents@headline@index #1{%
+%<debug> \TXN@trace \TXN@setCaput@contents@headline@index
+ \global \toks@i = {}%
+ \global \toks@iii = {}%
+ \global \toks@v = {}%
+ \setbox \z@ = \hbox {%
+ \let \contents = \TXN@setCaput@contents
+ \let \headline = \TXN@setCaput@headline
+ \let \indexes = \TXN@setCaput@index
+ #1}%
+ \ifdim \wd\z@ = \z@
+ \else
+ \ifTXN@caput@index@only
+ \else
+ \PackageError {TEXNIKA}
+ {Bad \protect\Caput\space attribute}
+ {You may have forgotten the escape
+ character in the section name}%
+ \fi
+ \fi
+ \ifTXN@caput@index@only
+ \else
+ \edef \TXN@temp {\the\toks@i}%
+ \ifx \empty \TXN@temp
+ \edef \TXN@temp {\the\toks@iii}%
+ \ifx \empty \TXN@temp
+ \global \toks@i = {\relax}%
+ \global \toks@iii = {\relax}%
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \paragraph{\TXN@cmd{contents}}
+% \begin{macrocode}
+\def \TXN@setCaput@contents {%
+%<debug> \TXN@trace \TXN@setCaput@contents
+ \global \toks@i = {\relax}%
+ \futurenonspacelet \TXN@token \TXN@setCaput@contents@bis
+}
+\def \TXN@setCaput@contents@bis {%
+ \ifx \TXN@token \bgroup
+ \expandafter \TXN@setCaput@contents@ter
+ \fi
+}
+\def \TXN@setCaput@contents@ter #1{%
+ \global \toks@i = {#1}%
+ \ignorespaces
+}
+% \end{macrocode}
+% \paragraph{\TXN@cmd{headline}}
+% \begin{macrocode}
+\def \TXN@setCaput@headline {%
+%<debug> \TXN@trace \TXN@setCaput@headline
+ \global \toks@iii = {\relax}%
+ \futurenonspacelet \TXN@token \TXN@setCaput@headline@bis
+}
+\def \TXN@setCaput@headline@bis {%
+ \ifx \TXN@token \bgroup
+ \expandafter \TXN@setCaput@headline@ter
+ \fi
+}
+\def \TXN@setCaput@headline@ter #1{%
+ \global \toks@iii = {#1}%
+ \ignorespaces
+}
+% \end{macrocode}
+% \paragraph{\TXN@cmd{index}}
+% \begin{macrocode}
+\def \TXN@setCaput@index {%
+%<debug> \TXN@trace \TXN@setCaput@index
+ \gdef \TXN@index@type {t}%
+ \global \toks@v = {\relax}%
+ \futurenonspacelet \TXN@token \TXN@setCaput@index@bis
+}
+\def \TXN@setCaput@index@bis {%
+ \ifx [\TXN@token
+ \expandafter \TXN@setCaput@index@quater
+ \else
+ \ifx \TXN@token \bgroup
+ \TXN@exxxpandafter \TXN@setCaput@index@ter
+ \fi
+ \fi
+}
+\def \TXN@setCaput@index@ter #1{%
+ \global \toks@v = {#1}%
+ \ignorespaces
+}
+\def \TXN@setCaput@index@quater [#1]{%
+ \ifcat a#1\relax
+ \else
+ \PackageError {TEXNIKA}
+ {The optional parameter of \protect\indexes\space must be a letter}
+ {}%
+ \fi
+ \gdef \TXN@index@type {#1}%
+ \futurenonspacelet \TXN@token \TXN@setCaput@index@quinquies
+}
+\def \TXN@setCaput@index@quinquies{%
+ \ifx \TXN@token \bgroup
+ \expandafter \TXN@setCaput@index@ter
+ \fi
+}
+% \end{macrocode}
+% \section{The \TXN@cmd{textus} class}
+% \subsection{Processing the command}
+% \begin{macrocode}
+\def \TXN@e {-1}
+\newif \ifTXN@textus@star
+\newcommand {\textus} {%
+ \ifx \empty \TXN@attribute@name
+ \expandafter \TXN@Textus
+ \else
+ \def \TXN@subclass@name {textus}%
+ \def \TXN@subclass@number {x}%
+ \def \TXN@temp {TXN}%
+ \expandafter \TXN@attribute@set
+ \fi
+}
+\def \TXN@Textus {%
+ \@ifstar {\TXN@textus@startrue\TXN@getTextus}
+ {\TXN@textus@starfalse\TXN@getTextus}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\TXN@getTextus}[1][0] {%
+%<debug> \TXN@trace \TXN@getTextus
+ \TXN@get@textus@flags {#1}%
+ \TXN@counter = #1\relax
+ \ifTXN@textus@star
+ \ifTXN@withinProsa
+ \ifnum #1 = \z@
+ \else
+ \TXN@milestonestrue
+ \fi
+ \fi
+ \fi
+ \TXN@get \TXN@textus@subclasses.\TXN@counter \TXN@temp
+% \end{macrocode}
+% The class name (having been obtained by |\string|, consists of
+% characters of category `other', so we must do the comparison in
+% this roundabout way.
+% \begin{macrocode}
+ \count@ = \escapechar \escapechar = \m@ne
+ \edef \TXN@temp@bis {\expandafter\string\csname\@currenvir\endcsname}%
+ \escapechar = \count@
+ \ifx \TXN@temp \TXN@temp@bis
+ \else
+ \expandafter \TXN@getTextus@normal
+ \fi
+}
+% \end{macrocode}
+% \subsection{Processing normal \TXN@cmd{textus}}
+% \begin{macrocode}
+\def \TXN@getTextus@normal {%
+ \futurelet \TXN@token \TXN@getTextus@bis
+}
+\def \TXN@getTextus@bis {%
+ \ifx *\TXN@token
+ \expandafter \TXN@getTextus@double@star
+ \else
+ \expandafter \TXN@getTextus@ter
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@getTextus@double@star #1{%
+%<debug> \TXN@trace \TXN@getTextus@double@star
+ \TXN@sw@true
+ \ifTXN@withinProsa
+ \if \TXN@num {TXN@textus[\TXN@c]milestone} = \@ne
+ \ifnum \TXN@pass = \@ne
+ \TXN@sw@false
+ \TXN@toks@a = {\textus*[}%
+ \TXN@toks@b = \expandafter{\the\TXN@counter]*}%
+ \edef \TXN@temp {\toks@={\the\TXN@toks@a\the\TXN@toks@b}}\TXN@temp
+ \TXN@save@command
+ \fi
+ \fi
+ \fi
+ \ifTXN@sw
+ \TXN@gdef {TXN@textus[\TXN@c]star}{}%
+ \TXN@set@textus@text {\TXN@c}{}%
+ \fi
+ \ignorespaces
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@getTextus@ter {%
+%<debug> \TXN@trace \TXN@getTextus@ter
+ \ifTXN@textus@star
+ \TXN@sw@true
+ \if \TXN@num {TXN@textus[\TXN@c]milestone} = \@ne
+ \ifTXN@withinProsa
+ \TXN@sw@false
+ \ifnum \TXN@pass = \tw@
+ \ifTXN@replay
+ \TXN@sw@true
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifTXN@sw
+ \TXN@gdef {TXN@textus[\TXN@c]star}{*}%
+ \fi
+ \fi
+ \if \TXN@option \TXN@o@Multiples \TXN@textus@flags
+ \expandafter \TXN@getTextus@multiples
+ \else
+ \if \TXN@option \TXN@o@NoArgument \TXN@textus@flags
+ \TXN@exxxpandafter \TXN@getTextus@quater
+ \else
+ \ifTXN@withinVersus
+ \everypar = {}\TXN@normalCR
+ \fi
+ \TXN@exxxpandafter \TXN@getTextus@quinquies
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@getTextus@quater {%
+%<debug> \TXN@trace \TXN@getTextus@quater
+ \if \TXN@option \TXN@o@NoFacies \TXN@textus@flags
+ \expandafter \TXN@getTextus@nofacies
+ \else
+ \expandafter \TXN@getTextus@noargument
+ \fi
+}
+\def \TXN@getTextus@nofacies #1{}
+\def \TXN@getTextus@noargument {%
+ \TXN@getTextus@quinquies \relax
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@getTextus@quinquies #1{%
+%<debug> \TXN@trace \TXN@getTextus@quinquies
+ \let \next = \TXN@getTextus@sexies
+ \ifTXN@withinProsa
+ \if \TXN@num {TXN@textus[\TXN@c]milestone} = \@ne
+ \else
+ \if \TXN@option \TXN@o@AttachedToArea \TXN@textus@flags
+ \TXN@gdef {TXN@textus[\TXN@c]milestone}{1}%
+ \TXN@milestonestrue
+ \TXN@initialize@milestones
+ \fi
+ \fi
+ \if \TXN@num {TXN@textus[\TXN@c]milestone} = \@ne
+ \ifnum \TXN@pass = \@ne
+ \let \next = \TXN@getTextus@septies
+ \fi
+ \ifnum \TXN@pass = \tw@
+ \ifTXN@replay
+ \else
+ \let \next = \TXN@getTextus@septies
+ \fi
+ \fi
+ \fi
+ \fi
+ \next {#1}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@getTextus@sexies #1{%
+%<debug> \TXN@trace \TXN@getTextus@sexies
+ \TXN@set@textus@text {\TXN@c}{#1}%
+ \if \TXN@empty {TXN@textus[\TXN@c]side@\TXN@theFolio}%
+ \leavevmode
+ \def \TXN@textus@text {}%
+ \TXN@make@object@textus {\TXN@c}%
+ \ifTXN@textus@zero@width
+ \setbox \TXN@object@textus = \hbox to \z@ {%
+ \if \TXN@option \TXN@o@RangedRight \TXN@textus@flags
+ \hss
+ \fi
+ \box \TXN@object@textus
+ \if \TXN@option \TXN@o@RangedLeft \TXN@textus@flags
+ \hss
+ \else
+ \if \TXN@option \TXN@o@RangedRight \TXN@textus@flags
+ \else
+ \hss
+ \fi
+ \fi
+ }%
+ \else
+ \dimen@ = \maxdimen
+ \if \TXN@option \TXN@o@AlignedRight \TXN@textus@flags
+ \dimen@ = \wd\TXN@object@textus
+ \fi
+ \if \TXN@option \TXN@o@AlignedCentre \TXN@textus@flags
+ \dimen@ = .5\wd\TXN@object@textus
+ \fi
+ \ifdim \dimen@ = \maxdimen
+ \else
+ \setbox \TXN@object@textus =
+ \hbox {\kern -\dimen@ \box \TXN@object@textus}%
+ \fi
+ \fi
+ \box \TXN@object@textus
+ \ifTXN@textus@star
+ \else
+ \if \TXN@option \TXN@o@AttachedToArea \TXN@textus@flags
+ \else
+ \TXN@gdef {TXN@textus[\TXN@c]text}{}%
+ \fi
+ \fi
+ \else
+ \ifnum \TXN@counter = \z@
+ \leavevmode
+ \begingroup \@nameuse{TXN@textus[\TXN@theTextus]Facies}#1\endgroup
+ \fi
+ \fi
+ \ifTXN@withinVersus
+ \everypar = {\PTR@start@box}%
+ \expandafter \PTR@obeylines
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@set@textus@text #1#2{%
+%<debug> \TXN@trace \TXN@set@textus@text
+ \if \TXN@option \TXN@o@AttachedToArea \TXN@textus@flags
+ \@tempcnta = \TXN@area@count \TXN@safe
+ \ifnum \@tempcnta > \TXN@max@area@ind
+ \PackageError {TEXNIKA}
+ {Too many areas}
+ {There can be no more than \TXN@max@area@ind\space areas}%
+ \fi
+ \TXN@global@listtrue
+ \expandafter
+ \TXN@SimpleList@set \csname TXN@textus[#1]text\endcsname.\@tempcnta
+ {\strut#2\strut}%
+ \else
+ \TXN@gdef {TXN@textus[#1]text}{#2}%
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@getTextus@septies #1{%
+%<debug> \TXN@trace \TXN@getTextus@septies
+ \ifnum \TXN@pass = \@ne
+ \ifTXN@textus@star
+ \TXN@toks@a = {\textus*[}%
+ \else
+ \TXN@toks@a = {\textus[}%
+ \fi
+ \TXN@toks@b = \expandafter{\the\TXN@counter}%
+ \TXN@toks@c = {]{#1}}%
+ \edef \TXN@temp {\the\TXN@toks@a\the\TXN@toks@b\the\TXN@toks@c}%
+ \toks@ = \expandafter {\TXN@temp}%
+ \TXN@save@command
+ \else
+ \ifTXN@replay
+ \else
+ \if \TXN@option \TXN@o@AttachedToArea \TXN@textus@flags
+ \else
+ \TXN@gdef {TXN@textus[\TXN@c]text}{}%
+ \fi
+ \fi
+ \fi
+ \expandafter \ignorespaces
+}
+% \end{macrocode}
+% \subsection{Processing multiples}
+% \begin{macrocode}
+\def \TXN@getTextus@multiples #1{%
+%<debug> \TXN@trace \TXN@getTextus@multiples
+ \toks@ = \expandafter {%
+ \csname TXN@textus[\TXN@c]Facies\endcsname\relax\relax}%
+ \setbox \z@ = \hbox {#1}%
+ \setbox \@ne = \hbox {\@nameuse{TXN@textus[\TXN@c]Facies}\relax}%
+ \dimen@ = \wd\@ne
+ \loop
+ \ifdim \dimen@ < \wd\z@
+ \advance \dimen@ by \wd\@ne
+ \repeat
+% \end{macrocode}
+% One copy is inserted by |\Facies| as the box is generated
+% \begin{macrocode}
+ \advance \dimen@ by -\wd\@ne
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \toks@ = \expandafter {%
+ \csname TXN@textus[\TXN@c]Facies\endcsname\relax}%
+ \toks@ = \expandafter {\the\toks@}%
+ \edef \TXN@temp {\leavevmode
+ \hbox to\the\dimen@{\xleaders\hbox{\the\toks@}\hfill}}
+ \expandafter \TXN@getTextus@sexies \expandafter{\TXN@temp}%
+}
+% \end{macrocode}
+% \subsection{Attaching a \TXN@cmd{textus} object to the line}
+%
+% \begin{macrocode}
+\def \TXN@attach@textus #1{%
+%<debug> \TXN@trace [#1] \TXN@attach@textus
+ \ifnum #1 = \TXN@e \TXN@safe
+ \TXN@typeset@textus {\TXN@e}%
+ \else
+ \TXN@attach@textus@bis
+ \fi
+}
+\def \TXN@attach@textus@bis {%
+%<debug> \TXN@trace \TXN@attach@textus@bis
+ \setbox \TXN@object@textus = \null
+ \count@ = \@ne
+ \loop
+ \xdef \TXN@textus@loop {\the\count@}%
+ \advance \count@ by \m@ne
+ \ifnum \count@ < \TXN@textus@max \TXN@safe
+ \TXN@get@textus@flags {\TXN@textus@loop}%
+ \if \TXN@option \TXN@o@AttachedToArea \TXN@textus@flags
+ \else
+ \if \TXN@empty {TXN@textus[\TXN@textus@loop]text}%
+ \else
+ \expandafter
+ \TXN@typeset@textus \expandafter{\TXN@textus@loop}%
+ \fi
+ \fi
+ \count@ = \TXN@textus@loop \TXN@safe
+ \advance \count@ by \@ne
+ \repeat
+}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\def \TXN@typeset@textus #1{%
+%<debug> \TXN@trace \TXN@typeset@textus
+ \def \TXN@textus@text {}%
+ \TXN@make@object@textus {#1}%
+ \TXN@move@to@marginalia {#1}{t}\TXN@object@textus
+}
+% \end{macrocode}
+% \subsection{Building a \TXN@cmd{textus} object}
+% \begin{macrocode}
+\def \TXN@make@object@textus #1{%
+%<debug> \TXN@trace \TXN@make@object@textus
+ \def \TXN@entity {textus}%
+ \TXN@get@textus@flags {#1}%
+ \edef \TXN@flags {\TXN@textus@flags}%
+ \ifx \empty \TXN@textus@text
+ \gdef \TXN@textus@text {\csname TXN@textus[#1]text\endcsname}%
+ \fi
+% \end{macrocode}
+% If |\excessus| no special formatting
+% \begin{macrocode}
+ \ifnum #1 = \TXN@e \TXN@safe
+ \let \TXN@box@type = \hbox
+ \def \TXN@box@parameters {}%
+ \else
+ \TXN@get@object@field@width {#1}%
+ \ifx \empty \TXN@textus@field@width
+ \let \TXN@box@type = \hbox
+ \def \TXN@box@parameters {}%
+ \else
+ \TXN@toks@a = {\hsize \TXN@textus@field@width}%
+ \ifdim \TXN@textus@field@width = \z@
+ \TXN@toks@a = {\hsize \maxdimen}%
+ \fi
+ \TXN@toks@b = {}%
+ \if \TXN@option \TXN@o@RangedLeft \TXN@textus@flags
+ \TXN@toks@b = {\rangedleft}%
+ \if \TXN@option \TXN@o@RangedRight \TXN@textus@flags
+ \TXN@toks@b = {\centred}%
+ \fi
+ \else
+ \if \TXN@option \TXN@o@RangedRight \TXN@textus@flags
+ \TXN@toks@b = {\rangedright}%
+ \fi
+ \fi
+ \edef \TXN@box@parameters {\the\TXN@toks@a \the\TXN@toks@b}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \setbox \z@ = \hbox {%
+ \leftskip = \z@ \rightskip = \z@ \parindent = \z@
+ \def \\{\kern \TXN@textus@field@width\relax}%
+ \let \Delimiter = \TXN@get@delimiter
+ \@nameuse{TXN@textus[#1]Facies}\TXN@textus@text
+ }%
+ \ifdim \TXN@textus@field@width < \wd\z@
+% \end{macrocode}
+% More than one line.
+% \begin{macrocode}
+ \if \TXN@option \TXN@o@AlignedBottom \TXN@textus@flags
+ \let \TXN@box@type = \vbox
+ \else
+ \let \TXN@box@type = \vtop
+ \fi
+ \else
+ \let \TXN@box@type = \hbox
+ \fi
+ \fi
+ \fi
+ \TXN@sw@false
+ \if \TXN@option \TXN@o@AttachedToArea \TXN@textus@flags
+ \if \TXN@option \TXN@o@AreaWrap \TXN@textus@flags
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifTXN@sw
+ \TXN@make@object@textus@wrap {#1}%
+ \else
+ \TXN@make@object@textus@setbox {#1}%
+ \fi
+ \ifx \TXN@box@type \hbox
+ \ifnum #1 = \TXN@e \TXN@safe
+ \else
+ \TXN@place@object@in@field \TXN@object@textus
+ \fi
+ \else
+ \ifTXN@textus@zero@width
+ \wd\TXN@object@textus = \z@
+ \fi
+ \TXN@sw@false
+ \if \TXN@option \TXN@o@AlignedMiddle \TXN@textus@flags
+ \TXN@sw@true
+ \else
+ \if \TXN@option \TXN@o@AlignedAxis \TXN@textus@flags
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifTXN@sw
+ \setbox \TXN@object@textus =
+ \hbox {$\vcenter{\box \TXN@object@textus}$}%
+ \dimen@ = \ht\TXN@object@textus
+ \advance \dimen@ by -\dp\TXN@object@textus
+ \if \TXN@option \TXN@o@AlignedAxis \TXN@textus@flags
+ \setbox \z@ = \hbox {$\vcenter{}$}%
+ \advance \dimen@ by -2\ht\z@
+ \fi
+ \setbox \TXN@object@textus =
+ \hbox {\lower .5\dimen@ \box \TXN@object@textus}%
+ \else
+ \setbox \TXN@object@textus = \hbox {\box \TXN@object@textus}%
+ \fi
+ \ht\TXN@object@textus = \z@
+ \dp\TXN@object@textus = \z@
+ \fi
+ \ifnum #1 > \z@
+ \if \TXN@empty {TXN@textus[#1]star}%
+ \if \TXN@option \TXN@o@AttachedToArea \TXN@textus@flags
+ \else
+ \TXN@gdef {TXN@textus[#1]text}{}%
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@make@object@textus@setbox #1{%
+%<debug> \TXN@trace \TXN@make@object@textus@setbox
+ \gdef \TXN@textus@delimiter@left {}%
+ \gdef \TXN@textus@delimiter@right {}%
+ \setbox \TXN@object@textus = \TXN@box@type {%
+ \parindent = \z@
+ \parskip = \z@skip
+ \leftskip = \z@skip
+ \rightskip = \z@skip
+ \TXN@box@parameters
+ \everypar {\TXN@box@parameters \parindent = \z@}%
+ \let \\=\TXN@esc@esc@break
+ \let \Delimiter = \TXN@get@delimiter
+ \@nameuse{TXN@textus[#1]Facies}\TXN@textus@text
+ \endgraf
+ \xdef \TXN@prevgraf {\the\prevgraf}%
+ }%
+ \ifx \empty \TXN@textus@delimiter@left
+ \else
+ \expandafter \TXN@insert@delimiter \TXN@textus@delimiter@left{l}%
+ \fi
+ \ifx \empty \TXN@textus@delimiter@right
+ \else
+ \expandafter \TXN@insert@delimiter \TXN@textus@delimiter@right{r}%
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Processing \TXN@cmd{Delimiter}s}
+% Get the delimiter(s) into control sequences, as a list of three
+% values: the first is either 0 (normal form) or 1 (starred form),
+% the other two are the arguments of the |\Delimiter| command.
+% \begin{macrocode}
+\def \TXN@get@delimiter {%
+%<debug> \TXN@trace \TXN@get@delimiter
+ \@ifstar {\count@=\@ne\TXN@get@delimiter@bis}
+ {\count@=\z@\TXN@get@delimiter@bis}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@get@delimiter@bis} [2] [1] {%
+ \setbox \z@ = \hbox {$\vcenter{}$}%
+ \xdef \TXN@delimiter@axis {\the\ht\z@}%
+ \if \TXN@option \TXN@o@DelimiterAtStart \TXN@textus@flags
+ \ifx \empty \TXN@textus@delimiter@left
+ \expandafter \gdef
+ \expandafter \TXN@textus@delimiter@left
+ \expandafter {%
+ \expandafter {\the\count@}{#1}{#2}}%
+ \else
+ \expandafter \gdef
+ \expandafter \TXN@textus@delimiter@right
+ \expandafter {%
+ \expandafter {\the\count@}{#1}{#2}}%
+ \fi
+ \else
+ \expandafter \gdef
+ \expandafter \TXN@textus@delimiter@right
+ \expandafter {%
+ \expandafter {\the\count@}{#1}{#2}}%
+ \fi
+}
+% \end{macrocode}
+% Insert a delimiter into the object.\\
+% The first three parameters are those in the list held in
+% |\TXN@textus@delimiter@left| and |\TXN@textus@delimiter@right|,
+% the fourth is `l' or `r' for the side at which the delimiter
+% must be inserted.
+% \begin{macrocode}
+\newif \ifTXN@delimiter@ante
+\newif \ifTXN@delimiter@post
+\def \TXN@insert@delimiter #1#2#3#4{%
+%<debug> \TXN@trace \TXN@insert@delimiter
+ \TXN@sw@false
+ \if \TXN@option \TXN@o@AttachedToArea \TXN@textus@flags
+ \ifvbox \TXN@object@textus
+ \xdef \TXN@delimiter@axis {\z@}%
+ \fi
+ \ifnum #1 = \z@
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifTXN@sw
+ \TXN@assign \TXN@dim@a = {TXN@area[\TXN@area@ind]height}%
+ \TXN@assign \TXN@dim@b = {TXN@area[\TXN@area@ind]depth}%
+ \else
+ \TXN@dim@a = \ht\TXN@object@textus
+ \TXN@dim@b = \dp\TXN@object@textus
+ \fi
+ \dimen@ = \TXN@dim@a
+ \advance \dimen@ by \TXN@dim@b
+ \ifx \empty \TXN@ModusDelimiter
+ \dimen@ = #2\dimen@
+ \else
+ \dimen@ = \TXN@ModusDelimiter\dimen@
+ \fi
+ \setbox \z@ = \hbox {%
+ $\vcenter {\vrule height .5\dimen@ depth .5\dimen@ width \z@}$}%
+ \setbox \z@ = \hbox {%
+ $\left#3\vrule height \ht\z@ depth \dp\z@ width \z@\right.$}%
+ \dimen@ = \ht\z@
+ \advance \dimen@ by -\dp\z@
+ \ifx \TXN@box@type \hbox
+ \dimen@ = \z@
+ \else
+ \advance \dimen@ by \dp\TXN@object@textus
+ \advance \dimen@ by -\ht\TXN@object@textus
+ \divide \dimen@ by \tw@
+ \fi
+ \setbox \TXN@object@textus = \hbox {%
+ \if r#4\relax
+ \box \TXN@object@textus
+ \fi
+ \TXN@SpatiumAnteDelimiter
+ \lower \dimen@ \box \z@
+ \TXN@SpatiumPostDelimiter
+ \if l#4\relax
+ \box \TXN@object@textus
+ \fi
+ }%
+}
+% \end{macrocode}
+% \subsubsection{\TXN@cmd{wrap}ping the object around an area}
+% The special case of an object \textit{wrapped} around an area
+% \begin{macrocode}
+\def \TXN@make@object@textus@wrap #1{%
+%<debug> \TXN@trace \TXN@make@object@textus@wrap
+% \end{macrocode}
+% Set the text within the field width, to get the baselineskip
+% \begin{macrocode}
+ \setbox \z@ = \vbox {%
+ \TXN@box@parameters \parindent = \z@
+ \hsize \TXN@textus@field@width
+ \let \\=\TXN@esc@esc@break
+ \@nameuse{TXN@textus[#1]Facies}\TXN@textus@text
+ \global \TXN@baselineskip = \baselineskip
+ \endgraf
+ \xdef \TXN@prevgraf {\the\prevgraf}%
+ }%
+% \end{macrocode}
+% Get the total size of the area
+% \begin{macrocode}
+ \TXN@assign \TXN@dim@a = {TXN@area[\TXN@area@ind]height}%
+ \TXN@assign \TXN@dim@b = {TXN@area[\TXN@area@ind]depth}%
+ \advance \TXN@dim@a by \TXN@dim@b
+ \TXN@dim@c = \TXN@dim@a
+% \end{macrocode}
+% Get the empty space at the end of the area
+% \begin{macrocode}
+ \xdef \TXN@area@wrap@skip {\z@}%
+ \dimen@ = \z@
+ \if \TXN@empty {TXN@area[\TXN@area@ind]spatium}%
+ \else
+ \TXN@assign \dimen@@ = {TXN@area[\TXN@area@ind]spatium}%
+ \advance \dimen@ by \dimen@@
+ \fi
+ \xdef \TXN@area@wrap@skip {\the\dimen@}%
+ \xdef \TXN@area@empty {\the\dimen@}%
+% \end{macrocode}
+% Set up the |\parshape| list
+% \begin{macrocode}
+ \skip@ = \TXN@baselineskip \TXN@safe
+ \dimen@ = \skip@
+ \toks@ = {\parshape \the\count@ }%
+ \count@ = \@ne
+ \loop
+ \ifdim \TXN@dim@a > \dimen@
+ \advance \TXN@dim@a by -\dimen@
+ \toks@ = \expandafter{\the\toks@ \z@ \TXN@textus@field@width}%
+ \advance \count@ by \@ne
+ \repeat
+% \end{macrocode}
+% Add one line, if necessary
+% \begin{macrocode}
+ \TXN@sw@false
+ \ifdim \TXN@dim@a = \z@
+ \ifdim \TXN@area@empty = z@
+ \TXN@sw@true
+ \fi
+ \else
+ \ifdim \TXN@dim@a > \TXN@area@empty \TXN@safe
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifTXN@sw
+ \toks@ = \expandafter{\the\toks@ \z@ \TXN@textus@field@width}%
+ \advance \count@ by \@ne
+ \fi
+% \end{macrocode}
+% The text below the area is set in a single line of infinite width.
+% (for the rationale behind this, see page 66 of the EDMAC documentation)
+% \begin{macrocode}
+ \toks@ = \expandafter{\the\toks@ \z@ \maxdimen}%
+% \end{macrocode}
+% Set the entire paragraph
+% \begin{macrocode}
+ \setbox \z@ = \vbox {%
+ \TXN@box@parameters \parindent = \z@ \parskip = \z@
+ \the\toks@
+ \let \\=\TXN@esc@esc@break
+ \@nameuse{TXN@textus[#1]Facies}\TXN@textus@text
+ \endgraf
+ }%
+ \skip@ = \TXN@baselineskip \TXN@safe
+ \dimen@ = -\skip@
+ \advance \dimen@ by \ht\z@
+ \splittopskip = \z@
+% \end{macrocode}
+% Get the column corresponding to the area, inserting a |\strut|
+% at the end, to ensure proper stacking of the |\vbox|es
+% \begin{macrocode}
+ \setbox \tw@ = \vsplit \z@ to \dimen@
+ \setbox \tw@ = \vbox {\@nameuse{TXN@textus[#1]Facies}\relax
+ \unvbox \tw@
+ \setbox \tw@ = \lastbox
+ \strut \unhbox \tw@ \strut \endgraf}%
+% \end{macrocode}
+% Reset the rest of the text at the natural text width
+% \begin{macrocode}
+ \TXN@get@Locus {textus[#1]}{t}%
+ \TXN@dim@a = \dimen@
+ \TXN@get@Locus {textus[\TXN@theTextus]}{t}%
+ \TXN@dim@b = \dimen@
+ \dimen@ = \linewidth
+ \setbox \z@ = \vbox {%
+ \parindent = \z@
+ \hsize \dimen@
+ \let \\=\TXN@esc@esc@break
+ \unvbox \z@
+ \setbox \z@ = \lastbox
+ \@nameuse{TXN@textus[#1]Facies}{\strut \unhbox \z@ \strut}%
+ \endgraf
+ \xdef \TXN@prevgraf {\the\prevgraf}%
+ \unskip
+ \unskip
+ \unpenalty
+ }%
+% \end{macrocode}
+% Join the two pieces
+% \begin{macrocode}
+ \ifdim \TXN@dim@a > \TXN@dim@b
+ \dimen@ = \TXN@dim@a
+ \advance \dimen@ by -\TXN@dim@b
+ \else
+ \dimen@ = \z@
+ \fi
+ \setbox \TXN@object@textus = \TXN@box@type {%
+ \@nameuse{TXN@textus[#1]Facies}\relax
+ \topskip = \z@
+ \unvcopy \tw@
+ \TXN@counter@a = \TXN@prevgraf \TXN@safe
+ \global \setbox \thr@@ = \copy \z@
+ \loop
+ \ifnum \TXN@counter@a > \z@
+ \setbox \z@ = \vbox{%
+ \vbadness = \@M
+ \splittopskip = \z@
+ \global \setbox \@ne = \vsplit \thr@@ to \TXN@baselineskip
+ \global \setbox \thr@@ = \box \thr@@
+ \unvbox \@ne \global \setbox \@ne = \lastbox
+ }%
+ \moveleft \dimen@ \box \@ne
+ \advance \TXN@counter@a by \m@ne
+ \repeat
+ }%
+ \wd\TXN@object@textus = \TXN@textus@field@width \TXN@safe
+ \dimen@ = \ht\TXN@object@textus
+ \advance \dimen@ by \dp\TXN@object@textus
+ \advance \dimen@ by -\TXN@dim@c
+ \advance \dimen@ by \TXN@area@wrap@skip \TXN@safe
+ \xdef \TXN@area@wrap@skip {\the\dimen@}%
+}
+% \end{macrocode}
+% \section{Areas}
+%
+% \subsection{Data structures}
+%
+%
+% The list of areas. Each list element has the form:\\
+% \qquad|{<line number>,<identifier>}|\\
+% The |<line number>| is used in error messages; the |<identifier>|
+% is the area name or |\relax| for anonymous areas. After |\endarea|
+% the list element is set to |{0,\relax}|.\\
+% We allocate the \textbf{cs} directly, inserting a dummy element
+% in the first position, so that there is a direct correspondence
+% between area numbers and indices.
+% \begin{macrocode}
+\gdef \TXN@areas {\\{0,\relax}}
+% \end{macrocode}
+% The maximum number of areas that can exist at any time.
+% \begin{macrocode}
+\chardef \TXN@max@area@ind = 16
+% \end{macrocode}
+% The number of elements in the list.
+% \begin{macrocode}
+\gdef \TXN@area@count {0}
+% \end{macrocode}
+% The number of active areas in the list
+% \begin{macrocode}
+\gdef \TXN@active@areas {0}
+% \end{macrocode}
+% The index of the area being processed
+% \begin{macrocode}
+\gdef \TXN@area@ind {0}%
+% \end{macrocode}
+% Adding a new area to the list.
+% \begin{macrocode}
+\def \TXN@add@area #1{%
+ \TXN@trim {#1}%
+ \edef \TXN@temp {%
+ \ifTXN@withinProsa \the\TXNl@linenumber\else \the\inputlineno\fi
+ ,\the\TXN@trimmed}%
+ \TXN@gincr \TXN@area@count
+ \TXN@gincr \TXN@active@areas
+ \TXN@global@listtrue
+ \TXN@SimpleList@set@extend \TXN@areas.\TXN@area@count \TXN@temp
+ \xdef \TXN@area@ind {\TXN@area@count}%
+}
+% \end{macrocode}
+% Removing an area (index in |\TXN@area@ind|).
+% \begin{macrocode}
+\def \TXN@remove@area {%
+ \TXN@set \TXN@areas.\TXN@area@ind {0,\relax}%
+% \end{macrocode}
+% The area list is global
+% \begin{macrocode}
+ {\let \\= \relax \xdef \TXN@areas {\TXN@areas}}%
+ \TXN@gdecr \TXN@active@areas
+ \ifnum \TXN@active@areas = \z@
+ \gdef \TXN@areas {\\{0,\relax}}%
+ \gdef \TXN@area@count {0}%
+ \fi
+}
+% \end{macrocode}
+% Finding an area.\\
+% Sets |\TXN@area@ind| to the index for the area identified by the
+% parameter; if the parameter is |\relax|, the index for the last
+% `anonymous' area is returned.
+% \begin{macrocode}
+\def \TXN@find@area #1{%
+ \TXN@trim {#1}%
+ \edef \TXN@parameter {\the\TXN@trimmed}%
+ \xdef \TXN@area@identifier {}%
+ \begingroup
+ \TXN@counter = \z@
+ \def \\##1{\TXN@check ##1\TXN@nil}%
+ \def \TXN@check ##1,##2\TXN@nil{%
+ \ifnum ##1 > \z@
+ \def \TXN@temp {##2}%
+ \ifx \TXN@parameter \TXN@temp
+ \xdef \TXN@area@ind {\the\TXN@counter}%
+ \xdef \TXN@area@identifier {##2}%
+ \fi
+ \fi
+ \advance \TXN@counter by \@ne
+ }%
+ \TXN@areas
+ \endgroup
+ \ifx \TXN@area@identifier \TXN@parameter
+ \else
+ \ifx \TXN@parameter \TXN@safe
+ \def \TXN@temp {}%
+ \else
+ \edef \TXN@temp {[\TXN@parameter]}%
+ \fi
+ \PackageError {TEXNIKA}
+ {There is no previous \protect\area\TXN@temp\space command}
+ {}%
+ \fi
+}
+% \end{macrocode}
+% Building the list of currently active areas.\\
+% The list is not a \textit{SimpleList}: it is just the concatenation
+% of the area indices.
+% \begin{macrocode}
+\def \TXN@build@active@areas@list {%
+ \gdef \TXN@active@areas@list {}%
+ \begingroup
+ \TXN@counter = \z@
+ \def \\##1{\TXN@check ##1\TXN@nil}%
+ \def \TXN@check ##1,##2\TXN@nil{%
+ \ifnum ##1 > \z@
+ \xdef \TXN@active@areas@list {%
+ \TXN@active@areas@list{\the\TXN@counter}}%
+ \fi
+ \advance \TXN@counter by \@ne
+ }%
+ \TXN@areas
+ \endgroup
+}
+% \end{macrocode}
+% Getting the next index.\\
+% Removes the first index from the list above, placing it in |\TXN@counter|.
+% \begin{macrocode}
+\def \TXN@get@next@area {%
+ \ifx \empty \TXN@active@areas@list
+ \TXN@counter = \z@
+ \else
+ \expandafter \TXN@get@next@area@bis \TXN@active@areas@list \TXN@nil
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@next@area@bis #1#2\TXN@nil{%
+ \TXN@counter = #1\relax
+ \xdef \TXN@active@areas@list {#2}%
+}
+% \end{macrocode}
+% \subsection{Entering an area}
+% \begin{macrocode}
+\def \area {\@bsphack\@ifnextchar [{\TXN@area}{\TXN@area[\relax]}}
+\let \Area = \area
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@area [#1]{%
+%<debug> \TXN@trace \area
+ \@esphack
+ \def \TXN@parameter {#1}%
+ \TXN@sw@true
+ \ifTXN@withinVersus \TXN@sw@false \fi
+ \ifTXN@withinProsa \TXN@sw@false \fi
+ \ifTXN@sw
+ \PackageError {TEXNIKA}
+ {\protect\area\space may be used only within Versus or Prosa}
+ {}%
+ \fi
+ \let \next = \relax
+ \ifTXN@withinProsa
+ \ifnum \TXN@pass = \@ne
+ \toks@ = {\area[#1]}%
+ \TXN@save@command
+ \let \next = \TXN@area@bis
+ \else
+ \ifTXN@replay
+ \let \next = \TXN@area@bis
+ \fi
+ \fi
+ \else
+ \let \next = \TXN@area@bis
+ \fi
+ \next
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@area@bis {%
+%<debug> \TXN@trace \TXN@area@bis
+ \TXN@add@area \TXN@parameter
+ \ifnum \TXN@area@count = \@ne
+ \xdef \TXN@area@parskip {\the\parskip}%
+ \ifTXN@withinVersus
+ \parskip = \z@
+ \fi
+ \fi
+ \TXN@xdef {TXN@area[\TXN@area@count]height}{\z@}%
+ \TXN@xdef {TXN@area[\TXN@area@count]first@line@height}{\z@}%
+ \TXN@xdef {TXN@area[\TXN@area@count]rightedge}{\z@}%
+ \TXN@xdef {TXN@area[\TXN@area@count]depth}{\z@}%
+ \TXN@xdef {TXN@area[\TXN@area@count]leftedge}{\maxdimen}%
+ \TXN@xdef {TXN@area[\TXN@area@count]stropha}{}%
+ \TXN@xdef {TXN@area[\TXN@area@count]spatium}{}%
+ \TXN@xdef {TXN@area[\TXN@area@count]folio}{\TXN@theFolio}%
+}
+% \end{macrocode}
+% \subsection{Leaving an area}
+% \begin{macrocode}
+\newif \ifTXN@area@withinVersus
+\def \endarea {\@bsphack\@ifnextchar [{\TXN@endarea}{\TXN@endarea[\relax]}}
+\let \endArea = \endarea
+% \end{macrocode}
+% Within \textit{Prosa} the text can be attached to the area only after
+% the line containing |\endarea| has been processed; so the indices for
+% area{s} being closed are saved in |\TXN@endarea@list|. with the same
+% format as the active area list.
+% \begin{macrocode}
+\def \TXN@endarea [#1]{%
+%<debug> \TXN@trace \TXN@endarea
+ \@esphack
+ \TXN@sw@true
+ \ifTXN@withinVersus \TXN@sw@false \fi
+ \ifTXN@withinProsa \TXN@sw@false \fi
+ \ifTXN@sw
+ \PackageError {TEXNIKA}
+ {\protect\endarea\space may be used only within Versus or Prosa}
+ {}%
+ \fi
+ \ifTXN@withinVersus
+ \TXN@area@withinVersustrue
+ \TXN@find@area {#1}%
+ \expandafter \TXN@endarea@Versus
+ \else
+ \ifnum \TXN@pass = \@ne
+ \toks@ = {\endarea [#1]}%
+ \TXN@save@command
+ \TXN@find@area {#1}%
+ \TXN@remove@area
+ \else
+ \ifTXN@replay
+ \TXN@find@area {#1}%
+ \xdef \TXN@endarea@list {\TXN@endarea@list{\TXN@area@ind}}%
+ \fi
+ \fi
+ \fi
+ \ifTXN@area@withinVersus
+ \TXN@remove@area
+ \TXN@area@withinVersusfalse
+ \PTR@suspendtrue
+ \expandafter \Versus
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Within \textit{Versus}}
+% \begin{macrocode}
+\def \TXN@endarea@Versus {%
+%<debug> \TXN@trace \TXN@endarea@Versus
+ \PTR@suspendtrue
+ \endVersus
+ \ifnum \TXN@area@ind = \@ne
+ \parskip = \TXN@area@parskip \TXN@safe
+ \fi
+ \TXN@insert@area@textus
+ \if \TXN@empty {TXN@area[\TXN@area@ind]stropha}%
+ \else
+ \expandafter \TXN@spatium@vertical \expandafter {%
+ \csname TXN@area[\TXN@area@ind]stropha\endcsname}%
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Within \textit{Prosa}}
+%
+% The macro is called from |\TXN@process@line@prosa| when |\TXN@endarea@list|
+% is not empty
+% \begin{macrocode}
+\def \TXN@endarea@Prosa {%
+%<debug> \TXN@trace \TXN@endarea@Prosa
+ \TXN@get@next@endarea
+ \@whilenum \TXN@area@ind > \z@ \do {%
+ \TXN@insert@area@textus
+ \TXN@remove@area
+ \TXN@get@next@endarea
+ }%
+ \ifnum \TXN@area@ind = \@ne
+ \parskip = \TXN@area@parskip \TXN@safe
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@next@endarea {%
+ \ifx \empty \TXN@endarea@list
+ \gdef \TXN@area@ind {0}%
+ \else
+ \expandafter \TXN@get@next@endarea@bis \TXN@endarea@list \TXN@nil
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@next@endarea@bis #1#2\TXN@nil{%
+ \xdef \TXN@area@ind {#1}%
+ \xdef \TXN@endarea@list {#2}%
+}
+% \end{macrocode}
+% \subsection{Processing all text attached to the area}
+% \begin{macrocode}
+\def \TXN@insert@area@textus {%
+%<debug> \TXN@trace \TXN@insert@area@textus
+%<debug> \TXN@trace@area
+ \xdef \TXN@area@wrap@skip {\z@}%
+ \edef \TXN@save@Folio {\TXN@theFolio}%
+ \expandafter \global
+ \expandafter \let
+ \expandafter \TXN@theFolio
+ \csname TXN@area[\TXN@area@ind]folio\endcsname
+ \count@ = \@ne
+ \loop
+ \xdef \TXN@area@loop {\the\count@}%
+ \advance \count@ by \m@ne
+ \ifnum \count@ < \TXN@textus@max \TXN@safe
+ \TXN@get@textus@flags {\TXN@area@loop}%
+ \if \TXN@option \TXN@o@AttachedToArea \TXN@textus@flags
+ \@tempcnta = \TXN@area@ind \TXN@safe
+ \advance \@tempcnta by \m@ne
+ \expandafter
+ \TXN@SimpleList@get \csname TXN@textus[\TXN@area@loop]text\endcsname.%
+ \@tempcnta \TXN@textus@text
+ \ifx \empty \TXN@textus@text
+ \else
+ \setbox \TXN@marginalia = \copy\voidb@x
+ \xdef \TXN@delimiter@axis {\z@}%
+ \TXN@process@area@textus {\TXN@area@loop}%
+ \ifvoid \TXN@marginalia
+ \else
+ \TXN@attach@area@textus
+ \fi
+ \@tempcnta = \TXN@area@ind \TXN@safe
+ \advance \@tempcnta by \m@ne
+ \TXN@global@listtrue
+ \expandafter
+ \TXN@SimpleList@set \csname TXN@textus[\TXN@area@loop]text\endcsname.%
+ \@tempcnta \empty
+ \if \TXN@option \TXN@o@AreaExtend \TXN@textus@flags
+ \TXN@area@textus@extend
+ \fi
+ \fi
+ \fi
+ \count@ = \TXN@area@loop \TXN@safe
+ \advance \count@ by \@ne
+ \repeat
+ \xdef \TXN@theFolio {\TXN@save@Folio}%
+}
+% \end{macrocode}
+% \subsubsection{Updating the left and right edges}
+% \begin{macrocode}
+\def \TXN@area@textus@extend {%
+ \TXN@build@active@areas@list
+ \loop
+ \TXN@get@next@area
+ \ifnum \TXN@area@ind > \TXN@counter
+ \TXN@assign \dimen@ = {TXN@area[\TXN@c]leftedge}%
+ \ifdim \dimen@ > \TXN@area@textus@leftedge \TXN@safe
+ \TXN@xdef {TXN@area[\TXN@c]leftedge}{\TXN@area@textus@leftedge}%
+ \fi
+ \TXN@assign \dimen@ = {TXN@area[\TXN@c]rightedge}%
+ \ifdim \dimen@ < \TXN@area@textus@rightedge \TXN@safe
+ \TXN@xdef {TXN@area[\TXN@c]rightedge}{\TXN@area@textus@rightedge}%
+ \fi
+ \repeat
+}
+% \end{macrocode}
+% \subsubsection{Attaching the object to the area}
+% \begin{macrocode}
+\def \TXN@attach@area@textus {%
+%<debug> \TXN@trace \TXN@attach@area@textus
+ \TXN@assign \TXN@dim@a = {TXN@area[\TXN@area@ind]height}%
+ \TXN@assign \TXN@dim@b = {TXN@area[\TXN@area@ind]depth}%
+ \advance \TXN@dim@a by \TXN@dim@b
+ \if \TXN@option \TXN@o@AreaMiddle \TXN@textus@flags
+ \divide \TXN@dim@a by \tw@
+ \advance \TXN@dim@a by -\TXN@delimiter@axis \TXN@safe
+ \else
+ \if \TXN@option \TXN@o@AreaTop \TXN@textus@flags
+ \TXN@assign \dimen@ = {TXN@area[\TXN@area@ind]first@line@height}%
+ \advance \TXN@dim@a by -\dimen@
+ \else
+ \if \TXN@option \TXN@o@AreaBottom \TXN@textus@flags
+ \TXN@dim@a = \TXN@dim@b
+ \fi
+ \fi
+ \fi
+ \TXN@dim@b = \prevdepth
+ \kern -\TXN@dim@a
+ \ht\TXN@marginalia = \z@
+ \dp\TXN@marginalia = \z@
+ \nointerlineskip
+ \box \TXN@marginalia
+ \nointerlineskip
+ \kern \TXN@dim@a
+ \kern \TXN@area@wrap@skip \TXN@safe
+ \prevdepth = \TXN@dim@b
+}
+% \end{macrocode}
+% \subsubsection{Building the object}
+% \begin{macrocode}
+\def \TXN@process@area@textus #1{%
+%<debug> \TXN@trace \TXN@process@area@textus
+ \TXN@make@object@textus {#1}%
+ \TXN@assign \dimen@ = {TXN@textus[\TXN@theTextus]offset@\TXN@theFolio}%
+ \TXN@assign \TXN@dim@a = {TXN@area[\TXN@area@ind]leftedge}%
+ \advance \TXN@dim@a by \dimen@
+ \TXN@assign \TXN@dim@b = {TXN@area[\TXN@area@ind]rightedge}%
+ \advance \TXN@dim@b by \dimen@
+ \TXN@SimpleList \TXN@line@fields \z@
+ \edef \TXN@temp {\the\TXN@dim@a,\the\TXN@dim@b}%
+ \TXN@SimpleList@append \TXN@line@fields \TXN@temp
+ \if \TXN@option \TXN@o@AreaExtend \TXN@textus@flags
+ \TXN@get@Locus {textus[#1]}{t}%
+ \TXN@assign \dimen@@ = {TXN@textus[\TXN@theTextus]offset@\TXN@theFolio}%
+ \advance \dimen@ by -\dimen@@
+ \TXN@assign \count@ = {TXN@textus[#1]side@\TXN@theFolio}%
+ \ifnum \count@ = \TXN@textleftedge \TXN@safe
+ \if \TXN@option \TXN@o@AlignedRight \TXN@textus@flags
+ \advance \dimen@ by -\wd\TXN@object@textus
+ \fi
+ \fi
+ \edef \TXN@area@textus@leftedge {\the\dimen@}%
+ \ifnum \count@ = \TXN@textrightedge \TXN@safe
+ \if \TXN@option \TXN@o@AlignedRight \TXN@textus@flags
+ \else
+ \advance \dimen@ by \wd\TXN@object@textus
+ \fi
+ \fi
+ \edef \TXN@area@textus@rightedge {\the\dimen@}%
+ \fi
+ \TXN@move@to@marginalia {#1}{t}\TXN@object@textus
+}
+% \end{macrocode}
+% \subsection{Collecting information about the area contents}
+%
+% \subsubsection {A line within \textit{Prosa}}
+% \begin{macrocode}
+\def \TXN@process@area@line@Prosa #1{%
+%<debug> \TXN@trace \TXN@process@area@line@Prosa
+ \TXN@build@active@areas@list
+ \loop
+ \TXN@get@next@area
+ \ifnum \TXN@counter > \z@
+ \TXN@assign \dimen@ = {TXN@area[\TXN@c]height}%
+ \ifdim \dimen@ = \z@
+ \advance \dimen@ by \ht#1\relax
+ \TXN@xdef {TXN@area[\TXN@c]first@line@height}{\the\ht#1}%
+ \fi
+ \advance \dimen@ by \baselineskip
+ \TXN@xdef {TXN@area[\TXN@c]height}{\the\dimen@}%
+ \TXN@xdef {TXN@area[\TXN@c]depth}{\the\dp#1}%
+ \TXN@assign \dimen@ = {TXN@area[\TXN@c]rightedge}%
+ \ifdim \dimen@ < \TXN@measure
+ \TXN@xdef {TXN@area[\TXN@c]rightedge}{\the\TXN@measure}%
+ \fi
+ \TXN@assign \dimen@ = {TXN@area[\TXN@c]leftedge}%
+ \ifdim \dimen@ < \z@
+ \else
+ \TXN@xdef {TXN@area[\TXN@c]leftedge}{\z@}%
+ \fi
+ \repeat
+}
+% \end{macrocode}
+% \subsubsection {A line within \textit{Versus}}
+% \begin{macrocode}
+\def \TXN@process@area@line@Versus #1{%
+%<debug> \TXN@trace \TXN@process@area@line@Versus
+ \TXN@build@active@areas@list
+ \TXN@get@next@area
+ \@whilenum \TXN@counter > \z@ \do {%
+ \TXN@xdef {TXN@area[\TXN@c]spatium}{}%
+ \if \TXN@empty {TXN@area[\TXN@c]stropha}%
+ \else
+ \begingroup
+ \expandafter \TXN@spatium@vertical \expandafter {%
+ \csname TXN@area[\TXN@c]stropha\endcsname}%
+ \endgroup
+ \TXN@xdef {TXN@area[\TXN@c]stropha}{}%
+ \fi
+ \TXN@assign \dimen@ = {TXN@area[\TXN@c]height}%
+ \dimen@@ = \ht#1\relax
+ \ifdim \dimen@ = \z@
+ \advance \dimen@ by \dimen@@
+ \TXN@xdef {TXN@area[\TXN@c]first@line@height}{\the\dimen@@}%
+ \else
+ \advance \dimen@@ by \dp#1\relax
+ \ifdim \dimen@@ < \baselineskip
+ \dimen@@ = \baselineskip
+ \fi
+ \advance \dimen@ by \dimen@@
+ \fi
+ \TXN@xdef {TXN@area[\TXN@c]height}{\the\dimen@}%
+ \TXN@assign \dimen@ = {TXN@area[\TXN@c]rightedge}%
+ \ifdim \wd#1 > \dimen@
+ \TXN@xdef {TXN@area[\TXN@c]rightedge}{\the\wd#1}%
+ \fi
+ \TXN@xdef {TXN@area[\TXN@c]depth}{\the\dp#1}%
+ \TXN@assign \dimen@ = {TXN@area[\TXN@c]leftedge}%
+ \TXN@assign \dimen@@ = {TXN@textus[\TXN@theTextus]shift}%
+ \ifdim \dimen@@ < \dimen@
+ \TXN@xdef {TXN@area[\TXN@c]leftedge}{\the\dimen@@}%
+ \fi
+ \TXN@get@next@area
+ }%
+}
+% \end{macrocode}
+% \subsubsection {Vertical spacing}
+% \begin{macrocode}
+\def \TXN@process@area@spatium #1{%
+%<debug> \TXN@trace \TXN@process@area@spatium
+ \TXN@build@active@areas@list
+ \TXN@get@next@area
+ \@whilenum \TXN@counter > \z@ \do {%
+ \ifx \TXN@safe #1\relax
+ \dimen@ = \z@
+ \else
+ \dimen@ = #1\relax
+ \if \TXN@empty {TXN@area[\TXN@c]spatium}%
+ \TXN@xdef {TXN@area[\TXN@c]spatium}{\the\dimen@}%
+ \else
+ \TXN@assign \dimen@@ = {TXN@area[\TXN@c]spatium}%
+ \ifdim \dimen@ > \dimen@@
+ \TXN@xdef {TXN@area[\TXN@c]spatium}{\the\dimen@}%
+ \advance \dimen@ by -\dimen@@
+ \else
+ \dimen@ = \z@
+ \fi
+ \fi
+ \fi
+ \TXN@assign \dimen@@ = {TXN@area[\TXN@c]height}%
+ \ifdim \dimen@@ > \z@
+ \advance \dimen@@ by \dimen@
+ \fi
+ \TXN@xdef {TXN@area[\TXN@c]height}{\the\dimen@@}%
+ \TXN@get@next@area
+ }%
+}
+% \end{macrocode}
+% \section{The \TXN@cmd{numerus} class}
+% \subsection {Setting the \TXN@cmd{progressio} attribute}
+%
+% The internal representation of the attribute is a \textit{SimpleList},
+% termined by |\\{\@M}|.\\
+% The default, used if the attribute is not defined, is numbering
+% every fifth line.
+% \begin{macrocode}
+\def \TXN@default@progressio {\\{5}\\{\@M}}
+\def \TXN@zero@progressio {\\{0}\\{\@M}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\TXN@setProgressio@numerus}[2][0]{%
+ \TXN@counter = #1\relax
+ \TXN@counter@a = \z@
+ \TXN@SimpleList \TXN@SimpleList@work \z@
+ \let \\ = \relax
+ \TXN@setProgressio@numerus@bis #2\TXN@nil
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setProgressio@numerus@bis #1{%
+ \let \next = \TXN@setProgressio@numerus@bis
+ \ifx \TXN@nil #1\relax
+ \let \next = \TXN@setProgressio@numerus@ter
+ \else
+ \ifx <#1\relax
+ \TXN@SimpleList@append \TXN@SimpleList@work {<}%
+ \else
+ \ifx \\#1\relax
+ \let \next = \TXN@setProgressio@numerus@quater
+ \else
+ \ifnum #1 = \z@
+ \ifnum \TXN@counter@a > \z@
+ \PackageError {TEXNIKA}
+ {Progressio: non-positive not first}
+ {}%
+ \fi
+ \fi
+ \count@ = #1\relax
+ \ifnum \count@ < \z@
+ \count@ = -\count@
+ \fi
+ \TXN@SimpleList@append
+ \TXN@SimpleList@work {\the\count@}%
+ \advance \TXN@counter@a by \@ne
+ \fi
+ \fi
+ \fi
+ \next
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setProgressio@numerus@ter {%
+ \TXN@gdef {TXN@numerus[\TXN@c]index}{0}%
+ \ifnum \TXN@counter@a > \z@
+ \ifx \empty \TXN@SimpleList@work
+ \else
+ \TXN@SimpleList@append \TXN@SimpleList@work {\@M}%
+ \let \\ = \relax
+ \TXN@edef {TXN@numerus[\TXN@c]progressio}{\TXN@SimpleList@work}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif \ifTXN@fragment@set
+\newif \ifTXN@folded@set
+\def \TXN@setProgressio@numerus@quater #1\TXN@nil{%
+ \define@key {progressio}{f}[ff]{\TXN@setProgressio@numerus@quinquies##1}%
+ \define@key {progressio}{l}[ll]{\TXN@setProgressio@numerus@quinquies##1}
+ \define@key {progressio}{fl}[fl]{\TXN@setProgressio@numerus@quinquies##1}
+ \define@key {progressio}{lf}[lf]{\TXN@setProgressio@numerus@quinquies##1}
+ \define@key {progressio}{a}[aa]{\TXN@setProgressio@numerus@quinquies##1}
+ \define@key {progressio}{F}[FF]{\TXN@setProgressio@numerus@sexies##1}%
+ \define@key {progressio}{L}[LL]{\TXN@setProgressio@numerus@sexies##1}%
+ \define@key {progressio}{A}[AA]{\TXN@setProgressio@numerus@sexies##1}%
+ \let \KV@errx = \TXN@keyval@error
+ \TXN@fragment@setfalse
+ \TXN@folded@setfalse
+ \def \TXN@temp {}%
+ \def \TXN@temp@bis {}%
+ \setkeys {progressio}{#1}%
+ \ifTXN@fragment@set
+ \else
+ \edef \TXN@temp {l\TXN@temp}%
+ \edef \TXN@temp@bis {l\TXN@temp@bis}%
+ \fi
+ \ifTXN@folded@set
+ \else
+ \edef \TXN@temp {L\TXN@temp}%
+ \edef \TXN@temp@bis {L\TXN@temp@bis}%
+ \fi
+ \TXN@edef {TXN@numerus[\TXN@c]fragment@recto}{\TXN@temp}%
+ \TXN@edef {TXN@numerus[\TXN@c]fragment@verso}{\TXN@temp@bis}%
+ \TXN@setProgressio@numerus@ter
+}
+\def \TXN@setProgressio@numerus@quinquies #1#2{%
+ \edef \TXN@temp {\TXN@temp #1}%
+ \edef \TXN@temp@bis {\TXN@temp@bis #2}%
+ \TXN@fragment@settrue
+}
+\def \TXN@setProgressio@numerus@sexies #1#2{%
+ \edef \TXN@temp {\TXN@temp #1}%
+ \edef \TXN@temp@bis {\TXN@temp@bis #2}%
+ \TXN@folded@settrue
+}
+% \end{macrocode}
+% \subsection{Processing the command}
+%
+% \begin{macrocode}
+\newcommand {\numerus} {%
+ \ifx \empty \TXN@attribute@name
+ \expandafter \TXN@numerus
+ \else
+ \def \TXN@subclass@name {numerus}%
+ \def \TXN@subclass@number {x}%
+ \def \TXN@temp {TXN}%
+ \expandafter \TXN@attribute@set
+ \fi
+}
+%\let \numeri = \numerus
+\let \numerum = \numerus
+% \end{macrocode}
+%
+% Normal case
+%
+% \begin{macrocode}
+\def \TXN@numerus {%
+%<debug> \TXN@trace \TXN@numerus
+ \@ifstar {\TXN@counter=\@ne \TXN@numerus@bis}%
+ {\TXN@counter=\z@ \TXN@numerus@bis}%
+}
+\newcommand {\TXN@numerus@bis}[2][0]{%
+% \end{macrocode}
+% Split the argument into components
+% \begin{macrocode}
+ \TXN@process@numerus@argument {#2}%
+ \ifx \empty \TXN@numerus@error
+ \else
+ \PackageError {TEXNIKA}
+ {Error in argument of a \protect\numerus\space subclass}
+ {}%
+ \fi
+% \end{macrocode}
+% Check whether starred or unstarred
+% \begin{macrocode}
+ \ifTXN@withinAd
+ \ifnum \TXN@counter = \@ne
+ \PackageError {TEXNIKA}
+ {You cannot use the *-form of \protect\numerus within an %
+ \protect\ad\space command}%
+ {}%
+ \fi
+ \let \TXN@process@numerus@next = \TXN@process@numerus@ad
+ \else
+ \let \TXN@process@numerus@next = \TXN@process@numerus@nostar
+ \ifnum \TXN@counter = \@ne
+ \def \TXN@parameter {#2}%
+ \ifx \empty \TXN@parameter
+ \TXN@def {TXN@numerus[#1]printing}{2}%
+ \let \TXN@process@numerus@next = \@gobble
+ \else
+ \let \TXN@process@numerus@next = \TXN@process@numerus@star
+ \fi
+ \fi
+ \fi
+ \TXN@process@numerus@next {#1}%
+}
+% \end{macrocode}
+% \subsubsection{Starred form}
+% \begin{macrocode}
+\def \TXN@process@numerus@star #1{%
+%<debug> \TXN@trace [#1] \TXN@process@numerus@star
+ \ifTXN@withinProsa
+ \ifnum \TXN@pass = \tw@
+ \if \TXN@num {TXN@numerus[#1]milestone} = \z@
+ \TXN@process@numerus@star@bis {#1}%
+ \else
+ \ifTXN@replay
+ \TXN@process@numerus@star@bis {#1}%
+ \fi
+ \fi
+ \else
+ \TXN@process@numerus@star@bis {#1}%
+ \if \TXN@empty {TXN@numerus[#1]side@\TXN@theFolio}%
+ \else
+ \if \TXN@num {TXN@numerus[#1]milestone} = \@ne
+ \TXN@toks@a = {\numerus*[#1]}%
+ \ifx \empty \TXN@numerus@value
+ \TXN@toks@b = {{}}%
+ \else
+ \TXN@counter = \TXN@c@numerus{#1}%
+ \ifx \empty \TXN@numerus@set
+ \TXN@toks@b = \expandafter {\expandafter{\TXN@numerus@value}}%
+ \else
+ \TXN@toks@b = \expandafter
+ {\expandafter{\expandafter =\the\TXN@counter}}%
+ \fi
+ \fi
+ \edef \TXN@temp {\toks@={\the\TXN@toks@a \the\TXN@toks@b}}%
+ \TXN@temp
+ \TXN@save@command
+ \fi
+ \fi
+ \fi
+ \else
+ \TXN@process@numerus@star@bis {#1}%
+ \fi
+}
+\def \TXN@process@numerus@star@bis #1{%
+%<debug> \TXN@trace [#1] \TXN@process@numerus@star@bis
+ \TXN@xdef {TXN@numerus[#1]head}{\TXN@numerus@head}%
+ \TXN@xdef {TXN@numerus[#1]tail}{\TXN@numerus@tail}%
+ \TXN@xdef {TXN@numerus[#1]separator}{\TXN@numerus@separator}%
+% \end{macrocode}
+% Compute the first value
+% \begin{macrocode}
+ \ifx \empty \TXN@numerus@value
+ \TXN@gdef {TXN@numerus[#1]first@value}{}%
+ \else
+ \ifx \empty \TXN@numerus@sign
+ \TXN@counter = \TXN@numerus@value
+ \TXN@xdef {TXN@numerus[#1]first@value}{\TXN@c}%
+ \else
+ \TXN@counter = \TXN@c@numerus{#1}%
+ \TXN@counter@a = \TXN@numerus@value \relax
+ \if -\TXN@numerus@sign\relax
+ \TXN@counter@a = -\TXN@counter@a
+ \fi
+ \advance \TXN@counter by \TXN@counter@a
+ \TXN@xdef {TXN@numerus[#1]first@value}{\TXN@c}%
+ \fi
+ \ifx \empty \TXN@numerus@set
+ \else
+ \global \TXN@c@numerus{#1}= \TXN@counter
+ \ifnum \TXN@counter > \z@
+ \if \TXN@num {TXN@numerus[#1]milestone} = \z@
+ \TXN@caput@numerus {#1}%
+ \else
+ \ifTXN@withinProsa
+ \ifTXN@replay
+ \TXN@caput@numerus {#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \TXN@xdef {TXN@numerus[#1]previous}{}%
+ \fi
+ \fi
+% \end{macrocode}
+% Compute the second value
+% \begin{macrocode}
+ \ifx \empty \TXN@numerus@second@value
+ \TXN@gdef {TXN@numerus[#1]second@value}{}%
+ \else
+ \ifx \empty \TXN@numerus@secondsign
+ \TXN@counter = \TXN@numerus@second@value \TXN@safe
+ \TXN@xdef {TXN@numerus[#1]second@value}{\TXN@c}%
+ \else
+ \TXN@counter = \TXN@c@numerus{#1}%
+ \TXN@counter@a = \TXN@numerus@second@value \TXN@safe
+ \if -\TXN@numerus@secondsign \relax
+ \TXN@counter@a = -\TXN@counter@a
+ \fi
+ \advance \TXN@counter by \TXN@counter@a
+ \TXN@xdef {TXN@numerus[#1]second@value}{\TXN@c}%
+ \fi
+ \ifx \empty \TXN@numerus@set
+ \else
+ \global \TXN@c@numerus{#1}= \TXN@counter
+ \ifnum \TXN@counter > \z@
+ \if \TXN@num {TXN@numerus[#1]milestone} = \z@
+ \TXN@caput@numerus {#1}%
+ \else
+ \ifTXN@withinProsa
+ \ifTXN@replay
+ \TXN@caput@numerus {#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \TXN@xdef {TXN@numerus[#1]previous}{}%
+ \fi
+ \fi
+% \end{macrocode}
+% If in-line, typeset the number.
+% \begin{macrocode}
+ \if \TXN@empty {TXN@numerus[#1]side@\TXN@theFolio}%
+ \TXN@make@object@numerus {#1}{*}%
+ \leavevmode \box \TXN@object@numerus
+ \TXN@gdef {TXN@numerus[#1]first@value}{}%
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Normal form}
+% \begin{macrocode}
+\def \TXN@process@numerus@nostar #1{%
+%<debug> \TXN@trace [#1]\TXN@process@numerus@nostar
+ \edef \TXN@temp {%
+ \TXN@numerus@second@value
+ \TXN@numerus@secondsign
+ \TXN@numerus@separator
+ \TXN@numerus@head
+ \TXN@numerus@tail
+ \TXN@numerus@set
+ }%
+ \ifx \empty \TXN@temp
+ \else
+ \PackageError {TEXNIKA}
+ {The argument of the normal form of the command\MessageBreak
+ contains data that is allowed only in the *-form}
+ {The argument of the normal form consists of just a single value}%
+ \fi
+ \ifTXN@withinProsa
+ \TXN@process@numerus@nostar@bis {#1}%
+ \if \TXN@empty {TXN@numerus[#1]side@\TXN@theFolio}%
+ \else
+ \TXN@toks@a = {\numerus[#1]}%
+ \ifx \empty \TXN@numerus@value
+ \TXN@toks@b = {{}}%
+ \else
+ \TXN@toks@b = \expandafter {\expandafter{\the\TXN@counter}}%
+ \fi
+ \edef \TXN@temp {\toks@ = {\the\TXN@toks@a \the\TXN@toks@b}}%
+ \TXN@temp
+ \if \TXN@num {TXN@numerus[#1]milestone} = \@ne
+ \TXN@save@command
+ \fi
+ \fi
+ \else
+ \TXN@process@numerus@nostar@bis {#1}%
+ \fi
+}
+\def \TXN@process@numerus@nostar@bis #1{%
+%<debug> \TXN@trace [#1]\TXN@process@numerus@nostar@bis
+ \count@ = \TXN@c@numerus{#1}%
+ \edef \TXN@save@counter {\the\count@}%
+ \ifx \empty \TXN@numerus@value
+ \TXN@def {TXN@numerus[#1]printing}{0}%
+ \else
+ \TXN@def {TXN@numerus[#1]printing}{1}%
+ \ifx \empty \TXN@numerus@sign
+ \TXN@counter = \TXN@numerus@value \TXN@safe
+ \TXN@def {TXN@numerus[#1]frozen}{0}%
+ \else
+ \TXN@counter = \TXN@c@numerus{#1}%
+ \TXN@counter@a = \TXN@numerus@value \TXN@safe
+ \TXN@sw@true
+ \ifnum \TXN@counter@a = \z@
+ \if -\TXN@numerus@sign
+ \TXN@sw@false
+ \fi
+ \fi
+ \ifTXN@sw
+ \if -\TXN@numerus@sign
+ \TXN@counter@a = -\TXN@counter@a
+ \fi
+ \advance \TXN@counter by \TXN@counter@a
+ \TXN@def {TXN@numerus[#1]frozen}{0}%
+ \else
+ \TXN@def {TXN@numerus[#1]frozen}{1}%
+ \fi
+ \fi
+ \TXN@sw@false
+ \if \TXN@num {TXN@numerus[#1]milestone} = \z@
+ \TXN@sw@true
+ \else
+ \if \TXN@relax {TXN@numerus[#1]progressio}%
+ \else
+ \if \TXN@x {TXN@numerus[#1]progressio}\TXN@zero@progressio
+ \TXN@sw@true
+ \fi
+ \fi
+ \fi
+ \ifTXN@sw
+ \global \TXN@c@numerus{#1}= \TXN@counter
+ \else
+ \ifTXN@replay
+ \global \TXN@c@numerus{#1}= \TXN@counter
+ \fi
+ \fi
+ \ifnum \TXN@counter > \z@
+ \if \TXN@num {TXN@numerus[#1]milestone} = \z@
+ \TXN@caput@numerus {#1}%
+ \else
+ \ifTXN@replay
+ \ifTXN@withinProsa
+ \TXN@caput@numerus {#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \TXN@xdef {TXN@numerus[#1]previous}{}%
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Processing the argument of \TXN@cmd{numerus}}
+%
+% \begin{macrocode}
+\def \TXN@process@numerus@argument #1{%
+ \gdef \TXN@numerus@value {}%
+ \gdef \TXN@numerus@second@value {}%
+ \gdef \TXN@numerus@head {}%
+ \gdef \TXN@numerus@tail {}%
+ \gdef \TXN@numerus@separator {}%
+ \gdef \TXN@numerus@sign {}%
+ \gdef \TXN@numerus@secondsign {}%
+ \gdef \TXN@numerus@set {}%
+ \gdef \TXN@numerus@error {}%
+% \end{macrocode}
+%
+% Check for special case
+%
+% \begin{macrocode}
+ \count@ = \z@
+ \ifTXN@withinAd
+ \TXN@process@numerus@argument@bis#1\TXN@nil
+ \else
+ \begingroup
+ \def \value##1{\the\csname c@##1\endcsname}%
+ \xdef \TXN@gtemp {#1}%
+ \endgroup
+ \expandafter
+ \TXN@process@numerus@argument@bis\TXN@gtemp\TXN@nil
+ \fi
+}
+% \end{macrocode}
+% Scan the argument. |\count@| is the token counter.
+% \begin{macrocode}
+\def \TXN@process@numerus@argument@bis #1{%
+ \advance \count@ by \@ne
+ \let \next = \TXN@process@numerus@argument@bis
+ \ifx \TXN@nil #1\relax
+ \let \next = \TXN@process@numerus@argument@ter
+ \else
+ \def \TXN@temp {#1}%
+ \ifx \empty \TXN@temp
+ \TXN@isdigitfalse
+ \else
+ \TXN@check@start@of@number{#1}%
+ \fi
+ \ifTXN@isdigit
+ \ifx \empty \TXN@numerus@tail
+ \ifx \empty \TXN@numerus@separator
+ \xdef \TXN@numerus@value {\TXN@numerus@value#1}%
+ \else
+ \xdef \TXN@numerus@second@value {\TXN@numerus@second@value#1}%
+ \fi
+ \else
+ \xdef \TXN@numerus@tail {\TXN@numerus@tail#1}%
+ \fi
+ \else
+ \ifx \empty \TXN@numerus@value
+ \ifTXN@issign
+ \ifx \empty \TXN@numerus@sign
+ \gdef \TXN@numerus@sign {#1}%
+ \else
+ \gdef \TXN@numerus@error {1}%
+ \fi
+ \else
+ \ifx =#1\relax
+ \ifnum \count@ = \@ne
+ \ifTXN@withinAd
+ \gdef \TXN@numerus@error {1}%
+ \else
+ \gdef \TXN@numerus@set {1}%
+ \fi
+ \else
+ \xdef \TXN@numerus@head
+ {\TXN@numerus@head\TXN@numerus@sign#1}%
+ \fi
+ \else
+ \xdef \TXN@numerus@head
+ {\TXN@numerus@head\TXN@numerus@sign#1}%
+ \fi
+ \ifx \empty \TXN@numerus@sign
+ \else
+ \gdef \TXN@numerus@sign {}%
+ \fi
+ \fi
+ \else
+ \ifx \empty \TXN@numerus@tail
+ \ifx \empty \TXN@numerus@separator
+ \gdef \TXN@numerus@separator {#1}%
+ \else
+ \ifx \empty \TXN@numerus@second@value
+ \ifTXN@issign
+ \ifx \empty \TXN@numerus@secondsign
+ \gdef \TXN@numerus@secondsign {#1}%
+ \else
+ \gdef \TXN@numerus@error {1}%
+ \fi
+ \else
+ \xdef \TXN@numerus@tail {\TXN@numerus@separator#1}%
+ \gdef \TXN@numerus@separator {}%
+ \fi
+ \else
+ \xdef \TXN@numerus@tail {\TXN@numerus@tail#1}%
+ \fi
+ \fi
+ \else
+ \xdef \TXN@numerus@tail {\TXN@numerus@tail#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \next
+}
+% \end{macrocode}
+% Final checks
+% \begin{macrocode}
+\def \TXN@process@numerus@argument@ter {%
+ \ifx \empty \TXN@numerus@separator
+ \else
+ \ifx \empty \TXN@numerus@second@value
+ \xdef \TXN@numerus@tail {%
+ \TXN@numerus@separator \TXN@numerus@tail}%
+ \gdef \TXN@numerus@separator {}%
+ \fi
+ \fi
+ \ifx \empty \TXN@numerus@value
+ \ifx \empty \TXN@numerus@head
+ \else
+% \end{macrocode}
+% If there is no value, a string is considered to be part of the tail.
+% \begin{macrocode}
+ \xdef \TXN@numerus@tail {\TXN@numerus@head}%
+ \xdef \TXN@numerus@head {}%
+ \fi
+ \else
+ \ifnum \TXN@numerus@value = \z@
+% \def \TXN@numerus@sign {+}%
+ \fi
+ \fi
+ \ifx \empty \TXN@numerus@second@value
+ \else
+ \ifnum \TXN@numerus@second@value = \z@
+ \gdef \TXN@numerus@secondsign {+}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \subsection{Attaching the line numbers}
+% \begin{macrocode}
+\def \TXN@process@line@numbers {%
+%<debug> \TXN@trace \TXN@process@line@numbers
+% \end{macrocode}
+% Loop through all the numbers
+% \begin{macrocode}
+ \count@ = \m@ne
+ \loop
+ \xdef \TXN@loop {\the\count@}%
+ \ifnum \count@ < \TXN@numerus@max
+ \advance \count@ by \@ne
+ \TXN@let \TXN@test = {TXN@numerus[\the\count@]side@\TXN@theFolio}%
+ \ifx \empty \TXN@test
+ \else
+ \ifnum \TXN@test < \z@
+ \else
+ \TXN@let \TXN@test = {TXN@numerus[\the\count@]first@value}%
+ \ifx \empty \TXN@test
+ \expandafter
+ \TXN@process@line@numbers@nostar \expandafter{\the\count@}%
+ \else
+ \expandafter
+ \TXN@process@line@numbers@star \expandafter{\the\count@}%
+ \fi
+ \fi
+ \fi
+ \count@ = \TXN@loop
+ \advance \count@ by \@ne
+ \repeat
+}
+% \end{macrocode}
+% \subsubsection{Normal form}
+% \begin{macrocode}
+\def \TXN@numerus@pending {0}
+\def \TXN@process@line@numbers@nostar #1{%
+%<debug> \TXN@trace [#1]\TXN@process@line@numbers@nostar
+ \TXN@sw@false
+ \if \TXN@empty {TXN@numerus[#1]classes@\TXN@theFolio}%
+ \ifx \empty \TXN@line@class
+ \ifTXN@withinVersus
+ \TXN@process@line@numbers@check@versus {#1}%
+ \else
+ \TXN@sw@true
+ \fi
+ \fi
+ \else
+ \TXN@process@line@numbers@nostar@classes {#1}%
+ \fi
+ \ifTXN@sw
+ \TXN@process@line@numbers@nostar@bis {#1}%
+ \fi
+}
+% \end{macrocode}
+% Check if the line number should be printed for the line.
+% If so, set |\TXN@sw|.
+% \begin{macrocode}
+\def \TXN@process@line@numbers@check@versus #1{%
+%<debug> \TXN@trace [#1] \TXN@process@line@numbers@check@versus
+ \TXN@sw@false
+ \edef \TXN@temp {\@nameuse{TXN@numerus[#1]fragment@\TXN@theFolio}}%
+ \@tempswatrue
+ \ifdim \PTR@split@skip = \z@
+ \ifdim \PTR@next@split@skip = \z@
+ \@tempswafalse
+ \fi
+ \fi
+ \if@tempswa
+% \end{macrocode}
+% A fragment of a split line
+% \begin{macrocode}
+ \if \TXN@option a\TXN@temp
+ \TXN@sw@true
+ \else
+ \if \TXN@option f\TXN@temp
+ \ifdim \PTR@split@skip = \z@
+ \TXN@sw@true
+ \fi
+ \else
+ \if \TXN@option l\TXN@temp
+ \ifdim \PTR@next@split@skip = \z@
+ \TXN@sw@true
+ \fi
+ \fi
+ \fi
+ \fi
+ \else
+ \ifx \empty \PTR@folded@line
+ \TXN@sw@true
+ \else
+% \end{macrocode}
+% A folded line
+% \begin{macrocode}
+ \if \TXN@option A\TXN@temp
+ \TXN@sw@true
+ \else
+ \if \TXN@option F\TXN@temp
+ \ifnum \PTR@folded@line = \@ne
+ \TXN@sw@true
+ \fi
+ \else
+ \if \TXN@option L\TXN@temp
+ \ifnum \PTR@folded@line = \z@
+ \TXN@sw@true
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@process@line@numbers@nostar@classes #1{%
+%<debug> \TXN@trace [#1] \TXN@process@line@numbers@nostar@special
+ \edef \TXN@temp {\@nameuse{TXN@numerus[#1]classes@\TXN@theFolio}}%
+ \edef \TXN@temp@bis {\TXN@line@class}%
+ \ifx \empty \TXN@temp@bis
+ \def \TXN@temp@bis {t}%
+ \fi
+ \expandafter
+ \if \expandafter \TXN@option \TXN@temp@bis\TXN@temp
+ \ifx \empty \TXN@line@class
+ \ifTXN@withinVersus
+ \TXN@process@line@numbers@check@versus {#1}%
+ \else
+ \TXN@sw@true
+ \fi
+ \else
+ \TXN@sw@true
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@process@line@numbers@nostar@bis #1{%
+%<debug> \TXN@trace [#1]\TXN@process@line@numbers@nostar@bis
+ \if \TXN@empty {TXN@numerus[#1]progressio}%
+ \let \TXN@progressio = \TXN@default@progressio
+ \TXN@gdef {TXN@numerus[#1]index}{0}%
+ \else
+ \def\\{\noexpand\\}%
+ \edef \TXN@progressio {\@nameuse {TXN@numerus[#1]progressio}}%
+ \def\\{}%
+ \fi
+ \TXN@get@progressio {#1}%
+ \ifx \empty \TXN@line@increment
+ \PackageError {TEXNIKA}
+ {Sanity check failed (\protect\TXN@line@increment #1)}
+ {Please report the error to the author}%
+ \fi
+ \ifnum \TXN@line@increment = \z@
+ \else
+ \TXN@process@line@numbers@nostar@ter #1\relax
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@process@line@numbers@nostar@ter #1{%
+%<debug> \TXN@trace [#1]\TXN@process@line@numbers@nostar@ter
+ \@tempcnta = \TXN@c@numerus{#1}%
+ \TXN@counter = \@tempcnta
+ \if \TXN@empty {TXN@numerus[#1]previous@incr}%
+ \else
+ \TXN@assign \count@ = {TXN@numerus[#1]previous@incr}%
+ \ifnum \TXN@line@increment = \count@
+ \else
+ \count@ = \TXN@counter
+ \advance \count@ by \m@ne
+ \TXN@xdef {TXN@numerus[#1]previous}{\the\count@}%
+ \fi
+ \fi
+ \TXN@xdef {TXN@numerus[#1]previous@incr}{\TXN@line@increment}%
+ \if \TXN@empty {TXN@numerus[#1]previous}%
+ \@tempcntb = \TXN@counter
+ \divide \@tempcntb by \TXN@line@increment \TXN@safe
+ \multiply \@tempcntb by \TXN@line@increment \TXN@safe
+ \ifnum \@tempcntb = \TXN@counter
+ \advance \@tempcntb by -\TXN@line@increment
+ \fi
+ \else
+ \TXN@assign \@tempcntb = {TXN@numerus[#1]previous}%
+ \fi
+ \ifnum \@tempcntb < \z@
+ \TXN@make@object@numerus {#1}{n}%
+ \TXN@move@to@marginalia {#1}{n}\TXN@object@numerus
+ \TXN@assign \count@ = {TXN@numerus[#1]previous}%
+ \ifdim \wd\TXN@object@numerus = \z@
+ \advance \count@ by -1000000\relax
+ \else
+ \ifnum \count@ < \z@
+ \@tempcnta = \z@
+ \loop
+ \ifnum \count@ < -1000000\relax
+ \advance \count@ by 1000000\relax
+ \advance \@tempcnta by \@ne
+ \repeat
+ \ifnum \@tempcnta > \z@
+ \TXN@Warning* {The line number has been moved \MessageBreak
+ forward more than once}%
+ \fi
+ \count@ = -\count@
+ \TXN@decr \TXN@numerus@pending
+ \fi
+ \fi
+ \TXN@xdef {TXN@numerus[#1]previous}{\the\count@}%
+ \else
+ \TXN@process@line@numbers@nostar@quater #1\relax
+ \fi
+ \if \TXN@num {TXN@numerus[#1]frozen} = \z@
+ \TXN@advance@line@counter {#1}%
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@process@line@numbers@nostar@quater #1{%
+%<debug> \TXN@trace [#1]\TXN@process@line@numbers@nostar@quater
+ \advance \@tempcnta by -\@tempcntb
+ \edef \TXN@line@displacement {\the\@tempcnta}%
+ \@tempcnta = \TXN@line@displacement \TXN@safe
+ \@tempcntb = \TXN@line@increment \TXN@safe
+ \divide \@tempcnta by \@tempcntb
+ \multiply \@tempcnta by \@tempcntb
+ \@tempcntb = \TXN@line@displacement \TXN@safe
+ \ifnum \@tempcnta = \@tempcntb
+ \TXN@xdef {TXN@numerus[#1]index}{\TXN@progressio@new@index}%
+ \TXN@xdef {TXN@numerus[#1]previous}{\the\TXN@counter}%
+ \if \TXN@num {TXN@numerus[#1]printing} = \z@
+ \else
+ \if \TXN@num {TXN@numerus[#1]printing} = \tw@
+ \TXN@def {TXN@numerus[#1]printing}{1}%
+ \else
+ \TXN@make@object@numerus {#1}{n}%
+ \TXN@move@to@marginalia {#1}{n}\TXN@object@numerus
+ \ifdim \wd\TXN@object@numerus = \z@
+ \if \TXN@num {TXN@numerus[#1]printing} = \@ne
+ \TXN@xdef {TXN@numerus[#1]previous}{-\the\TXN@counter}%
+ \TXN@incr \TXN@numerus@pending
+ \fi
+ \else
+ \def \TXN@numerus@pending {0}%
+ \fi
+ \fi
+ \fi
+ \else
+ \if \TXN@num {TXN@numerus[#1]printing} = \tw@
+ \TXN@def {TXN@numerus[#1]printing}{1}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@progressio #1{%
+%<debug> \TXN@trace [#1] \TXN@get@progressio
+ \def \TXN@line@increment {}%
+ \TXN@assign \@tempcnta = {TXN@numerus[#1]index}%
+ \advance \@tempcnta by \@ne
+ \@tempcntb = \z@
+ \def\\##1{%
+ \advance \@tempcntb by \@ne
+ \ifnum \@tempcnta = \@tempcntb
+ \ifx <##1\relax
+ \@tempcnta = \@ne
+ \else
+ \ifnum ##1 = \@M
+ \advance \@tempcnta by \m@ne
+ \fi
+ \fi
+ \fi
+ }%
+ \TXN@progressio
+ \@tempcntb = \z@
+ \def\\##1{%
+ \advance \@tempcntb by \@ne
+ \ifnum \@tempcnta = \@tempcntb
+ \edef \TXN@line@increment {##1}%
+ \edef \TXN@progressio@new@index {\the\@tempcnta}%
+ \fi
+ }%
+ \TXN@progressio
+ \def\\{}%
+}
+% \end{macrocode}
+% \subsubsection{Starred form}
+% \begin{macrocode}
+\def \TXN@process@line@numbers@star #1{%
+%<debug> \TXN@trace [#1]\TXN@process@line@numbers@star
+ \TXN@sw@true
+ \ifTXN@withinVersus
+ \TXN@process@line@numbers@check@versus {#1}%
+ \fi
+ \ifTXN@sw
+ \TXN@make@object@numerus {#1}{*}%
+ \TXN@move@to@marginalia {#1}{*}\TXN@object@numerus
+ \if \TXN@x {TXN@numerus[#1]progressio}\TXN@zero@progressio
+ \else
+ \TXN@advance@line@counter{#1}%
+ \fi
+ \TXN@gdef {TXN@numerus[#1]first@value}{}%
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@advance@line@counter #1{%
+ \TXN@caput@numerus {#1}%
+ \global \advance \TXN@c@numerus{#1}by \@ne
+}
+% \end{macrocode}
+% \subsection{Building a \TXN@cmd{numerus} object}
+% \begin{macrocode}
+\def \TXN@make@object@numerus #1#2{%
+%<debug> \TXN@trace [#1]\TXN@make@object@numerus
+ \def \TXN@entity {numerus}%
+ \TXN@get@object@field@width {#1}%
+ \edef \TXN@flags {\@nameuse{TXN@numerus[#1]flagsModus@\TXN@theFolio}}%
+ \ifx *#2\relax
+ \edef \TXN@parm@i {\csname TXN@numerus[#1]first@value\endcsname}%
+ \edef \TXN@parm@ii {\csname TXN@numerus[#1]tail\endcsname}%
+ \edef \TXN@parm@iii {\csname TXN@numerus[#1]separator\endcsname}%
+ \edef \TXN@parm@iv {\csname TXN@numerus[#1]second@value\endcsname}%
+ \edef \TXN@parm@v {\csname TXN@numerus[#1]head\endcsname}%
+ \else
+ \edef \TXN@parm@i {\the\TXN@counter}%
+ \edef \TXN@parm@ii {}%
+ \edef \TXN@parm@iii {}%
+ \edef \TXN@parm@iv {}%
+ \edef \TXN@parm@v {}%
+ \fi
+ \setbox \TXN@object@numerus = \hbox {%
+ \@nameuse {TXN@numerus[#1]Facies}%
+ \TXN@parm@i
+ \TXN@parm@ii
+ \TXN@parm@iii
+ \TXN@parm@iv
+ \TXN@parm@v
+ }%
+% \end{macrocode}
+% Compute the width of the number's `tail' (for alignment).
+% \begin{macrocode}
+ \ifx *#2\relax
+ \setbox \z@ = \hbox {%
+ \@nameuse {TXN@numerus[#1]Facies}%
+ {\TXN@parm@i}%
+ \empty
+ {\TXN@parm@iii}%
+ {\TXN@parm@iv}%
+ {\TXN@parm@v}%
+ }%
+ \dimen@ = \wd\TXN@object@numerus
+ \advance \dimen@ by -\wd\z@
+ \if \TXN@option \TXN@o@AlignedTail \TXN@flags
+ \dimen@ = \z@
+ \fi
+ \else
+ \dimen@ = \z@
+ \fi
+ \edef \TXN@numerus@tail@width {\the\dimen@}%
+ \TXN@place@object@in@field \TXN@object@numerus
+}
+% \end{macrocode}
+% \section {The common code for \TXN@cmd{numerus} and \TXN@cmd{textus} objects}
+% \subsection {Setting the obiect within the field}
+% Set |\TXN@numerus@field@width| or |\TXN@textus@field@width| to
+% the field width or |\empty| if there is no field specification
+% for this entity.
+% \begin{macrocode}
+\newif \ifTXN@textus@zero@width
+\def \TXN@get@object@field@width #1{%
+%<debug> \TXN@trace \TXN@get@object@field@width
+ \if \TXN@empty {TXN@\TXN@entity[#1]field@\TXN@theFolio}%
+ \TXN@def {TXN@\TXN@entity @field@width}{}%
+ \else
+ \begingroup
+ \TXN@let \TXN@calc@exp = {TXN@\TXN@entity[#1]field@\TXN@theFolio}%
+ \TXN@calc@offset
+ \def \TXN@temp {textus}%
+ \ifx \TXN@entity \TXN@temp
+ \global \TXN@textus@zero@widthfalse
+ \TXN@sw@false
+ \if \TXN@option \TXN@o@FieldAutoWidth \TXN@textus@flags
+ \TXN@sw@true
+ \else
+ \ifdim \dimen@i = \z@
+ \TXN@sw@true
+ \global \TXN@textus@zero@widthtrue
+ \fi
+ \fi
+ \ifTXN@sw
+ \TXN@get@object@field@width@bis {#1}%
+ \global \advance \dimen@i by \dimen@iii
+ \fi
+ \fi
+ \endgroup
+ \TXN@edef {TXN@\TXN@entity @field@width}{\the\dimen@i}%
+ \fi
+}
+% \end{macrocode}
+% Returns the length of the longest line in |\dimen@i|
+% We do all processing inside a box to avoid any side effects.
+% \begin{macrocode}
+\newcommand {\TXN@skip@delimiter} [2] [1] {}
+\newcommand {\TXN@skip@escesc} [1] [] {}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@object@field@width@bis #1{%
+ \setbox \z@ = \vbox {%
+ \let \Delimiter = \TXN@skip@delimiter
+ \let \\= \TXN@skip@escesc
+ \TXN@counter = #1\relax
+ \global \dimen@iii = -\maxdimen
+ \TXN@exxxpandafter
+ \TXN@get@object@field@width@ter \TXN@textus@text\TXN@nil
+ \expandafter
+ \TXN@get@object@field@width@quater \the\toks@\\\TXN@nil\\%
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@object@field@width@ter #1\TXN@nil{%
+ \toks@ = \expandafter{#1}%
+% \end{macrocode}
+% In case the first line starts with [
+% \begin{macrocode}
+ \toks@ = \expandafter{\expandafter\relax\the\toks@}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@object@field@width@quater #1\\{%
+ \ifx \TXN@nil #1\relax
+ \else
+ \TXN@get@object@field@width@quinquies #1\TXN@nil
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@object@field@width@quinquies #1#2\TXN@nil{%
+ \ifx [#1\relax
+ \toks@ = {}%
+ \else
+ \toks@ = {[]}%
+ \fi
+ \expandafter
+ \TXN@get@object@field@width@sexies \the\toks@#1#2\TXN@nil
+}
+% \end{macrocode}
+% Ignore anything between [ and ] (the |\\| optional parameter).
+% \begin{macrocode}
+\def \TXN@get@object@field@width@sexies [#1]#2\TXN@nil{%
+ \setbox \z@ = \hbox {\@nameuse{TXN@textus[\TXN@c]Facies}{#2}}%
+ \ifdim \wd\z@ > \dimen@iii
+ \global \dimen@iii = \wd\z@
+ \fi
+ \expandafter \TXN@get@object@field@width@quater
+}
+% \end{macrocode}
+% Places the object |#1| (of class |\TXN@entity|) at the appropriate
+% position inside the corresponding field, if any.
+% \begin{macrocode}
+\def \TXN@place@object@in@field #1{%
+%<debug> \TXN@trace \TXN@place@object@in@field
+ \if \TXN@empty {TXN@\TXN@entity @field@width}%
+ \else
+ \TXN@let \TXN@object = {TXN@object@\TXN@entity}%
+ \TXN@assign \dimen@ = {TXN@\TXN@entity @field@width}%
+ \ifdim \dimen@ > \z@
+ \advance \dimen@ by -\wd#1\relax
+ \ifdim \dimen@ > \z@
+ \dimen@@ = \dimen@
+ \divide \dimen@@ by \tw@
+ \def \TXN@temp {}%
+ \def \TXN@temp@bis {}%
+ \if \TXN@option \TXN@o@RangedLeft \TXN@flags
+ \def \TXN@temp@bis {\kern \dimen@@}%
+ \if \TXN@option \TXN@o@RangedRight \TXN@flags
+ \def \TXN@temp {\kern \dimen@@}% LR = centred
+ \else
+ \def \TXN@temp@bis {\kern \dimen@}%
+ \fi
+ \else
+ \if \TXN@option \TXN@o@RangedRight \TXN@flags
+ \def \TXN@temp {\kern \dimen@}%
+ \fi
+ \fi
+ \setbox \TXN@object =
+ \hbox {\TXN@temp\unhbox \TXN@object\TXN@temp@bis}%
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \subsection {Moving the object to the \TXN@cmd{marginalia} box}
+% |#1|\ the subclass identifier
+% |#2|\ the object type ('t' = textus, 'n' = numerus, '*' = numerus*)
+% |#3|\ the box containing the object
+% \begin{macrocode}
+\def \TXN@move@to@marginalia #1#2#3{%
+%<debug> \TXN@trace \TXN@move@to@marginalia
+% \end{macrocode}
+% Set the entity name and get the relevant flags
+% \begin{macrocode}
+ \ifx t#2\relax
+ \def \TXN@entity {textus}%
+ \TXN@get@textus@flags {#1}%
+ \edef \TXN@flags {\TXN@textus@flags}%
+ \else
+ \def \TXN@entity {numerus}%
+ \edef \TXN@flags {\@nameuse {TXN@numerus[#1]flagsModus@\TXN@theFolio}}%
+ \fi
+% \end{macrocode}
+% If alignment is unspecified, set the default for the entity.
+% \begin{macrocode}
+ \if \TXN@option \TXN@o@AlignedRight \TXN@flags
+ \else
+ \if \TXN@option \TXN@o@AlignedLeft \TXN@flags
+ \else
+ \if \TXN@option \TXN@o@AlignedCentre \TXN@flags
+ \else
+ \ifx t#2\relax
+ \edef \TXN@flags {\TXN@o@AlignedLeft\TXN@flags}%
+ \else
+ \edef \TXN@flags {\TXN@o@AlignedRight\TXN@flags}%
+ \fi
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% Set |\TXN@dim@a| equal to the displacement from the left margin,
+% |\dimen@@| and |\dimen@ii| to the box left and right boundaries.
+% \begin{macrocode}
+ \TXN@get@Locus {\TXN@entity[#1]}{#2}%
+ \TXN@dim@a = \dimen@
+ \dimen@@ = \TXN@dim@a
+ \ifx t#2\relax
+ \else
+ \ifdim \TXN@dim@a > .5\TXN@measure
+ \setbox\z@ = \hbox {\@nameuse{TXN@numerus[#1]SpatiumAnte}}%
+ \advance \dimen@@ by -\wd\z@
+ \fi
+ \fi
+ \dimen@ii = \TXN@dim@a
+ \advance \dimen@ii by \wd#3\relax
+% \end{macrocode}
+% Align the object
+% \begin{macrocode}
+ \if \TXN@option \TXN@o@AlignedCentre \TXN@flags
+ \advance \TXN@dim@a by -.5\wd#3\relax
+ \advance \dimen@@ by -.5\wd#3\relax
+ \advance \dimen@ii by -.5\wd#3\relax
+ \else
+ \if \TXN@option \TXN@o@AlignedRight \TXN@flags
+ \dimen@ii = \dimen@@
+ \advance \dimen@@ by -\wd#3\relax
+ \ifx t#2\relax
+ \else
+ \advance \TXN@dim@a by \TXN@numerus@tail@width
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% For the special case of |\excessus| followed by leaders, we
+% must record the position of the right boundary.
+% \begin{macrocode}
+ \ifnum #1 = \TXN@e \TXN@safe
+ \ifTXN@leaders
+ \gdef \TXN@excessus@leaders {\the\dimen@ii}%
+ \fi
+ \fi
+% \end{macrocode}
+% Check for overlapping text. |\TXN@line@fields|, a \textit{Simple List},
+% holds the left/right boundaries for each field in the line and we
+% just `execute' the list after redefining |\\| appropriately.
+% \begin{macrocode}
+ \TXN@sw@false
+ \@tempswatrue
+ \ifx t#2\relax
+ \ifnum #1 = \TXN@e \TXN@safe
+ \@tempswafalse % no check for excessus
+ \fi
+ \fi
+ \if@tempswa
+ \begingroup
+ \def \\##1{\TXN@temp ##1\TXN@nil}%
+ \def \TXN@temp ##1,##2\TXN@nil{%
+ \ifdim \dimen@@ > ##1\relax
+ \ifdim \dimen@@ < ##2\relax
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifdim \dimen@ii > ##1\relax
+ \ifdim \dimen@ii < ##2\relax
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifdim \dimen@@ < ##1\relax
+ \ifdim \dimen@ii > ##1\relax
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifdim \dimen@@ < ##2\relax
+ \ifdim \dimen@ii > ##2\relax
+ \TXN@sw@true
+ \fi
+ \fi
+ }%
+ \TXN@line@fields
+ \endgroup
+ \fi
+% \end{macrocode}
+% In case of overlapping:\\
+% |\textus| and |\numerus*| are printed, with a warning \\
+% |\numerus| is skipped, but within \textit{Versus} we first check
+% for the special case of a stage direction with the `r' option and
+% if there is enough space between the end of the text proper and
+% the SD we re-assemble the line shifting the SD to the left to
+% make room for the number.
+%
+% \begin{macrocode}
+ \ifTXN@sw
+ \ifTXN@withinVersus
+ \ifx t#2\relax
+ \else
+ \ifdim \PTR@hfill@right > \z@
+ \setbox\z@ = \hbox {\@nameuse{TXN@numerus[#1]SpatiumAnte}}%
+ \dimen@ = \wd\z@
+ \advance \dimen@ by \dimen@ii
+ \advance \dimen@ by - \dimen@@
+ \ifdim \PTR@hfill@right > \dimen@
+ \TXN@shift@SD
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifTXN@sw
+ \@tempswatrue
+ \ifTXN@withinVersus
+ \ifx empty \PTR@auto@mode
+ \else
+ \ifnum \TXN@pass = \@ne
+ \@tempswafalse
+ \fi
+ \fi
+ \fi
+ \ifx t#2\relax
+ \if@tempswa
+ \TXN@get@subclass@name \textus {#1}%
+ \TXN@Warning* {An object of subclass \@backslashchar\TXN@gtemp\space
+ overlaps some text}%
+ \fi
+ \else
+ \ifx n#2\relax
+ \ifdim \TXN@dim@a < .5\TXN@measure
+ \if@tempswa
+ \TXN@get@subclass@name \numerus {#1}%
+ \TXN@Warning* {An object of subclass \@backslashchar\TXN@gtemp\space
+ overlaps some text}%
+ \fi
+ \else
+ \wd#3 = \z@
+ \fi
+ \else
+ \if@tempswa
+ \TXN@get@subclass@name \numerus {#1}%
+ \TXN@Warning* {An object of subclass \@backslashchar\TXN@gtemp*
+ overlaps some text}%
+ \fi
+ \fi
+ \fi
+ \else
+ \edef \TXN@temp {\the\dimen@@,\the\dimen@ii}%
+ \TXN@SimpleList@append \TXN@line@fields \TXN@temp
+ \ifnum #1 = \TXN@e \TXN@safe
+ \global \TXN@leading@space = \dimen@@ \TXN@safe
+ \xdef \TXN@line@length {\the\dimen@ii}%
+ \fi
+ \fi
+% \end{macrocode}
+% Put the object into the \textit{marginalia} box
+% \begin{macrocode}
+ \ifdim \wd#3 = \z@
+ \else
+ \if \TXN@option \TXN@o@AlignedRight \TXN@flags
+ \setbox \TXN@marginalia = \hbox to \z@ {\unhbox \TXN@marginalia
+ \hbox to \z@ {\hss \copy#3\kern -\TXN@dim@a}%
+ }%
+ \else
+ \setbox \TXN@marginalia = \hbox to \z@ {\unhbox \TXN@marginalia
+ \hbox to \z@ {\kern \TXN@dim@a \copy#3\hss}%
+ }%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% This is the special case of a line ending with a |\[r]| stage direction.
+% We unbox and re-assemble the line, shifting the SD to the left.
+% \begin{macrocode}
+\def \TXN@shift@SD {%
+ \TXN@sw@false
+ \begingroup
+ \leavevmode \kern \maxdimen % `sentinel' to stop the backward search
+ \unhcopy \PTR@box@full@line
+ \setbox \z@ = \null
+ \TXN@counter@a = 10 % to prevent looping
+ \TXN@shift@SD@bis
+ \global \setbox \@ne = \box \z@
+ \endgroup
+ \setbox \PTR@box@full@line = \box \@ne
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@shift@SD@bis {%
+ \ifnum \TXN@counter@a = \z@
+ \PackageError {TEXNIKA}
+ {This can't happen (2)}
+ {Please report the error to the author}%
+ \else
+ \advance \TXN@counter@a by \m@ne
+ \fi
+ \let \next = \TXN@shift@SD@bis
+ \setbox \tw@ = \lastbox
+ \ifhbox \tw@
+ \setbox \z@ = \hbox {\box \tw@ \unhbox \z@}%
+ \else
+ \TXN@skip@a = \the\lastskip \TXN@safe
+ \unskip
+ \ifdim \TXN@skip@a > \z@skip
+ \setbox \z@ = \hbox {\hskip \the\lastskip \unhbox \z@}%
+ \else
+ \TXN@counter = \the\lastpenalty \TXN@safe
+ \unpenalty
+ \ifnum \TXN@counter < \z@
+ \TXN@counter = -\TXN@counter
+ \fi
+ \ifnum \TXN@counter > \z@
+ \setbox \z@ = \hbox {\penalty \the\lastpenalty \unhbox \z@}%
+ \else
+ \dimen@@ = \the\lastkern \TXN@safe
+ \unkern
+ \ifdim \dimen@@ = \maxdimen % the `sentinel'
+ \let \next = \relax
+ \else
+ \ifdim \dimen@@ < \z@
+ \dimen@@ = -\dimen@@
+ \fi
+ \ifdim \dimen@@ > \z@
+ \ifdim \dimen@@ = \PTR@hfill@right \TXN@safe
+ \advance \dimen@@ by -\dimen@
+ \gdef \PTR@hfill@right {\z@}%
+ \fi
+ \setbox \z@ = \hbox {\kern \dimen@@ \unhbox \z@}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \next
+}
+% \end{macrocode}
+%
+% \section{The \TXN@cmd{titulus} class}
+% \subsection{Processing the \TXN@cmd{titulus} command}
+%
+% \begin{macrocode}
+\newcommand {\titulus} {%
+ \ifx \empty \TXN@attribute@name
+ \expandafter \TXN@titulus
+ \else
+ \def \TXN@subclass@name {titulus}%
+ \def \TXN@subclass@number {x}%
+ \def \TXN@temp {TXN}%
+ \expandafter \TXN@attribute@set
+ \fi
+}
+\let \titulum = \titulus
+\let \tituli = \titulus
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\TXN@esc@esc@break}[1][\relax]{%
+ \par
+ \TXN@sw@false
+ \ifx \relax #1\relax
+ \ifx \@undefined \TXN@SpatiumInfraEscEsc
+ \else
+ \toks@ = \expandafter {\TXN@SpatiumInfraEscEsc}%
+ \TXN@sw@true
+ \fi
+ \else
+ \toks@ = {#1}%
+ \TXN@sw@true
+ \fi
+ \ifTXN@sw
+ \expandafter \spatium \expandafter {\the\toks@}%
+ \fi
+}
+\newcommand{\TXN@esc@esc@break@noop}[1][]{\hbadness \@M\penalty -\@M}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newif \ifTXN@titulus@starred
+\newif \ifTXN@was@withinVersus
+\newif \ifTXN@was@lineating
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@titulus {%
+ \@ifstar {\TXN@titulus@starredtrue\TXN@titulus@bis}
+ {\TXN@titulus@starredfalse\TXN@titulus@bis}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand{\TXN@titulus@bis}[1][0]{%
+%<debug> \TXN@trace \TXN@titulus@bis
+ \TXN@counter = #1\relax
+ \edef \TXN@titulus@flags {\@nameuse{TXN@titulus[#1]flags}%
+ \@nameuse{TXN@titulus[#1]flagsModus}}%
+ \if \TXN@empty {TXN@titulus[\TXN@c]Facies}%
+ \expandafter \TXN@titulus@sexies
+ \else
+ \expandafter \TXN@titulus@ter
+ \fi
+}
+\def \TXN@titulus@ter {%
+% \end{macrocode}
+% If the object occurs within \textit{Versus}, we close the domain; then,
+% id numbering is active for this class is active, we switch to \textit{Prosa}.
+% If the object occurs within \textit{Prosa}, we remain within the domain.
+% \begin{macrocode}
+% \ifTXN@withinFaciesStrophae
+% \else
+ \TXN@was@withinVersusfalse
+ \ifTXN@withinVersus
+ \TXN@was@withinVersustrue
+ \else
+ \ifTXN@withinProsa
+ \ifTXNl@lineating
+ \ifhmode
+ \par % for lineate
+ \fi
+ \else
+ \endgraf
+ \fi
+ \else
+ \endgraf
+ \fi
+ \fi
+% \fi
+% \ifTXN@withinFaciesStrophae
+% \else
+ \ifTXN@was@withinVersus
+ \if \TXN@option T\TXN@numbered@classes
+ \prosa
+ \else
+ \toks@ = \everypar
+ \edef \TXN@titulus@everypar {\the\toks@}%
+ \everypar = {}%
+ \TXN@normalCR
+ \fi
+ \fi
+% \fi
+ \TXN@was@lineatingfalse
+ \ifTXNl@lineating
+ \TXN@was@lineatingtrue
+ \TXNl@lineate \relax
+ \fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \if \TXN@option \TXN@o@NoArgument \TXN@titulus@flags
+ \expandafter \TXN@titulus@quinquies
+ \else
+ \expandafter \TXN@titulus@quater
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@titulus@quinquies {\TXN@titulus@quater \relax}%
+% \end{macrocode}
+% The special case of an empty Facies
+% \begin{macrocode}
+\long\def \TXN@titulus@sexies #1{%
+ \if \TXN@empty {TXN@titulus[\TXN@c]SpatiumSupra}%
+ \else
+ \expandafter
+ \TXN@spatium@vertical \csname TXN@titulus[\TXN@c]SpatiumSupra\endcsname
+ \fi
+ \if \TXN@empty {TXN@titulus[\TXN@c]Caput}%
+ \else
+ \TXN@caput@titulus {#1}%
+ \fi
+ \if \TXN@empty {TXN@titulus[\TXN@c]SpatiumInfra}%
+ \else
+ \expandafter
+ \TXN@spatium@vertical \csname TXN@titulus[\TXN@c]SpatiumInfra\endcsname
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\long\def \TXN@titulus@quater #1{%
+%<debug> \TXN@trace \TXN@titulus@ter
+ \def \TXN@entity {titulus}%
+ \def \TXN@line@class {T}%
+ \expandafter
+ \TXN@spatium@vertical \csname TXN@titulus[\TXN@c]SpatiumSupra\endcsname
+ \if \TXN@empty {TXN@titulus[\TXN@c]Caput}%
+ \else
+ \TXN@caput@cleanup
+ \fi
+ \begingroup
+ \if \TXN@empty {TXN@titulus[\TXN@c]Forma}%
+ \TXN@style@centered
+ \else
+ \TXN@style@setfalse
+ \@nameuse {TXN@titulus[\TXN@c]Forma}%
+ \ifTXN@style@set
+ \else
+ \TXN@style@centered
+ \fi
+ \fi
+ \ifTXN@centrefinal
+ \global \setbox \TXN@vbox = \vbox \bgroup
+ \fi
+ \parindent = \z@
+ \parskip = \z@
+ \everypar = {}%
+ \ifTXN@centrefinal
+ \let \\= \TXN@esc@esc@break@noop
+ \else
+ \let \\= \TXN@esc@esc@break
+ \fi
+ \hsize = \linewidth
+ \ifTXN@titulus@starred
+ \hsize = \textwidth
+ \else
+ \TXN@assign \TXN@dim@a =
+ {TXN@textus[\TXN@theTextus]offset@\TXN@theFolio}%
+ \advance \leftskip by \TXN@dim@a
+ \fi
+ \TXN@withinSDtrue
+ \if \TXN@option \TXN@o@Unhyphenated \TXN@titulus@flags
+ \pretolerance \@M
+ \else
+ \pretolerance 100 %
+ \fi
+ \leavevmode
+ \def \TXN@titulus@parm {#1}%
+ \@nameuse {TXN@titulus[\TXN@c]Facies}\TXN@titulus@parm
+ \global \TXN@baselineskip = \baselineskip \strut
+ \par
+ \ifTXN@centrefinal
+ \egroup
+ \fi
+ \endgroup
+ \xdef \TXN@prevgraf {\the\prevgraf}%
+ \ifTXN@centrefinal
+ \global \TXN@centrefinalfalse
+ \leavevmode
+ \TXN@dim@a = \wd\TXN@vbox
+ \loop
+ \ifvbox \TXN@vbox
+ \setbox\tw@ = \vbox{%
+ \vbadness = \@M
+ \splittopskip = \z@
+ \global \setbox \@ne = \vsplit \TXN@vbox to \TXN@baselineskip
+ \global \setbox \TXN@vbox = \box \TXN@vbox
+ \unvbox \@ne \global \setbox \@ne = \lastbox
+ }%
+ \setbox \TXN@hbox = \box \@ne
+ \TXN@sw@false
+ \ifvbox \TXN@vbox
+ \ifnum \TXN@prevgraf = \tw@
+ \TXN@sw@true
+ \fi
+ \else
+ \TXN@sw@true
+ \fi
+ \ifTXN@sw
+ \setbox \z@ = \hbox {\unhbox \TXN@hbox \unskip \unskip \unpenalty}%
+ \dimen@ = \TXN@dim@a
+ \advance \dimen@ by -\leftskip
+ \advance \dimen@ by -\rightskip
+ \advance \dimen@ by -\wd\z@
+ \divide \dimen@ by \tw@
+ \dimen@@ = \dimen@
+ \advance \dimen@@ by -\leftskip
+ \advance \dimen@ by -\rightskip
+ \setbox \TXN@hbox = \hbox {\kern \dimen@@ \box \z@ \kern \dimen@}%
+ \fi
+ \TXN@assign \dimen@ = {TXN@textus[\TXN@theTextus]offset@\TXN@theFolio}%
+ \moveright \dimen@ \box \TXN@hbox \par
+ \ifvbox \TXN@vbox \leavevmode \fi
+ \repeat
+ \fi
+ \ifTXN@was@lineating
+ \TXNl@lineate \TXN@process@line
+ \fi
+ \def \TXN@line@class {}%
+ \TXN@withinSDfalse
+ \if \TXN@empty {TXN@titulus[\TXN@c]Caput}%
+ \else
+ \TXN@caput@titulus {#1}%
+ \fi
+ \expandafter
+ \TXN@spatium@vertical \csname TXN@titulus[\TXN@c]SpatiumInfra\endcsname
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \ifTXN@bad@titulus
+ \TXN@counter = \TXN@warnings@level \TXN@safe
+ \def \TXN@warnings@level {\@ne}%
+ \TXN@Warning {The \protect\titulus\space object cannot be positioned
+ properly}%
+ \def \TXN@warnings@level {\the\TXN@counter}%
+ \fi
+% \end{macrocode}
+% We restore the initial state
+% \begin{macrocode}
+ \ifTXN@was@withinVersus
+ \PTR@par@startedfalse
+ \if \TXN@option T\TXN@numbered@classes
+ \endprosa
+ \else
+ \everypar = \expandafter {\TXN@titulus@everypar}%
+ \TXN@activeCR
+ \TXN@exxxpandafter \ignorespaces
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \section{The \TXN@cmd{spatium} class}
+% \subsection{Processing the \TXN@cmd{spatium} command}
+%
+% \begin{macrocode}
+\def \spatium {%
+%<debug> \TXN@trace \spatium
+ \@ifstar {\xdef \TXN@spatium@flag{\TXN@o@SpatiumStar}\TXN@spatium@def}
+ {\gdef \TXN@spatium@flag{}\TXN@spatium@def}%
+}
+\let \spatii = \spatium
+\def \TXN@spatium@def {%
+ \ifx \empty \TXN@attribute@name
+ \expandafter \TXN@spatium
+ \else
+ \def \TXN@subclass@name {spatium}%
+ \def \TXN@subclass@number {x}%
+ \def \TXN@temp {TXN}%
+ \expandafter \TXN@attribute@set
+ \fi
+}
+\newcommand \TXN@spatium [1][0]{%
+%<debug> \TXN@trace \TXN@spatium
+ \edef \TXN@flags {\@nameuse {TXN@spatium[#1]flags}}%
+ \if \TXN@option \TXN@o@NoFacies \TXN@flags
+ \expandafter \TXN@spatium@nofacies
+ \else
+ \endgraf
+ \if \TXN@option \TXN@o@NoArgument \TXN@flags
+ \edef \TXN@temp {\@nameuse {TXN@spatium[#1]Facies}}%
+ \TXN@spatium@vertical {\TXN@temp}%
+ \else
+ \TXN@counter = #1\relax
+ \TXN@exxxpandafter \TXN@spatium@bis
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@spatium@nofacies #1{}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@spatium@bis #1{%
+ \def \TXN@parm@i {#1}%
+ \edef \TXN@temp {\@nameuse {TXN@spatium[\TXN@c]Facies}\TXN@parm@i}%
+ \expandafter \TXN@build@spatium@list \expandafter {\TXN@temp}%
+ \TXN@spatium@vertical {\TXN@L@spatium}%
+}
+% \end{macrocode}
+% \subsection {Processing the argument of a spacing attribute}
+% The argument is converted to the \textit{NameList} expected by
+% |\TXN@do@spatium|.
+%
+% The list prototype
+% \begin{macrocode}
+\TXN@NameList \TXN@NameList@spatium
+ {\TXN@s@flags \TXN@s@glue \TXN@s@penalty \TXN@s@exclude}
+% \end{macrocode}
+% and the actual list to hold the result of the conversion
+% \begin{macrocode}
+\edef \TXN@L@spatium {\TXN@NameList@spatium}%
+% \end{macrocode}
+% \begin{macrocode}
+\def \TXN@build@spatium@list #1{%
+ \TXN@build@spatium@check #1\TXN@nil
+}
+% \end{macrocode}
+% Check if the argument is a subclass name
+% \begin{macrocode}
+\def \TXN@build@spatium@check #1#2\TXN@nil {%
+ \@ifmtarg {#2}
+ {\TXN@build@spatium@check@subclass {#1}}
+ {\TXN@build@spatium@list@normal {#1#2}}%
+}
+\def \TXN@build@spatium@check@subclass #1{%
+ \TXN@get@subclass@number \spatium #1\relax
+ \ifnum \@tempcnta = \m@ne
+ \TXN@build@spatium@list@normal {#1}%
+ \else
+ \edef \TXN@flags {\@nameuse{TXN@spatium[\the\@tempcnta]flags}}%
+ \if \TXN@option \TXN@o@NoArgument \TXN@flags
+ \edef \TXN@L@spatium {%
+ \csname TXN@spatium[\the\@tempcnta]Facies\endcsname}%
+ \else
+ \PackageError {TEXNIKA}
+ {The \protect\spatium\space subclass \protect#1
+ cannot be used\MessageBreak
+ as the argument for an attribute}
+ {The \protect\Facies\space attribute for the \protect#1 subclass
+ \MessageBreak contains a reference to a parameter}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+% Normal argument
+% \begin{macrocode}
+\def \TXN@build@spatium@list@normal #1{%
+%<debug> \TXN@trace \TXN@build@spatium@list@normal
+ \edef \TXN@flags {\TXN@spatium@flag}%
+ \def \TXN@glue {\relax}%
+ \def \TXN@penalty {\relax}%
+ \def \TXN@exclude {\relax}%
+ \TXN@trim {#1}%
+ \expandafter \TXN@build@spatium@list@bis \the\TXN@trimmed\TXN@nil
+ \ifTXN@sw
+ \TXN@set \TXN@L@spatium.\TXN@s@flags \TXN@flags
+ \TXN@set \TXN@L@spatium.\TXN@s@glue \TXN@glue
+ \TXN@set \TXN@L@spatium.\TXN@s@penalty \TXN@penalty
+ \TXN@set \TXN@L@spatium.\TXN@s@exclude \TXN@exclude
+ \else
+ \PackageError{TEXNIKA}%
+ {Invalid \protect\spatium argument}
+ {}%
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@build@spatium@list@bis #1\TXN@nil{%
+ \global\toks@i = {}%
+ \begingroup
+ \def \penalty ##1\TXN@nil{0pt\global\toks@i={##1}}%
+ \setbox \z@ = \hbox {\hskip #1\TXN@nil}%
+ \def \penalty ##1\TXN@nil{}%
+ \xdef \TXN@gtemp {#1\TXN@nil}%
+ \endgroup
+ \edef \TXN@glue {\TXN@gtemp}%
+ \def \TXN@temp { }%
+ \ifx \empty \TXN@glue
+ \def \TXN@glue {\relax}%
+ \else
+ \ifx \TXN@glue \TXN@temp
+ \def \TXN@glue {\relax}%
+ \fi
+ \fi
+ \edef \TXN@temp {\the\toks@i}%
+ \ifx \empty \TXN@temp
+ \else
+ \expandafter \TXN@build@spatium@list@penalty \the\toks@i \TXN@nil
+ \fi
+ \TXN@sw@true
+ \ifx \TXN@glue \TXN@penalty
+ \if \TXN@option \TXN@o@SpatiumExclude \TXN@flags
+ \else
+ \TXN@sw@false
+ \fi
+ \else
+ \ifx \TXN@glue \TXN@safe
+ \else
+ \expandafter \TXN@check@if@glue \TXN@glue\TXN@nil
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@build@spatium@list@penalty #1#2\TXN@nil{%
+ \ifx (#1\relax
+ \TXN@build@spatium@list@penalty@par #2\relax
+ \else
+ \ifx [#1\relax
+ \TXN@build@spatium@list@penalty@bracket #2\relax
+ \else
+ \def \TXN@penalty {#1#2}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@build@spatium@list@penalty@par #1){%
+ \edef \TXN@flags {\TXN@flags(x}%
+ \toks@ = {#1}%
+ \TXN@build@spatium@list@penalty@exclude
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@build@spatium@list@penalty@bracket #1]{%
+ \edef \TXN@flags {\TXN@flags \TXN@o@SpatiumExclude
+ \TXN@o@SpatiumExcludeEject}%
+ \toks@ = {#1}%
+ \TXN@build@spatium@list@penalty@exclude
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@build@spatium@list@penalty@exclude {%
+ \expandafter \TXN@check@if@glue \the\toks@ \TXN@nil
+ \ifTXN@sw
+ \edef \TXN@flags {\TXN@o@SpatiumExcludeDim\TXN@flags}%
+ \fi
+ \edef \TXN@exclude {\the\toks@}%
+ \def \TXN@penalty {\relax}%
+}
+% \end{macrocode}
+% \subsection{Instancing the \TXN@cmd{spatium} object}
+% \begin{macrocode}
+\def \TXN@spatium@vertical #1{%
+%<debug> \TXN@trace \TXN@spatium@vertical
+%<debug> \TXN@trace@spatium {#1}%
+ \def \TXN@glue {\z@}%
+ \ifx \empty #1\relax
+ \else
+ \ifx \relax#1\relax
+ \else
+ \ifhmode
+ \def \TXN@temp {#1}%
+ \PackageError{TEXNIKA}%
+ {This can't happen (1).}
+ {Please report the error to the author}%
+ \fi
+ \ifTXN@withinVersus
+ \global \TXN@after@Spatiumtrue
+ \fi
+ \TXN@spatium@vertical@bis #1\relax
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@spatium@vertical@bis #1{%
+ \TXN@get #1.\TXN@s@flags \TXN@flags
+ \TXN@get #1.\TXN@s@glue \TXN@glue
+ \TXN@get #1.\TXN@s@penalty \TXN@penalty
+ \TXN@get #1.\TXN@s@exclude \TXN@exclude
+ \ifnum \TXN@active@areas > \z@
+ \ifx \TXN@glue \TXN@safe
+ \else
+ \skip@ = \TXN@glue \TXN@safe
+ \dimen@ = \skip@
+ \edef \TXN@glue {\the\dimen@}%
+ \fi
+ \fi
+ \if \TXN@option \TXN@o@SpatiumExclude \TXN@flags
+% \end{macrocode}
+% To force the recent contributions onto the main page
+% \begin{macrocode}
+ \begingroup
+ \parskip = \z@
+ \endgraf
+ \endgroup
+ \ifdim \pagetotal > \pagegoal
+ \else
+ \if \TXN@option \TXN@o@SpatiumExcludeDim \TXN@flags
+ \dimen@ = \TXN@exclude
+ \else
+ \dimen@ = \TXN@exclude \pagegoal
+ \fi
+ \advance \dimen@ by \pagetotal
+ \advance \dimen@ by -\pageshrink
+ \ifdim \dimen@ > \pagegoal
+ \dimen@@ = \pagefilstretch
+ \advance \dimen@@ by \pagefillstretch
+ \advance \dimen@@ by \pagefilllstretch
+ \ifdim \dimen@@ = \z@
+ \if \TXN@option \TXN@o@SpatiumExcludeEject \TXN@flags
+ \newpage
+ \global \NewPagetrue
+ \def \TXN@glue {\relax}%
+ \else
+ \dimen@@ = \pagegoal
+ \advance \dimen@@ by -\pagestretch
+ \advance \dimen@@ by -\pagetotal
+ \ifdim \dimen@@ > \z@
+ \vskip \dimen@@
+ \fi
+ \penalty -\@M
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \ifx \TXN@glue \TXN@safe
+ \else
+ \if \TXN@option \TXN@o@SpatiumStar \TXN@flags
+ \vspace* {\TXN@glue}%
+ \else
+ \addvspace {\TXN@glue}%
+ \fi
+ \ifnum \TXN@active@areas > \z@
+ \TXN@process@area@spatium {\TXN@glue}%
+ \fi
+ \fi
+ \ifx \TXN@penalty \TXN@safe
+ \else
+ \ifnum \TXN@penalty = -\@M\relax
+ \vfill
+ \fi
+ \penalty \TXN@penalty
+ \fi
+}
+% \end{macrocode}
+% \section{Domain switching}
+%
+% All switching is funnelled through these two macros (the
+% parameter is 1 for \textit{versus}, 2 for \textit{prosa}).
+% This allows easy nesting of domains and avoids the overhead
+% of unnecessary switching in sequences like\\
+% |\versus \begin{versus} \end{versus} \endversus|\\
+% At the end of the document, we check that domains are properly
+% nested.
+%
+% To keep track of domains, we use a simple stack with the usual
+% functions for pushing/popping an entry and inspecting the
+% top entry.
+% \begin{macrocode}
+\def \TXN@domain@stack {[0,0]}
+\def \TXN@empty@domain@stack {[0,0]}
+% \end{macrocode}
+% \begin{macrocode}
+\def \TXN@domain@push #1{%
+ \edef \TXN@domain@stack {[#1,\the\inputlineno]\TXN@domain@stack}}
+% \end{macrocode}
+% \begin{macrocode}
+\def \TXN@domain@pop {%
+ \expandafter \TXN@domain@pop@bis \TXN@domain@stack\TXN@nil}
+\def \TXN@domain@pop@bis [#1]#2\TXN@nil{%
+ \edef \TXN@domain@stack {#2}}
+% \end{macrocode}
+% \begin{macrocode}
+\def \TXN@domain@top {%
+ \expandafter \TXN@domain@top@bis \TXN@domain@stack \TXN@nil}
+\def \TXN@domain@top@bis [#1]#2\TXN@nil{%
+ \TXN@domain@top@ter #1\TXN@nil}
+\def \TXN@domain@top@ter #1,#2\TXN@nil{%
+ \edef \TXN@domain@stack@top {#1}%
+ \edef \TXN@domain@stack@top@line {#2}}
+% \end{macrocode}
+% \begin{macrocode}
+\def \TXN@domain@error #1{%
+ \PackageError {TEXNIKA}
+ {#1}
+ {Run LaTeX to completion and look at the final\MessageBreak
+ error message about bad domain nesting: it may\MessageBreak
+ give you a clue about the source of the trouble.}
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@domain@stack {%
+ \toks@ = {}%
+ \loop
+ \TXN@domain@top
+ \ifnum \TXN@domain@stack@top > \z@
+ \edef \TXN@temp {\ifnum \TXN@domain@stack@top = \@ne
+ \string\Versus%
+ \else
+ \string\Prosa%
+ \fi
+ -\TXN@domain@stack@top@line\space
+ \the\toks@}%
+ \toks@ = \expandafter {\TXN@temp}%
+ \TXN@domain@pop
+ \repeat
+}
+% \end{macrocode}
+% \subsection{Entering a domain }
+% \begin{macrocode}
+\def \TXN@domain@enter #1{%
+%<debug> \TXN@trace@domain {0}{#1}%
+ \TXN@domain@top
+ \ifcase #1\relax
+ \relax
+ \or % Versus
+ \ifcase \TXN@domain@stack@top \TXN@safe
+ \expandafter \PTR@versus
+ \or
+ \TXN@withinVersustrue
+ \or
+ \TXN@endprosa
+ \expandafter \PTR@versus
+ \fi
+ \TXN@domain@push {1}%
+ \or % Prosa
+ \ifcase \TXN@domain@stack@top \TXN@safe
+ \expandafter \TXN@prosa
+ \or
+ \PTR@endversus
+ \TXN@prosa
+ \or
+ \par
+ \fi
+ \TXN@domain@push {2}%
+ \fi
+}
+% \end{macrocode}
+% \subsection{Leaving a domain }
+% \begin{macrocode}
+\def \TXN@env@document {document}
+\def \TXN@env@prosa {prosa}
+\def \TXN@env@Prosa {Prosa}
+\def \TXN@document {document}
+\def \TXN@domain@leave #1{%
+%<debug> \TXN@trace@domain {1}{#1}%
+ \TXN@domain@top
+ \ifnum #1 = \@ne
+% \end{macrocode}
+% Versus
+% \begin{macrocode}
+ \ifnum \TXN@domain@stack@top = \z@
+ \TXN@domain@error
+ \else
+ \ifnum \TXN@domain@stack@top = \@ne
+ \PTR@endversus
+ \TXN@domain@pop
+ \TXN@domain@top
+ \ifnum \TXN@domain@stack@top = \tw@
+ \ifx \@currenvir \TXN@env@document
+ \TXN@prosa
+ \fi
+ \fi
+ \else
+ \TXN@domain@error
+ {\protect\endVersus\space after \protect\Prosa}%
+ \fi
+ \fi
+ \else
+% \end{macrocode}
+% Prosa
+% \begin{macrocode}
+ \ifnum \TXN@domain@stack@top = \@ne
+ \TXN@domain@error
+ {\protect\endProsa\space after \protect\Versus}%
+ \else
+ \ifnum \TXN@domain@stack@top = \z@
+ \TXN@domain@error
+ {\protect\endProsa\space not preceded by \protect\Prosa}%
+ \else
+ \TXN@endprosa
+ \TXN@domain@pop
+ \TXN@domain@top
+ \ifnum \TXN@domain@stack@top = \@ne
+% \ifx \@currenvir \TXN@env@document
+ \PTR@versus
+% \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifx \TXN@empty@domain@stack \TXN@domain@stack
+% \TXN@stop@lineno
+ \fi
+}
+% \end{macrocode}
+% \section{The \TXN@cmd{prosa} domain}
+%
+% \subsection{Entering the domain.}
+% \begin{macrocode}
+\def \prosa {\TXN@domain@enter 2}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@prosa {%
+%<debug> \TXN@trace \TXN@prosa
+ \TXN@withinProsatrue
+ \ifTXN@folio@set
+ \else
+ \xdef \TXN@theFolio {\ifodd \c@page recto\else verso\fi}%
+ \gdef \TXN@previous@page {}%
+ \global \TXN@folio@settrue
+ \fi
+ \xdef \TXN@endarea@list {}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \TXNl@lineate \TXN@process@line
+ \global \TXN@lineatingtrue
+% \end{macrocode}
+% Set the text margins.
+% \begin{macrocode}
+ \edef \TXN@save@leftskip {\the\leftskip}%
+ \edef \TXN@save@rightskip {\the\rightskip}%
+ \edef \TXN@save@parindent {\the\parindent}%
+ \edef \TXN@save@parskip {\the\parskip}%
+ \ifTXN@withinDrama
+ \parindent = \z@
+ \fi
+ \let \TXN@@line = \@@line
+ \def \@@line {\leavevmode\TXN@@line}%
+ \TXN@assign \TXN@measure = {TXN@textus[\TXN@theTextus]measure}%
+ \hsize \TXN@measure
+ \@nameuse{TXN@textus[\TXN@theTextus]Facies}\relax
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \ifTXN@milestones
+ \TXN@initialize@milestones
+ \fi
+}
+% \end{macrocode}
+% \subsection{Leaving the domain.}
+% \begin{macrocode}
+\def \endprosa {\TXN@domain@leave 2}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@endprosa {%
+%<debug> \TXN@trace \TXN@end@prosa
+ \par
+ \TXN@withinProsafalse
+ \TXNl@lineate \relax
+ \leftskip = \TXN@save@leftskip \TXN@safe
+ \rightskip = \TXN@save@rightskip \TXN@safe
+ \parindent = \TXN@save@parindent \TXN@safe
+ \parskip = \TXN@save@parskip \TXN@safe
+ \let \@@line = \TXN@@line
+}
+\let \Prosa = \prosa
+\let \endProsa = \endprosa
+% \end{macrocode}
+% \subsection{Processing a line.}
+%
+% Two logical variable that may be tested with |\boolean| in
+% an |\ifthenelse| test.
+% \begin{macrocode}
+\newif \ifParagraphFirstLine
+\newif \ifParagraphLastLine
+% \end{macrocode}
+% Within the domain, the `hook' into the |\output| routine via the
+% \textbf{lineate} package is active and this macro gets control
+% for each line in the domain. The processing is much the same as
+% within \textbf{versus}.
+% \begin{macrocode}
+\newif \ifTXN@normal@line
+\newif \ifTXN@bad@titulus
+\def \TXN@process@line@prosa #1{%
+%<debug> \TXN@trace \TXN@process@line@prosa
+ \TXN@normal@linetrue
+ \global \TXN@bad@titulusfalse
+ \setbox \tw@ = \copy \z@
+ \setbox \tw@ = \vbox {%
+ \unvbox \tw@
+ \global \setbox \@ne = \lastbox
+ }%
+ \ifvoid \@ne
+ \TXN@normal@linefalse
+ \setbox \TXN@hbox = \box\z@
+ \else
+ \unvbox \z@
+ \setbox \TXN@hbox = \lastbox
+ \fi
+ \dp\TXN@hbox = \TXN@skip@depth@cclv \TXN@safe
+% \end{macrocode}
+% Set the variables recording information about the line
+% \begin{macrocode}
+ \ParagraphFirstLinefalse
+ \ParagraphLastLinefalse
+ \edef \ParagraphLine {#1}%
+ \ifnum #1 < \z@
+ \ParagraphLastLinetrue
+ \edef \ParagraphLine {-#1}%
+ \fi
+ \ifnum \ParagraphLine = \@ne
+ \ParagraphFirstLinetrue
+ \fi
+ \xdef \TXN@line@length {\the\wd\TXN@hbox}%
+ \global \TXN@leading@space = \z@
+ \ifTXN@normal@line
+ \dimen@ = \TXN@measure
+ \advance \dimen@ by -\wd\TXN@hbox
+ \global \TXN@leading@space = \dimen@ \TXN@safe
+ \ifParagraphFirstLine
+ \dimen@@ = \dimen@
+ \advance \dimen@@ by \parindent
+ \global \TXN@leading@space = \dimen@@ \TXN@safe
+ \fi
+ \edef \ParagraphLineFill {\z@}%
+ \setbox \tw@ = \copy \TXN@hbox
+ \setbox \tw@ = \hbox {%
+ \unhbox \tw@
+ \global \skip@i = \the\lastskip
+ \unskip
+ }%
+ \TXN@check@if@normal@glue \skip@i
+ \ifTXN@sw
+ \dimen@@ = \wd\TXN@hbox
+ \advance \dimen@@ by -\skip@i
+ \else
+ \dimen@@ = \wd\tw@
+ \advance \dimen@@ by \dimen@
+ \fi
+ \xdef \TXN@line@length {\the\dimen@@}%
+ \ifParagraphLastLine
+ \xdef \TXN@line@length {\the\wd\tw@}%
+ \dimen@@ = \wd\tw@
+ \advance \dimen@@ by -\TXN@measure
+ \edef \ParagraphLastLineFill {-\the\dimen@@}%
+ \fi
+% \end{macrocode}
+% We restore the initial indentation from |\hangindent| as the box
+% shift is lost on unboxing (see the EDMAC manual, 7.2).
+% \begin{macrocode}
+ \ifdim \dimen@ > \z@
+ \setbox \TXN@hbox = \hbox {\kern \dimen@ \box \TXN@hbox}%
+ \fi
+ \fi
+% \end{macrocode}
+% Prepare for attaching |\textus| and |\numerus| objects
+% \begin{macrocode}
+ \ifNewPage
+ \TXN@reset@pagewise@numbers
+ \fi
+ \TXN@clear@numbers
+ \setbox \TXN@marginalia = \copy\voidb@x
+% \end{macrocode}
+% Replay any commands for this line
+% \begin{macrocode}
+ \ifTXN@milestones
+ \ifnum \TXN@pass = \tw@
+ \global\TXN@replaytrue
+ \loop
+ \ifnum \TXNl@linenumber > \TXN@auy@lineno \TXN@safe
+ \TXN@read@auy
+ \repeat
+ \loop
+ \ifnum \TXNl@linenumber = \TXN@auy@lineno \TXN@safe
+%<debug> \TXN@trace@replay
+ \TXN@auy@command
+ \TXN@read@auy
+ \repeat
+ \fi
+ \fi
+% \end{macrocode}
+% Attach |\textus| and |\numerus| objects
+% \begin{macrocode}
+ \setbox \TXN@marginalia = \copy\voidb@x
+ \TXN@SimpleList \TXN@line@fields \z@
+ \TXN@assign \dimen@ =
+ {TXN@textus[\TXN@theTextus]offset@\TXN@theFolio}%
+ \advance \dimen@ by \TXN@leading@space \TXN@safe
+ \dimen@@ = \TXN@measure
+ \advance \dimen@@ by -\rightskip
+ \edef \TXN@temp {\the\dimen@,\the\dimen@@}%
+ \TXN@SimpleList@append \TXN@line@fields \TXN@temp
+ \TXN@attach@textus {\z@}%
+ \TXN@process@line@numbers
+ \ht \TXN@marginalia = \z@
+ \if y\TXN@showlineno
+ \TXN@show@lineno@info {#1}%
+ \fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \ifdim \TXN@measure = \linewidth
+ \dimen@ = \z@
+ \else
+ \TXN@assign \dimen@ = {TXN@textus[\TXN@theTextus]offset@\TXN@theFolio}%
+ \fi
+ \ifTXN@normal@line
+ \setbox \TXN@hbox = \hbox {\kern \dimen@ \box\TXN@hbox}%
+ \dp\TXN@hbox = \TXN@skip@depth@cclv \TXN@safe
+ \box \TXN@hbox
+ \else
+ \unvbox\TXN@hbox
+ \fi
+ \ifvoid \TXN@marginalia
+ \else
+ \nointerlineskip
+ \kern -\TXN@skip@depth@cclv \TXN@safe
+ \dp \TXN@marginalia = \TXN@skip@depth@cclv \TXN@safe
+ \box \TXN@marginalia
+ \fi
+ \ifnum \TXN@active@areas > \z@
+ \TXN@process@area@line@Prosa \TXN@hbox
+ \fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \ifx \empty \TXN@endarea@list
+ \else
+ \TXN@endarea@Prosa
+ \fi
+ \ifTXN@milestones
+ \ifnum \TXN@pass = \tw@
+ \global\TXN@replayfalse
+ \fi
+ \fi
+ \edef \ParagraphLine {\z@}%
+ \ParagraphFirstLinefalse
+ \ParagraphLastLinefalse
+ \ifnum #1 < \z@
+ \gdef \TXN@float@counter {0}%
+ \gdef \TXN@margin@counter {0}%
+ \fi
+}
+% \end{macrocode}
+% Reset the value of all attached numbers.
+% \begin{macrocode}
+\def \TXN@clear@numbers {%
+ \count@ = \TXN@numerus@max
+ \loop
+ \ifnum \count@ > \m@ne
+ \TXN@let \TXN@test = {TXN@numerus[\the\count@]side@\TXN@theFolio}%
+ \ifx \empty \TXN@test
+ \else
+ \ifnum \TXN@test < \z@
+ \else
+ \TXN@gdef {TXN@numerus[\the\count@]first@value}{}%
+ \fi
+ \fi
+ \advance \count@ by \m@ne
+ \repeat
+}
+% \end{macrocode}
+% Reset the counters of all \textit{pagewise} numbers.
+% \begin{macrocode}
+\def \TXN@reset@pagewise@numbers {%
+%<debug> \TXN@trace \TXN@reset@pagewise@numbers
+ \count@ = \TXN@numerus@max \TXN@safe
+ \loop
+ \ifnum \count@ > \m@ne
+ \edef \TXN@flags {%
+ \@nameuse {TXN@numerus[\the\count@]flagsModus@\TXN@theFolio}}%
+ \if \TXN@option \TXN@o@Pagewise \TXN@flags
+ \@tempcnta = \TXN@c@numerus{\the\count@}%
+ \ifnum \@tempcnta > \tw@
+ \global \TXN@c@numerus{\the\count@}= \@ne
+ \TXN@xdef {TXN@numerus[\the\count@]previous}{}%
+ \fi
+ \fi
+ \advance \count@ by \m@ne
+ \repeat
+}
+% \end{macrocode}
+% \section{The interface with \texttt{txnline}}
+% \subsection{Processing a line}
+% The \textbf{txnline} package transfers controls here for each line.
+% The line (originally in |\box254|, now empty) is in |box0|.\\
+% |#1|\ is the line number within the paragraph \\
+% (negative for the the last line of the paragraph)
+% \begin{macrocode}
+\def \TXN@process@line #1{%
+%<debug> \TXN@trace \TXN@process@line
+ \TXN@skip@depth@cclv = \dimen@ \TXN@safe
+ \ifTXN@withinProsa
+ \TXN@process@line@prosa {#1}%
+ \else
+ \ifTXN@withinVersus
+ \unvbox \z@
+ \if y\TXN@showlineno
+ \TXN@show@lineno@info {#1}%
+ \fi
+ \else
+ \PackageError{TEXNIKA}%
+ {Something horrible has happened}
+ {Input line: \number\inputlineno}%
+ \fi
+ \fi
+ \ifTXN@lineating
+ \TXN@process@line@page
+ \fi
+}
+% \end{macrocode}
+% Display some useful information for debugging.
+% \begin{macrocode}
+\def \TXN@show@lineno@info #1{%
+%<debug> \TXN@trace \TXN@show@lineno@info
+ \edef \TXN@temp {\TXN@line@class}%
+ \ifx \empty \TXN@temp
+ \edef \TXN@temp {t}%
+ \fi
+ \if@firstcolumn
+ \setbox \@tempboxa = \llap {\TXNcmr
+ \footnotesize
+ \ifTXN@withinProsa [#1]\fi
+ \number\TXNl@linenumber
+ \rlap{\ifNewPage\uppercase\fi
+ \ifx \TXN@theFolio \TXN@recto{r}\else{v}\fi
+ \TXN@temp}%
+ \kern 1,5cm %
+ }%
+ \else
+ \dimen@@ = \columnwidth
+ \advance \dimen@@ by 1,5cm\relax
+ \setbox \@tempboxa = \rlap {\TXNcmr
+ \footnotesize
+ \kern \dimen@@
+ \ifTXN@withinProsa [#1]\fi
+ \number\TXNl@linenumber
+ \rlap{\ifNewPage\uppercase\fi
+ \ifx \TXN@theFolio \TXN@recto {r}\else {v}\fi
+ \TXN@temp}%
+ }%
+ \fi
+ \ifTXN@withinProsa
+ \dp \@tempboxa = \z@
+ \ht \@tempboxa= \z@
+ \setbox \TXN@marginalia = \hbox {%
+ \llap{\box\@tempboxa}\box\TXN@marginalia}%
+ \fi
+ \ifTXN@withinVersus
+ \dp\@tempboxa = \TXN@skip@depth@cclv \TXN@safe
+ \ht\@tempboxa = \z@
+ \nointerlineskip \kern -\TXN@skip@depth@cclv \TXN@safe
+ \box \@tempboxa
+ \fi
+}
+% \end{macrocode}
+% \subsection{Processing the \texttt{aux} file}
+% \textit{recto}/\textit{verso} processing requires two passes. In the
+% first pass, for each line processed in a domain, one line is written
+% to the \textbf{aux} with the following data:\par
+% |\TXN@lineate|{\textless line\textgreater}{\textless page\textgreater}{\textless column\textgreater}\par
+% At the start of the second pass, as the \textbf{aux} file is read in,
+% the macroa are executed and generate a set of |\cs| of the form
+% |\TXN@line@page@column@|\textit{n}, each holding the initial line
+% number for a page.
+% \begin{macrocode}
+\def \TXN@lineate@line {0}
+\def \TXN@lineate@page {0}
+\def \TXN@lineate@column {0}
+\gdef \TXN@lineate@count {0}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AtBeginDocument {%
+ \gdef \TXN@lineate@count {0}
+ \gdef \TXN@line@number {-1000000}
+ \gdef \TXN@page@number {-1000000}
+ \gdef \TXN@column@number {-1000000}
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@lineate #1#2#3{%
+ \ifnum #1 = \@ne
+ \xdef \TXN@previous@page {#2}%
+ \ifodd #2\relax
+ \gdef \TXN@theFolio {recto}%
+ \else
+ \gdef \TXN@theFolio {verso}%
+ \fi
+ \global \NewPagetrue
+ \fi
+ \ifnum \TXN@lineate@column = \z@
+ \def \TXN@lineate@line {#1}%
+ \def \TXN@lineate@page {#2}%
+ \def \TXN@lineate@column {#3}%
+ \else
+ \TXN@swfalse
+ \ifnum \TXN@lineate@column = #3\relax
+ \ifnum \TXN@lineate@page = #2\relax
+ \else
+ \TXN@swtrue
+ \fi
+ \else
+ \TXN@swtrue
+ \fi
+ \ifTXN@sw
+ \TXN@gincr \TXN@lineate@count
+ \TXN@xdef {TXN@line@page@column@\TXN@lineate@count}%
+ {{\TXN@lineate@line}{\TXN@lineate@page}%
+ {\TXN@lineate@column}}%
+ \def \TXN@lineate@line {#1}%
+ \def \TXN@lineate@line {#1}
+ \def \TXN@lineate@page {#2}
+ \else
+ \def \TXN@lineate@line {#1}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@page@column #1{%
+ \begingroup
+ \TXN@counter = #1\relax
+ \loop
+ \ifnum \TXN@counter > \TXN@line@number \TXN@safe
+ \TXN@gincr \TXN@lineate@count
+ \if \TXN@relax {TXN@line@page@column@\TXN@lineate@count}%
+ \TXN@counter = \TXN@line@number \TXN@safe
+ \else
+ \edef \TXN@temp {%
+ \csname TXN@line@page@column@\TXN@lineate@count\endcsname}%
+ \expandafter \TXN@get@page@column@bis \TXN@temp
+ \fi
+ \repeat
+ \endgroup
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@page@column@bis #1#2#3{%
+ \gdef \TXN@line@number {#1}%
+ \gdef \TXN@page@number {#2}%
+ \gdef \TXN@column@number {#3}%
+}
+% \end{macrocode}
+% \subsection{Processing page information}
+% \begin{macrocode}
+\def \TXN@process@line@page {%
+%<debug> \TXN@trace \TXN@process@line@page
+ \ifnum \TXN@pass = \tw@
+ \TXN@counter = \TXNl@linenumber
+ \advance \TXN@counter by \@ne
+ \TXN@get@page@column {\TXN@counter}%
+ \if@twoside
+ \gdef \TXN@theFolio {recto}%
+ \ifodd \TXN@page@number \TXN@safe
+ \else
+ \gdef \TXN@theFolio {verso}%
+ \fi
+ \else
+ \gdef \TXN@theFolio {recto}%
+ \fi
+ \else
+ \protected@write \@auxout {} {%
+ \string\TXN@lineate{\the\TXNl@linenumber}%
+ {\noexpand\the\c@page}%
+ {\if@twocolumn \if@firstcolumn 1\else 2\fi \else 1\fi}%
+ }%
+ \fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \global \NewPagefalse
+ \ifx \TXN@page@number \TXN@previous@page
+ \else
+ \ifx \empty \TXN@previous@page
+ \else
+ \global \NewPagetrue
+ \fi
+ \xdef \TXN@previous@page {\TXN@page@number}%
+ \fi
+}
+% \end{macrocode}
+% \section{Supporting \textit{milestones}}
+% \begin{macrocode}
+\gdef \TXN@previous@page {-1000000000}%
+\newif \ifTXN@milestones@init
+% \end{macrocode}
+% \subsection{Initializing \textit{milestones}}
+% \begin{macrocode}
+\def \TXN@initialize@milestones {%
+%<debug> \TXN@trace \TXN@initialize@milestones
+ \ifTXN@milestones@init
+ \else
+ \TXN@milestones@inittrue
+ \count@ = \count15\relax
+ \advance \count@ by \@ne
+ \xdef \TXN@insert@toks@first {\the\count@}%
+ \advance \count@ by \TXN@max@floats
+ \ifnum \count@ > 253\relax
+ \count@ = 253\relax
+ \fi
+ \xdef \TXN@insert@toks@last {\the\count@}%
+ \gdef \TXN@float@counter {0}%
+ \gdef \TXN@margin@counter {0}%
+ \ifnum \TXN@pass = \tw@
+ \newread \TXN@auy
+ \openin \TXN@auy = \jobname.auy\relax
+ \TXN@read@auy
+ \else
+ \newwrite \TXN@auy
+ \immediate \openout \TXN@auy = \jobname.auy\relax
+ \fi
+ \gdef \TXN@save@command@count {0}%
+ \TXN@SimpleList@append \TXN@commissurae {-1}%
+ \gdef \TXN@commissura@index {-1}%
+ \TXN@get@next@commissura
+ \fi
+}
+% \end{macrocode}
+% \subsection{Processing \textit{milestones}}
+% \subsubsection {Logging commands to \textbf{auy}}
+% \begin{macrocode}
+\def \TXN@save@command {%
+ \ifTXN@replay
+ \else
+ \expandafter \TXN@save@command@bis
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@save@command@bis {%
+ \count@ = \TXN@save@command@count \TXN@safe
+ \advance \count@ by \@ne
+ \xdef \TXN@save@command@count {\the\count@}%
+ \ifnum \TXN@pass = \tw@
+ \ifnum \TXN@next@commissura = \count@
+ \TXN@get@next@commissura
+ \TXN@commissura
+ \fi
+ \ifvmode
+ \ifinner \else
+ \leavevmode \@bsphack \@savsk\p@
+ \fi
+ \else
+ \@bsphack
+ \fi
+ \@ignorefalse \@esphack
+ \else
+ \expandafter \TXN@do@save@command
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@do@save@command {%
+%<debug> \TXN@trace@save@command
+ \ifnum \TXN@float@counter > \TXN@insert@toks@last \TXN@safe
+ \TXN@commissura \the\toks@
+ \protected@write\@auxout{}{%
+ \string\TXN@@commissura{\TXN@save@command@count}}%
+ \fi
+ \TXN@run@LaTeX@again@reason \TXN@run@LaTeX@again@milestones
+ \ifvmode
+ \ifinner \else
+ \leavevmode \@bsphack \@savsk\p@
+ \fi
+ \else
+ \@bsphack
+ \fi
+ \@bsphack
+ \ifhmode
+ \ifinner
+ \TXN@float@error1
+ \else
+ \@floatpenalty -\@Mii
+ \global \count\TXN@insert = -15011943 %
+ \count@ = \TXN@float@counter \TXN@safe
+ \advance \count@ by \@ne
+ \xdef \TXN@float@counter {\the\count@}%
+ \advance \count@ by \TXN@insert@toks@first \TXN@safe
+ \toks \the\count@ = \toks@
+ \begingroup
+ \setbox \TXN@insert \color@vbox \vbox \bgroup \@endfloatbox
+ \@cons\@currlist\TXN@insert
+ \vadjust {\penalty -\@Miv
+ \vbox{}\penalty\@floatpenalty}\@Esphack
+ \nobreak\hskip \z@
+ \endgroup
+ \@ignorefalse \@esphack
+ \fi
+ \else
+ \TXN@float@error2
+ \fi
+}
+% \end{macrocode}
+% Should never happen
+% \begin{macrocode}
+\def \TXN@float@error#1{%
+ \PackageError{TEXNIKA}%
+ {FLOAT ERROR #1}
+ {Please report the error to the author}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let \TXN@addmarginpar \@addmarginpar
+\def \@addmarginpar {%
+ \ifnum\count\@currbox = -15011943\relax
+ \ifnum \@currbox = \TXN@insert \TXN@safe
+ \ifnum \TXN@pass = \tw@
+ \else
+ \count@ = \TXN@margin@counter \TXN@safe
+ \advance \count@ by \@ne
+ \xdef \TXN@margin@counter {\the\count@}%
+ \ifx \empty \TXN@insert@toks@first
+ \fi
+ \advance \count@ by \TXN@insert@toks@first \TXN@safe
+ \toks@ = \toks \the\count@
+ \begingroup
+% \newlinechar='40\relax
+ \immediate \write \TXN@auy
+ {{{\the\TXNl@linenumber}{\the\toks@}}}%
+ \endgroup
+ \fi
+ \fi
+ \else
+ \expandafter \TXN@addmarginpar
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@read@auy {%
+ \global \read \TXN@auy to \TXN@auy@line
+ \def \TXN@temp {\par}%
+ \ifx \TXN@temp \TXN@auy@line
+ \gdef \TXN@auy@lineno {1000000}%
+ \else
+ \expandafter \TXN@split@auy@line
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@split@auy@line {%
+ \expandafter \TXN@split@auy@line@bis \TXN@auy@line
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@split@auy@line@bis #1{%
+ \TXN@split@auy@line@ter #1\relax
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@split@auy@line@ter #1#2{%
+ \gdef \TXN@auy@lineno {#1}%
+ \gdef \TXN@auy@command {#2}%
+}
+% \end{macrocode}
+% \subsubsection {Processing \textit{commissurae}}
+% \begin{macrocode}
+\newcommand {\commissura} {%
+ \ifx \empty \TXN@attribute@name
+ \expandafter \TXN@commissura
+ \else
+ \def \TXN@subclass@name {commissura}%
+ \def \TXN@subclass@number {}%
+ \def \TXN@temp {TXN}%
+ \expandafter \TXN@attribute@set
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@commissura {%
+ \begingroup
+ \parfillskip = \z@skip
+ \par
+ \parskip \z@skip
+ \noindent
+ \ifnum \TXN@pass = \tw@
+ \else
+ \TXN@FaciesCommissura
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@setFacies@commissura #1{%
+ \def \TXN@FaciesCommissura {\begingroup#1\endgroup}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\TXN@SimpleList \TXN@commissurae \z@
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@@commissura #1{%
+ \TXN@SimpleList@append \TXN@commissurae {#1}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@next@commissura {%
+ \count@ = \TXN@commissura@index \TXN@safe
+ \advance \count@ by \@ne
+ \xdef \TXN@commissura@index {\the\count@}%
+ \TXN@get \TXN@commissurae.\TXN@commissura@index \TXN@next@commissura
+}
+% \end{macrocode}
+% \section{Initial and final processing}
+% \subsection{At the end of the package}
+% \begin{macrocode}
+\def \TXN@numeri {%
+ \ifx \empty \TXN@attribute@name
+ \expandafter \TXN@save@numeri
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AtEndOfPackage{%
+ \TXN@initialize@numerus {0}%
+ \TXN@initialize@textus {0}%
+ \TXN@initialize@titulus {0}%
+ \TXN@initialize@spatium {0}%
+ \ifx \@undefined \numeri
+ \let \numeri = \numerus
+ \else
+ \let \TXN@save@numeri = \numeri
+ \let \numeri = \TXN@numeri
+ \fi
+ \ifx \@undefined \TXN@FaciesIncipit
+ \def \TXN@FaciesIncipit {}%
+ \fi
+ \ifx \@undefined \TXN@SpatiumPostEscEsc
+ \def \TXN@SpatiumPostEscEsc {\hskip .22em\relax}%
+ \fi
+ \TXN@def {TXN@titulus[0]Forma}{}%
+ \let \TXN@LaTeX@esc@esc = \\
+ \def \TXN@FaciesCommissura {}%
+ \frenchspacing
+ \parindent = \z@
+ \gdef \TXN@spatium@flag {}%
+ \gdef \TXN@set@second@pass {\gdef\TXN@pass{2}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \def \TXN@numerus@max {0}
+ \def \TXN@textus@max {0}
+ \def \TXN@titulus@max {0}
+ \def \TXN@spatium@max {0}
+ \def \TXN@recto {recto}
+}
+% \end{macrocode}
+% \subsection{At the beginnning of the document}
+% \begin{macrocode}
+\AtBeginDocument{%
+% \end{macrocode}
+% Set |\Facies \textus| ...
+% \begin{macrocode}
+ \if \TXN@empty {TXN@textus[\TXN@theTextus]Facies}%
+ \TXN@edef {TXN@textus[\TXN@theTextus]Facies}{%
+ \noexpand\fontencoding {\f@encoding}%
+ \noexpand\fontfamily {\f@family}%
+ \noexpand\fontseries {\f@series}%
+ \noexpand\fontshape {\f@shape}%
+ \noexpand\selectfont
+ }%
+ \fi
+% \end{macrocode}
+% ... and the measure
+% \begin{macrocode}
+ \if \TXN@empty {TXN@textus[\TXN@theTextus]measure}%
+ \TXN@xdef {TXN@textus[\TXN@theTextus]measure}{\the\linewidth}%
+ \fi
+ \TXN@assign \TXN@measure = {TXN@textus[\TXN@theTextus]measure}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \TXN@outside@preambletrue
+ \@ifpackageloaded{poetry}{\TXN@poetrytrue}{}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \if y\TXN@showlineno
+ \global \TXN@lineatingtrue
+ \fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \gdef \TXN@insert@toks@first {}%
+ \gdef \TXN@insert@toks@last {}%
+ \gdef \TXN@float@counter {0}%
+ \gdef \TXN@margin@counter {0}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \let \TXN@save@tableofcontents = \tableofcontents
+ \let \tableofcontents = \TXN@tableofcontents
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \gdef \TXN@theFolio {recto}
+ \def \TXN@line@class {}
+% \end{macrocode}
+% These commands must be trapped, to set the measure.
+% \begin{macrocode}
+ \let \TXN@save@onecolumn = \onecolumn
+ \let \TXN@save@twocolumn = \twocolumn
+ \gdef \onecolumn {\TXN@save@onecolumn \TXN@measure = \linewidth}%
+ \renewcommand \twocolumn [1][\relax]{%
+ \TXN@save@twocolumn[#1]\TXN@measure = \linewidth}%
+}
+% \end{macrocode}
+% \subsection{At the end of the document}
+% \begin{macrocode}
+\AtEndDocument{%
+ \ifTXN@lineating
+ \protected@write \@auxout{}
+ {\string\TXN@lineate{1000000}{1000000}{1000000}}%
+ \def \TXN@lineate #1#2#3{}%
+ \fi
+% \end{macrocode}
+% Check proper nesting of domains
+% \begin{macrocode}
+ \TXN@domain@top
+ \ifnum \TXN@domain@stack@top > \z@
+ \TXN@get@domain@stack
+ \PackageError{TEXNIKA}%
+ {Bad domain nesting: \MessageBreak\the\toks@}
+ {The number after the hyphen is the input line\MessageBreak
+ at which the (unclosed) domain was entered.}%
+ \fi
+% \end{macrocode}
+% Check proper nesting of areas
+% \begin{macrocode}
+ \ifnum \TXN@active@areas > \z@
+ \TXN@list@bad@areas
+ \fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \ifnum \TXN@pass = \tw@
+ \if y\TXN@option@stats
+ \TXN@print@stats
+ \fi
+ \else
+ \ifx \empty \TXN@run@LaTeX@again
+ \if y\TXN@option@stats
+ \TXN@print@stats
+ \fi
+ \else
+ \protected@write \@auxout{}{\string\TXN@set@second@pass}%
+ \toks@ = {Run LaTeX again. A second run is necessary because:}%
+ \TXN@give@reason
+ \edef \TXN@temp {\the\toks@}%
+ \TXN@PackageWarningNoLine {TEXNIKA}{\TXN@temp}%
+ \if y\TXN@option@repeat
+ \newwrite \TXN@rpt
+ \immediate \openout \TXN@rpt = \jobname.rpt\relax
+ \immediate \write \TXN@rpt {repeat}%
+ \fi
+ \fi
+ \global \let \TXN@set@second@pass = \relax
+ \gdef \TXN@pass {1}%
+ \fi
+% \end{macrocode}
+% This ensures that pending writes to .aux get executed, in case
+% the document ends in vertical mode.
+% \begin{macrocode}
+ \ifx \empty \TXN@run@LaTeX@again
+ \else
+ \ifnum \TXN@pass = \@ne
+ \leavevmode
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Listing the bad areas}
+% \begin{macrocode}
+\def \TXN@list@bad@areas {%
+ \toks@ = {}%
+ \TXN@counter@a = \TXN@area@count \TXN@safe
+ \advance \TXN@counter@a by \@ne
+ \TXN@counter = \@ne
+ \loop
+ \ifnum \TXN@counter < \TXN@counter@a
+ \TXN@get \TXN@areas.\TXN@counter \TXN@temp
+ \expandafter \TXN@list@bad@areas@bis \TXN@temp \TXN@nil
+ \advance \TXN@counter by \@ne
+ \repeat
+ \PackageError {TEXNIKA} {There is no \protect\endarea\space for:\the\toks@}
+ {}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@list@bad@areas@bis #1,#2\TXN@nil{%
+ \ifnum #1 > \z@
+ \def \TXN@parameter {#2}%
+ \ifx \TXN@parameter \TXN@safe
+ \def \TXN@temp {}%
+ \else
+ \edef \TXN@temp {[\TXN@parameter]}%
+ \fi
+ \edef \TXN@temp@bis {\the\toks@ \TXN@next@warning@line
+ \@backslashchar area\TXN@temp\space at line #1}%
+ \toks@ = \expandafter {\TXN@temp@bis}%
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Listing the reason(s) for a second run}
+% \begin{macrocode}
+\def \TXN@give@reason {%
+ \if \TXN@option t \TXN@run@LaTeX@again
+ \toks@ = \expandafter {\the\toks@ \TXN@next@warning@line
+ -- You have requested the table of contents}%
+ \fi
+ \if \TXN@option r \TXN@run@LaTeX@again
+ \toks@ = \expandafter {\the\toks@ \TXN@next@warning@line
+ -- You have different styles for `recto' and `verso'}%
+ \fi
+ \if \TXN@option m \TXN@run@LaTeX@again
+ \toks@ = \expandafter {\the\toks@ \TXN@next@warning@line
+ -- You are using `milestones'}%
+ \fi
+ \if \TXN@option p \TXN@run@LaTeX@again
+ \toks@ = \expandafter {\the\toks@ \TXN@next@warning@line
+ -- You are using pagewise numbering}%
+ \fi
+ \if \TXN@option a \TXN@run@LaTeX@again
+ \toks@ = \expandafter {\the\toks@ \TXN@next@warning@line
+ -- You have set \protect\Locus\space\protect\textus\space
+ to \protect\auto\space (or \protect\Auto)}%
+ \fi
+ \if \TXN@option s \TXN@run@LaTeX@again
+ \toks@ = \expandafter {\the\toks@ \TXN@next@warning@line
+ -- Some split lines need to be adjusted}%
+ \fi
+ \if \TXN@option f \TXN@run@LaTeX@again
+ \toks@ = \expandafter {\the\toks@ \TXN@next@warning@line
+ -- You have requested the index of first lines}%
+ \fi
+ \if \TXN@option l \TXN@run@LaTeX@again
+ \toks@ = \expandafter {\the\toks@ \TXN@next@warning@line
+ -- You have used `firstlinetitlemarks'}%
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@next@warning@line {%
+ ^^J\space\space\space\space\space\space\space\space\space\space
+ \space\space\space\space\space\space\space\space\space\space
+ \space\space\space\space\space
+}
+% \end{macrocode}
+% Record the reasons for a second run
+% \begin{macrocode}
+\gdef \TXN@run@LaTeX@again {}
+% \end{macrocode}
+% \begin{macrocode}
+\def \TXN@run@LaTeX@again@auto {a}
+\def \TXN@run@LaTeX@again@split {s}
+\def \TXN@run@LaTeX@again@milestones {m}
+\def \TXN@run@LaTeX@again@rectoverso {r}
+\def \TXN@run@LaTeX@again@firstlines {f}
+\def \TXN@run@LaTeX@again@toc {t}
+\def \TXN@run@LaTeX@again@fl@mark {l}
+\def \TXN@run@LaTeX@again@pagewise {p}
+% \end{macrocode}
+% \begin{macrocode}
+\def \TXN@run@LaTeX@again@reason #1{%
+ \if \TXN@option #1\TXN@run@LaTeX@again
+ \else
+ \xdef \TXN@run@LaTeX@again {#1\TXN@run@LaTeX@again}%
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Printing statistics}
+% \begin{macrocode}
+\gdef \TXN@stats@versus@lines {\z@}
+\gdef \TXN@stats@versus@longest {\z@}
+\gdef \TXN@stats@versus@longest@print {\z@}
+\gdef \TXN@stats@versus@excessus@count {\z@}
+\gdef \TXN@stats@versus@excessus@longest {\z@}
+\gdef \TXN@stats@versus@excessus@shortest {\maxdimen}
+\gdef \TXN@stats@versus@folded {\z@}
+\gdef \TXN@stats@versus@moved {\z@}
+\gdef \TXN@stats@prosa@lines {\z@}
+\def \TXN@next@info@line {%
+ ^^J\space\space\space\space\space\space\space\space\space\space
+ \space\space\space\space\space\space\space\space\space\space
+ \space\space
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@print@stats {%
+ \ifnum \TXN@stats@versus@lines > \z@
+ \toks@ = {Statistics for the Versus domain:}%
+ \toks@ = \expandafter {\the\toks@ \TXN@next@info@line
+ -- \TXN@stats@versus@lines\space lines\space
+ (longest: \TXN@stats@versus@longest)}%
+ \toks@ = \expandafter {\the\toks@ \TXN@next@info@line
+ -- The longest print line is \TXN@stats@versus@longest@print}%
+ \ifnum \TXN@stats@versus@excessus@count = \z@
+ \toks@ = \expandafter {\the\toks@ \TXN@next@info@line
+ -- No folded lines}%
+ \else
+ \toks@ = \expandafter {\the\toks@ \TXN@next@info@line
+ -- \TXN@stats@versus@excessus@count\space folded lines:}%
+ \toks@ = \expandafter {\the\toks@ \TXN@next@info@line
+ \space\space\space
+ longest turnover line: \TXN@stats@versus@excessus@longest}%
+ \toks@ = \expandafter {\the\toks@ \TXN@next@info@line
+ \space\space\space
+ shortest turnover line: \TXN@stats@versus@excessus@shortest}%
+ \fi
+ \edef \TXN@temp {\the\toks@}%
+ \let \on@line = \@empty
+ \PackageInfo {TEXNIKA}{\TXN@temp}%
+ \fi
+}
+% \end{macrocode}
+% \section{Headlines and the table of contents}
+% \begin{macrocode}
+\let \Capita = \TXNt@ttl@setmarks
+% \end{macrocode}
+% These assignments ensure that we print a `clean' text.
+% \begin{macrocode}
+\def \TXN@caput@cleanup {%
+ \let \contents = \TXN@unskip@gobble
+ \let \headline = \TXN@unskip@gobble
+ \let \notcontents = \@firstofone
+ \let \notheadline = \@firstofone
+ \let \indexes = \TXN@unskip@gobble
+ \let \addfirstline = \relax
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@unskip@gobble {\unskip\@gobble}
+% \end{macrocode}
+% \subsection{Processing \TXN@cmd{Caput} for a \TXN@cmd{titulus} object}
+% \begin{macrocode}
+\def \TXN@caput@titulus #1{%
+ \edef \TXN@section@name {\@nameuse{TXN@\TXN@entity[\TXN@c]Caput}}%
+% \end{macrocode}
+% Contents
+% \begin{macrocode}
+ \if \TXN@empty {TXN@\TXN@entity[\TXN@c]Caput@contents}%
+ \else
+ \TXN@caput@titulus@contents {#1}%
+ \fi
+% \end{macrocode}
+% Headline
+% \begin{macrocode}
+ \if \TXN@empty {TXN@\TXN@entity[\TXN@c]Caput@headline}%
+ \else
+ \TXN@caput@titulus@headline {#1}%
+ \fi
+% \end{macrocode}
+% Indexes
+% \begin{macrocode}
+ \ifTXN@CollectingIndexesData
+ \TXN@caput@titulus@indexes {#1}%
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Processing \TXN@cmd{contents}}
+% \begin{macrocode}
+\def \TXN@caput@titulus@contents #1{%
+ \expandafter
+ \ifx \csname TXN@\TXN@entity[\TXN@c]Caput@contents\endcsname
+ \TXN@safe
+ \gdef \TXN@section@contents {#1}%
+ \else
+ \global \expandafter
+ \let \expandafter \TXN@section@contents
+ \csname TXN@\TXN@entity[\TXN@c]Caput@contents\endcsname
+ \fi
+ \begingroup
+ \def \contents ##1{\unskip\gdef \TXN@section@contents{##1}}%
+ \let \notcontents = \TXN@unskip@gobble
+ \let \headline = \TXN@unskip@gobble
+ \let \notheadline = \@firstofone
+ \let \indexes = \TXN@unskip@gobble
+ \let \addfirstline = \relax
+ \setbox \z@ = \hbox {#1}%
+ \endgroup
+ \protected@write \@auxout
+ {\let \label = \@gobble
+ \let \index = \@gobble
+ \let \glossary = \@gobble
+ \let \notcontents = \@gobble
+ \let \headline = \@gobble
+ \let \notheadline = \@firstofone
+ \let \indexes = \@gobble
+ \let \relsize = \@gobble
+ \let \RelSize = \@gobble
+ \let \LetterSpace = \@firstofone
+ \let \letterspace = \@firstofone
+ \let \LETTERspace = \@firstofone
+ \let \addfirstline = \relax
+ \def \\{\protect\\}%
+ }%
+ {\string \@writefile {toc}{\protect \contentsline
+ {\TXN@section@name}{\TXN@section@contents}{\thepage}}}%
+}
+% \end{macrocode}
+% \subsubsection{Processing \TXN@cmd{headline}}
+% \begin{macrocode}
+\def \TXN@caput@titulus@headline #1{%
+ \if \TXN@x {TXN@\TXN@entity[\TXN@c]Caput@headline}\TXN@safe
+ \gdef \TXN@section@headline {#1}%
+ \else
+ \expandafter \let \expandafter \TXN@section@headline
+ \csname TXN@\TXN@entity[\TXN@c]Caput@headline\endcsname
+ \fi
+ \begingroup
+ \def \headline ##1{\unskip\gdef \TXN@section@headline{##1}}%
+ \let \notheadline = \TXN@unskip@gobble
+ \let \contents = \TXN@unskip@gobble
+ \let \notcontents = \@firstofone
+ \let \indexes = \TXN@unskip@gobble
+ \let \addfirstline = \relax
+ \setbox \z@ = \hbox {#1}%
+ \ifx \empty \TXN@section@headline
+ \else
+% \protected@xdef\ttl@prevmarks{\ttl@marks}%
+ \csname \TXN@section@name mark\expandafter\endcsname
+ \expandafter {\TXN@section@headline}%
+% \gdef\ttl@prevmarks{\ttl@marks}%
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+% \subsubsection{Processing \TXN@cmd{indexes}}
+% \begin{macrocode}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@caput@titulus@indexes #1{%
+ \ifnum \TXN@pass = \tw@
+ \TXN@sw@true
+ \if \TXN@empty {TXN@\TXN@entity[\TXN@c]Caput@index}%
+ \TXN@sw@false
+ \else
+ \xdef \TXN@index@type {%
+ \@nameuse{TXN@\TXN@entity[\TXN@c]Caput@index@type}}%
+ \expandafter
+ \TXN@caput@titulus@indexes@type \TXN@index@type \TXN@nil
+ \TXN@sw@false
+ \def \TXN@titulus@article {0}%
+ \expandafter
+ \TXN@caput@titulus@indexes@check \TXN@index@flags\TXN@nil
+ \fi
+ \ifTXN@sw
+ \if \TXN@x {TXN@\TXN@entity[\TXN@c]Caput@index}\TXN@safe
+ \gdef \TXN@indexed@title {#1}%
+ \else
+ \expandafter \let \expandafter \TXN@indexed@title
+ \csname TXN@\TXN@entity[\TXN@c]Caput@index\endcsname
+ \fi
+ \begingroup
+ \gdef \TXN@addfirstline {}%
+ \def \addfirstline {\unskip\gdef \TXN@addfirstline {:}}%
+ \def \indexes ##1{\unskip\gdef \TXN@indexed@title{##1}}%
+ \let \notcontents = \@firstofone
+ \let \notheadline = \@firstofone
+ \let \contents = \TXN@unskip@gobble
+ \let \notcontents = \TXN@unskip@gobble
+ \setbox \z@ = \hbox {#1}%
+ \ifx \empty \TXN@indexed@title
+ \else
+ \TXN@get@page@column {\TXNl@linenumber}%
+ \TXN@make@sort@key {\TXN@indexed@title}%
+ \ifnum \TXN@titulus@article > \z@
+ \expandafter
+ \TXN@articles@process \expandafter {\the\toks@i}%
+ \fi
+ \global \toks@iii = \toks@i
+ \global \toks@i = \expandafter {\TXN@indexed@title}%
+ \ifnum \TXN@titulus@article = \@ne
+ \expandafter
+ \TXN@articles@process \expandafter {\the\toks@i}%
+ \fi
+ \ifx \empty \TXN@addfirstline
+ \immediate \write \TXN@idy {%
+ {\the\toks@iii}{\the\toks@i}%
+ {\TXN@index@type\TXN@addfirstline}{\TXN@page@number}%
+ {\@nameuse{TXN@index@numeri@\TXN@index@type}}%
+ }%
+ \else
+ \edef \TXN@temp {\toks@ = {%
+ {\the\toks@iii}{\the\toks@i}%
+ {\TXN@index@type\TXN@addfirstline}{\TXN@page@number}%
+ {\noexpand\csname TXN@index@numeri@\TXN@index@type\endcsname}%
+ }}%
+ \TXN@temp
+ \xdef \TXN@index@pending {\the\toks@}%
+ \xdef \TXN@index@pending@key {\the\toks@iii}%
+ \global \TXN@index@next@first@linetrue
+ \TXN@enable@first@lines
+ \fi
+ \fi
+ \endgroup
+ \fi
+ \fi
+}
+\def \TXN@caput@titulus@indexes@type #1#2\TXN@nil{%
+ \def \TXN@index@type {#1}%
+}
+\def \TXN@caput@titulus@indexes@check #1{%
+ \ifx \TXN@nil #1\relax
+ \else
+ \expandafter
+ \ifx \TXN@index@type #1\relax
+ \TXN@sw@true
+ \TXN@exxxpandafter \TXN@caput@titulus@indexes@check@bis
+ \else
+ \TXN@exxxpandafter \TXN@caput@titulus@indexes@check
+ \fi
+ \fi
+}
+\def \TXN@caput@titulus@indexes@check@bis #1{%
+ \expandafter
+ \ifx \TXN@index@type l\relax
+ \else
+ \ifx '#1\relax
+ \def \TXN@titulus@article {1}%
+ \else
+ \ifx "#1\relax
+ \def \TXN@titulus@article {2}%
+ \fi
+ \fi
+ \fi
+ \ifx \TXN@nil #1\relax
+ \else
+ \expandafter \TXN@caput@titulus@indexes@check
+ \fi
+}
+% \end{macrocode}
+% \subsection{Processing \TXN@cmd{Caput} for a \TXN@cmd{numerus} object}
+% \begin{macrocode}
+\def \TXN@caput@numerus #1{%
+%<debug> \TXN@trace [#1]\TXN@caput@numerus
+ \if \TXN@empty {TXN@numerus[#1]Caput}%
+ \else
+ \edef \TXN@section@name {\@nameuse{TXN@numerus[#1]Caput}}%
+% \end{macrocode}
+% Contents
+% \begin{macrocode}
+ \if \TXN@empty {TXN@numerus[#1]Caput@contents}%
+ \else
+ \if \TXN@x {TXN@numerus[#1]Caput@contents}\TXN@safe
+ \gdef \TXN@section@contents {\string\numberline
+ {\@nameuse {the\csname TXN@numerus[#1]name\endcsname}}}%
+ \else
+ \global \expandafter
+ \let \expandafter \TXN@section@contents
+ \csname TXN@numerus[#1]Caput@contents\endcsname
+ \fi
+ \protected@write \@auxout {}%
+ {\string \@writefile {toc}{\protect \contentsline
+ {\TXN@section@name}{\TXN@section@contents}{\thepage}}}%
+ \fi
+% \end{macrocode}
+% Headline
+% \begin{macrocode}
+ \if \TXN@empty {TXN@numerus[#1]Caput@headline}%
+ \else
+ \if \TXN@x {TXN@numerus[#1]Caput@headline}\TXN@safe
+ \xdef \TXN@section@headline {%
+ \@nameuse {the\csname TXN@numerus[#1]name\endcsname}}%
+ \else
+ \expandafter \let \expandafter \TXN@section@headline
+ \csname TXN@numerus[#1]Caput@headline\endcsname
+ \fi
+ \ifnum \TXN@pass = \tw@
+ \ifNewPage
+ \if@specialpage
+ \else
+ \global \FirstLineOfPagetrue
+ \fi
+ \fi
+ \fi
+ \TXNt@set@numerus@marks
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \subsection {\TXN@cmd{thecontentslabelfinal}}
+% If |\thecontentslabel| does not contain a period, the
+% macro returns its contents, otherwise
+% it returns the text following the last period.
+% \begin{macrocode}
+\def \thecontentslabelfinal {%
+ \expandafter \TXN@tclf \thecontentslabel.\TXN@nil}
+\def \TXN@tclf #1.#2\TXN@nil{%
+ \ifx \empty#2\empty
+ #1\relax
+ \else
+ \TXN@tclf@bis #2\TXN@nil#1\TXN@nil
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@tclf@bis #1#2\TXN@nil#3\TXN@nil{%
+ \if .#1 #3\relax
+ \else
+ \TXN@tclf #1#2.\TXN@nil
+ \fi
+}
+% \end{macrocode}
+% \subsection {\TXN@cmd{firstlinetitlemarks}}
+% |\firstlinetitlemarks| provides the type of mark discussed on page 260
+% of \TeXbook: ``What we want [...] is a cross between |\topmark| and
+% |\firstmark|: something that will reflect the mark text that represents
+% the state of affairs just after the first line of the page. And \TeX\
+% doesn't provide that.''
+% \begin{macrocode}
+\newif \ifFirstLineOfPage
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\FirstLineTitleMarks}{%
+ \ifTXN@lineating
+ \else
+ \global \TXN@lineatingtrue
+ \TXN@run@LaTeX@again@reason \TXN@run@LaTeX@again@fl@mark
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \firstlinetitlemarks {%
+ \FirstLineTitleMarks
+ \ifFirstLineOfPage
+ \global \FirstLineOfPagefalse
+ \firsttitlemarks
+ \else
+ \toptitlemarks
+ \fi
+}
+% \end{macrocode}
+% To reset the switch at the appropriate times we have to `hook' into
+% some \LaTeX{} commands.
+% \begin{macrocode}
+\let \TXN@pagestyle = \pagestyle
+\def \pagestyle {%
+ \global \FirstLineOfPagefalse
+ \TXN@pagestyle
+}
+\let \TXN@thispagestyle = \thispagestyle
+\def \thispagestyle {%
+ \global \FirstLineOfPagefalse
+ \TXN@thispagestyle
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@tableofcontents {%
+ \ifnum \TXN@pass = \@ne
+ \TXN@run@LaTeX@again@reason \TXN@run@LaTeX@again@toc
+ \fi
+ \TXN@save@tableofcontents
+}
+% \end{macrocode}
+% \section{Preparing and processing the index file}
+% \begin{macrocode}
+\newif \ifTXN@BuildingIndexes
+\newif \ifTXN@IndexesInitialized
+\newif \ifTXN@CollectingIndexesData
+\newif \ifTXN@IndexesBuilt
+\newif \ifTXN@index@first@lines
+\newif \ifTXN@index@next@first@line
+% \end{macrocode}
+% The sorted indexes file
+% \begin{macrocode}
+\newread \TXN@idz
+% \end{macrocode}
+% \subsection{Collecting the information for indexes}
+%
+% \subsubsection{The \TXN@cmd{BuildIndexes} command}
+% \begin{macrocode}
+\newcommand {\BuildIndexes}[2][t]{%
+%<debug> \TXN@trace \BuildIndexes
+ \ifTXN@outside@preamble
+ \PackageError {TEXNIKA}
+ {\protect\BuildIndexes\space can be used only in the preamble}
+ {The command must occur before \protect\begin{document}}%
+ \fi
+ \@ifpackageloaded{poetry}{\TXN@poetrytrue}{}%
+ \ifTXN@poetry
+ \else
+ \PackageError {TEXNIKA}
+ {The `poetry' package is not loaded}
+ {The `poetry' package is required for processing indexes}%
+ \fi
+% \end{macrocode}
+% Check the command argument
+% \begin{macrocode}
+ \global \TXN@IndexesBuiltfalse
+ \def \TXN@parameter {#2}%
+ \def \TXN@temp {yes}%
+ \ifx \TXN@parameter \TXN@temp
+ \global \TXN@BuildingIndexestrue
+ \else
+ \def \TXN@temp {no}%
+ \ifx \TXN@parameter \TXN@temp
+ \global \TXN@BuildingIndexesfalse
+ \else
+ \TXN@sw@false
+ \ifx \empty \TXN@parameter
+ \TXN@sw@true
+ \else
+ \def \TXN@temp {done}%
+ \ifx \TXN@parameter \TXN@temp
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifTXN@sw
+ \global \TXN@BuildingIndexesfalse
+ \global \TXN@IndexesBuilttrue
+ \else
+ \def \TXN@temp {toc}%
+ \ifx \TXN@parameter \TXN@temp
+ \TXN@indexes@toc
+ \else
+ \PackageError {TEXNIKA}
+ {Invalid argument for \protect\BuildIndexes}
+ {Valid arguments are: yes no done (or \protect\empty) toc}%
+ \fi
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \ifTXN@BuildingIndexes
+ \TXN@get@index@flags {#1}%
+ \fi
+}
+% \end{macrocode}
+% Use the toc from the previous run and prevent writing of a new toc
+% \begin{macrocode}
+\def \TXN@indexes@toc {%
+ \global \TXN@IndexesBuilttrue
+ \def \@starttoc ##1{%
+ \begingroup
+ \makeatletter
+ \@input{\jobname.toc}%
+ \makeatother
+ \endgroup
+ }%
+ \let \TXN@writefile = \@writefile
+ \def \@writefile ##1##2{%
+ \def \TXN@temp {toc}%
+ \def \TXN@parameter {##1}%
+ \ifx \TXN@temp \TXN@parameter
+ \else
+ \TXN@writefile ##1##2%
+ \fi
+ }%
+}
+% \end{macrocode}
+% \paragraph{Processing the indexes flags}
+% \begin{macrocode}
+\def \TXN@get@index@flags #1{%
+ \gdef \TXN@index@flags {}%
+ \toks@ = {*}%
+ \TXN@get@index@flags@bis #1\TXN@nil
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@index@flags@bis #1{%
+%<debug> \TXN@trace \TXN@get@index@flags@bis
+ \ifx \TXN@nil #1\relax
+ \else
+ \ifcat a\noexpand#1\relax
+ \toks@ = {#1}%
+ \xdef \TXN@index@flags {\TXN@index@flags#1}%
+ \TXN@xdef {TXN@index@numeri@\the\toks@}{}%
+ \TXN@exxxpandafter \TXN@get@index@flags@ter
+ \else
+ \PackageError {TEXNIKA}
+ {Misplaced optional parameter}
+ {The optional parameter must come after an entry type (a letter)}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@index@flags@ter {%
+%<debug> \TXN@trace \TXN@get@index@flags@ter
+ \futurelet \TXN@token \TXN@get@index@flags@quater
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@index@flags@quater {%
+%<debug> \TXN@trace \TXN@get@index@flags@quater
+ \let \next = \TXN@get@index@flags@bis
+ \ifx \TXN@token \TXN@nil
+ \else
+ \ifcat a\noexpand\TXN@token
+ \else
+ \ifx '\TXN@token
+ \let \next = \TXN@get@index@flags@quinquies
+ \else
+ \ifx "\TXN@token
+ \let \next = \TXN@get@index@flags@quinquies
+ \else
+ \let \next = \TXN@get@index@flags@numerus
+ \fi
+ \fi
+ \fi
+ \fi
+ \next
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@index@flags@quinquies #1{%
+%<debug> \TXN@trace \TXN@get@index@flags@quinquies
+ \expandafter
+ \ifx \the\toks@ l\relax
+ \PackageError {TEXNIKA}
+ {The option #1 cannot be used after 'l'}
+ {It makes no sense to postpone the article for a first line}%
+ \fi
+ \xdef \TXN@index@flags {\TXN@index@flags#1}%
+ \TXN@get@index@flags@ter
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@get@index@flags@numerus #1{%
+%<debug> \TXN@trace \TXN@get@index@flags@numerus
+ \ifcat \relax \noexpand #1\relax
+ \else
+ \PackageError {TEXNIKA}
+ {Extraneous information in the optional argument}
+ {Only \protect\numerus\space subclasses can occur in %
+ the optional parameter}%
+ \fi
+ \TXN@get@subclass@number \numerus #1\relax
+ \ifnum \@tempcnta < \z@
+ \PackageError {TEXNIKA}
+ {\protect#1\space is not a \protect\numerus\space subclass}
+ {Only \protect\numerus\space subclasses can occur in %
+ the optional parameter}%
+ \else
+ \TXN@toks@a = \expandafter \expandafter \expandafter
+ {\csname TXN@index@numeri@\the\toks@\endcsname}%
+ \TXN@toks@b = \expandafter {%
+ \csname c@\expandafter\@gobble\string#1\endcsname=}%
+ \TXN@toks@c = \expandafter {%
+ \csname the\expandafter\@gobble\string#1\endcsname}%
+ \TXN@xdef {TXN@index@numeri@\the\toks@}%
+ {\the\TXN@toks@a\the\TXN@toks@b\the\TXN@toks@c}%
+ \fi
+ \TXN@get@index@flags@ter
+}
+\newif \ifTXN@first@lines@enabled
+% \end{macrocode}
+% \subsubsection{The \TXN@cmd{Indexes} command}
+% \begin{macrocode}
+\newcommand {\Indexes} {%
+ \ifTXN@outside@preamble
+ \else
+ \PackageError {TEXNIKA}
+ {\protect\Indexes\space cannot be used in the preamble}
+ {The command must occur after \protect\begin{document}}%
+ \fi
+
+ \@ifstar {\TXN@indexes@star}{\TXN@indexes}%
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@indexes}[1][]{%
+ \TXN@sw@false
+ \ifTXN@withinVersus
+ \TXN@sw@true
+ \else
+ \ifTXN@withinProsa
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifTXN@sw
+ \PackageError {TEXNIKA}
+ {\protect\Indexes\space cannot be used within a domain}
+ {The command must appear outside Versus and Prosa}%
+ \fi
+ \ifTXN@BuildingIndexes
+ \ifTXN@IndexesInitialized
+ \else
+ \global \TXN@IndexesInitializedtrue
+ \global \TXN@lineatingtrue
+ \ifnum \TXN@pass = \@ne
+ \TXN@run@LaTeX@again@reason \TXN@run@LaTeX@again@firstlines
+ \fi
+ \ifnum \TXN@pass = \tw@
+ \newwrite \TXN@idy
+ \immediate \openout \TXN@idy = \jobname.idy\relax
+ \toks@ = {#1}%
+ \TXN@Indexes@insert@separators
+ \fi
+ \if \TXN@option l\TXN@index@flags
+ \TXN@enable@first@lines
+ \global \TXN@index@first@linestrue
+ \fi
+ \fi
+ \global \TXN@CollectingIndexesDatatrue
+ \fi
+ \ifTXN@IndexesBuilt
+ \ifnum \TXN@pass = \@ne
+ \TXN@run@LaTeX@again@reason \TXN@run@LaTeX@again@firstlines
+ \fi
+ \fi
+}
+% \end{macrocode}
+% Insert the separators (the letters A-Z)
+% \begin{macrocode}
+\def \TXN@Indexes@insert@separators {%
+ \TXN@counter = \@ne
+ \TXN@counter@a = \@nameuse{TXN@alphabetum@\the\toks@ @count}%
+ \advance \TXN@counter@a by \@ne
+ \@whilenum \TXN@counter < \TXN@counter@a \do {%
+ \TXN@Indexes@separators@bis
+ \immediate \write \TXN@idy {%
+ {\TXN@temp}%
+ {\TXN@temp}%
+ {/}%
+ {0}%
+ {}%
+ }%
+ \advance \TXN@counter by \@ne
+ }%
+}
+\def \TXN@Indexes@separators@bis {%
+ \edef \TXN@temp {\expandafter \@secondoftwo
+ \ifcase \the\TXN@counter\csname TXN@alphabetum@\the\toks@\endcsname}%
+}
+% \end{macrocode}
+% \subsubsection{The \TXN@cmd{Indexes*} command}
+% \begin{macrocode}
+\def \TXN@indexes@star {%
+ \TXN@sw@false
+ \ifTXN@withinVersus
+ \TXN@sw@true
+ \else
+ \ifTXN@withinProsa
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifTXN@sw
+ \PackageError {TEXNIKA}
+ {\protect\Indexes\space cannot be used within a domain}
+ {The command must appear outside Versus and Prosa}%
+ \fi
+ \ifTXN@BuildingIndexes
+ \ifTXN@CollectingIndexesData
+ \global \TXN@CollectingIndexesDatafalse
+ \else
+ \PackageError {TEXNIKA}
+ {There was no previous \protect\Indexes\space command}
+ {\protect\Indexes* must come after \protect\Indexes}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@enable@first@lines {%
+ \ifTXN@first@lines@enabled
+ \else
+ \global \TXN@first@lines@enabledtrue
+ \ifnum \TXN@pass = \tw@
+ \newcount \PTR@fl@count
+ \newread \PTR@fl
+ \newread \PTR@fl@bis
+ \immediate \openin \PTR@fl = \jobname.tex\relax
+ \immediate \openin \PTR@fl@bis = \jobname.tex\relax
+ \PTR@fl@count = \z@
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Making the sort key}
+% \begin{macrocode}
+\def \TXN@commands {%
+ \\1\emph\\1\textrm\\1\textsf\\1\texttt\\1\textmd\\1\textbf
+ \\1\textup\\1\textsl\\1\textit\\1\textsc\\1\textnormal
+ \\0\rmfamily\\0\sffamily\\0\ttfamily\\0\mdseries\\0\upshape
+ \\0\slshape\\0\itshape\\0\scshape\\0\normalfont
+ \\0\em\\0\rm\\0\bf\\0\it\\0\tt\\0\sc\\0\sl\\0\sf
+ \\0\tiny\\0\scriptsize\\0\footnotesize\\0\small
+ \\0\normalsize\\0\large\\0\Large\\0\LARGE\\0\huge\\0\Huge
+ \\1\MakeUppercase\\7\textsuperscript\\8\footnote
+ \\1\textfrak\\1\textswab\\1\textgoth
+ \\0\frakfamily\\0\swabfamily\\0\gothfamily
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \\1\incipit\\1\persona
+ \\0\0\\0\1\\0\2\\0\3\\0\4\\0\5\\0\6\\0\7\\0\8\\0\9
+ \\0\auto\\0\Auto\\0\noincipit
+ \\0\textemdash\\0\textendash\\0\textexclamdown\\0\textquestiondown
+ \\0\textquotedblleft\\0\textquotedblright
+ \\0\textquoteleft\\0\textquoteright
+ \\0\guillemetleft\\0\guillemetright
+ \\0\textemdash\\0\textendash
+ \\0\addfirstline
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@make@sort@key #1{%
+%<debug> \TXN@trace \TXN@make@sort@key
+ \begingroup
+ \def \\##1##2{%
+ \if 1##1\relax
+ \def ##2####1{####1}%
+ \else
+ \if 0##1\relax
+ \def ##2{}%
+ \fi
+ \fi}%
+ \TXN@commands
+ \def \\{}%
+ \edef \TXN@temp {#1}%
+ \global \toks@i = \expandafter {\TXN@temp}%
+ \endgroup
+ \toks@ = \toks@i
+ \global \toks@i = {}%
+ \expandafter \TXN@make@sort@key@bis \the\toks@\TXN@nil
+}
+\def \TXN@make@sort@key@bis #1{%
+ \let \next = \TXN@make@sort@key@bis
+ \ifcat \noexpand#1a\relax
+ \global \toks@i = {#1}%
+ \let \next = \TXN@make@sort@key@ter
+ \fi
+ \next
+}
+\def \TXN@make@sort@key@ter #1\TXN@nil{%
+ \global \toks@i = \expandafter {\the\toks@i#1}%
+ \expandafter \TXN@trim \expandafter {\the\toks@i}%
+ \global \toks@i = \TXN@trimmed
+}
+% \end{macrocode}
+% \subsubsection{Moving an article at the end ot the title}
+%
+% \begin{macrocode}
+\def \TXN@articles@english {\*\space{The}\*\space{A}\*\space{An}}
+% \end{macrocode}
+% Each entry has two arguments: the terminating character (either
+% space or apostrophe) and the article itself.
+% \begin{macrocode}
+\def \TXN@articles@italian {%
+ \*\space{Il}\*\space{La}\*\space{Lo}\*\space{I}\*\space{Gli}%
+ \*\space{Le}\*\space{Un}\*\space{Una}\*'{L}\*'{Un}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@articles@french {%
+ \*\space{Le}\*\space{La}\*\space{Les}%
+ \*\space{Un}\*\space{Une}\*'{L}\*'{Un}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@articles@german {%
+ \*\space{Der}\*\space{Die}\*\space{Das}%
+ \*\space{Ein}\*\space{Eine}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@articles@spanish {%
+ \\\space{El}\\\space{La}\\\space{Los}\\\space{Las}%
+ \\\space{Un}\\\space{Una}}
+% \end{macrocode}
+% Set if the string has at least one space/apostrophe
+% \begin{macrocode}
+\newif \ifTXN@article@space
+\newif \ifTXN@article@apostrophe
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@articles@process #1{%
+%<debug> \TXN@trace \TXN@articles@process
+ \global \toks@i = {#1}%
+ \TXN@sw@false
+ \TXN@articles@check@space #1 \TXN@nil
+ \TXN@articles@check@apostrophe #1'\TXN@nil
+ \ifTXN@sw
+ \TXN@sw@false
+ \begingroup
+ \let \\=\relax
+ \let \*= \TXN@articles@process@article
+ \@nameuse {TXN@articles@%
+ \ifx \@undefined\languagename english%
+ \else \languagename\fi}%
+ \endgroup
+ \fi
+}
+% \end{macrocode}
+% Check if the strings contain a space/apostrophe
+% \begin{macrocode}
+\def \TXN@articles@check@space #1 #2\TXN@nil {%
+ \@ifmtarg {#2} {\TXN@article@spacefalse}
+ {\TXN@sw@true\TXN@article@spacetrue}}
+\def \TXN@articles@check@apostrophe #1'#2\TXN@nil {%
+ \@ifmtarg {#2} {\TXN@article@apostrophefalse}
+ {\TXN@article@apostrophetrue\TXN@sw@true}}
+% \end{macrocode}
+% Check if the article occurs at the start of the string
+% \begin{macrocode}
+\def \TXN@articles@process@article #1#2{%
+ \ifTXN@sw
+ \else
+ \ifx \space #1\relax
+ \ifTXN@article@space
+ \gdef \TXN@gtemp {#2}%
+ \expandafter \TXN@article@check@space \the\toks@i\TXN@nil
+ \fi
+ \fi
+ \fi
+ \ifTXN@sw
+ \else
+ \ifx '#1\relax
+ \ifTXN@article@apostrophe
+ \gdef \TXN@gtemp {#2}%
+ \expandafter \TXN@article@check@apostrophe \the\toks@i'\TXN@nil
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+% Extract the initial string and compare it with the article
+% \begin{macrocode}
+\def \TXN@article@check@space #1\TXN@nil {%
+ \TXN@article@check@space@bis #1 \TXN@nil}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@article@check@space@bis #1 #2 \TXN@nil {%
+ \gdef \TXN@gtemp@bis {#1}%
+ \ifx \TXN@gtemp \TXN@gtemp@bis
+ \TXN@article@swap #2\TXN@nil#1\TXN@nil
+ \fi
+}
+\def \TXN@article@check@apostrophe #1'#2'\TXN@nil {%
+ \gdef \TXN@gtemp@bis {#1}%
+ \ifx \TXN@gtemp \TXN@gtemp@bis
+ \TXN@article@swap #2\TXN@nil#1'\TXN@nil
+ \fi
+}
+% \end{macrocode}
+% Move the article at the end of the string
+% \begin{macrocode}
+\def \TXN@article@swap #1#2\TXN@nil#3\TXN@nil{%
+ \TXN@sw@true
+ \edef \TXN@temp {\global\toks@i={#1}}%
+ \uppercase \expandafter {\TXN@temp}%
+ \global \toks@i = \expandafter {\the\toks@i#2, #3}%
+}
+% \end{macrocode}
+% \subsection{Typesetting an index}
+% \begin{macrocode}
+\newcommand {\TypesetIndex}[3][t]{%
+%<debug> \TXN@trace \TypesetIndex
+ \ifTXN@IndexesBuilt
+ \ifnum \TXN@pass = \tw@
+ \xdef \TXN@typeset@types {#1}%
+ \IfFileExists {\jobname.idz}
+ {}
+ {\PackageError {TEXNIKA}
+ {The \jobname.idz file does not exist}
+ {}}%
+ \long \def \TXN@TypesetIndex@postlude {#3}%
+ \begingroup
+ \TXN@TypesetIndex@prelude {#1}%
+ #2\relax
+ \TXN@TypesetIndex@prelude@bis
+ \TXN@exxxpandafter \TXN@TypesetIndex@start
+ \fi
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Code executed before the command argument}
+% \begin{macrocode}
+\def \TXN@TypesetIndex@prelude #1{%
+% \end{macrocode}
+% Prevent printing of other |\numerus| subclasses
+% \begin{macrocode}
+ \TXN@counter = \TXN@numerus@max \TXN@safe
+ \loop
+ \TXN@def {TXN@numerus[\TXN@c]printing}{0}%
+ \ifnum \TXN@counter > \z@
+ \advance \TXN@counter by \m@ne
+ \repeat
+ \TXN@withinIndexestrue
+% \end{macrocode}
+% Create the |\titulus| subclass for the separator and disable incipit
+% \begin{macrocode}
+ \Novus \titulus \IndexSeparator
+ \Facies {}
+ \SpatiumSupra {.5\leading}
+ \Facies \incipit {}
+% \end{macrocode}
+% Create the |\textus| and |\numerus| subclasses for the line
+% types in the optional argument. The subclasses for 'l' are
+% always created (for |\addfirstline|)
+% \begin{macrocode}
+ \def \TXN@indexes@types {#1}%
+ \if \TXN@option l\TXN@indexes@types
+ \else
+ \edef \TXN@indexes@types {l\TXN@indexes@types}%
+ \fi
+ \expandafter
+ \TXN@TypesetIndex@prelude@create \TXN@indexes@types \TXN@nil
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@TypesetIndex@prelude@create #1{%
+ \ifx \TXN@nil #1\relax
+ \else
+ \ifcat a\noexpand#1\relax
+ \edef \TXN@temp {\noexpand\Novus* \noexpand\textus
+ \expandafter\noexpand\csname #1IndexEntryText\endcsname}%
+ \TXN@temp
+ \Facies {##1}
+ \edef \TXN@temp {\noexpand\Novus* \noexpand\numerus
+ \expandafter\noexpand\csname #1IndexEntryPage\endcsname}%
+ \TXN@temp
+ \Facies {##1}
+ \Locus {\rightmargin}
+ \fi
+ \expandafter \TXN@TypesetIndex@prelude@create
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Code executed after the command argument}
+% \begin{macrocode}
+\def \TXN@TypesetIndex@prelude@bis {%
+% \end{macrocode}
+% Switch |\auto| off and set the |\textus| position
+% \begin{macrocode}
+ \def \PTR@auto@mode {}%
+ \Locus \textus {\leftmargin+\z@}
+ \Locus \textus {+\z@}
+ \Forma \strophae {}
+% \end{macrocode}
+% Compute how much space to reserve for the page number
+% \begin{macrocode}
+ \TXN@dim@a = \z@
+ \expandafter
+ \TXN@TypesetIndex@page@digit \TXN@indexes@types \TXN@nil
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \TXN@get@page@column {\TXNl@linenumber}%
+ \count@ = \TXN@page@number
+ \setbox\z@ = \hbox {\hskip
+ \ifnum \count@ > 999 4.5\else
+ \ifnum \count@ > 99 3.5\else 2.5\fi\fi\TXN@dim@a}%
+ \Modus \textus {\measure{-\wd\z@}}
+% \end{macrocode}
+% Allow for folded lines
+% \begin{macrocode}
+ \Locus \excessus {\textleftmargin + 1em}
+ \Facies {##1}
+ \Modus {\unhyphenated}
+}
+% \end{macrocode}
+% Compute the maximum width of a digit in a page number
+% \begin{macrocode}
+\def \TXN@TypesetIndex@page@digit #1{%
+ \ifx \TXN@nil #1\relax
+ \else
+ \ifcat a\noexpand#1\relax
+ \setbox\z@ = \hbox {%
+ \expandafter \Locus \csname #1IndexEntryPage\endcsname{}%
+ \@nameuse{#1IndexEntryPage}*{9}}%
+ \ifdim \wd\z@ > \TXN@dim@a
+ \TXN@dim@a = \wd\z@
+ \fi
+ \fi
+ \expandafter \TXN@TypesetIndex@page@digit
+ \fi
+}
+% \end{macrocode}
+% \subsubsection{Typesetting an index line}
+% \begin{macrocode}
+\def \TXN@TypesetIndex@start {%
+ \immediate \openin \TXN@idz = \jobname.idz\relax
+ \Versus
+ \parskip 0pt plus 1pt
+ \TXN@TypesetIndex@read
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@TypesetIndex@read {%
+ \makeatletter
+ \immediate \read \TXN@idz to \TXN@idz@line
+ \makeatother
+ \ifeof \TXN@idz
+ \expandafter \TXN@TypesetIndex@finish
+ \else
+ \expandafter \TXN@TypesetIndex@line
+ \fi
+}
+% \end{macrocode}
+% At the end of the .idz file
+% \begin{macrocode}
+\def \TXN@TypesetIndex@finish {%
+ \immediate \closein \TXN@idz
+ \endVersus
+ \TXN@TypesetIndex@postlude
+ \endgroup
+}
+% \end{macrocode}
+% Typeset an index line
+% \begin{macrocode}
+\def \TXN@indexes@initial {}
+\newif \ifTXN@index@normal@line
+\def \TXN@TypesetIndex@line {%
+ \expandafter \TXN@TypesetIndex@line@bis \TXN@idz@line
+}
+\def \TXN@TypesetIndex@line@bis #1#2#3#4#5{%
+ \def \TXN@index@line@flags {#3}%
+ \TXN@get@line@type #3\TXN@nil
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \if /\TXN@line@type
+ \def \TXN@indexes@initial {#2}%
+ \fi
+% \end{macrocode}
+% Check if line is to be typeset
+% \begin{macrocode}
+ \TXN@sw@false
+ \if \TXN@option +\TXN@index@line@flags
+ \if \TXN@option t\TXN@typeset@types
+ \TXN@sw@true
+ \fi
+ \else
+ \if \TXN@option \TXN@line@type \TXN@typeset@types
+ \TXN@sw@true
+ \fi
+ \fi
+ \ifTXN@sw
+ \TXN@toks@a = {#2}%
+ \ifx \empty \TXN@indexes@initial
+ \else
+ \IndexSeparator \TXN@indexes@initial
+ \def \TXN@indexes@initial {}%
+ \ifx \empty \TXN@FaciesIncipit
+ \else
+ \TXN@TypesetIndex@incipit #2\TXN@nil
+ \fi
+ \fi
+ \expandafter \TXN@get@subclass@number \expandafter \textus
+ \csname \TXN@line@type IndexEntryText\endcsname
+ \TXN@counter@a = \@tempcnta
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \TXN@index@normal@linetrue
+ \if \TXN@option :\TXN@index@line@flags
+ \TXN@index@normal@linefalse
+ \else
+ \if \TXN@option *\TXN@index@line@flags
+ \TXN@index@normal@linefalse
+ \fi
+ \fi
+ \TXN@leadersfalse
+ \ifTXN@index@normal@line
+ \@nameuse{\TXN@line@type IndexEntryPage}*{#4}%
+ \edef \TXN@flags {%
+ \@nameuse{TXN@textus[\the\TXN@counter@a]flagsModus@recto}}%
+ \if \TXN@option \TXN@o@Leaders \TXN@flags
+ \TXN@leaderstrue
+ \edef \TXN@leaders@width {%
+ \@nameuse{TXN@textus[\the\TXN@counter@a]leaders@recto}}%
+ \fi
+ \toks@ = {#5}%
+ \else
+ \toks@ = {}%
+ \TXN@TypesetIndex@line@ter #5\TXN@nil
+ \fi
+ \the\toks@
+ \toks@ = {}%
+ \if \TXN@option *\TXN@index@line@flags
+ \else
+ \toks@ = {\let \\=\TXN@TypesetIndex@line@esc@esc
+ \let \addfirstline = \relax
+ \let \incipit = \TXN@self
+ \let \1=\ignorespaces \let \2=\ignorespaces
+ \let \3=\ignorespaces \let \4=\ignorespaces
+ \let \5=\ignorespaces \let \6=\ignorespaces
+ \let \7=\ignorespaces \let \8=\ignorespaces
+ \let \9=\ignorespaces \def \persona #1{\ignorespaces}
+ }%
+ \fi
+ \leavevmode
+ \@nameuse{TXN@textus[\the\TXN@counter@a]Facies}%
+ {\the\toks@\the\TXN@toks@a}\PTR@atendofline
+ \@nameuse{\TXN@line@type IndexEntryPage}{}%
+ \if \TXN@option :\TXN@index@line@flags
+ \penalty \@M
+ \fi
+ \if \TXN@option *\TXN@index@line@flags
+ \penalty \@M
+ \fi
+ \fi
+ \TXN@TypesetIndex@read
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@TypesetIndex@line@ter #1{%
+ \ifx \TXN@nil #1\relax
+ \else
+ \ifcat \relax \noexpand #1\relax
+ \toks@ = \expandafter {\the\toks@#1=0\relax}%
+ \fi
+ \expandafter \TXN@TypesetIndex@line@ter
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@TypesetIndex@line@esc@esc}[1][]{\space\ignorespaces}
+\def \TXN@TypesetIndex@incipit #1#2\TXN@nil{%
+ \TXN@toks@a = {{\TXN@FaciesIncipit {#1}{\relax}{\relax}{\relax}}#2}%
+}
+% \end{macrocode}
+% The line type is always the first character
+% \begin{macrocode}
+\def \TXN@get@line@type #1#2\TXN@nil {\def \TXN@line@type {#1}}
+% \end{macrocode}
+% \section{Displaying \TXN@cmd{Measure} and \TXN@cmd{linewidth}}
+% \begin{macrocode}
+\newif \ifTXN@show@versus
+\newif \ifTXN@show@prosa
+\newif \ifTXN@show@lineate
+\newif \ifTXN@show@measure
+\newif \ifTXN@show@starred
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \ShowMeasure {%
+ \TXN@show@measuretrue
+ \@ifstar {\TXN@show@starredtrue\TXN@show@width}
+ {\TXN@show@starredfalse\TXN@show@width}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \ShowLineWidth {%
+ \TXN@show@measurefalse
+ \@ifstar {\TXN@show@starredtrue\TXN@show@width}
+ {\TXN@show@starredfalse\TXN@show@width}}
+% \end{macrocode}
+% The common code
+% \begin{macrocode}
+\newcommand {\TXN@show@width} [1][0pt]{%
+ \TXN@show@versusfalse
+ \TXN@show@lineatefalse
+ \ifTXNl@lineating
+ \TXN@show@lineatetrue
+ \TXNl@lineate \relax
+ \fi
+ \ifTXN@withinVersus
+ \TXN@show@versustrue
+ \global \PTR@par@startedfalse
+ \endVersus
+ \fi
+ \begingroup
+ \everypar = {}%
+ \leftskip = \z@
+ \rightskip = \z@
+ \TXNcmr
+ \hsize = \linewidth
+ \setbox \z@ = \hbox {%
+ \ttfamily
+ \ifTXN@show@measure
+ \ \char`\\Measure\ %
+ \else
+ \ \char`\\linewidth\ %
+ \fi
+ \ifTXN@show@starred
+ =\ \the\ifTXN@show@measure \TXN@measure\ \else \linewidth\ \fi
+ \fi
+ }%
+ \ifdim #1 = \z@
+ \else
+ \dimen@ = .5\wd\z@
+ \advance \dimen@ by -.0125pt
+ \setbox \z@ = \hbox {%
+ \rlap{\kern \dimen@ \vrule width .025pt %
+ \ifdim #1 > \z@ depth\else height -\fi#1\relax
+ }\box\z@}%
+ \ht\z@ = \ht\strutbox
+ \dp\z@ = \dp\strutbox
+ \fi
+ \dimen@ = \ifTXN@show@measure \TXN@measure \else \linewidth\fi
+ \advance \dimen@ by -\wd\z@
+ \advance \dimen@ by -1.5em %
+ \divide \dimen@ by \tw@
+ \vskip .5\baselineskip
+ \noindent
+ \ifTXN@show@measure
+ \TXN@assign \dimen@@ =
+ {TXN@textus[\TXN@theTextus]offset@\TXN@theFolio}%
+ \kern \dimen@@
+ \fi
+ \TXN@assign \dimen@@ = {TXN@textus[\TXN@theTextus]shift}%
+ \ifdim \dimen@@ = \z@
+ \else
+ \kern \dimen@@
+ {\setbox \tw@ = \hbox {%
+ \vrule height \ht\strutbox depth \dp\strutbox width .125pt}%
+ \global \dimen@i = \wd\tw@
+ \box \tw@
+ }%
+ \advance \dimen@@ by \dimen@i
+ \kern -\dimen@@
+ \fi
+ \hbox to \dimen@ {\leftarrowfill}%
+ \kern .75em \box \z@ \kern .75em %
+ \hbox to \dimen@ {\rightarrowfill}%
+ \vskip .5\baselineskip
+ \endgroup
+ \ifTXN@show@lineate
+ \TXNl@lineate \TXN@process@line
+ \fi
+ \ifTXN@show@versus
+ \expandafter \versus
+ \fi
+}
+%<*debug>
+% \end{macrocode}
+% \section{Debugging code}
+% \begin{macrocode}
+\showboxdepth=1000
+\showboxbreadth=1000
+\newif \ifTXN@debug
+\newif \ifTXN@debug@sw
+\newcount \TXN@debug@count
+% \end{macrocode}
+%
+% 0 control sequences \\
+% 1 boxes \\
+% 2 counters \\
+% 3 dimensions \\
+% 4 token registers \\
+% 5 macros \\
+% 6 mode \\
+% 7 spatium \\
+% 8 domain \\
+% 9 set tracingmacros \\
+% A area \\
+% R replay
+% \begin{macrocode}
+\def \TXN@debug@options {}%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXNdebug #1{%
+ \ifx -#1\relax
+ \TXN@debugfalse
+ \else
+ \TXN@debugtrue
+ \ifx +#1\relax
+ \def \TXN@debug@options {0123456}%
+ \else
+ \def \TXN@debug@options {#1}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@debug@check #1{%
+ \TXN@debug@swfalse
+ \def \TXN@debug@value {#1}%
+ \expandafter \TXN@debug@check@bis \TXN@debug@options\TXN@nil
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def \TXN@debug@check@bis #1{%
+ \ifx \TXN@nil #1\relax
+ \else
+ \if \TXN@debug@value #1\relax
+ \TXN@debug@swtrue
+ \fi
+ \expandafter \TXN@debug@check@bis
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@trace}[2][\relax]{%
+ \ifTXN@debug
+ \TXN@debug@check {0}%
+ \ifTXN@debug@sw
+ \ifx \relax#1\relax
+ \def \TXN@debug@temp {}%
+ \else
+ \edef \TXN@debug@temp {[#1]\space}%
+ \fi
+ \typeout {\TXN@debug@temp \protect#2}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@trace@box}[2][\relax]{%
+ \ifTXN@debug
+ \TXN@debug@check {1}%
+ \ifTXN@debug@sw
+ \ifx \relax #1\relax
+ \else
+ \typeout {[#1]\space}%
+ \fi
+ \TXN@debug@count = \errorcontextlines
+ \errorcontextlines = \z@
+ \showbox #2\relax
+ \errorcontextlines = \TXN@debug@count
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@trace@count}[2][\relax]{%
+ \ifTXN@debug
+ \TXN@debug@check {2}%
+ \ifTXN@debug@sw
+ \ifx \relax #1\relax
+ \def \TXN@debug@temp {}%
+ \else
+ \def \TXN@debug@temp {#1= }%
+ \fi
+ \typeout {\TXN@debug@temp /\the#2/}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@trace@dim}[2][\relax]{%
+ \ifTXN@debug
+ \TXN@debug@check {3}%
+ \ifTXN@debug@sw
+ \ifx \relax #1\relax
+ \def \TXN@debug@temp {}%
+ \else
+ \edef \TXN@debug@temp {[#1]\space}%
+ \fi
+ \typeout {\TXN@debug@temp \protect#2=\the#2}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@trace@toks}[2][\relax]{%
+ \ifTXN@debug
+ \TXN@debug@check {4}%
+ \ifTXN@debug@sw
+ \ifx \relax #1\relax
+ \def \TXN@debug@temp {}%
+ \else
+ \edef \TXN@debug@temp {[#1]\space}%
+ \fi
+ \typeout {\TXN@debug@temp \protect#2=/\the#2/}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@trace@macro}[2][\relax]{%
+ \ifTXN@debug
+ \TXN@debug@check {5}%
+ \ifTXN@debug@sw
+ \ifx \relax #1\relax
+ \def \TXN@debug@temp {}%
+ \else
+ \edef \TXN@debug@temp {[#1]\space}%
+ \fi
+ \typeout {\TXN@debug@temp \protect#2=\meaning#2}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@trace@mode}[1][\relax]{%
+ \begingroup
+ \ifTXN@debug
+ \TXN@debug@check {6}%
+ \ifTXN@debug@sw
+ \ifhmode
+ \typeout {[#1]\space Hmode}%
+ \else
+ \typeout {[#1]\space Vmode}%
+ \fi
+ \fi
+ \fi
+ \endgroup
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@trace@spatium}[1]{%
+ \ifTXN@debug
+ \TXN@debug@check {7}%
+ \ifTXN@debug@sw
+ \typeout {Spatium: \noexpand#1 \meaning#1}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@trace@domain}[2]{%
+ \ifTXN@debug
+ \TXN@debug@check {8}%
+ \ifTXN@debug@sw
+ \typeout {\number\inputlineno\space
+ \ifnum #1=\z@ Enter\else Leave\fi \space
+ \ifnum #2=\@ne Versus\else Prosa\fi \space
+ }%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@tracing}[1]{%
+ \ifTXN@debug
+ \TXN@debug@check {9}%
+ \ifTXN@debug@sw
+ \ifx +#1
+ \global\tracingmacros=2%
+ \global\tracingcommands=2%
+ \else
+ \global\tracingmacros=0%
+ \global\tracingcommands=0%
+ \fi
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@trace@area} {%
+ \ifTXN@debug
+ \TXN@debug@check {A}%
+ \ifTXN@debug@sw
+ \typeout {AREA \number\TXN@area@ind baselineskip=\the\baselineskip}%
+ \typeout {height = \csname
+ TXN@area[\TXN@area@ind]height\endcsname}%
+ \typeout {depth = \csname
+ TXN@area[\TXN@area@ind]depth\endcsname}%
+ \typeout {first height = \csname
+ TXN@area[\TXN@area@ind]first@line@height\endcsname}%
+ \typeout {right = \csname
+ TXN@area[\TXN@area@ind]rightedge\endcsname}%
+ \typeout {left = \csname
+ TXN@area[\TXN@area@ind]leftedge\endcsname}%
+ \typeout {spatium = \csname
+ TXN@area[\TXN@area@ind]spatium\endcsname}%
+ \typeout {stropha = \csname
+ TXN@area[\TXN@area@ind]stropha\endcsname}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@trace@replay} {%
+ \ifTXN@debug
+ \TXN@debug@check {R}%
+ \ifTXN@debug@sw
+ \typeout {REPLAY at \number\TXN@auy@lineno: \meaning\TXN@auy@command}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TXN@trace@save@command} {%
+ \ifTXN@debug
+ \TXN@debug@check {S}%
+ \ifTXN@debug@sw
+ \typeout {Save command at \the\inputlineno:
+ [\the\TXNl@linenumber] \the\toks@}%
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand {\TypeOut}[2][]{\typeout {[[#1] #2}}
+\newcommand {\TypeOutCs}[2][]{\typeout {[[#1] \expandafter
+ \meaning\csname#2\endcsname}}
+\newcommand {\ShowMode}[1][]{\ifhmode\typeout{#1 H}\else\typeout{#1 V}\fi}
+%</debug>
+% \end{macrocode}
+%
+% \Finale
+%
+\endinput