% \iffalse % RCS: $Id: jadetex.dtx,v 1.14 2003/05/18 11:26:44 icastle Exp $ % File: jadetex.dtx. Copyright (C) 1996, 1997, 1998, 2000, 2001 % Sebastian Rahtz % Copyright (C) 2002, 2003 % Ian Castle % % Permission is hereby granted, free of charge, to any person obtaining % a copy of this software and associated documentation files (the % ``Software''), to deal in the Software without restriction, including % without limitation the rights to use, copy, modify, merge, publish, % distribute, sublicense, and/or sell copies of the Software, and to % permit persons to whom the Software is furnished to do so, subject to % the following conditions: % % The above copyright notice and this permission notice shall be included % in all copies or substantial portions of the Software. % % THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS % OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF % MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. % IN NO EVENT SHALL SEBASTIAN RAHTZ BE LIABLE FOR ANY CLAIM, DAMAGES OR % OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, % ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR % OTHER DEALINGS IN THE SOFTWARE. % %\ProvidesFile{dsssl.def} %<*dtx> \ProvidesFile{jadetex.ltx} % %\NeedsTeXFormat{LaTeX2e}[1995/06/01] %\ProvidesFile{jadetex.ltx} %\GetFileInfo{JadeTeX.dtx} % \ProvidesFile{jadetex.drv} % \fi % \ProvidesFile{jadetex.dtx} % % \iffalse %<*driver> \documentclass{ltxdoc} \usepackage{times,array,longtable,colortbl} \usepackage[T1]{fontenc} \makeatletter \let\\\@centercr \def\arraybackslash{\let\\=\@arraycr} \newcolumntype{P}[1]{>{\raggedright\arraybackslash}p{#1}} \makeatother \EnableCrossrefs \CodelineIndex \begin{document} \title{Jade DSSSL \TeX{} backend macros} \author{Sebastian Rahtz\\Email: \texttt{sebastian.rahtz@oucs.ox.ac.uk}} \date{printed \today} \maketitle \tableofcontents \DocInput{jadetex.dtx} \end{document} % % \fi % \CheckSum{4434} % \StopEventually{} % % \section{Introduction} % \subsection{Acknowledgements} % Developed from the skeleton by David Megginson % (\texttt{dmeggins@microstar.com}), who wrote the original Jade % \texttt{TeXFOTBuilder} module. This version incorporates support for % important changes made by Paul Prescod and Kathleen Marszalek for tables; % those changes and the corresponding work in JadeTeX were commissioned by % Novare International, to whom considerable thanks are due. % % Considerable benefit has been had from corrections, additions and % discusions from David Carlisle, Matthias Clasen, % Ulrich Drepper and Christian Leutloff. % % \subsection{Usage} % The file |jadetex.ltx| can either be loaded before the Jade output % or (better) made into a format file for fast loading; it % sits on top of \LaTeX, so do: % \begin{verbatim} % tex -ini \&hugelatex jadetex.ltx '\dump' % \end{verbatim} % Be warned that because many elements can get labelled in JadeTeX, it is % easy to run out of memory. You will very likely need to increase poolsize. % % If you really want to gain speed and save memory, % prepare an even more cut down \LaTeX with unneeded chunks cut out. % (such as the picture environment etc). Be careful and be legal, please. % % We build on \LaTeX, but do not need a lot of the paraphernalia % of the document classes, so we just load the \texttt{minimal} class, % designed for this purpose. We also need access to % input and output font encoding, color, graphics inclusion, and % headers and footers; so we load some standard packages. The % \texttt{inputenc} option is temporary, and needs more thought. % Eventually we want Unicode input working, with Omega. % \begin{macrocode} %<*package> \def\JadeTeXMajorVersion{3} \def\JadeTeXMinorVersion{13} \def\JadeTeXDate{2003/04/27} \documentclass{minimal} \RequirePackage{array}[1995/01/01] \RequirePackage{longtable}[1995/01/01] \RequirePackage{color}[1997/09/09] \RequirePackage{colortbl} \RequirePackage{marvosym} \RequirePackage{graphicx}[1997/06/09] \IfFileExists{multicol.sty} {\RequirePackage{multicol}[1997/12/16]} {\newenvironment{multicols}[1]% {\typeout{Warning, at line \the\inputlineno, multicol package not available}}{}% } \RequirePackage[normalem]{ulem} \RequirePackage{fancyhdr} \makeatletter \count@\time \divide\count@ 60 \count2=-\count@ \multiply\count2 60 \advance\count2 \time \edef\today{% \the\year/\two@digits{\the\month}/\two@digits{\the\day}:% \two@digits{\the\count@}:\two@digits{\the\count2}} \begingroup \catcode`P=12 \catcode`T=12 \lowercase{\endgroup \gdef\rem@ptetc#1.#2PT#3!{#1\ifnum#2>\z@.#2\fi}% } \def\strip@pt@and@otherjunk#1{\expandafter\rem@ptetc\the#1!} \makeatother \def\TeXFOTversion{0.0} \makeatletter \ifx\pushocplist\@undefined \RequirePackage[implicit=true,colorlinks,linkcolor=black,bookmarks=true]{hyperref}[2000/03/01] \def\PDFBorders{0 0 0} \RequirePackage[dsssl]{inputenc}[1997/12/20] \RequirePackage{mlnames} \RequirePackage{unicode} \def\DefineCharacter#1#2#3{\expandafter\def\csname!#1\endcsname{#3}} \def\DefineEntity#1#2{\expandafter\def\csname Ent#1\endcsname{#2}} \def\Entity#1{\csname Ent#1\endcsname} \input ucharacters.sty \input uentities.sty % \end{macrocode} % Define the characters under 127, normally not provided by ucharacters.sty % \begin{macrocode} \DefineCharacter{32}{20}{\space } \DefineCharacter{33}{21}{!} \DefineCharacter{34}{22}{"} \DefineCharacter{35}{23}{\#} \DefineCharacter{36}{24}{\ifmmode \$\else \textdollar \fi}% \DefineCharacter{37}{25}{\%} \DefineCharacter{38}{26}{\&} \DefineCharacter{39}{27}{\textquotesingle } \DefineCharacter{40}{28}{(} \DefineCharacter{41}{29}{)} \DefineCharacter{42}{2A}{\ensuremath{\ast }} \DefineCharacter{43}{2B}{\ensuremath{+}} \DefineCharacter{44}{2C}{,} \DefineCharacter{45}{2D}{\ensuremath{-}} \DefineCharacter{46}{2E}{.} \DefineCharacter{47}{2F}{/} \DefineCharacter{48}{30}{0} \DefineCharacter{49}{31}{1} \DefineCharacter{50}{32}{2} \DefineCharacter{51}{33}{3} \DefineCharacter{52}{34}{4} \DefineCharacter{53}{35}{5} \DefineCharacter{54}{36}{6} \DefineCharacter{55}{37}{7} \DefineCharacter{56}{38}{8} \DefineCharacter{57}{39}{9} \DefineCharacter{58}{3A}{:} \DefineCharacter{59}{3B}{\ensuremath{;}} \DefineCharacter{60}{3C}{\ensuremath{<}} \DefineCharacter{61}{3D}{=} \DefineCharacter{62}{3E}{\ensuremath{>}} \DefineCharacter{63}{3F}{?} \DefineCharacter{64}{40}{@} \DefineCharacter{65}{41}{A} \DefineCharacter{66}{42}{B} \DefineCharacter{67}{43}{C} \DefineCharacter{68}{44}{D} \DefineCharacter{69}{45}{E} \DefineCharacter{70}{46}{F} \DefineCharacter{71}{47}{G} \DefineCharacter{72}{48}{H} \DefineCharacter{73}{49}{I} \DefineCharacter{74}{4A}{J} \DefineCharacter{75}{4B}{K} \DefineCharacter{76}{4C}{L} \DefineCharacter{77}{4D}{M} \DefineCharacter{78}{4E}{N} \DefineCharacter{79}{4F}{O} \DefineCharacter{80}{50}{P} \DefineCharacter{81}{51}{Q} \DefineCharacter{82}{52}{R} \DefineCharacter{83}{53}{S} \DefineCharacter{84}{54}{T} \DefineCharacter{85}{55}{U} \DefineCharacter{86}{56}{V} \DefineCharacter{87}{57}{W} \DefineCharacter{88}{58}{X} \DefineCharacter{89}{59}{Y} \DefineCharacter{90}{5A}{Z} \DefineCharacter{91}{5B}{[} \DefineCharacter{92}{5C}{\ifmmode \backslash \else \textbackslash \fi}% \DefineCharacter{93}{5D}{]} \DefineCharacter{94}{5E}{\^{}} \DefineCharacter{95}{5F}{\ensuremath{\_}} \DefineCharacter{96}{60}{\textasciigrave } \DefineCharacter{97}{61}{a} \DefineCharacter{98}{62}{b} \DefineCharacter{99}{63}{c} \DefineCharacter{100}{64}{d} \DefineCharacter{101}{65}{e} \DefineCharacter{102}{66}{f} \DefineCharacter{103}{67}{g} \DefineCharacter{104}{68}{h} \DefineCharacter{105}{69}{i} \DefineCharacter{106}{6A}{j} \DefineCharacter{107}{6B}{k} \DefineCharacter{108}{6C}{l} \DefineCharacter{109}{6D}{m} \DefineCharacter{110}{6E}{n} \DefineCharacter{111}{6F}{o} \DefineCharacter{112}{70}{p} \DefineCharacter{113}{71}{q} \DefineCharacter{114}{72}{r} \DefineCharacter{115}{73}{s} \DefineCharacter{116}{74}{t} \DefineCharacter{117}{75}{u} \DefineCharacter{118}{76}{v} \DefineCharacter{119}{77}{w} \DefineCharacter{120}{78}{x} \DefineCharacter{121}{79}{y} \DefineCharacter{122}{7A}{z} \DefineCharacter{123}{7B}{\ensuremath{\lbrace }} \DefineCharacter{124}{7C}{\ensuremath{\vert }} \DefineCharacter{125}{7D}{\ensuremath{\rbrace }} \DefineCharacter{126}{7E}{\textasciitilde } \else % \end{macrocode} % If we are Omega, do some things differently. % From Apostolos Syropoulos % \begin{macrocode} \RequirePackage{omega}[1999/06/01] \background{greek} \RequirePackage{nohyperref} \RequirePackge{mlnames} \fi % \end{macrocode} % This was suggested by Matthias Clasen, checking that the macros % come from the right version of the Jade TeX backend. The package % will have a n.m version number, where the n changes when Jade changes, % and the m changes when the JadeTeX package changes. % \begin{macrocode} \def\checkFOTversion#1{% \ifx\\#1\\\def\TeXFOTmajor{2} \else \def\TeXFOTmajor{#1}% \fi \let\next\relax \ifnum\TeXFOTmajor>\JadeTeXMajorVersion \message{Your file was generated by Jade TeX backend version \TeXFOTmajor} \message{- these macros are for version \JadeTeXMajorVersion and lower. } \message{I'll stop here...} \let\next\@@end \fi \next} % \end{macrocode} % \section{Inherited characteristics} % Here we list the default values; non-inherited characteristics % will always be specified. % \begin{macrocode} \def\AlignLeader{} \def\AsisWrapIndent{} \def\BackgroundColor{} \let\BackgroundColorRed\@empty \def\BackgroundLayer{} \def\BackgroundTile{} \def\BorderAlignment{} \def\BorderOmitAtBreak{} \def\BorderPresent{0} \def\BorderPriority{} \def\BoxBorderAlignment{} \def\BoxCornerRadius{} \def\BoxOpenEnd{} \def\BoxType{} \def\CellBackground{} \def\CellCrossed{} \def\CellRowAlignment{start} \def\CellBeforeRowMargin{\z@} \def\CellAfterRowMargin{\z@} \def\CellBeforeColumnMargin{\z@} \def\CellAfterColumnMargin{\z@} \def\Color{} \def\Country{} \def\DisplayAlignment{} \def\EndIndent{\z@} \def\EndMargin{} \def\ExpandTabs{} \def\FieldAlign{start} \def\FieldWidth{0pt} \def\FillingDirection{} \def\FirstLineStartIndent{0pt} \def\FloatOutLineNumbers{} \def\FloatOutMarginalia{} \def\FloatOutSidelines{} \def\fFamName{Times-Roman} % Use Adobe Times Roman by default \def\fPosture{normal} \def\fProportionateWidth{medium} \def\fSize{10pt} \def\fStructure{} \def\fWeight{medium} \def\GlyphAlignmentMode{} \def\GlyphReorderMethod{} \def\GlyphSubstMethod{} \def\HangingPunct{} \def\HeadingLevel{0} \def\Hyphenate{} \def\HyphenationKeep{} \def\HyphenationLadderCount{} \def\HyphenationMethod{} \def\HyphenationPushCharCount{} \def\HyphenationRemainCharCount{} \def\IgnoreRecordEnd{} \def\ImplicitBidiMethod{} \def\InhibitLineBreaks{} \def\InputWhitespaceTreatment{} \def\JustifyGlyphSpaceMaxAdd{} \def\JustifyGlyphSpaceMaxRemove{} \def\KernMode{} \def\Kern{} \def\Language{} \def\LastLineEndIndent{} \def\LastLineJustifyLimit{} \def\LastLineQuadding{} \def\Layer{0} \def\Ligature{} \def\LineBreakingMethod{} \def\LineCap{} \def\LineCompositionMethod{} \def\LineJoin{} \def\LineNumberSep{} \def\LineNumberSide{} \def\LineRepeat{} \def\LineSpacing{12pt} \def\Lines{} \def\MarginaliaKeepWithPrevious{} \def\MarginaliaSep{} \def\MarginaliaSide{} \def\MathDisplayMode{display} \def\MinLeaderRepeat{} \def\MinLeading{2\p@} \def\NColumnsSpanned{1} \def\NumberedLines{} \def\OrphanCount{} \def\PositionPreference{} \def\PrincipalModeSimultaneous{} \def\Quadding{start} \def\ScoreSpaces{} \def\SidelineSep{} \def\SidelineSide{} \def\SpanWeak{} \def\Span{0} \def\StartIndent{\z@} \def\StartMargin{} \def\TableAutoWidthMethod{} \def\TableCornerRadius{} \def\TablePartOmitMiddleFooter{0} \def\TablePartOmitMiddleHeader{0} \def\TruncateLeader{} \def\WidowCount{} \def\WritingMode{} \def\AlignLeader{1}% true \def\BreakAfter{0}% false \def\BreakAfterPriority{0}% \def\BreakBefore{0}% false \def\BreakBeforePriority{0}% \def\CoalesceId{0}% false \def\EntitySystemId{}% [required] \def\EscapementDirection{}% [=writing-mode] \def\EscapementSpaceAfterNom{\z@}% \def\EscapementSpaceAfterMin{\z@}% \def\EscapementSpaceAfterMax{\z@}% \def\IdrefAddress{}% \def\IsDisplay{0}% false \def\Keep{0}% false \def\KeepWithNext{0}% false \def\KeepWithPrevious{0}% false \def\MayViolateKeepAfter{0}% false \def\MayViolateKeepBefore{0}% false \def\MaxWidth{!} \def\MaxHeight{!} \def\NotationSystemId{}% [required] \def\Orientation{}% [required] \def\PageNColumns{1} \def\PageNumberRestart{0} \def\PageNumberFormat{1} \expandafter\def\csname PageNumbering@1\endcsname#1{% \expandafter\@arabic#1} \expandafter\def\csname PageNumbering@i\endcsname#1{% \expandafter\@roman#1} \expandafter\def\csname PageNumbering@I\endcsname#1{% \expandafter\@Roman#1} \expandafter\def\csname PageNumbering@a\endcsname#1{% \expandafter\@alph#1} \expandafter\def\csname PageNumbering@A\endcsname#1{% \expandafter\@Alph#1} \expandafter\def\csname PageNumbering@0\endcsname#1{% this shouldn't happen \expandafter\@arabic#1} \expandafter\def\csname PageNumbering@\endcsname#1{% \expandafter\@arabic#1} \def\PageBalanceColumns{0} \def\PageTwoSide{0} \def\TwoSideStartOnRight{0} \def\PageColumnSep{\z@} \def\GridColumnSep{\z@} \def\PositionPointShift{\z@} \def\PositionPointShiftFactor{} \def\PositionPointX{\z@}% ?? \def\PositionPointY{\z@}% ?? \def\PositionPreference{0}% false \def\ScaleType{max-uniform}% \def\ScaleX{}% [n/a] =scale \def\ScaleY{}% [n/a] =scale \def\ScoreLength{}% ?? \def\ScoreType{}% [required] =type \def\saConditional{0}% false =space-after \def\saForce{0}% false =space-after \def\saMax{0pt}% =space-after \def\saMaxFactor{0}% =space-after \def\saMin{0pt}% =space-after \def\saMinFactor{0}% =space-after \def\saNom{0pt}% =space-after \def\saNomFactor{0}% =space-after \def\saPriority{0}% =space-after \let\@sAfterMin\saMin \let\@sAfterMax\saMax \let\@sAfterNom\saNom \let\@sAfterPriority\saPriority \def\sbConditional{0}% false \def\sbForce{0}% false \def\sbMax{0pt}% \def\sbMaxFactor{0}% \def\sbMin{0pt}% \def\sbMinFactor{0}% \def\sbNom{0pt}% \def\sbNomFactor{0}% \def\sbPriority{0}% \newdimen\CurrentSpaceNom \newdimen\CurrentSpaceMin \newdimen\CurrentSpaceMax \newdimen\LastSpaceNom \newdimen\LastSpaceMin \newdimen\LastSpaceMax \CurrentSpaceNom\z@ \CurrentSpaceMax\z@ \CurrentSpaceMin\z@ \LastSpaceNom\z@ \LastSpaceMax\z@ \LastSpaceMin\z@ \def\LastSpaceConditional{0}% false \def\LastSpaceForce{0}% false \def\LastSpaceMaxFactor{0}% \def\LastSpaceMinFactor{0}% \def\LastSpaceNomFactor{0}% \def\LastSpacePriority{0}% \def\TruncateLeader{0}% false \def\Width{}% [required] * \def\Length{}% [context] \def\TableWidth{\hsize}% \def\ColumnIndex{}% [contextual] =column-number? \def\HeaderMargin{\z@} \def\FooterMargin{\z@} \def\LeftMargin{\z@} \def\RightMargin{\z@} \def\TopMargin{\z@} \def\BottomMargin{\z@} \def\PageWidth{211mm} \def\PageHeight{297mm} \def\placement{htbp} \edef\OldFontSize{\fSize} \edef\OldLineSpacing{\LineSpacing} \edef\OldFontPosture{\fPosture} \edef\OldFontProportionateWidth{\fProportionateWidth} \edef\OldFontWeight{\fWeight} \edef\OldfFamName{\fFamName} \let\pageFontSize\fSize \let\pageLineSpacing\LineSpacing \let\pageFontPosture\fPosture \let\pageFontProportionateWidth\fProportionateWidth \let\pageFontWeight\fWeight \let\pagefFamName\fFamName \let\ColorRed\@empty \def\listitem@content@mode{listitem-content-mode} \newtoks\JadeTeXtoks \def\@displaylevel{0} \def\NoLig#1{#1\ifmmode\else\/\fi} \def\DEBUG#1{\typeout{DBG: #1 at \the\inputlineno}} % \end{macrocode} % \section{Nodes and labels} % A node in mode `listitem-content-mode' is allowed to be % labeled, but normally only elements in empty mode % get labels. % \begin{macrocode} \let\Label\@empty \let\Element\@empty \def\Node#1{% \ifnum\Mathcount>1\relax \else \ifx\\#1\\\else \let\ProcessingMode\@empty #1% \ifx\ProcessingMode\@empty\else \ifx\ProcessingMode\listitem@content@mode\else \let\Label\@empty\let\Element\@empty \fi \fi % \typeout{Node <\Label> or <\Element> -- pending at \the\inputlineno}% \fi \fi } \def\endNode#1{% \let\Label\@empty\let\Element\@empty%\noindent } \def\PageLabel#1{% \@bsphack \expandafter\ifx\csname p@#1\endcsname\relax \else \protected@write\@auxout{}% {\string\pagelabel{#1}{\thepage}}% \fi \@esphack} \def\OriginalPageLabel#1{% \@bsphack\protected@write\@auxout{}% {\string\pagelabel{#1}{\thepage}}\@esphack} \def\pagelabel#1#2{\global\@namedef{p@#1}{#2}} \def\Pageref#1{\expandafter\@Setref\csname p@#1\endcsname{#1}} \def\@qqq{qqq} \def\@Setref#1#2{% \ifx#1\relax \immediate\write\@mainaux{\string\pagelabel{#2}{qqq}}% \protect\G@refundefinedtrue \nfss@text{\reset@font\bfseries ??}% \@latex@warning{Reference `#2' on page \thepage \space undefined}% \else \ifx#1\@qqq \protect\G@refundefinedtrue \nfss@text{\reset@font\bfseries ??}% \@latex@warning{Reference `#2' on page \thepage \space undefined}% \else \ifNestedLink{#1}% \else \hyper@@link[Page]{}{page.#1}{#1}% % \typeout{Made a Link at \the\inputlineno, to page.#1}% \fi \fi \fi } % \def\insertCurrentNodePageNumber#1{% \bgroup \SetupICs{#1}% \InlineNIC \ifx\Label\@empty \Pageref{\Element}% \else \Pageref{\Label}% \fi \endInlineNIC \endSetupICs \egroup } % \end{macrocode} %\section{Atomic flow objects} % \begin{macrocode} \def\insertAlignmentPoint#1{} % \end{macrocode} % \subsection{Maths} % \subsubsection{General math sequences} % \begin{macrocode} \def\@display{display} % \end{macrocode} % We are likely to meet nested math sequences, so maintain a counter % to determine if we are at the outer level, and should turn % math (display or inline) off or on. % \begin{macrocode} \newcount\Mathcount \def\MathSeq#1{% \bgroup \SetupICs{#1}% \FlowObjectSetup{0}% \global\advance\Mathcount by 1% \let\Action\relax \ifnum\Mathcount=1 \ifx\MathDisplayMode\@display \let\Action\Dmath \else \let\Action\Imath \fi \fi \Action } \def\endMathSeq{% \global\advance\Mathcount by -1% \let\Action\relax \ifnum\Mathcount=0 \ifx\MathDisplayMode\@display\let\Action\endDmath\else\let\Action\Imath\fi \fi \Action \endSetupICs \egroup } \def\Dmath{\begingroup\abovedisplayskip\Jadeskip\global\Jadeskip\z@\[} \def\endDmath{\]\endgroup} \def\Imath{$} \def\Cleanmath{\def\Node##1{}\def\endNode##1{}% \def\MathSeq##1{}\def\endMathSeq##1{} } % \end{macrocode} % \subsubsection{Fences} % \begin{macrocode} \def\FenceSerial#1#2#3#4{#1\FlowObjectSetup{0}% {\Cleanmath % % #1: fence characteristics % #2: fence contents % #3 open character % #4 close character % \ifx\\#3\\\left.\else \let\plainCharacter\Character \let\Character\LeftDelimiterCharacter #3% \let\Character\plainCharacter\fi {#2}% \ifx\\#4\\\right.\else \let\plainCharacter\Character \let\Character\RightDelimiterCharacter #4% \let\Character\plainCharacter\fi }% } % \end{macrocode} % Simon Pepping added this, to really make sure the open and close % characters of the fence are proper left and right. % \begin{macrocode} \let\plainCharacter\Character \def\LeftDelimiterCharacter#1{\DelimiterCharacter\left{#1}}% \def\RightDelimiterCharacter#1{\DelimiterCharacter\right{#1}}% \def\DelimiterCharacter#1#2{% \SetupICs{}% \expandafter\ifx\csname !#2\endcsname\relax <#2>\typeout{Warning: Unknown character #2, at \the\inputlineno}% \else\expandafter#1\csname !#2\endcsname\fi % #1 is \left or \right \ifdim\EscapementSpaceAfterNom=\z@ \else \@tempdima\EscapementSpaceAfterNom \advance\@tempdima by -\EscapementSpaceAfterMin \@tempdimb\EscapementSpaceAfterNom \advance\@tempdimb by -\EscapementSpaceAfterMax \hskip\EscapementSpaceAfterNom plus \@tempdimb minus \@tempdima% \fi \endSetupICs{}% } % \end{macrocode} % \subsubsection{Fractions} % These simply translate into |{Numerator \over Denominator}| % \begin{macrocode} \def\FractionSerial#1{#1\FlowObjectSetup{0}\bgroup} \def\endFractionSerial{\egroup} \def\FractionDenominator{} \def\endFractionDenominator{} \def\FractionNumerator{} \def\endFractionNumerator{\over } \def\insertFractionBar{} % \end{macrocode} % \subsubsection{Marks} % Waiting to be implemented. % \begin{macrocode} \def\MarkOver#1#2\endMarkOver{} \def\MarkUnder#1#2\endMarkUnder{} \def\MarkSerial#1{} \def\endMarkSerial{} % \end{macrocode} % \subsubsection{Operators/limits} % \begin{macrocode} \def\MathOperatorSerial#1{#1\FlowObjectSetup{0}\begingroup\Cleanmath} \def\endMathOperatorSerial{\endgroup} \def\MathOperatorOperator#1#2\endMathOperatorOperator#3{#1% \mathop{#2}} \def\MathOperatorLowerLimit#1{#1_\bgroup} \def\endMathOperatorLowerLimit#1{\egroup} \def\MathOperatorUpperLimit#1{#1^\bgroup} \def\endMathOperatorUpperLimit#1{\egroup} % \end{macrocode} % \subsubsection{Radicals} % \begin{macrocode} \def\RadicalSerial#1\insertRadicalRadicalDefaulted#2#3\RadicalDegree#4#5\endRadicalDegree#6\endRadicalSerial{#1\FlowObjectSetup{0}% \ifx\\#5\\\ensuremath{\sqrt{#3}}\else\ensuremath{\root #5 \of {#3}}\fi} % \end{macrocode} % \subsubsection{Grids} % \begin{macrocode} \newcount\GridCells \newcount\GridRows \newif\ifExplicitGrid \def\Grid#1{#1% \begingroup \FlowObjectSetup{0}% \Cleanmath \global\GridCells\@ne\global\GridRows0 \ifnum\NColumns=0 \ExplicitGridtrue\def\NColumns{25}% \else\ExplicitGridfalse\fi \begin{array}{*{\NColumns}{c}}% } \def\endGrid{\end{array}\endgroup} \def\GridCell#1{#1\FlowObjectSetup{0}} \def\endGridCell#1{% \ifnum\NColumns=\GridCells \global\GridCells\@ne \def\@tempa{\cr}% \else \global\advance\GridCells\@ne \def\@tempa{&}% \fi \@tempa} \def\NewColumn{&} \def\NewRow{\\} % \end{macrocode} % \subsubsection{Superscript, subscript} % \begin{macrocode} \def\Subscript#1#2{_{#2}} \def\Superscript#1#2{^{#2}} % \end{macrocode} % \subsubsection{Unmath} % \begin{macrocode} \def\Unmath#1#2{% {\SetupICs{#1}\mbox{#2}\endSetupICs}% } % \end{macrocode} % \subsubsection{ScriptSerial} % \begin{macrocode} \def\ScriptSerial#1#2#3#4#5#6#7#8{% \ifx$#3#4$% \else \vphantom{#2}_{#4}^{#3}% \fi \ifx$#7#8$% {#2}% \else {\mathop{#2}\limits_{#8}^{#7}}\vphantom{#2}% \fi _{#6}^{#5}} % \end{macrocode} % \subsection{External Graphic flow object class (clause 12.6.15)} % How we include graphics depends on the NotationSystemId. % Ulrich Drepper worked this % out, and he also made the alignment and indentation work correctly. %If any other notation needs special % handling it can be implemented by adding a macro % |insertExternalGraphicNotationXXX| % where XXX is the notation name. % \begin{macrocode} \def\insertExternalGraphic#1{% \begingroup \SetupICs{#1}% \expandafter\ifx\csname insertExternalGraphicNotation\NotationSystemId\endcsname\relax% \insertExternalGraphicNotation% \else \csname insertExternalGraphicNotation\NotationSystemId\endcsname \fi \endgroup } \newbox\jadeGraphic \newdimen\jadeGraphicHeight \newdimen\jadeGraphicWidth \def\insertExternalGraphicNotation{% \ifnum\@TableNest>0\def\IsDisplay{0}\fi \ExternalGraphicNIC \ifcase\IsDisplay % 0, its inline \setbox\jadeGraphic=\hbox{\expandafter\IncludeGraphic\EntitySystemId\\}% \noindent%Enter hmode \ifdim\PositionPointX>\z@ \kern -\PositionPointX \fi \ifnum\Layer>0% % Graphic drawn at layer > 0 overwrites surrounding text \jadeGraphicWidth=\wd\jadeGraphic \raisebox{-\PositionPointY}[\z@][\z@]{\box\jadeGraphic} \kern\PositionPointX\kern-\jadeGraphicWidth \else \jadeGraphicHeight=\ht\jadeGraphic \advance\jadeGraphicHeight by \dp\jadeGraphic \advance\jadeGraphicHeight by -\PositionPointY \raisebox{-\PositionPointY}[\jadeGraphicHeight][\PositionPointY]{% \box\jadeGraphic }% \fi % 1 its display \or% \DisplayNIC \@@par% \@tempdima\columnwidth \nointerlineskip \ifdim\EndIndent>\z@ \advance\@tempdima by-\EndIndent \fi \ifdim\StartIndent>\z@ \advance\@tempdima by-\StartIndent \moveright\StartIndent \fi \hbox to\@tempdima{% \ifx\DisplayAlignment\A@center\hfill\fi% \ifx\DisplayAlignment\A@end\hfill\fi% \expandafter\IncludeGraphic\EntitySystemId\\% \ifx\DisplayAlignment\A@center\hfill\fi% \ifx\DisplayAlignment\A@start\hfill\fi% }% \@@par% \else% \expandafter\IncludeGraphic\EntitySystemId\\% \fi \endExternalGraphicNIC \ifcase\IsDisplay \or \endDisplayNIC \fi } \def\insertExternalGraphicNotationTEX{% \input\EntitySystemId } \def\IncludeGraphic{\@ifnextchar<{\@IncludeGraphic}{\@IncludeGraphic<>}} \def\scale@max{max} \def\scale@false{false} \def\scale@maxuniform{max-uniform} % \end{macrocode} % There are three situations: ScaleX and ScaleY are supplied % (possibly identical), in which case ScaleType is `false', or % ScaleType is `max' or `max-uniform' (the default); in the latter % cases, use MaxWidth and MaxHeight, with and without preserved % aspect ratio. The width and height default to \LaTeX{} graphics package % `!', ie their natural size. I \emph{think} this is the right % interpretation of the standard. % \begin{macrocode} \def\Exclams{!!} \def\@IncludeGraphic<#1>#2\\{% \ifx\ScaleType\scale@false \ifx\ScaleX\ScaleY \scalebox{\ScaleX}{\includegraphics{#2}}% \else \scalebox{\ScaleX}[\ScaleY]{\includegraphics{#2}}% \fi \else \ifx\ScaleType\scale@maxuniform \edef\MaxBoth{\MaxHeight\MaxWidth}% \ifx\MaxBoth\Exclams \includegraphics{#2}% \else \includegraphics[width=\MaxWidth,keepaspectratio=true, height=\MaxHeight]{#2}% \fi \else \ifx\ScaleType\scale@max \includegraphics[width=\MaxWidth,height=\MaxHeight, keepaspectratio=false]{#2}% \else \typeout{ERROR: invalid scale type of \ScaleType}% \fi \fi \fi } \def\insertPageNumber#1{#1% \csname PageNumbering@\PageNumberFormat\endcsname\c@page} \def\insertParagraphBreak#1{\@@par} % \def\horizontal{horizontal} \def\vertical{vertical} \def\escapement{escapement} \def\LineThickness{1pt} \def\A@center{center} \def\A@end{end} \def\A@start{start} \def\insertRule#1{% \bgroup \SetupICs{#1}% \def\IsDisplay{0} \ifx\Orientation\horizontal\def\IsDisplay{1}\fi \ifx\Orientation\vertical\def\IsDisplay{1}\fi \RuleNIC \ifcase\IsDisplay % 0, its inline \ifx\Orientation\escapement \ifx\Length\@empty % Length isn't specified, so it depends of the context. % No rule is a good context ;-) \else \noindent\raisebox{\PositionPointShift}[\z@][\z@]{\vrule width \Length height \LineThickness depth \z@} \ifnum\Layer>0 \kern-\Length% \fi \fi \else % Line-progression orientation doesn't affect placement of subsequent % flow object. [Note 104] \ifx\Length\@empty % Length isn't specified, so it depends of the context. % No rule is a good context ;-) \else \raisebox{\PositionPointShift}[\z@][\z@]{\vrule width \LineThickness height \z@ depth \Length} \fi \kern-\LineThickness% \fi % 1 its display \or% \DisplayNIC \@@par% \@tempdima\linewidth \nointerlineskip \ifdim\EndIndent>\z@ \advance\@tempdima by-\EndIndent \fi \ifdim\StartIndent>\z@ \advance\@tempdima by-\StartIndent \moveright\StartIndent \fi \hbox to\@tempdima{% \ifx\DisplayAlignment\A@center\hfill\fi \ifx\DisplayAlignment\A@end\hfill\fi \ifx\Orientation\horizontal \ifx\Length\@empty\else \hbox to \Length\fi {\leaders\hrule height \LineThickness \hfill}% \else \hbox to \LineThickness {\leaders\hrule \ifx\Length\@empty\else height \Length \fi \relax \hfill}% \fi \ifx\DisplayAlignment\A@center\hfill\fi \ifx\DisplayAlignment\A@start\hfill\fi }% \nointerlineskip \@@par% \else% % Unknown IsDiplay \typeout{ERROR: invalid IsDisplay value of \IsDisplay}% \fi \endRuleNIC \ifcase\IsDisplay \or \endDisplayNIC \fi \endSetupICs \egroup } % \end{macrocode} % \subsection{Tables} % \begin{macrocode} \setlength\arraycolsep\z@ \setlength\tabcolsep\z@ %\extrarowheight3\p@ \setlength\arrayrulewidth{.4\p@} \setlength\doublerulesep{2\p@} \def\arraybackslash{\let\\=\@arraycr} \renewcommand{\arraystretch}{0} % Those are for backward compatibility \newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}} \newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}} \newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}} % Those columns defs follows the direction of the corresponding % keys on a QWERTY keyboard. \newcolumntype{T}[3]{@{\hspace{#1}}>{\raggedright\arraybackslash}p{#2}@{\hspace{#3}}} \newcolumntype{Y}[3]{@{\hspace{#1}}>{\centering\arraybackslash}p{#2}@{\hspace{#3}}} \newcolumntype{U}[3]{@{\hspace{#1}}>{\raggedleft\arraybackslash}p{#2}@{\hspace{#3}}} \newcolumntype{G}[3]{@{\hspace{#1}}>{\raggedright\arraybackslash}m{#2}@{\hspace{#3}}} \newcolumntype{H}[3]{@{\hspace{#1}}>{\centering\arraybackslash}m{#2}@{\hspace{#3}}} \newcolumntype{J}[3]{@{\hspace{#1}}>{\raggedleft\arraybackslash}m{#2}@{\hspace{#3}}} \newcolumntype{B}[3]{@{\hspace{#1}}>{\raggedright\arraybackslash}b{#2}@{\hspace{#3}}} \newcolumntype{N}[3]{@{\hspace{#1}}>{\centering\arraybackslash}b{#2}@{\hspace{#3}}} \newcolumntype{M}[3]{@{\hspace{#1}}>{\raggedleft\arraybackslash}b{#2}@{\hspace{#3}}} % The numeric column types follows the numeric keypad direction % and support colour \newcolumntype{7}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\raggedright\arraybackslash}p{#2}@{\hspace{#3}}} \newcolumntype{8}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\centering\arraybackslash}p{#2}@{\hspace{#3}}} \newcolumntype{9}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\raggedleft\arraybackslash}p{#2}@{\hspace{#3}}} \newcolumntype{4}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\raggedright\arraybackslash}m{#2}@{\hspace{#3}}} \newcolumntype{5}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\centering\arraybackslash}m{#2}@{\hspace{#3}}} \newcolumntype{6}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\raggedleft\arraybackslash}m{#2}@{\hspace{#3}}} \newcolumntype{1}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\raggedright\arraybackslash}b{#2}@{\hspace{#3}}} \newcolumntype{2}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\centering\arraybackslash}b{#2}@{\hspace{#3}}} \newcolumntype{3}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\raggedleft\arraybackslash}b{#2}@{\hspace{#3}}} \newcount\@tmpcounta \def\JadeRowSpanBox#1{\csname jadeRowSpanBox#1\endcsname} \def\JadeRowSpanSpace#1{\csname jadeRowSpanSpace#1\endcsname} \def\JadeRowSpan{% \expandafter\ifx\csname jadeRowSpanBox\ColumnIndex\endcsname\relax \expandafter\newbox\csname jadeRowSpanBox\ColumnIndex\endcsname \expandafter\newdimen\csname jadeRowSpanSpace\ColumnIndex\endcsname \fi \setbox\JadeRowSpanBox{\ColumnIndex}\vtop\bgroup\noindent% } \def\endJadeRowSpan{% \egroup% \global\JadeRowSpanSpace{\ColumnIndex}\ht\JadeRowSpanBox{\ColumnIndex}% \global\advance\JadeRowSpanSpace{\ColumnIndex} by \dp\JadeRowSpanBox{\ColumnIndex}% \@tempdima\ht\JadeRowSpanBox{\ColumnIndex}% \@tempdimb\dp\JadeRowSpanBox{\ColumnIndex}% \@tmpcounta\NRowsSpanned% \advance\@tmpcounta by -1% \@tempdima\CellBeforeRowMargin% \@tempdimb\CellAfterRowMargin% \multiply\@tempdima by \@tmpcounta% \multiply\@tempdimb by \@tmpcounta% \global\advance\JadeRowSpanSpace{\ColumnIndex} by -\@tempdima% \global\advance\JadeRowSpanSpace{\ColumnIndex} by -\@tempdimb% \global\divide\JadeRowSpanSpace{\ColumnIndex} by \NRowsSpanned% \vtop to \JadeRowSpanSpace{\ColumnIndex}{\unvbox\JadeRowSpanBox{\ColumnIndex}} } \def\JadeRowSpanFiller{% \expandafter\ifx\csname jadeRowSpanBox\ColumnIndex\endcsname\relax \errmessage{Invalid row span identifier} \fi \vtop to \JadeRowSpanSpace{\ColumnIndex}{}% } \def\insertTableAfterColumnBorder#1{} \def\insertTableAfterRowBorder#1{} \def\insertTableBeforeColumnBorder#1{} \def\insertTableBeforeRowBorder#1{} % \def\insertTableCellAfterColumnBorder#1{\edef\AfterCol{\BorderPresent}} \def\insertTableCellAfterRowBorder#1{\edef\AfterRow{\BorderPresent}} \def\insertTableCellBeforeColumnBorder#1{\edef\BeforeCol{\BorderPresent}} \def\insertTableCellBeforeRowBorder#1{\edef\BeforeRow{\BorderPresent}} \def\insertTableColumn#1{#1} % \end{macrocode} % \section{Non-atomic flow objects} % \subsection{Box flow object class} % \begin{macrocode} \def\BOX#1{% \SetupICs{#1}% \fboxrule\LineThickness \@tempdima\columnwidth \ifdim\EndIndent>\z@ \advance\@tempdima by-\EndIndent \fi \ifdim\StartIndent>\z@ \advance\@tempdima by-\StartIndent \hspace*{\StartIndent}% \fi \advance\@tempdima by-\StartIndent \setbox0\vbox\bgroup\def\StartIndent{\z@}\hsize\@tempdima\ignorespaces} \def\endBOX{% \ifhmode\unskip\fi \egroup% % FIXME: we aren't handling box-type: 'both \ifx\BackgroundColorRed\@empty \ifdim\ht0>\ht\strutbox \noindent\fbox{\box0}% \else \setbox0\vbox{\unvbox0\global\setbox1\lastbox}% \noindent\fbox{\kern-\parindent\unhbox1\unskip\unskip}% \fi \else \c@lor@RGB@rgb{\BackgroundColorRed}\@tempa \c@lor@RGB@rgb{\BackgroundColorGreen}\@tempb \c@lor@RGB@rgb{\BackgroundColorBlue}\@tempc \ifdim\ht0>\ht\strutbox \noindent\colorbox[rgb]{\@tempa, \@tempb, \@tempc}{\box0}% \else \setbox0\vbox{\unvbox0\global\setbox1\lastbox}% \noindent\colorbox[rgb]{\@tempa, \@tempb, \@tempc}{\kern-\parindent\unhbox1\unskip\unskip}% \fi \fi% } % \end{macrocode} % \subsection{Multicolumn management macros} % Contributed by Simon Pepping. % \begin{macrocode} \def\closeOrOpenMulticols#1{% % juggling with nesting levels {#1\global\edef\SavedSpan{\Span}}% \ifnum\@displaylevel=0\relax\ifnum\PageNColumns>1\relax % close \ifnum\SavedSpan>1\relax \ifnum\col@number>1\relax % in multicols \ifnum\PageBalanceColumns>0 \end{multicols} \else % \endmulticols* \vfill\end{multicols} \fi \fi % or delayed open \else % not \ifnum\SavedSpan>1\relax \ifnum\col@number=1 % not in multicols \columnsep\PageColumnSep \ifnum\PageBalanceColumns>0 \begin{multicols}{\PageNColumns} \else % \begin{multicols*}{\PageNColumns} \let\balance@columns@out \multi@column@out \begin{multicols}{\PageNColumns} \fi \fi \fi \fi\fi } \def\openMulticols{% \ifnum\@displaylevel=0\relax \def\@displaylevel{1}% % local to this nesting level, for use by endDisplayGroup \edef\@SavedSpan{\SavedSpan} \ifnum\PageNColumns>1\relax \ifnum\@SavedSpan>1\relax \ifnum\@SavedSpan=\PageNColumns\else \columnsep\PageColumnSep \ifnum\PageBalanceColumns>0 \begin{multicols}{\PageNColumns} \else % \begin{multicols*}{\PageNColumns} \let\balance@columns@out \multi@column@out \begin{multicols}{\PageNColumns} \fi \fi \fi \fi \else \def\@displaylevel{2}% \fi } \def\closeMulticols{% \ifnum\@displaylevel=1\ifnum\PageNColumns>1\relax \ifnum\@SavedSpan>1\relax \ifnum\@SavedSpan=\PageNColumns\else \ifnum\PageBalanceColumns>0 \end{multicols} \else % \endmulticols* \vfill\end{multicols} \fi \fi \fi \fi\fi } % \end{macrocode} % \subsection{Display group flow object class (clause 12.6.2)} % \begin{macrocode} \def\Keep@Page{page} \def\Keep@Column{column} \newif\ifKeepPage \KeepPagefalse \def\DisplayGroup#1{\ifnum\@TableNest>0\SetupICs{#1}\else\@DisplayGroup{#1}\fi} \def\@DisplayGroup#1{% \closeOrOpenMulticols{#1} \begingroup \SetupICs{#1}% \FlowObjectSetup{1}% \ifx\Keep\Keep@Page\KeepPagetrue \else \ifx\Keep\Keep@Column\KeepPagetrue \else \KeepPagefalse \fi \fi \ifKeepPage \vbox\bgroup \fi \DisplayGroupNIC \ifnum\Mathcount>0\relax \else\everypar{\UseJadevskip{everypar}}\@@par \fi \FlowObjectSetup{1}% \openMulticols } \def\endDisplayGroup#1{\ifnum\@TableNest>0\else\@endDisplayGroup{#1}\fi} \def\@endDisplayGroup#1{% \closeMulticols \ifnum\Mathcount>0\relax\else \@@par \fi \endDisplayGroupNIC \ifKeepPage \egroup \fi \endgroup \gdef\SavedSpan{0}% % \end{macrocode} % This eats the parindent, and then restores an empty everypar; % it is called by an implicit start of hmode. Contributed by Simon Pepping. % \begin{macrocode} \everypar{{\leavevmode\setbox\z@\lastbox \UseJadevskip{everypar}}% \everypar{\UseJadevskip {everypar}}% } } % \end{macrocode} % \subsection{Leader flow object class} % \begin{macrocode} \newsavebox{\leaderbox} \def\Leader#1{#1\begin{LRbox}{\leaderbox}} \def\endLeader{\end{LRbox}\noindent\leaders\box\leaderbox\hfill} % \end{macrocode} % \subsection{Line Field flow object class} % Field align can be \emph{start}, \emph{end}, or \emph{center}. % \begin{macrocode} \newsavebox\dssslbox \def\LRbox#1{% \edef\reserved@a{% \endgroup \setbox#1\hbox{% \begingroup\aftergroup}% \def\noexpand\@currenvir{\@currenvir}}% \reserved@a \@endpefalse \color@setgroup\ignorespaces } \def\LRboxW#1#2{% \edef\reserved@a{% \endgroup \setbox#1\hbox to #2{% \begingroup\aftergroup}% \def\noexpand\@currenvir{\@currenvir}}% \reserved@a \@endpefalse \color@setgroup\ignorespaces } \def\endLRbox{\color@endgroup} \let\endLRboxW\endLRbox \def\LineField#1{\bgroup \SetupICs{#1}% \LineFieldNIC \FlowObjectSetup{0}% \begin{LRbox}{\dssslbox}% } \def\endLineField{% \end{LRbox}% \ifdim\wd\dssslbox>\FieldWidth\def\FieldWidth{\wd\dssslbox}\fi \makebox[\FieldWidth][\csname Fld@\FieldAlign\endcsname]{% \ifdim\PositionPointShift=\z@ \usebox{\dssslbox}% \else \raisebox{\PositionPointShift}{\usebox{\dssslbox}}% \fi \EndSetFont}% \endLineFieldNIC \endSetupICs \egroup } % % \end{macrocode} % \subsection{Link flow object class (clause 12.6.28.3)} % \begin{macrocode} \newif\ifLabelElements \LabelElementstrue \newif\ifNestedLink \NestedLinkfalse \def\LinkType{link} \def\Link#1{% \begingroup \SetupICs{#1}% \ifx\Label\@empty\let\Label\Element\fi % \typeout{Made a Link at \the\inputlineno, to \Label}% \hyper@linkstart{\LinkType}{\Label}% \NestedLinktrue } \def\endLink{% \hyper@linkend \NestedLinkfalse \endSetupICs \endgroup } % \end{macrocode} % \subsection{Marginalia flow object class (clause 12.6.28.4)} % \begin{macrocode} \def\Marginalia#1{#1\FlowObjectSetup{0}} \def\endMarginalia{} % \end{macrocode} % \subsection{Paragraph flow object class (clause 12.6.6)} %\begin{longtable}{|P{.2\textwidth}|l|P{.25\textwidth}|l|l|} %\hline %\itshape %Characteristic& %\itshape Inh.&\itshape Values&\itshape Default&\itshape Dsssl-o\\ %\hline %\endhead %\hline %\endfoot %lines&I&wrap, asis, asis-wrap*, asis-truncate*, none&wrap&Partial\\ %\rowcolor{yellow} %asis-truncate-char&I&\#f, \emph{char object}& &Ignore\\ %asis-wrap-char&I&\#f, \emph{char object}& &Ignore\\ %\rowcolor{yellow} %asis-wrap-indent&I&\emph{length-spec}& &Ignore\\ %first-line-align&I&\#f, \emph{char object}& &Ignore\\ %\rowcolor{yellow} %alignment-point-offset&I&\#f, \emph{number between 0 and 100}& &Ignore\\ %ignore-record-end?&I&\#f, \#t&\#f&Standard\\ %\rowcolor{yellow} %expand-tabs?&I&\#f, \emph{integer greater than zero}&8&Standard\\ %line-spacing&I&\emph{length-spec}&12pt&Standard\\ %\rowcolor{yellow} %line-spacing-priority&I&force, \emph{integer}&0&Default\\ %min-pre-line-spacing&I&\#f, \emph{length-spec}&\#f&Default\\ %\rowcolor{yellow} %min-post-line-spacing&I&\#f, \emph{length-spec}&\#f&Default\\ %min-leading&I&\#f, \emph{length-spec}&\#f&Standard\\ %\rowcolor{yellow} %first-line-start-indent&I&\emph{length-spec}&0m&Standard\\ %last-line-end-indent&I&\emph{length-spec}&0m&Default\\ %\rowcolor{yellow} %hyphenation-char&I&\emph{character}& &Ignore\\ %hyphenation-method&I&\#f, \emph{public identifier}&\#f&Default\\ %\rowcolor{yellow} %hyphenation-ladder-count&I&\#f, \emph{integer greater than zero}&\#f&Default\\ %hyphenation-remain-char-count&I&\emph{positive integer}&2&Ignore\\ %\rowcolor{yellow} %hyphenation-push-char-count&I&\emph{positive integer}&2&Ignore\\ %hyphenation-keep&I&\#f, spread, page, column&\#f&Default\\ %\rowcolor{yellow} %hyphenation-exceptions&I&\emph{list of strings}&empty list&Default\\ %line-breaking-method&I&\#f, \emph{public identifier}&\#f&Default\\ %\rowcolor{yellow} %line-composition-method&I&\#f, \emph{public identifier}&\#f&Default\\ %implicit-bidi-method&I&\#f, \emph{public identifier}& &Default\\ %\rowcolor{yellow} %glyph-alignment-mode&I&base, center, top, bottom, font&font&Default\\ %font-family-name&I&\#f, \emph{string}&iso-serif&Standard\\ %\rowcolor{yellow} %font-weight&I&\#f, not-applicable*, ultra-light*, extra-light*, light, semi-light*, medium, semi-bold*, bold, extra-bold*, ultra-bold*&medium&Partial\\ %font-posture&I&\#f, not-applicable*, upright, oblique, back-slanted-oblique*, italic, back-slanted-italic*&upright&Partial\\ %\rowcolor{yellow} %font-structure&I&\#f, not-applicable, solid, outline&solid&Default\\ %font-proportionate-width&I&\#f, not-applicable*, ultra-condensed*, extra-condensed*, condensed, semi-condensed*, medium, semi-expanded*, expanded, extra-expanded*, ultra-expanded*&medium&Partial\\ %\rowcolor{yellow} %font-name&I&\#f, \emph{public identifier}& &Standard\\ %font-size&I&\emph{length}&10pt&Standard\\ %\rowcolor{yellow} %numbered-lines?&I&\#f, \#t&\#t&Ignore\\ %line-number&I&\#f, \emph{unlabeled sosofo}& &Ignore\\ %\rowcolor{yellow} %line-number-side&I&start, end, spread-inside, spread-outside, page-inside, page-outside& &Ignore\\ %line-number-sep&I&\emph{length-spec}& &Ignore\\ %\rowcolor{yellow} %quadding&I&start, end, spread-inside*, spread-outside*, page-inside*, page-outside*, center, justify*&start&Partial\\ %last-line-quadding&I&relative, start, end, spread-inside, spread-outside, page-inside, page-outside, center, justify&relative&Default\\ %\rowcolor{yellow} %last-line-justify-limit&I&\emph{length-spec}&0&Ignore\\ %justify-glyph-space-max-add&I&\emph{length-spec}&0m&Ignore\\ %\rowcolor{yellow} %justify-glyph-space-max-remove&I&\emph{length-spec}&0m&Ignore\\ %hanging-punct?&I&\#f, \#t&\#f&Default\\ %\rowcolor{yellow} %widow-count&I&\emph{positive integer}&2&Default\\ %orphan-count&I&\emph{positive integer}&2&Default\\ %\rowcolor{yellow} %language&I&\#f, \emph{ISO 639 language code}&\#f&Standard\\ %country&I&\#f, \emph{ISO 3166 country code}&\#f&Standard\\ %\rowcolor{yellow} %position-preference&N&\#f, top, bottom&\#f&Ignore\\ %writing-mode&I&left-to-right, right-to-left, top-to-bottom&left-to-right&Default\\ %\rowcolor{yellow} %start-indent&I&\emph{length-spec}&0m&Standard\\ %end-indent&I&\emph{length-spec}&0m&Standard\\ %\rowcolor{yellow} %span&I&\emph{integer greater than zero}&1&Default\\ %span-weak?&I&\#f, \#t&\#f&Default\\ %\rowcolor{yellow} %space-before&N&\emph{display space}&no space before &Standard\\ %space-after&N&\emph{display space}&no space after &Standard\\ %\rowcolor{yellow} %keep-with-previous?&N&\#f, \#t&\#f&Standard\\ %keep-with-next?&N&\#f, \#t&\#f&Standard\\ %\rowcolor{yellow} %break-before&N&\#f, page, page-region*, column*, column-set*&\#f&Partial\\ %break-after&N&\#f, page, page-region*, column*, column-set*&\#f&Partial\\ %\rowcolor{yellow} %keep&N&\#f, page, column-set*, column*, \#t*&\#f&Partial\\ %may-violate-keep-before?&N&\#f, \#t&\#f&Default\\ %\rowcolor{yellow} %may-violate-keep-after?&N&\#f, \#t&\#f&Default\\ %\end{longtable} % \begin{macrocode} \newcount\@TablePars \newcount\@ParNest \newcount\@TableNest \def\Par#1{% % \end{macrocode} % We need to end the current paragraph, with its current line spacing, % hyphenation, what have you, before anything is done. % This could have horrible repercussions, but something like % it is necessary. % \begin{macrocode} \everypar{\UseJadevskip{everypar}}\@@par \closeOrOpenMulticols{#1} \begingroup \SetupICs{#1}% \ParagraphNIC \FlowObjectSetup{1}% \openMulticols \paraSetup% } \def\TablePar#1{% \begingroup \let\@action\relax \global\advance\@ParNest by 1 \ifnum\@ParNest=1 \ifnum\@TablePars>0% \def\@action{\@@par}%\@arraycr}% \fi \else \ifnum\@ParNest>1 \ifnum\@TablePars>0\def\@action{\par}\fi \fi \fi \@action \SetupICs{#1}% \csname startQ@\Quadding\endcsname \FlowObjectSetup{1}% \paraSetup% } \def\FootnotePar#1{% \begingroup \let\@action\relax \global\advance\@ParNest by 1 \ifnum\@ParNest=1 \ifnum\@FootnotePars>0% \def\@action{\@@par}% \fi \else \ifnum\@ParNest>1 \ifnum\@FootnotePars>0\def\@action{\par}\fi \fi \fi \@action \SetupICs{#1}% \csname startQ@\Quadding\endcsname \FlowObjectSetup{1}% \paraSetup% } \def\HeadPar#1{\Par{#1}} \setcounter{tocdepth}{99} \def\@mysect#1#2#3{% \edef\@thishlabel{\csname theH#1\endcsname}% \pdfbookmark[#2]{#3}{\@thishlabel}% } % \end{macrocode} % From J.-M. Kubek, for PDF bookmarks % \begin{macrocode} \newcounter {headingOne} \newcounter {headingTwo}[headingOne] \newcounter {headingThree}[headingTwo] \newcounter {headingFour}[headingThree] \newcounter {headingFive}[headingFour] \def\theHheadingOne{\arabic{headingOne}} \def\theHheadingTwo{\theHheadingOne.\arabic{headingTwo}} \def\theHheadingThree{\theHheadingTwo.\arabic{headingThree}} \def\theHheadingFour{\theHheadingThree.\arabic{headingFour}} \def\theHheadingFive{\theHheadingFour.\arabic{headingFive}} \def\endHeadPar#1{% \ifnum\@TableNest>0 \ifnum\@ParNest>1 \ifnum\@TablePars>0\box\@@par\fi \fi \csname endQ@\Quadding\endcsname\null \global\advance\@TablePars by 1 \global\advance\@ParNest by -1 \else \ifnum\HeadingLevel>0% \ifnum\HeadingLevel=1% \addtocounter{headingOne}{1}% \@mysect{headingOne}{0}{\HeadingText}% \else\ifnum\HeadingLevel=2% \addtocounter{headingTwo}{1}% \@mysect{headingTwo}{1}{\HeadingText}% \else\ifnum\HeadingLevel=3% \addtocounter{headingThree}{1}% \@mysect{headingThree}{2}{\HeadingText}% \else\ifnum\HeadingLevel=4% \addtocounter{headingFour}{1}% \@mysect{headingFour}{3}{\HeadingText}% \else\ifnum\HeadingLevel=5% \addtocounter{headingFive}{1}% \@mysect{headingFive}{4}{\HeadingText}% \fi \fi \fi \fi \fi \fi % SP \closeMulticols \@@par \endParagraphNIC \fi \endSetupICs \endgroup % \end{macrocode} % This eats the parindent, and then restores an empty everypar; % it is called by an implicit start of hmode. Contributed by Simon Pepping. % \begin{macrocode} \everypar{{\leavevmode\setbox\z@\lastbox \UseJadevskip{everypar}}% \everypar{\UseJadevskip {everypar}}% } } \def\endPar#1{% \ifnum\@TableNest>0 \let\@action\relax \ifnum\@ParNest>1 \ifnum\@TablePars>0\def\@action{\@@par}\fi \fi \@action \csname endQ@\Quadding\endcsname\null \global\advance\@TablePars by 1 \global\advance\@ParNest by -1 \else % SP \closeMulticols \@@par \endParagraphNIC \fi \endSetupICs \endgroup % \end{macrocode} % This eats the parindent, and then restores an empty everypar; % it is called by an implicit start of hmode. Contributed by Simon Pepping. % \begin{macrocode} \everypar{{\leavevmode\setbox\z@\lastbox \UseJadevskip{everypar}}% \everypar{\UseJadevskip {everypar}}% } } \def\endFootnotePar#1{% \let\@action\relax \ifnum\@ParNest>1 \ifnum\@FootnotePars>0\def\@action{\@@par}\fi \fi \@action \csname endQ@\Quadding\endcsname\null \global\advance\@FootnotePars by 1 \global\advance\@ParNest by -1 \endSetupICs \endgroup \everypar{{\leavevmode\setbox\z@\lastbox \UseJadevskip{everypar}}% \everypar{\UseJadevskip {everypar}}% } } % \end{macrocode} % \subsection{Score flow object class (clause 12.6.17)} % No support for: score-spaces, color or % line-thickness yet. % % \begin{macrocode} \def\Scoreafter{\uline} \def\Scorethrough{\sout} \def\Scorebefore{} \def\Score#1#2\endScore{#1% \csname Score\ScoreType\endcsname{#2}% } % \end{macrocode} % \subsection{Scroll flow object class (clause 12.6.28.1)} % \begin{macrocode} \def\Scroll{\SpS} \def\endScroll{\endSpS} % \end{macrocode} % \subsection{Sequence flow object class (clause 12.6.1)} % We have to allow for the document starting with a % sequence, not a simple page sequence, so we check if the % `begin document' work has been done. % \begin{macrocode} \newdimen\CurPosShift\CurPosShift\z@ \newif\if@Raised \def\Seq#1{% \ifInSpS\begingroup\fi \SetupICs{#1}% \ifx \@nodocument\relax \else \typeout{Jade begin document sequence at \the\inputlineno}% \JadeSetPage \JadeBeginDocument \ifnum\PageNColumns>1 \columnsep\PageColumnSep \ifnum\PageBalanceColumns>0 \begin{multicols}{\PageNColumns} \else % begin\{multicols*}{\PageNColumns} \let\balance@columns@out \multi@column@out \begin{multicols}{\PageNColumns} \fi \fi \fi \FlowObjectSetup{0}% \@Raisedfalse \ifdim\PositionPointShift=\CurPosShift \else \@tempdima\PositionPointShift \ifdim\PositionPointShift>\CurPosShift \advance\@tempdima by -\CurPosShift \else \advance\@tempdima by \CurPosShift \fi \CurPosShift\PositionPointShift \@Raisedtrue \fi \ifnum\@TableNest>0\else\if@Raised\leavevmode\raise\@tempdima\hbox\bgroup\fi\fi } \def\endSeq{% \ifnum\@TableNest>0\else\if@Raised\egroup\fi\fi \EndSetFont \endSetupICs \@Raisedfalse \ifInSpS\endgroup\fi } % \end{macrocode} % \subsection{Side Line flow object class} % \begin{macrocode} \def\SideLine#1{#1} \def\endSideLine{} % \end{macrocode} % \subsection{Simple Page Sequence flow object class (clause 12.6.3)} % Look out for the canonical 1in margins in TeX systems! % \begin{macrocode} \def\JadeSetPage{% \ifnum\PageNumberRestart=1 \global\c@page \@ne \fi \ifnum\PageTwoSide=0 \global\@twosidefalse \else \global\@twosidetrue \fi \oddsidemargin\LeftMargin \ifnum\PageTwoSide=0 \evensidemargin\LeftMargin \else \evensidemargin\RightMargin \fi \topmargin\HeaderMargin \headheight\LineSpacing \headsep\TopMargin \advance\headsep by -\HeaderMargin \advance\headsep by -\LineSpacing \footskip\BottomMargin \advance\footskip by -\FooterMargin \paperwidth\PageWidth \paperheight\PageHeight \textheight\paperheight \textwidth\paperwidth \advance\textheight by -\TopMargin \advance\textheight by -\BottomMargin \advance\textwidth by -\LeftMargin \advance\textwidth by -\RightMargin \ifx\pdfimage\@undefined \else \global\pdfpagewidth\paperwidth \global\pdfpageheight\paperheight \fi \@colht\textheight \@colroom\textheight \vsize\textheight \headwidth\textwidth \linewidth\textwidth \columnwidth\textwidth \hsize\columnwidth \linewidth\hsize \headheight12pt \let\pageFontSize\fSize \let\pageLineSpacing\LineSpacing \let\pageFontPosture\fPosture \let\pageFontProportionateWidth\fProportionateWidth \let\pageFontWeight\fWeight \let\pagefFamName\fFamName \arraycolsep\GridColumnSep } % initialize it \JadeSetPage \def\JadeBeginDocument{% % \end{macrocode} % We borrow most of the code of |\begin{document}|; we do not % want it all, as it interposes an unwanted group. % \begin{macrocode} \@clubpenalty\clubpenalty \begingroup\@floatplacement\@dblfloatplacement \makeatletter\let\@writefile\@gobbletwo \global \let \@multiplelabels \relax \@input{\jobname.aux}% \endgroup \immediate\openout\@mainaux\jobname.aux \immediate\write\@mainaux{\relax}% \process@table \let\glb@currsize\@empty %% Force math initialisation. \normalsize \everypar{\UseJadevskip{everypar}}% \@noskipsecfalse \let \@refundefined \relax \let\AtBeginDocument\@firstofone \ifdim\topskip<1sp\global\topskip 1sp\relax\fi \global\@maxdepth\maxdepth \@begindocumenthook \global\let\@begindocumenthook\@undefined \global\let\@filelist\relax \global\let\@addtofilelist\@gobble \gdef\do##1{\global\let ##1\@notprerr}% \@preamblecmds \global\let \@nodocument \relax \global\let\do\noexpand \ignorespaces } \newif\ifInSpS \def\SpS#1{% \InSpStrue \DoFOBSettrue \SetupICs{#1}% \gdef\thepage{\csname PageNumbering@\PageNumberFormat\endcsname\c@page}% % \end{macrocode} % The basic page setup needs to be delayed to this point, otherwise % the first page will be `frozen' in the format file. So check % here whether we are at the start of the document, and if so trigger % \LaTeX's |\begin{document}|. This is a pain, delaying the start of % the document. It means that documents which don't have a simple-page- % sequence at the start will fail. % \begin{macrocode} \JadeSetPage \ifx \@nodocument\relax \else \JadeBeginDocument \fi % \end{macrocode} % Grouping is turned on now we are inside a simple page sequence. % but is itself inside a group of the page sequence. % The problem is that if we start a Sequence, then start a % PageSequence, the |\begin{document}| occurs inside a group, % and so gets in a mess. If we turn off grouping % outside simple page sequences, any changes become global! % Does it make sense to have material not in a page % sequence, in TeX? Sadly, yes. The % document will still \emph{start} in non-group mode. % \begin{macrocode} \closeOrOpenMulticols{#1}% \DisplayNIC \openMulticols \FlowObjectSetup{0}% } \def\endSpS{% \DoFOBSetfalse \ifnum\PageNColumns>1\relax \ifnum\col@number>1\relax % in multicols \ifnum\PageBalanceColumns>0 \end{multicols} \else % \endmulticols* \vfill\end{multicols} \fi \fi \fi \if@twoside \ifnum\TwoSideStartOnRight=1 \cleardoublepage \else \clearpage \fi \else \clearpage \fi \fancyhf{}% \endDisplayNIC \let\FancyHook\@empty \let\FancyFirstHook\@empty \global\let\@sAfterMin\saMin \global\let\@sAfterMax\saMax \global\let\@sAfterNom\saNom \global\let\@sAfterPriority\saPriority \InSpSfalse } % \end{macrocode} % \subsection{Headers and footers} % \begin{macrocode} \def\SpSCenterFooter#1{\Setfoot[C]{#1}{CenterFooter}} \def\SpSCenterHeader#1{\Sethead[C]{#1}{CenterHeader}} \def\SpSLeftFooter#1{\Setfoot[L]{#1}{LeftFooter}} \def\SpSLeftHeader#1{\Sethead[L]{#1}{LeftHeader}} \def\SpSRightFooter#1{\Setfoot[R]{#1}{RightFooter}} \def\SpSRightHeader#1{\Sethead[R]{#1}{RightHeader}} % \def\SpSOtherBackCenterFooter#1{\Setfoot[CE]{#1}{OtherBackCenterFooter}} \def\SpSOtherBackLeftFooter#1{\Setfoot[LE]{#1}{OtherBackLeftFooter}} \def\SpSOtherBackRightFooter#1{\Setfoot[RE]{#1}{OtherBackRightFooter}} \def\SpSOtherBackRightHeader#1{\Sethead[RE]{#1}{OtherBackRightHeader}} \def\SpSOtherBackCenterHeader#1{\Sethead[CE]{#1}{OtherBackCenterHeader}} \def\SpSOtherBackLeftHeader#1{\Sethead[LE]{#1}{OtherBackLeftHeader}} % \def\SpSOtherFrontCenterFooter#1{\Setfoot[CO]{#1}{OtherFrontCenterFooter}} \def\SpSOtherFrontLeftFooter#1{\Setfoot[LO]{#1}{OtherFrontLeftFooter}} \def\SpSOtherFrontRightFooter#1{\Setfoot[RO]{#1}{OtherFrontRightFooter}} \def\SpSOtherFrontRightHeader#1{\Sethead[RO]{#1}{OtherFrontRightHeader}} \def\SpSOtherFrontCenterHeader#1{\Sethead[CO]{#1}{OtherFrontCenterHeader}} \def\SpSOtherFrontLeftHeader#1{\Sethead[LO]{#1}{OtherFrontLeftHeader}} % \def\SpSFirstBackCenterFooter#1{\SetFirstfoot[CE]{#1}{FirstBackCenterFooter}} \def\SpSFirstBackLeftFooter#1{\SetFirstfoot[LE]{#1}{FirstBackLeftFooter}} \def\SpSFirstBackRightFooter#1{\SetFirstfoot[RE]{#1}{FirstBackRightFooter}} \def\SpSFirstBackCenterHeader#1{\SetFirsthead[CE]{#1}{FirstBackCenterHeader}} \def\SpSFirstBackLeftHeader#1{\SetFirsthead[LE]{#1}{FirstBackLeftHeader}} \def\SpSFirstBackRightHeader#1{\SetFirsthead[RE]{#1}{FirstBackRightHeader}} \def\SpSFirstFrontCenterFooter#1{\SetFirstfoot[CO]{#1}{FirstFrontCenterFooter}} \def\SpSFirstFrontLeftFooter#1{\SetFirstfoot[LO]{#1}{FirstFrontLeftFooter}} \def\SpSFirstFrontRightFooter#1{\SetFirstfoot[RO]{#1}{FirstFrontRightFooter}} \def\SpSFirstFrontCenterHeader#1{\SetFirsthead[CO]{#1}{FirstFrontCenterHeader}} \def\SpSFirstFrontLeftHeader#1{\SetFirsthead[LO]{#1}{FirstFrontLeftHeader}} \def\SpSFirstFrontRightHeader#1{% \SetFirsthead[RO]{#1}{FirstFrontRightHeader}% % \end{macrocode} % This one comes last, so now set up page styles. YUCK! % \begin{macrocode} \pagestyle{jadeother}% \thispagestyle{jadefirst}% } \fancypagestyle{jadeother}{\fancyhf{}\FancyHook}% \fancypagestyle{jadefirst}{\fancyhf{}\FancyFirstHook}% % \def\Sethead[#1]#2#3{% \ifx\\#2\\\relax\else \g@addto@macro\FancyHook{\fancyhead[#1]{\setnormal#2}}% \fi } \def\Setfoot[#1]#2#3{% \ifx\\#2\\\relax\else \g@addto@macro\FancyHook{\fancyfoot[#1]{\setnormal#2}}% \fi } \def\SetFirsthead[#1]#2#3{% \ifx\\#2\\\relax\else \g@addto@macro\FancyFirstHook{\fancyhead[#1]{\setnormal#2}}% \fi } \def\SetFirstfoot[#1]#2#3{% \ifx\\#2\\\relax\else \g@addto@macro\FancyFirstHook{\fancyfoot[#1]{\setnormal#2}}% \fi } \def\FancyHook{} \def\FancyFirstHook{} \pagestyle{jadeother} % \end{macrocode} % \subsection{Table flow object class} % \begin{macrocode} \def\Table#1{\TableNIC\UseJadevskip{table}\SetupICs{#1}} \def\endTable{\endSetupICs\endTableNIC} \def\@full{full} \LTpre=\z@ \LTpost=\z@ \newenvironment{TeXTable}[3]{% width, ncolumns, template \global\advance\@TableNest by 1 \ifx\TableWidth\@full\def\TableWidth{\hsize}\fi \FlowObjectSetup{0}% \let\Node\@gobble \let\endNode\@gobble \let\Par\TablePar \setlength\LTleft\StartIndent \setlength\LTright\fill \ifnum\PageNColumns>1 \tabular{#3}% \else \ifnum\@TableNest>1 \tabular{#3}% \else \longtable{#3}% \fi \fi }{% \ifnum\PageNColumns>1 \endtabular \else \ifnum\@TableNest>1 \endtabular \else \endlongtable \fi \fi \ifvoid\@mpfootins\else \vskip\skip\@mpfootins \normalcolor \unvbox\@mpfootins \fi \global\advance\@TableNest by -1 } % \end{macrocode} % \subsection{Table Cell flow object class} % \begin{macrocode} \def\Hline{\hline} \def\Cline{\cline} \let\TeXTableCell=\multicolumn \def\TableCell#1{% \TableCellNIC% \SetupICs{#1}% \FlowObjectSetup{0}% \rule[2ex]{0pt}{\CellBeforeRowMargin}% \global\@TablePars0% \ifnum\NRowsSpanned>1% Row spanning \JadeRowSpan% \else \ifnum\TeXRowSpanFiller>0% \JadeRowSpanFiller \fi \fi% } \def\endTableCell#1{% \ifnum\NRowsSpanned>1% \endJadeRowSpan% \fi \rule[-\CellAfterRowMargin]{0pt}{0pt}% \endSetupICs \endTableCellNIC } % \end{macrocode} % \subsection{Table Part flow object class} % \begin{macrocode} \def\TablePart#1{#1\FlowObjectSetup{0}} \def\TablePartHeader#1{} \def\TablePartFooter#1{} \def\endTablePartFooter#1{} \def\endTablePartHeader#1{% \ifnum\TablePartOmitMiddleHeader=1 \endfirsthead \else \endhead \fi} \def\endTablePart{} % \end{macrocode} % \subsection{Table Row flow object class} % \begin{macrocode} \def\TableRow#1{#1} \def\endTableRow#1{\\} % \end{macrocode} % % \subsection{Character mapping} % \begin{macrocode} \def\Character#1{% \SetupICs{}% \ifnum#1<255\char#1\else \expandafter\ifx\csname !#1\endcsname\relax <#1>\typeout{Warning: Unknown character #1, at \the\inputlineno}% \else\csname !#1\endcsname\fi \fi \ifdim\EscapementSpaceAfterNom=\z@ \else \@tempdima\EscapementSpaceAfterNom \advance\@tempdima by -\EscapementSpaceAfterMin \@tempdimb\EscapementSpaceAfterNom \advance\@tempdimb by -\EscapementSpaceAfterMax \hskip\EscapementSpaceAfterNom plus \@tempdimb minus \@tempdima% \fi \endSetupICs{}% } % \end{macrocode} %\subsection{DisplayNIC} % \begin{macrocode} \newcount\DisplayStack \newcount\LastDisplayStack \newif\ifBreakMe \newif\ifJadeskipready \Jadeskipreadyfalse \newskip\Jadeskip \newskip\Jadelastskip \newskip\jadetempskip \BreakMefalse \DisplayStack0 \LastDisplayStack-1 \let\@sBeforeMin\sbMin \let\@sBeforeMax\sbMax \let\@sBeforeNom\sbNom \let\@sBeforePriority\sbPriority \def\@force{force} \def\Jadevskip#1#2{\global\Jadeskipreadytrue\global\Jadeskip#1\relax} \def\UseJadevskip#1{% \global\Jadeskipreadyfalse \ifdim\Jadeskip=\z@\else \ifvmode \vskip\Jadeskip\global\Jadeskip\z@ \else \setbox\z@\lastbox\par \vskip\Jadeskip\global\Jadeskip\z@ {\everypar{}\noindent\box\z@}% \fi \fi } \def\QueryPageBreak{% \ifBreakMe \ifvmode \penalty \@M \else \@bsphack \vadjust{\penalty \@M}% \@esphack \fi \else \ifnum\KeepWithNext=1 \penalty-600 \else \penalty \z@ \fi \fi } \def\DisplayNIC{% \advance\DisplayStack by 1 \QueryPageBreak % \end{macrocode} % What we are trying to identify is a display which starts % inside another display. % \begin{macrocode} % \ifnum\DisplayStack>\LastDisplayStack % \def\sbPriority{force}% % \def\LastSpaceBeforePriority{0}% % \fi \let\@sAfterMin\saMin \let\@sAfterMax\saMax \let\@sAfterNom\saNom \let\@sAfterPriority\saPriority % \begingroup \ifx\BreakBefore\relax\else \csname Break@\BreakBefore\endcsname \fi \CurrentSpaceMin=\sbMin \CurrentSpaceNom=\sbNom \CurrentSpaceMax=\sbMax % \edef\CurrentSpacePriority{\sbPriority}% % \end{macrocode} % See if either display space priority is set to `force'; % if so, use that set of values; % if both priorities are `force', add values together % \begin{macrocode} \ifx\sbPriority\@force \ifx\LastSpacePriority\@force \advance\CurrentSpaceMin by \LastSpaceMin \advance\CurrentSpaceNom by \LastSpaceNom \advance\CurrentSpaceMax by \LastSpaceMax \fi \else \ifx\LastSpacePriority\@force \CurrentSpaceMin=\LastSpaceMin \CurrentSpaceNom=\LastSpaceNom \CurrentSpaceMax=\LastSpaceMax % \end{macrocode} % See if the priority of either set is higher, if so use that % \begin{macrocode} \else \ifnum\CurrentSpacePriority>\LastSpacePriority \relax \else \ifnum\LastSpacePriority>\CurrentSpacePriority \CurrentSpaceMin=\LastSpaceMin \CurrentSpaceNom=\LastSpaceNom \CurrentSpaceMax=\LastSpaceMax \else % \end{macrocode} % So the priorities are equal; take the one with the larger Nom % \begin{macrocode} \ifdim\CurrentSpaceNom>\LastSpaceNom \relax \else \ifdim\LastSpaceNom>\CurrentSpaceNom \CurrentSpaceMin=\LastSpaceMin \CurrentSpaceNom=\LastSpaceNom \CurrentSpaceMax=\LastSpaceMax \else % \end{macrocode} % Dang, the Noms are equal. Take the larger minimum, and smaller % maximum % \begin{macrocode} \ifdim\LastSpaceMax<\CurrentSpaceMax \CurrentSpaceMax\LastSpaceMax \fi \ifdim\LastSpaceMin>\CurrentSpaceMin \CurrentSpaceMin\LastSpaceMin \fi \fi \fi \fi \fi \fi \fi \@tempdima\CurrentSpaceNom \advance\@tempdima by -\CurrentSpaceMin \@tempdimb\CurrentSpaceNom \advance\@tempdimb by -\CurrentSpaceMax \QueryPageBreak \jadetempskip=\CurrentSpaceNom plus \@tempdimb minus \@tempdima \Jadevskip{\the\jadetempskip}{startDisplayNIC}% \let\Keep\relax \let\BreakBefore\relax \let\BreakAfter\relax \let\KeepWithPrevious\relax \let\MayViolateKeepBefore\relax \let\MayViolateKeepAfter\relax \def\sbMin{\z@}% \def\sbMax{\z@}% \def\sbNom{\z@}% \def\sbPriority{0}% \def\saMin{\z@}% \def\saMax{\z@}% \def\saNom{\z@}% \def\saPriority{0}% \ifdim\Jadeskip=\z@\else\the\everypar\fi } \def\endDisplayNIC{% \ifnum\KeepWithNext=1 \penalty\@M\global\BreakMetrue\else\global\BreakMefalse \fi \ifdim\Jadeskip=\z@\else\the\everypar\fi \endgroup \global\LastSpaceNom=\@sAfterNom \global\LastSpaceMax=\@sAfterMax \global\LastSpaceMin=\@sAfterMin \global\edef\LastSpacePriority{\@sAfterPriority}% \@tempdima\@sAfterNom \advance\@tempdima by -\@sAfterMin \@tempdimb\@sAfterNom \advance\@tempdimb by -\@sAfterMax \jadetempskip=\@sAfterNom plus \@tempdimb minus \@tempdima \Jadevskip{\the\jadetempskip}{endDIsplayNIC}% \global\LastDisplayStack=\DisplayStack \advance\DisplayStack by -1 } \def\paraSetup{% \rightskip\EndIndent \leftskip\StartIndent \csname JQ@\Quadding\endcsname \csname L@\Language\endcsname \ifx\FirstLineStartIndent\@empty\relax \else\parindent\FirstLineStartIndent \fi \ifx\InputWhitespaceTreatment\@empty\relax \else\csname White@\InputWhitespaceTreatment\endcsname \fi \ifx\Lines\@empty\relax \else\csname Lines@\Lines\endcsname \fi } % \end{macrocode} %\section{Setup of non-inherited characteristics} %\subsection{Inline} % \begin{macrocode} \def\InlineNIC{% \begingroup } \def\endInlineNIC{% \let\BreakBeforePriority\relax \let\BreakAfterPriority\relax \endgroup } % \end{macrocode} %\subsection{Display} % \begin{macrocode} \def\DisplayGroupNIC{% \DisplayNIC } \def\endDisplayGroupNIC{% \endDisplayNIC } % \end{macrocode} %\subsection{Graphics, boxes, leaders} % \begin{macrocode} \def\ExternalGraphicNIC{% \InlineNIC } \def\endExternalGraphicNIC{% \endInlineNIC } \def\BoxNIC{% \DisplayNIC \InlineNIC } \def\endBoxNIC{% \endInlineNIC \endDisplayNIC } \def\RuleNIC{% \DisplayNIC \InlineNIC } \def\endRuleNIC{% \endInlineNIC \endDisplayNIC } \def\LeaderNIC{% \InlineNIC } \def\LeaderNIC{% \InlineNIC } % \end{macrocode} %\subsection{Tables} % \begin{macrocode} \let\TableNIC\DisplayNIC \let\endTableNIC\endDisplayNIC \def\TableColumnNIC{} \def\endTableColumnNIC{} \def\TableCellNIC{% \begingroup% \def\NColumnsSpanned{1}% \def\NRowsSpanned{1}% \def\ColumnIndex{0}% \def\TeXRowSpanFiller{0}% } \def\endTableCellNIC{\endgroup} \def\GridNIC{} \def\endGridNIC{} \def\GridCellNIC{} \def\endGridCellNIC{} \let\ParagraphNIC\DisplayNIC \let\LineFieldNIC\InlineNIC \let\endParagraphNIC\endDisplayNIC \let\endLineFieldNIC\endInlineNIC % \end{macrocode} %\section{Setup of inherited characteristics} % A problem arises here is `whitespacetreatment' is set to % `preserve', as this makes spaces active. If then a font name % like `Times Roman' is processed, the space in the middle % is processed! We replace spaces in font family names with `-' % in TeXFOTBuilder.cxx % \begin{macrocode} \newif\ifNeedsSelect \chardef\nonactive=10 \def\SetupICs#1{#1% \let\current@f@series\f@series \let\current@f@shape\f@shape \let\current@f@family\f@family \let\current@f@size\f@size \edef\LaTeXshape{\csname Width@\fProportionateWidth\endcsname \csname Weight@\fWeight\endcsname}% \ifx\LaTeXshape\@empty\def\LaTeXshape{m}\fi \edef\f@series{\LaTeXshape}% \edef\f@shape{\csname Posture@\fPosture\endcsname}% \IfFileExists{t1\fFamName.fd} {\def\f@family{\fFamName}} {\edef\f@family{% \expandafter\ifx\csname Family@\fFamName\endcsname\relax \csname Family@\DefaultfFamName\endcsname \else \csname Family@\fFamName\endcsname \fi}}% \set@fontsize\baselinestretch{\fSize}{\LineSpacing}% %\NeedsSelecttrue %\ifx\f@size\current@f@size\relax\NeedsSelectfalse\fi %\ifx\f@family\current@f@family\relax\NeedsSelectfalse\fi %\ifx\f@shape\current@f@shape\relax\NeedsSelectfalse\fi %\ifx\f@series\current@f@series\relax\NeedsSelectfalse\fi %\ifNeedsSelect \selectfont %\fi \ifx\ColorRed\@empty\relax\else \RGBColor{\ColorRed}{\ColorGreen}{\ColorBlue}% \fi } \def\endSetupICs{} % \end{macrocode} % |\FlowObjectSetup| should be called at the beginning of every object % that can be meaningfully labelled. It is this that creates an anchor, % not the |\Node|, to avoid duplicates and wastage. % % Because labelling writes to an external file, or does a |\special|, % it adds a whatsit to the main vertical list. This wrecks the % |\vskip-\lastskip| which every paragraph or display does. Bad news! % Labelling when we are in a Link element is not a good thing. % It messes up the references. % \begin{macrocode} \def\@madelink{ } \newif\ifDoFOBSet \DoFOBSettrue \def\FlowObjectSetup#1{% \ifDoFOBSet \ifLabelElements \ifx\Label\@empty\let\Label\Element\fi \fi \ifx\Label\@empty\else \expandafter\ifx\csname x@\Label\endcsname\@madelink \else \bgroup \ifNestedLink \else \hyper@anchorstart{\Label}\hyper@anchorend \PageLabel{\Label}% \expandafter\gdef\csname x@\Label\endcsname{ }% \fi \egroup \let\Label\@empty \let\Element\@empty \fi \fi \fi } % \end{macrocode} % \section{Non-standard flow objects} % \begin{macrocode} \def\fps@figure{htbp} % prefer figures to be placed here \def\ftype@figure{1} \def\PageFloat#1{\SetupICs{#1}% \ifnum\Span>0 \def\Span{0}% \typeout{JadeTeX WARNING: specifying column spans for floats not supported}% \fi \FlowObjectSetup{0}% \@dblfloat{figure}[\placement]% } \def\endPageFloat{\end@dblfloat} \def\Footnotesize{\@setfontsize\small\@ixpt{11}} \newcount\@FootnotePars \skip\@mpfootins = \skip\footins \long\def\PageFootnote#1#2{#1% \ifnum\@TableNest>0 \global\setbox\@mpfootins\vbox{% \unvbox\@mpfootins \reset@font\Footnotesize \hsize\TableWidth \leftskip\StartIndent \@parboxrestore \color@begingroup \@makefntext{% \rule\z@\footnotesep\ignorespaces#2\@finalstrut\strutbox}% \color@endgroup}% \else \insert\footins{% \let\Par\FootnotePar \let\endPar\endFootnotePar \global\@FootnotePars0% \reset@font\Footnotesize \interlinepenalty\interfootnotelinepenalty \splittopskip\footnotesep \splitmaxdepth \dp\strutbox \floatingpenalty \@MM \hsize\columnwidth \@parboxrestore \color@begingroup \@makefntext{% \rule\z@\footnotesep\ignorespaces#2\@finalstrut\strutbox} \color@endgroup}% \fi } \def\@makefntext#1{% \parindent 1em% \noindent #1} % \end{macrocode} % \section{Color} % Only RGB color working at present. Sorry. % \begin{macrocode} \def\RGBColor#1#2#3{% \c@lor@RGB@rgb{#1}\@tempa \c@lor@RGB@rgb{#2}\@tempb \c@lor@RGB@rgb{#3}\@tempc % \typeout{Set Color \@tempa, \@tempb, \@tempc}% \color[rgb]{\@tempa, \@tempb, \@tempc}% } \def\c@lor@RGB@rgb#1#2{% \dimen@#1\p@ \divide\dimen@\@cclv \edef#2{\strip@pt\dimen@}} \def\EndSetFont{% \ifx\csname\fPosture Over\endcsname\relax \relax\else\csname\fPosture Over\endcsname\fi } % \end{macrocode} % \section{Startup} % \begin{macrocode} %\let\DEBUG\@gobble \def\endFOT{%\let\normalcolor\relax \def\Hy@colorlink##1{}% \def\Hy@endcolorlink{}% \ifnum\col@number>1 \ifnum\PageBalanceColumns>0 \end{multicols} \else % \endmulticols* \vfill\end{multicols} \fi \fi \enddocument} \def\FOT#1{% \checkFOTversion{#1}% \hoffset-1in\voffset-1in \def\setnormal{% \let\fSize\pageFontSize \let\LineSpacing\pageLineSpacing \let\fPosture\pageFontPosture \let\fProportionateWidth\pageFontProportionateWidth \let\fWeight\pageFontWeight \let\fFamName\pagefFamName } \def\headrulewidth{0\p@}% \def\footrulewidth{0\p@}% \abovedisplayskip=\z@ \abovedisplayshortskip=\z@ \belowdisplayskip=\z@ \belowdisplayshortskip=\z@ \raggedbottom \clubpenalty=4000 \widowpenalty=2000 \setlength\emergencystretch{2in} \frenchspacing \fancyhf{}% \def\familydefault{ptm}% \fontfamily{\familydefault}\selectfont \pagenumbering{arabic}% \nonstopmode \Mathcount0 % \end{macrocode} % We do not put out a |\begin{document}|, as that would fix % the page size in advance; we delay that for the first % page sequence. % \begin{macrocode} \let\default@color\current@color % \end{macrocode} % Individual users or projects can override anything in this % setup with a configuration file, loaded here, called % \texttt{jadetex.cfg}. % \begin{macrocode} \InputIfFileExists{jadetex.cfg}{}{}% \ifLabelElements \typeout{Elements will be labelled}% \else \typeout{Elements will NOT be labelled}% \fi % wicked. dont redo \@begindocumenthook! cause color in pdftex to foul up. % \@begindocumenthook \makeatletter } \everyjob{% \typeout{JadeTeX \JadeTeXDate: \JadeTeXMajorVersion.\JadeTeXMinorVersion}% } \catcode`\^^M=10% \catcode0=9% % %<*dsssldef> \NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvideTextCommandDefault{\textonequarter}{\ensuremath{\frac14}} \ProvideTextCommandDefault{\textonehalf}{\ensuremath{\frac12}} \ProvideTextCommandDefault{\textthreequarters}{\ensuremath{\frac34}} \ProvideTextCommandDefault{\textcent} {\TextSymbolUnavailable\textcent} \ProvideTextCommandDefault{\textyen} {\TextSymbolUnavailable\textyen} \ProvideTextCommandDefault{\textcurrency} {\TextSymbolUnavailable\textcurrency} \ProvideTextCommandDefault{\textbrokenbar} {\TextSymbolUnavailable\textbrokenbar} \providecommand{\mathdegree}{{\ensuremath{^\circ}} } \providecommand{\mathonesuperior}{{^1}} \providecommand{\mathtwosuperior}{{^2}} \providecommand{\maththreesuperior}{{^3}} \providecommand{\mathordmasculine}{\mathrm{^{\underline{o}}}} \providecommand{\mathordfeminine}{\mathrm{^{\underline{a}}}} \DeclareInputText{"0A0}{\nobreakspace} \DeclareInputMath{"0B0}{\mathdegree} \DeclareInputText{"0A1}{\textexclamdown} \DeclareInputMath{"0B1}{\ensuremath{\pm}} \DeclareInputText{"0A2}{\textcent} \DeclareInputMath{"0B2}{\mathtwosuperior} \DeclareInputText{"0B2}{\ensuremath{\mathtwosuperior}} \DeclareInputText{"0A3}{\pounds} \DeclareInputMath{"0B3}{\maththreesuperior} \DeclareInputText{"0B3}{\ensuremath{\maththreesuperior}} \DeclareInputText{"0A4}{\textcurrency} \DeclareInputText{"0B4}{\@tabacckludge'{}} \DeclareInputText{"0A5}{\textyen} \DeclareInputMath{"0B5}{\mu} \DeclareInputText{"0B5}{\textmu} \DeclareInputText{"0A6}{\textbrokenbar} \DeclareInputText{"0B6}{\P} \DeclareInputText{"0A7}{\S} \DeclareInputText{"0B7}{\ifmmode\cdot\else\textperiodcentered\fi} \DeclareInputText{"0A8}{\"{}} \DeclareInputText{"0B8}{\c{}} \DeclareInputText{"0A9}{\copyright} \DeclareInputMath{"0B9}{\mathonesuperior} \DeclareInputMath{"0AA}{\mathordfeminine} \DeclareInputMath{"0BA}{\mathordmasculine} \DeclareInputText{"0B9}{\ensuremath{\mathonesuperior}} \DeclareInputText{"0AA}{\ensuremath{\mathordfeminine}} \DeclareInputText{"0BA}{\ensuremath{\mathordmasculine}} \DeclareInputText{"0AB}{\guillemotleft} \DeclareInputText{"0BB}{\guillemotright} \DeclareInputMath{"0AC}{\lnot} \DeclareInputText{"0AC}{\ensuremath{\lnot}} \DeclareInputText{"0BC}{\textonequarter} \DeclareInputText{"0AD}{\-} \DeclareInputText{"0BD}{\textonehalf} \DeclareInputText{"0AE}{\textregistered} \DeclareInputText{"0BE}{\textthreequarters} \DeclareInputText{"0AF}{\ifmmode\else\@tabacckludge={}\fi} \DeclareInputText{"0BF}{\textquestiondown} \DeclareInputText{"0C0}{\@tabacckludge`A} \DeclareInputText{"0D0}{\DH} \DeclareInputText{"0C1}{\@tabacckludge'A} \DeclareInputText{"0D1}{\~N} \DeclareInputText{"0C2}{\^A} \DeclareInputText{"0D2}{\@tabacckludge`O} \DeclareInputText{"0C3}{\~A} \DeclareInputText{"0D3}{\@tabacckludge'O} \DeclareInputText{"0C4}{\"A} \DeclareInputText{"0D4}{\^O} \DeclareInputText{"0C5}{\AA} \DeclareInputText{"0D5}{\~O} \DeclareInputText{"0C6}{\AE} \DeclareInputText{"0D6}{\"O} \DeclareInputText{"0C7}{\c C} \DeclareInputMath{"0D7}{\ensuremath{\times}} \DeclareInputText{"0C8}{\@tabacckludge`E} \DeclareInputText{"0D8}{\O} \DeclareInputText{"0C9}{\@tabacckludge'E} \DeclareInputText{"0D9}{\@tabacckludge`U} \DeclareInputText{"0CA}{\^E} \DeclareInputText{"0DA}{\@tabacckludge'U} \DeclareInputText{"0CB}{\"E} \DeclareInputText{"0DB}{\^U} \DeclareInputText{"0CC}{\@tabacckludge`I} \DeclareInputText{"0DC}{\"U} \DeclareInputText{"0CD}{\@tabacckludge'I} \DeclareInputText{"0DD}{\@tabacckludge'Y} \DeclareInputText{"0CE}{\^I} \DeclareInputText{"0DE}{\TH} \DeclareInputText{"0CF}{\"I} \DeclareInputText{"0DF}{\ss} \DeclareInputText{"0E0}{\@tabacckludge`a} \DeclareInputText{"0F0}{\dh} \DeclareInputText{"0E1}{\@tabacckludge'a} \DeclareInputText{"0F1}{\~n} \DeclareInputText{"0E2}{\^a} \DeclareInputText{"0F2}{\@tabacckludge`o} \DeclareInputText{"0E3}{\~a} \DeclareInputText{"0F3}{\@tabacckludge'o} \DeclareInputText{"0E4}{\"a} \DeclareInputText{"0F4}{\^o} \DeclareInputText{"0E5}{\aa} \DeclareInputText{"0F5}{\~o} \DeclareInputText{"0E6}{\ae} \DeclareInputText{"0F6}{\"o} \DeclareInputText{"0E7}{\c c} \DeclareInputMath{"0F7}{\ensuremath{\div}} \DeclareInputText{"0E8}{\@tabacckludge`e} \DeclareInputText{"0F8}{\o} \DeclareInputText{"0E9}{\@tabacckludge'e} \DeclareInputText{"0F9}{\@tabacckludge`u} \DeclareInputText{"0EA}{\^e} \DeclareInputText{"0FA}{\@tabacckludge'u} \DeclareInputText{"0EB}{\"e} \DeclareInputText{"0FB}{\^u} \DeclareInputText{"0EC}{\@tabacckludge`\i} \DeclareInputText{"0FC}{\"u} \DeclareInputText{"0ED}{\@tabacckludge'\i} \DeclareInputText{"0FD}{\@tabacckludge'y} \DeclareInputText{"0EE}{\^\i} \DeclareInputText{"0FE}{\th} \DeclareInputText{"0EF}{\"\i} \DeclareInputText{"0FF}{\"y} % % \end{macrocode} % \Finale % \endinput