1*6a54128fSAndroid Build Coastguard Worker% texinfo.tex -- TeX macros to handle Texinfo files. 2*6a54128fSAndroid Build Coastguard Worker% 3*6a54128fSAndroid Build Coastguard Worker% Load plain if necessary, i.e., if running under initex. 4*6a54128fSAndroid Build Coastguard Worker\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi 5*6a54128fSAndroid Build Coastguard Worker% 6*6a54128fSAndroid Build Coastguard Worker\def\texinfoversion{2006-02-13.16} 7*6a54128fSAndroid Build Coastguard Worker% 8*6a54128fSAndroid Build Coastguard Worker% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, 9*6a54128fSAndroid Build Coastguard Worker% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free 10*6a54128fSAndroid Build Coastguard Worker% Software Foundation, Inc. 11*6a54128fSAndroid Build Coastguard Worker% 12*6a54128fSAndroid Build Coastguard Worker% This texinfo.tex file is free software; you can redistribute it and/or 13*6a54128fSAndroid Build Coastguard Worker% modify it under the terms of the GNU General Public License as 14*6a54128fSAndroid Build Coastguard Worker% published by the Free Software Foundation; either version 2, or (at 15*6a54128fSAndroid Build Coastguard Worker% your option) any later version. 16*6a54128fSAndroid Build Coastguard Worker% 17*6a54128fSAndroid Build Coastguard Worker% This texinfo.tex file is distributed in the hope that it will be 18*6a54128fSAndroid Build Coastguard Worker% useful, but WITHOUT ANY WARRANTY; without even the implied warranty 19*6a54128fSAndroid Build Coastguard Worker% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 20*6a54128fSAndroid Build Coastguard Worker% General Public License for more details. 21*6a54128fSAndroid Build Coastguard Worker% 22*6a54128fSAndroid Build Coastguard Worker% You should have received a copy of the GNU General Public License 23*6a54128fSAndroid Build Coastguard Worker% along with this texinfo.tex file; see the file COPYING. If not, write 24*6a54128fSAndroid Build Coastguard Worker% to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 25*6a54128fSAndroid Build Coastguard Worker% Boston, MA 02110-1301, USA. 26*6a54128fSAndroid Build Coastguard Worker% 27*6a54128fSAndroid Build Coastguard Worker% As a special exception, when this file is read by TeX when processing 28*6a54128fSAndroid Build Coastguard Worker% a Texinfo source document, you may use the result without 29*6a54128fSAndroid Build Coastguard Worker% restriction. (This has been our intent since Texinfo was invented.) 30*6a54128fSAndroid Build Coastguard Worker% 31*6a54128fSAndroid Build Coastguard Worker% Please try the latest version of texinfo.tex before submitting bug 32*6a54128fSAndroid Build Coastguard Worker% reports; you can get the latest version from: 33*6a54128fSAndroid Build Coastguard Worker% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or 34*6a54128fSAndroid Build Coastguard Worker% ftp://tug.org/tex/texinfo.tex 35*6a54128fSAndroid Build Coastguard Worker% (and all CTAN mirrors, see http://www.ctan.org). 36*6a54128fSAndroid Build Coastguard Worker% The texinfo.tex in any given distribution could well be out 37*6a54128fSAndroid Build Coastguard Worker% of date, so if that's what you're using, please check. 38*6a54128fSAndroid Build Coastguard Worker% 39*6a54128fSAndroid Build Coastguard Worker% Send bug reports to [email protected]. Please include including a 40*6a54128fSAndroid Build Coastguard Worker% complete document in each bug report with which we can reproduce the 41*6a54128fSAndroid Build Coastguard Worker% problem. Patches are, of course, greatly appreciated. 42*6a54128fSAndroid Build Coastguard Worker% 43*6a54128fSAndroid Build Coastguard Worker% To process a Texinfo manual with TeX, it's most reliable to use the 44*6a54128fSAndroid Build Coastguard Worker% texi2dvi shell script that comes with the distribution. For a simple 45*6a54128fSAndroid Build Coastguard Worker% manual foo.texi, however, you can get away with this: 46*6a54128fSAndroid Build Coastguard Worker% tex foo.texi 47*6a54128fSAndroid Build Coastguard Worker% texindex foo.?? 48*6a54128fSAndroid Build Coastguard Worker% tex foo.texi 49*6a54128fSAndroid Build Coastguard Worker% tex foo.texi 50*6a54128fSAndroid Build Coastguard Worker% dvips foo.dvi -o # or whatever; this makes foo.ps. 51*6a54128fSAndroid Build Coastguard Worker% The extra TeX runs get the cross-reference information correct. 52*6a54128fSAndroid Build Coastguard Worker% Sometimes one run after texindex suffices, and sometimes you need more 53*6a54128fSAndroid Build Coastguard Worker% than two; texi2dvi does it as many times as necessary. 54*6a54128fSAndroid Build Coastguard Worker% 55*6a54128fSAndroid Build Coastguard Worker% It is possible to adapt texinfo.tex for other languages, to some 56*6a54128fSAndroid Build Coastguard Worker% extent. You can get the existing language-specific files from the 57*6a54128fSAndroid Build Coastguard Worker% full Texinfo distribution. 58*6a54128fSAndroid Build Coastguard Worker% 59*6a54128fSAndroid Build Coastguard Worker% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. 60*6a54128fSAndroid Build Coastguard Worker 61*6a54128fSAndroid Build Coastguard Worker 62*6a54128fSAndroid Build Coastguard Worker\message{Loading texinfo [version \texinfoversion]:} 63*6a54128fSAndroid Build Coastguard Worker 64*6a54128fSAndroid Build Coastguard Worker% If in a .fmt file, print the version number 65*6a54128fSAndroid Build Coastguard Worker% and turn on active characters that we couldn't do earlier because 66*6a54128fSAndroid Build Coastguard Worker% they might have appeared in the input file name. 67*6a54128fSAndroid Build Coastguard Worker\everyjob{\message{[Texinfo version \texinfoversion]}% 68*6a54128fSAndroid Build Coastguard Worker \catcode`+=\active \catcode`\_=\active} 69*6a54128fSAndroid Build Coastguard Worker 70*6a54128fSAndroid Build Coastguard Worker\message{Basics,} 71*6a54128fSAndroid Build Coastguard Worker\chardef\other=12 72*6a54128fSAndroid Build Coastguard Worker 73*6a54128fSAndroid Build Coastguard Worker% We never want plain's \outer definition of \+ in Texinfo. 74*6a54128fSAndroid Build Coastguard Worker% For @tex, we can use \tabalign. 75*6a54128fSAndroid Build Coastguard Worker\let\+ = \relax 76*6a54128fSAndroid Build Coastguard Worker 77*6a54128fSAndroid Build Coastguard Worker% Save some plain tex macros whose names we will redefine. 78*6a54128fSAndroid Build Coastguard Worker\let\ptexb=\b 79*6a54128fSAndroid Build Coastguard Worker\let\ptexbullet=\bullet 80*6a54128fSAndroid Build Coastguard Worker\let\ptexc=\c 81*6a54128fSAndroid Build Coastguard Worker\let\ptexcomma=\, 82*6a54128fSAndroid Build Coastguard Worker\let\ptexdot=\. 83*6a54128fSAndroid Build Coastguard Worker\let\ptexdots=\dots 84*6a54128fSAndroid Build Coastguard Worker\let\ptexend=\end 85*6a54128fSAndroid Build Coastguard Worker\let\ptexequiv=\equiv 86*6a54128fSAndroid Build Coastguard Worker\let\ptexexclam=\! 87*6a54128fSAndroid Build Coastguard Worker\let\ptexfootnote=\footnote 88*6a54128fSAndroid Build Coastguard Worker\let\ptexgtr=> 89*6a54128fSAndroid Build Coastguard Worker\let\ptexhat=^ 90*6a54128fSAndroid Build Coastguard Worker\let\ptexi=\i 91*6a54128fSAndroid Build Coastguard Worker\let\ptexindent=\indent 92*6a54128fSAndroid Build Coastguard Worker\let\ptexinsert=\insert 93*6a54128fSAndroid Build Coastguard Worker\let\ptexlbrace=\{ 94*6a54128fSAndroid Build Coastguard Worker\let\ptexless=< 95*6a54128fSAndroid Build Coastguard Worker\let\ptexnewwrite\newwrite 96*6a54128fSAndroid Build Coastguard Worker\let\ptexnoindent=\noindent 97*6a54128fSAndroid Build Coastguard Worker\let\ptexplus=+ 98*6a54128fSAndroid Build Coastguard Worker\let\ptexrbrace=\} 99*6a54128fSAndroid Build Coastguard Worker\let\ptexslash=\/ 100*6a54128fSAndroid Build Coastguard Worker\let\ptexstar=\* 101*6a54128fSAndroid Build Coastguard Worker\let\ptext=\t 102*6a54128fSAndroid Build Coastguard Worker 103*6a54128fSAndroid Build Coastguard Worker% If this character appears in an error message or help string, it 104*6a54128fSAndroid Build Coastguard Worker% starts a new line in the output. 105*6a54128fSAndroid Build Coastguard Worker\newlinechar = `^^J 106*6a54128fSAndroid Build Coastguard Worker 107*6a54128fSAndroid Build Coastguard Worker% Use TeX 3.0's \inputlineno to get the line number, for better error 108*6a54128fSAndroid Build Coastguard Worker% messages, but if we're using an old version of TeX, don't do anything. 109*6a54128fSAndroid Build Coastguard Worker% 110*6a54128fSAndroid Build Coastguard Worker\ifx\inputlineno\thisisundefined 111*6a54128fSAndroid Build Coastguard Worker \let\linenumber = \empty % Pre-3.0. 112*6a54128fSAndroid Build Coastguard Worker\else 113*6a54128fSAndroid Build Coastguard Worker \def\linenumber{l.\the\inputlineno:\space} 114*6a54128fSAndroid Build Coastguard Worker\fi 115*6a54128fSAndroid Build Coastguard Worker 116*6a54128fSAndroid Build Coastguard Worker% Set up fixed words for English if not already set. 117*6a54128fSAndroid Build Coastguard Worker\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi 118*6a54128fSAndroid Build Coastguard Worker\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi 119*6a54128fSAndroid Build Coastguard Worker\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi 120*6a54128fSAndroid Build Coastguard Worker\ifx\putwordin\undefined \gdef\putwordin{in}\fi 121*6a54128fSAndroid Build Coastguard Worker\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi 122*6a54128fSAndroid Build Coastguard Worker\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi 123*6a54128fSAndroid Build Coastguard Worker\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi 124*6a54128fSAndroid Build Coastguard Worker\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi 125*6a54128fSAndroid Build Coastguard Worker\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi 126*6a54128fSAndroid Build Coastguard Worker\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi 127*6a54128fSAndroid Build Coastguard Worker\ifx\putwordof\undefined \gdef\putwordof{of}\fi 128*6a54128fSAndroid Build Coastguard Worker\ifx\putwordon\undefined \gdef\putwordon{on}\fi 129*6a54128fSAndroid Build Coastguard Worker\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi 130*6a54128fSAndroid Build Coastguard Worker\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi 131*6a54128fSAndroid Build Coastguard Worker\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi 132*6a54128fSAndroid Build Coastguard Worker\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi 133*6a54128fSAndroid Build Coastguard Worker\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi 134*6a54128fSAndroid Build Coastguard Worker\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi 135*6a54128fSAndroid Build Coastguard Worker\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi 136*6a54128fSAndroid Build Coastguard Worker% 137*6a54128fSAndroid Build Coastguard Worker\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi 138*6a54128fSAndroid Build Coastguard Worker\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi 139*6a54128fSAndroid Build Coastguard Worker\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi 140*6a54128fSAndroid Build Coastguard Worker\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi 141*6a54128fSAndroid Build Coastguard Worker\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi 142*6a54128fSAndroid Build Coastguard Worker\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi 143*6a54128fSAndroid Build Coastguard Worker\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi 144*6a54128fSAndroid Build Coastguard Worker\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi 145*6a54128fSAndroid Build Coastguard Worker\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi 146*6a54128fSAndroid Build Coastguard Worker\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi 147*6a54128fSAndroid Build Coastguard Worker\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi 148*6a54128fSAndroid Build Coastguard Worker\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi 149*6a54128fSAndroid Build Coastguard Worker% 150*6a54128fSAndroid Build Coastguard Worker\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi 151*6a54128fSAndroid Build Coastguard Worker\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi 152*6a54128fSAndroid Build Coastguard Worker\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi 153*6a54128fSAndroid Build Coastguard Worker\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi 154*6a54128fSAndroid Build Coastguard Worker\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi 155*6a54128fSAndroid Build Coastguard Worker 156*6a54128fSAndroid Build Coastguard Worker% Since the category of space is not known, we have to be careful. 157*6a54128fSAndroid Build Coastguard Worker\chardef\spacecat = 10 158*6a54128fSAndroid Build Coastguard Worker\def\spaceisspace{\catcode`\ =\spacecat} 159*6a54128fSAndroid Build Coastguard Worker 160*6a54128fSAndroid Build Coastguard Worker% Ignore a token. 161*6a54128fSAndroid Build Coastguard Worker% 162*6a54128fSAndroid Build Coastguard Worker\def\gobble#1{} 163*6a54128fSAndroid Build Coastguard Worker 164*6a54128fSAndroid Build Coastguard Worker% The following is used inside several \edef's. 165*6a54128fSAndroid Build Coastguard Worker\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} 166*6a54128fSAndroid Build Coastguard Worker 167*6a54128fSAndroid Build Coastguard Worker% Hyphenation fixes. 168*6a54128fSAndroid Build Coastguard Worker\hyphenation{ 169*6a54128fSAndroid Build Coastguard Worker Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script 170*6a54128fSAndroid Build Coastguard Worker ap-pen-dix bit-map bit-maps 171*6a54128fSAndroid Build Coastguard Worker data-base data-bases eshell fall-ing half-way long-est man-u-script 172*6a54128fSAndroid Build Coastguard Worker man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm 173*6a54128fSAndroid Build Coastguard Worker par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces 174*6a54128fSAndroid Build Coastguard Worker spell-ing spell-ings 175*6a54128fSAndroid Build Coastguard Worker stand-alone strong-est time-stamp time-stamps which-ever white-space 176*6a54128fSAndroid Build Coastguard Worker wide-spread wrap-around 177*6a54128fSAndroid Build Coastguard Worker} 178*6a54128fSAndroid Build Coastguard Worker 179*6a54128fSAndroid Build Coastguard Worker% Margin to add to right of even pages, to left of odd pages. 180*6a54128fSAndroid Build Coastguard Worker\newdimen\bindingoffset 181*6a54128fSAndroid Build Coastguard Worker\newdimen\normaloffset 182*6a54128fSAndroid Build Coastguard Worker\newdimen\pagewidth \newdimen\pageheight 183*6a54128fSAndroid Build Coastguard Worker 184*6a54128fSAndroid Build Coastguard Worker% For a final copy, take out the rectangles 185*6a54128fSAndroid Build Coastguard Worker% that mark overfull boxes (in case you have decided 186*6a54128fSAndroid Build Coastguard Worker% that the text looks ok even though it passes the margin). 187*6a54128fSAndroid Build Coastguard Worker% 188*6a54128fSAndroid Build Coastguard Worker\def\finalout{\overfullrule=0pt} 189*6a54128fSAndroid Build Coastguard Worker 190*6a54128fSAndroid Build Coastguard Worker% @| inserts a changebar to the left of the current line. It should 191*6a54128fSAndroid Build Coastguard Worker% surround any changed text. This approach does *not* work if the 192*6a54128fSAndroid Build Coastguard Worker% change spans more than two lines of output. To handle that, we would 193*6a54128fSAndroid Build Coastguard Worker% have adopt a much more difficult approach (putting marks into the main 194*6a54128fSAndroid Build Coastguard Worker% vertical list for the beginning and end of each change). 195*6a54128fSAndroid Build Coastguard Worker% 196*6a54128fSAndroid Build Coastguard Worker\def\|{% 197*6a54128fSAndroid Build Coastguard Worker % \vadjust can only be used in horizontal mode. 198*6a54128fSAndroid Build Coastguard Worker \leavevmode 199*6a54128fSAndroid Build Coastguard Worker % 200*6a54128fSAndroid Build Coastguard Worker % Append this vertical mode material after the current line in the output. 201*6a54128fSAndroid Build Coastguard Worker \vadjust{% 202*6a54128fSAndroid Build Coastguard Worker % We want to insert a rule with the height and depth of the current 203*6a54128fSAndroid Build Coastguard Worker % leading; that is exactly what \strutbox is supposed to record. 204*6a54128fSAndroid Build Coastguard Worker \vskip-\baselineskip 205*6a54128fSAndroid Build Coastguard Worker % 206*6a54128fSAndroid Build Coastguard Worker % \vadjust-items are inserted at the left edge of the type. So 207*6a54128fSAndroid Build Coastguard Worker % the \llap here moves out into the left-hand margin. 208*6a54128fSAndroid Build Coastguard Worker \llap{% 209*6a54128fSAndroid Build Coastguard Worker % 210*6a54128fSAndroid Build Coastguard Worker % For a thicker or thinner bar, change the `1pt'. 211*6a54128fSAndroid Build Coastguard Worker \vrule height\baselineskip width1pt 212*6a54128fSAndroid Build Coastguard Worker % 213*6a54128fSAndroid Build Coastguard Worker % This is the space between the bar and the text. 214*6a54128fSAndroid Build Coastguard Worker \hskip 12pt 215*6a54128fSAndroid Build Coastguard Worker }% 216*6a54128fSAndroid Build Coastguard Worker }% 217*6a54128fSAndroid Build Coastguard Worker} 218*6a54128fSAndroid Build Coastguard Worker 219*6a54128fSAndroid Build Coastguard Worker% Sometimes it is convenient to have everything in the transcript file 220*6a54128fSAndroid Build Coastguard Worker% and nothing on the terminal. We don't just call \tracingall here, 221*6a54128fSAndroid Build Coastguard Worker% since that produces some useless output on the terminal. We also make 222*6a54128fSAndroid Build Coastguard Worker% some effort to order the tracing commands to reduce output in the log 223*6a54128fSAndroid Build Coastguard Worker% file; cf. trace.sty in LaTeX. 224*6a54128fSAndroid Build Coastguard Worker% 225*6a54128fSAndroid Build Coastguard Worker\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% 226*6a54128fSAndroid Build Coastguard Worker\def\loggingall{% 227*6a54128fSAndroid Build Coastguard Worker \tracingstats2 228*6a54128fSAndroid Build Coastguard Worker \tracingpages1 229*6a54128fSAndroid Build Coastguard Worker \tracinglostchars2 % 2 gives us more in etex 230*6a54128fSAndroid Build Coastguard Worker \tracingparagraphs1 231*6a54128fSAndroid Build Coastguard Worker \tracingoutput1 232*6a54128fSAndroid Build Coastguard Worker \tracingmacros2 233*6a54128fSAndroid Build Coastguard Worker \tracingrestores1 234*6a54128fSAndroid Build Coastguard Worker \showboxbreadth\maxdimen \showboxdepth\maxdimen 235*6a54128fSAndroid Build Coastguard Worker \ifx\eTeXversion\undefined\else % etex gives us more logging 236*6a54128fSAndroid Build Coastguard Worker \tracingscantokens1 237*6a54128fSAndroid Build Coastguard Worker \tracingifs1 238*6a54128fSAndroid Build Coastguard Worker \tracinggroups1 239*6a54128fSAndroid Build Coastguard Worker \tracingnesting2 240*6a54128fSAndroid Build Coastguard Worker \tracingassigns1 241*6a54128fSAndroid Build Coastguard Worker \fi 242*6a54128fSAndroid Build Coastguard Worker \tracingcommands3 % 3 gives us more in etex 243*6a54128fSAndroid Build Coastguard Worker \errorcontextlines16 244*6a54128fSAndroid Build Coastguard Worker}% 245*6a54128fSAndroid Build Coastguard Worker 246*6a54128fSAndroid Build Coastguard Worker% add check for \lastpenalty to plain's definitions. If the last thing 247*6a54128fSAndroid Build Coastguard Worker% we did was a \nobreak, we don't want to insert more space. 248*6a54128fSAndroid Build Coastguard Worker% 249*6a54128fSAndroid Build Coastguard Worker\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount 250*6a54128fSAndroid Build Coastguard Worker \removelastskip\penalty-50\smallskip\fi\fi} 251*6a54128fSAndroid Build Coastguard Worker\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount 252*6a54128fSAndroid Build Coastguard Worker \removelastskip\penalty-100\medskip\fi\fi} 253*6a54128fSAndroid Build Coastguard Worker\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount 254*6a54128fSAndroid Build Coastguard Worker \removelastskip\penalty-200\bigskip\fi\fi} 255*6a54128fSAndroid Build Coastguard Worker 256*6a54128fSAndroid Build Coastguard Worker% For @cropmarks command. 257*6a54128fSAndroid Build Coastguard Worker% Do @cropmarks to get crop marks. 258*6a54128fSAndroid Build Coastguard Worker% 259*6a54128fSAndroid Build Coastguard Worker\newif\ifcropmarks 260*6a54128fSAndroid Build Coastguard Worker\let\cropmarks = \cropmarkstrue 261*6a54128fSAndroid Build Coastguard Worker% 262*6a54128fSAndroid Build Coastguard Worker% Dimensions to add cropmarks at corners. 263*6a54128fSAndroid Build Coastguard Worker% Added by P. A. MacKay, 12 Nov. 1986 264*6a54128fSAndroid Build Coastguard Worker% 265*6a54128fSAndroid Build Coastguard Worker\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines 266*6a54128fSAndroid Build Coastguard Worker\newdimen\cornerlong \cornerlong=1pc 267*6a54128fSAndroid Build Coastguard Worker\newdimen\cornerthick \cornerthick=.3pt 268*6a54128fSAndroid Build Coastguard Worker\newdimen\topandbottommargin \topandbottommargin=.75in 269*6a54128fSAndroid Build Coastguard Worker 270*6a54128fSAndroid Build Coastguard Worker% Main output routine. 271*6a54128fSAndroid Build Coastguard Worker\chardef\PAGE = 255 272*6a54128fSAndroid Build Coastguard Worker\output = {\onepageout{\pagecontents\PAGE}} 273*6a54128fSAndroid Build Coastguard Worker 274*6a54128fSAndroid Build Coastguard Worker\newbox\headlinebox 275*6a54128fSAndroid Build Coastguard Worker\newbox\footlinebox 276*6a54128fSAndroid Build Coastguard Worker 277*6a54128fSAndroid Build Coastguard Worker% \onepageout takes a vbox as an argument. Note that \pagecontents 278*6a54128fSAndroid Build Coastguard Worker% does insertions, but you have to call it yourself. 279*6a54128fSAndroid Build Coastguard Worker\def\onepageout#1{% 280*6a54128fSAndroid Build Coastguard Worker \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi 281*6a54128fSAndroid Build Coastguard Worker % 282*6a54128fSAndroid Build Coastguard Worker \ifodd\pageno \advance\hoffset by \bindingoffset 283*6a54128fSAndroid Build Coastguard Worker \else \advance\hoffset by -\bindingoffset\fi 284*6a54128fSAndroid Build Coastguard Worker % 285*6a54128fSAndroid Build Coastguard Worker % Do this outside of the \shipout so @code etc. will be expanded in 286*6a54128fSAndroid Build Coastguard Worker % the headline as they should be, not taken literally (outputting ''code). 287*6a54128fSAndroid Build Coastguard Worker \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% 288*6a54128fSAndroid Build Coastguard Worker \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% 289*6a54128fSAndroid Build Coastguard Worker % 290*6a54128fSAndroid Build Coastguard Worker {% 291*6a54128fSAndroid Build Coastguard Worker % Have to do this stuff outside the \shipout because we want it to 292*6a54128fSAndroid Build Coastguard Worker % take effect in \write's, yet the group defined by the \vbox ends 293*6a54128fSAndroid Build Coastguard Worker % before the \shipout runs. 294*6a54128fSAndroid Build Coastguard Worker % 295*6a54128fSAndroid Build Coastguard Worker \indexdummies % don't expand commands in the output. 296*6a54128fSAndroid Build Coastguard Worker \normalturnoffactive % \ in index entries must not stay \, e.g., if 297*6a54128fSAndroid Build Coastguard Worker % the page break happens to be in the middle of an example. 298*6a54128fSAndroid Build Coastguard Worker % We don't want .vr (or whatever) entries like this: 299*6a54128fSAndroid Build Coastguard Worker % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} 300*6a54128fSAndroid Build Coastguard Worker % "\acronym" won't work when it's read back in; 301*6a54128fSAndroid Build Coastguard Worker % it needs to be 302*6a54128fSAndroid Build Coastguard Worker % {\code {{\tt \backslashcurfont }acronym} 303*6a54128fSAndroid Build Coastguard Worker \shipout\vbox{% 304*6a54128fSAndroid Build Coastguard Worker % Do this early so pdf references go to the beginning of the page. 305*6a54128fSAndroid Build Coastguard Worker \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi 306*6a54128fSAndroid Build Coastguard Worker % 307*6a54128fSAndroid Build Coastguard Worker \ifcropmarks \vbox to \outervsize\bgroup 308*6a54128fSAndroid Build Coastguard Worker \hsize = \outerhsize 309*6a54128fSAndroid Build Coastguard Worker \vskip-\topandbottommargin 310*6a54128fSAndroid Build Coastguard Worker \vtop to0pt{% 311*6a54128fSAndroid Build Coastguard Worker \line{\ewtop\hfil\ewtop}% 312*6a54128fSAndroid Build Coastguard Worker \nointerlineskip 313*6a54128fSAndroid Build Coastguard Worker \line{% 314*6a54128fSAndroid Build Coastguard Worker \vbox{\moveleft\cornerthick\nstop}% 315*6a54128fSAndroid Build Coastguard Worker \hfill 316*6a54128fSAndroid Build Coastguard Worker \vbox{\moveright\cornerthick\nstop}% 317*6a54128fSAndroid Build Coastguard Worker }% 318*6a54128fSAndroid Build Coastguard Worker \vss}% 319*6a54128fSAndroid Build Coastguard Worker \vskip\topandbottommargin 320*6a54128fSAndroid Build Coastguard Worker \line\bgroup 321*6a54128fSAndroid Build Coastguard Worker \hfil % center the page within the outer (page) hsize. 322*6a54128fSAndroid Build Coastguard Worker \ifodd\pageno\hskip\bindingoffset\fi 323*6a54128fSAndroid Build Coastguard Worker \vbox\bgroup 324*6a54128fSAndroid Build Coastguard Worker \fi 325*6a54128fSAndroid Build Coastguard Worker % 326*6a54128fSAndroid Build Coastguard Worker \unvbox\headlinebox 327*6a54128fSAndroid Build Coastguard Worker \pagebody{#1}% 328*6a54128fSAndroid Build Coastguard Worker \ifdim\ht\footlinebox > 0pt 329*6a54128fSAndroid Build Coastguard Worker % Only leave this space if the footline is nonempty. 330*6a54128fSAndroid Build Coastguard Worker % (We lessened \vsize for it in \oddfootingxxx.) 331*6a54128fSAndroid Build Coastguard Worker % The \baselineskip=24pt in plain's \makefootline has no effect. 332*6a54128fSAndroid Build Coastguard Worker \vskip 2\baselineskip 333*6a54128fSAndroid Build Coastguard Worker \unvbox\footlinebox 334*6a54128fSAndroid Build Coastguard Worker \fi 335*6a54128fSAndroid Build Coastguard Worker % 336*6a54128fSAndroid Build Coastguard Worker \ifcropmarks 337*6a54128fSAndroid Build Coastguard Worker \egroup % end of \vbox\bgroup 338*6a54128fSAndroid Build Coastguard Worker \hfil\egroup % end of (centering) \line\bgroup 339*6a54128fSAndroid Build Coastguard Worker \vskip\topandbottommargin plus1fill minus1fill 340*6a54128fSAndroid Build Coastguard Worker \boxmaxdepth = \cornerthick 341*6a54128fSAndroid Build Coastguard Worker \vbox to0pt{\vss 342*6a54128fSAndroid Build Coastguard Worker \line{% 343*6a54128fSAndroid Build Coastguard Worker \vbox{\moveleft\cornerthick\nsbot}% 344*6a54128fSAndroid Build Coastguard Worker \hfill 345*6a54128fSAndroid Build Coastguard Worker \vbox{\moveright\cornerthick\nsbot}% 346*6a54128fSAndroid Build Coastguard Worker }% 347*6a54128fSAndroid Build Coastguard Worker \nointerlineskip 348*6a54128fSAndroid Build Coastguard Worker \line{\ewbot\hfil\ewbot}% 349*6a54128fSAndroid Build Coastguard Worker }% 350*6a54128fSAndroid Build Coastguard Worker \egroup % \vbox from first cropmarks clause 351*6a54128fSAndroid Build Coastguard Worker \fi 352*6a54128fSAndroid Build Coastguard Worker }% end of \shipout\vbox 353*6a54128fSAndroid Build Coastguard Worker }% end of group with \indexdummies 354*6a54128fSAndroid Build Coastguard Worker \advancepageno 355*6a54128fSAndroid Build Coastguard Worker \ifnum\outputpenalty>-20000 \else\dosupereject\fi 356*6a54128fSAndroid Build Coastguard Worker} 357*6a54128fSAndroid Build Coastguard Worker 358*6a54128fSAndroid Build Coastguard Worker\newinsert\margin \dimen\margin=\maxdimen 359*6a54128fSAndroid Build Coastguard Worker 360*6a54128fSAndroid Build Coastguard Worker\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} 361*6a54128fSAndroid Build Coastguard Worker{\catcode`\@ =11 362*6a54128fSAndroid Build Coastguard Worker\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi 363*6a54128fSAndroid Build Coastguard Worker% marginal hacks, [email protected] (Juha Takala) 364*6a54128fSAndroid Build Coastguard Worker\ifvoid\margin\else % marginal info is present 365*6a54128fSAndroid Build Coastguard Worker \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi 366*6a54128fSAndroid Build Coastguard Worker\dimen@=\dp#1 \unvbox#1 367*6a54128fSAndroid Build Coastguard Worker\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi 368*6a54128fSAndroid Build Coastguard Worker\ifr@ggedbottom \kern-\dimen@ \vfil \fi} 369*6a54128fSAndroid Build Coastguard Worker} 370*6a54128fSAndroid Build Coastguard Worker 371*6a54128fSAndroid Build Coastguard Worker% Here are the rules for the cropmarks. Note that they are 372*6a54128fSAndroid Build Coastguard Worker% offset so that the space between them is truly \outerhsize or \outervsize 373*6a54128fSAndroid Build Coastguard Worker% (P. A. MacKay, 12 November, 1986) 374*6a54128fSAndroid Build Coastguard Worker% 375*6a54128fSAndroid Build Coastguard Worker\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} 376*6a54128fSAndroid Build Coastguard Worker\def\nstop{\vbox 377*6a54128fSAndroid Build Coastguard Worker {\hrule height\cornerthick depth\cornerlong width\cornerthick}} 378*6a54128fSAndroid Build Coastguard Worker\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} 379*6a54128fSAndroid Build Coastguard Worker\def\nsbot{\vbox 380*6a54128fSAndroid Build Coastguard Worker {\hrule height\cornerlong depth\cornerthick width\cornerthick}} 381*6a54128fSAndroid Build Coastguard Worker 382*6a54128fSAndroid Build Coastguard Worker% Parse an argument, then pass it to #1. The argument is the rest of 383*6a54128fSAndroid Build Coastguard Worker% the input line (except we remove a trailing comment). #1 should be a 384*6a54128fSAndroid Build Coastguard Worker% macro which expects an ordinary undelimited TeX argument. 385*6a54128fSAndroid Build Coastguard Worker% 386*6a54128fSAndroid Build Coastguard Worker\def\parsearg{\parseargusing{}} 387*6a54128fSAndroid Build Coastguard Worker\def\parseargusing#1#2{% 388*6a54128fSAndroid Build Coastguard Worker \def\next{#2}% 389*6a54128fSAndroid Build Coastguard Worker \begingroup 390*6a54128fSAndroid Build Coastguard Worker \obeylines 391*6a54128fSAndroid Build Coastguard Worker \spaceisspace 392*6a54128fSAndroid Build Coastguard Worker #1% 393*6a54128fSAndroid Build Coastguard Worker \parseargline\empty% Insert the \empty token, see \finishparsearg below. 394*6a54128fSAndroid Build Coastguard Worker} 395*6a54128fSAndroid Build Coastguard Worker 396*6a54128fSAndroid Build Coastguard Worker{\obeylines % 397*6a54128fSAndroid Build Coastguard Worker \gdef\parseargline#1^^M{% 398*6a54128fSAndroid Build Coastguard Worker \endgroup % End of the group started in \parsearg. 399*6a54128fSAndroid Build Coastguard Worker \argremovecomment #1\comment\ArgTerm% 400*6a54128fSAndroid Build Coastguard Worker }% 401*6a54128fSAndroid Build Coastguard Worker} 402*6a54128fSAndroid Build Coastguard Worker 403*6a54128fSAndroid Build Coastguard Worker% First remove any @comment, then any @c comment. 404*6a54128fSAndroid Build Coastguard Worker\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} 405*6a54128fSAndroid Build Coastguard Worker\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} 406*6a54128fSAndroid Build Coastguard Worker 407*6a54128fSAndroid Build Coastguard Worker% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space. 408*6a54128fSAndroid Build Coastguard Worker% 409*6a54128fSAndroid Build Coastguard Worker% \argremovec might leave us with trailing space, e.g., 410*6a54128fSAndroid Build Coastguard Worker% @end itemize @c foo 411*6a54128fSAndroid Build Coastguard Worker% This space token undergoes the same procedure and is eventually removed 412*6a54128fSAndroid Build Coastguard Worker% by \finishparsearg. 413*6a54128fSAndroid Build Coastguard Worker% 414*6a54128fSAndroid Build Coastguard Worker\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} 415*6a54128fSAndroid Build Coastguard Worker\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} 416*6a54128fSAndroid Build Coastguard Worker\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% 417*6a54128fSAndroid Build Coastguard Worker \def\temp{#3}% 418*6a54128fSAndroid Build Coastguard Worker \ifx\temp\empty 419*6a54128fSAndroid Build Coastguard Worker % We cannot use \next here, as it holds the macro to run; 420*6a54128fSAndroid Build Coastguard Worker % thus we reuse \temp. 421*6a54128fSAndroid Build Coastguard Worker \let\temp\finishparsearg 422*6a54128fSAndroid Build Coastguard Worker \else 423*6a54128fSAndroid Build Coastguard Worker \let\temp\argcheckspaces 424*6a54128fSAndroid Build Coastguard Worker \fi 425*6a54128fSAndroid Build Coastguard Worker % Put the space token in: 426*6a54128fSAndroid Build Coastguard Worker \temp#1 #3\ArgTerm 427*6a54128fSAndroid Build Coastguard Worker} 428*6a54128fSAndroid Build Coastguard Worker 429*6a54128fSAndroid Build Coastguard Worker% If a _delimited_ argument is enclosed in braces, they get stripped; so 430*6a54128fSAndroid Build Coastguard Worker% to get _exactly_ the rest of the line, we had to prevent such situation. 431*6a54128fSAndroid Build Coastguard Worker% We prepended an \empty token at the very beginning and we expand it now, 432*6a54128fSAndroid Build Coastguard Worker% just before passing the control to \next. 433*6a54128fSAndroid Build Coastguard Worker% (Similarly, we have to think about #3 of \argcheckspacesY above: it is 434*6a54128fSAndroid Build Coastguard Worker% either the null string, or it ends with \^^M---thus there is no danger 435*6a54128fSAndroid Build Coastguard Worker% that a pair of braces would be stripped. 436*6a54128fSAndroid Build Coastguard Worker% 437*6a54128fSAndroid Build Coastguard Worker% But first, we have to remove the trailing space token. 438*6a54128fSAndroid Build Coastguard Worker% 439*6a54128fSAndroid Build Coastguard Worker\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}} 440*6a54128fSAndroid Build Coastguard Worker 441*6a54128fSAndroid Build Coastguard Worker% \parseargdef\foo{...} 442*6a54128fSAndroid Build Coastguard Worker% is roughly equivalent to 443*6a54128fSAndroid Build Coastguard Worker% \def\foo{\parsearg\Xfoo} 444*6a54128fSAndroid Build Coastguard Worker% \def\Xfoo#1{...} 445*6a54128fSAndroid Build Coastguard Worker% 446*6a54128fSAndroid Build Coastguard Worker% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my 447*6a54128fSAndroid Build Coastguard Worker% favourite TeX trick. --kasal, 16nov03 448*6a54128fSAndroid Build Coastguard Worker 449*6a54128fSAndroid Build Coastguard Worker\def\parseargdef#1{% 450*6a54128fSAndroid Build Coastguard Worker \expandafter \doparseargdef \csname\string#1\endcsname #1% 451*6a54128fSAndroid Build Coastguard Worker} 452*6a54128fSAndroid Build Coastguard Worker\def\doparseargdef#1#2{% 453*6a54128fSAndroid Build Coastguard Worker \def#2{\parsearg#1}% 454*6a54128fSAndroid Build Coastguard Worker \def#1##1% 455*6a54128fSAndroid Build Coastguard Worker} 456*6a54128fSAndroid Build Coastguard Worker 457*6a54128fSAndroid Build Coastguard Worker% Several utility definitions with active space: 458*6a54128fSAndroid Build Coastguard Worker{ 459*6a54128fSAndroid Build Coastguard Worker \obeyspaces 460*6a54128fSAndroid Build Coastguard Worker \gdef\obeyedspace{ } 461*6a54128fSAndroid Build Coastguard Worker 462*6a54128fSAndroid Build Coastguard Worker % Make each space character in the input produce a normal interword 463*6a54128fSAndroid Build Coastguard Worker % space in the output. Don't allow a line break at this space, as this 464*6a54128fSAndroid Build Coastguard Worker % is used only in environments like @example, where each line of input 465*6a54128fSAndroid Build Coastguard Worker % should produce a line of output anyway. 466*6a54128fSAndroid Build Coastguard Worker % 467*6a54128fSAndroid Build Coastguard Worker \gdef\sepspaces{\obeyspaces\let =\tie} 468*6a54128fSAndroid Build Coastguard Worker 469*6a54128fSAndroid Build Coastguard Worker % If an index command is used in an @example environment, any spaces 470*6a54128fSAndroid Build Coastguard Worker % therein should become regular spaces in the raw index file, not the 471*6a54128fSAndroid Build Coastguard Worker % expansion of \tie (\leavevmode \penalty \@M \ ). 472*6a54128fSAndroid Build Coastguard Worker \gdef\unsepspaces{\let =\space} 473*6a54128fSAndroid Build Coastguard Worker} 474*6a54128fSAndroid Build Coastguard Worker 475*6a54128fSAndroid Build Coastguard Worker 476*6a54128fSAndroid Build Coastguard Worker\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} 477*6a54128fSAndroid Build Coastguard Worker 478*6a54128fSAndroid Build Coastguard Worker% Define the framework for environments in texinfo.tex. It's used like this: 479*6a54128fSAndroid Build Coastguard Worker% 480*6a54128fSAndroid Build Coastguard Worker% \envdef\foo{...} 481*6a54128fSAndroid Build Coastguard Worker% \def\Efoo{...} 482*6a54128fSAndroid Build Coastguard Worker% 483*6a54128fSAndroid Build Coastguard Worker% It's the responsibility of \envdef to insert \begingroup before the 484*6a54128fSAndroid Build Coastguard Worker% actual body; @end closes the group after calling \Efoo. \envdef also 485*6a54128fSAndroid Build Coastguard Worker% defines \thisenv, so the current environment is known; @end checks 486*6a54128fSAndroid Build Coastguard Worker% whether the environment name matches. The \checkenv macro can also be 487*6a54128fSAndroid Build Coastguard Worker% used to check whether the current environment is the one expected. 488*6a54128fSAndroid Build Coastguard Worker% 489*6a54128fSAndroid Build Coastguard Worker% Non-false conditionals (@iftex, @ifset) don't fit into this, so they 490*6a54128fSAndroid Build Coastguard Worker% are not treated as environments; they don't open a group. (The 491*6a54128fSAndroid Build Coastguard Worker% implementation of @end takes care not to call \endgroup in this 492*6a54128fSAndroid Build Coastguard Worker% special case.) 493*6a54128fSAndroid Build Coastguard Worker 494*6a54128fSAndroid Build Coastguard Worker 495*6a54128fSAndroid Build Coastguard Worker% At runtime, environments start with this: 496*6a54128fSAndroid Build Coastguard Worker\def\startenvironment#1{\begingroup\def\thisenv{#1}} 497*6a54128fSAndroid Build Coastguard Worker% initialize 498*6a54128fSAndroid Build Coastguard Worker\let\thisenv\empty 499*6a54128fSAndroid Build Coastguard Worker 500*6a54128fSAndroid Build Coastguard Worker% ... but they get defined via ``\envdef\foo{...}'': 501*6a54128fSAndroid Build Coastguard Worker\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} 502*6a54128fSAndroid Build Coastguard Worker\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} 503*6a54128fSAndroid Build Coastguard Worker 504*6a54128fSAndroid Build Coastguard Worker% Check whether we're in the right environment: 505*6a54128fSAndroid Build Coastguard Worker\def\checkenv#1{% 506*6a54128fSAndroid Build Coastguard Worker \def\temp{#1}% 507*6a54128fSAndroid Build Coastguard Worker \ifx\thisenv\temp 508*6a54128fSAndroid Build Coastguard Worker \else 509*6a54128fSAndroid Build Coastguard Worker \badenverr 510*6a54128fSAndroid Build Coastguard Worker \fi 511*6a54128fSAndroid Build Coastguard Worker} 512*6a54128fSAndroid Build Coastguard Worker 513*6a54128fSAndroid Build Coastguard Worker% Environment mismatch, #1 expected: 514*6a54128fSAndroid Build Coastguard Worker\def\badenverr{% 515*6a54128fSAndroid Build Coastguard Worker \errhelp = \EMsimple 516*6a54128fSAndroid Build Coastguard Worker \errmessage{This command can appear only \inenvironment\temp, 517*6a54128fSAndroid Build Coastguard Worker not \inenvironment\thisenv}% 518*6a54128fSAndroid Build Coastguard Worker} 519*6a54128fSAndroid Build Coastguard Worker\def\inenvironment#1{% 520*6a54128fSAndroid Build Coastguard Worker \ifx#1\empty 521*6a54128fSAndroid Build Coastguard Worker out of any environment% 522*6a54128fSAndroid Build Coastguard Worker \else 523*6a54128fSAndroid Build Coastguard Worker in environment \expandafter\string#1% 524*6a54128fSAndroid Build Coastguard Worker \fi 525*6a54128fSAndroid Build Coastguard Worker} 526*6a54128fSAndroid Build Coastguard Worker 527*6a54128fSAndroid Build Coastguard Worker% @end foo executes the definition of \Efoo. 528*6a54128fSAndroid Build Coastguard Worker% But first, it executes a specialized version of \checkenv 529*6a54128fSAndroid Build Coastguard Worker% 530*6a54128fSAndroid Build Coastguard Worker\parseargdef\end{% 531*6a54128fSAndroid Build Coastguard Worker \if 1\csname iscond.#1\endcsname 532*6a54128fSAndroid Build Coastguard Worker \else 533*6a54128fSAndroid Build Coastguard Worker % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 534*6a54128fSAndroid Build Coastguard Worker \expandafter\checkenv\csname#1\endcsname 535*6a54128fSAndroid Build Coastguard Worker \csname E#1\endcsname 536*6a54128fSAndroid Build Coastguard Worker \endgroup 537*6a54128fSAndroid Build Coastguard Worker \fi 538*6a54128fSAndroid Build Coastguard Worker} 539*6a54128fSAndroid Build Coastguard Worker 540*6a54128fSAndroid Build Coastguard Worker\newhelp\EMsimple{Press RETURN to continue.} 541*6a54128fSAndroid Build Coastguard Worker 542*6a54128fSAndroid Build Coastguard Worker 543*6a54128fSAndroid Build Coastguard Worker%% Simple single-character @ commands 544*6a54128fSAndroid Build Coastguard Worker 545*6a54128fSAndroid Build Coastguard Worker% @@ prints an @ 546*6a54128fSAndroid Build Coastguard Worker% Kludge this until the fonts are right (grr). 547*6a54128fSAndroid Build Coastguard Worker\def\@{{\tt\char64}} 548*6a54128fSAndroid Build Coastguard Worker 549*6a54128fSAndroid Build Coastguard Worker% This is turned off because it was never documented 550*6a54128fSAndroid Build Coastguard Worker% and you can use @w{...} around a quote to suppress ligatures. 551*6a54128fSAndroid Build Coastguard Worker%% Define @` and @' to be the same as ` and ' 552*6a54128fSAndroid Build Coastguard Worker%% but suppressing ligatures. 553*6a54128fSAndroid Build Coastguard Worker%\def\`{{`}} 554*6a54128fSAndroid Build Coastguard Worker%\def\'{{'}} 555*6a54128fSAndroid Build Coastguard Worker 556*6a54128fSAndroid Build Coastguard Worker% Used to generate quoted braces. 557*6a54128fSAndroid Build Coastguard Worker\def\mylbrace {{\tt\char123}} 558*6a54128fSAndroid Build Coastguard Worker\def\myrbrace {{\tt\char125}} 559*6a54128fSAndroid Build Coastguard Worker\let\{=\mylbrace 560*6a54128fSAndroid Build Coastguard Worker\let\}=\myrbrace 561*6a54128fSAndroid Build Coastguard Worker\begingroup 562*6a54128fSAndroid Build Coastguard Worker % Definitions to produce \{ and \} commands for indices, 563*6a54128fSAndroid Build Coastguard Worker % and @{ and @} for the aux/toc files. 564*6a54128fSAndroid Build Coastguard Worker \catcode`\{ = \other \catcode`\} = \other 565*6a54128fSAndroid Build Coastguard Worker \catcode`\[ = 1 \catcode`\] = 2 566*6a54128fSAndroid Build Coastguard Worker \catcode`\! = 0 \catcode`\\ = \other 567*6a54128fSAndroid Build Coastguard Worker !gdef!lbracecmd[\{]% 568*6a54128fSAndroid Build Coastguard Worker !gdef!rbracecmd[\}]% 569*6a54128fSAndroid Build Coastguard Worker !gdef!lbraceatcmd[@{]% 570*6a54128fSAndroid Build Coastguard Worker !gdef!rbraceatcmd[@}]% 571*6a54128fSAndroid Build Coastguard Worker!endgroup 572*6a54128fSAndroid Build Coastguard Worker 573*6a54128fSAndroid Build Coastguard Worker% @comma{} to avoid , parsing problems. 574*6a54128fSAndroid Build Coastguard Worker\let\comma = , 575*6a54128fSAndroid Build Coastguard Worker 576*6a54128fSAndroid Build Coastguard Worker% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent 577*6a54128fSAndroid Build Coastguard Worker% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. 578*6a54128fSAndroid Build Coastguard Worker\let\, = \c 579*6a54128fSAndroid Build Coastguard Worker\let\dotaccent = \. 580*6a54128fSAndroid Build Coastguard Worker\def\ringaccent#1{{\accent23 #1}} 581*6a54128fSAndroid Build Coastguard Worker\let\tieaccent = \t 582*6a54128fSAndroid Build Coastguard Worker\let\ubaraccent = \b 583*6a54128fSAndroid Build Coastguard Worker\let\udotaccent = \d 584*6a54128fSAndroid Build Coastguard Worker 585*6a54128fSAndroid Build Coastguard Worker% Other special characters: @questiondown @exclamdown @ordf @ordm 586*6a54128fSAndroid Build Coastguard Worker% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. 587*6a54128fSAndroid Build Coastguard Worker\def\questiondown{?`} 588*6a54128fSAndroid Build Coastguard Worker\def\exclamdown{!`} 589*6a54128fSAndroid Build Coastguard Worker\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} 590*6a54128fSAndroid Build Coastguard Worker\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} 591*6a54128fSAndroid Build Coastguard Worker 592*6a54128fSAndroid Build Coastguard Worker% Dotless i and dotless j, used for accents. 593*6a54128fSAndroid Build Coastguard Worker\def\imacro{i} 594*6a54128fSAndroid Build Coastguard Worker\def\jmacro{j} 595*6a54128fSAndroid Build Coastguard Worker\def\dotless#1{% 596*6a54128fSAndroid Build Coastguard Worker \def\temp{#1}% 597*6a54128fSAndroid Build Coastguard Worker \ifx\temp\imacro \ptexi 598*6a54128fSAndroid Build Coastguard Worker \else\ifx\temp\jmacro \j 599*6a54128fSAndroid Build Coastguard Worker \else \errmessage{@dotless can be used only with i or j}% 600*6a54128fSAndroid Build Coastguard Worker \fi\fi 601*6a54128fSAndroid Build Coastguard Worker} 602*6a54128fSAndroid Build Coastguard Worker 603*6a54128fSAndroid Build Coastguard Worker% The \TeX{} logo, as in plain, but resetting the spacing so that a 604*6a54128fSAndroid Build Coastguard Worker% period following counts as ending a sentence. (Idea found in latex.) 605*6a54128fSAndroid Build Coastguard Worker% 606*6a54128fSAndroid Build Coastguard Worker\edef\TeX{\TeX \spacefactor=1000 } 607*6a54128fSAndroid Build Coastguard Worker 608*6a54128fSAndroid Build Coastguard Worker% @LaTeX{} logo. Not quite the same results as the definition in 609*6a54128fSAndroid Build Coastguard Worker% latex.ltx, since we use a different font for the raised A; it's most 610*6a54128fSAndroid Build Coastguard Worker% convenient for us to use an explicitly smaller font, rather than using 611*6a54128fSAndroid Build Coastguard Worker% the \scriptstyle font (since we don't reset \scriptstyle and 612*6a54128fSAndroid Build Coastguard Worker% \scriptscriptstyle). 613*6a54128fSAndroid Build Coastguard Worker% 614*6a54128fSAndroid Build Coastguard Worker\def\LaTeX{% 615*6a54128fSAndroid Build Coastguard Worker L\kern-.36em 616*6a54128fSAndroid Build Coastguard Worker {\setbox0=\hbox{T}% 617*6a54128fSAndroid Build Coastguard Worker \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% 618*6a54128fSAndroid Build Coastguard Worker \kern-.15em 619*6a54128fSAndroid Build Coastguard Worker \TeX 620*6a54128fSAndroid Build Coastguard Worker} 621*6a54128fSAndroid Build Coastguard Worker 622*6a54128fSAndroid Build Coastguard Worker% Be sure we're in horizontal mode when doing a tie, since we make space 623*6a54128fSAndroid Build Coastguard Worker% equivalent to this in @example-like environments. Otherwise, a space 624*6a54128fSAndroid Build Coastguard Worker% at the beginning of a line will start with \penalty -- and 625*6a54128fSAndroid Build Coastguard Worker% since \penalty is valid in vertical mode, we'd end up putting the 626*6a54128fSAndroid Build Coastguard Worker% penalty on the vertical list instead of in the new paragraph. 627*6a54128fSAndroid Build Coastguard Worker{\catcode`@ = 11 628*6a54128fSAndroid Build Coastguard Worker % Avoid using \@M directly, because that causes trouble 629*6a54128fSAndroid Build Coastguard Worker % if the definition is written into an index file. 630*6a54128fSAndroid Build Coastguard Worker \global\let\tiepenalty = \@M 631*6a54128fSAndroid Build Coastguard Worker \gdef\tie{\leavevmode\penalty\tiepenalty\ } 632*6a54128fSAndroid Build Coastguard Worker} 633*6a54128fSAndroid Build Coastguard Worker 634*6a54128fSAndroid Build Coastguard Worker% @: forces normal size whitespace following. 635*6a54128fSAndroid Build Coastguard Worker\def\:{\spacefactor=1000 } 636*6a54128fSAndroid Build Coastguard Worker 637*6a54128fSAndroid Build Coastguard Worker% @* forces a line break. 638*6a54128fSAndroid Build Coastguard Worker\def\*{\hfil\break\hbox{}\ignorespaces} 639*6a54128fSAndroid Build Coastguard Worker 640*6a54128fSAndroid Build Coastguard Worker% @/ allows a line break. 641*6a54128fSAndroid Build Coastguard Worker\let\/=\allowbreak 642*6a54128fSAndroid Build Coastguard Worker 643*6a54128fSAndroid Build Coastguard Worker% @. is an end-of-sentence period. 644*6a54128fSAndroid Build Coastguard Worker\def\.{.\spacefactor=\endofsentencespacefactor\space} 645*6a54128fSAndroid Build Coastguard Worker 646*6a54128fSAndroid Build Coastguard Worker% @! is an end-of-sentence bang. 647*6a54128fSAndroid Build Coastguard Worker\def\!{!\spacefactor=\endofsentencespacefactor\space} 648*6a54128fSAndroid Build Coastguard Worker 649*6a54128fSAndroid Build Coastguard Worker% @? is an end-of-sentence query. 650*6a54128fSAndroid Build Coastguard Worker\def\?{?\spacefactor=\endofsentencespacefactor\space} 651*6a54128fSAndroid Build Coastguard Worker 652*6a54128fSAndroid Build Coastguard Worker% @frenchspacing on|off says whether to put extra space after punctuation. 653*6a54128fSAndroid Build Coastguard Worker% 654*6a54128fSAndroid Build Coastguard Worker\def\onword{on} 655*6a54128fSAndroid Build Coastguard Worker\def\offword{off} 656*6a54128fSAndroid Build Coastguard Worker% 657*6a54128fSAndroid Build Coastguard Worker\parseargdef\frenchspacing{% 658*6a54128fSAndroid Build Coastguard Worker \def\temp{#1}% 659*6a54128fSAndroid Build Coastguard Worker \ifx\temp\onword \plainfrenchspacing 660*6a54128fSAndroid Build Coastguard Worker \else\ifx\temp\offword \plainnonfrenchspacing 661*6a54128fSAndroid Build Coastguard Worker \else 662*6a54128fSAndroid Build Coastguard Worker \errhelp = \EMsimple 663*6a54128fSAndroid Build Coastguard Worker \errmessage{Unknown @frenchspacing option `\temp', must be on/off}% 664*6a54128fSAndroid Build Coastguard Worker \fi\fi 665*6a54128fSAndroid Build Coastguard Worker} 666*6a54128fSAndroid Build Coastguard Worker 667*6a54128fSAndroid Build Coastguard Worker% @w prevents a word break. Without the \leavevmode, @w at the 668*6a54128fSAndroid Build Coastguard Worker% beginning of a paragraph, when TeX is still in vertical mode, would 669*6a54128fSAndroid Build Coastguard Worker% produce a whole line of output instead of starting the paragraph. 670*6a54128fSAndroid Build Coastguard Worker\def\w#1{\leavevmode\hbox{#1}} 671*6a54128fSAndroid Build Coastguard Worker 672*6a54128fSAndroid Build Coastguard Worker% @group ... @end group forces ... to be all on one page, by enclosing 673*6a54128fSAndroid Build Coastguard Worker% it in a TeX vbox. We use \vtop instead of \vbox to construct the box 674*6a54128fSAndroid Build Coastguard Worker% to keep its height that of a normal line. According to the rules for 675*6a54128fSAndroid Build Coastguard Worker% \topskip (p.114 of the TeXbook), the glue inserted is 676*6a54128fSAndroid Build Coastguard Worker% max (\topskip - \ht (first item), 0). If that height is large, 677*6a54128fSAndroid Build Coastguard Worker% therefore, no glue is inserted, and the space between the headline and 678*6a54128fSAndroid Build Coastguard Worker% the text is small, which looks bad. 679*6a54128fSAndroid Build Coastguard Worker% 680*6a54128fSAndroid Build Coastguard Worker% Another complication is that the group might be very large. This can 681*6a54128fSAndroid Build Coastguard Worker% cause the glue on the previous page to be unduly stretched, because it 682*6a54128fSAndroid Build Coastguard Worker% does not have much material. In this case, it's better to add an 683*6a54128fSAndroid Build Coastguard Worker% explicit \vfill so that the extra space is at the bottom. The 684*6a54128fSAndroid Build Coastguard Worker% threshold for doing this is if the group is more than \vfilllimit 685*6a54128fSAndroid Build Coastguard Worker% percent of a page (\vfilllimit can be changed inside of @tex). 686*6a54128fSAndroid Build Coastguard Worker% 687*6a54128fSAndroid Build Coastguard Worker\newbox\groupbox 688*6a54128fSAndroid Build Coastguard Worker\def\vfilllimit{0.7} 689*6a54128fSAndroid Build Coastguard Worker% 690*6a54128fSAndroid Build Coastguard Worker\envdef\group{% 691*6a54128fSAndroid Build Coastguard Worker \ifnum\catcode`\^^M=\active \else 692*6a54128fSAndroid Build Coastguard Worker \errhelp = \groupinvalidhelp 693*6a54128fSAndroid Build Coastguard Worker \errmessage{@group invalid in context where filling is enabled}% 694*6a54128fSAndroid Build Coastguard Worker \fi 695*6a54128fSAndroid Build Coastguard Worker \startsavinginserts 696*6a54128fSAndroid Build Coastguard Worker % 697*6a54128fSAndroid Build Coastguard Worker \setbox\groupbox = \vtop\bgroup 698*6a54128fSAndroid Build Coastguard Worker % Do @comment since we are called inside an environment such as 699*6a54128fSAndroid Build Coastguard Worker % @example, where each end-of-line in the input causes an 700*6a54128fSAndroid Build Coastguard Worker % end-of-line in the output. We don't want the end-of-line after 701*6a54128fSAndroid Build Coastguard Worker % the `@group' to put extra space in the output. Since @group 702*6a54128fSAndroid Build Coastguard Worker % should appear on a line by itself (according to the Texinfo 703*6a54128fSAndroid Build Coastguard Worker % manual), we don't worry about eating any user text. 704*6a54128fSAndroid Build Coastguard Worker \comment 705*6a54128fSAndroid Build Coastguard Worker} 706*6a54128fSAndroid Build Coastguard Worker% 707*6a54128fSAndroid Build Coastguard Worker% The \vtop produces a box with normal height and large depth; thus, TeX puts 708*6a54128fSAndroid Build Coastguard Worker% \baselineskip glue before it, and (when the next line of text is done) 709*6a54128fSAndroid Build Coastguard Worker% \lineskip glue after it. Thus, space below is not quite equal to space 710*6a54128fSAndroid Build Coastguard Worker% above. But it's pretty close. 711*6a54128fSAndroid Build Coastguard Worker\def\Egroup{% 712*6a54128fSAndroid Build Coastguard Worker % To get correct interline space between the last line of the group 713*6a54128fSAndroid Build Coastguard Worker % and the first line afterwards, we have to propagate \prevdepth. 714*6a54128fSAndroid Build Coastguard Worker \endgraf % Not \par, as it may have been set to \lisppar. 715*6a54128fSAndroid Build Coastguard Worker \global\dimen1 = \prevdepth 716*6a54128fSAndroid Build Coastguard Worker \egroup % End the \vtop. 717*6a54128fSAndroid Build Coastguard Worker % \dimen0 is the vertical size of the group's box. 718*6a54128fSAndroid Build Coastguard Worker \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox 719*6a54128fSAndroid Build Coastguard Worker % \dimen2 is how much space is left on the page (more or less). 720*6a54128fSAndroid Build Coastguard Worker \dimen2 = \pageheight \advance\dimen2 by -\pagetotal 721*6a54128fSAndroid Build Coastguard Worker % if the group doesn't fit on the current page, and it's a big big 722*6a54128fSAndroid Build Coastguard Worker % group, force a page break. 723*6a54128fSAndroid Build Coastguard Worker \ifdim \dimen0 > \dimen2 724*6a54128fSAndroid Build Coastguard Worker \ifdim \pagetotal < \vfilllimit\pageheight 725*6a54128fSAndroid Build Coastguard Worker \page 726*6a54128fSAndroid Build Coastguard Worker \fi 727*6a54128fSAndroid Build Coastguard Worker \fi 728*6a54128fSAndroid Build Coastguard Worker \box\groupbox 729*6a54128fSAndroid Build Coastguard Worker \prevdepth = \dimen1 730*6a54128fSAndroid Build Coastguard Worker \checkinserts 731*6a54128fSAndroid Build Coastguard Worker} 732*6a54128fSAndroid Build Coastguard Worker% 733*6a54128fSAndroid Build Coastguard Worker% TeX puts in an \escapechar (i.e., `@') at the beginning of the help 734*6a54128fSAndroid Build Coastguard Worker% message, so this ends up printing `@group can only ...'. 735*6a54128fSAndroid Build Coastguard Worker% 736*6a54128fSAndroid Build Coastguard Worker\newhelp\groupinvalidhelp{% 737*6a54128fSAndroid Build Coastguard Workergroup can only be used in environments such as @example,^^J% 738*6a54128fSAndroid Build Coastguard Workerwhere each line of input produces a line of output.} 739*6a54128fSAndroid Build Coastguard Worker 740*6a54128fSAndroid Build Coastguard Worker% @need space-in-mils 741*6a54128fSAndroid Build Coastguard Worker% forces a page break if there is not space-in-mils remaining. 742*6a54128fSAndroid Build Coastguard Worker 743*6a54128fSAndroid Build Coastguard Worker\newdimen\mil \mil=0.001in 744*6a54128fSAndroid Build Coastguard Worker 745*6a54128fSAndroid Build Coastguard Worker% Old definition--didn't work. 746*6a54128fSAndroid Build Coastguard Worker%\parseargdef\need{\par % 747*6a54128fSAndroid Build Coastguard Worker%% This method tries to make TeX break the page naturally 748*6a54128fSAndroid Build Coastguard Worker%% if the depth of the box does not fit. 749*6a54128fSAndroid Build Coastguard Worker%{\baselineskip=0pt% 750*6a54128fSAndroid Build Coastguard Worker%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak 751*6a54128fSAndroid Build Coastguard Worker%\prevdepth=-1000pt 752*6a54128fSAndroid Build Coastguard Worker%}} 753*6a54128fSAndroid Build Coastguard Worker 754*6a54128fSAndroid Build Coastguard Worker\parseargdef\need{% 755*6a54128fSAndroid Build Coastguard Worker % Ensure vertical mode, so we don't make a big box in the middle of a 756*6a54128fSAndroid Build Coastguard Worker % paragraph. 757*6a54128fSAndroid Build Coastguard Worker \par 758*6a54128fSAndroid Build Coastguard Worker % 759*6a54128fSAndroid Build Coastguard Worker % If the @need value is less than one line space, it's useless. 760*6a54128fSAndroid Build Coastguard Worker \dimen0 = #1\mil 761*6a54128fSAndroid Build Coastguard Worker \dimen2 = \ht\strutbox 762*6a54128fSAndroid Build Coastguard Worker \advance\dimen2 by \dp\strutbox 763*6a54128fSAndroid Build Coastguard Worker \ifdim\dimen0 > \dimen2 764*6a54128fSAndroid Build Coastguard Worker % 765*6a54128fSAndroid Build Coastguard Worker % Do a \strut just to make the height of this box be normal, so the 766*6a54128fSAndroid Build Coastguard Worker % normal leading is inserted relative to the preceding line. 767*6a54128fSAndroid Build Coastguard Worker % And a page break here is fine. 768*6a54128fSAndroid Build Coastguard Worker \vtop to #1\mil{\strut\vfil}% 769*6a54128fSAndroid Build Coastguard Worker % 770*6a54128fSAndroid Build Coastguard Worker % TeX does not even consider page breaks if a penalty added to the 771*6a54128fSAndroid Build Coastguard Worker % main vertical list is 10000 or more. But in order to see if the 772*6a54128fSAndroid Build Coastguard Worker % empty box we just added fits on the page, we must make it consider 773*6a54128fSAndroid Build Coastguard Worker % page breaks. On the other hand, we don't want to actually break the 774*6a54128fSAndroid Build Coastguard Worker % page after the empty box. So we use a penalty of 9999. 775*6a54128fSAndroid Build Coastguard Worker % 776*6a54128fSAndroid Build Coastguard Worker % There is an extremely small chance that TeX will actually break the 777*6a54128fSAndroid Build Coastguard Worker % page at this \penalty, if there are no other feasible breakpoints in 778*6a54128fSAndroid Build Coastguard Worker % sight. (If the user is using lots of big @group commands, which 779*6a54128fSAndroid Build Coastguard Worker % almost-but-not-quite fill up a page, TeX will have a hard time doing 780*6a54128fSAndroid Build Coastguard Worker % good page breaking, for example.) However, I could not construct an 781*6a54128fSAndroid Build Coastguard Worker % example where a page broke at this \penalty; if it happens in a real 782*6a54128fSAndroid Build Coastguard Worker % document, then we can reconsider our strategy. 783*6a54128fSAndroid Build Coastguard Worker \penalty9999 784*6a54128fSAndroid Build Coastguard Worker % 785*6a54128fSAndroid Build Coastguard Worker % Back up by the size of the box, whether we did a page break or not. 786*6a54128fSAndroid Build Coastguard Worker \kern -#1\mil 787*6a54128fSAndroid Build Coastguard Worker % 788*6a54128fSAndroid Build Coastguard Worker % Do not allow a page break right after this kern. 789*6a54128fSAndroid Build Coastguard Worker \nobreak 790*6a54128fSAndroid Build Coastguard Worker \fi 791*6a54128fSAndroid Build Coastguard Worker} 792*6a54128fSAndroid Build Coastguard Worker 793*6a54128fSAndroid Build Coastguard Worker% @br forces paragraph break (and is undocumented). 794*6a54128fSAndroid Build Coastguard Worker 795*6a54128fSAndroid Build Coastguard Worker\let\br = \par 796*6a54128fSAndroid Build Coastguard Worker 797*6a54128fSAndroid Build Coastguard Worker% @page forces the start of a new page. 798*6a54128fSAndroid Build Coastguard Worker% 799*6a54128fSAndroid Build Coastguard Worker\def\page{\par\vfill\supereject} 800*6a54128fSAndroid Build Coastguard Worker 801*6a54128fSAndroid Build Coastguard Worker% @exdent text.... 802*6a54128fSAndroid Build Coastguard Worker% outputs text on separate line in roman font, starting at standard page margin 803*6a54128fSAndroid Build Coastguard Worker 804*6a54128fSAndroid Build Coastguard Worker% This records the amount of indent in the innermost environment. 805*6a54128fSAndroid Build Coastguard Worker% That's how much \exdent should take out. 806*6a54128fSAndroid Build Coastguard Worker\newskip\exdentamount 807*6a54128fSAndroid Build Coastguard Worker 808*6a54128fSAndroid Build Coastguard Worker% This defn is used inside fill environments such as @defun. 809*6a54128fSAndroid Build Coastguard Worker\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} 810*6a54128fSAndroid Build Coastguard Worker 811*6a54128fSAndroid Build Coastguard Worker% This defn is used inside nofill environments such as @example. 812*6a54128fSAndroid Build Coastguard Worker\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount 813*6a54128fSAndroid Build Coastguard Worker \leftline{\hskip\leftskip{\rm#1}}}} 814*6a54128fSAndroid Build Coastguard Worker 815*6a54128fSAndroid Build Coastguard Worker% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current 816*6a54128fSAndroid Build Coastguard Worker% paragraph. For more general purposes, use the \margin insertion 817*6a54128fSAndroid Build Coastguard Worker% class. WHICH is `l' or `r'. 818*6a54128fSAndroid Build Coastguard Worker% 819*6a54128fSAndroid Build Coastguard Worker\newskip\inmarginspacing \inmarginspacing=1cm 820*6a54128fSAndroid Build Coastguard Worker\def\strutdepth{\dp\strutbox} 821*6a54128fSAndroid Build Coastguard Worker% 822*6a54128fSAndroid Build Coastguard Worker\def\doinmargin#1#2{\strut\vadjust{% 823*6a54128fSAndroid Build Coastguard Worker \nobreak 824*6a54128fSAndroid Build Coastguard Worker \kern-\strutdepth 825*6a54128fSAndroid Build Coastguard Worker \vtop to \strutdepth{% 826*6a54128fSAndroid Build Coastguard Worker \baselineskip=\strutdepth 827*6a54128fSAndroid Build Coastguard Worker \vss 828*6a54128fSAndroid Build Coastguard Worker % if you have multiple lines of stuff to put here, you'll need to 829*6a54128fSAndroid Build Coastguard Worker % make the vbox yourself of the appropriate size. 830*6a54128fSAndroid Build Coastguard Worker \ifx#1l% 831*6a54128fSAndroid Build Coastguard Worker \llap{\ignorespaces #2\hskip\inmarginspacing}% 832*6a54128fSAndroid Build Coastguard Worker \else 833*6a54128fSAndroid Build Coastguard Worker \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% 834*6a54128fSAndroid Build Coastguard Worker \fi 835*6a54128fSAndroid Build Coastguard Worker \null 836*6a54128fSAndroid Build Coastguard Worker }% 837*6a54128fSAndroid Build Coastguard Worker}} 838*6a54128fSAndroid Build Coastguard Worker\def\inleftmargin{\doinmargin l} 839*6a54128fSAndroid Build Coastguard Worker\def\inrightmargin{\doinmargin r} 840*6a54128fSAndroid Build Coastguard Worker% 841*6a54128fSAndroid Build Coastguard Worker% @inmargin{TEXT [, RIGHT-TEXT]} 842*6a54128fSAndroid Build Coastguard Worker% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; 843*6a54128fSAndroid Build Coastguard Worker% else use TEXT for both). 844*6a54128fSAndroid Build Coastguard Worker% 845*6a54128fSAndroid Build Coastguard Worker\def\inmargin#1{\parseinmargin #1,,\finish} 846*6a54128fSAndroid Build Coastguard Worker\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. 847*6a54128fSAndroid Build Coastguard Worker \setbox0 = \hbox{\ignorespaces #2}% 848*6a54128fSAndroid Build Coastguard Worker \ifdim\wd0 > 0pt 849*6a54128fSAndroid Build Coastguard Worker \def\lefttext{#1}% have both texts 850*6a54128fSAndroid Build Coastguard Worker \def\righttext{#2}% 851*6a54128fSAndroid Build Coastguard Worker \else 852*6a54128fSAndroid Build Coastguard Worker \def\lefttext{#1}% have only one text 853*6a54128fSAndroid Build Coastguard Worker \def\righttext{#1}% 854*6a54128fSAndroid Build Coastguard Worker \fi 855*6a54128fSAndroid Build Coastguard Worker % 856*6a54128fSAndroid Build Coastguard Worker \ifodd\pageno 857*6a54128fSAndroid Build Coastguard Worker \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin 858*6a54128fSAndroid Build Coastguard Worker \else 859*6a54128fSAndroid Build Coastguard Worker \def\temp{\inleftmargin\lefttext}% 860*6a54128fSAndroid Build Coastguard Worker \fi 861*6a54128fSAndroid Build Coastguard Worker \temp 862*6a54128fSAndroid Build Coastguard Worker} 863*6a54128fSAndroid Build Coastguard Worker 864*6a54128fSAndroid Build Coastguard Worker% @include file insert text of that file as input. 865*6a54128fSAndroid Build Coastguard Worker% 866*6a54128fSAndroid Build Coastguard Worker\def\include{\parseargusing\filenamecatcodes\includezzz} 867*6a54128fSAndroid Build Coastguard Worker\def\includezzz#1{% 868*6a54128fSAndroid Build Coastguard Worker \pushthisfilestack 869*6a54128fSAndroid Build Coastguard Worker \def\thisfile{#1}% 870*6a54128fSAndroid Build Coastguard Worker {% 871*6a54128fSAndroid Build Coastguard Worker \makevalueexpandable 872*6a54128fSAndroid Build Coastguard Worker \def\temp{\input #1 }% 873*6a54128fSAndroid Build Coastguard Worker \expandafter 874*6a54128fSAndroid Build Coastguard Worker }\temp 875*6a54128fSAndroid Build Coastguard Worker \popthisfilestack 876*6a54128fSAndroid Build Coastguard Worker} 877*6a54128fSAndroid Build Coastguard Worker\def\filenamecatcodes{% 878*6a54128fSAndroid Build Coastguard Worker \catcode`\\=\other 879*6a54128fSAndroid Build Coastguard Worker \catcode`~=\other 880*6a54128fSAndroid Build Coastguard Worker \catcode`^=\other 881*6a54128fSAndroid Build Coastguard Worker \catcode`_=\other 882*6a54128fSAndroid Build Coastguard Worker \catcode`|=\other 883*6a54128fSAndroid Build Coastguard Worker \catcode`<=\other 884*6a54128fSAndroid Build Coastguard Worker \catcode`>=\other 885*6a54128fSAndroid Build Coastguard Worker \catcode`+=\other 886*6a54128fSAndroid Build Coastguard Worker \catcode`-=\other 887*6a54128fSAndroid Build Coastguard Worker} 888*6a54128fSAndroid Build Coastguard Worker 889*6a54128fSAndroid Build Coastguard Worker\def\pushthisfilestack{% 890*6a54128fSAndroid Build Coastguard Worker \expandafter\pushthisfilestackX\popthisfilestack\StackTerm 891*6a54128fSAndroid Build Coastguard Worker} 892*6a54128fSAndroid Build Coastguard Worker\def\pushthisfilestackX{% 893*6a54128fSAndroid Build Coastguard Worker \expandafter\pushthisfilestackY\thisfile\StackTerm 894*6a54128fSAndroid Build Coastguard Worker} 895*6a54128fSAndroid Build Coastguard Worker\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% 896*6a54128fSAndroid Build Coastguard Worker \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% 897*6a54128fSAndroid Build Coastguard Worker} 898*6a54128fSAndroid Build Coastguard Worker 899*6a54128fSAndroid Build Coastguard Worker\def\popthisfilestack{\errthisfilestackempty} 900*6a54128fSAndroid Build Coastguard Worker\def\errthisfilestackempty{\errmessage{Internal error: 901*6a54128fSAndroid Build Coastguard Worker the stack of filenames is empty.}} 902*6a54128fSAndroid Build Coastguard Worker 903*6a54128fSAndroid Build Coastguard Worker\def\thisfile{} 904*6a54128fSAndroid Build Coastguard Worker 905*6a54128fSAndroid Build Coastguard Worker% @center line 906*6a54128fSAndroid Build Coastguard Worker% outputs that line, centered. 907*6a54128fSAndroid Build Coastguard Worker% 908*6a54128fSAndroid Build Coastguard Worker\parseargdef\center{% 909*6a54128fSAndroid Build Coastguard Worker \ifhmode 910*6a54128fSAndroid Build Coastguard Worker \let\next\centerH 911*6a54128fSAndroid Build Coastguard Worker \else 912*6a54128fSAndroid Build Coastguard Worker \let\next\centerV 913*6a54128fSAndroid Build Coastguard Worker \fi 914*6a54128fSAndroid Build Coastguard Worker \next{\hfil \ignorespaces#1\unskip \hfil}% 915*6a54128fSAndroid Build Coastguard Worker} 916*6a54128fSAndroid Build Coastguard Worker\def\centerH#1{% 917*6a54128fSAndroid Build Coastguard Worker {% 918*6a54128fSAndroid Build Coastguard Worker \hfil\break 919*6a54128fSAndroid Build Coastguard Worker \advance\hsize by -\leftskip 920*6a54128fSAndroid Build Coastguard Worker \advance\hsize by -\rightskip 921*6a54128fSAndroid Build Coastguard Worker \line{#1}% 922*6a54128fSAndroid Build Coastguard Worker \break 923*6a54128fSAndroid Build Coastguard Worker }% 924*6a54128fSAndroid Build Coastguard Worker} 925*6a54128fSAndroid Build Coastguard Worker\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} 926*6a54128fSAndroid Build Coastguard Worker 927*6a54128fSAndroid Build Coastguard Worker% @sp n outputs n lines of vertical space 928*6a54128fSAndroid Build Coastguard Worker 929*6a54128fSAndroid Build Coastguard Worker\parseargdef\sp{\vskip #1\baselineskip} 930*6a54128fSAndroid Build Coastguard Worker 931*6a54128fSAndroid Build Coastguard Worker% @comment ...line which is ignored... 932*6a54128fSAndroid Build Coastguard Worker% @c is the same as @comment 933*6a54128fSAndroid Build Coastguard Worker% @ignore ... @end ignore is another way to write a comment 934*6a54128fSAndroid Build Coastguard Worker 935*6a54128fSAndroid Build Coastguard Worker\def\comment{\begingroup \catcode`\^^M=\other% 936*6a54128fSAndroid Build Coastguard Worker\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% 937*6a54128fSAndroid Build Coastguard Worker\commentxxx} 938*6a54128fSAndroid Build Coastguard Worker{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} 939*6a54128fSAndroid Build Coastguard Worker 940*6a54128fSAndroid Build Coastguard Worker\let\c=\comment 941*6a54128fSAndroid Build Coastguard Worker 942*6a54128fSAndroid Build Coastguard Worker% @paragraphindent NCHARS 943*6a54128fSAndroid Build Coastguard Worker% We'll use ems for NCHARS, close enough. 944*6a54128fSAndroid Build Coastguard Worker% NCHARS can also be the word `asis' or `none'. 945*6a54128fSAndroid Build Coastguard Worker% We cannot feasibly implement @paragraphindent asis, though. 946*6a54128fSAndroid Build Coastguard Worker% 947*6a54128fSAndroid Build Coastguard Worker\def\asisword{asis} % no translation, these are keywords 948*6a54128fSAndroid Build Coastguard Worker\def\noneword{none} 949*6a54128fSAndroid Build Coastguard Worker% 950*6a54128fSAndroid Build Coastguard Worker\parseargdef\paragraphindent{% 951*6a54128fSAndroid Build Coastguard Worker \def\temp{#1}% 952*6a54128fSAndroid Build Coastguard Worker \ifx\temp\asisword 953*6a54128fSAndroid Build Coastguard Worker \else 954*6a54128fSAndroid Build Coastguard Worker \ifx\temp\noneword 955*6a54128fSAndroid Build Coastguard Worker \defaultparindent = 0pt 956*6a54128fSAndroid Build Coastguard Worker \else 957*6a54128fSAndroid Build Coastguard Worker \defaultparindent = #1em 958*6a54128fSAndroid Build Coastguard Worker \fi 959*6a54128fSAndroid Build Coastguard Worker \fi 960*6a54128fSAndroid Build Coastguard Worker \parindent = \defaultparindent 961*6a54128fSAndroid Build Coastguard Worker} 962*6a54128fSAndroid Build Coastguard Worker 963*6a54128fSAndroid Build Coastguard Worker% @exampleindent NCHARS 964*6a54128fSAndroid Build Coastguard Worker% We'll use ems for NCHARS like @paragraphindent. 965*6a54128fSAndroid Build Coastguard Worker% It seems @exampleindent asis isn't necessary, but 966*6a54128fSAndroid Build Coastguard Worker% I preserve it to make it similar to @paragraphindent. 967*6a54128fSAndroid Build Coastguard Worker\parseargdef\exampleindent{% 968*6a54128fSAndroid Build Coastguard Worker \def\temp{#1}% 969*6a54128fSAndroid Build Coastguard Worker \ifx\temp\asisword 970*6a54128fSAndroid Build Coastguard Worker \else 971*6a54128fSAndroid Build Coastguard Worker \ifx\temp\noneword 972*6a54128fSAndroid Build Coastguard Worker \lispnarrowing = 0pt 973*6a54128fSAndroid Build Coastguard Worker \else 974*6a54128fSAndroid Build Coastguard Worker \lispnarrowing = #1em 975*6a54128fSAndroid Build Coastguard Worker \fi 976*6a54128fSAndroid Build Coastguard Worker \fi 977*6a54128fSAndroid Build Coastguard Worker} 978*6a54128fSAndroid Build Coastguard Worker 979*6a54128fSAndroid Build Coastguard Worker% @firstparagraphindent WORD 980*6a54128fSAndroid Build Coastguard Worker% If WORD is `none', then suppress indentation of the first paragraph 981*6a54128fSAndroid Build Coastguard Worker% after a section heading. If WORD is `insert', then do indent at such 982*6a54128fSAndroid Build Coastguard Worker% paragraphs. 983*6a54128fSAndroid Build Coastguard Worker% 984*6a54128fSAndroid Build Coastguard Worker% The paragraph indentation is suppressed or not by calling 985*6a54128fSAndroid Build Coastguard Worker% \suppressfirstparagraphindent, which the sectioning commands do. 986*6a54128fSAndroid Build Coastguard Worker% We switch the definition of this back and forth according to WORD. 987*6a54128fSAndroid Build Coastguard Worker% By default, we suppress indentation. 988*6a54128fSAndroid Build Coastguard Worker% 989*6a54128fSAndroid Build Coastguard Worker\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} 990*6a54128fSAndroid Build Coastguard Worker\def\insertword{insert} 991*6a54128fSAndroid Build Coastguard Worker% 992*6a54128fSAndroid Build Coastguard Worker\parseargdef\firstparagraphindent{% 993*6a54128fSAndroid Build Coastguard Worker \def\temp{#1}% 994*6a54128fSAndroid Build Coastguard Worker \ifx\temp\noneword 995*6a54128fSAndroid Build Coastguard Worker \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent 996*6a54128fSAndroid Build Coastguard Worker \else\ifx\temp\insertword 997*6a54128fSAndroid Build Coastguard Worker \let\suppressfirstparagraphindent = \relax 998*6a54128fSAndroid Build Coastguard Worker \else 999*6a54128fSAndroid Build Coastguard Worker \errhelp = \EMsimple 1000*6a54128fSAndroid Build Coastguard Worker \errmessage{Unknown @firstparagraphindent option `\temp'}% 1001*6a54128fSAndroid Build Coastguard Worker \fi\fi 1002*6a54128fSAndroid Build Coastguard Worker} 1003*6a54128fSAndroid Build Coastguard Worker 1004*6a54128fSAndroid Build Coastguard Worker% Here is how we actually suppress indentation. Redefine \everypar to 1005*6a54128fSAndroid Build Coastguard Worker% \kern backwards by \parindent, and then reset itself to empty. 1006*6a54128fSAndroid Build Coastguard Worker% 1007*6a54128fSAndroid Build Coastguard Worker% We also make \indent itself not actually do anything until the next 1008*6a54128fSAndroid Build Coastguard Worker% paragraph. 1009*6a54128fSAndroid Build Coastguard Worker% 1010*6a54128fSAndroid Build Coastguard Worker\gdef\dosuppressfirstparagraphindent{% 1011*6a54128fSAndroid Build Coastguard Worker \gdef\indent{% 1012*6a54128fSAndroid Build Coastguard Worker \restorefirstparagraphindent 1013*6a54128fSAndroid Build Coastguard Worker \indent 1014*6a54128fSAndroid Build Coastguard Worker }% 1015*6a54128fSAndroid Build Coastguard Worker \gdef\noindent{% 1016*6a54128fSAndroid Build Coastguard Worker \restorefirstparagraphindent 1017*6a54128fSAndroid Build Coastguard Worker \noindent 1018*6a54128fSAndroid Build Coastguard Worker }% 1019*6a54128fSAndroid Build Coastguard Worker \global\everypar = {% 1020*6a54128fSAndroid Build Coastguard Worker \kern -\parindent 1021*6a54128fSAndroid Build Coastguard Worker \restorefirstparagraphindent 1022*6a54128fSAndroid Build Coastguard Worker }% 1023*6a54128fSAndroid Build Coastguard Worker} 1024*6a54128fSAndroid Build Coastguard Worker 1025*6a54128fSAndroid Build Coastguard Worker\gdef\restorefirstparagraphindent{% 1026*6a54128fSAndroid Build Coastguard Worker \global \let \indent = \ptexindent 1027*6a54128fSAndroid Build Coastguard Worker \global \let \noindent = \ptexnoindent 1028*6a54128fSAndroid Build Coastguard Worker \global \everypar = {}% 1029*6a54128fSAndroid Build Coastguard Worker} 1030*6a54128fSAndroid Build Coastguard Worker 1031*6a54128fSAndroid Build Coastguard Worker 1032*6a54128fSAndroid Build Coastguard Worker% @asis just yields its argument. Used with @table, for example. 1033*6a54128fSAndroid Build Coastguard Worker% 1034*6a54128fSAndroid Build Coastguard Worker\def\asis#1{#1} 1035*6a54128fSAndroid Build Coastguard Worker 1036*6a54128fSAndroid Build Coastguard Worker% @math outputs its argument in math mode. 1037*6a54128fSAndroid Build Coastguard Worker% 1038*6a54128fSAndroid Build Coastguard Worker% One complication: _ usually means subscripts, but it could also mean 1039*6a54128fSAndroid Build Coastguard Worker% an actual _ character, as in @math{@var{some_variable} + 1}. So make 1040*6a54128fSAndroid Build Coastguard Worker% _ active, and distinguish by seeing if the current family is \slfam, 1041*6a54128fSAndroid Build Coastguard Worker% which is what @var uses. 1042*6a54128fSAndroid Build Coastguard Worker{ 1043*6a54128fSAndroid Build Coastguard Worker \catcode`\_ = \active 1044*6a54128fSAndroid Build Coastguard Worker \gdef\mathunderscore{% 1045*6a54128fSAndroid Build Coastguard Worker \catcode`\_=\active 1046*6a54128fSAndroid Build Coastguard Worker \def_{\ifnum\fam=\slfam \_\else\sb\fi}% 1047*6a54128fSAndroid Build Coastguard Worker } 1048*6a54128fSAndroid Build Coastguard Worker} 1049*6a54128fSAndroid Build Coastguard Worker% Another complication: we want \\ (and @\) to output a \ character. 1050*6a54128fSAndroid Build Coastguard Worker% FYI, plain.tex uses \\ as a temporary control sequence (why?), but 1051*6a54128fSAndroid Build Coastguard Worker% this is not advertised and we don't care. Texinfo does not 1052*6a54128fSAndroid Build Coastguard Worker% otherwise define @\. 1053*6a54128fSAndroid Build Coastguard Worker% 1054*6a54128fSAndroid Build Coastguard Worker% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. 1055*6a54128fSAndroid Build Coastguard Worker\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} 1056*6a54128fSAndroid Build Coastguard Worker% 1057*6a54128fSAndroid Build Coastguard Worker\def\math{% 1058*6a54128fSAndroid Build Coastguard Worker \tex 1059*6a54128fSAndroid Build Coastguard Worker \mathunderscore 1060*6a54128fSAndroid Build Coastguard Worker \let\\ = \mathbackslash 1061*6a54128fSAndroid Build Coastguard Worker \mathactive 1062*6a54128fSAndroid Build Coastguard Worker $\finishmath 1063*6a54128fSAndroid Build Coastguard Worker} 1064*6a54128fSAndroid Build Coastguard Worker\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. 1065*6a54128fSAndroid Build Coastguard Worker 1066*6a54128fSAndroid Build Coastguard Worker% Some active characters (such as <) are spaced differently in math. 1067*6a54128fSAndroid Build Coastguard Worker% We have to reset their definitions in case the @math was an argument 1068*6a54128fSAndroid Build Coastguard Worker% to a command which sets the catcodes (such as @item or @section). 1069*6a54128fSAndroid Build Coastguard Worker% 1070*6a54128fSAndroid Build Coastguard Worker{ 1071*6a54128fSAndroid Build Coastguard Worker \catcode`^ = \active 1072*6a54128fSAndroid Build Coastguard Worker \catcode`< = \active 1073*6a54128fSAndroid Build Coastguard Worker \catcode`> = \active 1074*6a54128fSAndroid Build Coastguard Worker \catcode`+ = \active 1075*6a54128fSAndroid Build Coastguard Worker \gdef\mathactive{% 1076*6a54128fSAndroid Build Coastguard Worker \let^ = \ptexhat 1077*6a54128fSAndroid Build Coastguard Worker \let< = \ptexless 1078*6a54128fSAndroid Build Coastguard Worker \let> = \ptexgtr 1079*6a54128fSAndroid Build Coastguard Worker \let+ = \ptexplus 1080*6a54128fSAndroid Build Coastguard Worker } 1081*6a54128fSAndroid Build Coastguard Worker} 1082*6a54128fSAndroid Build Coastguard Worker 1083*6a54128fSAndroid Build Coastguard Worker% @bullet and @minus need the same treatment as @math, just above. 1084*6a54128fSAndroid Build Coastguard Worker\def\bullet{$\ptexbullet$} 1085*6a54128fSAndroid Build Coastguard Worker\def\minus{$-$} 1086*6a54128fSAndroid Build Coastguard Worker 1087*6a54128fSAndroid Build Coastguard Worker% @dots{} outputs an ellipsis using the current font. 1088*6a54128fSAndroid Build Coastguard Worker% We do .5em per period so that it has the same spacing in a typewriter 1089*6a54128fSAndroid Build Coastguard Worker% font as three actual period characters. 1090*6a54128fSAndroid Build Coastguard Worker% 1091*6a54128fSAndroid Build Coastguard Worker\def\dots{% 1092*6a54128fSAndroid Build Coastguard Worker \leavevmode 1093*6a54128fSAndroid Build Coastguard Worker \hbox to 1.5em{% 1094*6a54128fSAndroid Build Coastguard Worker \hskip 0pt plus 0.25fil 1095*6a54128fSAndroid Build Coastguard Worker .\hfil.\hfil.% 1096*6a54128fSAndroid Build Coastguard Worker \hskip 0pt plus 0.5fil 1097*6a54128fSAndroid Build Coastguard Worker }% 1098*6a54128fSAndroid Build Coastguard Worker} 1099*6a54128fSAndroid Build Coastguard Worker 1100*6a54128fSAndroid Build Coastguard Worker% @enddots{} is an end-of-sentence ellipsis. 1101*6a54128fSAndroid Build Coastguard Worker% 1102*6a54128fSAndroid Build Coastguard Worker\def\enddots{% 1103*6a54128fSAndroid Build Coastguard Worker \dots 1104*6a54128fSAndroid Build Coastguard Worker \spacefactor=\endofsentencespacefactor 1105*6a54128fSAndroid Build Coastguard Worker} 1106*6a54128fSAndroid Build Coastguard Worker 1107*6a54128fSAndroid Build Coastguard Worker% @comma{} is so commas can be inserted into text without messing up 1108*6a54128fSAndroid Build Coastguard Worker% Texinfo's parsing. 1109*6a54128fSAndroid Build Coastguard Worker% 1110*6a54128fSAndroid Build Coastguard Worker\let\comma = , 1111*6a54128fSAndroid Build Coastguard Worker 1112*6a54128fSAndroid Build Coastguard Worker% @refill is a no-op. 1113*6a54128fSAndroid Build Coastguard Worker\let\refill=\relax 1114*6a54128fSAndroid Build Coastguard Worker 1115*6a54128fSAndroid Build Coastguard Worker% If working on a large document in chapters, it is convenient to 1116*6a54128fSAndroid Build Coastguard Worker% be able to disable indexing, cross-referencing, and contents, for test runs. 1117*6a54128fSAndroid Build Coastguard Worker% This is done with @novalidate (before @setfilename). 1118*6a54128fSAndroid Build Coastguard Worker% 1119*6a54128fSAndroid Build Coastguard Worker\newif\iflinks \linkstrue % by default we want the aux files. 1120*6a54128fSAndroid Build Coastguard Worker\let\novalidate = \linksfalse 1121*6a54128fSAndroid Build Coastguard Worker 1122*6a54128fSAndroid Build Coastguard Worker% @setfilename is done at the beginning of every texinfo file. 1123*6a54128fSAndroid Build Coastguard Worker% So open here the files we need to have open while reading the input. 1124*6a54128fSAndroid Build Coastguard Worker% This makes it possible to make a .fmt file for texinfo. 1125*6a54128fSAndroid Build Coastguard Worker\def\setfilename{% 1126*6a54128fSAndroid Build Coastguard Worker \fixbackslash % Turn off hack to swallow `\input texinfo'. 1127*6a54128fSAndroid Build Coastguard Worker \iflinks 1128*6a54128fSAndroid Build Coastguard Worker \tryauxfile 1129*6a54128fSAndroid Build Coastguard Worker % Open the new aux file. TeX will close it automatically at exit. 1130*6a54128fSAndroid Build Coastguard Worker \immediate\openout\auxfile=\jobname.aux 1131*6a54128fSAndroid Build Coastguard Worker \fi % \openindices needs to do some work in any case. 1132*6a54128fSAndroid Build Coastguard Worker \openindices 1133*6a54128fSAndroid Build Coastguard Worker \let\setfilename=\comment % Ignore extra @setfilename cmds. 1134*6a54128fSAndroid Build Coastguard Worker % 1135*6a54128fSAndroid Build Coastguard Worker % If texinfo.cnf is present on the system, read it. 1136*6a54128fSAndroid Build Coastguard Worker % Useful for site-wide @afourpaper, etc. 1137*6a54128fSAndroid Build Coastguard Worker \openin 1 texinfo.cnf 1138*6a54128fSAndroid Build Coastguard Worker \ifeof 1 \else \input texinfo.cnf \fi 1139*6a54128fSAndroid Build Coastguard Worker \closein 1 1140*6a54128fSAndroid Build Coastguard Worker % 1141*6a54128fSAndroid Build Coastguard Worker \comment % Ignore the actual filename. 1142*6a54128fSAndroid Build Coastguard Worker} 1143*6a54128fSAndroid Build Coastguard Worker 1144*6a54128fSAndroid Build Coastguard Worker% Called from \setfilename. 1145*6a54128fSAndroid Build Coastguard Worker% 1146*6a54128fSAndroid Build Coastguard Worker\def\openindices{% 1147*6a54128fSAndroid Build Coastguard Worker \newindex{cp}% 1148*6a54128fSAndroid Build Coastguard Worker \newcodeindex{fn}% 1149*6a54128fSAndroid Build Coastguard Worker \newcodeindex{vr}% 1150*6a54128fSAndroid Build Coastguard Worker \newcodeindex{tp}% 1151*6a54128fSAndroid Build Coastguard Worker \newcodeindex{ky}% 1152*6a54128fSAndroid Build Coastguard Worker \newcodeindex{pg}% 1153*6a54128fSAndroid Build Coastguard Worker} 1154*6a54128fSAndroid Build Coastguard Worker 1155*6a54128fSAndroid Build Coastguard Worker% @bye. 1156*6a54128fSAndroid Build Coastguard Worker\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} 1157*6a54128fSAndroid Build Coastguard Worker 1158*6a54128fSAndroid Build Coastguard Worker 1159*6a54128fSAndroid Build Coastguard Worker\message{pdf,} 1160*6a54128fSAndroid Build Coastguard Worker% adobe `portable' document format 1161*6a54128fSAndroid Build Coastguard Worker\newcount\tempnum 1162*6a54128fSAndroid Build Coastguard Worker\newcount\lnkcount 1163*6a54128fSAndroid Build Coastguard Worker\newtoks\filename 1164*6a54128fSAndroid Build Coastguard Worker\newcount\filenamelength 1165*6a54128fSAndroid Build Coastguard Worker\newcount\pgn 1166*6a54128fSAndroid Build Coastguard Worker\newtoks\toksA 1167*6a54128fSAndroid Build Coastguard Worker\newtoks\toksB 1168*6a54128fSAndroid Build Coastguard Worker\newtoks\toksC 1169*6a54128fSAndroid Build Coastguard Worker\newtoks\toksD 1170*6a54128fSAndroid Build Coastguard Worker\newbox\boxA 1171*6a54128fSAndroid Build Coastguard Worker\newcount\countA 1172*6a54128fSAndroid Build Coastguard Worker\newif\ifpdf 1173*6a54128fSAndroid Build Coastguard Worker\newif\ifpdfmakepagedest 1174*6a54128fSAndroid Build Coastguard Worker 1175*6a54128fSAndroid Build Coastguard Worker% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 1176*6a54128fSAndroid Build Coastguard Worker% can be set). So we test for \relax and 0 as well as \undefined, 1177*6a54128fSAndroid Build Coastguard Worker% borrowed from ifpdf.sty. 1178*6a54128fSAndroid Build Coastguard Worker\ifx\pdfoutput\undefined 1179*6a54128fSAndroid Build Coastguard Worker\else 1180*6a54128fSAndroid Build Coastguard Worker \ifx\pdfoutput\relax 1181*6a54128fSAndroid Build Coastguard Worker \else 1182*6a54128fSAndroid Build Coastguard Worker \ifcase\pdfoutput 1183*6a54128fSAndroid Build Coastguard Worker \else 1184*6a54128fSAndroid Build Coastguard Worker \pdftrue 1185*6a54128fSAndroid Build Coastguard Worker \fi 1186*6a54128fSAndroid Build Coastguard Worker \fi 1187*6a54128fSAndroid Build Coastguard Worker\fi 1188*6a54128fSAndroid Build Coastguard Worker 1189*6a54128fSAndroid Build Coastguard Worker% PDF uses PostScript string constants for the names of xref targets, 1190*6a54128fSAndroid Build Coastguard Worker% for display in the outlines, and in other places. Thus, we have to 1191*6a54128fSAndroid Build Coastguard Worker% double any backslashes. Otherwise, a name like "\node" will be 1192*6a54128fSAndroid Build Coastguard Worker% interpreted as a newline (\n), followed by o, d, e. Not good. 1193*6a54128fSAndroid Build Coastguard Worker% http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html 1194*6a54128fSAndroid Build Coastguard Worker% (and related messages, the final outcome is that it is up to the TeX 1195*6a54128fSAndroid Build Coastguard Worker% user to double the backslashes and otherwise make the string valid, so 1196*6a54128fSAndroid Build Coastguard Worker% that's what we do). 1197*6a54128fSAndroid Build Coastguard Worker 1198*6a54128fSAndroid Build Coastguard Worker% double active backslashes. 1199*6a54128fSAndroid Build Coastguard Worker% 1200*6a54128fSAndroid Build Coastguard Worker{\catcode`\@=0 \catcode`\\=\active 1201*6a54128fSAndroid Build Coastguard Worker @gdef@activebackslashdouble{% 1202*6a54128fSAndroid Build Coastguard Worker @catcode`@\=@active 1203*6a54128fSAndroid Build Coastguard Worker @let\=@doublebackslash} 1204*6a54128fSAndroid Build Coastguard Worker} 1205*6a54128fSAndroid Build Coastguard Worker 1206*6a54128fSAndroid Build Coastguard Worker% To handle parens, we must adopt a different approach, since parens are 1207*6a54128fSAndroid Build Coastguard Worker% not active characters. hyperref.dtx (which has the same problem as 1208*6a54128fSAndroid Build Coastguard Worker% us) handles it with this amazing macro to replace tokens. I've 1209*6a54128fSAndroid Build Coastguard Worker% tinkered with it a little for texinfo, but it's definitely from there. 1210*6a54128fSAndroid Build Coastguard Worker% 1211*6a54128fSAndroid Build Coastguard Worker% #1 is the tokens to replace. 1212*6a54128fSAndroid Build Coastguard Worker% #2 is the replacement. 1213*6a54128fSAndroid Build Coastguard Worker% #3 is the control sequence with the string. 1214*6a54128fSAndroid Build Coastguard Worker% 1215*6a54128fSAndroid Build Coastguard Worker\def\HyPsdSubst#1#2#3{% 1216*6a54128fSAndroid Build Coastguard Worker \def\HyPsdReplace##1#1##2\END{% 1217*6a54128fSAndroid Build Coastguard Worker ##1% 1218*6a54128fSAndroid Build Coastguard Worker \ifx\\##2\\% 1219*6a54128fSAndroid Build Coastguard Worker \else 1220*6a54128fSAndroid Build Coastguard Worker #2% 1221*6a54128fSAndroid Build Coastguard Worker \HyReturnAfterFi{% 1222*6a54128fSAndroid Build Coastguard Worker \HyPsdReplace##2\END 1223*6a54128fSAndroid Build Coastguard Worker }% 1224*6a54128fSAndroid Build Coastguard Worker \fi 1225*6a54128fSAndroid Build Coastguard Worker }% 1226*6a54128fSAndroid Build Coastguard Worker \xdef#3{\expandafter\HyPsdReplace#3#1\END}% 1227*6a54128fSAndroid Build Coastguard Worker} 1228*6a54128fSAndroid Build Coastguard Worker\long\def\HyReturnAfterFi#1\fi{\fi#1} 1229*6a54128fSAndroid Build Coastguard Worker 1230*6a54128fSAndroid Build Coastguard Worker% #1 is a control sequence in which to do the replacements. 1231*6a54128fSAndroid Build Coastguard Worker\def\backslashparens#1{% 1232*6a54128fSAndroid Build Coastguard Worker \xdef#1{#1}% redefine it as its expansion; the definition is simply 1233*6a54128fSAndroid Build Coastguard Worker % \lastnode when called from \setref -> \pdfmkdest. 1234*6a54128fSAndroid Build Coastguard Worker \HyPsdSubst{(}{\realbackslash(}{#1}% 1235*6a54128fSAndroid Build Coastguard Worker \HyPsdSubst{)}{\realbackslash)}{#1}% 1236*6a54128fSAndroid Build Coastguard Worker} 1237*6a54128fSAndroid Build Coastguard Worker 1238*6a54128fSAndroid Build Coastguard Worker\ifpdf 1239*6a54128fSAndroid Build Coastguard Worker \input pdfcolor 1240*6a54128fSAndroid Build Coastguard Worker \pdfcatalog{/PageMode /UseOutlines}% 1241*6a54128fSAndroid Build Coastguard Worker \def\dopdfimage#1#2#3{% 1242*6a54128fSAndroid Build Coastguard Worker \def\imagewidth{#2}% 1243*6a54128fSAndroid Build Coastguard Worker \def\imageheight{#3}% 1244*6a54128fSAndroid Build Coastguard Worker % without \immediate, pdftex seg faults when the same image is 1245*6a54128fSAndroid Build Coastguard Worker % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) 1246*6a54128fSAndroid Build Coastguard Worker \ifnum\pdftexversion < 14 1247*6a54128fSAndroid Build Coastguard Worker \immediate\pdfimage 1248*6a54128fSAndroid Build Coastguard Worker \else 1249*6a54128fSAndroid Build Coastguard Worker \immediate\pdfximage 1250*6a54128fSAndroid Build Coastguard Worker \fi 1251*6a54128fSAndroid Build Coastguard Worker \ifx\empty\imagewidth\else width \imagewidth \fi 1252*6a54128fSAndroid Build Coastguard Worker \ifx\empty\imageheight\else height \imageheight \fi 1253*6a54128fSAndroid Build Coastguard Worker \ifnum\pdftexversion<13 1254*6a54128fSAndroid Build Coastguard Worker #1.pdf% 1255*6a54128fSAndroid Build Coastguard Worker \else 1256*6a54128fSAndroid Build Coastguard Worker {#1.pdf}% 1257*6a54128fSAndroid Build Coastguard Worker \fi 1258*6a54128fSAndroid Build Coastguard Worker \ifnum\pdftexversion < 14 \else 1259*6a54128fSAndroid Build Coastguard Worker \pdfrefximage \pdflastximage 1260*6a54128fSAndroid Build Coastguard Worker \fi} 1261*6a54128fSAndroid Build Coastguard Worker \def\pdfmkdest#1{{% 1262*6a54128fSAndroid Build Coastguard Worker % We have to set dummies so commands such as @code, and characters 1263*6a54128fSAndroid Build Coastguard Worker % such as \, aren't expanded when present in a section title. 1264*6a54128fSAndroid Build Coastguard Worker \atdummies 1265*6a54128fSAndroid Build Coastguard Worker \activebackslashdouble 1266*6a54128fSAndroid Build Coastguard Worker \def\pdfdestname{#1}% 1267*6a54128fSAndroid Build Coastguard Worker \backslashparens\pdfdestname 1268*6a54128fSAndroid Build Coastguard Worker \pdfdest name{\pdfdestname} xyz% 1269*6a54128fSAndroid Build Coastguard Worker }}% 1270*6a54128fSAndroid Build Coastguard Worker % 1271*6a54128fSAndroid Build Coastguard Worker % used to mark target names; must be expandable. 1272*6a54128fSAndroid Build Coastguard Worker \def\pdfmkpgn#1{#1}% 1273*6a54128fSAndroid Build Coastguard Worker % 1274*6a54128fSAndroid Build Coastguard Worker \let\linkcolor = \Blue % was Cyan, but that seems light? 1275*6a54128fSAndroid Build Coastguard Worker \def\endlink{\Black\pdfendlink} 1276*6a54128fSAndroid Build Coastguard Worker % Adding outlines to PDF; macros for calculating structure of outlines 1277*6a54128fSAndroid Build Coastguard Worker % come from Petr Olsak 1278*6a54128fSAndroid Build Coastguard Worker \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% 1279*6a54128fSAndroid Build Coastguard Worker \else \csname#1\endcsname \fi} 1280*6a54128fSAndroid Build Coastguard Worker \def\advancenumber#1{\tempnum=\expnumber{#1}\relax 1281*6a54128fSAndroid Build Coastguard Worker \advance\tempnum by 1 1282*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname#1\endcsname{\the\tempnum}} 1283*6a54128fSAndroid Build Coastguard Worker % 1284*6a54128fSAndroid Build Coastguard Worker % #1 is the section text, which is what will be displayed in the 1285*6a54128fSAndroid Build Coastguard Worker % outline by the pdf viewer. #2 is the pdf expression for the number 1286*6a54128fSAndroid Build Coastguard Worker % of subentries (or empty, for subsubsections). #3 is the node text, 1287*6a54128fSAndroid Build Coastguard Worker % which might be empty if this toc entry had no corresponding node. 1288*6a54128fSAndroid Build Coastguard Worker % #4 is the page number 1289*6a54128fSAndroid Build Coastguard Worker % 1290*6a54128fSAndroid Build Coastguard Worker \def\dopdfoutline#1#2#3#4{% 1291*6a54128fSAndroid Build Coastguard Worker % Generate a link to the node text if that exists; else, use the 1292*6a54128fSAndroid Build Coastguard Worker % page number. We could generate a destination for the section 1293*6a54128fSAndroid Build Coastguard Worker % text in the case where a section has no node, but it doesn't 1294*6a54128fSAndroid Build Coastguard Worker % seem worth the trouble, since most documents are normally structured. 1295*6a54128fSAndroid Build Coastguard Worker \def\pdfoutlinedest{#3}% 1296*6a54128fSAndroid Build Coastguard Worker \ifx\pdfoutlinedest\empty 1297*6a54128fSAndroid Build Coastguard Worker \def\pdfoutlinedest{#4}% 1298*6a54128fSAndroid Build Coastguard Worker \else 1299*6a54128fSAndroid Build Coastguard Worker % Doubled backslashes in the name. 1300*6a54128fSAndroid Build Coastguard Worker {\activebackslashdouble \xdef\pdfoutlinedest{#3}% 1301*6a54128fSAndroid Build Coastguard Worker \backslashparens\pdfoutlinedest}% 1302*6a54128fSAndroid Build Coastguard Worker \fi 1303*6a54128fSAndroid Build Coastguard Worker % 1304*6a54128fSAndroid Build Coastguard Worker % Also double the backslashes in the display string. 1305*6a54128fSAndroid Build Coastguard Worker {\activebackslashdouble \xdef\pdfoutlinetext{#1}% 1306*6a54128fSAndroid Build Coastguard Worker \backslashparens\pdfoutlinetext}% 1307*6a54128fSAndroid Build Coastguard Worker % 1308*6a54128fSAndroid Build Coastguard Worker \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% 1309*6a54128fSAndroid Build Coastguard Worker } 1310*6a54128fSAndroid Build Coastguard Worker % 1311*6a54128fSAndroid Build Coastguard Worker \def\pdfmakeoutlines{% 1312*6a54128fSAndroid Build Coastguard Worker \begingroup 1313*6a54128fSAndroid Build Coastguard Worker % Thanh's hack / proper braces in bookmarks 1314*6a54128fSAndroid Build Coastguard Worker \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace 1315*6a54128fSAndroid Build Coastguard Worker \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace 1316*6a54128fSAndroid Build Coastguard Worker % 1317*6a54128fSAndroid Build Coastguard Worker % Read toc silently, to get counts of subentries for \pdfoutline. 1318*6a54128fSAndroid Build Coastguard Worker \def\numchapentry##1##2##3##4{% 1319*6a54128fSAndroid Build Coastguard Worker \def\thischapnum{##2}% 1320*6a54128fSAndroid Build Coastguard Worker \def\thissecnum{0}% 1321*6a54128fSAndroid Build Coastguard Worker \def\thissubsecnum{0}% 1322*6a54128fSAndroid Build Coastguard Worker }% 1323*6a54128fSAndroid Build Coastguard Worker \def\numsecentry##1##2##3##4{% 1324*6a54128fSAndroid Build Coastguard Worker \advancenumber{chap\thischapnum}% 1325*6a54128fSAndroid Build Coastguard Worker \def\thissecnum{##2}% 1326*6a54128fSAndroid Build Coastguard Worker \def\thissubsecnum{0}% 1327*6a54128fSAndroid Build Coastguard Worker }% 1328*6a54128fSAndroid Build Coastguard Worker \def\numsubsecentry##1##2##3##4{% 1329*6a54128fSAndroid Build Coastguard Worker \advancenumber{sec\thissecnum}% 1330*6a54128fSAndroid Build Coastguard Worker \def\thissubsecnum{##2}% 1331*6a54128fSAndroid Build Coastguard Worker }% 1332*6a54128fSAndroid Build Coastguard Worker \def\numsubsubsecentry##1##2##3##4{% 1333*6a54128fSAndroid Build Coastguard Worker \advancenumber{subsec\thissubsecnum}% 1334*6a54128fSAndroid Build Coastguard Worker }% 1335*6a54128fSAndroid Build Coastguard Worker \def\thischapnum{0}% 1336*6a54128fSAndroid Build Coastguard Worker \def\thissecnum{0}% 1337*6a54128fSAndroid Build Coastguard Worker \def\thissubsecnum{0}% 1338*6a54128fSAndroid Build Coastguard Worker % 1339*6a54128fSAndroid Build Coastguard Worker % use \def rather than \let here because we redefine \chapentry et 1340*6a54128fSAndroid Build Coastguard Worker % al. a second time, below. 1341*6a54128fSAndroid Build Coastguard Worker \def\appentry{\numchapentry}% 1342*6a54128fSAndroid Build Coastguard Worker \def\appsecentry{\numsecentry}% 1343*6a54128fSAndroid Build Coastguard Worker \def\appsubsecentry{\numsubsecentry}% 1344*6a54128fSAndroid Build Coastguard Worker \def\appsubsubsecentry{\numsubsubsecentry}% 1345*6a54128fSAndroid Build Coastguard Worker \def\unnchapentry{\numchapentry}% 1346*6a54128fSAndroid Build Coastguard Worker \def\unnsecentry{\numsecentry}% 1347*6a54128fSAndroid Build Coastguard Worker \def\unnsubsecentry{\numsubsecentry}% 1348*6a54128fSAndroid Build Coastguard Worker \def\unnsubsubsecentry{\numsubsubsecentry}% 1349*6a54128fSAndroid Build Coastguard Worker \readdatafile{toc}% 1350*6a54128fSAndroid Build Coastguard Worker % 1351*6a54128fSAndroid Build Coastguard Worker % Read toc second time, this time actually producing the outlines. 1352*6a54128fSAndroid Build Coastguard Worker % The `-' means take the \expnumber as the absolute number of 1353*6a54128fSAndroid Build Coastguard Worker % subentries, which we calculated on our first read of the .toc above. 1354*6a54128fSAndroid Build Coastguard Worker % 1355*6a54128fSAndroid Build Coastguard Worker % We use the node names as the destinations. 1356*6a54128fSAndroid Build Coastguard Worker \def\numchapentry##1##2##3##4{% 1357*6a54128fSAndroid Build Coastguard Worker \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% 1358*6a54128fSAndroid Build Coastguard Worker \def\numsecentry##1##2##3##4{% 1359*6a54128fSAndroid Build Coastguard Worker \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% 1360*6a54128fSAndroid Build Coastguard Worker \def\numsubsecentry##1##2##3##4{% 1361*6a54128fSAndroid Build Coastguard Worker \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% 1362*6a54128fSAndroid Build Coastguard Worker \def\numsubsubsecentry##1##2##3##4{% count is always zero 1363*6a54128fSAndroid Build Coastguard Worker \dopdfoutline{##1}{}{##3}{##4}}% 1364*6a54128fSAndroid Build Coastguard Worker % 1365*6a54128fSAndroid Build Coastguard Worker % PDF outlines are displayed using system fonts, instead of 1366*6a54128fSAndroid Build Coastguard Worker % document fonts. Therefore we cannot use special characters, 1367*6a54128fSAndroid Build Coastguard Worker % since the encoding is unknown. For example, the eogonek from 1368*6a54128fSAndroid Build Coastguard Worker % Latin 2 (0xea) gets translated to a | character. Info from 1369*6a54128fSAndroid Build Coastguard Worker % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. 1370*6a54128fSAndroid Build Coastguard Worker % 1371*6a54128fSAndroid Build Coastguard Worker % xx to do this right, we have to translate 8-bit characters to 1372*6a54128fSAndroid Build Coastguard Worker % their "best" equivalent, based on the @documentencoding. Right 1373*6a54128fSAndroid Build Coastguard Worker % now, I guess we'll just let the pdf reader have its way. 1374*6a54128fSAndroid Build Coastguard Worker \indexnofonts 1375*6a54128fSAndroid Build Coastguard Worker \setupdatafile 1376*6a54128fSAndroid Build Coastguard Worker \catcode`\\=\active \otherbackslash 1377*6a54128fSAndroid Build Coastguard Worker \input \jobname.toc 1378*6a54128fSAndroid Build Coastguard Worker \endgroup 1379*6a54128fSAndroid Build Coastguard Worker } 1380*6a54128fSAndroid Build Coastguard Worker % 1381*6a54128fSAndroid Build Coastguard Worker \def\skipspaces#1{\def\PP{#1}\def\D{|}% 1382*6a54128fSAndroid Build Coastguard Worker \ifx\PP\D\let\nextsp\relax 1383*6a54128fSAndroid Build Coastguard Worker \else\let\nextsp\skipspaces 1384*6a54128fSAndroid Build Coastguard Worker \ifx\p\space\else\addtokens{\filename}{\PP}% 1385*6a54128fSAndroid Build Coastguard Worker \advance\filenamelength by 1 1386*6a54128fSAndroid Build Coastguard Worker \fi 1387*6a54128fSAndroid Build Coastguard Worker \fi 1388*6a54128fSAndroid Build Coastguard Worker \nextsp} 1389*6a54128fSAndroid Build Coastguard Worker \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} 1390*6a54128fSAndroid Build Coastguard Worker \ifnum\pdftexversion < 14 1391*6a54128fSAndroid Build Coastguard Worker \let \startlink \pdfannotlink 1392*6a54128fSAndroid Build Coastguard Worker \else 1393*6a54128fSAndroid Build Coastguard Worker \let \startlink \pdfstartlink 1394*6a54128fSAndroid Build Coastguard Worker \fi 1395*6a54128fSAndroid Build Coastguard Worker % make a live url in pdf output. 1396*6a54128fSAndroid Build Coastguard Worker \def\pdfurl#1{% 1397*6a54128fSAndroid Build Coastguard Worker \begingroup 1398*6a54128fSAndroid Build Coastguard Worker % it seems we really need yet another set of dummies; have not 1399*6a54128fSAndroid Build Coastguard Worker % tried to figure out what each command should do in the context 1400*6a54128fSAndroid Build Coastguard Worker % of @url. for now, just make @/ a no-op, that's the only one 1401*6a54128fSAndroid Build Coastguard Worker % people have actually reported a problem with. 1402*6a54128fSAndroid Build Coastguard Worker % 1403*6a54128fSAndroid Build Coastguard Worker \normalturnoffactive 1404*6a54128fSAndroid Build Coastguard Worker \def\@{@}% 1405*6a54128fSAndroid Build Coastguard Worker \let\/=\empty 1406*6a54128fSAndroid Build Coastguard Worker \makevalueexpandable 1407*6a54128fSAndroid Build Coastguard Worker \leavevmode\Red 1408*6a54128fSAndroid Build Coastguard Worker \startlink attr{/Border [0 0 0]}% 1409*6a54128fSAndroid Build Coastguard Worker user{/Subtype /Link /A << /S /URI /URI (#1) >>}% 1410*6a54128fSAndroid Build Coastguard Worker \endgroup} 1411*6a54128fSAndroid Build Coastguard Worker \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} 1412*6a54128fSAndroid Build Coastguard Worker \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} 1413*6a54128fSAndroid Build Coastguard Worker \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} 1414*6a54128fSAndroid Build Coastguard Worker \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} 1415*6a54128fSAndroid Build Coastguard Worker \def\maketoks{% 1416*6a54128fSAndroid Build Coastguard Worker \expandafter\poptoks\the\toksA|ENDTOKS|\relax 1417*6a54128fSAndroid Build Coastguard Worker \ifx\first0\adn0 1418*6a54128fSAndroid Build Coastguard Worker \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 1419*6a54128fSAndroid Build Coastguard Worker \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 1420*6a54128fSAndroid Build Coastguard Worker \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 1421*6a54128fSAndroid Build Coastguard Worker \else 1422*6a54128fSAndroid Build Coastguard Worker \ifnum0=\countA\else\makelink\fi 1423*6a54128fSAndroid Build Coastguard Worker \ifx\first.\let\next=\done\else 1424*6a54128fSAndroid Build Coastguard Worker \let\next=\maketoks 1425*6a54128fSAndroid Build Coastguard Worker \addtokens{\toksB}{\the\toksD} 1426*6a54128fSAndroid Build Coastguard Worker \ifx\first,\addtokens{\toksB}{\space}\fi 1427*6a54128fSAndroid Build Coastguard Worker \fi 1428*6a54128fSAndroid Build Coastguard Worker \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi 1429*6a54128fSAndroid Build Coastguard Worker \next} 1430*6a54128fSAndroid Build Coastguard Worker \def\makelink{\addtokens{\toksB}% 1431*6a54128fSAndroid Build Coastguard Worker {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} 1432*6a54128fSAndroid Build Coastguard Worker \def\pdflink#1{% 1433*6a54128fSAndroid Build Coastguard Worker \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} 1434*6a54128fSAndroid Build Coastguard Worker \linkcolor #1\endlink} 1435*6a54128fSAndroid Build Coastguard Worker \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} 1436*6a54128fSAndroid Build Coastguard Worker\else 1437*6a54128fSAndroid Build Coastguard Worker \let\pdfmkdest = \gobble 1438*6a54128fSAndroid Build Coastguard Worker \let\pdfurl = \gobble 1439*6a54128fSAndroid Build Coastguard Worker \let\endlink = \relax 1440*6a54128fSAndroid Build Coastguard Worker \let\linkcolor = \relax 1441*6a54128fSAndroid Build Coastguard Worker \let\pdfmakeoutlines = \relax 1442*6a54128fSAndroid Build Coastguard Worker\fi % \ifx\pdfoutput 1443*6a54128fSAndroid Build Coastguard Worker 1444*6a54128fSAndroid Build Coastguard Worker 1445*6a54128fSAndroid Build Coastguard Worker\message{fonts,} 1446*6a54128fSAndroid Build Coastguard Worker 1447*6a54128fSAndroid Build Coastguard Worker% Change the current font style to #1, remembering it in \curfontstyle. 1448*6a54128fSAndroid Build Coastguard Worker% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in 1449*6a54128fSAndroid Build Coastguard Worker% italics, not bold italics. 1450*6a54128fSAndroid Build Coastguard Worker% 1451*6a54128fSAndroid Build Coastguard Worker\def\setfontstyle#1{% 1452*6a54128fSAndroid Build Coastguard Worker \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. 1453*6a54128fSAndroid Build Coastguard Worker \csname ten#1\endcsname % change the current font 1454*6a54128fSAndroid Build Coastguard Worker} 1455*6a54128fSAndroid Build Coastguard Worker 1456*6a54128fSAndroid Build Coastguard Worker% Select #1 fonts with the current style. 1457*6a54128fSAndroid Build Coastguard Worker% 1458*6a54128fSAndroid Build Coastguard Worker\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} 1459*6a54128fSAndroid Build Coastguard Worker 1460*6a54128fSAndroid Build Coastguard Worker\def\rm{\fam=0 \setfontstyle{rm}} 1461*6a54128fSAndroid Build Coastguard Worker\def\it{\fam=\itfam \setfontstyle{it}} 1462*6a54128fSAndroid Build Coastguard Worker\def\sl{\fam=\slfam \setfontstyle{sl}} 1463*6a54128fSAndroid Build Coastguard Worker\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} 1464*6a54128fSAndroid Build Coastguard Worker\def\tt{\fam=\ttfam \setfontstyle{tt}} 1465*6a54128fSAndroid Build Coastguard Worker 1466*6a54128fSAndroid Build Coastguard Worker% Texinfo sort of supports the sans serif font style, which plain TeX does not. 1467*6a54128fSAndroid Build Coastguard Worker% So we set up a \sf. 1468*6a54128fSAndroid Build Coastguard Worker\newfam\sffam 1469*6a54128fSAndroid Build Coastguard Worker\def\sf{\fam=\sffam \setfontstyle{sf}} 1470*6a54128fSAndroid Build Coastguard Worker\let\li = \sf % Sometimes we call it \li, not \sf. 1471*6a54128fSAndroid Build Coastguard Worker 1472*6a54128fSAndroid Build Coastguard Worker% We don't need math for this font style. 1473*6a54128fSAndroid Build Coastguard Worker\def\ttsl{\setfontstyle{ttsl}} 1474*6a54128fSAndroid Build Coastguard Worker 1475*6a54128fSAndroid Build Coastguard Worker% Default leading. 1476*6a54128fSAndroid Build Coastguard Worker\newdimen\textleading \textleading = 13.2pt 1477*6a54128fSAndroid Build Coastguard Worker 1478*6a54128fSAndroid Build Coastguard Worker% Set the baselineskip to #1, and the lineskip and strut size 1479*6a54128fSAndroid Build Coastguard Worker% correspondingly. There is no deep meaning behind these magic numbers 1480*6a54128fSAndroid Build Coastguard Worker% used as factors; they just match (closely enough) what Knuth defined. 1481*6a54128fSAndroid Build Coastguard Worker% 1482*6a54128fSAndroid Build Coastguard Worker\def\lineskipfactor{.08333} 1483*6a54128fSAndroid Build Coastguard Worker\def\strutheightpercent{.70833} 1484*6a54128fSAndroid Build Coastguard Worker\def\strutdepthpercent {.29167} 1485*6a54128fSAndroid Build Coastguard Worker% 1486*6a54128fSAndroid Build Coastguard Worker\def\setleading#1{% 1487*6a54128fSAndroid Build Coastguard Worker \normalbaselineskip = #1\relax 1488*6a54128fSAndroid Build Coastguard Worker \normallineskip = \lineskipfactor\normalbaselineskip 1489*6a54128fSAndroid Build Coastguard Worker \normalbaselines 1490*6a54128fSAndroid Build Coastguard Worker \setbox\strutbox =\hbox{% 1491*6a54128fSAndroid Build Coastguard Worker \vrule width0pt height\strutheightpercent\baselineskip 1492*6a54128fSAndroid Build Coastguard Worker depth \strutdepthpercent \baselineskip 1493*6a54128fSAndroid Build Coastguard Worker }% 1494*6a54128fSAndroid Build Coastguard Worker} 1495*6a54128fSAndroid Build Coastguard Worker 1496*6a54128fSAndroid Build Coastguard Worker% Set the font macro #1 to the font named #2, adding on the 1497*6a54128fSAndroid Build Coastguard Worker% specified font prefix (normally `cm'). 1498*6a54128fSAndroid Build Coastguard Worker% #3 is the font's design size, #4 is a scale factor 1499*6a54128fSAndroid Build Coastguard Worker\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} 1500*6a54128fSAndroid Build Coastguard Worker 1501*6a54128fSAndroid Build Coastguard Worker% Use cm as the default font prefix. 1502*6a54128fSAndroid Build Coastguard Worker% To specify the font prefix, you must define \fontprefix 1503*6a54128fSAndroid Build Coastguard Worker% before you read in texinfo.tex. 1504*6a54128fSAndroid Build Coastguard Worker\ifx\fontprefix\undefined 1505*6a54128fSAndroid Build Coastguard Worker\def\fontprefix{cm} 1506*6a54128fSAndroid Build Coastguard Worker\fi 1507*6a54128fSAndroid Build Coastguard Worker% Support font families that don't use the same naming scheme as CM. 1508*6a54128fSAndroid Build Coastguard Worker\def\rmshape{r} 1509*6a54128fSAndroid Build Coastguard Worker\def\rmbshape{bx} %where the normal face is bold 1510*6a54128fSAndroid Build Coastguard Worker\def\bfshape{b} 1511*6a54128fSAndroid Build Coastguard Worker\def\bxshape{bx} 1512*6a54128fSAndroid Build Coastguard Worker\def\ttshape{tt} 1513*6a54128fSAndroid Build Coastguard Worker\def\ttbshape{tt} 1514*6a54128fSAndroid Build Coastguard Worker\def\ttslshape{sltt} 1515*6a54128fSAndroid Build Coastguard Worker\def\itshape{ti} 1516*6a54128fSAndroid Build Coastguard Worker\def\itbshape{bxti} 1517*6a54128fSAndroid Build Coastguard Worker\def\slshape{sl} 1518*6a54128fSAndroid Build Coastguard Worker\def\slbshape{bxsl} 1519*6a54128fSAndroid Build Coastguard Worker\def\sfshape{ss} 1520*6a54128fSAndroid Build Coastguard Worker\def\sfbshape{ss} 1521*6a54128fSAndroid Build Coastguard Worker\def\scshape{csc} 1522*6a54128fSAndroid Build Coastguard Worker\def\scbshape{csc} 1523*6a54128fSAndroid Build Coastguard Worker 1524*6a54128fSAndroid Build Coastguard Worker% Text fonts (11.2pt, magstep1). 1525*6a54128fSAndroid Build Coastguard Worker\def\textnominalsize{11pt} 1526*6a54128fSAndroid Build Coastguard Worker\edef\mainmagstep{\magstephalf} 1527*6a54128fSAndroid Build Coastguard Worker\setfont\textrm\rmshape{10}{\mainmagstep} 1528*6a54128fSAndroid Build Coastguard Worker\setfont\texttt\ttshape{10}{\mainmagstep} 1529*6a54128fSAndroid Build Coastguard Worker\setfont\textbf\bfshape{10}{\mainmagstep} 1530*6a54128fSAndroid Build Coastguard Worker\setfont\textit\itshape{10}{\mainmagstep} 1531*6a54128fSAndroid Build Coastguard Worker\setfont\textsl\slshape{10}{\mainmagstep} 1532*6a54128fSAndroid Build Coastguard Worker\setfont\textsf\sfshape{10}{\mainmagstep} 1533*6a54128fSAndroid Build Coastguard Worker\setfont\textsc\scshape{10}{\mainmagstep} 1534*6a54128fSAndroid Build Coastguard Worker\setfont\textttsl\ttslshape{10}{\mainmagstep} 1535*6a54128fSAndroid Build Coastguard Worker\font\texti=cmmi10 scaled \mainmagstep 1536*6a54128fSAndroid Build Coastguard Worker\font\textsy=cmsy10 scaled \mainmagstep 1537*6a54128fSAndroid Build Coastguard Worker 1538*6a54128fSAndroid Build Coastguard Worker% A few fonts for @defun names and args. 1539*6a54128fSAndroid Build Coastguard Worker\setfont\defbf\bfshape{10}{\magstep1} 1540*6a54128fSAndroid Build Coastguard Worker\setfont\deftt\ttshape{10}{\magstep1} 1541*6a54128fSAndroid Build Coastguard Worker\setfont\defttsl\ttslshape{10}{\magstep1} 1542*6a54128fSAndroid Build Coastguard Worker\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} 1543*6a54128fSAndroid Build Coastguard Worker 1544*6a54128fSAndroid Build Coastguard Worker% Fonts for indices, footnotes, small examples (9pt). 1545*6a54128fSAndroid Build Coastguard Worker\def\smallnominalsize{9pt} 1546*6a54128fSAndroid Build Coastguard Worker\setfont\smallrm\rmshape{9}{1000} 1547*6a54128fSAndroid Build Coastguard Worker\setfont\smalltt\ttshape{9}{1000} 1548*6a54128fSAndroid Build Coastguard Worker\setfont\smallbf\bfshape{10}{900} 1549*6a54128fSAndroid Build Coastguard Worker\setfont\smallit\itshape{9}{1000} 1550*6a54128fSAndroid Build Coastguard Worker\setfont\smallsl\slshape{9}{1000} 1551*6a54128fSAndroid Build Coastguard Worker\setfont\smallsf\sfshape{9}{1000} 1552*6a54128fSAndroid Build Coastguard Worker\setfont\smallsc\scshape{10}{900} 1553*6a54128fSAndroid Build Coastguard Worker\setfont\smallttsl\ttslshape{10}{900} 1554*6a54128fSAndroid Build Coastguard Worker\font\smalli=cmmi9 1555*6a54128fSAndroid Build Coastguard Worker\font\smallsy=cmsy9 1556*6a54128fSAndroid Build Coastguard Worker 1557*6a54128fSAndroid Build Coastguard Worker% Fonts for small examples (8pt). 1558*6a54128fSAndroid Build Coastguard Worker\def\smallernominalsize{8pt} 1559*6a54128fSAndroid Build Coastguard Worker\setfont\smallerrm\rmshape{8}{1000} 1560*6a54128fSAndroid Build Coastguard Worker\setfont\smallertt\ttshape{8}{1000} 1561*6a54128fSAndroid Build Coastguard Worker\setfont\smallerbf\bfshape{10}{800} 1562*6a54128fSAndroid Build Coastguard Worker\setfont\smallerit\itshape{8}{1000} 1563*6a54128fSAndroid Build Coastguard Worker\setfont\smallersl\slshape{8}{1000} 1564*6a54128fSAndroid Build Coastguard Worker\setfont\smallersf\sfshape{8}{1000} 1565*6a54128fSAndroid Build Coastguard Worker\setfont\smallersc\scshape{10}{800} 1566*6a54128fSAndroid Build Coastguard Worker\setfont\smallerttsl\ttslshape{10}{800} 1567*6a54128fSAndroid Build Coastguard Worker\font\smalleri=cmmi8 1568*6a54128fSAndroid Build Coastguard Worker\font\smallersy=cmsy8 1569*6a54128fSAndroid Build Coastguard Worker 1570*6a54128fSAndroid Build Coastguard Worker% Fonts for title page (20.4pt): 1571*6a54128fSAndroid Build Coastguard Worker\def\titlenominalsize{20pt} 1572*6a54128fSAndroid Build Coastguard Worker\setfont\titlerm\rmbshape{12}{\magstep3} 1573*6a54128fSAndroid Build Coastguard Worker\setfont\titleit\itbshape{10}{\magstep4} 1574*6a54128fSAndroid Build Coastguard Worker\setfont\titlesl\slbshape{10}{\magstep4} 1575*6a54128fSAndroid Build Coastguard Worker\setfont\titlett\ttbshape{12}{\magstep3} 1576*6a54128fSAndroid Build Coastguard Worker\setfont\titlettsl\ttslshape{10}{\magstep4} 1577*6a54128fSAndroid Build Coastguard Worker\setfont\titlesf\sfbshape{17}{\magstep1} 1578*6a54128fSAndroid Build Coastguard Worker\let\titlebf=\titlerm 1579*6a54128fSAndroid Build Coastguard Worker\setfont\titlesc\scbshape{10}{\magstep4} 1580*6a54128fSAndroid Build Coastguard Worker\font\titlei=cmmi12 scaled \magstep3 1581*6a54128fSAndroid Build Coastguard Worker\font\titlesy=cmsy10 scaled \magstep4 1582*6a54128fSAndroid Build Coastguard Worker\def\authorrm{\secrm} 1583*6a54128fSAndroid Build Coastguard Worker\def\authortt{\sectt} 1584*6a54128fSAndroid Build Coastguard Worker 1585*6a54128fSAndroid Build Coastguard Worker% Chapter (and unnumbered) fonts (17.28pt). 1586*6a54128fSAndroid Build Coastguard Worker\def\chapnominalsize{17pt} 1587*6a54128fSAndroid Build Coastguard Worker\setfont\chaprm\rmbshape{12}{\magstep2} 1588*6a54128fSAndroid Build Coastguard Worker\setfont\chapit\itbshape{10}{\magstep3} 1589*6a54128fSAndroid Build Coastguard Worker\setfont\chapsl\slbshape{10}{\magstep3} 1590*6a54128fSAndroid Build Coastguard Worker\setfont\chaptt\ttbshape{12}{\magstep2} 1591*6a54128fSAndroid Build Coastguard Worker\setfont\chapttsl\ttslshape{10}{\magstep3} 1592*6a54128fSAndroid Build Coastguard Worker\setfont\chapsf\sfbshape{17}{1000} 1593*6a54128fSAndroid Build Coastguard Worker\let\chapbf=\chaprm 1594*6a54128fSAndroid Build Coastguard Worker\setfont\chapsc\scbshape{10}{\magstep3} 1595*6a54128fSAndroid Build Coastguard Worker\font\chapi=cmmi12 scaled \magstep2 1596*6a54128fSAndroid Build Coastguard Worker\font\chapsy=cmsy10 scaled \magstep3 1597*6a54128fSAndroid Build Coastguard Worker 1598*6a54128fSAndroid Build Coastguard Worker% Section fonts (14.4pt). 1599*6a54128fSAndroid Build Coastguard Worker\def\secnominalsize{14pt} 1600*6a54128fSAndroid Build Coastguard Worker\setfont\secrm\rmbshape{12}{\magstep1} 1601*6a54128fSAndroid Build Coastguard Worker\setfont\secit\itbshape{10}{\magstep2} 1602*6a54128fSAndroid Build Coastguard Worker\setfont\secsl\slbshape{10}{\magstep2} 1603*6a54128fSAndroid Build Coastguard Worker\setfont\sectt\ttbshape{12}{\magstep1} 1604*6a54128fSAndroid Build Coastguard Worker\setfont\secttsl\ttslshape{10}{\magstep2} 1605*6a54128fSAndroid Build Coastguard Worker\setfont\secsf\sfbshape{12}{\magstep1} 1606*6a54128fSAndroid Build Coastguard Worker\let\secbf\secrm 1607*6a54128fSAndroid Build Coastguard Worker\setfont\secsc\scbshape{10}{\magstep2} 1608*6a54128fSAndroid Build Coastguard Worker\font\seci=cmmi12 scaled \magstep1 1609*6a54128fSAndroid Build Coastguard Worker\font\secsy=cmsy10 scaled \magstep2 1610*6a54128fSAndroid Build Coastguard Worker 1611*6a54128fSAndroid Build Coastguard Worker% Subsection fonts (13.15pt). 1612*6a54128fSAndroid Build Coastguard Worker\def\ssecnominalsize{13pt} 1613*6a54128fSAndroid Build Coastguard Worker\setfont\ssecrm\rmbshape{12}{\magstephalf} 1614*6a54128fSAndroid Build Coastguard Worker\setfont\ssecit\itbshape{10}{1315} 1615*6a54128fSAndroid Build Coastguard Worker\setfont\ssecsl\slbshape{10}{1315} 1616*6a54128fSAndroid Build Coastguard Worker\setfont\ssectt\ttbshape{12}{\magstephalf} 1617*6a54128fSAndroid Build Coastguard Worker\setfont\ssecttsl\ttslshape{10}{1315} 1618*6a54128fSAndroid Build Coastguard Worker\setfont\ssecsf\sfbshape{12}{\magstephalf} 1619*6a54128fSAndroid Build Coastguard Worker\let\ssecbf\ssecrm 1620*6a54128fSAndroid Build Coastguard Worker\setfont\ssecsc\scbshape{10}{1315} 1621*6a54128fSAndroid Build Coastguard Worker\font\sseci=cmmi12 scaled \magstephalf 1622*6a54128fSAndroid Build Coastguard Worker\font\ssecsy=cmsy10 scaled 1315 1623*6a54128fSAndroid Build Coastguard Worker 1624*6a54128fSAndroid Build Coastguard Worker% Reduced fonts for @acro in text (10pt). 1625*6a54128fSAndroid Build Coastguard Worker\def\reducednominalsize{10pt} 1626*6a54128fSAndroid Build Coastguard Worker\setfont\reducedrm\rmshape{10}{1000} 1627*6a54128fSAndroid Build Coastguard Worker\setfont\reducedtt\ttshape{10}{1000} 1628*6a54128fSAndroid Build Coastguard Worker\setfont\reducedbf\bfshape{10}{1000} 1629*6a54128fSAndroid Build Coastguard Worker\setfont\reducedit\itshape{10}{1000} 1630*6a54128fSAndroid Build Coastguard Worker\setfont\reducedsl\slshape{10}{1000} 1631*6a54128fSAndroid Build Coastguard Worker\setfont\reducedsf\sfshape{10}{1000} 1632*6a54128fSAndroid Build Coastguard Worker\setfont\reducedsc\scshape{10}{1000} 1633*6a54128fSAndroid Build Coastguard Worker\setfont\reducedttsl\ttslshape{10}{1000} 1634*6a54128fSAndroid Build Coastguard Worker\font\reducedi=cmmi10 1635*6a54128fSAndroid Build Coastguard Worker\font\reducedsy=cmsy10 1636*6a54128fSAndroid Build Coastguard Worker 1637*6a54128fSAndroid Build Coastguard Worker% In order for the font changes to affect most math symbols and letters, 1638*6a54128fSAndroid Build Coastguard Worker% we have to define the \textfont of the standard families. Since 1639*6a54128fSAndroid Build Coastguard Worker% texinfo doesn't allow for producing subscripts and superscripts except 1640*6a54128fSAndroid Build Coastguard Worker% in the main text, we don't bother to reset \scriptfont and 1641*6a54128fSAndroid Build Coastguard Worker% \scriptscriptfont (which would also require loading a lot more fonts). 1642*6a54128fSAndroid Build Coastguard Worker% 1643*6a54128fSAndroid Build Coastguard Worker\def\resetmathfonts{% 1644*6a54128fSAndroid Build Coastguard Worker \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy 1645*6a54128fSAndroid Build Coastguard Worker \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf 1646*6a54128fSAndroid Build Coastguard Worker \textfont\ttfam=\tentt \textfont\sffam=\tensf 1647*6a54128fSAndroid Build Coastguard Worker} 1648*6a54128fSAndroid Build Coastguard Worker 1649*6a54128fSAndroid Build Coastguard Worker% The font-changing commands redefine the meanings of \tenSTYLE, instead 1650*6a54128fSAndroid Build Coastguard Worker% of just \STYLE. We do this because \STYLE needs to also set the 1651*6a54128fSAndroid Build Coastguard Worker% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire 1652*6a54128fSAndroid Build Coastguard Worker% \tenSTYLE to set the current font. 1653*6a54128fSAndroid Build Coastguard Worker% 1654*6a54128fSAndroid Build Coastguard Worker% Each font-changing command also sets the names \lsize (one size lower) 1655*6a54128fSAndroid Build Coastguard Worker% and \lllsize (three sizes lower). These relative commands are used in 1656*6a54128fSAndroid Build Coastguard Worker% the LaTeX logo and acronyms. 1657*6a54128fSAndroid Build Coastguard Worker% 1658*6a54128fSAndroid Build Coastguard Worker% This all needs generalizing, badly. 1659*6a54128fSAndroid Build Coastguard Worker% 1660*6a54128fSAndroid Build Coastguard Worker\def\textfonts{% 1661*6a54128fSAndroid Build Coastguard Worker \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl 1662*6a54128fSAndroid Build Coastguard Worker \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc 1663*6a54128fSAndroid Build Coastguard Worker \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy 1664*6a54128fSAndroid Build Coastguard Worker \let\tenttsl=\textttsl 1665*6a54128fSAndroid Build Coastguard Worker \def\curfontsize{text}% 1666*6a54128fSAndroid Build Coastguard Worker \def\lsize{reduced}\def\lllsize{smaller}% 1667*6a54128fSAndroid Build Coastguard Worker \resetmathfonts \setleading{\textleading}} 1668*6a54128fSAndroid Build Coastguard Worker\def\titlefonts{% 1669*6a54128fSAndroid Build Coastguard Worker \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl 1670*6a54128fSAndroid Build Coastguard Worker \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc 1671*6a54128fSAndroid Build Coastguard Worker \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy 1672*6a54128fSAndroid Build Coastguard Worker \let\tenttsl=\titlettsl 1673*6a54128fSAndroid Build Coastguard Worker \def\curfontsize{title}% 1674*6a54128fSAndroid Build Coastguard Worker \def\lsize{chap}\def\lllsize{subsec}% 1675*6a54128fSAndroid Build Coastguard Worker \resetmathfonts \setleading{25pt}} 1676*6a54128fSAndroid Build Coastguard Worker\def\titlefont#1{{\titlefonts\rm #1}} 1677*6a54128fSAndroid Build Coastguard Worker\def\chapfonts{% 1678*6a54128fSAndroid Build Coastguard Worker \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl 1679*6a54128fSAndroid Build Coastguard Worker \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc 1680*6a54128fSAndroid Build Coastguard Worker \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy 1681*6a54128fSAndroid Build Coastguard Worker \let\tenttsl=\chapttsl 1682*6a54128fSAndroid Build Coastguard Worker \def\curfontsize{chap}% 1683*6a54128fSAndroid Build Coastguard Worker \def\lsize{sec}\def\lllsize{text}% 1684*6a54128fSAndroid Build Coastguard Worker \resetmathfonts \setleading{19pt}} 1685*6a54128fSAndroid Build Coastguard Worker\def\secfonts{% 1686*6a54128fSAndroid Build Coastguard Worker \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl 1687*6a54128fSAndroid Build Coastguard Worker \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc 1688*6a54128fSAndroid Build Coastguard Worker \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy 1689*6a54128fSAndroid Build Coastguard Worker \let\tenttsl=\secttsl 1690*6a54128fSAndroid Build Coastguard Worker \def\curfontsize{sec}% 1691*6a54128fSAndroid Build Coastguard Worker \def\lsize{subsec}\def\lllsize{reduced}% 1692*6a54128fSAndroid Build Coastguard Worker \resetmathfonts \setleading{16pt}} 1693*6a54128fSAndroid Build Coastguard Worker\def\subsecfonts{% 1694*6a54128fSAndroid Build Coastguard Worker \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl 1695*6a54128fSAndroid Build Coastguard Worker \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc 1696*6a54128fSAndroid Build Coastguard Worker \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy 1697*6a54128fSAndroid Build Coastguard Worker \let\tenttsl=\ssecttsl 1698*6a54128fSAndroid Build Coastguard Worker \def\curfontsize{ssec}% 1699*6a54128fSAndroid Build Coastguard Worker \def\lsize{text}\def\lllsize{small}% 1700*6a54128fSAndroid Build Coastguard Worker \resetmathfonts \setleading{15pt}} 1701*6a54128fSAndroid Build Coastguard Worker\let\subsubsecfonts = \subsecfonts 1702*6a54128fSAndroid Build Coastguard Worker\def\reducedfonts{% 1703*6a54128fSAndroid Build Coastguard Worker \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl 1704*6a54128fSAndroid Build Coastguard Worker \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc 1705*6a54128fSAndroid Build Coastguard Worker \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy 1706*6a54128fSAndroid Build Coastguard Worker \let\tenttsl=\reducedttsl 1707*6a54128fSAndroid Build Coastguard Worker \def\curfontsize{reduced}% 1708*6a54128fSAndroid Build Coastguard Worker \def\lsize{small}\def\lllsize{smaller}% 1709*6a54128fSAndroid Build Coastguard Worker \resetmathfonts \setleading{10.5pt}} 1710*6a54128fSAndroid Build Coastguard Worker\def\smallfonts{% 1711*6a54128fSAndroid Build Coastguard Worker \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl 1712*6a54128fSAndroid Build Coastguard Worker \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc 1713*6a54128fSAndroid Build Coastguard Worker \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy 1714*6a54128fSAndroid Build Coastguard Worker \let\tenttsl=\smallttsl 1715*6a54128fSAndroid Build Coastguard Worker \def\curfontsize{small}% 1716*6a54128fSAndroid Build Coastguard Worker \def\lsize{smaller}\def\lllsize{smaller}% 1717*6a54128fSAndroid Build Coastguard Worker \resetmathfonts \setleading{10.5pt}} 1718*6a54128fSAndroid Build Coastguard Worker\def\smallerfonts{% 1719*6a54128fSAndroid Build Coastguard Worker \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl 1720*6a54128fSAndroid Build Coastguard Worker \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc 1721*6a54128fSAndroid Build Coastguard Worker \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy 1722*6a54128fSAndroid Build Coastguard Worker \let\tenttsl=\smallerttsl 1723*6a54128fSAndroid Build Coastguard Worker \def\curfontsize{smaller}% 1724*6a54128fSAndroid Build Coastguard Worker \def\lsize{smaller}\def\lllsize{smaller}% 1725*6a54128fSAndroid Build Coastguard Worker \resetmathfonts \setleading{9.5pt}} 1726*6a54128fSAndroid Build Coastguard Worker 1727*6a54128fSAndroid Build Coastguard Worker% Set the fonts to use with the @small... environments. 1728*6a54128fSAndroid Build Coastguard Worker\let\smallexamplefonts = \smallfonts 1729*6a54128fSAndroid Build Coastguard Worker 1730*6a54128fSAndroid Build Coastguard Worker% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample 1731*6a54128fSAndroid Build Coastguard Worker% can fit this many characters: 1732*6a54128fSAndroid Build Coastguard Worker% 8.5x11=86 smallbook=72 a4=90 a5=69 1733*6a54128fSAndroid Build Coastguard Worker% If we use \scriptfonts (8pt), then we can fit this many characters: 1734*6a54128fSAndroid Build Coastguard Worker% 8.5x11=90+ smallbook=80 a4=90+ a5=77 1735*6a54128fSAndroid Build Coastguard Worker% For me, subjectively, the few extra characters that fit aren't worth 1736*6a54128fSAndroid Build Coastguard Worker% the additional smallness of 8pt. So I'm making the default 9pt. 1737*6a54128fSAndroid Build Coastguard Worker% 1738*6a54128fSAndroid Build Coastguard Worker% By the way, for comparison, here's what fits with @example (10pt): 1739*6a54128fSAndroid Build Coastguard Worker% 8.5x11=71 smallbook=60 a4=75 a5=58 1740*6a54128fSAndroid Build Coastguard Worker% 1741*6a54128fSAndroid Build Coastguard Worker% I wish the USA used A4 paper. 1742*6a54128fSAndroid Build Coastguard Worker% --karl, 24jan03. 1743*6a54128fSAndroid Build Coastguard Worker 1744*6a54128fSAndroid Build Coastguard Worker 1745*6a54128fSAndroid Build Coastguard Worker% Set up the default fonts, so we can use them for creating boxes. 1746*6a54128fSAndroid Build Coastguard Worker% 1747*6a54128fSAndroid Build Coastguard Worker\textfonts \rm 1748*6a54128fSAndroid Build Coastguard Worker 1749*6a54128fSAndroid Build Coastguard Worker% Define these so they can be easily changed for other fonts. 1750*6a54128fSAndroid Build Coastguard Worker\def\angleleft{$\langle$} 1751*6a54128fSAndroid Build Coastguard Worker\def\angleright{$\rangle$} 1752*6a54128fSAndroid Build Coastguard Worker 1753*6a54128fSAndroid Build Coastguard Worker% Count depth in font-changes, for error checks 1754*6a54128fSAndroid Build Coastguard Worker\newcount\fontdepth \fontdepth=0 1755*6a54128fSAndroid Build Coastguard Worker 1756*6a54128fSAndroid Build Coastguard Worker% Fonts for short table of contents. 1757*6a54128fSAndroid Build Coastguard Worker\setfont\shortcontrm\rmshape{12}{1000} 1758*6a54128fSAndroid Build Coastguard Worker\setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12 1759*6a54128fSAndroid Build Coastguard Worker\setfont\shortcontsl\slshape{12}{1000} 1760*6a54128fSAndroid Build Coastguard Worker\setfont\shortconttt\ttshape{12}{1000} 1761*6a54128fSAndroid Build Coastguard Worker 1762*6a54128fSAndroid Build Coastguard Worker%% Add scribe-like font environments, plus @l for inline lisp (usually sans 1763*6a54128fSAndroid Build Coastguard Worker%% serif) and @ii for TeX italic 1764*6a54128fSAndroid Build Coastguard Worker 1765*6a54128fSAndroid Build Coastguard Worker% \smartitalic{ARG} outputs arg in italics, followed by an italic correction 1766*6a54128fSAndroid Build Coastguard Worker% unless the following character is such as not to need one. 1767*6a54128fSAndroid Build Coastguard Worker\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else 1768*6a54128fSAndroid Build Coastguard Worker \ptexslash\fi\fi\fi} 1769*6a54128fSAndroid Build Coastguard Worker\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} 1770*6a54128fSAndroid Build Coastguard Worker\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} 1771*6a54128fSAndroid Build Coastguard Worker 1772*6a54128fSAndroid Build Coastguard Worker% like \smartslanted except unconditionally uses \ttsl. 1773*6a54128fSAndroid Build Coastguard Worker% @var is set to this for defun arguments. 1774*6a54128fSAndroid Build Coastguard Worker\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} 1775*6a54128fSAndroid Build Coastguard Worker 1776*6a54128fSAndroid Build Coastguard Worker% like \smartslanted except unconditionally use \sl. We never want 1777*6a54128fSAndroid Build Coastguard Worker% ttsl for book titles, do we? 1778*6a54128fSAndroid Build Coastguard Worker\def\cite#1{{\sl #1}\futurelet\next\smartitalicx} 1779*6a54128fSAndroid Build Coastguard Worker 1780*6a54128fSAndroid Build Coastguard Worker\let\i=\smartitalic 1781*6a54128fSAndroid Build Coastguard Worker\let\slanted=\smartslanted 1782*6a54128fSAndroid Build Coastguard Worker\let\var=\smartslanted 1783*6a54128fSAndroid Build Coastguard Worker\let\dfn=\smartslanted 1784*6a54128fSAndroid Build Coastguard Worker\let\emph=\smartitalic 1785*6a54128fSAndroid Build Coastguard Worker 1786*6a54128fSAndroid Build Coastguard Worker% @b, explicit bold. 1787*6a54128fSAndroid Build Coastguard Worker\def\b#1{{\bf #1}} 1788*6a54128fSAndroid Build Coastguard Worker\let\strong=\b 1789*6a54128fSAndroid Build Coastguard Worker 1790*6a54128fSAndroid Build Coastguard Worker% @sansserif, explicit sans. 1791*6a54128fSAndroid Build Coastguard Worker\def\sansserif#1{{\sf #1}} 1792*6a54128fSAndroid Build Coastguard Worker 1793*6a54128fSAndroid Build Coastguard Worker% We can't just use \exhyphenpenalty, because that only has effect at 1794*6a54128fSAndroid Build Coastguard Worker% the end of a paragraph. Restore normal hyphenation at the end of the 1795*6a54128fSAndroid Build Coastguard Worker% group within which \nohyphenation is presumably called. 1796*6a54128fSAndroid Build Coastguard Worker% 1797*6a54128fSAndroid Build Coastguard Worker\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} 1798*6a54128fSAndroid Build Coastguard Worker\def\restorehyphenation{\hyphenchar\font = `- } 1799*6a54128fSAndroid Build Coastguard Worker 1800*6a54128fSAndroid Build Coastguard Worker% Set sfcode to normal for the chars that usually have another value. 1801*6a54128fSAndroid Build Coastguard Worker% Can't use plain's \frenchspacing because it uses the `\x notation, and 1802*6a54128fSAndroid Build Coastguard Worker% sometimes \x has an active definition that messes things up. 1803*6a54128fSAndroid Build Coastguard Worker% 1804*6a54128fSAndroid Build Coastguard Worker\chardef\colonChar = `\: 1805*6a54128fSAndroid Build Coastguard Worker\chardef\commaChar = `\, 1806*6a54128fSAndroid Build Coastguard Worker\chardef\dotChar = `\. 1807*6a54128fSAndroid Build Coastguard Worker\chardef\exclamChar= `\! 1808*6a54128fSAndroid Build Coastguard Worker\chardef\questChar = `\? 1809*6a54128fSAndroid Build Coastguard Worker\chardef\semiChar = `\; 1810*6a54128fSAndroid Build Coastguard Worker% 1811*6a54128fSAndroid Build Coastguard Worker\catcode`@=11 1812*6a54128fSAndroid Build Coastguard Worker \def\plainfrenchspacing{% 1813*6a54128fSAndroid Build Coastguard Worker \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m 1814*6a54128fSAndroid Build Coastguard Worker \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m 1815*6a54128fSAndroid Build Coastguard Worker \def\endofsentencespacefactor{1000}% for @. and friends 1816*6a54128fSAndroid Build Coastguard Worker } 1817*6a54128fSAndroid Build Coastguard Worker \def\plainnonfrenchspacing{% 1818*6a54128fSAndroid Build Coastguard Worker \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 1819*6a54128fSAndroid Build Coastguard Worker \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 1820*6a54128fSAndroid Build Coastguard Worker \def\endofsentencespacefactor{3000}% for @. and friends 1821*6a54128fSAndroid Build Coastguard Worker } 1822*6a54128fSAndroid Build Coastguard Worker\catcode`@=\other 1823*6a54128fSAndroid Build Coastguard Worker\def\endofsentencespacefactor{3000}% default 1824*6a54128fSAndroid Build Coastguard Worker 1825*6a54128fSAndroid Build Coastguard Worker\def\t#1{% 1826*6a54128fSAndroid Build Coastguard Worker {\tt \rawbackslash \plainfrenchspacing #1}% 1827*6a54128fSAndroid Build Coastguard Worker \null 1828*6a54128fSAndroid Build Coastguard Worker} 1829*6a54128fSAndroid Build Coastguard Worker\def\samp#1{`\tclose{#1}'\null} 1830*6a54128fSAndroid Build Coastguard Worker\setfont\keyrm\rmshape{8}{1000} 1831*6a54128fSAndroid Build Coastguard Worker\font\keysy=cmsy9 1832*6a54128fSAndroid Build Coastguard Worker\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% 1833*6a54128fSAndroid Build Coastguard Worker \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% 1834*6a54128fSAndroid Build Coastguard Worker \vbox{\hrule\kern-0.4pt 1835*6a54128fSAndroid Build Coastguard Worker \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% 1836*6a54128fSAndroid Build Coastguard Worker \kern-0.4pt\hrule}% 1837*6a54128fSAndroid Build Coastguard Worker \kern-.06em\raise0.4pt\hbox{\angleright}}}} 1838*6a54128fSAndroid Build Coastguard Worker% The old definition, with no lozenge: 1839*6a54128fSAndroid Build Coastguard Worker%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} 1840*6a54128fSAndroid Build Coastguard Worker\def\ctrl #1{{\tt \rawbackslash \hat}#1} 1841*6a54128fSAndroid Build Coastguard Worker 1842*6a54128fSAndroid Build Coastguard Worker% @file, @option are the same as @samp. 1843*6a54128fSAndroid Build Coastguard Worker\let\file=\samp 1844*6a54128fSAndroid Build Coastguard Worker\let\option=\samp 1845*6a54128fSAndroid Build Coastguard Worker 1846*6a54128fSAndroid Build Coastguard Worker% @code is a modification of @t, 1847*6a54128fSAndroid Build Coastguard Worker% which makes spaces the same size as normal in the surrounding text. 1848*6a54128fSAndroid Build Coastguard Worker\def\tclose#1{% 1849*6a54128fSAndroid Build Coastguard Worker {% 1850*6a54128fSAndroid Build Coastguard Worker % Change normal interword space to be same as for the current font. 1851*6a54128fSAndroid Build Coastguard Worker \spaceskip = \fontdimen2\font 1852*6a54128fSAndroid Build Coastguard Worker % 1853*6a54128fSAndroid Build Coastguard Worker % Switch to typewriter. 1854*6a54128fSAndroid Build Coastguard Worker \tt 1855*6a54128fSAndroid Build Coastguard Worker % 1856*6a54128fSAndroid Build Coastguard Worker % But `\ ' produces the large typewriter interword space. 1857*6a54128fSAndroid Build Coastguard Worker \def\ {{\spaceskip = 0pt{} }}% 1858*6a54128fSAndroid Build Coastguard Worker % 1859*6a54128fSAndroid Build Coastguard Worker % Turn off hyphenation. 1860*6a54128fSAndroid Build Coastguard Worker \nohyphenation 1861*6a54128fSAndroid Build Coastguard Worker % 1862*6a54128fSAndroid Build Coastguard Worker \rawbackslash 1863*6a54128fSAndroid Build Coastguard Worker \plainfrenchspacing 1864*6a54128fSAndroid Build Coastguard Worker #1% 1865*6a54128fSAndroid Build Coastguard Worker }% 1866*6a54128fSAndroid Build Coastguard Worker \null 1867*6a54128fSAndroid Build Coastguard Worker} 1868*6a54128fSAndroid Build Coastguard Worker 1869*6a54128fSAndroid Build Coastguard Worker% We *must* turn on hyphenation at `-' and `_' in @code. 1870*6a54128fSAndroid Build Coastguard Worker% Otherwise, it is too hard to avoid overfull hboxes 1871*6a54128fSAndroid Build Coastguard Worker% in the Emacs manual, the Library manual, etc. 1872*6a54128fSAndroid Build Coastguard Worker 1873*6a54128fSAndroid Build Coastguard Worker% Unfortunately, TeX uses one parameter (\hyphenchar) to control 1874*6a54128fSAndroid Build Coastguard Worker% both hyphenation at - and hyphenation within words. 1875*6a54128fSAndroid Build Coastguard Worker% We must therefore turn them both off (\tclose does that) 1876*6a54128fSAndroid Build Coastguard Worker% and arrange explicitly to hyphenate at a dash. 1877*6a54128fSAndroid Build Coastguard Worker% -- rms. 1878*6a54128fSAndroid Build Coastguard Worker{ 1879*6a54128fSAndroid Build Coastguard Worker \catcode`\-=\active 1880*6a54128fSAndroid Build Coastguard Worker \catcode`\_=\active 1881*6a54128fSAndroid Build Coastguard Worker % 1882*6a54128fSAndroid Build Coastguard Worker \global\def\code{\begingroup 1883*6a54128fSAndroid Build Coastguard Worker \catcode`\-=\active \catcode`\_=\active 1884*6a54128fSAndroid Build Coastguard Worker \ifallowcodebreaks 1885*6a54128fSAndroid Build Coastguard Worker \let-\codedash 1886*6a54128fSAndroid Build Coastguard Worker \let_\codeunder 1887*6a54128fSAndroid Build Coastguard Worker \else 1888*6a54128fSAndroid Build Coastguard Worker \let-\realdash 1889*6a54128fSAndroid Build Coastguard Worker \let_\realunder 1890*6a54128fSAndroid Build Coastguard Worker \fi 1891*6a54128fSAndroid Build Coastguard Worker \codex 1892*6a54128fSAndroid Build Coastguard Worker } 1893*6a54128fSAndroid Build Coastguard Worker} 1894*6a54128fSAndroid Build Coastguard Worker 1895*6a54128fSAndroid Build Coastguard Worker\def\realdash{-} 1896*6a54128fSAndroid Build Coastguard Worker\def\codedash{-\discretionary{}{}{}} 1897*6a54128fSAndroid Build Coastguard Worker\def\codeunder{% 1898*6a54128fSAndroid Build Coastguard Worker % this is all so @math{@code{var_name}+1} can work. In math mode, _ 1899*6a54128fSAndroid Build Coastguard Worker % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) 1900*6a54128fSAndroid Build Coastguard Worker % will therefore expand the active definition of _, which is us 1901*6a54128fSAndroid Build Coastguard Worker % (inside @code that is), therefore an endless loop. 1902*6a54128fSAndroid Build Coastguard Worker \ifusingtt{\ifmmode 1903*6a54128fSAndroid Build Coastguard Worker \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. 1904*6a54128fSAndroid Build Coastguard Worker \else\normalunderscore \fi 1905*6a54128fSAndroid Build Coastguard Worker \discretionary{}{}{}}% 1906*6a54128fSAndroid Build Coastguard Worker {\_}% 1907*6a54128fSAndroid Build Coastguard Worker} 1908*6a54128fSAndroid Build Coastguard Worker\def\codex #1{\tclose{#1}\endgroup} 1909*6a54128fSAndroid Build Coastguard Worker 1910*6a54128fSAndroid Build Coastguard Worker% An additional complication: the above will allow breaks after, e.g., 1911*6a54128fSAndroid Build Coastguard Worker% each of the four underscores in __typeof__. This is undesirable in 1912*6a54128fSAndroid Build Coastguard Worker% some manuals, especially if they don't have long identifiers in 1913*6a54128fSAndroid Build Coastguard Worker% general. @allowcodebreaks provides a way to control this. 1914*6a54128fSAndroid Build Coastguard Worker% 1915*6a54128fSAndroid Build Coastguard Worker\newif\ifallowcodebreaks \allowcodebreakstrue 1916*6a54128fSAndroid Build Coastguard Worker 1917*6a54128fSAndroid Build Coastguard Worker\def\keywordtrue{true} 1918*6a54128fSAndroid Build Coastguard Worker\def\keywordfalse{false} 1919*6a54128fSAndroid Build Coastguard Worker 1920*6a54128fSAndroid Build Coastguard Worker\parseargdef\allowcodebreaks{% 1921*6a54128fSAndroid Build Coastguard Worker \def\txiarg{#1}% 1922*6a54128fSAndroid Build Coastguard Worker \ifx\txiarg\keywordtrue 1923*6a54128fSAndroid Build Coastguard Worker \allowcodebreakstrue 1924*6a54128fSAndroid Build Coastguard Worker \else\ifx\txiarg\keywordfalse 1925*6a54128fSAndroid Build Coastguard Worker \allowcodebreaksfalse 1926*6a54128fSAndroid Build Coastguard Worker \else 1927*6a54128fSAndroid Build Coastguard Worker \errhelp = \EMsimple 1928*6a54128fSAndroid Build Coastguard Worker \errmessage{Unknown @allowcodebreaks option `\txiarg'}% 1929*6a54128fSAndroid Build Coastguard Worker \fi\fi 1930*6a54128fSAndroid Build Coastguard Worker} 1931*6a54128fSAndroid Build Coastguard Worker 1932*6a54128fSAndroid Build Coastguard Worker% @kbd is like @code, except that if the argument is just one @key command, 1933*6a54128fSAndroid Build Coastguard Worker% then @kbd has no effect. 1934*6a54128fSAndroid Build Coastguard Worker 1935*6a54128fSAndroid Build Coastguard Worker% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), 1936*6a54128fSAndroid Build Coastguard Worker% `example' (@kbd uses ttsl only inside of @example and friends), 1937*6a54128fSAndroid Build Coastguard Worker% or `code' (@kbd uses normal tty font always). 1938*6a54128fSAndroid Build Coastguard Worker\parseargdef\kbdinputstyle{% 1939*6a54128fSAndroid Build Coastguard Worker \def\txiarg{#1}% 1940*6a54128fSAndroid Build Coastguard Worker \ifx\txiarg\worddistinct 1941*6a54128fSAndroid Build Coastguard Worker \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% 1942*6a54128fSAndroid Build Coastguard Worker \else\ifx\txiarg\wordexample 1943*6a54128fSAndroid Build Coastguard Worker \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% 1944*6a54128fSAndroid Build Coastguard Worker \else\ifx\txiarg\wordcode 1945*6a54128fSAndroid Build Coastguard Worker \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% 1946*6a54128fSAndroid Build Coastguard Worker \else 1947*6a54128fSAndroid Build Coastguard Worker \errhelp = \EMsimple 1948*6a54128fSAndroid Build Coastguard Worker \errmessage{Unknown @kbdinputstyle option `\txiarg'}% 1949*6a54128fSAndroid Build Coastguard Worker \fi\fi\fi 1950*6a54128fSAndroid Build Coastguard Worker} 1951*6a54128fSAndroid Build Coastguard Worker\def\worddistinct{distinct} 1952*6a54128fSAndroid Build Coastguard Worker\def\wordexample{example} 1953*6a54128fSAndroid Build Coastguard Worker\def\wordcode{code} 1954*6a54128fSAndroid Build Coastguard Worker 1955*6a54128fSAndroid Build Coastguard Worker% Default is `distinct.' 1956*6a54128fSAndroid Build Coastguard Worker\kbdinputstyle distinct 1957*6a54128fSAndroid Build Coastguard Worker 1958*6a54128fSAndroid Build Coastguard Worker\def\xkey{\key} 1959*6a54128fSAndroid Build Coastguard Worker\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% 1960*6a54128fSAndroid Build Coastguard Worker\ifx\one\xkey\ifx\threex\three \key{#2}% 1961*6a54128fSAndroid Build Coastguard Worker\else{\tclose{\kbdfont\look}}\fi 1962*6a54128fSAndroid Build Coastguard Worker\else{\tclose{\kbdfont\look}}\fi} 1963*6a54128fSAndroid Build Coastguard Worker 1964*6a54128fSAndroid Build Coastguard Worker% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. 1965*6a54128fSAndroid Build Coastguard Worker\let\indicateurl=\code 1966*6a54128fSAndroid Build Coastguard Worker\let\env=\code 1967*6a54128fSAndroid Build Coastguard Worker\let\command=\code 1968*6a54128fSAndroid Build Coastguard Worker 1969*6a54128fSAndroid Build Coastguard Worker% @uref (abbreviation for `urlref') takes an optional (comma-separated) 1970*6a54128fSAndroid Build Coastguard Worker% second argument specifying the text to display and an optional third 1971*6a54128fSAndroid Build Coastguard Worker% arg as text to display instead of (rather than in addition to) the url 1972*6a54128fSAndroid Build Coastguard Worker% itself. First (mandatory) arg is the url. Perhaps eventually put in 1973*6a54128fSAndroid Build Coastguard Worker% a hypertex \special here. 1974*6a54128fSAndroid Build Coastguard Worker% 1975*6a54128fSAndroid Build Coastguard Worker\def\uref#1{\douref #1,,,\finish} 1976*6a54128fSAndroid Build Coastguard Worker\def\douref#1,#2,#3,#4\finish{\begingroup 1977*6a54128fSAndroid Build Coastguard Worker \unsepspaces 1978*6a54128fSAndroid Build Coastguard Worker \pdfurl{#1}% 1979*6a54128fSAndroid Build Coastguard Worker \setbox0 = \hbox{\ignorespaces #3}% 1980*6a54128fSAndroid Build Coastguard Worker \ifdim\wd0 > 0pt 1981*6a54128fSAndroid Build Coastguard Worker \unhbox0 % third arg given, show only that 1982*6a54128fSAndroid Build Coastguard Worker \else 1983*6a54128fSAndroid Build Coastguard Worker \setbox0 = \hbox{\ignorespaces #2}% 1984*6a54128fSAndroid Build Coastguard Worker \ifdim\wd0 > 0pt 1985*6a54128fSAndroid Build Coastguard Worker \ifpdf 1986*6a54128fSAndroid Build Coastguard Worker \unhbox0 % PDF: 2nd arg given, show only it 1987*6a54128fSAndroid Build Coastguard Worker \else 1988*6a54128fSAndroid Build Coastguard Worker \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url 1989*6a54128fSAndroid Build Coastguard Worker \fi 1990*6a54128fSAndroid Build Coastguard Worker \else 1991*6a54128fSAndroid Build Coastguard Worker \code{#1}% only url given, so show it 1992*6a54128fSAndroid Build Coastguard Worker \fi 1993*6a54128fSAndroid Build Coastguard Worker \fi 1994*6a54128fSAndroid Build Coastguard Worker \endlink 1995*6a54128fSAndroid Build Coastguard Worker\endgroup} 1996*6a54128fSAndroid Build Coastguard Worker 1997*6a54128fSAndroid Build Coastguard Worker% @url synonym for @uref, since that's how everyone uses it. 1998*6a54128fSAndroid Build Coastguard Worker% 1999*6a54128fSAndroid Build Coastguard Worker\let\url=\uref 2000*6a54128fSAndroid Build Coastguard Worker 2001*6a54128fSAndroid Build Coastguard Worker% rms does not like angle brackets --karl, 17may97. 2002*6a54128fSAndroid Build Coastguard Worker% So now @email is just like @uref, unless we are pdf. 2003*6a54128fSAndroid Build Coastguard Worker% 2004*6a54128fSAndroid Build Coastguard Worker%\def\email#1{\angleleft{\tt #1}\angleright} 2005*6a54128fSAndroid Build Coastguard Worker\ifpdf 2006*6a54128fSAndroid Build Coastguard Worker \def\email#1{\doemail#1,,\finish} 2007*6a54128fSAndroid Build Coastguard Worker \def\doemail#1,#2,#3\finish{\begingroup 2008*6a54128fSAndroid Build Coastguard Worker \unsepspaces 2009*6a54128fSAndroid Build Coastguard Worker \pdfurl{mailto:#1}% 2010*6a54128fSAndroid Build Coastguard Worker \setbox0 = \hbox{\ignorespaces #2}% 2011*6a54128fSAndroid Build Coastguard Worker \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi 2012*6a54128fSAndroid Build Coastguard Worker \endlink 2013*6a54128fSAndroid Build Coastguard Worker \endgroup} 2014*6a54128fSAndroid Build Coastguard Worker\else 2015*6a54128fSAndroid Build Coastguard Worker \let\email=\uref 2016*6a54128fSAndroid Build Coastguard Worker\fi 2017*6a54128fSAndroid Build Coastguard Worker 2018*6a54128fSAndroid Build Coastguard Worker% Check if we are currently using a typewriter font. Since all the 2019*6a54128fSAndroid Build Coastguard Worker% Computer Modern typewriter fonts have zero interword stretch (and 2020*6a54128fSAndroid Build Coastguard Worker% shrink), and it is reasonable to expect all typewriter fonts to have 2021*6a54128fSAndroid Build Coastguard Worker% this property, we can check that font parameter. 2022*6a54128fSAndroid Build Coastguard Worker% 2023*6a54128fSAndroid Build Coastguard Worker\def\ifmonospace{\ifdim\fontdimen3\font=0pt } 2024*6a54128fSAndroid Build Coastguard Worker 2025*6a54128fSAndroid Build Coastguard Worker% Typeset a dimension, e.g., `in' or `pt'. The only reason for the 2026*6a54128fSAndroid Build Coastguard Worker% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. 2027*6a54128fSAndroid Build Coastguard Worker% 2028*6a54128fSAndroid Build Coastguard Worker\def\dmn#1{\thinspace #1} 2029*6a54128fSAndroid Build Coastguard Worker 2030*6a54128fSAndroid Build Coastguard Worker\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} 2031*6a54128fSAndroid Build Coastguard Worker 2032*6a54128fSAndroid Build Coastguard Worker% @l was never documented to mean ``switch to the Lisp font'', 2033*6a54128fSAndroid Build Coastguard Worker% and it is not used as such in any manual I can find. We need it for 2034*6a54128fSAndroid Build Coastguard Worker% Polish suppressed-l. --karl, 22sep96. 2035*6a54128fSAndroid Build Coastguard Worker%\def\l#1{{\li #1}\null} 2036*6a54128fSAndroid Build Coastguard Worker 2037*6a54128fSAndroid Build Coastguard Worker% Explicit font changes: @r, @sc, undocumented @ii. 2038*6a54128fSAndroid Build Coastguard Worker\def\r#1{{\rm #1}} % roman font 2039*6a54128fSAndroid Build Coastguard Worker\def\sc#1{{\smallcaps#1}} % smallcaps font 2040*6a54128fSAndroid Build Coastguard Worker\def\ii#1{{\it #1}} % italic font 2041*6a54128fSAndroid Build Coastguard Worker 2042*6a54128fSAndroid Build Coastguard Worker% @acronym for "FBI", "NATO", and the like. 2043*6a54128fSAndroid Build Coastguard Worker% We print this one point size smaller, since it's intended for 2044*6a54128fSAndroid Build Coastguard Worker% all-uppercase. 2045*6a54128fSAndroid Build Coastguard Worker% 2046*6a54128fSAndroid Build Coastguard Worker\def\acronym#1{\doacronym #1,,\finish} 2047*6a54128fSAndroid Build Coastguard Worker\def\doacronym#1,#2,#3\finish{% 2048*6a54128fSAndroid Build Coastguard Worker {\selectfonts\lsize #1}% 2049*6a54128fSAndroid Build Coastguard Worker \def\temp{#2}% 2050*6a54128fSAndroid Build Coastguard Worker \ifx\temp\empty \else 2051*6a54128fSAndroid Build Coastguard Worker \space ({\unsepspaces \ignorespaces \temp \unskip})% 2052*6a54128fSAndroid Build Coastguard Worker \fi 2053*6a54128fSAndroid Build Coastguard Worker} 2054*6a54128fSAndroid Build Coastguard Worker 2055*6a54128fSAndroid Build Coastguard Worker% @abbr for "Comput. J." and the like. 2056*6a54128fSAndroid Build Coastguard Worker% No font change, but don't do end-of-sentence spacing. 2057*6a54128fSAndroid Build Coastguard Worker% 2058*6a54128fSAndroid Build Coastguard Worker\def\abbr#1{\doabbr #1,,\finish} 2059*6a54128fSAndroid Build Coastguard Worker\def\doabbr#1,#2,#3\finish{% 2060*6a54128fSAndroid Build Coastguard Worker {\plainfrenchspacing #1}% 2061*6a54128fSAndroid Build Coastguard Worker \def\temp{#2}% 2062*6a54128fSAndroid Build Coastguard Worker \ifx\temp\empty \else 2063*6a54128fSAndroid Build Coastguard Worker \space ({\unsepspaces \ignorespaces \temp \unskip})% 2064*6a54128fSAndroid Build Coastguard Worker \fi 2065*6a54128fSAndroid Build Coastguard Worker} 2066*6a54128fSAndroid Build Coastguard Worker 2067*6a54128fSAndroid Build Coastguard Worker% @pounds{} is a sterling sign, which Knuth put in the CM italic font. 2068*6a54128fSAndroid Build Coastguard Worker% 2069*6a54128fSAndroid Build Coastguard Worker\def\pounds{{\it\$}} 2070*6a54128fSAndroid Build Coastguard Worker 2071*6a54128fSAndroid Build Coastguard Worker% @euro{} comes from a separate font, depending on the current style. 2072*6a54128fSAndroid Build Coastguard Worker% We use the free feym* fonts from the eurosym package by Henrik 2073*6a54128fSAndroid Build Coastguard Worker% Theiling, which support regular, slanted, bold and bold slanted (and 2074*6a54128fSAndroid Build Coastguard Worker% "outlined" (blackboard board, sort of) versions, which we don't need). 2075*6a54128fSAndroid Build Coastguard Worker% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. 2076*6a54128fSAndroid Build Coastguard Worker% 2077*6a54128fSAndroid Build Coastguard Worker% Although only regular is the truly official Euro symbol, we ignore 2078*6a54128fSAndroid Build Coastguard Worker% that. The Euro is designed to be slightly taller than the regular 2079*6a54128fSAndroid Build Coastguard Worker% font height. 2080*6a54128fSAndroid Build Coastguard Worker% 2081*6a54128fSAndroid Build Coastguard Worker% feymr - regular 2082*6a54128fSAndroid Build Coastguard Worker% feymo - slanted 2083*6a54128fSAndroid Build Coastguard Worker% feybr - bold 2084*6a54128fSAndroid Build Coastguard Worker% feybo - bold slanted 2085*6a54128fSAndroid Build Coastguard Worker% 2086*6a54128fSAndroid Build Coastguard Worker% There is no good (free) typewriter version, to my knowledge. 2087*6a54128fSAndroid Build Coastguard Worker% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. 2088*6a54128fSAndroid Build Coastguard Worker% Hmm. 2089*6a54128fSAndroid Build Coastguard Worker% 2090*6a54128fSAndroid Build Coastguard Worker% Also doesn't work in math. Do we need to do math with euro symbols? 2091*6a54128fSAndroid Build Coastguard Worker% Hope not. 2092*6a54128fSAndroid Build Coastguard Worker% 2093*6a54128fSAndroid Build Coastguard Worker% 2094*6a54128fSAndroid Build Coastguard Worker\def\euro{{\eurofont e}} 2095*6a54128fSAndroid Build Coastguard Worker\def\eurofont{% 2096*6a54128fSAndroid Build Coastguard Worker % We set the font at each command, rather than predefining it in 2097*6a54128fSAndroid Build Coastguard Worker % \textfonts and the other font-switching commands, so that 2098*6a54128fSAndroid Build Coastguard Worker % installations which never need the symbol don't have to have the 2099*6a54128fSAndroid Build Coastguard Worker % font installed. 2100*6a54128fSAndroid Build Coastguard Worker % 2101*6a54128fSAndroid Build Coastguard Worker % There is only one designed size (nominal 10pt), so we always scale 2102*6a54128fSAndroid Build Coastguard Worker % that to the current nominal size. 2103*6a54128fSAndroid Build Coastguard Worker % 2104*6a54128fSAndroid Build Coastguard Worker % By the way, simply using "at 1em" works for cmr10 and the like, but 2105*6a54128fSAndroid Build Coastguard Worker % does not work for cmbx10 and other extended/shrunken fonts. 2106*6a54128fSAndroid Build Coastguard Worker % 2107*6a54128fSAndroid Build Coastguard Worker \def\eurosize{\csname\curfontsize nominalsize\endcsname}% 2108*6a54128fSAndroid Build Coastguard Worker % 2109*6a54128fSAndroid Build Coastguard Worker \ifx\curfontstyle\bfstylename 2110*6a54128fSAndroid Build Coastguard Worker % bold: 2111*6a54128fSAndroid Build Coastguard Worker \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize 2112*6a54128fSAndroid Build Coastguard Worker \else 2113*6a54128fSAndroid Build Coastguard Worker % regular: 2114*6a54128fSAndroid Build Coastguard Worker \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize 2115*6a54128fSAndroid Build Coastguard Worker \fi 2116*6a54128fSAndroid Build Coastguard Worker \thiseurofont 2117*6a54128fSAndroid Build Coastguard Worker} 2118*6a54128fSAndroid Build Coastguard Worker 2119*6a54128fSAndroid Build Coastguard Worker% @registeredsymbol - R in a circle. The font for the R should really 2120*6a54128fSAndroid Build Coastguard Worker% be smaller yet, but lllsize is the best we can do for now. 2121*6a54128fSAndroid Build Coastguard Worker% Adapted from the plain.tex definition of \copyright. 2122*6a54128fSAndroid Build Coastguard Worker% 2123*6a54128fSAndroid Build Coastguard Worker\def\registeredsymbol{% 2124*6a54128fSAndroid Build Coastguard Worker $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% 2125*6a54128fSAndroid Build Coastguard Worker \hfil\crcr\Orb}}% 2126*6a54128fSAndroid Build Coastguard Worker }$% 2127*6a54128fSAndroid Build Coastguard Worker} 2128*6a54128fSAndroid Build Coastguard Worker 2129*6a54128fSAndroid Build Coastguard Worker% Laurent Siebenmann reports \Orb undefined with: 2130*6a54128fSAndroid Build Coastguard Worker% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 2131*6a54128fSAndroid Build Coastguard Worker% so we'll define it if necessary. 2132*6a54128fSAndroid Build Coastguard Worker% 2133*6a54128fSAndroid Build Coastguard Worker\ifx\Orb\undefined 2134*6a54128fSAndroid Build Coastguard Worker\def\Orb{\mathhexbox20D} 2135*6a54128fSAndroid Build Coastguard Worker\fi 2136*6a54128fSAndroid Build Coastguard Worker 2137*6a54128fSAndroid Build Coastguard Worker 2138*6a54128fSAndroid Build Coastguard Worker\message{page headings,} 2139*6a54128fSAndroid Build Coastguard Worker 2140*6a54128fSAndroid Build Coastguard Worker\newskip\titlepagetopglue \titlepagetopglue = 1.5in 2141*6a54128fSAndroid Build Coastguard Worker\newskip\titlepagebottomglue \titlepagebottomglue = 2pc 2142*6a54128fSAndroid Build Coastguard Worker 2143*6a54128fSAndroid Build Coastguard Worker% First the title page. Must do @settitle before @titlepage. 2144*6a54128fSAndroid Build Coastguard Worker\newif\ifseenauthor 2145*6a54128fSAndroid Build Coastguard Worker\newif\iffinishedtitlepage 2146*6a54128fSAndroid Build Coastguard Worker 2147*6a54128fSAndroid Build Coastguard Worker% Do an implicit @contents or @shortcontents after @end titlepage if the 2148*6a54128fSAndroid Build Coastguard Worker% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. 2149*6a54128fSAndroid Build Coastguard Worker% 2150*6a54128fSAndroid Build Coastguard Worker\newif\ifsetcontentsaftertitlepage 2151*6a54128fSAndroid Build Coastguard Worker \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue 2152*6a54128fSAndroid Build Coastguard Worker\newif\ifsetshortcontentsaftertitlepage 2153*6a54128fSAndroid Build Coastguard Worker \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue 2154*6a54128fSAndroid Build Coastguard Worker 2155*6a54128fSAndroid Build Coastguard Worker\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% 2156*6a54128fSAndroid Build Coastguard Worker \endgroup\page\hbox{}\page} 2157*6a54128fSAndroid Build Coastguard Worker 2158*6a54128fSAndroid Build Coastguard Worker\envdef\titlepage{% 2159*6a54128fSAndroid Build Coastguard Worker % Open one extra group, as we want to close it in the middle of \Etitlepage. 2160*6a54128fSAndroid Build Coastguard Worker \begingroup 2161*6a54128fSAndroid Build Coastguard Worker \parindent=0pt \textfonts 2162*6a54128fSAndroid Build Coastguard Worker % Leave some space at the very top of the page. 2163*6a54128fSAndroid Build Coastguard Worker \vglue\titlepagetopglue 2164*6a54128fSAndroid Build Coastguard Worker % No rule at page bottom unless we print one at the top with @title. 2165*6a54128fSAndroid Build Coastguard Worker \finishedtitlepagetrue 2166*6a54128fSAndroid Build Coastguard Worker % 2167*6a54128fSAndroid Build Coastguard Worker % Most title ``pages'' are actually two pages long, with space 2168*6a54128fSAndroid Build Coastguard Worker % at the top of the second. We don't want the ragged left on the second. 2169*6a54128fSAndroid Build Coastguard Worker \let\oldpage = \page 2170*6a54128fSAndroid Build Coastguard Worker \def\page{% 2171*6a54128fSAndroid Build Coastguard Worker \iffinishedtitlepage\else 2172*6a54128fSAndroid Build Coastguard Worker \finishtitlepage 2173*6a54128fSAndroid Build Coastguard Worker \fi 2174*6a54128fSAndroid Build Coastguard Worker \let\page = \oldpage 2175*6a54128fSAndroid Build Coastguard Worker \page 2176*6a54128fSAndroid Build Coastguard Worker \null 2177*6a54128fSAndroid Build Coastguard Worker }% 2178*6a54128fSAndroid Build Coastguard Worker} 2179*6a54128fSAndroid Build Coastguard Worker 2180*6a54128fSAndroid Build Coastguard Worker\def\Etitlepage{% 2181*6a54128fSAndroid Build Coastguard Worker \iffinishedtitlepage\else 2182*6a54128fSAndroid Build Coastguard Worker \finishtitlepage 2183*6a54128fSAndroid Build Coastguard Worker \fi 2184*6a54128fSAndroid Build Coastguard Worker % It is important to do the page break before ending the group, 2185*6a54128fSAndroid Build Coastguard Worker % because the headline and footline are only empty inside the group. 2186*6a54128fSAndroid Build Coastguard Worker % If we use the new definition of \page, we always get a blank page 2187*6a54128fSAndroid Build Coastguard Worker % after the title page, which we certainly don't want. 2188*6a54128fSAndroid Build Coastguard Worker \oldpage 2189*6a54128fSAndroid Build Coastguard Worker \endgroup 2190*6a54128fSAndroid Build Coastguard Worker % 2191*6a54128fSAndroid Build Coastguard Worker % Need this before the \...aftertitlepage checks so that if they are 2192*6a54128fSAndroid Build Coastguard Worker % in effect the toc pages will come out with page numbers. 2193*6a54128fSAndroid Build Coastguard Worker \HEADINGSon 2194*6a54128fSAndroid Build Coastguard Worker % 2195*6a54128fSAndroid Build Coastguard Worker % If they want short, they certainly want long too. 2196*6a54128fSAndroid Build Coastguard Worker \ifsetshortcontentsaftertitlepage 2197*6a54128fSAndroid Build Coastguard Worker \shortcontents 2198*6a54128fSAndroid Build Coastguard Worker \contents 2199*6a54128fSAndroid Build Coastguard Worker \global\let\shortcontents = \relax 2200*6a54128fSAndroid Build Coastguard Worker \global\let\contents = \relax 2201*6a54128fSAndroid Build Coastguard Worker \fi 2202*6a54128fSAndroid Build Coastguard Worker % 2203*6a54128fSAndroid Build Coastguard Worker \ifsetcontentsaftertitlepage 2204*6a54128fSAndroid Build Coastguard Worker \contents 2205*6a54128fSAndroid Build Coastguard Worker \global\let\contents = \relax 2206*6a54128fSAndroid Build Coastguard Worker \global\let\shortcontents = \relax 2207*6a54128fSAndroid Build Coastguard Worker \fi 2208*6a54128fSAndroid Build Coastguard Worker} 2209*6a54128fSAndroid Build Coastguard Worker 2210*6a54128fSAndroid Build Coastguard Worker\def\finishtitlepage{% 2211*6a54128fSAndroid Build Coastguard Worker \vskip4pt \hrule height 2pt width \hsize 2212*6a54128fSAndroid Build Coastguard Worker \vskip\titlepagebottomglue 2213*6a54128fSAndroid Build Coastguard Worker \finishedtitlepagetrue 2214*6a54128fSAndroid Build Coastguard Worker} 2215*6a54128fSAndroid Build Coastguard Worker 2216*6a54128fSAndroid Build Coastguard Worker%%% Macros to be used within @titlepage: 2217*6a54128fSAndroid Build Coastguard Worker 2218*6a54128fSAndroid Build Coastguard Worker\let\subtitlerm=\tenrm 2219*6a54128fSAndroid Build Coastguard Worker\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} 2220*6a54128fSAndroid Build Coastguard Worker 2221*6a54128fSAndroid Build Coastguard Worker\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines 2222*6a54128fSAndroid Build Coastguard Worker \let\tt=\authortt} 2223*6a54128fSAndroid Build Coastguard Worker 2224*6a54128fSAndroid Build Coastguard Worker\parseargdef\title{% 2225*6a54128fSAndroid Build Coastguard Worker \checkenv\titlepage 2226*6a54128fSAndroid Build Coastguard Worker \leftline{\titlefonts\rm #1} 2227*6a54128fSAndroid Build Coastguard Worker % print a rule at the page bottom also. 2228*6a54128fSAndroid Build Coastguard Worker \finishedtitlepagefalse 2229*6a54128fSAndroid Build Coastguard Worker \vskip4pt \hrule height 4pt width \hsize \vskip4pt 2230*6a54128fSAndroid Build Coastguard Worker} 2231*6a54128fSAndroid Build Coastguard Worker 2232*6a54128fSAndroid Build Coastguard Worker\parseargdef\subtitle{% 2233*6a54128fSAndroid Build Coastguard Worker \checkenv\titlepage 2234*6a54128fSAndroid Build Coastguard Worker {\subtitlefont \rightline{#1}}% 2235*6a54128fSAndroid Build Coastguard Worker} 2236*6a54128fSAndroid Build Coastguard Worker 2237*6a54128fSAndroid Build Coastguard Worker% @author should come last, but may come many times. 2238*6a54128fSAndroid Build Coastguard Worker% It can also be used inside @quotation. 2239*6a54128fSAndroid Build Coastguard Worker% 2240*6a54128fSAndroid Build Coastguard Worker\parseargdef\author{% 2241*6a54128fSAndroid Build Coastguard Worker \def\temp{\quotation}% 2242*6a54128fSAndroid Build Coastguard Worker \ifx\thisenv\temp 2243*6a54128fSAndroid Build Coastguard Worker \def\quotationauthor{#1}% printed in \Equotation. 2244*6a54128fSAndroid Build Coastguard Worker \else 2245*6a54128fSAndroid Build Coastguard Worker \checkenv\titlepage 2246*6a54128fSAndroid Build Coastguard Worker \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi 2247*6a54128fSAndroid Build Coastguard Worker {\authorfont \leftline{#1}}% 2248*6a54128fSAndroid Build Coastguard Worker \fi 2249*6a54128fSAndroid Build Coastguard Worker} 2250*6a54128fSAndroid Build Coastguard Worker 2251*6a54128fSAndroid Build Coastguard Worker 2252*6a54128fSAndroid Build Coastguard Worker%%% Set up page headings and footings. 2253*6a54128fSAndroid Build Coastguard Worker 2254*6a54128fSAndroid Build Coastguard Worker\let\thispage=\folio 2255*6a54128fSAndroid Build Coastguard Worker 2256*6a54128fSAndroid Build Coastguard Worker\newtoks\evenheadline % headline on even pages 2257*6a54128fSAndroid Build Coastguard Worker\newtoks\oddheadline % headline on odd pages 2258*6a54128fSAndroid Build Coastguard Worker\newtoks\evenfootline % footline on even pages 2259*6a54128fSAndroid Build Coastguard Worker\newtoks\oddfootline % footline on odd pages 2260*6a54128fSAndroid Build Coastguard Worker 2261*6a54128fSAndroid Build Coastguard Worker% Now make TeX use those variables 2262*6a54128fSAndroid Build Coastguard Worker\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline 2263*6a54128fSAndroid Build Coastguard Worker \else \the\evenheadline \fi}} 2264*6a54128fSAndroid Build Coastguard Worker\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline 2265*6a54128fSAndroid Build Coastguard Worker \else \the\evenfootline \fi}\HEADINGShook} 2266*6a54128fSAndroid Build Coastguard Worker\let\HEADINGShook=\relax 2267*6a54128fSAndroid Build Coastguard Worker 2268*6a54128fSAndroid Build Coastguard Worker% Commands to set those variables. 2269*6a54128fSAndroid Build Coastguard Worker% For example, this is what @headings on does 2270*6a54128fSAndroid Build Coastguard Worker% @evenheading @thistitle|@thispage|@thischapter 2271*6a54128fSAndroid Build Coastguard Worker% @oddheading @thischapter|@thispage|@thistitle 2272*6a54128fSAndroid Build Coastguard Worker% @evenfooting @thisfile|| 2273*6a54128fSAndroid Build Coastguard Worker% @oddfooting ||@thisfile 2274*6a54128fSAndroid Build Coastguard Worker 2275*6a54128fSAndroid Build Coastguard Worker 2276*6a54128fSAndroid Build Coastguard Worker\def\evenheading{\parsearg\evenheadingxxx} 2277*6a54128fSAndroid Build Coastguard Worker\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} 2278*6a54128fSAndroid Build Coastguard Worker\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% 2279*6a54128fSAndroid Build Coastguard Worker\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} 2280*6a54128fSAndroid Build Coastguard Worker 2281*6a54128fSAndroid Build Coastguard Worker\def\oddheading{\parsearg\oddheadingxxx} 2282*6a54128fSAndroid Build Coastguard Worker\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} 2283*6a54128fSAndroid Build Coastguard Worker\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% 2284*6a54128fSAndroid Build Coastguard Worker\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} 2285*6a54128fSAndroid Build Coastguard Worker 2286*6a54128fSAndroid Build Coastguard Worker\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% 2287*6a54128fSAndroid Build Coastguard Worker 2288*6a54128fSAndroid Build Coastguard Worker\def\evenfooting{\parsearg\evenfootingxxx} 2289*6a54128fSAndroid Build Coastguard Worker\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} 2290*6a54128fSAndroid Build Coastguard Worker\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% 2291*6a54128fSAndroid Build Coastguard Worker\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} 2292*6a54128fSAndroid Build Coastguard Worker 2293*6a54128fSAndroid Build Coastguard Worker\def\oddfooting{\parsearg\oddfootingxxx} 2294*6a54128fSAndroid Build Coastguard Worker\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} 2295*6a54128fSAndroid Build Coastguard Worker\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% 2296*6a54128fSAndroid Build Coastguard Worker \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% 2297*6a54128fSAndroid Build Coastguard Worker % 2298*6a54128fSAndroid Build Coastguard Worker % Leave some space for the footline. Hopefully ok to assume 2299*6a54128fSAndroid Build Coastguard Worker % @evenfooting will not be used by itself. 2300*6a54128fSAndroid Build Coastguard Worker \global\advance\pageheight by -\baselineskip 2301*6a54128fSAndroid Build Coastguard Worker \global\advance\vsize by -\baselineskip 2302*6a54128fSAndroid Build Coastguard Worker} 2303*6a54128fSAndroid Build Coastguard Worker 2304*6a54128fSAndroid Build Coastguard Worker\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} 2305*6a54128fSAndroid Build Coastguard Worker 2306*6a54128fSAndroid Build Coastguard Worker 2307*6a54128fSAndroid Build Coastguard Worker% @headings double turns headings on for double-sided printing. 2308*6a54128fSAndroid Build Coastguard Worker% @headings single turns headings on for single-sided printing. 2309*6a54128fSAndroid Build Coastguard Worker% @headings off turns them off. 2310*6a54128fSAndroid Build Coastguard Worker% @headings on same as @headings double, retained for compatibility. 2311*6a54128fSAndroid Build Coastguard Worker% @headings after turns on double-sided headings after this page. 2312*6a54128fSAndroid Build Coastguard Worker% @headings doubleafter turns on double-sided headings after this page. 2313*6a54128fSAndroid Build Coastguard Worker% @headings singleafter turns on single-sided headings after this page. 2314*6a54128fSAndroid Build Coastguard Worker% By default, they are off at the start of a document, 2315*6a54128fSAndroid Build Coastguard Worker% and turned `on' after @end titlepage. 2316*6a54128fSAndroid Build Coastguard Worker 2317*6a54128fSAndroid Build Coastguard Worker\def\headings #1 {\csname HEADINGS#1\endcsname} 2318*6a54128fSAndroid Build Coastguard Worker 2319*6a54128fSAndroid Build Coastguard Worker\def\HEADINGSoff{% 2320*6a54128fSAndroid Build Coastguard Worker\global\evenheadline={\hfil} \global\evenfootline={\hfil} 2321*6a54128fSAndroid Build Coastguard Worker\global\oddheadline={\hfil} \global\oddfootline={\hfil}} 2322*6a54128fSAndroid Build Coastguard Worker\HEADINGSoff 2323*6a54128fSAndroid Build Coastguard Worker% When we turn headings on, set the page number to 1. 2324*6a54128fSAndroid Build Coastguard Worker% For double-sided printing, put current file name in lower left corner, 2325*6a54128fSAndroid Build Coastguard Worker% chapter name on inside top of right hand pages, document 2326*6a54128fSAndroid Build Coastguard Worker% title on inside top of left hand pages, and page numbers on outside top 2327*6a54128fSAndroid Build Coastguard Worker% edge of all pages. 2328*6a54128fSAndroid Build Coastguard Worker\def\HEADINGSdouble{% 2329*6a54128fSAndroid Build Coastguard Worker\global\pageno=1 2330*6a54128fSAndroid Build Coastguard Worker\global\evenfootline={\hfil} 2331*6a54128fSAndroid Build Coastguard Worker\global\oddfootline={\hfil} 2332*6a54128fSAndroid Build Coastguard Worker\global\evenheadline={\line{\folio\hfil\thistitle}} 2333*6a54128fSAndroid Build Coastguard Worker\global\oddheadline={\line{\thischapter\hfil\folio}} 2334*6a54128fSAndroid Build Coastguard Worker\global\let\contentsalignmacro = \chapoddpage 2335*6a54128fSAndroid Build Coastguard Worker} 2336*6a54128fSAndroid Build Coastguard Worker\let\contentsalignmacro = \chappager 2337*6a54128fSAndroid Build Coastguard Worker 2338*6a54128fSAndroid Build Coastguard Worker% For single-sided printing, chapter title goes across top left of page, 2339*6a54128fSAndroid Build Coastguard Worker% page number on top right. 2340*6a54128fSAndroid Build Coastguard Worker\def\HEADINGSsingle{% 2341*6a54128fSAndroid Build Coastguard Worker\global\pageno=1 2342*6a54128fSAndroid Build Coastguard Worker\global\evenfootline={\hfil} 2343*6a54128fSAndroid Build Coastguard Worker\global\oddfootline={\hfil} 2344*6a54128fSAndroid Build Coastguard Worker\global\evenheadline={\line{\thischapter\hfil\folio}} 2345*6a54128fSAndroid Build Coastguard Worker\global\oddheadline={\line{\thischapter\hfil\folio}} 2346*6a54128fSAndroid Build Coastguard Worker\global\let\contentsalignmacro = \chappager 2347*6a54128fSAndroid Build Coastguard Worker} 2348*6a54128fSAndroid Build Coastguard Worker\def\HEADINGSon{\HEADINGSdouble} 2349*6a54128fSAndroid Build Coastguard Worker 2350*6a54128fSAndroid Build Coastguard Worker\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} 2351*6a54128fSAndroid Build Coastguard Worker\let\HEADINGSdoubleafter=\HEADINGSafter 2352*6a54128fSAndroid Build Coastguard Worker\def\HEADINGSdoublex{% 2353*6a54128fSAndroid Build Coastguard Worker\global\evenfootline={\hfil} 2354*6a54128fSAndroid Build Coastguard Worker\global\oddfootline={\hfil} 2355*6a54128fSAndroid Build Coastguard Worker\global\evenheadline={\line{\folio\hfil\thistitle}} 2356*6a54128fSAndroid Build Coastguard Worker\global\oddheadline={\line{\thischapter\hfil\folio}} 2357*6a54128fSAndroid Build Coastguard Worker\global\let\contentsalignmacro = \chapoddpage 2358*6a54128fSAndroid Build Coastguard Worker} 2359*6a54128fSAndroid Build Coastguard Worker 2360*6a54128fSAndroid Build Coastguard Worker\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} 2361*6a54128fSAndroid Build Coastguard Worker\def\HEADINGSsinglex{% 2362*6a54128fSAndroid Build Coastguard Worker\global\evenfootline={\hfil} 2363*6a54128fSAndroid Build Coastguard Worker\global\oddfootline={\hfil} 2364*6a54128fSAndroid Build Coastguard Worker\global\evenheadline={\line{\thischapter\hfil\folio}} 2365*6a54128fSAndroid Build Coastguard Worker\global\oddheadline={\line{\thischapter\hfil\folio}} 2366*6a54128fSAndroid Build Coastguard Worker\global\let\contentsalignmacro = \chappager 2367*6a54128fSAndroid Build Coastguard Worker} 2368*6a54128fSAndroid Build Coastguard Worker 2369*6a54128fSAndroid Build Coastguard Worker% Subroutines used in generating headings 2370*6a54128fSAndroid Build Coastguard Worker% This produces Day Month Year style of output. 2371*6a54128fSAndroid Build Coastguard Worker% Only define if not already defined, in case a txi-??.tex file has set 2372*6a54128fSAndroid Build Coastguard Worker% up a different format (e.g., txi-cs.tex does this). 2373*6a54128fSAndroid Build Coastguard Worker\ifx\today\undefined 2374*6a54128fSAndroid Build Coastguard Worker\def\today{% 2375*6a54128fSAndroid Build Coastguard Worker \number\day\space 2376*6a54128fSAndroid Build Coastguard Worker \ifcase\month 2377*6a54128fSAndroid Build Coastguard Worker \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr 2378*6a54128fSAndroid Build Coastguard Worker \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug 2379*6a54128fSAndroid Build Coastguard Worker \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec 2380*6a54128fSAndroid Build Coastguard Worker \fi 2381*6a54128fSAndroid Build Coastguard Worker \space\number\year} 2382*6a54128fSAndroid Build Coastguard Worker\fi 2383*6a54128fSAndroid Build Coastguard Worker 2384*6a54128fSAndroid Build Coastguard Worker% @settitle line... specifies the title of the document, for headings. 2385*6a54128fSAndroid Build Coastguard Worker% It generates no output of its own. 2386*6a54128fSAndroid Build Coastguard Worker\def\thistitle{\putwordNoTitle} 2387*6a54128fSAndroid Build Coastguard Worker\def\settitle{\parsearg{\gdef\thistitle}} 2388*6a54128fSAndroid Build Coastguard Worker 2389*6a54128fSAndroid Build Coastguard Worker 2390*6a54128fSAndroid Build Coastguard Worker\message{tables,} 2391*6a54128fSAndroid Build Coastguard Worker% Tables -- @table, @ftable, @vtable, @item(x). 2392*6a54128fSAndroid Build Coastguard Worker 2393*6a54128fSAndroid Build Coastguard Worker% default indentation of table text 2394*6a54128fSAndroid Build Coastguard Worker\newdimen\tableindent \tableindent=.8in 2395*6a54128fSAndroid Build Coastguard Worker% default indentation of @itemize and @enumerate text 2396*6a54128fSAndroid Build Coastguard Worker\newdimen\itemindent \itemindent=.3in 2397*6a54128fSAndroid Build Coastguard Worker% margin between end of table item and start of table text. 2398*6a54128fSAndroid Build Coastguard Worker\newdimen\itemmargin \itemmargin=.1in 2399*6a54128fSAndroid Build Coastguard Worker 2400*6a54128fSAndroid Build Coastguard Worker% used internally for \itemindent minus \itemmargin 2401*6a54128fSAndroid Build Coastguard Worker\newdimen\itemmax 2402*6a54128fSAndroid Build Coastguard Worker 2403*6a54128fSAndroid Build Coastguard Worker% Note @table, @ftable, and @vtable define @item, @itemx, etc., with 2404*6a54128fSAndroid Build Coastguard Worker% these defs. 2405*6a54128fSAndroid Build Coastguard Worker% They also define \itemindex 2406*6a54128fSAndroid Build Coastguard Worker% to index the item name in whatever manner is desired (perhaps none). 2407*6a54128fSAndroid Build Coastguard Worker 2408*6a54128fSAndroid Build Coastguard Worker\newif\ifitemxneedsnegativevskip 2409*6a54128fSAndroid Build Coastguard Worker 2410*6a54128fSAndroid Build Coastguard Worker\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} 2411*6a54128fSAndroid Build Coastguard Worker 2412*6a54128fSAndroid Build Coastguard Worker\def\internalBitem{\smallbreak \parsearg\itemzzz} 2413*6a54128fSAndroid Build Coastguard Worker\def\internalBitemx{\itemxpar \parsearg\itemzzz} 2414*6a54128fSAndroid Build Coastguard Worker 2415*6a54128fSAndroid Build Coastguard Worker\def\itemzzz #1{\begingroup % 2416*6a54128fSAndroid Build Coastguard Worker \advance\hsize by -\rightskip 2417*6a54128fSAndroid Build Coastguard Worker \advance\hsize by -\tableindent 2418*6a54128fSAndroid Build Coastguard Worker \setbox0=\hbox{\itemindicate{#1}}% 2419*6a54128fSAndroid Build Coastguard Worker \itemindex{#1}% 2420*6a54128fSAndroid Build Coastguard Worker \nobreak % This prevents a break before @itemx. 2421*6a54128fSAndroid Build Coastguard Worker % 2422*6a54128fSAndroid Build Coastguard Worker % If the item text does not fit in the space we have, put it on a line 2423*6a54128fSAndroid Build Coastguard Worker % by itself, and do not allow a page break either before or after that 2424*6a54128fSAndroid Build Coastguard Worker % line. We do not start a paragraph here because then if the next 2425*6a54128fSAndroid Build Coastguard Worker % command is, e.g., @kindex, the whatsit would get put into the 2426*6a54128fSAndroid Build Coastguard Worker % horizontal list on a line by itself, resulting in extra blank space. 2427*6a54128fSAndroid Build Coastguard Worker \ifdim \wd0>\itemmax 2428*6a54128fSAndroid Build Coastguard Worker % 2429*6a54128fSAndroid Build Coastguard Worker % Make this a paragraph so we get the \parskip glue and wrapping, 2430*6a54128fSAndroid Build Coastguard Worker % but leave it ragged-right. 2431*6a54128fSAndroid Build Coastguard Worker \begingroup 2432*6a54128fSAndroid Build Coastguard Worker \advance\leftskip by-\tableindent 2433*6a54128fSAndroid Build Coastguard Worker \advance\hsize by\tableindent 2434*6a54128fSAndroid Build Coastguard Worker \advance\rightskip by0pt plus1fil 2435*6a54128fSAndroid Build Coastguard Worker \leavevmode\unhbox0\par 2436*6a54128fSAndroid Build Coastguard Worker \endgroup 2437*6a54128fSAndroid Build Coastguard Worker % 2438*6a54128fSAndroid Build Coastguard Worker % We're going to be starting a paragraph, but we don't want the 2439*6a54128fSAndroid Build Coastguard Worker % \parskip glue -- logically it's part of the @item we just started. 2440*6a54128fSAndroid Build Coastguard Worker \nobreak \vskip-\parskip 2441*6a54128fSAndroid Build Coastguard Worker % 2442*6a54128fSAndroid Build Coastguard Worker % Stop a page break at the \parskip glue coming up. However, if 2443*6a54128fSAndroid Build Coastguard Worker % what follows is an environment such as @example, there will be no 2444*6a54128fSAndroid Build Coastguard Worker % \parskip glue; then the negative vskip we just inserted would 2445*6a54128fSAndroid Build Coastguard Worker % cause the example and the item to crash together. So we use this 2446*6a54128fSAndroid Build Coastguard Worker % bizarre value of 10001 as a signal to \aboveenvbreak to insert 2447*6a54128fSAndroid Build Coastguard Worker % \parskip glue after all. Section titles are handled this way also. 2448*6a54128fSAndroid Build Coastguard Worker % 2449*6a54128fSAndroid Build Coastguard Worker \penalty 10001 2450*6a54128fSAndroid Build Coastguard Worker \endgroup 2451*6a54128fSAndroid Build Coastguard Worker \itemxneedsnegativevskipfalse 2452*6a54128fSAndroid Build Coastguard Worker \else 2453*6a54128fSAndroid Build Coastguard Worker % The item text fits into the space. Start a paragraph, so that the 2454*6a54128fSAndroid Build Coastguard Worker % following text (if any) will end up on the same line. 2455*6a54128fSAndroid Build Coastguard Worker \noindent 2456*6a54128fSAndroid Build Coastguard Worker % Do this with kerns and \unhbox so that if there is a footnote in 2457*6a54128fSAndroid Build Coastguard Worker % the item text, it can migrate to the main vertical list and 2458*6a54128fSAndroid Build Coastguard Worker % eventually be printed. 2459*6a54128fSAndroid Build Coastguard Worker \nobreak\kern-\tableindent 2460*6a54128fSAndroid Build Coastguard Worker \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 2461*6a54128fSAndroid Build Coastguard Worker \unhbox0 2462*6a54128fSAndroid Build Coastguard Worker \nobreak\kern\dimen0 2463*6a54128fSAndroid Build Coastguard Worker \endgroup 2464*6a54128fSAndroid Build Coastguard Worker \itemxneedsnegativevskiptrue 2465*6a54128fSAndroid Build Coastguard Worker \fi 2466*6a54128fSAndroid Build Coastguard Worker} 2467*6a54128fSAndroid Build Coastguard Worker 2468*6a54128fSAndroid Build Coastguard Worker\def\item{\errmessage{@item while not in a list environment}} 2469*6a54128fSAndroid Build Coastguard Worker\def\itemx{\errmessage{@itemx while not in a list environment}} 2470*6a54128fSAndroid Build Coastguard Worker 2471*6a54128fSAndroid Build Coastguard Worker% @table, @ftable, @vtable. 2472*6a54128fSAndroid Build Coastguard Worker\envdef\table{% 2473*6a54128fSAndroid Build Coastguard Worker \let\itemindex\gobble 2474*6a54128fSAndroid Build Coastguard Worker \tablecheck{table}% 2475*6a54128fSAndroid Build Coastguard Worker} 2476*6a54128fSAndroid Build Coastguard Worker\envdef\ftable{% 2477*6a54128fSAndroid Build Coastguard Worker \def\itemindex ##1{\doind {fn}{\code{##1}}}% 2478*6a54128fSAndroid Build Coastguard Worker \tablecheck{ftable}% 2479*6a54128fSAndroid Build Coastguard Worker} 2480*6a54128fSAndroid Build Coastguard Worker\envdef\vtable{% 2481*6a54128fSAndroid Build Coastguard Worker \def\itemindex ##1{\doind {vr}{\code{##1}}}% 2482*6a54128fSAndroid Build Coastguard Worker \tablecheck{vtable}% 2483*6a54128fSAndroid Build Coastguard Worker} 2484*6a54128fSAndroid Build Coastguard Worker\def\tablecheck#1{% 2485*6a54128fSAndroid Build Coastguard Worker \ifnum \the\catcode`\^^M=\active 2486*6a54128fSAndroid Build Coastguard Worker \endgroup 2487*6a54128fSAndroid Build Coastguard Worker \errmessage{This command won't work in this context; perhaps the problem is 2488*6a54128fSAndroid Build Coastguard Worker that we are \inenvironment\thisenv}% 2489*6a54128fSAndroid Build Coastguard Worker \def\next{\doignore{#1}}% 2490*6a54128fSAndroid Build Coastguard Worker \else 2491*6a54128fSAndroid Build Coastguard Worker \let\next\tablex 2492*6a54128fSAndroid Build Coastguard Worker \fi 2493*6a54128fSAndroid Build Coastguard Worker \next 2494*6a54128fSAndroid Build Coastguard Worker} 2495*6a54128fSAndroid Build Coastguard Worker\def\tablex#1{% 2496*6a54128fSAndroid Build Coastguard Worker \def\itemindicate{#1}% 2497*6a54128fSAndroid Build Coastguard Worker \parsearg\tabley 2498*6a54128fSAndroid Build Coastguard Worker} 2499*6a54128fSAndroid Build Coastguard Worker\def\tabley#1{% 2500*6a54128fSAndroid Build Coastguard Worker {% 2501*6a54128fSAndroid Build Coastguard Worker \makevalueexpandable 2502*6a54128fSAndroid Build Coastguard Worker \edef\temp{\noexpand\tablez #1\space\space\space}% 2503*6a54128fSAndroid Build Coastguard Worker \expandafter 2504*6a54128fSAndroid Build Coastguard Worker }\temp \endtablez 2505*6a54128fSAndroid Build Coastguard Worker} 2506*6a54128fSAndroid Build Coastguard Worker\def\tablez #1 #2 #3 #4\endtablez{% 2507*6a54128fSAndroid Build Coastguard Worker \aboveenvbreak 2508*6a54128fSAndroid Build Coastguard Worker \ifnum 0#1>0 \advance \leftskip by #1\mil \fi 2509*6a54128fSAndroid Build Coastguard Worker \ifnum 0#2>0 \tableindent=#2\mil \fi 2510*6a54128fSAndroid Build Coastguard Worker \ifnum 0#3>0 \advance \rightskip by #3\mil \fi 2511*6a54128fSAndroid Build Coastguard Worker \itemmax=\tableindent 2512*6a54128fSAndroid Build Coastguard Worker \advance \itemmax by -\itemmargin 2513*6a54128fSAndroid Build Coastguard Worker \advance \leftskip by \tableindent 2514*6a54128fSAndroid Build Coastguard Worker \exdentamount=\tableindent 2515*6a54128fSAndroid Build Coastguard Worker \parindent = 0pt 2516*6a54128fSAndroid Build Coastguard Worker \parskip = \smallskipamount 2517*6a54128fSAndroid Build Coastguard Worker \ifdim \parskip=0pt \parskip=2pt \fi 2518*6a54128fSAndroid Build Coastguard Worker \let\item = \internalBitem 2519*6a54128fSAndroid Build Coastguard Worker \let\itemx = \internalBitemx 2520*6a54128fSAndroid Build Coastguard Worker} 2521*6a54128fSAndroid Build Coastguard Worker\def\Etable{\endgraf\afterenvbreak} 2522*6a54128fSAndroid Build Coastguard Worker\let\Eftable\Etable 2523*6a54128fSAndroid Build Coastguard Worker\let\Evtable\Etable 2524*6a54128fSAndroid Build Coastguard Worker\let\Eitemize\Etable 2525*6a54128fSAndroid Build Coastguard Worker\let\Eenumerate\Etable 2526*6a54128fSAndroid Build Coastguard Worker 2527*6a54128fSAndroid Build Coastguard Worker% This is the counter used by @enumerate, which is really @itemize 2528*6a54128fSAndroid Build Coastguard Worker 2529*6a54128fSAndroid Build Coastguard Worker\newcount \itemno 2530*6a54128fSAndroid Build Coastguard Worker 2531*6a54128fSAndroid Build Coastguard Worker\envdef\itemize{\parsearg\doitemize} 2532*6a54128fSAndroid Build Coastguard Worker 2533*6a54128fSAndroid Build Coastguard Worker\def\doitemize#1{% 2534*6a54128fSAndroid Build Coastguard Worker \aboveenvbreak 2535*6a54128fSAndroid Build Coastguard Worker \itemmax=\itemindent 2536*6a54128fSAndroid Build Coastguard Worker \advance\itemmax by -\itemmargin 2537*6a54128fSAndroid Build Coastguard Worker \advance\leftskip by \itemindent 2538*6a54128fSAndroid Build Coastguard Worker \exdentamount=\itemindent 2539*6a54128fSAndroid Build Coastguard Worker \parindent=0pt 2540*6a54128fSAndroid Build Coastguard Worker \parskip=\smallskipamount 2541*6a54128fSAndroid Build Coastguard Worker \ifdim\parskip=0pt \parskip=2pt \fi 2542*6a54128fSAndroid Build Coastguard Worker \def\itemcontents{#1}% 2543*6a54128fSAndroid Build Coastguard Worker % @itemize with no arg is equivalent to @itemize @bullet. 2544*6a54128fSAndroid Build Coastguard Worker \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi 2545*6a54128fSAndroid Build Coastguard Worker \let\item=\itemizeitem 2546*6a54128fSAndroid Build Coastguard Worker} 2547*6a54128fSAndroid Build Coastguard Worker 2548*6a54128fSAndroid Build Coastguard Worker% Definition of @item while inside @itemize and @enumerate. 2549*6a54128fSAndroid Build Coastguard Worker% 2550*6a54128fSAndroid Build Coastguard Worker\def\itemizeitem{% 2551*6a54128fSAndroid Build Coastguard Worker \advance\itemno by 1 % for enumerations 2552*6a54128fSAndroid Build Coastguard Worker {\let\par=\endgraf \smallbreak}% reasonable place to break 2553*6a54128fSAndroid Build Coastguard Worker {% 2554*6a54128fSAndroid Build Coastguard Worker % If the document has an @itemize directly after a section title, a 2555*6a54128fSAndroid Build Coastguard Worker % \nobreak will be last on the list, and \sectionheading will have 2556*6a54128fSAndroid Build Coastguard Worker % done a \vskip-\parskip. In that case, we don't want to zero 2557*6a54128fSAndroid Build Coastguard Worker % parskip, or the item text will crash with the heading. On the 2558*6a54128fSAndroid Build Coastguard Worker % other hand, when there is normal text preceding the item (as there 2559*6a54128fSAndroid Build Coastguard Worker % usually is), we do want to zero parskip, or there would be too much 2560*6a54128fSAndroid Build Coastguard Worker % space. In that case, we won't have a \nobreak before. At least 2561*6a54128fSAndroid Build Coastguard Worker % that's the theory. 2562*6a54128fSAndroid Build Coastguard Worker \ifnum\lastpenalty<10000 \parskip=0in \fi 2563*6a54128fSAndroid Build Coastguard Worker \noindent 2564*6a54128fSAndroid Build Coastguard Worker \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% 2565*6a54128fSAndroid Build Coastguard Worker \vadjust{\penalty 1200}}% not good to break after first line of item. 2566*6a54128fSAndroid Build Coastguard Worker \flushcr 2567*6a54128fSAndroid Build Coastguard Worker} 2568*6a54128fSAndroid Build Coastguard Worker 2569*6a54128fSAndroid Build Coastguard Worker% \splitoff TOKENS\endmark defines \first to be the first token in 2570*6a54128fSAndroid Build Coastguard Worker% TOKENS, and \rest to be the remainder. 2571*6a54128fSAndroid Build Coastguard Worker% 2572*6a54128fSAndroid Build Coastguard Worker\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% 2573*6a54128fSAndroid Build Coastguard Worker 2574*6a54128fSAndroid Build Coastguard Worker% Allow an optional argument of an uppercase letter, lowercase letter, 2575*6a54128fSAndroid Build Coastguard Worker% or number, to specify the first label in the enumerated list. No 2576*6a54128fSAndroid Build Coastguard Worker% argument is the same as `1'. 2577*6a54128fSAndroid Build Coastguard Worker% 2578*6a54128fSAndroid Build Coastguard Worker\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} 2579*6a54128fSAndroid Build Coastguard Worker\def\enumeratey #1 #2\endenumeratey{% 2580*6a54128fSAndroid Build Coastguard Worker % If we were given no argument, pretend we were given `1'. 2581*6a54128fSAndroid Build Coastguard Worker \def\thearg{#1}% 2582*6a54128fSAndroid Build Coastguard Worker \ifx\thearg\empty \def\thearg{1}\fi 2583*6a54128fSAndroid Build Coastguard Worker % 2584*6a54128fSAndroid Build Coastguard Worker % Detect if the argument is a single token. If so, it might be a 2585*6a54128fSAndroid Build Coastguard Worker % letter. Otherwise, the only valid thing it can be is a number. 2586*6a54128fSAndroid Build Coastguard Worker % (We will always have one token, because of the test we just made. 2587*6a54128fSAndroid Build Coastguard Worker % This is a good thing, since \splitoff doesn't work given nothing at 2588*6a54128fSAndroid Build Coastguard Worker % all -- the first parameter is undelimited.) 2589*6a54128fSAndroid Build Coastguard Worker \expandafter\splitoff\thearg\endmark 2590*6a54128fSAndroid Build Coastguard Worker \ifx\rest\empty 2591*6a54128fSAndroid Build Coastguard Worker % Only one token in the argument. It could still be anything. 2592*6a54128fSAndroid Build Coastguard Worker % A ``lowercase letter'' is one whose \lccode is nonzero. 2593*6a54128fSAndroid Build Coastguard Worker % An ``uppercase letter'' is one whose \lccode is both nonzero, and 2594*6a54128fSAndroid Build Coastguard Worker % not equal to itself. 2595*6a54128fSAndroid Build Coastguard Worker % Otherwise, we assume it's a number. 2596*6a54128fSAndroid Build Coastguard Worker % 2597*6a54128fSAndroid Build Coastguard Worker % We need the \relax at the end of the \ifnum lines to stop TeX from 2598*6a54128fSAndroid Build Coastguard Worker % continuing to look for a <number>. 2599*6a54128fSAndroid Build Coastguard Worker % 2600*6a54128fSAndroid Build Coastguard Worker \ifnum\lccode\expandafter`\thearg=0\relax 2601*6a54128fSAndroid Build Coastguard Worker \numericenumerate % a number (we hope) 2602*6a54128fSAndroid Build Coastguard Worker \else 2603*6a54128fSAndroid Build Coastguard Worker % It's a letter. 2604*6a54128fSAndroid Build Coastguard Worker \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax 2605*6a54128fSAndroid Build Coastguard Worker \lowercaseenumerate % lowercase letter 2606*6a54128fSAndroid Build Coastguard Worker \else 2607*6a54128fSAndroid Build Coastguard Worker \uppercaseenumerate % uppercase letter 2608*6a54128fSAndroid Build Coastguard Worker \fi 2609*6a54128fSAndroid Build Coastguard Worker \fi 2610*6a54128fSAndroid Build Coastguard Worker \else 2611*6a54128fSAndroid Build Coastguard Worker % Multiple tokens in the argument. We hope it's a number. 2612*6a54128fSAndroid Build Coastguard Worker \numericenumerate 2613*6a54128fSAndroid Build Coastguard Worker \fi 2614*6a54128fSAndroid Build Coastguard Worker} 2615*6a54128fSAndroid Build Coastguard Worker 2616*6a54128fSAndroid Build Coastguard Worker% An @enumerate whose labels are integers. The starting integer is 2617*6a54128fSAndroid Build Coastguard Worker% given in \thearg. 2618*6a54128fSAndroid Build Coastguard Worker% 2619*6a54128fSAndroid Build Coastguard Worker\def\numericenumerate{% 2620*6a54128fSAndroid Build Coastguard Worker \itemno = \thearg 2621*6a54128fSAndroid Build Coastguard Worker \startenumeration{\the\itemno}% 2622*6a54128fSAndroid Build Coastguard Worker} 2623*6a54128fSAndroid Build Coastguard Worker 2624*6a54128fSAndroid Build Coastguard Worker% The starting (lowercase) letter is in \thearg. 2625*6a54128fSAndroid Build Coastguard Worker\def\lowercaseenumerate{% 2626*6a54128fSAndroid Build Coastguard Worker \itemno = \expandafter`\thearg 2627*6a54128fSAndroid Build Coastguard Worker \startenumeration{% 2628*6a54128fSAndroid Build Coastguard Worker % Be sure we're not beyond the end of the alphabet. 2629*6a54128fSAndroid Build Coastguard Worker \ifnum\itemno=0 2630*6a54128fSAndroid Build Coastguard Worker \errmessage{No more lowercase letters in @enumerate; get a bigger 2631*6a54128fSAndroid Build Coastguard Worker alphabet}% 2632*6a54128fSAndroid Build Coastguard Worker \fi 2633*6a54128fSAndroid Build Coastguard Worker \char\lccode\itemno 2634*6a54128fSAndroid Build Coastguard Worker }% 2635*6a54128fSAndroid Build Coastguard Worker} 2636*6a54128fSAndroid Build Coastguard Worker 2637*6a54128fSAndroid Build Coastguard Worker% The starting (uppercase) letter is in \thearg. 2638*6a54128fSAndroid Build Coastguard Worker\def\uppercaseenumerate{% 2639*6a54128fSAndroid Build Coastguard Worker \itemno = \expandafter`\thearg 2640*6a54128fSAndroid Build Coastguard Worker \startenumeration{% 2641*6a54128fSAndroid Build Coastguard Worker % Be sure we're not beyond the end of the alphabet. 2642*6a54128fSAndroid Build Coastguard Worker \ifnum\itemno=0 2643*6a54128fSAndroid Build Coastguard Worker \errmessage{No more uppercase letters in @enumerate; get a bigger 2644*6a54128fSAndroid Build Coastguard Worker alphabet} 2645*6a54128fSAndroid Build Coastguard Worker \fi 2646*6a54128fSAndroid Build Coastguard Worker \char\uccode\itemno 2647*6a54128fSAndroid Build Coastguard Worker }% 2648*6a54128fSAndroid Build Coastguard Worker} 2649*6a54128fSAndroid Build Coastguard Worker 2650*6a54128fSAndroid Build Coastguard Worker% Call \doitemize, adding a period to the first argument and supplying the 2651*6a54128fSAndroid Build Coastguard Worker% common last two arguments. Also subtract one from the initial value in 2652*6a54128fSAndroid Build Coastguard Worker% \itemno, since @item increments \itemno. 2653*6a54128fSAndroid Build Coastguard Worker% 2654*6a54128fSAndroid Build Coastguard Worker\def\startenumeration#1{% 2655*6a54128fSAndroid Build Coastguard Worker \advance\itemno by -1 2656*6a54128fSAndroid Build Coastguard Worker \doitemize{#1.}\flushcr 2657*6a54128fSAndroid Build Coastguard Worker} 2658*6a54128fSAndroid Build Coastguard Worker 2659*6a54128fSAndroid Build Coastguard Worker% @alphaenumerate and @capsenumerate are abbreviations for giving an arg 2660*6a54128fSAndroid Build Coastguard Worker% to @enumerate. 2661*6a54128fSAndroid Build Coastguard Worker% 2662*6a54128fSAndroid Build Coastguard Worker\def\alphaenumerate{\enumerate{a}} 2663*6a54128fSAndroid Build Coastguard Worker\def\capsenumerate{\enumerate{A}} 2664*6a54128fSAndroid Build Coastguard Worker\def\Ealphaenumerate{\Eenumerate} 2665*6a54128fSAndroid Build Coastguard Worker\def\Ecapsenumerate{\Eenumerate} 2666*6a54128fSAndroid Build Coastguard Worker 2667*6a54128fSAndroid Build Coastguard Worker 2668*6a54128fSAndroid Build Coastguard Worker% @multitable macros 2669*6a54128fSAndroid Build Coastguard Worker% Amy Hendrickson, 8/18/94, 3/6/96 2670*6a54128fSAndroid Build Coastguard Worker% 2671*6a54128fSAndroid Build Coastguard Worker% @multitable ... @end multitable will make as many columns as desired. 2672*6a54128fSAndroid Build Coastguard Worker% Contents of each column will wrap at width given in preamble. Width 2673*6a54128fSAndroid Build Coastguard Worker% can be specified either with sample text given in a template line, 2674*6a54128fSAndroid Build Coastguard Worker% or in percent of \hsize, the current width of text on page. 2675*6a54128fSAndroid Build Coastguard Worker 2676*6a54128fSAndroid Build Coastguard Worker% Table can continue over pages but will only break between lines. 2677*6a54128fSAndroid Build Coastguard Worker 2678*6a54128fSAndroid Build Coastguard Worker% To make preamble: 2679*6a54128fSAndroid Build Coastguard Worker% 2680*6a54128fSAndroid Build Coastguard Worker% Either define widths of columns in terms of percent of \hsize: 2681*6a54128fSAndroid Build Coastguard Worker% @multitable @columnfractions .25 .3 .45 2682*6a54128fSAndroid Build Coastguard Worker% @item ... 2683*6a54128fSAndroid Build Coastguard Worker% 2684*6a54128fSAndroid Build Coastguard Worker% Numbers following @columnfractions are the percent of the total 2685*6a54128fSAndroid Build Coastguard Worker% current hsize to be used for each column. You may use as many 2686*6a54128fSAndroid Build Coastguard Worker% columns as desired. 2687*6a54128fSAndroid Build Coastguard Worker 2688*6a54128fSAndroid Build Coastguard Worker 2689*6a54128fSAndroid Build Coastguard Worker% Or use a template: 2690*6a54128fSAndroid Build Coastguard Worker% @multitable {Column 1 template} {Column 2 template} {Column 3 template} 2691*6a54128fSAndroid Build Coastguard Worker% @item ... 2692*6a54128fSAndroid Build Coastguard Worker% using the widest term desired in each column. 2693*6a54128fSAndroid Build Coastguard Worker 2694*6a54128fSAndroid Build Coastguard Worker% Each new table line starts with @item, each subsequent new column 2695*6a54128fSAndroid Build Coastguard Worker% starts with @tab. Empty columns may be produced by supplying @tab's 2696*6a54128fSAndroid Build Coastguard Worker% with nothing between them for as many times as empty columns are needed, 2697*6a54128fSAndroid Build Coastguard Worker% ie, @tab@tab@tab will produce two empty columns. 2698*6a54128fSAndroid Build Coastguard Worker 2699*6a54128fSAndroid Build Coastguard Worker% @item, @tab do not need to be on their own lines, but it will not hurt 2700*6a54128fSAndroid Build Coastguard Worker% if they are. 2701*6a54128fSAndroid Build Coastguard Worker 2702*6a54128fSAndroid Build Coastguard Worker% Sample multitable: 2703*6a54128fSAndroid Build Coastguard Worker 2704*6a54128fSAndroid Build Coastguard Worker% @multitable {Column 1 template} {Column 2 template} {Column 3 template} 2705*6a54128fSAndroid Build Coastguard Worker% @item first col stuff @tab second col stuff @tab third col 2706*6a54128fSAndroid Build Coastguard Worker% @item 2707*6a54128fSAndroid Build Coastguard Worker% first col stuff 2708*6a54128fSAndroid Build Coastguard Worker% @tab 2709*6a54128fSAndroid Build Coastguard Worker% second col stuff 2710*6a54128fSAndroid Build Coastguard Worker% @tab 2711*6a54128fSAndroid Build Coastguard Worker% third col 2712*6a54128fSAndroid Build Coastguard Worker% @item first col stuff @tab second col stuff 2713*6a54128fSAndroid Build Coastguard Worker% @tab Many paragraphs of text may be used in any column. 2714*6a54128fSAndroid Build Coastguard Worker% 2715*6a54128fSAndroid Build Coastguard Worker% They will wrap at the width determined by the template. 2716*6a54128fSAndroid Build Coastguard Worker% @item@tab@tab This will be in third column. 2717*6a54128fSAndroid Build Coastguard Worker% @end multitable 2718*6a54128fSAndroid Build Coastguard Worker 2719*6a54128fSAndroid Build Coastguard Worker% Default dimensions may be reset by user. 2720*6a54128fSAndroid Build Coastguard Worker% @multitableparskip is vertical space between paragraphs in table. 2721*6a54128fSAndroid Build Coastguard Worker% @multitableparindent is paragraph indent in table. 2722*6a54128fSAndroid Build Coastguard Worker% @multitablecolmargin is horizontal space to be left between columns. 2723*6a54128fSAndroid Build Coastguard Worker% @multitablelinespace is space to leave between table items, baseline 2724*6a54128fSAndroid Build Coastguard Worker% to baseline. 2725*6a54128fSAndroid Build Coastguard Worker% 0pt means it depends on current normal line spacing. 2726*6a54128fSAndroid Build Coastguard Worker% 2727*6a54128fSAndroid Build Coastguard Worker\newskip\multitableparskip 2728*6a54128fSAndroid Build Coastguard Worker\newskip\multitableparindent 2729*6a54128fSAndroid Build Coastguard Worker\newdimen\multitablecolspace 2730*6a54128fSAndroid Build Coastguard Worker\newskip\multitablelinespace 2731*6a54128fSAndroid Build Coastguard Worker\multitableparskip=0pt 2732*6a54128fSAndroid Build Coastguard Worker\multitableparindent=6pt 2733*6a54128fSAndroid Build Coastguard Worker\multitablecolspace=12pt 2734*6a54128fSAndroid Build Coastguard Worker\multitablelinespace=0pt 2735*6a54128fSAndroid Build Coastguard Worker 2736*6a54128fSAndroid Build Coastguard Worker% Macros used to set up halign preamble: 2737*6a54128fSAndroid Build Coastguard Worker% 2738*6a54128fSAndroid Build Coastguard Worker\let\endsetuptable\relax 2739*6a54128fSAndroid Build Coastguard Worker\def\xendsetuptable{\endsetuptable} 2740*6a54128fSAndroid Build Coastguard Worker\let\columnfractions\relax 2741*6a54128fSAndroid Build Coastguard Worker\def\xcolumnfractions{\columnfractions} 2742*6a54128fSAndroid Build Coastguard Worker\newif\ifsetpercent 2743*6a54128fSAndroid Build Coastguard Worker 2744*6a54128fSAndroid Build Coastguard Worker% #1 is the @columnfraction, usually a decimal number like .5, but might 2745*6a54128fSAndroid Build Coastguard Worker% be just 1. We just use it, whatever it is. 2746*6a54128fSAndroid Build Coastguard Worker% 2747*6a54128fSAndroid Build Coastguard Worker\def\pickupwholefraction#1 {% 2748*6a54128fSAndroid Build Coastguard Worker \global\advance\colcount by 1 2749*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% 2750*6a54128fSAndroid Build Coastguard Worker \setuptable 2751*6a54128fSAndroid Build Coastguard Worker} 2752*6a54128fSAndroid Build Coastguard Worker 2753*6a54128fSAndroid Build Coastguard Worker\newcount\colcount 2754*6a54128fSAndroid Build Coastguard Worker\def\setuptable#1{% 2755*6a54128fSAndroid Build Coastguard Worker \def\firstarg{#1}% 2756*6a54128fSAndroid Build Coastguard Worker \ifx\firstarg\xendsetuptable 2757*6a54128fSAndroid Build Coastguard Worker \let\go = \relax 2758*6a54128fSAndroid Build Coastguard Worker \else 2759*6a54128fSAndroid Build Coastguard Worker \ifx\firstarg\xcolumnfractions 2760*6a54128fSAndroid Build Coastguard Worker \global\setpercenttrue 2761*6a54128fSAndroid Build Coastguard Worker \else 2762*6a54128fSAndroid Build Coastguard Worker \ifsetpercent 2763*6a54128fSAndroid Build Coastguard Worker \let\go\pickupwholefraction 2764*6a54128fSAndroid Build Coastguard Worker \else 2765*6a54128fSAndroid Build Coastguard Worker \global\advance\colcount by 1 2766*6a54128fSAndroid Build Coastguard Worker \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a 2767*6a54128fSAndroid Build Coastguard Worker % separator; typically that is always in the input, anyway. 2768*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% 2769*6a54128fSAndroid Build Coastguard Worker \fi 2770*6a54128fSAndroid Build Coastguard Worker \fi 2771*6a54128fSAndroid Build Coastguard Worker \ifx\go\pickupwholefraction 2772*6a54128fSAndroid Build Coastguard Worker % Put the argument back for the \pickupwholefraction call, so 2773*6a54128fSAndroid Build Coastguard Worker % we'll always have a period there to be parsed. 2774*6a54128fSAndroid Build Coastguard Worker \def\go{\pickupwholefraction#1}% 2775*6a54128fSAndroid Build Coastguard Worker \else 2776*6a54128fSAndroid Build Coastguard Worker \let\go = \setuptable 2777*6a54128fSAndroid Build Coastguard Worker \fi% 2778*6a54128fSAndroid Build Coastguard Worker \fi 2779*6a54128fSAndroid Build Coastguard Worker \go 2780*6a54128fSAndroid Build Coastguard Worker} 2781*6a54128fSAndroid Build Coastguard Worker 2782*6a54128fSAndroid Build Coastguard Worker% multitable-only commands. 2783*6a54128fSAndroid Build Coastguard Worker% 2784*6a54128fSAndroid Build Coastguard Worker% @headitem starts a heading row, which we typeset in bold. 2785*6a54128fSAndroid Build Coastguard Worker% Assignments have to be global since we are inside the implicit group 2786*6a54128fSAndroid Build Coastguard Worker% of an alignment entry. Note that \everycr resets \everytab. 2787*6a54128fSAndroid Build Coastguard Worker\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% 2788*6a54128fSAndroid Build Coastguard Worker% 2789*6a54128fSAndroid Build Coastguard Worker% A \tab used to include \hskip1sp. But then the space in a template 2790*6a54128fSAndroid Build Coastguard Worker% line is not enough. That is bad. So let's go back to just `&' until 2791*6a54128fSAndroid Build Coastguard Worker% we encounter the problem it was intended to solve again. 2792*6a54128fSAndroid Build Coastguard Worker% --karl, [email protected], 20apr99. 2793*6a54128fSAndroid Build Coastguard Worker\def\tab{\checkenv\multitable &\the\everytab}% 2794*6a54128fSAndroid Build Coastguard Worker 2795*6a54128fSAndroid Build Coastguard Worker% @multitable ... @end multitable definitions: 2796*6a54128fSAndroid Build Coastguard Worker% 2797*6a54128fSAndroid Build Coastguard Worker\newtoks\everytab % insert after every tab. 2798*6a54128fSAndroid Build Coastguard Worker% 2799*6a54128fSAndroid Build Coastguard Worker\envdef\multitable{% 2800*6a54128fSAndroid Build Coastguard Worker \vskip\parskip 2801*6a54128fSAndroid Build Coastguard Worker \startsavinginserts 2802*6a54128fSAndroid Build Coastguard Worker % 2803*6a54128fSAndroid Build Coastguard Worker % @item within a multitable starts a normal row. 2804*6a54128fSAndroid Build Coastguard Worker % We use \def instead of \let so that if one of the multitable entries 2805*6a54128fSAndroid Build Coastguard Worker % contains an @itemize, we don't choke on the \item (seen as \crcr aka 2806*6a54128fSAndroid Build Coastguard Worker % \endtemplate) expanding \doitemize. 2807*6a54128fSAndroid Build Coastguard Worker \def\item{\crcr}% 2808*6a54128fSAndroid Build Coastguard Worker % 2809*6a54128fSAndroid Build Coastguard Worker \tolerance=9500 2810*6a54128fSAndroid Build Coastguard Worker \hbadness=9500 2811*6a54128fSAndroid Build Coastguard Worker \setmultitablespacing 2812*6a54128fSAndroid Build Coastguard Worker \parskip=\multitableparskip 2813*6a54128fSAndroid Build Coastguard Worker \parindent=\multitableparindent 2814*6a54128fSAndroid Build Coastguard Worker \overfullrule=0pt 2815*6a54128fSAndroid Build Coastguard Worker \global\colcount=0 2816*6a54128fSAndroid Build Coastguard Worker % 2817*6a54128fSAndroid Build Coastguard Worker \everycr = {% 2818*6a54128fSAndroid Build Coastguard Worker \noalign{% 2819*6a54128fSAndroid Build Coastguard Worker \global\everytab={}% 2820*6a54128fSAndroid Build Coastguard Worker \global\colcount=0 % Reset the column counter. 2821*6a54128fSAndroid Build Coastguard Worker % Check for saved footnotes, etc. 2822*6a54128fSAndroid Build Coastguard Worker \checkinserts 2823*6a54128fSAndroid Build Coastguard Worker % Keeps underfull box messages off when table breaks over pages. 2824*6a54128fSAndroid Build Coastguard Worker %\filbreak 2825*6a54128fSAndroid Build Coastguard Worker % Maybe so, but it also creates really weird page breaks when the 2826*6a54128fSAndroid Build Coastguard Worker % table breaks over pages. Wouldn't \vfil be better? Wait until the 2827*6a54128fSAndroid Build Coastguard Worker % problem manifests itself, so it can be fixed for real --karl. 2828*6a54128fSAndroid Build Coastguard Worker }% 2829*6a54128fSAndroid Build Coastguard Worker }% 2830*6a54128fSAndroid Build Coastguard Worker % 2831*6a54128fSAndroid Build Coastguard Worker \parsearg\domultitable 2832*6a54128fSAndroid Build Coastguard Worker} 2833*6a54128fSAndroid Build Coastguard Worker\def\domultitable#1{% 2834*6a54128fSAndroid Build Coastguard Worker % To parse everything between @multitable and @item: 2835*6a54128fSAndroid Build Coastguard Worker \setuptable#1 \endsetuptable 2836*6a54128fSAndroid Build Coastguard Worker % 2837*6a54128fSAndroid Build Coastguard Worker % This preamble sets up a generic column definition, which will 2838*6a54128fSAndroid Build Coastguard Worker % be used as many times as user calls for columns. 2839*6a54128fSAndroid Build Coastguard Worker % \vtop will set a single line and will also let text wrap and 2840*6a54128fSAndroid Build Coastguard Worker % continue for many paragraphs if desired. 2841*6a54128fSAndroid Build Coastguard Worker \halign\bgroup &% 2842*6a54128fSAndroid Build Coastguard Worker \global\advance\colcount by 1 2843*6a54128fSAndroid Build Coastguard Worker \multistrut 2844*6a54128fSAndroid Build Coastguard Worker \vtop{% 2845*6a54128fSAndroid Build Coastguard Worker % Use the current \colcount to find the correct column width: 2846*6a54128fSAndroid Build Coastguard Worker \hsize=\expandafter\csname col\the\colcount\endcsname 2847*6a54128fSAndroid Build Coastguard Worker % 2848*6a54128fSAndroid Build Coastguard Worker % In order to keep entries from bumping into each other 2849*6a54128fSAndroid Build Coastguard Worker % we will add a \leftskip of \multitablecolspace to all columns after 2850*6a54128fSAndroid Build Coastguard Worker % the first one. 2851*6a54128fSAndroid Build Coastguard Worker % 2852*6a54128fSAndroid Build Coastguard Worker % If a template has been used, we will add \multitablecolspace 2853*6a54128fSAndroid Build Coastguard Worker % to the width of each template entry. 2854*6a54128fSAndroid Build Coastguard Worker % 2855*6a54128fSAndroid Build Coastguard Worker % If the user has set preamble in terms of percent of \hsize we will 2856*6a54128fSAndroid Build Coastguard Worker % use that dimension as the width of the column, and the \leftskip 2857*6a54128fSAndroid Build Coastguard Worker % will keep entries from bumping into each other. Table will start at 2858*6a54128fSAndroid Build Coastguard Worker % left margin and final column will justify at right margin. 2859*6a54128fSAndroid Build Coastguard Worker % 2860*6a54128fSAndroid Build Coastguard Worker % Make sure we don't inherit \rightskip from the outer environment. 2861*6a54128fSAndroid Build Coastguard Worker \rightskip=0pt 2862*6a54128fSAndroid Build Coastguard Worker \ifnum\colcount=1 2863*6a54128fSAndroid Build Coastguard Worker % The first column will be indented with the surrounding text. 2864*6a54128fSAndroid Build Coastguard Worker \advance\hsize by\leftskip 2865*6a54128fSAndroid Build Coastguard Worker \else 2866*6a54128fSAndroid Build Coastguard Worker \ifsetpercent \else 2867*6a54128fSAndroid Build Coastguard Worker % If user has not set preamble in terms of percent of \hsize 2868*6a54128fSAndroid Build Coastguard Worker % we will advance \hsize by \multitablecolspace. 2869*6a54128fSAndroid Build Coastguard Worker \advance\hsize by \multitablecolspace 2870*6a54128fSAndroid Build Coastguard Worker \fi 2871*6a54128fSAndroid Build Coastguard Worker % In either case we will make \leftskip=\multitablecolspace: 2872*6a54128fSAndroid Build Coastguard Worker \leftskip=\multitablecolspace 2873*6a54128fSAndroid Build Coastguard Worker \fi 2874*6a54128fSAndroid Build Coastguard Worker % Ignoring space at the beginning and end avoids an occasional spurious 2875*6a54128fSAndroid Build Coastguard Worker % blank line, when TeX decides to break the line at the space before the 2876*6a54128fSAndroid Build Coastguard Worker % box from the multistrut, so the strut ends up on a line by itself. 2877*6a54128fSAndroid Build Coastguard Worker % For example: 2878*6a54128fSAndroid Build Coastguard Worker % @multitable @columnfractions .11 .89 2879*6a54128fSAndroid Build Coastguard Worker % @item @code{#} 2880*6a54128fSAndroid Build Coastguard Worker % @tab Legal holiday which is valid in major parts of the whole country. 2881*6a54128fSAndroid Build Coastguard Worker % Is automatically provided with highlighting sequences respectively 2882*6a54128fSAndroid Build Coastguard Worker % marking characters. 2883*6a54128fSAndroid Build Coastguard Worker \noindent\ignorespaces##\unskip\multistrut 2884*6a54128fSAndroid Build Coastguard Worker }\cr 2885*6a54128fSAndroid Build Coastguard Worker} 2886*6a54128fSAndroid Build Coastguard Worker\def\Emultitable{% 2887*6a54128fSAndroid Build Coastguard Worker \crcr 2888*6a54128fSAndroid Build Coastguard Worker \egroup % end the \halign 2889*6a54128fSAndroid Build Coastguard Worker \global\setpercentfalse 2890*6a54128fSAndroid Build Coastguard Worker} 2891*6a54128fSAndroid Build Coastguard Worker 2892*6a54128fSAndroid Build Coastguard Worker\def\setmultitablespacing{% 2893*6a54128fSAndroid Build Coastguard Worker \def\multistrut{\strut}% just use the standard line spacing 2894*6a54128fSAndroid Build Coastguard Worker % 2895*6a54128fSAndroid Build Coastguard Worker % Compute \multitablelinespace (if not defined by user) for use in 2896*6a54128fSAndroid Build Coastguard Worker % \multitableparskip calculation. We used define \multistrut based on 2897*6a54128fSAndroid Build Coastguard Worker % this, but (ironically) that caused the spacing to be off. 2898*6a54128fSAndroid Build Coastguard Worker % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. 2899*6a54128fSAndroid Build Coastguard Worker\ifdim\multitablelinespace=0pt 2900*6a54128fSAndroid Build Coastguard Worker\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip 2901*6a54128fSAndroid Build Coastguard Worker\global\advance\multitablelinespace by-\ht0 2902*6a54128fSAndroid Build Coastguard Worker\fi 2903*6a54128fSAndroid Build Coastguard Worker%% Test to see if parskip is larger than space between lines of 2904*6a54128fSAndroid Build Coastguard Worker%% table. If not, do nothing. 2905*6a54128fSAndroid Build Coastguard Worker%% If so, set to same dimension as multitablelinespace. 2906*6a54128fSAndroid Build Coastguard Worker\ifdim\multitableparskip>\multitablelinespace 2907*6a54128fSAndroid Build Coastguard Worker\global\multitableparskip=\multitablelinespace 2908*6a54128fSAndroid Build Coastguard Worker\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller 2909*6a54128fSAndroid Build Coastguard Worker %% than skip between lines in the table. 2910*6a54128fSAndroid Build Coastguard Worker\fi% 2911*6a54128fSAndroid Build Coastguard Worker\ifdim\multitableparskip=0pt 2912*6a54128fSAndroid Build Coastguard Worker\global\multitableparskip=\multitablelinespace 2913*6a54128fSAndroid Build Coastguard Worker\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller 2914*6a54128fSAndroid Build Coastguard Worker %% than skip between lines in the table. 2915*6a54128fSAndroid Build Coastguard Worker\fi} 2916*6a54128fSAndroid Build Coastguard Worker 2917*6a54128fSAndroid Build Coastguard Worker 2918*6a54128fSAndroid Build Coastguard Worker\message{conditionals,} 2919*6a54128fSAndroid Build Coastguard Worker 2920*6a54128fSAndroid Build Coastguard Worker% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, 2921*6a54128fSAndroid Build Coastguard Worker% @ifnotxml always succeed. They currently do nothing; we don't 2922*6a54128fSAndroid Build Coastguard Worker% attempt to check whether the conditionals are properly nested. But we 2923*6a54128fSAndroid Build Coastguard Worker% have to remember that they are conditionals, so that @end doesn't 2924*6a54128fSAndroid Build Coastguard Worker% attempt to close an environment group. 2925*6a54128fSAndroid Build Coastguard Worker% 2926*6a54128fSAndroid Build Coastguard Worker\def\makecond#1{% 2927*6a54128fSAndroid Build Coastguard Worker \expandafter\let\csname #1\endcsname = \relax 2928*6a54128fSAndroid Build Coastguard Worker \expandafter\let\csname iscond.#1\endcsname = 1 2929*6a54128fSAndroid Build Coastguard Worker} 2930*6a54128fSAndroid Build Coastguard Worker\makecond{iftex} 2931*6a54128fSAndroid Build Coastguard Worker\makecond{ifnotdocbook} 2932*6a54128fSAndroid Build Coastguard Worker\makecond{ifnothtml} 2933*6a54128fSAndroid Build Coastguard Worker\makecond{ifnotinfo} 2934*6a54128fSAndroid Build Coastguard Worker\makecond{ifnotplaintext} 2935*6a54128fSAndroid Build Coastguard Worker\makecond{ifnotxml} 2936*6a54128fSAndroid Build Coastguard Worker 2937*6a54128fSAndroid Build Coastguard Worker% Ignore @ignore, @ifhtml, @ifinfo, and the like. 2938*6a54128fSAndroid Build Coastguard Worker% 2939*6a54128fSAndroid Build Coastguard Worker\def\direntry{\doignore{direntry}} 2940*6a54128fSAndroid Build Coastguard Worker\def\documentdescription{\doignore{documentdescription}} 2941*6a54128fSAndroid Build Coastguard Worker\def\docbook{\doignore{docbook}} 2942*6a54128fSAndroid Build Coastguard Worker\def\html{\doignore{html}} 2943*6a54128fSAndroid Build Coastguard Worker\def\ifdocbook{\doignore{ifdocbook}} 2944*6a54128fSAndroid Build Coastguard Worker\def\ifhtml{\doignore{ifhtml}} 2945*6a54128fSAndroid Build Coastguard Worker\def\ifinfo{\doignore{ifinfo}} 2946*6a54128fSAndroid Build Coastguard Worker\def\ifnottex{\doignore{ifnottex}} 2947*6a54128fSAndroid Build Coastguard Worker\def\ifplaintext{\doignore{ifplaintext}} 2948*6a54128fSAndroid Build Coastguard Worker\def\ifxml{\doignore{ifxml}} 2949*6a54128fSAndroid Build Coastguard Worker\def\ignore{\doignore{ignore}} 2950*6a54128fSAndroid Build Coastguard Worker\def\menu{\doignore{menu}} 2951*6a54128fSAndroid Build Coastguard Worker\def\xml{\doignore{xml}} 2952*6a54128fSAndroid Build Coastguard Worker 2953*6a54128fSAndroid Build Coastguard Worker% Ignore text until a line `@end #1', keeping track of nested conditionals. 2954*6a54128fSAndroid Build Coastguard Worker% 2955*6a54128fSAndroid Build Coastguard Worker% A count to remember the depth of nesting. 2956*6a54128fSAndroid Build Coastguard Worker\newcount\doignorecount 2957*6a54128fSAndroid Build Coastguard Worker 2958*6a54128fSAndroid Build Coastguard Worker\def\doignore#1{\begingroup 2959*6a54128fSAndroid Build Coastguard Worker % Scan in ``verbatim'' mode: 2960*6a54128fSAndroid Build Coastguard Worker \obeylines 2961*6a54128fSAndroid Build Coastguard Worker \catcode`\@ = \other 2962*6a54128fSAndroid Build Coastguard Worker \catcode`\{ = \other 2963*6a54128fSAndroid Build Coastguard Worker \catcode`\} = \other 2964*6a54128fSAndroid Build Coastguard Worker % 2965*6a54128fSAndroid Build Coastguard Worker % Make sure that spaces turn into tokens that match what \doignoretext wants. 2966*6a54128fSAndroid Build Coastguard Worker \spaceisspace 2967*6a54128fSAndroid Build Coastguard Worker % 2968*6a54128fSAndroid Build Coastguard Worker % Count number of #1's that we've seen. 2969*6a54128fSAndroid Build Coastguard Worker \doignorecount = 0 2970*6a54128fSAndroid Build Coastguard Worker % 2971*6a54128fSAndroid Build Coastguard Worker % Swallow text until we reach the matching `@end #1'. 2972*6a54128fSAndroid Build Coastguard Worker \dodoignore{#1}% 2973*6a54128fSAndroid Build Coastguard Worker} 2974*6a54128fSAndroid Build Coastguard Worker 2975*6a54128fSAndroid Build Coastguard Worker{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. 2976*6a54128fSAndroid Build Coastguard Worker \obeylines % 2977*6a54128fSAndroid Build Coastguard Worker % 2978*6a54128fSAndroid Build Coastguard Worker \gdef\dodoignore#1{% 2979*6a54128fSAndroid Build Coastguard Worker % #1 contains the command name as a string, e.g., `ifinfo'. 2980*6a54128fSAndroid Build Coastguard Worker % 2981*6a54128fSAndroid Build Coastguard Worker % Define a command to find the next `@end #1'. 2982*6a54128fSAndroid Build Coastguard Worker \long\def\doignoretext##1^^M@end #1{% 2983*6a54128fSAndroid Build Coastguard Worker \doignoretextyyy##1^^M@#1\_STOP_}% 2984*6a54128fSAndroid Build Coastguard Worker % 2985*6a54128fSAndroid Build Coastguard Worker % And this command to find another #1 command, at the beginning of a 2986*6a54128fSAndroid Build Coastguard Worker % line. (Otherwise, we would consider a line `@c @ifset', for 2987*6a54128fSAndroid Build Coastguard Worker % example, to count as an @ifset for nesting.) 2988*6a54128fSAndroid Build Coastguard Worker \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% 2989*6a54128fSAndroid Build Coastguard Worker % 2990*6a54128fSAndroid Build Coastguard Worker % And now expand that command. 2991*6a54128fSAndroid Build Coastguard Worker \doignoretext ^^M% 2992*6a54128fSAndroid Build Coastguard Worker }% 2993*6a54128fSAndroid Build Coastguard Worker} 2994*6a54128fSAndroid Build Coastguard Worker 2995*6a54128fSAndroid Build Coastguard Worker\def\doignoreyyy#1{% 2996*6a54128fSAndroid Build Coastguard Worker \def\temp{#1}% 2997*6a54128fSAndroid Build Coastguard Worker \ifx\temp\empty % Nothing found. 2998*6a54128fSAndroid Build Coastguard Worker \let\next\doignoretextzzz 2999*6a54128fSAndroid Build Coastguard Worker \else % Found a nested condition, ... 3000*6a54128fSAndroid Build Coastguard Worker \advance\doignorecount by 1 3001*6a54128fSAndroid Build Coastguard Worker \let\next\doignoretextyyy % ..., look for another. 3002*6a54128fSAndroid Build Coastguard Worker % If we're here, #1 ends with ^^M\ifinfo (for example). 3003*6a54128fSAndroid Build Coastguard Worker \fi 3004*6a54128fSAndroid Build Coastguard Worker \next #1% the token \_STOP_ is present just after this macro. 3005*6a54128fSAndroid Build Coastguard Worker} 3006*6a54128fSAndroid Build Coastguard Worker 3007*6a54128fSAndroid Build Coastguard Worker% We have to swallow the remaining "\_STOP_". 3008*6a54128fSAndroid Build Coastguard Worker% 3009*6a54128fSAndroid Build Coastguard Worker\def\doignoretextzzz#1{% 3010*6a54128fSAndroid Build Coastguard Worker \ifnum\doignorecount = 0 % We have just found the outermost @end. 3011*6a54128fSAndroid Build Coastguard Worker \let\next\enddoignore 3012*6a54128fSAndroid Build Coastguard Worker \else % Still inside a nested condition. 3013*6a54128fSAndroid Build Coastguard Worker \advance\doignorecount by -1 3014*6a54128fSAndroid Build Coastguard Worker \let\next\doignoretext % Look for the next @end. 3015*6a54128fSAndroid Build Coastguard Worker \fi 3016*6a54128fSAndroid Build Coastguard Worker \next 3017*6a54128fSAndroid Build Coastguard Worker} 3018*6a54128fSAndroid Build Coastguard Worker 3019*6a54128fSAndroid Build Coastguard Worker% Finish off ignored text. 3020*6a54128fSAndroid Build Coastguard Worker{ \obeylines% 3021*6a54128fSAndroid Build Coastguard Worker % Ignore anything after the last `@end #1'; this matters in verbatim 3022*6a54128fSAndroid Build Coastguard Worker % environments, where otherwise the newline after an ignored conditional 3023*6a54128fSAndroid Build Coastguard Worker % would result in a blank line in the output. 3024*6a54128fSAndroid Build Coastguard Worker \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% 3025*6a54128fSAndroid Build Coastguard Worker} 3026*6a54128fSAndroid Build Coastguard Worker 3027*6a54128fSAndroid Build Coastguard Worker 3028*6a54128fSAndroid Build Coastguard Worker% @set VAR sets the variable VAR to an empty value. 3029*6a54128fSAndroid Build Coastguard Worker% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. 3030*6a54128fSAndroid Build Coastguard Worker% 3031*6a54128fSAndroid Build Coastguard Worker% Since we want to separate VAR from REST-OF-LINE (which might be 3032*6a54128fSAndroid Build Coastguard Worker% empty), we can't just use \parsearg; we have to insert a space of our 3033*6a54128fSAndroid Build Coastguard Worker% own to delimit the rest of the line, and then take it out again if we 3034*6a54128fSAndroid Build Coastguard Worker% didn't need it. 3035*6a54128fSAndroid Build Coastguard Worker% We rely on the fact that \parsearg sets \catcode`\ =10. 3036*6a54128fSAndroid Build Coastguard Worker% 3037*6a54128fSAndroid Build Coastguard Worker\parseargdef\set{\setyyy#1 \endsetyyy} 3038*6a54128fSAndroid Build Coastguard Worker\def\setyyy#1 #2\endsetyyy{% 3039*6a54128fSAndroid Build Coastguard Worker {% 3040*6a54128fSAndroid Build Coastguard Worker \makevalueexpandable 3041*6a54128fSAndroid Build Coastguard Worker \def\temp{#2}% 3042*6a54128fSAndroid Build Coastguard Worker \edef\next{\gdef\makecsname{SET#1}}% 3043*6a54128fSAndroid Build Coastguard Worker \ifx\temp\empty 3044*6a54128fSAndroid Build Coastguard Worker \next{}% 3045*6a54128fSAndroid Build Coastguard Worker \else 3046*6a54128fSAndroid Build Coastguard Worker \setzzz#2\endsetzzz 3047*6a54128fSAndroid Build Coastguard Worker \fi 3048*6a54128fSAndroid Build Coastguard Worker }% 3049*6a54128fSAndroid Build Coastguard Worker} 3050*6a54128fSAndroid Build Coastguard Worker% Remove the trailing space \setxxx inserted. 3051*6a54128fSAndroid Build Coastguard Worker\def\setzzz#1 \endsetzzz{\next{#1}} 3052*6a54128fSAndroid Build Coastguard Worker 3053*6a54128fSAndroid Build Coastguard Worker% @clear VAR clears (i.e., unsets) the variable VAR. 3054*6a54128fSAndroid Build Coastguard Worker% 3055*6a54128fSAndroid Build Coastguard Worker\parseargdef\clear{% 3056*6a54128fSAndroid Build Coastguard Worker {% 3057*6a54128fSAndroid Build Coastguard Worker \makevalueexpandable 3058*6a54128fSAndroid Build Coastguard Worker \global\expandafter\let\csname SET#1\endcsname=\relax 3059*6a54128fSAndroid Build Coastguard Worker }% 3060*6a54128fSAndroid Build Coastguard Worker} 3061*6a54128fSAndroid Build Coastguard Worker 3062*6a54128fSAndroid Build Coastguard Worker% @value{foo} gets the text saved in variable foo. 3063*6a54128fSAndroid Build Coastguard Worker\def\value{\begingroup\makevalueexpandable\valuexxx} 3064*6a54128fSAndroid Build Coastguard Worker\def\valuexxx#1{\expandablevalue{#1}\endgroup} 3065*6a54128fSAndroid Build Coastguard Worker{ 3066*6a54128fSAndroid Build Coastguard Worker \catcode`\- = \active \catcode`\_ = \active 3067*6a54128fSAndroid Build Coastguard Worker % 3068*6a54128fSAndroid Build Coastguard Worker \gdef\makevalueexpandable{% 3069*6a54128fSAndroid Build Coastguard Worker \let\value = \expandablevalue 3070*6a54128fSAndroid Build Coastguard Worker % We don't want these characters active, ... 3071*6a54128fSAndroid Build Coastguard Worker \catcode`\-=\other \catcode`\_=\other 3072*6a54128fSAndroid Build Coastguard Worker % ..., but we might end up with active ones in the argument if 3073*6a54128fSAndroid Build Coastguard Worker % we're called from @code, as @code{@value{foo-bar_}}, though. 3074*6a54128fSAndroid Build Coastguard Worker % So \let them to their normal equivalents. 3075*6a54128fSAndroid Build Coastguard Worker \let-\realdash \let_\normalunderscore 3076*6a54128fSAndroid Build Coastguard Worker } 3077*6a54128fSAndroid Build Coastguard Worker} 3078*6a54128fSAndroid Build Coastguard Worker 3079*6a54128fSAndroid Build Coastguard Worker% We have this subroutine so that we can handle at least some @value's 3080*6a54128fSAndroid Build Coastguard Worker% properly in indexes (we call \makevalueexpandable in \indexdummies). 3081*6a54128fSAndroid Build Coastguard Worker% The command has to be fully expandable (if the variable is set), since 3082*6a54128fSAndroid Build Coastguard Worker% the result winds up in the index file. This means that if the 3083*6a54128fSAndroid Build Coastguard Worker% variable's value contains other Texinfo commands, it's almost certain 3084*6a54128fSAndroid Build Coastguard Worker% it will fail (although perhaps we could fix that with sufficient work 3085*6a54128fSAndroid Build Coastguard Worker% to do a one-level expansion on the result, instead of complete). 3086*6a54128fSAndroid Build Coastguard Worker% 3087*6a54128fSAndroid Build Coastguard Worker\def\expandablevalue#1{% 3088*6a54128fSAndroid Build Coastguard Worker \expandafter\ifx\csname SET#1\endcsname\relax 3089*6a54128fSAndroid Build Coastguard Worker {[No value for ``#1'']}% 3090*6a54128fSAndroid Build Coastguard Worker \message{Variable `#1', used in @value, is not set.}% 3091*6a54128fSAndroid Build Coastguard Worker \else 3092*6a54128fSAndroid Build Coastguard Worker \csname SET#1\endcsname 3093*6a54128fSAndroid Build Coastguard Worker \fi 3094*6a54128fSAndroid Build Coastguard Worker} 3095*6a54128fSAndroid Build Coastguard Worker 3096*6a54128fSAndroid Build Coastguard Worker% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined 3097*6a54128fSAndroid Build Coastguard Worker% with @set. 3098*6a54128fSAndroid Build Coastguard Worker% 3099*6a54128fSAndroid Build Coastguard Worker% To get special treatment of `@end ifset,' call \makeond and the redefine. 3100*6a54128fSAndroid Build Coastguard Worker% 3101*6a54128fSAndroid Build Coastguard Worker\makecond{ifset} 3102*6a54128fSAndroid Build Coastguard Worker\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} 3103*6a54128fSAndroid Build Coastguard Worker\def\doifset#1#2{% 3104*6a54128fSAndroid Build Coastguard Worker {% 3105*6a54128fSAndroid Build Coastguard Worker \makevalueexpandable 3106*6a54128fSAndroid Build Coastguard Worker \let\next=\empty 3107*6a54128fSAndroid Build Coastguard Worker \expandafter\ifx\csname SET#2\endcsname\relax 3108*6a54128fSAndroid Build Coastguard Worker #1% If not set, redefine \next. 3109*6a54128fSAndroid Build Coastguard Worker \fi 3110*6a54128fSAndroid Build Coastguard Worker \expandafter 3111*6a54128fSAndroid Build Coastguard Worker }\next 3112*6a54128fSAndroid Build Coastguard Worker} 3113*6a54128fSAndroid Build Coastguard Worker\def\ifsetfail{\doignore{ifset}} 3114*6a54128fSAndroid Build Coastguard Worker 3115*6a54128fSAndroid Build Coastguard Worker% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been 3116*6a54128fSAndroid Build Coastguard Worker% defined with @set, or has been undefined with @clear. 3117*6a54128fSAndroid Build Coastguard Worker% 3118*6a54128fSAndroid Build Coastguard Worker% The `\else' inside the `\doifset' parameter is a trick to reuse the 3119*6a54128fSAndroid Build Coastguard Worker% above code: if the variable is not set, do nothing, if it is set, 3120*6a54128fSAndroid Build Coastguard Worker% then redefine \next to \ifclearfail. 3121*6a54128fSAndroid Build Coastguard Worker% 3122*6a54128fSAndroid Build Coastguard Worker\makecond{ifclear} 3123*6a54128fSAndroid Build Coastguard Worker\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} 3124*6a54128fSAndroid Build Coastguard Worker\def\ifclearfail{\doignore{ifclear}} 3125*6a54128fSAndroid Build Coastguard Worker 3126*6a54128fSAndroid Build Coastguard Worker% @dircategory CATEGORY -- specify a category of the dir file 3127*6a54128fSAndroid Build Coastguard Worker% which this file should belong to. Ignore this in TeX. 3128*6a54128fSAndroid Build Coastguard Worker\let\dircategory=\comment 3129*6a54128fSAndroid Build Coastguard Worker 3130*6a54128fSAndroid Build Coastguard Worker% @defininfoenclose. 3131*6a54128fSAndroid Build Coastguard Worker\let\definfoenclose=\comment 3132*6a54128fSAndroid Build Coastguard Worker 3133*6a54128fSAndroid Build Coastguard Worker 3134*6a54128fSAndroid Build Coastguard Worker\message{indexing,} 3135*6a54128fSAndroid Build Coastguard Worker% Index generation facilities 3136*6a54128fSAndroid Build Coastguard Worker 3137*6a54128fSAndroid Build Coastguard Worker% Define \newwrite to be identical to plain tex's \newwrite 3138*6a54128fSAndroid Build Coastguard Worker% except not \outer, so it can be used within macros and \if's. 3139*6a54128fSAndroid Build Coastguard Worker\edef\newwrite{\makecsname{ptexnewwrite}} 3140*6a54128fSAndroid Build Coastguard Worker 3141*6a54128fSAndroid Build Coastguard Worker% \newindex {foo} defines an index named foo. 3142*6a54128fSAndroid Build Coastguard Worker% It automatically defines \fooindex such that 3143*6a54128fSAndroid Build Coastguard Worker% \fooindex ...rest of line... puts an entry in the index foo. 3144*6a54128fSAndroid Build Coastguard Worker% It also defines \fooindfile to be the number of the output channel for 3145*6a54128fSAndroid Build Coastguard Worker% the file that accumulates this index. The file's extension is foo. 3146*6a54128fSAndroid Build Coastguard Worker% The name of an index should be no more than 2 characters long 3147*6a54128fSAndroid Build Coastguard Worker% for the sake of vms. 3148*6a54128fSAndroid Build Coastguard Worker% 3149*6a54128fSAndroid Build Coastguard Worker\def\newindex#1{% 3150*6a54128fSAndroid Build Coastguard Worker \iflinks 3151*6a54128fSAndroid Build Coastguard Worker \expandafter\newwrite \csname#1indfile\endcsname 3152*6a54128fSAndroid Build Coastguard Worker \openout \csname#1indfile\endcsname \jobname.#1 % Open the file 3153*6a54128fSAndroid Build Coastguard Worker \fi 3154*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname#1index\endcsname{% % Define @#1index 3155*6a54128fSAndroid Build Coastguard Worker \noexpand\doindex{#1}} 3156*6a54128fSAndroid Build Coastguard Worker} 3157*6a54128fSAndroid Build Coastguard Worker 3158*6a54128fSAndroid Build Coastguard Worker% @defindex foo == \newindex{foo} 3159*6a54128fSAndroid Build Coastguard Worker% 3160*6a54128fSAndroid Build Coastguard Worker\def\defindex{\parsearg\newindex} 3161*6a54128fSAndroid Build Coastguard Worker 3162*6a54128fSAndroid Build Coastguard Worker% Define @defcodeindex, like @defindex except put all entries in @code. 3163*6a54128fSAndroid Build Coastguard Worker% 3164*6a54128fSAndroid Build Coastguard Worker\def\defcodeindex{\parsearg\newcodeindex} 3165*6a54128fSAndroid Build Coastguard Worker% 3166*6a54128fSAndroid Build Coastguard Worker\def\newcodeindex#1{% 3167*6a54128fSAndroid Build Coastguard Worker \iflinks 3168*6a54128fSAndroid Build Coastguard Worker \expandafter\newwrite \csname#1indfile\endcsname 3169*6a54128fSAndroid Build Coastguard Worker \openout \csname#1indfile\endcsname \jobname.#1 3170*6a54128fSAndroid Build Coastguard Worker \fi 3171*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname#1index\endcsname{% 3172*6a54128fSAndroid Build Coastguard Worker \noexpand\docodeindex{#1}}% 3173*6a54128fSAndroid Build Coastguard Worker} 3174*6a54128fSAndroid Build Coastguard Worker 3175*6a54128fSAndroid Build Coastguard Worker 3176*6a54128fSAndroid Build Coastguard Worker% @synindex foo bar makes index foo feed into index bar. 3177*6a54128fSAndroid Build Coastguard Worker% Do this instead of @defindex foo if you don't want it as a separate index. 3178*6a54128fSAndroid Build Coastguard Worker% 3179*6a54128fSAndroid Build Coastguard Worker% @syncodeindex foo bar similar, but put all entries made for index foo 3180*6a54128fSAndroid Build Coastguard Worker% inside @code. 3181*6a54128fSAndroid Build Coastguard Worker% 3182*6a54128fSAndroid Build Coastguard Worker\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} 3183*6a54128fSAndroid Build Coastguard Worker\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} 3184*6a54128fSAndroid Build Coastguard Worker 3185*6a54128fSAndroid Build Coastguard Worker% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), 3186*6a54128fSAndroid Build Coastguard Worker% #3 the target index (bar). 3187*6a54128fSAndroid Build Coastguard Worker\def\dosynindex#1#2#3{% 3188*6a54128fSAndroid Build Coastguard Worker % Only do \closeout if we haven't already done it, else we'll end up 3189*6a54128fSAndroid Build Coastguard Worker % closing the target index. 3190*6a54128fSAndroid Build Coastguard Worker \expandafter \ifx\csname donesynindex#2\endcsname \undefined 3191*6a54128fSAndroid Build Coastguard Worker % The \closeout helps reduce unnecessary open files; the limit on the 3192*6a54128fSAndroid Build Coastguard Worker % Acorn RISC OS is a mere 16 files. 3193*6a54128fSAndroid Build Coastguard Worker \expandafter\closeout\csname#2indfile\endcsname 3194*6a54128fSAndroid Build Coastguard Worker \expandafter\let\csname\donesynindex#2\endcsname = 1 3195*6a54128fSAndroid Build Coastguard Worker \fi 3196*6a54128fSAndroid Build Coastguard Worker % redefine \fooindfile: 3197*6a54128fSAndroid Build Coastguard Worker \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname 3198*6a54128fSAndroid Build Coastguard Worker \expandafter\let\csname#2indfile\endcsname=\temp 3199*6a54128fSAndroid Build Coastguard Worker % redefine \fooindex: 3200*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% 3201*6a54128fSAndroid Build Coastguard Worker} 3202*6a54128fSAndroid Build Coastguard Worker 3203*6a54128fSAndroid Build Coastguard Worker% Define \doindex, the driver for all \fooindex macros. 3204*6a54128fSAndroid Build Coastguard Worker% Argument #1 is generated by the calling \fooindex macro, 3205*6a54128fSAndroid Build Coastguard Worker% and it is "foo", the name of the index. 3206*6a54128fSAndroid Build Coastguard Worker 3207*6a54128fSAndroid Build Coastguard Worker% \doindex just uses \parsearg; it calls \doind for the actual work. 3208*6a54128fSAndroid Build Coastguard Worker% This is because \doind is more useful to call from other macros. 3209*6a54128fSAndroid Build Coastguard Worker 3210*6a54128fSAndroid Build Coastguard Worker% There is also \dosubind {index}{topic}{subtopic} 3211*6a54128fSAndroid Build Coastguard Worker% which makes an entry in a two-level index such as the operation index. 3212*6a54128fSAndroid Build Coastguard Worker 3213*6a54128fSAndroid Build Coastguard Worker\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} 3214*6a54128fSAndroid Build Coastguard Worker\def\singleindexer #1{\doind{\indexname}{#1}} 3215*6a54128fSAndroid Build Coastguard Worker 3216*6a54128fSAndroid Build Coastguard Worker% like the previous two, but they put @code around the argument. 3217*6a54128fSAndroid Build Coastguard Worker\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} 3218*6a54128fSAndroid Build Coastguard Worker\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} 3219*6a54128fSAndroid Build Coastguard Worker 3220*6a54128fSAndroid Build Coastguard Worker% Take care of Texinfo commands that can appear in an index entry. 3221*6a54128fSAndroid Build Coastguard Worker% Since there are some commands we want to expand, and others we don't, 3222*6a54128fSAndroid Build Coastguard Worker% we have to laboriously prevent expansion for those that we don't. 3223*6a54128fSAndroid Build Coastguard Worker% 3224*6a54128fSAndroid Build Coastguard Worker\def\indexdummies{% 3225*6a54128fSAndroid Build Coastguard Worker \escapechar = `\\ % use backslash in output files. 3226*6a54128fSAndroid Build Coastguard Worker \def\@{@}% change to @@ when we switch to @ as escape char in index files. 3227*6a54128fSAndroid Build Coastguard Worker \def\ {\realbackslash\space }% 3228*6a54128fSAndroid Build Coastguard Worker % Need these in case \tex is in effect and \{ is a \delimiter again. 3229*6a54128fSAndroid Build Coastguard Worker % But can't use \lbracecmd and \rbracecmd because texindex assumes 3230*6a54128fSAndroid Build Coastguard Worker % braces and backslashes are used only as delimiters. 3231*6a54128fSAndroid Build Coastguard Worker \let\{ = \mylbrace 3232*6a54128fSAndroid Build Coastguard Worker \let\} = \myrbrace 3233*6a54128fSAndroid Build Coastguard Worker % 3234*6a54128fSAndroid Build Coastguard Worker % Do the redefinitions. 3235*6a54128fSAndroid Build Coastguard Worker \commondummies 3236*6a54128fSAndroid Build Coastguard Worker} 3237*6a54128fSAndroid Build Coastguard Worker 3238*6a54128fSAndroid Build Coastguard Worker% For the aux and toc files, @ is the escape character. So we want to 3239*6a54128fSAndroid Build Coastguard Worker% redefine everything using @ as the escape character (instead of 3240*6a54128fSAndroid Build Coastguard Worker% \realbackslash, still used for index files). When everything uses @, 3241*6a54128fSAndroid Build Coastguard Worker% this will be simpler. 3242*6a54128fSAndroid Build Coastguard Worker% 3243*6a54128fSAndroid Build Coastguard Worker\def\atdummies{% 3244*6a54128fSAndroid Build Coastguard Worker \def\@{@@}% 3245*6a54128fSAndroid Build Coastguard Worker \def\ {@ }% 3246*6a54128fSAndroid Build Coastguard Worker \let\{ = \lbraceatcmd 3247*6a54128fSAndroid Build Coastguard Worker \let\} = \rbraceatcmd 3248*6a54128fSAndroid Build Coastguard Worker % 3249*6a54128fSAndroid Build Coastguard Worker % Do the redefinitions. 3250*6a54128fSAndroid Build Coastguard Worker \commondummies 3251*6a54128fSAndroid Build Coastguard Worker \otherbackslash 3252*6a54128fSAndroid Build Coastguard Worker} 3253*6a54128fSAndroid Build Coastguard Worker 3254*6a54128fSAndroid Build Coastguard Worker% Called from \indexdummies and \atdummies. 3255*6a54128fSAndroid Build Coastguard Worker% 3256*6a54128fSAndroid Build Coastguard Worker\def\commondummies{% 3257*6a54128fSAndroid Build Coastguard Worker % 3258*6a54128fSAndroid Build Coastguard Worker % \definedummyword defines \#1 as \string\#1\space, thus effectively 3259*6a54128fSAndroid Build Coastguard Worker % preventing its expansion. This is used only for control% words, 3260*6a54128fSAndroid Build Coastguard Worker % not control letters, because the \space would be incorrect for 3261*6a54128fSAndroid Build Coastguard Worker % control characters, but is needed to separate the control word 3262*6a54128fSAndroid Build Coastguard Worker % from whatever follows. 3263*6a54128fSAndroid Build Coastguard Worker % 3264*6a54128fSAndroid Build Coastguard Worker % For control letters, we have \definedummyletter, which omits the 3265*6a54128fSAndroid Build Coastguard Worker % space. 3266*6a54128fSAndroid Build Coastguard Worker % 3267*6a54128fSAndroid Build Coastguard Worker % These can be used both for control words that take an argument and 3268*6a54128fSAndroid Build Coastguard Worker % those that do not. If it is followed by {arg} in the input, then 3269*6a54128fSAndroid Build Coastguard Worker % that will dutifully get written to the index (or wherever). 3270*6a54128fSAndroid Build Coastguard Worker % 3271*6a54128fSAndroid Build Coastguard Worker \def\definedummyword ##1{\def##1{\string##1\space}}% 3272*6a54128fSAndroid Build Coastguard Worker \def\definedummyletter##1{\def##1{\string##1}}% 3273*6a54128fSAndroid Build Coastguard Worker \let\definedummyaccent\definedummyletter 3274*6a54128fSAndroid Build Coastguard Worker % 3275*6a54128fSAndroid Build Coastguard Worker \commondummiesnofonts 3276*6a54128fSAndroid Build Coastguard Worker % 3277*6a54128fSAndroid Build Coastguard Worker \definedummyletter\_% 3278*6a54128fSAndroid Build Coastguard Worker % 3279*6a54128fSAndroid Build Coastguard Worker % Non-English letters. 3280*6a54128fSAndroid Build Coastguard Worker \definedummyword\AA 3281*6a54128fSAndroid Build Coastguard Worker \definedummyword\AE 3282*6a54128fSAndroid Build Coastguard Worker \definedummyword\L 3283*6a54128fSAndroid Build Coastguard Worker \definedummyword\OE 3284*6a54128fSAndroid Build Coastguard Worker \definedummyword\O 3285*6a54128fSAndroid Build Coastguard Worker \definedummyword\aa 3286*6a54128fSAndroid Build Coastguard Worker \definedummyword\ae 3287*6a54128fSAndroid Build Coastguard Worker \definedummyword\l 3288*6a54128fSAndroid Build Coastguard Worker \definedummyword\oe 3289*6a54128fSAndroid Build Coastguard Worker \definedummyword\o 3290*6a54128fSAndroid Build Coastguard Worker \definedummyword\ss 3291*6a54128fSAndroid Build Coastguard Worker \definedummyword\exclamdown 3292*6a54128fSAndroid Build Coastguard Worker \definedummyword\questiondown 3293*6a54128fSAndroid Build Coastguard Worker \definedummyword\ordf 3294*6a54128fSAndroid Build Coastguard Worker \definedummyword\ordm 3295*6a54128fSAndroid Build Coastguard Worker % 3296*6a54128fSAndroid Build Coastguard Worker % Although these internal commands shouldn't show up, sometimes they do. 3297*6a54128fSAndroid Build Coastguard Worker \definedummyword\bf 3298*6a54128fSAndroid Build Coastguard Worker \definedummyword\gtr 3299*6a54128fSAndroid Build Coastguard Worker \definedummyword\hat 3300*6a54128fSAndroid Build Coastguard Worker \definedummyword\less 3301*6a54128fSAndroid Build Coastguard Worker \definedummyword\sf 3302*6a54128fSAndroid Build Coastguard Worker \definedummyword\sl 3303*6a54128fSAndroid Build Coastguard Worker \definedummyword\tclose 3304*6a54128fSAndroid Build Coastguard Worker \definedummyword\tt 3305*6a54128fSAndroid Build Coastguard Worker % 3306*6a54128fSAndroid Build Coastguard Worker \definedummyword\LaTeX 3307*6a54128fSAndroid Build Coastguard Worker \definedummyword\TeX 3308*6a54128fSAndroid Build Coastguard Worker % 3309*6a54128fSAndroid Build Coastguard Worker % Assorted special characters. 3310*6a54128fSAndroid Build Coastguard Worker \definedummyword\bullet 3311*6a54128fSAndroid Build Coastguard Worker \definedummyword\comma 3312*6a54128fSAndroid Build Coastguard Worker \definedummyword\copyright 3313*6a54128fSAndroid Build Coastguard Worker \definedummyword\registeredsymbol 3314*6a54128fSAndroid Build Coastguard Worker \definedummyword\dots 3315*6a54128fSAndroid Build Coastguard Worker \definedummyword\enddots 3316*6a54128fSAndroid Build Coastguard Worker \definedummyword\equiv 3317*6a54128fSAndroid Build Coastguard Worker \definedummyword\error 3318*6a54128fSAndroid Build Coastguard Worker \definedummyword\euro 3319*6a54128fSAndroid Build Coastguard Worker \definedummyword\expansion 3320*6a54128fSAndroid Build Coastguard Worker \definedummyword\minus 3321*6a54128fSAndroid Build Coastguard Worker \definedummyword\pounds 3322*6a54128fSAndroid Build Coastguard Worker \definedummyword\point 3323*6a54128fSAndroid Build Coastguard Worker \definedummyword\print 3324*6a54128fSAndroid Build Coastguard Worker \definedummyword\result 3325*6a54128fSAndroid Build Coastguard Worker % 3326*6a54128fSAndroid Build Coastguard Worker % We want to disable all macros so that they are not expanded by \write. 3327*6a54128fSAndroid Build Coastguard Worker \macrolist 3328*6a54128fSAndroid Build Coastguard Worker % 3329*6a54128fSAndroid Build Coastguard Worker \normalturnoffactive 3330*6a54128fSAndroid Build Coastguard Worker % 3331*6a54128fSAndroid Build Coastguard Worker % Handle some cases of @value -- where it does not contain any 3332*6a54128fSAndroid Build Coastguard Worker % (non-fully-expandable) commands. 3333*6a54128fSAndroid Build Coastguard Worker \makevalueexpandable 3334*6a54128fSAndroid Build Coastguard Worker} 3335*6a54128fSAndroid Build Coastguard Worker 3336*6a54128fSAndroid Build Coastguard Worker% \commondummiesnofonts: common to \commondummies and \indexnofonts. 3337*6a54128fSAndroid Build Coastguard Worker% 3338*6a54128fSAndroid Build Coastguard Worker\def\commondummiesnofonts{% 3339*6a54128fSAndroid Build Coastguard Worker % Control letters and accents. 3340*6a54128fSAndroid Build Coastguard Worker \definedummyletter\!% 3341*6a54128fSAndroid Build Coastguard Worker \definedummyaccent\"% 3342*6a54128fSAndroid Build Coastguard Worker \definedummyaccent\'% 3343*6a54128fSAndroid Build Coastguard Worker \definedummyletter\*% 3344*6a54128fSAndroid Build Coastguard Worker \definedummyaccent\,% 3345*6a54128fSAndroid Build Coastguard Worker \definedummyletter\.% 3346*6a54128fSAndroid Build Coastguard Worker \definedummyletter\/% 3347*6a54128fSAndroid Build Coastguard Worker \definedummyletter\:% 3348*6a54128fSAndroid Build Coastguard Worker \definedummyaccent\=% 3349*6a54128fSAndroid Build Coastguard Worker \definedummyletter\?% 3350*6a54128fSAndroid Build Coastguard Worker \definedummyaccent\^% 3351*6a54128fSAndroid Build Coastguard Worker \definedummyaccent\`% 3352*6a54128fSAndroid Build Coastguard Worker \definedummyaccent\~% 3353*6a54128fSAndroid Build Coastguard Worker \definedummyword\u 3354*6a54128fSAndroid Build Coastguard Worker \definedummyword\v 3355*6a54128fSAndroid Build Coastguard Worker \definedummyword\H 3356*6a54128fSAndroid Build Coastguard Worker \definedummyword\dotaccent 3357*6a54128fSAndroid Build Coastguard Worker \definedummyword\ringaccent 3358*6a54128fSAndroid Build Coastguard Worker \definedummyword\tieaccent 3359*6a54128fSAndroid Build Coastguard Worker \definedummyword\ubaraccent 3360*6a54128fSAndroid Build Coastguard Worker \definedummyword\udotaccent 3361*6a54128fSAndroid Build Coastguard Worker \definedummyword\dotless 3362*6a54128fSAndroid Build Coastguard Worker % 3363*6a54128fSAndroid Build Coastguard Worker % Texinfo font commands. 3364*6a54128fSAndroid Build Coastguard Worker \definedummyword\b 3365*6a54128fSAndroid Build Coastguard Worker \definedummyword\i 3366*6a54128fSAndroid Build Coastguard Worker \definedummyword\r 3367*6a54128fSAndroid Build Coastguard Worker \definedummyword\sc 3368*6a54128fSAndroid Build Coastguard Worker \definedummyword\t 3369*6a54128fSAndroid Build Coastguard Worker % 3370*6a54128fSAndroid Build Coastguard Worker % Commands that take arguments. 3371*6a54128fSAndroid Build Coastguard Worker \definedummyword\acronym 3372*6a54128fSAndroid Build Coastguard Worker \definedummyword\cite 3373*6a54128fSAndroid Build Coastguard Worker \definedummyword\code 3374*6a54128fSAndroid Build Coastguard Worker \definedummyword\command 3375*6a54128fSAndroid Build Coastguard Worker \definedummyword\dfn 3376*6a54128fSAndroid Build Coastguard Worker \definedummyword\emph 3377*6a54128fSAndroid Build Coastguard Worker \definedummyword\env 3378*6a54128fSAndroid Build Coastguard Worker \definedummyword\file 3379*6a54128fSAndroid Build Coastguard Worker \definedummyword\kbd 3380*6a54128fSAndroid Build Coastguard Worker \definedummyword\key 3381*6a54128fSAndroid Build Coastguard Worker \definedummyword\math 3382*6a54128fSAndroid Build Coastguard Worker \definedummyword\option 3383*6a54128fSAndroid Build Coastguard Worker \definedummyword\pxref 3384*6a54128fSAndroid Build Coastguard Worker \definedummyword\ref 3385*6a54128fSAndroid Build Coastguard Worker \definedummyword\samp 3386*6a54128fSAndroid Build Coastguard Worker \definedummyword\strong 3387*6a54128fSAndroid Build Coastguard Worker \definedummyword\tie 3388*6a54128fSAndroid Build Coastguard Worker \definedummyword\uref 3389*6a54128fSAndroid Build Coastguard Worker \definedummyword\url 3390*6a54128fSAndroid Build Coastguard Worker \definedummyword\var 3391*6a54128fSAndroid Build Coastguard Worker \definedummyword\verb 3392*6a54128fSAndroid Build Coastguard Worker \definedummyword\w 3393*6a54128fSAndroid Build Coastguard Worker \definedummyword\xref 3394*6a54128fSAndroid Build Coastguard Worker} 3395*6a54128fSAndroid Build Coastguard Worker 3396*6a54128fSAndroid Build Coastguard Worker% \indexnofonts is used when outputting the strings to sort the index 3397*6a54128fSAndroid Build Coastguard Worker% by, and when constructing control sequence names. It eliminates all 3398*6a54128fSAndroid Build Coastguard Worker% control sequences and just writes whatever the best ASCII sort string 3399*6a54128fSAndroid Build Coastguard Worker% would be for a given command (usually its argument). 3400*6a54128fSAndroid Build Coastguard Worker% 3401*6a54128fSAndroid Build Coastguard Worker\def\indexnofonts{% 3402*6a54128fSAndroid Build Coastguard Worker % Accent commands should become @asis. 3403*6a54128fSAndroid Build Coastguard Worker \def\definedummyaccent##1{\let##1\asis}% 3404*6a54128fSAndroid Build Coastguard Worker % We can just ignore other control letters. 3405*6a54128fSAndroid Build Coastguard Worker \def\definedummyletter##1{\let##1\empty}% 3406*6a54128fSAndroid Build Coastguard Worker % Hopefully, all control words can become @asis. 3407*6a54128fSAndroid Build Coastguard Worker \let\definedummyword\definedummyaccent 3408*6a54128fSAndroid Build Coastguard Worker % 3409*6a54128fSAndroid Build Coastguard Worker \commondummiesnofonts 3410*6a54128fSAndroid Build Coastguard Worker % 3411*6a54128fSAndroid Build Coastguard Worker % Don't no-op \tt, since it isn't a user-level command 3412*6a54128fSAndroid Build Coastguard Worker % and is used in the definitions of the active chars like <, >, |, etc. 3413*6a54128fSAndroid Build Coastguard Worker % Likewise with the other plain tex font commands. 3414*6a54128fSAndroid Build Coastguard Worker %\let\tt=\asis 3415*6a54128fSAndroid Build Coastguard Worker % 3416*6a54128fSAndroid Build Coastguard Worker \def\ { }% 3417*6a54128fSAndroid Build Coastguard Worker \def\@{@}% 3418*6a54128fSAndroid Build Coastguard Worker % how to handle braces? 3419*6a54128fSAndroid Build Coastguard Worker \def\_{\normalunderscore}% 3420*6a54128fSAndroid Build Coastguard Worker % 3421*6a54128fSAndroid Build Coastguard Worker % Non-English letters. 3422*6a54128fSAndroid Build Coastguard Worker \def\AA{AA}% 3423*6a54128fSAndroid Build Coastguard Worker \def\AE{AE}% 3424*6a54128fSAndroid Build Coastguard Worker \def\L{L}% 3425*6a54128fSAndroid Build Coastguard Worker \def\OE{OE}% 3426*6a54128fSAndroid Build Coastguard Worker \def\O{O}% 3427*6a54128fSAndroid Build Coastguard Worker \def\aa{aa}% 3428*6a54128fSAndroid Build Coastguard Worker \def\ae{ae}% 3429*6a54128fSAndroid Build Coastguard Worker \def\l{l}% 3430*6a54128fSAndroid Build Coastguard Worker \def\oe{oe}% 3431*6a54128fSAndroid Build Coastguard Worker \def\o{o}% 3432*6a54128fSAndroid Build Coastguard Worker \def\ss{ss}% 3433*6a54128fSAndroid Build Coastguard Worker \def\exclamdown{!}% 3434*6a54128fSAndroid Build Coastguard Worker \def\questiondown{?}% 3435*6a54128fSAndroid Build Coastguard Worker \def\ordf{a}% 3436*6a54128fSAndroid Build Coastguard Worker \def\ordm{o}% 3437*6a54128fSAndroid Build Coastguard Worker % 3438*6a54128fSAndroid Build Coastguard Worker \def\LaTeX{LaTeX}% 3439*6a54128fSAndroid Build Coastguard Worker \def\TeX{TeX}% 3440*6a54128fSAndroid Build Coastguard Worker % 3441*6a54128fSAndroid Build Coastguard Worker % Assorted special characters. 3442*6a54128fSAndroid Build Coastguard Worker % (The following {} will end up in the sort string, but that's ok.) 3443*6a54128fSAndroid Build Coastguard Worker \def\bullet{bullet}% 3444*6a54128fSAndroid Build Coastguard Worker \def\comma{,}% 3445*6a54128fSAndroid Build Coastguard Worker \def\copyright{copyright}% 3446*6a54128fSAndroid Build Coastguard Worker \def\registeredsymbol{R}% 3447*6a54128fSAndroid Build Coastguard Worker \def\dots{...}% 3448*6a54128fSAndroid Build Coastguard Worker \def\enddots{...}% 3449*6a54128fSAndroid Build Coastguard Worker \def\equiv{==}% 3450*6a54128fSAndroid Build Coastguard Worker \def\error{error}% 3451*6a54128fSAndroid Build Coastguard Worker \def\euro{euro}% 3452*6a54128fSAndroid Build Coastguard Worker \def\expansion{==>}% 3453*6a54128fSAndroid Build Coastguard Worker \def\minus{-}% 3454*6a54128fSAndroid Build Coastguard Worker \def\pounds{pounds}% 3455*6a54128fSAndroid Build Coastguard Worker \def\point{.}% 3456*6a54128fSAndroid Build Coastguard Worker \def\print{-|}% 3457*6a54128fSAndroid Build Coastguard Worker \def\result{=>}% 3458*6a54128fSAndroid Build Coastguard Worker % 3459*6a54128fSAndroid Build Coastguard Worker % We need to get rid of all macros, leaving only the arguments (if present). 3460*6a54128fSAndroid Build Coastguard Worker % Of course this is not nearly correct, but it is the best we can do for now. 3461*6a54128fSAndroid Build Coastguard Worker % makeinfo does not expand macros in the argument to @deffn, which ends up 3462*6a54128fSAndroid Build Coastguard Worker % writing an index entry, and texindex isn't prepared for an index sort entry 3463*6a54128fSAndroid Build Coastguard Worker % that starts with \. 3464*6a54128fSAndroid Build Coastguard Worker % 3465*6a54128fSAndroid Build Coastguard Worker % Since macro invocations are followed by braces, we can just redefine them 3466*6a54128fSAndroid Build Coastguard Worker % to take a single TeX argument. The case of a macro invocation that 3467*6a54128fSAndroid Build Coastguard Worker % goes to end-of-line is not handled. 3468*6a54128fSAndroid Build Coastguard Worker % 3469*6a54128fSAndroid Build Coastguard Worker \macrolist 3470*6a54128fSAndroid Build Coastguard Worker} 3471*6a54128fSAndroid Build Coastguard Worker 3472*6a54128fSAndroid Build Coastguard Worker\let\indexbackslash=0 %overridden during \printindex. 3473*6a54128fSAndroid Build Coastguard Worker\let\SETmarginindex=\relax % put index entries in margin (undocumented)? 3474*6a54128fSAndroid Build Coastguard Worker 3475*6a54128fSAndroid Build Coastguard Worker% Most index entries go through here, but \dosubind is the general case. 3476*6a54128fSAndroid Build Coastguard Worker% #1 is the index name, #2 is the entry text. 3477*6a54128fSAndroid Build Coastguard Worker\def\doind#1#2{\dosubind{#1}{#2}{}} 3478*6a54128fSAndroid Build Coastguard Worker 3479*6a54128fSAndroid Build Coastguard Worker% Workhorse for all \fooindexes. 3480*6a54128fSAndroid Build Coastguard Worker% #1 is name of index, #2 is stuff to put there, #3 is subentry -- 3481*6a54128fSAndroid Build Coastguard Worker% empty if called from \doind, as we usually are (the main exception 3482*6a54128fSAndroid Build Coastguard Worker% is with most defuns, which call us directly). 3483*6a54128fSAndroid Build Coastguard Worker% 3484*6a54128fSAndroid Build Coastguard Worker\def\dosubind#1#2#3{% 3485*6a54128fSAndroid Build Coastguard Worker \iflinks 3486*6a54128fSAndroid Build Coastguard Worker {% 3487*6a54128fSAndroid Build Coastguard Worker % Store the main index entry text (including the third arg). 3488*6a54128fSAndroid Build Coastguard Worker \toks0 = {#2}% 3489*6a54128fSAndroid Build Coastguard Worker % If third arg is present, precede it with a space. 3490*6a54128fSAndroid Build Coastguard Worker \def\thirdarg{#3}% 3491*6a54128fSAndroid Build Coastguard Worker \ifx\thirdarg\empty \else 3492*6a54128fSAndroid Build Coastguard Worker \toks0 = \expandafter{\the\toks0 \space #3}% 3493*6a54128fSAndroid Build Coastguard Worker \fi 3494*6a54128fSAndroid Build Coastguard Worker % 3495*6a54128fSAndroid Build Coastguard Worker \edef\writeto{\csname#1indfile\endcsname}% 3496*6a54128fSAndroid Build Coastguard Worker % 3497*6a54128fSAndroid Build Coastguard Worker \ifvmode 3498*6a54128fSAndroid Build Coastguard Worker \dosubindsanitize 3499*6a54128fSAndroid Build Coastguard Worker \else 3500*6a54128fSAndroid Build Coastguard Worker \dosubindwrite 3501*6a54128fSAndroid Build Coastguard Worker \fi 3502*6a54128fSAndroid Build Coastguard Worker }% 3503*6a54128fSAndroid Build Coastguard Worker \fi 3504*6a54128fSAndroid Build Coastguard Worker} 3505*6a54128fSAndroid Build Coastguard Worker 3506*6a54128fSAndroid Build Coastguard Worker% Write the entry in \toks0 to the index file: 3507*6a54128fSAndroid Build Coastguard Worker% 3508*6a54128fSAndroid Build Coastguard Worker\def\dosubindwrite{% 3509*6a54128fSAndroid Build Coastguard Worker % Put the index entry in the margin if desired. 3510*6a54128fSAndroid Build Coastguard Worker \ifx\SETmarginindex\relax\else 3511*6a54128fSAndroid Build Coastguard Worker \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% 3512*6a54128fSAndroid Build Coastguard Worker \fi 3513*6a54128fSAndroid Build Coastguard Worker % 3514*6a54128fSAndroid Build Coastguard Worker % Remember, we are within a group. 3515*6a54128fSAndroid Build Coastguard Worker \indexdummies % Must do this here, since \bf, etc expand at this stage 3516*6a54128fSAndroid Build Coastguard Worker \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now 3517*6a54128fSAndroid Build Coastguard Worker % so it will be output as is; and it will print as backslash. 3518*6a54128fSAndroid Build Coastguard Worker % 3519*6a54128fSAndroid Build Coastguard Worker % Process the index entry with all font commands turned off, to 3520*6a54128fSAndroid Build Coastguard Worker % get the string to sort by. 3521*6a54128fSAndroid Build Coastguard Worker {\indexnofonts 3522*6a54128fSAndroid Build Coastguard Worker \edef\temp{\the\toks0}% need full expansion 3523*6a54128fSAndroid Build Coastguard Worker \xdef\indexsorttmp{\temp}% 3524*6a54128fSAndroid Build Coastguard Worker }% 3525*6a54128fSAndroid Build Coastguard Worker % 3526*6a54128fSAndroid Build Coastguard Worker % Set up the complete index entry, with both the sort key and 3527*6a54128fSAndroid Build Coastguard Worker % the original text, including any font commands. We write 3528*6a54128fSAndroid Build Coastguard Worker % three arguments to \entry to the .?? file (four in the 3529*6a54128fSAndroid Build Coastguard Worker % subentry case), texindex reduces to two when writing the .??s 3530*6a54128fSAndroid Build Coastguard Worker % sorted result. 3531*6a54128fSAndroid Build Coastguard Worker \edef\temp{% 3532*6a54128fSAndroid Build Coastguard Worker \write\writeto{% 3533*6a54128fSAndroid Build Coastguard Worker \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% 3534*6a54128fSAndroid Build Coastguard Worker }% 3535*6a54128fSAndroid Build Coastguard Worker \temp 3536*6a54128fSAndroid Build Coastguard Worker} 3537*6a54128fSAndroid Build Coastguard Worker 3538*6a54128fSAndroid Build Coastguard Worker% Take care of unwanted page breaks: 3539*6a54128fSAndroid Build Coastguard Worker% 3540*6a54128fSAndroid Build Coastguard Worker% If a skip is the last thing on the list now, preserve it 3541*6a54128fSAndroid Build Coastguard Worker% by backing up by \lastskip, doing the \write, then inserting 3542*6a54128fSAndroid Build Coastguard Worker% the skip again. Otherwise, the whatsit generated by the 3543*6a54128fSAndroid Build Coastguard Worker% \write will make \lastskip zero. The result is that sequences 3544*6a54128fSAndroid Build Coastguard Worker% like this: 3545*6a54128fSAndroid Build Coastguard Worker% @end defun 3546*6a54128fSAndroid Build Coastguard Worker% @tindex whatever 3547*6a54128fSAndroid Build Coastguard Worker% @defun ... 3548*6a54128fSAndroid Build Coastguard Worker% will have extra space inserted, because the \medbreak in the 3549*6a54128fSAndroid Build Coastguard Worker% start of the @defun won't see the skip inserted by the @end of 3550*6a54128fSAndroid Build Coastguard Worker% the previous defun. 3551*6a54128fSAndroid Build Coastguard Worker% 3552*6a54128fSAndroid Build Coastguard Worker% But don't do any of this if we're not in vertical mode. We 3553*6a54128fSAndroid Build Coastguard Worker% don't want to do a \vskip and prematurely end a paragraph. 3554*6a54128fSAndroid Build Coastguard Worker% 3555*6a54128fSAndroid Build Coastguard Worker% Avoid page breaks due to these extra skips, too. 3556*6a54128fSAndroid Build Coastguard Worker% 3557*6a54128fSAndroid Build Coastguard Worker% But wait, there is a catch there: 3558*6a54128fSAndroid Build Coastguard Worker% We'll have to check whether \lastskip is zero skip. \ifdim is not 3559*6a54128fSAndroid Build Coastguard Worker% sufficient for this purpose, as it ignores stretch and shrink parts 3560*6a54128fSAndroid Build Coastguard Worker% of the skip. The only way seems to be to check the textual 3561*6a54128fSAndroid Build Coastguard Worker% representation of the skip. 3562*6a54128fSAndroid Build Coastguard Worker% 3563*6a54128fSAndroid Build Coastguard Worker% The following is almost like \def\zeroskipmacro{0.0pt} except that 3564*6a54128fSAndroid Build Coastguard Worker% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). 3565*6a54128fSAndroid Build Coastguard Worker% 3566*6a54128fSAndroid Build Coastguard Worker\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} 3567*6a54128fSAndroid Build Coastguard Worker% 3568*6a54128fSAndroid Build Coastguard Worker% ..., ready, GO: 3569*6a54128fSAndroid Build Coastguard Worker% 3570*6a54128fSAndroid Build Coastguard Worker\def\dosubindsanitize{% 3571*6a54128fSAndroid Build Coastguard Worker % \lastskip and \lastpenalty cannot both be nonzero simultaneously. 3572*6a54128fSAndroid Build Coastguard Worker \skip0 = \lastskip 3573*6a54128fSAndroid Build Coastguard Worker \edef\lastskipmacro{\the\lastskip}% 3574*6a54128fSAndroid Build Coastguard Worker \count255 = \lastpenalty 3575*6a54128fSAndroid Build Coastguard Worker % 3576*6a54128fSAndroid Build Coastguard Worker % If \lastskip is nonzero, that means the last item was a 3577*6a54128fSAndroid Build Coastguard Worker % skip. And since a skip is discardable, that means this 3578*6a54128fSAndroid Build Coastguard Worker % -\skip0 glue we're inserting is preceded by a 3579*6a54128fSAndroid Build Coastguard Worker % non-discardable item, therefore it is not a potential 3580*6a54128fSAndroid Build Coastguard Worker % breakpoint, therefore no \nobreak needed. 3581*6a54128fSAndroid Build Coastguard Worker \ifx\lastskipmacro\zeroskipmacro 3582*6a54128fSAndroid Build Coastguard Worker \else 3583*6a54128fSAndroid Build Coastguard Worker \vskip-\skip0 3584*6a54128fSAndroid Build Coastguard Worker \fi 3585*6a54128fSAndroid Build Coastguard Worker % 3586*6a54128fSAndroid Build Coastguard Worker \dosubindwrite 3587*6a54128fSAndroid Build Coastguard Worker % 3588*6a54128fSAndroid Build Coastguard Worker \ifx\lastskipmacro\zeroskipmacro 3589*6a54128fSAndroid Build Coastguard Worker % If \lastskip was zero, perhaps the last item was a penalty, and 3590*6a54128fSAndroid Build Coastguard Worker % perhaps it was >=10000, e.g., a \nobreak. In that case, we want 3591*6a54128fSAndroid Build Coastguard Worker % to re-insert the same penalty (values >10000 are used for various 3592*6a54128fSAndroid Build Coastguard Worker % signals); since we just inserted a non-discardable item, any 3593*6a54128fSAndroid Build Coastguard Worker % following glue (such as a \parskip) would be a breakpoint. For example: 3594*6a54128fSAndroid Build Coastguard Worker % 3595*6a54128fSAndroid Build Coastguard Worker % @deffn deffn-whatever 3596*6a54128fSAndroid Build Coastguard Worker % @vindex index-whatever 3597*6a54128fSAndroid Build Coastguard Worker % Description. 3598*6a54128fSAndroid Build Coastguard Worker % would allow a break between the index-whatever whatsit 3599*6a54128fSAndroid Build Coastguard Worker % and the "Description." paragraph. 3600*6a54128fSAndroid Build Coastguard Worker \ifnum\count255>9999 \penalty\count255 \fi 3601*6a54128fSAndroid Build Coastguard Worker \else 3602*6a54128fSAndroid Build Coastguard Worker % On the other hand, if we had a nonzero \lastskip, 3603*6a54128fSAndroid Build Coastguard Worker % this make-up glue would be preceded by a non-discardable item 3604*6a54128fSAndroid Build Coastguard Worker % (the whatsit from the \write), so we must insert a \nobreak. 3605*6a54128fSAndroid Build Coastguard Worker \nobreak\vskip\skip0 3606*6a54128fSAndroid Build Coastguard Worker \fi 3607*6a54128fSAndroid Build Coastguard Worker} 3608*6a54128fSAndroid Build Coastguard Worker 3609*6a54128fSAndroid Build Coastguard Worker% The index entry written in the file actually looks like 3610*6a54128fSAndroid Build Coastguard Worker% \entry {sortstring}{page}{topic} 3611*6a54128fSAndroid Build Coastguard Worker% or 3612*6a54128fSAndroid Build Coastguard Worker% \entry {sortstring}{page}{topic}{subtopic} 3613*6a54128fSAndroid Build Coastguard Worker% The texindex program reads in these files and writes files 3614*6a54128fSAndroid Build Coastguard Worker% containing these kinds of lines: 3615*6a54128fSAndroid Build Coastguard Worker% \initial {c} 3616*6a54128fSAndroid Build Coastguard Worker% before the first topic whose initial is c 3617*6a54128fSAndroid Build Coastguard Worker% \entry {topic}{pagelist} 3618*6a54128fSAndroid Build Coastguard Worker% for a topic that is used without subtopics 3619*6a54128fSAndroid Build Coastguard Worker% \primary {topic} 3620*6a54128fSAndroid Build Coastguard Worker% for the beginning of a topic that is used with subtopics 3621*6a54128fSAndroid Build Coastguard Worker% \secondary {subtopic}{pagelist} 3622*6a54128fSAndroid Build Coastguard Worker% for each subtopic. 3623*6a54128fSAndroid Build Coastguard Worker 3624*6a54128fSAndroid Build Coastguard Worker% Define the user-accessible indexing commands 3625*6a54128fSAndroid Build Coastguard Worker% @findex, @vindex, @kindex, @cindex. 3626*6a54128fSAndroid Build Coastguard Worker 3627*6a54128fSAndroid Build Coastguard Worker\def\findex {\fnindex} 3628*6a54128fSAndroid Build Coastguard Worker\def\kindex {\kyindex} 3629*6a54128fSAndroid Build Coastguard Worker\def\cindex {\cpindex} 3630*6a54128fSAndroid Build Coastguard Worker\def\vindex {\vrindex} 3631*6a54128fSAndroid Build Coastguard Worker\def\tindex {\tpindex} 3632*6a54128fSAndroid Build Coastguard Worker\def\pindex {\pgindex} 3633*6a54128fSAndroid Build Coastguard Worker 3634*6a54128fSAndroid Build Coastguard Worker\def\cindexsub {\begingroup\obeylines\cindexsub} 3635*6a54128fSAndroid Build Coastguard Worker{\obeylines % 3636*6a54128fSAndroid Build Coastguard Worker\gdef\cindexsub "#1" #2^^M{\endgroup % 3637*6a54128fSAndroid Build Coastguard Worker\dosubind{cp}{#2}{#1}}} 3638*6a54128fSAndroid Build Coastguard Worker 3639*6a54128fSAndroid Build Coastguard Worker% Define the macros used in formatting output of the sorted index material. 3640*6a54128fSAndroid Build Coastguard Worker 3641*6a54128fSAndroid Build Coastguard Worker% @printindex causes a particular index (the ??s file) to get printed. 3642*6a54128fSAndroid Build Coastguard Worker% It does not print any chapter heading (usually an @unnumbered). 3643*6a54128fSAndroid Build Coastguard Worker% 3644*6a54128fSAndroid Build Coastguard Worker\parseargdef\printindex{\begingroup 3645*6a54128fSAndroid Build Coastguard Worker \dobreak \chapheadingskip{10000}% 3646*6a54128fSAndroid Build Coastguard Worker % 3647*6a54128fSAndroid Build Coastguard Worker \smallfonts \rm 3648*6a54128fSAndroid Build Coastguard Worker \tolerance = 9500 3649*6a54128fSAndroid Build Coastguard Worker \everypar = {}% don't want the \kern\-parindent from indentation suppression. 3650*6a54128fSAndroid Build Coastguard Worker % 3651*6a54128fSAndroid Build Coastguard Worker % See if the index file exists and is nonempty. 3652*6a54128fSAndroid Build Coastguard Worker % Change catcode of @ here so that if the index file contains 3653*6a54128fSAndroid Build Coastguard Worker % \initial {@} 3654*6a54128fSAndroid Build Coastguard Worker % as its first line, TeX doesn't complain about mismatched braces 3655*6a54128fSAndroid Build Coastguard Worker % (because it thinks @} is a control sequence). 3656*6a54128fSAndroid Build Coastguard Worker \catcode`\@ = 11 3657*6a54128fSAndroid Build Coastguard Worker \openin 1 \jobname.#1s 3658*6a54128fSAndroid Build Coastguard Worker \ifeof 1 3659*6a54128fSAndroid Build Coastguard Worker % \enddoublecolumns gets confused if there is no text in the index, 3660*6a54128fSAndroid Build Coastguard Worker % and it loses the chapter title and the aux file entries for the 3661*6a54128fSAndroid Build Coastguard Worker % index. The easiest way to prevent this problem is to make sure 3662*6a54128fSAndroid Build Coastguard Worker % there is some text. 3663*6a54128fSAndroid Build Coastguard Worker \putwordIndexNonexistent 3664*6a54128fSAndroid Build Coastguard Worker \else 3665*6a54128fSAndroid Build Coastguard Worker % 3666*6a54128fSAndroid Build Coastguard Worker % If the index file exists but is empty, then \openin leaves \ifeof 3667*6a54128fSAndroid Build Coastguard Worker % false. We have to make TeX try to read something from the file, so 3668*6a54128fSAndroid Build Coastguard Worker % it can discover if there is anything in it. 3669*6a54128fSAndroid Build Coastguard Worker \read 1 to \temp 3670*6a54128fSAndroid Build Coastguard Worker \ifeof 1 3671*6a54128fSAndroid Build Coastguard Worker \putwordIndexIsEmpty 3672*6a54128fSAndroid Build Coastguard Worker \else 3673*6a54128fSAndroid Build Coastguard Worker % Index files are almost Texinfo source, but we use \ as the escape 3674*6a54128fSAndroid Build Coastguard Worker % character. It would be better to use @, but that's too big a change 3675*6a54128fSAndroid Build Coastguard Worker % to make right now. 3676*6a54128fSAndroid Build Coastguard Worker \def\indexbackslash{\backslashcurfont}% 3677*6a54128fSAndroid Build Coastguard Worker \catcode`\\ = 0 3678*6a54128fSAndroid Build Coastguard Worker \escapechar = `\\ 3679*6a54128fSAndroid Build Coastguard Worker \begindoublecolumns 3680*6a54128fSAndroid Build Coastguard Worker \input \jobname.#1s 3681*6a54128fSAndroid Build Coastguard Worker \enddoublecolumns 3682*6a54128fSAndroid Build Coastguard Worker \fi 3683*6a54128fSAndroid Build Coastguard Worker \fi 3684*6a54128fSAndroid Build Coastguard Worker \closein 1 3685*6a54128fSAndroid Build Coastguard Worker\endgroup} 3686*6a54128fSAndroid Build Coastguard Worker 3687*6a54128fSAndroid Build Coastguard Worker% These macros are used by the sorted index file itself. 3688*6a54128fSAndroid Build Coastguard Worker% Change them to control the appearance of the index. 3689*6a54128fSAndroid Build Coastguard Worker 3690*6a54128fSAndroid Build Coastguard Worker\def\initial#1{{% 3691*6a54128fSAndroid Build Coastguard Worker % Some minor font changes for the special characters. 3692*6a54128fSAndroid Build Coastguard Worker \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt 3693*6a54128fSAndroid Build Coastguard Worker % 3694*6a54128fSAndroid Build Coastguard Worker % Remove any glue we may have, we'll be inserting our own. 3695*6a54128fSAndroid Build Coastguard Worker \removelastskip 3696*6a54128fSAndroid Build Coastguard Worker % 3697*6a54128fSAndroid Build Coastguard Worker % We like breaks before the index initials, so insert a bonus. 3698*6a54128fSAndroid Build Coastguard Worker \nobreak 3699*6a54128fSAndroid Build Coastguard Worker \vskip 0pt plus 3\baselineskip 3700*6a54128fSAndroid Build Coastguard Worker \penalty 0 3701*6a54128fSAndroid Build Coastguard Worker \vskip 0pt plus -3\baselineskip 3702*6a54128fSAndroid Build Coastguard Worker % 3703*6a54128fSAndroid Build Coastguard Worker % Typeset the initial. Making this add up to a whole number of 3704*6a54128fSAndroid Build Coastguard Worker % baselineskips increases the chance of the dots lining up from column 3705*6a54128fSAndroid Build Coastguard Worker % to column. It still won't often be perfect, because of the stretch 3706*6a54128fSAndroid Build Coastguard Worker % we need before each entry, but it's better. 3707*6a54128fSAndroid Build Coastguard Worker % 3708*6a54128fSAndroid Build Coastguard Worker % No shrink because it confuses \balancecolumns. 3709*6a54128fSAndroid Build Coastguard Worker \vskip 1.67\baselineskip plus .5\baselineskip 3710*6a54128fSAndroid Build Coastguard Worker \leftline{\secbf #1}% 3711*6a54128fSAndroid Build Coastguard Worker % Do our best not to break after the initial. 3712*6a54128fSAndroid Build Coastguard Worker \nobreak 3713*6a54128fSAndroid Build Coastguard Worker \vskip .33\baselineskip plus .1\baselineskip 3714*6a54128fSAndroid Build Coastguard Worker}} 3715*6a54128fSAndroid Build Coastguard Worker 3716*6a54128fSAndroid Build Coastguard Worker% \entry typesets a paragraph consisting of the text (#1), dot leaders, and 3717*6a54128fSAndroid Build Coastguard Worker% then page number (#2) flushed to the right margin. It is used for index 3718*6a54128fSAndroid Build Coastguard Worker% and table of contents entries. The paragraph is indented by \leftskip. 3719*6a54128fSAndroid Build Coastguard Worker% 3720*6a54128fSAndroid Build Coastguard Worker% A straightforward implementation would start like this: 3721*6a54128fSAndroid Build Coastguard Worker% \def\entry#1#2{... 3722*6a54128fSAndroid Build Coastguard Worker% But this frozes the catcodes in the argument, and can cause problems to 3723*6a54128fSAndroid Build Coastguard Worker% @code, which sets - active. This problem was fixed by a kludge--- 3724*6a54128fSAndroid Build Coastguard Worker% ``-'' was active throughout whole index, but this isn't really right. 3725*6a54128fSAndroid Build Coastguard Worker% 3726*6a54128fSAndroid Build Coastguard Worker% The right solution is to prevent \entry from swallowing the whole text. 3727*6a54128fSAndroid Build Coastguard Worker% --kasal, 21nov03 3728*6a54128fSAndroid Build Coastguard Worker\def\entry{% 3729*6a54128fSAndroid Build Coastguard Worker \begingroup 3730*6a54128fSAndroid Build Coastguard Worker % 3731*6a54128fSAndroid Build Coastguard Worker % Start a new paragraph if necessary, so our assignments below can't 3732*6a54128fSAndroid Build Coastguard Worker % affect previous text. 3733*6a54128fSAndroid Build Coastguard Worker \par 3734*6a54128fSAndroid Build Coastguard Worker % 3735*6a54128fSAndroid Build Coastguard Worker % Do not fill out the last line with white space. 3736*6a54128fSAndroid Build Coastguard Worker \parfillskip = 0in 3737*6a54128fSAndroid Build Coastguard Worker % 3738*6a54128fSAndroid Build Coastguard Worker % No extra space above this paragraph. 3739*6a54128fSAndroid Build Coastguard Worker \parskip = 0in 3740*6a54128fSAndroid Build Coastguard Worker % 3741*6a54128fSAndroid Build Coastguard Worker % Do not prefer a separate line ending with a hyphen to fewer lines. 3742*6a54128fSAndroid Build Coastguard Worker \finalhyphendemerits = 0 3743*6a54128fSAndroid Build Coastguard Worker % 3744*6a54128fSAndroid Build Coastguard Worker % \hangindent is only relevant when the entry text and page number 3745*6a54128fSAndroid Build Coastguard Worker % don't both fit on one line. In that case, bob suggests starting the 3746*6a54128fSAndroid Build Coastguard Worker % dots pretty far over on the line. Unfortunately, a large 3747*6a54128fSAndroid Build Coastguard Worker % indentation looks wrong when the entry text itself is broken across 3748*6a54128fSAndroid Build Coastguard Worker % lines. So we use a small indentation and put up with long leaders. 3749*6a54128fSAndroid Build Coastguard Worker % 3750*6a54128fSAndroid Build Coastguard Worker % \hangafter is reset to 1 (which is the value we want) at the start 3751*6a54128fSAndroid Build Coastguard Worker % of each paragraph, so we need not do anything with that. 3752*6a54128fSAndroid Build Coastguard Worker \hangindent = 2em 3753*6a54128fSAndroid Build Coastguard Worker % 3754*6a54128fSAndroid Build Coastguard Worker % When the entry text needs to be broken, just fill out the first line 3755*6a54128fSAndroid Build Coastguard Worker % with blank space. 3756*6a54128fSAndroid Build Coastguard Worker \rightskip = 0pt plus1fil 3757*6a54128fSAndroid Build Coastguard Worker % 3758*6a54128fSAndroid Build Coastguard Worker % A bit of stretch before each entry for the benefit of balancing 3759*6a54128fSAndroid Build Coastguard Worker % columns. 3760*6a54128fSAndroid Build Coastguard Worker \vskip 0pt plus1pt 3761*6a54128fSAndroid Build Coastguard Worker % 3762*6a54128fSAndroid Build Coastguard Worker % Swallow the left brace of the text (first parameter): 3763*6a54128fSAndroid Build Coastguard Worker \afterassignment\doentry 3764*6a54128fSAndroid Build Coastguard Worker \let\temp = 3765*6a54128fSAndroid Build Coastguard Worker} 3766*6a54128fSAndroid Build Coastguard Worker\def\doentry{% 3767*6a54128fSAndroid Build Coastguard Worker \bgroup % Instead of the swallowed brace. 3768*6a54128fSAndroid Build Coastguard Worker \noindent 3769*6a54128fSAndroid Build Coastguard Worker \aftergroup\finishentry 3770*6a54128fSAndroid Build Coastguard Worker % And now comes the text of the entry. 3771*6a54128fSAndroid Build Coastguard Worker} 3772*6a54128fSAndroid Build Coastguard Worker\def\finishentry#1{% 3773*6a54128fSAndroid Build Coastguard Worker % #1 is the page number. 3774*6a54128fSAndroid Build Coastguard Worker % 3775*6a54128fSAndroid Build Coastguard Worker % The following is kludged to not output a line of dots in the index if 3776*6a54128fSAndroid Build Coastguard Worker % there are no page numbers. The next person who breaks this will be 3777*6a54128fSAndroid Build Coastguard Worker % cursed by a Unix daemon. 3778*6a54128fSAndroid Build Coastguard Worker \def\tempa{{\rm }}% 3779*6a54128fSAndroid Build Coastguard Worker \def\tempb{#1}% 3780*6a54128fSAndroid Build Coastguard Worker \edef\tempc{\tempa}% 3781*6a54128fSAndroid Build Coastguard Worker \edef\tempd{\tempb}% 3782*6a54128fSAndroid Build Coastguard Worker \ifx\tempc\tempd 3783*6a54128fSAndroid Build Coastguard Worker \ % 3784*6a54128fSAndroid Build Coastguard Worker \else 3785*6a54128fSAndroid Build Coastguard Worker % 3786*6a54128fSAndroid Build Coastguard Worker % If we must, put the page number on a line of its own, and fill out 3787*6a54128fSAndroid Build Coastguard Worker % this line with blank space. (The \hfil is overwhelmed with the 3788*6a54128fSAndroid Build Coastguard Worker % fill leaders glue in \indexdotfill if the page number does fit.) 3789*6a54128fSAndroid Build Coastguard Worker \hfil\penalty50 3790*6a54128fSAndroid Build Coastguard Worker \null\nobreak\indexdotfill % Have leaders before the page number. 3791*6a54128fSAndroid Build Coastguard Worker % 3792*6a54128fSAndroid Build Coastguard Worker % The `\ ' here is removed by the implicit \unskip that TeX does as 3793*6a54128fSAndroid Build Coastguard Worker % part of (the primitive) \par. Without it, a spurious underfull 3794*6a54128fSAndroid Build Coastguard Worker % \hbox ensues. 3795*6a54128fSAndroid Build Coastguard Worker \ifpdf 3796*6a54128fSAndroid Build Coastguard Worker \pdfgettoks#1.% 3797*6a54128fSAndroid Build Coastguard Worker \ \the\toksA 3798*6a54128fSAndroid Build Coastguard Worker \else 3799*6a54128fSAndroid Build Coastguard Worker \ #1% 3800*6a54128fSAndroid Build Coastguard Worker \fi 3801*6a54128fSAndroid Build Coastguard Worker \fi 3802*6a54128fSAndroid Build Coastguard Worker \par 3803*6a54128fSAndroid Build Coastguard Worker \endgroup 3804*6a54128fSAndroid Build Coastguard Worker} 3805*6a54128fSAndroid Build Coastguard Worker 3806*6a54128fSAndroid Build Coastguard Worker% Like \dotfill except takes at least 1 em. 3807*6a54128fSAndroid Build Coastguard Worker\def\indexdotfill{\cleaders 3808*6a54128fSAndroid Build Coastguard Worker \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} 3809*6a54128fSAndroid Build Coastguard Worker 3810*6a54128fSAndroid Build Coastguard Worker\def\primary #1{\line{#1\hfil}} 3811*6a54128fSAndroid Build Coastguard Worker 3812*6a54128fSAndroid Build Coastguard Worker\newskip\secondaryindent \secondaryindent=0.5cm 3813*6a54128fSAndroid Build Coastguard Worker\def\secondary#1#2{{% 3814*6a54128fSAndroid Build Coastguard Worker \parfillskip=0in 3815*6a54128fSAndroid Build Coastguard Worker \parskip=0in 3816*6a54128fSAndroid Build Coastguard Worker \hangindent=1in 3817*6a54128fSAndroid Build Coastguard Worker \hangafter=1 3818*6a54128fSAndroid Build Coastguard Worker \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill 3819*6a54128fSAndroid Build Coastguard Worker \ifpdf 3820*6a54128fSAndroid Build Coastguard Worker \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. 3821*6a54128fSAndroid Build Coastguard Worker \else 3822*6a54128fSAndroid Build Coastguard Worker #2 3823*6a54128fSAndroid Build Coastguard Worker \fi 3824*6a54128fSAndroid Build Coastguard Worker \par 3825*6a54128fSAndroid Build Coastguard Worker}} 3826*6a54128fSAndroid Build Coastguard Worker 3827*6a54128fSAndroid Build Coastguard Worker% Define two-column mode, which we use to typeset indexes. 3828*6a54128fSAndroid Build Coastguard Worker% Adapted from the TeXbook, page 416, which is to say, 3829*6a54128fSAndroid Build Coastguard Worker% the manmac.tex format used to print the TeXbook itself. 3830*6a54128fSAndroid Build Coastguard Worker\catcode`\@=11 3831*6a54128fSAndroid Build Coastguard Worker 3832*6a54128fSAndroid Build Coastguard Worker\newbox\partialpage 3833*6a54128fSAndroid Build Coastguard Worker\newdimen\doublecolumnhsize 3834*6a54128fSAndroid Build Coastguard Worker 3835*6a54128fSAndroid Build Coastguard Worker\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns 3836*6a54128fSAndroid Build Coastguard Worker % Grab any single-column material above us. 3837*6a54128fSAndroid Build Coastguard Worker \output = {% 3838*6a54128fSAndroid Build Coastguard Worker % 3839*6a54128fSAndroid Build Coastguard Worker % Here is a possibility not foreseen in manmac: if we accumulate a 3840*6a54128fSAndroid Build Coastguard Worker % whole lot of material, we might end up calling this \output 3841*6a54128fSAndroid Build Coastguard Worker % routine twice in a row (see the doublecol-lose test, which is 3842*6a54128fSAndroid Build Coastguard Worker % essentially a couple of indexes with @setchapternewpage off). In 3843*6a54128fSAndroid Build Coastguard Worker % that case we just ship out what is in \partialpage with the normal 3844*6a54128fSAndroid Build Coastguard Worker % output routine. Generally, \partialpage will be empty when this 3845*6a54128fSAndroid Build Coastguard Worker % runs and this will be a no-op. See the indexspread.tex test case. 3846*6a54128fSAndroid Build Coastguard Worker \ifvoid\partialpage \else 3847*6a54128fSAndroid Build Coastguard Worker \onepageout{\pagecontents\partialpage}% 3848*6a54128fSAndroid Build Coastguard Worker \fi 3849*6a54128fSAndroid Build Coastguard Worker % 3850*6a54128fSAndroid Build Coastguard Worker \global\setbox\partialpage = \vbox{% 3851*6a54128fSAndroid Build Coastguard Worker % Unvbox the main output page. 3852*6a54128fSAndroid Build Coastguard Worker \unvbox\PAGE 3853*6a54128fSAndroid Build Coastguard Worker \kern-\topskip \kern\baselineskip 3854*6a54128fSAndroid Build Coastguard Worker }% 3855*6a54128fSAndroid Build Coastguard Worker }% 3856*6a54128fSAndroid Build Coastguard Worker \eject % run that output routine to set \partialpage 3857*6a54128fSAndroid Build Coastguard Worker % 3858*6a54128fSAndroid Build Coastguard Worker % Use the double-column output routine for subsequent pages. 3859*6a54128fSAndroid Build Coastguard Worker \output = {\doublecolumnout}% 3860*6a54128fSAndroid Build Coastguard Worker % 3861*6a54128fSAndroid Build Coastguard Worker % Change the page size parameters. We could do this once outside this 3862*6a54128fSAndroid Build Coastguard Worker % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 3863*6a54128fSAndroid Build Coastguard Worker % format, but then we repeat the same computation. Repeating a couple 3864*6a54128fSAndroid Build Coastguard Worker % of assignments once per index is clearly meaningless for the 3865*6a54128fSAndroid Build Coastguard Worker % execution time, so we may as well do it in one place. 3866*6a54128fSAndroid Build Coastguard Worker % 3867*6a54128fSAndroid Build Coastguard Worker % First we halve the line length, less a little for the gutter between 3868*6a54128fSAndroid Build Coastguard Worker % the columns. We compute the gutter based on the line length, so it 3869*6a54128fSAndroid Build Coastguard Worker % changes automatically with the paper format. The magic constant 3870*6a54128fSAndroid Build Coastguard Worker % below is chosen so that the gutter has the same value (well, +-<1pt) 3871*6a54128fSAndroid Build Coastguard Worker % as it did when we hard-coded it. 3872*6a54128fSAndroid Build Coastguard Worker % 3873*6a54128fSAndroid Build Coastguard Worker % We put the result in a separate register, \doublecolumhsize, so we 3874*6a54128fSAndroid Build Coastguard Worker % can restore it in \pagesofar, after \hsize itself has (potentially) 3875*6a54128fSAndroid Build Coastguard Worker % been clobbered. 3876*6a54128fSAndroid Build Coastguard Worker % 3877*6a54128fSAndroid Build Coastguard Worker \doublecolumnhsize = \hsize 3878*6a54128fSAndroid Build Coastguard Worker \advance\doublecolumnhsize by -.04154\hsize 3879*6a54128fSAndroid Build Coastguard Worker \divide\doublecolumnhsize by 2 3880*6a54128fSAndroid Build Coastguard Worker \hsize = \doublecolumnhsize 3881*6a54128fSAndroid Build Coastguard Worker % 3882*6a54128fSAndroid Build Coastguard Worker % Double the \vsize as well. (We don't need a separate register here, 3883*6a54128fSAndroid Build Coastguard Worker % since nobody clobbers \vsize.) 3884*6a54128fSAndroid Build Coastguard Worker \vsize = 2\vsize 3885*6a54128fSAndroid Build Coastguard Worker} 3886*6a54128fSAndroid Build Coastguard Worker 3887*6a54128fSAndroid Build Coastguard Worker% The double-column output routine for all double-column pages except 3888*6a54128fSAndroid Build Coastguard Worker% the last. 3889*6a54128fSAndroid Build Coastguard Worker% 3890*6a54128fSAndroid Build Coastguard Worker\def\doublecolumnout{% 3891*6a54128fSAndroid Build Coastguard Worker \splittopskip=\topskip \splitmaxdepth=\maxdepth 3892*6a54128fSAndroid Build Coastguard Worker % Get the available space for the double columns -- the normal 3893*6a54128fSAndroid Build Coastguard Worker % (undoubled) page height minus any material left over from the 3894*6a54128fSAndroid Build Coastguard Worker % previous page. 3895*6a54128fSAndroid Build Coastguard Worker \dimen@ = \vsize 3896*6a54128fSAndroid Build Coastguard Worker \divide\dimen@ by 2 3897*6a54128fSAndroid Build Coastguard Worker \advance\dimen@ by -\ht\partialpage 3898*6a54128fSAndroid Build Coastguard Worker % 3899*6a54128fSAndroid Build Coastguard Worker % box0 will be the left-hand column, box2 the right. 3900*6a54128fSAndroid Build Coastguard Worker \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ 3901*6a54128fSAndroid Build Coastguard Worker \onepageout\pagesofar 3902*6a54128fSAndroid Build Coastguard Worker \unvbox255 3903*6a54128fSAndroid Build Coastguard Worker \penalty\outputpenalty 3904*6a54128fSAndroid Build Coastguard Worker} 3905*6a54128fSAndroid Build Coastguard Worker% 3906*6a54128fSAndroid Build Coastguard Worker% Re-output the contents of the output page -- any previous material, 3907*6a54128fSAndroid Build Coastguard Worker% followed by the two boxes we just split, in box0 and box2. 3908*6a54128fSAndroid Build Coastguard Worker\def\pagesofar{% 3909*6a54128fSAndroid Build Coastguard Worker \unvbox\partialpage 3910*6a54128fSAndroid Build Coastguard Worker % 3911*6a54128fSAndroid Build Coastguard Worker \hsize = \doublecolumnhsize 3912*6a54128fSAndroid Build Coastguard Worker \wd0=\hsize \wd2=\hsize 3913*6a54128fSAndroid Build Coastguard Worker \hbox to\pagewidth{\box0\hfil\box2}% 3914*6a54128fSAndroid Build Coastguard Worker} 3915*6a54128fSAndroid Build Coastguard Worker% 3916*6a54128fSAndroid Build Coastguard Worker% All done with double columns. 3917*6a54128fSAndroid Build Coastguard Worker\def\enddoublecolumns{% 3918*6a54128fSAndroid Build Coastguard Worker \output = {% 3919*6a54128fSAndroid Build Coastguard Worker % Split the last of the double-column material. Leave it on the 3920*6a54128fSAndroid Build Coastguard Worker % current page, no automatic page break. 3921*6a54128fSAndroid Build Coastguard Worker \balancecolumns 3922*6a54128fSAndroid Build Coastguard Worker % 3923*6a54128fSAndroid Build Coastguard Worker % If we end up splitting too much material for the current page, 3924*6a54128fSAndroid Build Coastguard Worker % though, there will be another page break right after this \output 3925*6a54128fSAndroid Build Coastguard Worker % invocation ends. Having called \balancecolumns once, we do not 3926*6a54128fSAndroid Build Coastguard Worker % want to call it again. Therefore, reset \output to its normal 3927*6a54128fSAndroid Build Coastguard Worker % definition right away. (We hope \balancecolumns will never be 3928*6a54128fSAndroid Build Coastguard Worker % called on to balance too much material, but if it is, this makes 3929*6a54128fSAndroid Build Coastguard Worker % the output somewhat more palatable.) 3930*6a54128fSAndroid Build Coastguard Worker \global\output = {\onepageout{\pagecontents\PAGE}}% 3931*6a54128fSAndroid Build Coastguard Worker }% 3932*6a54128fSAndroid Build Coastguard Worker \eject 3933*6a54128fSAndroid Build Coastguard Worker \endgroup % started in \begindoublecolumns 3934*6a54128fSAndroid Build Coastguard Worker % 3935*6a54128fSAndroid Build Coastguard Worker % \pagegoal was set to the doubled \vsize above, since we restarted 3936*6a54128fSAndroid Build Coastguard Worker % the current page. We're now back to normal single-column 3937*6a54128fSAndroid Build Coastguard Worker % typesetting, so reset \pagegoal to the normal \vsize (after the 3938*6a54128fSAndroid Build Coastguard Worker % \endgroup where \vsize got restored). 3939*6a54128fSAndroid Build Coastguard Worker \pagegoal = \vsize 3940*6a54128fSAndroid Build Coastguard Worker} 3941*6a54128fSAndroid Build Coastguard Worker% 3942*6a54128fSAndroid Build Coastguard Worker% Called at the end of the double column material. 3943*6a54128fSAndroid Build Coastguard Worker\def\balancecolumns{% 3944*6a54128fSAndroid Build Coastguard Worker \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. 3945*6a54128fSAndroid Build Coastguard Worker \dimen@ = \ht0 3946*6a54128fSAndroid Build Coastguard Worker \advance\dimen@ by \topskip 3947*6a54128fSAndroid Build Coastguard Worker \advance\dimen@ by-\baselineskip 3948*6a54128fSAndroid Build Coastguard Worker \divide\dimen@ by 2 % target to split to 3949*6a54128fSAndroid Build Coastguard Worker %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% 3950*6a54128fSAndroid Build Coastguard Worker \splittopskip = \topskip 3951*6a54128fSAndroid Build Coastguard Worker % Loop until we get a decent breakpoint. 3952*6a54128fSAndroid Build Coastguard Worker {% 3953*6a54128fSAndroid Build Coastguard Worker \vbadness = 10000 3954*6a54128fSAndroid Build Coastguard Worker \loop 3955*6a54128fSAndroid Build Coastguard Worker \global\setbox3 = \copy0 3956*6a54128fSAndroid Build Coastguard Worker \global\setbox1 = \vsplit3 to \dimen@ 3957*6a54128fSAndroid Build Coastguard Worker \ifdim\ht3>\dimen@ 3958*6a54128fSAndroid Build Coastguard Worker \global\advance\dimen@ by 1pt 3959*6a54128fSAndroid Build Coastguard Worker \repeat 3960*6a54128fSAndroid Build Coastguard Worker }% 3961*6a54128fSAndroid Build Coastguard Worker %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% 3962*6a54128fSAndroid Build Coastguard Worker \setbox0=\vbox to\dimen@{\unvbox1}% 3963*6a54128fSAndroid Build Coastguard Worker \setbox2=\vbox to\dimen@{\unvbox3}% 3964*6a54128fSAndroid Build Coastguard Worker % 3965*6a54128fSAndroid Build Coastguard Worker \pagesofar 3966*6a54128fSAndroid Build Coastguard Worker} 3967*6a54128fSAndroid Build Coastguard Worker\catcode`\@ = \other 3968*6a54128fSAndroid Build Coastguard Worker 3969*6a54128fSAndroid Build Coastguard Worker 3970*6a54128fSAndroid Build Coastguard Worker\message{sectioning,} 3971*6a54128fSAndroid Build Coastguard Worker% Chapters, sections, etc. 3972*6a54128fSAndroid Build Coastguard Worker 3973*6a54128fSAndroid Build Coastguard Worker% \unnumberedno is an oxymoron, of course. But we count the unnumbered 3974*6a54128fSAndroid Build Coastguard Worker% sections so that we can refer to them unambiguously in the pdf 3975*6a54128fSAndroid Build Coastguard Worker% outlines by their "section number". We avoid collisions with chapter 3976*6a54128fSAndroid Build Coastguard Worker% numbers by starting them at 10000. (If a document ever has 10000 3977*6a54128fSAndroid Build Coastguard Worker% chapters, we're in trouble anyway, I'm sure.) 3978*6a54128fSAndroid Build Coastguard Worker\newcount\unnumberedno \unnumberedno = 10000 3979*6a54128fSAndroid Build Coastguard Worker\newcount\chapno 3980*6a54128fSAndroid Build Coastguard Worker\newcount\secno \secno=0 3981*6a54128fSAndroid Build Coastguard Worker\newcount\subsecno \subsecno=0 3982*6a54128fSAndroid Build Coastguard Worker\newcount\subsubsecno \subsubsecno=0 3983*6a54128fSAndroid Build Coastguard Worker 3984*6a54128fSAndroid Build Coastguard Worker% This counter is funny since it counts through charcodes of letters A, B, ... 3985*6a54128fSAndroid Build Coastguard Worker\newcount\appendixno \appendixno = `\@ 3986*6a54128fSAndroid Build Coastguard Worker% 3987*6a54128fSAndroid Build Coastguard Worker% \def\appendixletter{\char\the\appendixno} 3988*6a54128fSAndroid Build Coastguard Worker% We do the following ugly conditional instead of the above simple 3989*6a54128fSAndroid Build Coastguard Worker% construct for the sake of pdftex, which needs the actual 3990*6a54128fSAndroid Build Coastguard Worker% letter in the expansion, not just typeset. 3991*6a54128fSAndroid Build Coastguard Worker% 3992*6a54128fSAndroid Build Coastguard Worker\def\appendixletter{% 3993*6a54128fSAndroid Build Coastguard Worker \ifnum\appendixno=`A A% 3994*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`B B% 3995*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`C C% 3996*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`D D% 3997*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`E E% 3998*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`F F% 3999*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`G G% 4000*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`H H% 4001*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`I I% 4002*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`J J% 4003*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`K K% 4004*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`L L% 4005*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`M M% 4006*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`N N% 4007*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`O O% 4008*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`P P% 4009*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`Q Q% 4010*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`R R% 4011*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`S S% 4012*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`T T% 4013*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`U U% 4014*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`V V% 4015*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`W W% 4016*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`X X% 4017*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`Y Y% 4018*6a54128fSAndroid Build Coastguard Worker \else\ifnum\appendixno=`Z Z% 4019*6a54128fSAndroid Build Coastguard Worker % The \the is necessary, despite appearances, because \appendixletter is 4020*6a54128fSAndroid Build Coastguard Worker % expanded while writing the .toc file. \char\appendixno is not 4021*6a54128fSAndroid Build Coastguard Worker % expandable, thus it is written literally, thus all appendixes come out 4022*6a54128fSAndroid Build Coastguard Worker % with the same letter (or @) in the toc without it. 4023*6a54128fSAndroid Build Coastguard Worker \else\char\the\appendixno 4024*6a54128fSAndroid Build Coastguard Worker \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi 4025*6a54128fSAndroid Build Coastguard Worker \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} 4026*6a54128fSAndroid Build Coastguard Worker 4027*6a54128fSAndroid Build Coastguard Worker% Each @chapter defines this as the name of the chapter. 4028*6a54128fSAndroid Build Coastguard Worker% page headings and footings can use it. @section does likewise. 4029*6a54128fSAndroid Build Coastguard Worker% However, they are not reliable, because we don't use marks. 4030*6a54128fSAndroid Build Coastguard Worker\def\thischapter{} 4031*6a54128fSAndroid Build Coastguard Worker\def\thissection{} 4032*6a54128fSAndroid Build Coastguard Worker 4033*6a54128fSAndroid Build Coastguard Worker\newcount\absseclevel % used to calculate proper heading level 4034*6a54128fSAndroid Build Coastguard Worker\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count 4035*6a54128fSAndroid Build Coastguard Worker 4036*6a54128fSAndroid Build Coastguard Worker% @raisesections: treat @section as chapter, @subsection as section, etc. 4037*6a54128fSAndroid Build Coastguard Worker\def\raisesections{\global\advance\secbase by -1} 4038*6a54128fSAndroid Build Coastguard Worker\let\up=\raisesections % original BFox name 4039*6a54128fSAndroid Build Coastguard Worker 4040*6a54128fSAndroid Build Coastguard Worker% @lowersections: treat @chapter as section, @section as subsection, etc. 4041*6a54128fSAndroid Build Coastguard Worker\def\lowersections{\global\advance\secbase by 1} 4042*6a54128fSAndroid Build Coastguard Worker\let\down=\lowersections % original BFox name 4043*6a54128fSAndroid Build Coastguard Worker 4044*6a54128fSAndroid Build Coastguard Worker% we only have subsub. 4045*6a54128fSAndroid Build Coastguard Worker\chardef\maxseclevel = 3 4046*6a54128fSAndroid Build Coastguard Worker% 4047*6a54128fSAndroid Build Coastguard Worker% A numbered section within an unnumbered changes to unnumbered too. 4048*6a54128fSAndroid Build Coastguard Worker% To achieve this, remember the "biggest" unnum. sec. we are currently in: 4049*6a54128fSAndroid Build Coastguard Worker\chardef\unmlevel = \maxseclevel 4050*6a54128fSAndroid Build Coastguard Worker% 4051*6a54128fSAndroid Build Coastguard Worker% Trace whether the current chapter is an appendix or not: 4052*6a54128fSAndroid Build Coastguard Worker% \chapheadtype is "N" or "A", unnumbered chapters are ignored. 4053*6a54128fSAndroid Build Coastguard Worker\def\chapheadtype{N} 4054*6a54128fSAndroid Build Coastguard Worker 4055*6a54128fSAndroid Build Coastguard Worker% Choose a heading macro 4056*6a54128fSAndroid Build Coastguard Worker% #1 is heading type 4057*6a54128fSAndroid Build Coastguard Worker% #2 is heading level 4058*6a54128fSAndroid Build Coastguard Worker% #3 is text for heading 4059*6a54128fSAndroid Build Coastguard Worker\def\genhead#1#2#3{% 4060*6a54128fSAndroid Build Coastguard Worker % Compute the abs. sec. level: 4061*6a54128fSAndroid Build Coastguard Worker \absseclevel=#2 4062*6a54128fSAndroid Build Coastguard Worker \advance\absseclevel by \secbase 4063*6a54128fSAndroid Build Coastguard Worker % Make sure \absseclevel doesn't fall outside the range: 4064*6a54128fSAndroid Build Coastguard Worker \ifnum \absseclevel < 0 4065*6a54128fSAndroid Build Coastguard Worker \absseclevel = 0 4066*6a54128fSAndroid Build Coastguard Worker \else 4067*6a54128fSAndroid Build Coastguard Worker \ifnum \absseclevel > 3 4068*6a54128fSAndroid Build Coastguard Worker \absseclevel = 3 4069*6a54128fSAndroid Build Coastguard Worker \fi 4070*6a54128fSAndroid Build Coastguard Worker \fi 4071*6a54128fSAndroid Build Coastguard Worker % The heading type: 4072*6a54128fSAndroid Build Coastguard Worker \def\headtype{#1}% 4073*6a54128fSAndroid Build Coastguard Worker \if \headtype U% 4074*6a54128fSAndroid Build Coastguard Worker \ifnum \absseclevel < \unmlevel 4075*6a54128fSAndroid Build Coastguard Worker \chardef\unmlevel = \absseclevel 4076*6a54128fSAndroid Build Coastguard Worker \fi 4077*6a54128fSAndroid Build Coastguard Worker \else 4078*6a54128fSAndroid Build Coastguard Worker % Check for appendix sections: 4079*6a54128fSAndroid Build Coastguard Worker \ifnum \absseclevel = 0 4080*6a54128fSAndroid Build Coastguard Worker \edef\chapheadtype{\headtype}% 4081*6a54128fSAndroid Build Coastguard Worker \else 4082*6a54128fSAndroid Build Coastguard Worker \if \headtype A\if \chapheadtype N% 4083*6a54128fSAndroid Build Coastguard Worker \errmessage{@appendix... within a non-appendix chapter}% 4084*6a54128fSAndroid Build Coastguard Worker \fi\fi 4085*6a54128fSAndroid Build Coastguard Worker \fi 4086*6a54128fSAndroid Build Coastguard Worker % Check for numbered within unnumbered: 4087*6a54128fSAndroid Build Coastguard Worker \ifnum \absseclevel > \unmlevel 4088*6a54128fSAndroid Build Coastguard Worker \def\headtype{U}% 4089*6a54128fSAndroid Build Coastguard Worker \else 4090*6a54128fSAndroid Build Coastguard Worker \chardef\unmlevel = 3 4091*6a54128fSAndroid Build Coastguard Worker \fi 4092*6a54128fSAndroid Build Coastguard Worker \fi 4093*6a54128fSAndroid Build Coastguard Worker % Now print the heading: 4094*6a54128fSAndroid Build Coastguard Worker \if \headtype U% 4095*6a54128fSAndroid Build Coastguard Worker \ifcase\absseclevel 4096*6a54128fSAndroid Build Coastguard Worker \unnumberedzzz{#3}% 4097*6a54128fSAndroid Build Coastguard Worker \or \unnumberedseczzz{#3}% 4098*6a54128fSAndroid Build Coastguard Worker \or \unnumberedsubseczzz{#3}% 4099*6a54128fSAndroid Build Coastguard Worker \or \unnumberedsubsubseczzz{#3}% 4100*6a54128fSAndroid Build Coastguard Worker \fi 4101*6a54128fSAndroid Build Coastguard Worker \else 4102*6a54128fSAndroid Build Coastguard Worker \if \headtype A% 4103*6a54128fSAndroid Build Coastguard Worker \ifcase\absseclevel 4104*6a54128fSAndroid Build Coastguard Worker \appendixzzz{#3}% 4105*6a54128fSAndroid Build Coastguard Worker \or \appendixsectionzzz{#3}% 4106*6a54128fSAndroid Build Coastguard Worker \or \appendixsubseczzz{#3}% 4107*6a54128fSAndroid Build Coastguard Worker \or \appendixsubsubseczzz{#3}% 4108*6a54128fSAndroid Build Coastguard Worker \fi 4109*6a54128fSAndroid Build Coastguard Worker \else 4110*6a54128fSAndroid Build Coastguard Worker \ifcase\absseclevel 4111*6a54128fSAndroid Build Coastguard Worker \chapterzzz{#3}% 4112*6a54128fSAndroid Build Coastguard Worker \or \seczzz{#3}% 4113*6a54128fSAndroid Build Coastguard Worker \or \numberedsubseczzz{#3}% 4114*6a54128fSAndroid Build Coastguard Worker \or \numberedsubsubseczzz{#3}% 4115*6a54128fSAndroid Build Coastguard Worker \fi 4116*6a54128fSAndroid Build Coastguard Worker \fi 4117*6a54128fSAndroid Build Coastguard Worker \fi 4118*6a54128fSAndroid Build Coastguard Worker \suppressfirstparagraphindent 4119*6a54128fSAndroid Build Coastguard Worker} 4120*6a54128fSAndroid Build Coastguard Worker 4121*6a54128fSAndroid Build Coastguard Worker% an interface: 4122*6a54128fSAndroid Build Coastguard Worker\def\numhead{\genhead N} 4123*6a54128fSAndroid Build Coastguard Worker\def\apphead{\genhead A} 4124*6a54128fSAndroid Build Coastguard Worker\def\unnmhead{\genhead U} 4125*6a54128fSAndroid Build Coastguard Worker 4126*6a54128fSAndroid Build Coastguard Worker% @chapter, @appendix, @unnumbered. Increment top-level counter, reset 4127*6a54128fSAndroid Build Coastguard Worker% all lower-level sectioning counters to zero. 4128*6a54128fSAndroid Build Coastguard Worker% 4129*6a54128fSAndroid Build Coastguard Worker% Also set \chaplevelprefix, which we prepend to @float sequence numbers 4130*6a54128fSAndroid Build Coastguard Worker% (e.g., figures), q.v. By default (before any chapter), that is empty. 4131*6a54128fSAndroid Build Coastguard Worker\let\chaplevelprefix = \empty 4132*6a54128fSAndroid Build Coastguard Worker% 4133*6a54128fSAndroid Build Coastguard Worker\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz 4134*6a54128fSAndroid Build Coastguard Worker\def\chapterzzz#1{% 4135*6a54128fSAndroid Build Coastguard Worker % section resetting is \global in case the chapter is in a group, such 4136*6a54128fSAndroid Build Coastguard Worker % as an @include file. 4137*6a54128fSAndroid Build Coastguard Worker \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 4138*6a54128fSAndroid Build Coastguard Worker \global\advance\chapno by 1 4139*6a54128fSAndroid Build Coastguard Worker % 4140*6a54128fSAndroid Build Coastguard Worker % Used for \float. 4141*6a54128fSAndroid Build Coastguard Worker \gdef\chaplevelprefix{\the\chapno.}% 4142*6a54128fSAndroid Build Coastguard Worker \resetallfloatnos 4143*6a54128fSAndroid Build Coastguard Worker % 4144*6a54128fSAndroid Build Coastguard Worker \message{\putwordChapter\space \the\chapno}% 4145*6a54128fSAndroid Build Coastguard Worker % 4146*6a54128fSAndroid Build Coastguard Worker % Write the actual heading. 4147*6a54128fSAndroid Build Coastguard Worker \chapmacro{#1}{Ynumbered}{\the\chapno}% 4148*6a54128fSAndroid Build Coastguard Worker % 4149*6a54128fSAndroid Build Coastguard Worker % So @section and the like are numbered underneath this chapter. 4150*6a54128fSAndroid Build Coastguard Worker \global\let\section = \numberedsec 4151*6a54128fSAndroid Build Coastguard Worker \global\let\subsection = \numberedsubsec 4152*6a54128fSAndroid Build Coastguard Worker \global\let\subsubsection = \numberedsubsubsec 4153*6a54128fSAndroid Build Coastguard Worker} 4154*6a54128fSAndroid Build Coastguard Worker 4155*6a54128fSAndroid Build Coastguard Worker\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz 4156*6a54128fSAndroid Build Coastguard Worker\def\appendixzzz#1{% 4157*6a54128fSAndroid Build Coastguard Worker \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 4158*6a54128fSAndroid Build Coastguard Worker \global\advance\appendixno by 1 4159*6a54128fSAndroid Build Coastguard Worker \gdef\chaplevelprefix{\appendixletter.}% 4160*6a54128fSAndroid Build Coastguard Worker \resetallfloatnos 4161*6a54128fSAndroid Build Coastguard Worker % 4162*6a54128fSAndroid Build Coastguard Worker \def\appendixnum{\putwordAppendix\space \appendixletter}% 4163*6a54128fSAndroid Build Coastguard Worker \message{\appendixnum}% 4164*6a54128fSAndroid Build Coastguard Worker % 4165*6a54128fSAndroid Build Coastguard Worker \chapmacro{#1}{Yappendix}{\appendixletter}% 4166*6a54128fSAndroid Build Coastguard Worker % 4167*6a54128fSAndroid Build Coastguard Worker \global\let\section = \appendixsec 4168*6a54128fSAndroid Build Coastguard Worker \global\let\subsection = \appendixsubsec 4169*6a54128fSAndroid Build Coastguard Worker \global\let\subsubsection = \appendixsubsubsec 4170*6a54128fSAndroid Build Coastguard Worker} 4171*6a54128fSAndroid Build Coastguard Worker 4172*6a54128fSAndroid Build Coastguard Worker\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz 4173*6a54128fSAndroid Build Coastguard Worker\def\unnumberedzzz#1{% 4174*6a54128fSAndroid Build Coastguard Worker \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 4175*6a54128fSAndroid Build Coastguard Worker \global\advance\unnumberedno by 1 4176*6a54128fSAndroid Build Coastguard Worker % 4177*6a54128fSAndroid Build Coastguard Worker % Since an unnumbered has no number, no prefix for figures. 4178*6a54128fSAndroid Build Coastguard Worker \global\let\chaplevelprefix = \empty 4179*6a54128fSAndroid Build Coastguard Worker \resetallfloatnos 4180*6a54128fSAndroid Build Coastguard Worker % 4181*6a54128fSAndroid Build Coastguard Worker % This used to be simply \message{#1}, but TeX fully expands the 4182*6a54128fSAndroid Build Coastguard Worker % argument to \message. Therefore, if #1 contained @-commands, TeX 4183*6a54128fSAndroid Build Coastguard Worker % expanded them. For example, in `@unnumbered The @cite{Book}', TeX 4184*6a54128fSAndroid Build Coastguard Worker % expanded @cite (which turns out to cause errors because \cite is meant 4185*6a54128fSAndroid Build Coastguard Worker % to be executed, not expanded). 4186*6a54128fSAndroid Build Coastguard Worker % 4187*6a54128fSAndroid Build Coastguard Worker % Anyway, we don't want the fully-expanded definition of @cite to appear 4188*6a54128fSAndroid Build Coastguard Worker % as a result of the \message, we just want `@cite' itself. We use 4189*6a54128fSAndroid Build Coastguard Worker % \the<toks register> to achieve this: TeX expands \the<toks> only once, 4190*6a54128fSAndroid Build Coastguard Worker % simply yielding the contents of <toks register>. (We also do this for 4191*6a54128fSAndroid Build Coastguard Worker % the toc entries.) 4192*6a54128fSAndroid Build Coastguard Worker \toks0 = {#1}% 4193*6a54128fSAndroid Build Coastguard Worker \message{(\the\toks0)}% 4194*6a54128fSAndroid Build Coastguard Worker % 4195*6a54128fSAndroid Build Coastguard Worker \chapmacro{#1}{Ynothing}{\the\unnumberedno}% 4196*6a54128fSAndroid Build Coastguard Worker % 4197*6a54128fSAndroid Build Coastguard Worker \global\let\section = \unnumberedsec 4198*6a54128fSAndroid Build Coastguard Worker \global\let\subsection = \unnumberedsubsec 4199*6a54128fSAndroid Build Coastguard Worker \global\let\subsubsection = \unnumberedsubsubsec 4200*6a54128fSAndroid Build Coastguard Worker} 4201*6a54128fSAndroid Build Coastguard Worker 4202*6a54128fSAndroid Build Coastguard Worker% @centerchap is like @unnumbered, but the heading is centered. 4203*6a54128fSAndroid Build Coastguard Worker\outer\parseargdef\centerchap{% 4204*6a54128fSAndroid Build Coastguard Worker % Well, we could do the following in a group, but that would break 4205*6a54128fSAndroid Build Coastguard Worker % an assumption that \chapmacro is called at the outermost level. 4206*6a54128fSAndroid Build Coastguard Worker % Thus we are safer this way: --kasal, 24feb04 4207*6a54128fSAndroid Build Coastguard Worker \let\centerparametersmaybe = \centerparameters 4208*6a54128fSAndroid Build Coastguard Worker \unnmhead0{#1}% 4209*6a54128fSAndroid Build Coastguard Worker \let\centerparametersmaybe = \relax 4210*6a54128fSAndroid Build Coastguard Worker} 4211*6a54128fSAndroid Build Coastguard Worker 4212*6a54128fSAndroid Build Coastguard Worker% @top is like @unnumbered. 4213*6a54128fSAndroid Build Coastguard Worker\let\top\unnumbered 4214*6a54128fSAndroid Build Coastguard Worker 4215*6a54128fSAndroid Build Coastguard Worker% Sections. 4216*6a54128fSAndroid Build Coastguard Worker\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz 4217*6a54128fSAndroid Build Coastguard Worker\def\seczzz#1{% 4218*6a54128fSAndroid Build Coastguard Worker \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 4219*6a54128fSAndroid Build Coastguard Worker \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% 4220*6a54128fSAndroid Build Coastguard Worker} 4221*6a54128fSAndroid Build Coastguard Worker 4222*6a54128fSAndroid Build Coastguard Worker\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz 4223*6a54128fSAndroid Build Coastguard Worker\def\appendixsectionzzz#1{% 4224*6a54128fSAndroid Build Coastguard Worker \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 4225*6a54128fSAndroid Build Coastguard Worker \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% 4226*6a54128fSAndroid Build Coastguard Worker} 4227*6a54128fSAndroid Build Coastguard Worker\let\appendixsec\appendixsection 4228*6a54128fSAndroid Build Coastguard Worker 4229*6a54128fSAndroid Build Coastguard Worker\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz 4230*6a54128fSAndroid Build Coastguard Worker\def\unnumberedseczzz#1{% 4231*6a54128fSAndroid Build Coastguard Worker \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 4232*6a54128fSAndroid Build Coastguard Worker \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% 4233*6a54128fSAndroid Build Coastguard Worker} 4234*6a54128fSAndroid Build Coastguard Worker 4235*6a54128fSAndroid Build Coastguard Worker% Subsections. 4236*6a54128fSAndroid Build Coastguard Worker\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz 4237*6a54128fSAndroid Build Coastguard Worker\def\numberedsubseczzz#1{% 4238*6a54128fSAndroid Build Coastguard Worker \global\subsubsecno=0 \global\advance\subsecno by 1 4239*6a54128fSAndroid Build Coastguard Worker \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% 4240*6a54128fSAndroid Build Coastguard Worker} 4241*6a54128fSAndroid Build Coastguard Worker 4242*6a54128fSAndroid Build Coastguard Worker\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz 4243*6a54128fSAndroid Build Coastguard Worker\def\appendixsubseczzz#1{% 4244*6a54128fSAndroid Build Coastguard Worker \global\subsubsecno=0 \global\advance\subsecno by 1 4245*6a54128fSAndroid Build Coastguard Worker \sectionheading{#1}{subsec}{Yappendix}% 4246*6a54128fSAndroid Build Coastguard Worker {\appendixletter.\the\secno.\the\subsecno}% 4247*6a54128fSAndroid Build Coastguard Worker} 4248*6a54128fSAndroid Build Coastguard Worker 4249*6a54128fSAndroid Build Coastguard Worker\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz 4250*6a54128fSAndroid Build Coastguard Worker\def\unnumberedsubseczzz#1{% 4251*6a54128fSAndroid Build Coastguard Worker \global\subsubsecno=0 \global\advance\subsecno by 1 4252*6a54128fSAndroid Build Coastguard Worker \sectionheading{#1}{subsec}{Ynothing}% 4253*6a54128fSAndroid Build Coastguard Worker {\the\unnumberedno.\the\secno.\the\subsecno}% 4254*6a54128fSAndroid Build Coastguard Worker} 4255*6a54128fSAndroid Build Coastguard Worker 4256*6a54128fSAndroid Build Coastguard Worker% Subsubsections. 4257*6a54128fSAndroid Build Coastguard Worker\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz 4258*6a54128fSAndroid Build Coastguard Worker\def\numberedsubsubseczzz#1{% 4259*6a54128fSAndroid Build Coastguard Worker \global\advance\subsubsecno by 1 4260*6a54128fSAndroid Build Coastguard Worker \sectionheading{#1}{subsubsec}{Ynumbered}% 4261*6a54128fSAndroid Build Coastguard Worker {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% 4262*6a54128fSAndroid Build Coastguard Worker} 4263*6a54128fSAndroid Build Coastguard Worker 4264*6a54128fSAndroid Build Coastguard Worker\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz 4265*6a54128fSAndroid Build Coastguard Worker\def\appendixsubsubseczzz#1{% 4266*6a54128fSAndroid Build Coastguard Worker \global\advance\subsubsecno by 1 4267*6a54128fSAndroid Build Coastguard Worker \sectionheading{#1}{subsubsec}{Yappendix}% 4268*6a54128fSAndroid Build Coastguard Worker {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% 4269*6a54128fSAndroid Build Coastguard Worker} 4270*6a54128fSAndroid Build Coastguard Worker 4271*6a54128fSAndroid Build Coastguard Worker\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz 4272*6a54128fSAndroid Build Coastguard Worker\def\unnumberedsubsubseczzz#1{% 4273*6a54128fSAndroid Build Coastguard Worker \global\advance\subsubsecno by 1 4274*6a54128fSAndroid Build Coastguard Worker \sectionheading{#1}{subsubsec}{Ynothing}% 4275*6a54128fSAndroid Build Coastguard Worker {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% 4276*6a54128fSAndroid Build Coastguard Worker} 4277*6a54128fSAndroid Build Coastguard Worker 4278*6a54128fSAndroid Build Coastguard Worker% These macros control what the section commands do, according 4279*6a54128fSAndroid Build Coastguard Worker% to what kind of chapter we are in (ordinary, appendix, or unnumbered). 4280*6a54128fSAndroid Build Coastguard Worker% Define them by default for a numbered chapter. 4281*6a54128fSAndroid Build Coastguard Worker\let\section = \numberedsec 4282*6a54128fSAndroid Build Coastguard Worker\let\subsection = \numberedsubsec 4283*6a54128fSAndroid Build Coastguard Worker\let\subsubsection = \numberedsubsubsec 4284*6a54128fSAndroid Build Coastguard Worker 4285*6a54128fSAndroid Build Coastguard Worker% Define @majorheading, @heading and @subheading 4286*6a54128fSAndroid Build Coastguard Worker 4287*6a54128fSAndroid Build Coastguard Worker% NOTE on use of \vbox for chapter headings, section headings, and such: 4288*6a54128fSAndroid Build Coastguard Worker% 1) We use \vbox rather than the earlier \line to permit 4289*6a54128fSAndroid Build Coastguard Worker% overlong headings to fold. 4290*6a54128fSAndroid Build Coastguard Worker% 2) \hyphenpenalty is set to 10000 because hyphenation in a 4291*6a54128fSAndroid Build Coastguard Worker% heading is obnoxious; this forbids it. 4292*6a54128fSAndroid Build Coastguard Worker% 3) Likewise, headings look best if no \parindent is used, and 4293*6a54128fSAndroid Build Coastguard Worker% if justification is not attempted. Hence \raggedright. 4294*6a54128fSAndroid Build Coastguard Worker 4295*6a54128fSAndroid Build Coastguard Worker 4296*6a54128fSAndroid Build Coastguard Worker\def\majorheading{% 4297*6a54128fSAndroid Build Coastguard Worker {\advance\chapheadingskip by 10pt \chapbreak }% 4298*6a54128fSAndroid Build Coastguard Worker \parsearg\chapheadingzzz 4299*6a54128fSAndroid Build Coastguard Worker} 4300*6a54128fSAndroid Build Coastguard Worker 4301*6a54128fSAndroid Build Coastguard Worker\def\chapheading{\chapbreak \parsearg\chapheadingzzz} 4302*6a54128fSAndroid Build Coastguard Worker\def\chapheadingzzz#1{% 4303*6a54128fSAndroid Build Coastguard Worker {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 4304*6a54128fSAndroid Build Coastguard Worker \parindent=0pt\raggedright 4305*6a54128fSAndroid Build Coastguard Worker \rm #1\hfill}}% 4306*6a54128fSAndroid Build Coastguard Worker \bigskip \par\penalty 200\relax 4307*6a54128fSAndroid Build Coastguard Worker \suppressfirstparagraphindent 4308*6a54128fSAndroid Build Coastguard Worker} 4309*6a54128fSAndroid Build Coastguard Worker 4310*6a54128fSAndroid Build Coastguard Worker% @heading, @subheading, @subsubheading. 4311*6a54128fSAndroid Build Coastguard Worker\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} 4312*6a54128fSAndroid Build Coastguard Worker \suppressfirstparagraphindent} 4313*6a54128fSAndroid Build Coastguard Worker\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} 4314*6a54128fSAndroid Build Coastguard Worker \suppressfirstparagraphindent} 4315*6a54128fSAndroid Build Coastguard Worker\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} 4316*6a54128fSAndroid Build Coastguard Worker \suppressfirstparagraphindent} 4317*6a54128fSAndroid Build Coastguard Worker 4318*6a54128fSAndroid Build Coastguard Worker% These macros generate a chapter, section, etc. heading only 4319*6a54128fSAndroid Build Coastguard Worker% (including whitespace, linebreaking, etc. around it), 4320*6a54128fSAndroid Build Coastguard Worker% given all the information in convenient, parsed form. 4321*6a54128fSAndroid Build Coastguard Worker 4322*6a54128fSAndroid Build Coastguard Worker%%% Args are the skip and penalty (usually negative) 4323*6a54128fSAndroid Build Coastguard Worker\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} 4324*6a54128fSAndroid Build Coastguard Worker 4325*6a54128fSAndroid Build Coastguard Worker%%% Define plain chapter starts, and page on/off switching for it 4326*6a54128fSAndroid Build Coastguard Worker% Parameter controlling skip before chapter headings (if needed) 4327*6a54128fSAndroid Build Coastguard Worker 4328*6a54128fSAndroid Build Coastguard Worker\newskip\chapheadingskip 4329*6a54128fSAndroid Build Coastguard Worker 4330*6a54128fSAndroid Build Coastguard Worker\def\chapbreak{\dobreak \chapheadingskip {-4000}} 4331*6a54128fSAndroid Build Coastguard Worker\def\chappager{\par\vfill\supereject} 4332*6a54128fSAndroid Build Coastguard Worker\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} 4333*6a54128fSAndroid Build Coastguard Worker 4334*6a54128fSAndroid Build Coastguard Worker\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} 4335*6a54128fSAndroid Build Coastguard Worker 4336*6a54128fSAndroid Build Coastguard Worker\def\CHAPPAGoff{% 4337*6a54128fSAndroid Build Coastguard Worker\global\let\contentsalignmacro = \chappager 4338*6a54128fSAndroid Build Coastguard Worker\global\let\pchapsepmacro=\chapbreak 4339*6a54128fSAndroid Build Coastguard Worker\global\let\pagealignmacro=\chappager} 4340*6a54128fSAndroid Build Coastguard Worker 4341*6a54128fSAndroid Build Coastguard Worker\def\CHAPPAGon{% 4342*6a54128fSAndroid Build Coastguard Worker\global\let\contentsalignmacro = \chappager 4343*6a54128fSAndroid Build Coastguard Worker\global\let\pchapsepmacro=\chappager 4344*6a54128fSAndroid Build Coastguard Worker\global\let\pagealignmacro=\chappager 4345*6a54128fSAndroid Build Coastguard Worker\global\def\HEADINGSon{\HEADINGSsingle}} 4346*6a54128fSAndroid Build Coastguard Worker 4347*6a54128fSAndroid Build Coastguard Worker\def\CHAPPAGodd{% 4348*6a54128fSAndroid Build Coastguard Worker\global\let\contentsalignmacro = \chapoddpage 4349*6a54128fSAndroid Build Coastguard Worker\global\let\pchapsepmacro=\chapoddpage 4350*6a54128fSAndroid Build Coastguard Worker\global\let\pagealignmacro=\chapoddpage 4351*6a54128fSAndroid Build Coastguard Worker\global\def\HEADINGSon{\HEADINGSdouble}} 4352*6a54128fSAndroid Build Coastguard Worker 4353*6a54128fSAndroid Build Coastguard Worker\CHAPPAGon 4354*6a54128fSAndroid Build Coastguard Worker 4355*6a54128fSAndroid Build Coastguard Worker% Chapter opening. 4356*6a54128fSAndroid Build Coastguard Worker% 4357*6a54128fSAndroid Build Coastguard Worker% #1 is the text, #2 is the section type (Ynumbered, Ynothing, 4358*6a54128fSAndroid Build Coastguard Worker% Yappendix, Yomitfromtoc), #3 the chapter number. 4359*6a54128fSAndroid Build Coastguard Worker% 4360*6a54128fSAndroid Build Coastguard Worker% To test against our argument. 4361*6a54128fSAndroid Build Coastguard Worker\def\Ynothingkeyword{Ynothing} 4362*6a54128fSAndroid Build Coastguard Worker\def\Yomitfromtockeyword{Yomitfromtoc} 4363*6a54128fSAndroid Build Coastguard Worker\def\Yappendixkeyword{Yappendix} 4364*6a54128fSAndroid Build Coastguard Worker% 4365*6a54128fSAndroid Build Coastguard Worker\def\chapmacro#1#2#3{% 4366*6a54128fSAndroid Build Coastguard Worker \pchapsepmacro 4367*6a54128fSAndroid Build Coastguard Worker {% 4368*6a54128fSAndroid Build Coastguard Worker \chapfonts \rm 4369*6a54128fSAndroid Build Coastguard Worker % 4370*6a54128fSAndroid Build Coastguard Worker % Have to define \thissection before calling \donoderef, because the 4371*6a54128fSAndroid Build Coastguard Worker % xref code eventually uses it. On the other hand, it has to be called 4372*6a54128fSAndroid Build Coastguard Worker % after \pchapsepmacro, or the headline will change too soon. 4373*6a54128fSAndroid Build Coastguard Worker \gdef\thissection{#1}% 4374*6a54128fSAndroid Build Coastguard Worker \gdef\thischaptername{#1}% 4375*6a54128fSAndroid Build Coastguard Worker % 4376*6a54128fSAndroid Build Coastguard Worker % Only insert the separating space if we have a chapter/appendix 4377*6a54128fSAndroid Build Coastguard Worker % number, and don't print the unnumbered ``number''. 4378*6a54128fSAndroid Build Coastguard Worker \def\temptype{#2}% 4379*6a54128fSAndroid Build Coastguard Worker \ifx\temptype\Ynothingkeyword 4380*6a54128fSAndroid Build Coastguard Worker \setbox0 = \hbox{}% 4381*6a54128fSAndroid Build Coastguard Worker \def\toctype{unnchap}% 4382*6a54128fSAndroid Build Coastguard Worker \gdef\thischapter{#1}% 4383*6a54128fSAndroid Build Coastguard Worker \else\ifx\temptype\Yomitfromtockeyword 4384*6a54128fSAndroid Build Coastguard Worker \setbox0 = \hbox{}% contents like unnumbered, but no toc entry 4385*6a54128fSAndroid Build Coastguard Worker \def\toctype{omit}% 4386*6a54128fSAndroid Build Coastguard Worker \gdef\thischapter{}% 4387*6a54128fSAndroid Build Coastguard Worker \else\ifx\temptype\Yappendixkeyword 4388*6a54128fSAndroid Build Coastguard Worker \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% 4389*6a54128fSAndroid Build Coastguard Worker \def\toctype{app}% 4390*6a54128fSAndroid Build Coastguard Worker % We don't substitute the actual chapter name into \thischapter 4391*6a54128fSAndroid Build Coastguard Worker % because we don't want its macros evaluated now. And we don't 4392*6a54128fSAndroid Build Coastguard Worker % use \thissection because that changes with each section. 4393*6a54128fSAndroid Build Coastguard Worker % 4394*6a54128fSAndroid Build Coastguard Worker \xdef\thischapter{\putwordAppendix{} \appendixletter: 4395*6a54128fSAndroid Build Coastguard Worker \noexpand\thischaptername}% 4396*6a54128fSAndroid Build Coastguard Worker \else 4397*6a54128fSAndroid Build Coastguard Worker \setbox0 = \hbox{#3\enspace}% 4398*6a54128fSAndroid Build Coastguard Worker \def\toctype{numchap}% 4399*6a54128fSAndroid Build Coastguard Worker \xdef\thischapter{\putwordChapter{} \the\chapno: 4400*6a54128fSAndroid Build Coastguard Worker \noexpand\thischaptername}% 4401*6a54128fSAndroid Build Coastguard Worker \fi\fi\fi 4402*6a54128fSAndroid Build Coastguard Worker % 4403*6a54128fSAndroid Build Coastguard Worker % Write the toc entry for this chapter. Must come before the 4404*6a54128fSAndroid Build Coastguard Worker % \donoderef, because we include the current node name in the toc 4405*6a54128fSAndroid Build Coastguard Worker % entry, and \donoderef resets it to empty. 4406*6a54128fSAndroid Build Coastguard Worker \writetocentry{\toctype}{#1}{#3}% 4407*6a54128fSAndroid Build Coastguard Worker % 4408*6a54128fSAndroid Build Coastguard Worker % For pdftex, we have to write out the node definition (aka, make 4409*6a54128fSAndroid Build Coastguard Worker % the pdfdest) after any page break, but before the actual text has 4410*6a54128fSAndroid Build Coastguard Worker % been typeset. If the destination for the pdf outline is after the 4411*6a54128fSAndroid Build Coastguard Worker % text, then jumping from the outline may wind up with the text not 4412*6a54128fSAndroid Build Coastguard Worker % being visible, for instance under high magnification. 4413*6a54128fSAndroid Build Coastguard Worker \donoderef{#2}% 4414*6a54128fSAndroid Build Coastguard Worker % 4415*6a54128fSAndroid Build Coastguard Worker % Typeset the actual heading. 4416*6a54128fSAndroid Build Coastguard Worker \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright 4417*6a54128fSAndroid Build Coastguard Worker \hangindent=\wd0 \centerparametersmaybe 4418*6a54128fSAndroid Build Coastguard Worker \unhbox0 #1\par}% 4419*6a54128fSAndroid Build Coastguard Worker }% 4420*6a54128fSAndroid Build Coastguard Worker \nobreak\bigskip % no page break after a chapter title 4421*6a54128fSAndroid Build Coastguard Worker \nobreak 4422*6a54128fSAndroid Build Coastguard Worker} 4423*6a54128fSAndroid Build Coastguard Worker 4424*6a54128fSAndroid Build Coastguard Worker% @centerchap -- centered and unnumbered. 4425*6a54128fSAndroid Build Coastguard Worker\let\centerparametersmaybe = \relax 4426*6a54128fSAndroid Build Coastguard Worker\def\centerparameters{% 4427*6a54128fSAndroid Build Coastguard Worker \advance\rightskip by 3\rightskip 4428*6a54128fSAndroid Build Coastguard Worker \leftskip = \rightskip 4429*6a54128fSAndroid Build Coastguard Worker \parfillskip = 0pt 4430*6a54128fSAndroid Build Coastguard Worker} 4431*6a54128fSAndroid Build Coastguard Worker 4432*6a54128fSAndroid Build Coastguard Worker 4433*6a54128fSAndroid Build Coastguard Worker% I don't think this chapter style is supported any more, so I'm not 4434*6a54128fSAndroid Build Coastguard Worker% updating it with the new noderef stuff. We'll see. --karl, 11aug03. 4435*6a54128fSAndroid Build Coastguard Worker% 4436*6a54128fSAndroid Build Coastguard Worker\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} 4437*6a54128fSAndroid Build Coastguard Worker% 4438*6a54128fSAndroid Build Coastguard Worker\def\unnchfopen #1{% 4439*6a54128fSAndroid Build Coastguard Worker\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 4440*6a54128fSAndroid Build Coastguard Worker \parindent=0pt\raggedright 4441*6a54128fSAndroid Build Coastguard Worker \rm #1\hfill}}\bigskip \par\nobreak 4442*6a54128fSAndroid Build Coastguard Worker} 4443*6a54128fSAndroid Build Coastguard Worker\def\chfopen #1#2{\chapoddpage {\chapfonts 4444*6a54128fSAndroid Build Coastguard Worker\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% 4445*6a54128fSAndroid Build Coastguard Worker\par\penalty 5000 % 4446*6a54128fSAndroid Build Coastguard Worker} 4447*6a54128fSAndroid Build Coastguard Worker\def\centerchfopen #1{% 4448*6a54128fSAndroid Build Coastguard Worker\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 4449*6a54128fSAndroid Build Coastguard Worker \parindent=0pt 4450*6a54128fSAndroid Build Coastguard Worker \hfill {\rm #1}\hfill}}\bigskip \par\nobreak 4451*6a54128fSAndroid Build Coastguard Worker} 4452*6a54128fSAndroid Build Coastguard Worker\def\CHAPFopen{% 4453*6a54128fSAndroid Build Coastguard Worker \global\let\chapmacro=\chfopen 4454*6a54128fSAndroid Build Coastguard Worker \global\let\centerchapmacro=\centerchfopen} 4455*6a54128fSAndroid Build Coastguard Worker 4456*6a54128fSAndroid Build Coastguard Worker 4457*6a54128fSAndroid Build Coastguard Worker% Section titles. These macros combine the section number parts and 4458*6a54128fSAndroid Build Coastguard Worker% call the generic \sectionheading to do the printing. 4459*6a54128fSAndroid Build Coastguard Worker% 4460*6a54128fSAndroid Build Coastguard Worker\newskip\secheadingskip 4461*6a54128fSAndroid Build Coastguard Worker\def\secheadingbreak{\dobreak \secheadingskip{-1000}} 4462*6a54128fSAndroid Build Coastguard Worker 4463*6a54128fSAndroid Build Coastguard Worker% Subsection titles. 4464*6a54128fSAndroid Build Coastguard Worker\newskip\subsecheadingskip 4465*6a54128fSAndroid Build Coastguard Worker\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} 4466*6a54128fSAndroid Build Coastguard Worker 4467*6a54128fSAndroid Build Coastguard Worker% Subsubsection titles. 4468*6a54128fSAndroid Build Coastguard Worker\def\subsubsecheadingskip{\subsecheadingskip} 4469*6a54128fSAndroid Build Coastguard Worker\def\subsubsecheadingbreak{\subsecheadingbreak} 4470*6a54128fSAndroid Build Coastguard Worker 4471*6a54128fSAndroid Build Coastguard Worker 4472*6a54128fSAndroid Build Coastguard Worker% Print any size, any type, section title. 4473*6a54128fSAndroid Build Coastguard Worker% 4474*6a54128fSAndroid Build Coastguard Worker% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is 4475*6a54128fSAndroid Build Coastguard Worker% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the 4476*6a54128fSAndroid Build Coastguard Worker% section number. 4477*6a54128fSAndroid Build Coastguard Worker% 4478*6a54128fSAndroid Build Coastguard Worker\def\sectionheading#1#2#3#4{% 4479*6a54128fSAndroid Build Coastguard Worker {% 4480*6a54128fSAndroid Build Coastguard Worker % Switch to the right set of fonts. 4481*6a54128fSAndroid Build Coastguard Worker \csname #2fonts\endcsname \rm 4482*6a54128fSAndroid Build Coastguard Worker % 4483*6a54128fSAndroid Build Coastguard Worker % Insert space above the heading. 4484*6a54128fSAndroid Build Coastguard Worker \csname #2headingbreak\endcsname 4485*6a54128fSAndroid Build Coastguard Worker % 4486*6a54128fSAndroid Build Coastguard Worker % Only insert the space after the number if we have a section number. 4487*6a54128fSAndroid Build Coastguard Worker \def\sectionlevel{#2}% 4488*6a54128fSAndroid Build Coastguard Worker \def\temptype{#3}% 4489*6a54128fSAndroid Build Coastguard Worker % 4490*6a54128fSAndroid Build Coastguard Worker \ifx\temptype\Ynothingkeyword 4491*6a54128fSAndroid Build Coastguard Worker \setbox0 = \hbox{}% 4492*6a54128fSAndroid Build Coastguard Worker \def\toctype{unn}% 4493*6a54128fSAndroid Build Coastguard Worker \gdef\thissection{#1}% 4494*6a54128fSAndroid Build Coastguard Worker \else\ifx\temptype\Yomitfromtockeyword 4495*6a54128fSAndroid Build Coastguard Worker % for @headings -- no section number, don't include in toc, 4496*6a54128fSAndroid Build Coastguard Worker % and don't redefine \thissection. 4497*6a54128fSAndroid Build Coastguard Worker \setbox0 = \hbox{}% 4498*6a54128fSAndroid Build Coastguard Worker \def\toctype{omit}% 4499*6a54128fSAndroid Build Coastguard Worker \let\sectionlevel=\empty 4500*6a54128fSAndroid Build Coastguard Worker \else\ifx\temptype\Yappendixkeyword 4501*6a54128fSAndroid Build Coastguard Worker \setbox0 = \hbox{#4\enspace}% 4502*6a54128fSAndroid Build Coastguard Worker \def\toctype{app}% 4503*6a54128fSAndroid Build Coastguard Worker \gdef\thissection{#1}% 4504*6a54128fSAndroid Build Coastguard Worker \else 4505*6a54128fSAndroid Build Coastguard Worker \setbox0 = \hbox{#4\enspace}% 4506*6a54128fSAndroid Build Coastguard Worker \def\toctype{num}% 4507*6a54128fSAndroid Build Coastguard Worker \gdef\thissection{#1}% 4508*6a54128fSAndroid Build Coastguard Worker \fi\fi\fi 4509*6a54128fSAndroid Build Coastguard Worker % 4510*6a54128fSAndroid Build Coastguard Worker % Write the toc entry (before \donoderef). See comments in \chapmacro. 4511*6a54128fSAndroid Build Coastguard Worker \writetocentry{\toctype\sectionlevel}{#1}{#4}% 4512*6a54128fSAndroid Build Coastguard Worker % 4513*6a54128fSAndroid Build Coastguard Worker % Write the node reference (= pdf destination for pdftex). 4514*6a54128fSAndroid Build Coastguard Worker % Again, see comments in \chapmacro. 4515*6a54128fSAndroid Build Coastguard Worker \donoderef{#3}% 4516*6a54128fSAndroid Build Coastguard Worker % 4517*6a54128fSAndroid Build Coastguard Worker % Interline glue will be inserted when the vbox is completed. 4518*6a54128fSAndroid Build Coastguard Worker % That glue will be a valid breakpoint for the page, since it'll be 4519*6a54128fSAndroid Build Coastguard Worker % preceded by a whatsit (usually from the \donoderef, or from the 4520*6a54128fSAndroid Build Coastguard Worker % \writetocentry if there was no node). We don't want to allow that 4521*6a54128fSAndroid Build Coastguard Worker % break, since then the whatsits could end up on page n while the 4522*6a54128fSAndroid Build Coastguard Worker % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. 4523*6a54128fSAndroid Build Coastguard Worker \nobreak 4524*6a54128fSAndroid Build Coastguard Worker % 4525*6a54128fSAndroid Build Coastguard Worker % Output the actual section heading. 4526*6a54128fSAndroid Build Coastguard Worker \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright 4527*6a54128fSAndroid Build Coastguard Worker \hangindent=\wd0 % zero if no section number 4528*6a54128fSAndroid Build Coastguard Worker \unhbox0 #1}% 4529*6a54128fSAndroid Build Coastguard Worker }% 4530*6a54128fSAndroid Build Coastguard Worker % Add extra space after the heading -- half of whatever came above it. 4531*6a54128fSAndroid Build Coastguard Worker % Don't allow stretch, though. 4532*6a54128fSAndroid Build Coastguard Worker \kern .5 \csname #2headingskip\endcsname 4533*6a54128fSAndroid Build Coastguard Worker % 4534*6a54128fSAndroid Build Coastguard Worker % Do not let the kern be a potential breakpoint, as it would be if it 4535*6a54128fSAndroid Build Coastguard Worker % was followed by glue. 4536*6a54128fSAndroid Build Coastguard Worker \nobreak 4537*6a54128fSAndroid Build Coastguard Worker % 4538*6a54128fSAndroid Build Coastguard Worker % We'll almost certainly start a paragraph next, so don't let that 4539*6a54128fSAndroid Build Coastguard Worker % glue accumulate. (Not a breakpoint because it's preceded by a 4540*6a54128fSAndroid Build Coastguard Worker % discardable item.) 4541*6a54128fSAndroid Build Coastguard Worker \vskip-\parskip 4542*6a54128fSAndroid Build Coastguard Worker % 4543*6a54128fSAndroid Build Coastguard Worker % This is purely so the last item on the list is a known \penalty > 4544*6a54128fSAndroid Build Coastguard Worker % 10000. This is so \startdefun can avoid allowing breakpoints after 4545*6a54128fSAndroid Build Coastguard Worker % section headings. Otherwise, it would insert a valid breakpoint between: 4546*6a54128fSAndroid Build Coastguard Worker % 4547*6a54128fSAndroid Build Coastguard Worker % @section sec-whatever 4548*6a54128fSAndroid Build Coastguard Worker % @deffn def-whatever 4549*6a54128fSAndroid Build Coastguard Worker \penalty 10001 4550*6a54128fSAndroid Build Coastguard Worker} 4551*6a54128fSAndroid Build Coastguard Worker 4552*6a54128fSAndroid Build Coastguard Worker 4553*6a54128fSAndroid Build Coastguard Worker\message{toc,} 4554*6a54128fSAndroid Build Coastguard Worker% Table of contents. 4555*6a54128fSAndroid Build Coastguard Worker\newwrite\tocfile 4556*6a54128fSAndroid Build Coastguard Worker 4557*6a54128fSAndroid Build Coastguard Worker% Write an entry to the toc file, opening it if necessary. 4558*6a54128fSAndroid Build Coastguard Worker% Called from @chapter, etc. 4559*6a54128fSAndroid Build Coastguard Worker% 4560*6a54128fSAndroid Build Coastguard Worker% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} 4561*6a54128fSAndroid Build Coastguard Worker% We append the current node name (if any) and page number as additional 4562*6a54128fSAndroid Build Coastguard Worker% arguments for the \{chap,sec,...}entry macros which will eventually 4563*6a54128fSAndroid Build Coastguard Worker% read this. The node name is used in the pdf outlines as the 4564*6a54128fSAndroid Build Coastguard Worker% destination to jump to. 4565*6a54128fSAndroid Build Coastguard Worker% 4566*6a54128fSAndroid Build Coastguard Worker% We open the .toc file for writing here instead of at @setfilename (or 4567*6a54128fSAndroid Build Coastguard Worker% any other fixed time) so that @contents can be anywhere in the document. 4568*6a54128fSAndroid Build Coastguard Worker% But if #1 is `omit', then we don't do anything. This is used for the 4569*6a54128fSAndroid Build Coastguard Worker% table of contents chapter openings themselves. 4570*6a54128fSAndroid Build Coastguard Worker% 4571*6a54128fSAndroid Build Coastguard Worker\newif\iftocfileopened 4572*6a54128fSAndroid Build Coastguard Worker\def\omitkeyword{omit}% 4573*6a54128fSAndroid Build Coastguard Worker% 4574*6a54128fSAndroid Build Coastguard Worker\def\writetocentry#1#2#3{% 4575*6a54128fSAndroid Build Coastguard Worker \edef\writetoctype{#1}% 4576*6a54128fSAndroid Build Coastguard Worker \ifx\writetoctype\omitkeyword \else 4577*6a54128fSAndroid Build Coastguard Worker \iftocfileopened\else 4578*6a54128fSAndroid Build Coastguard Worker \immediate\openout\tocfile = \jobname.toc 4579*6a54128fSAndroid Build Coastguard Worker \global\tocfileopenedtrue 4580*6a54128fSAndroid Build Coastguard Worker \fi 4581*6a54128fSAndroid Build Coastguard Worker % 4582*6a54128fSAndroid Build Coastguard Worker \iflinks 4583*6a54128fSAndroid Build Coastguard Worker {\atdummies 4584*6a54128fSAndroid Build Coastguard Worker \edef\temp{% 4585*6a54128fSAndroid Build Coastguard Worker \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% 4586*6a54128fSAndroid Build Coastguard Worker \temp 4587*6a54128fSAndroid Build Coastguard Worker }% 4588*6a54128fSAndroid Build Coastguard Worker \fi 4589*6a54128fSAndroid Build Coastguard Worker \fi 4590*6a54128fSAndroid Build Coastguard Worker % 4591*6a54128fSAndroid Build Coastguard Worker % Tell \shipout to create a pdf destination on each page, if we're 4592*6a54128fSAndroid Build Coastguard Worker % writing pdf. These are used in the table of contents. We can't 4593*6a54128fSAndroid Build Coastguard Worker % just write one on every page because the title pages are numbered 4594*6a54128fSAndroid Build Coastguard Worker % 1 and 2 (the page numbers aren't printed), and so are the first 4595*6a54128fSAndroid Build Coastguard Worker % two pages of the document. Thus, we'd have two destinations named 4596*6a54128fSAndroid Build Coastguard Worker % `1', and two named `2'. 4597*6a54128fSAndroid Build Coastguard Worker \ifpdf \global\pdfmakepagedesttrue \fi 4598*6a54128fSAndroid Build Coastguard Worker} 4599*6a54128fSAndroid Build Coastguard Worker 4600*6a54128fSAndroid Build Coastguard Worker 4601*6a54128fSAndroid Build Coastguard Worker% These characters do not print properly in the Computer Modern roman 4602*6a54128fSAndroid Build Coastguard Worker% fonts, so we must take special care. This is more or less redundant 4603*6a54128fSAndroid Build Coastguard Worker% with the Texinfo input format setup at the end of this file. 4604*6a54128fSAndroid Build Coastguard Worker% 4605*6a54128fSAndroid Build Coastguard Worker\def\activecatcodes{% 4606*6a54128fSAndroid Build Coastguard Worker \catcode`\"=\active 4607*6a54128fSAndroid Build Coastguard Worker \catcode`\$=\active 4608*6a54128fSAndroid Build Coastguard Worker \catcode`\<=\active 4609*6a54128fSAndroid Build Coastguard Worker \catcode`\>=\active 4610*6a54128fSAndroid Build Coastguard Worker \catcode`\\=\active 4611*6a54128fSAndroid Build Coastguard Worker \catcode`\^=\active 4612*6a54128fSAndroid Build Coastguard Worker \catcode`\_=\active 4613*6a54128fSAndroid Build Coastguard Worker \catcode`\|=\active 4614*6a54128fSAndroid Build Coastguard Worker \catcode`\~=\active 4615*6a54128fSAndroid Build Coastguard Worker} 4616*6a54128fSAndroid Build Coastguard Worker 4617*6a54128fSAndroid Build Coastguard Worker 4618*6a54128fSAndroid Build Coastguard Worker% Read the toc file, which is essentially Texinfo input. 4619*6a54128fSAndroid Build Coastguard Worker\def\readtocfile{% 4620*6a54128fSAndroid Build Coastguard Worker \setupdatafile 4621*6a54128fSAndroid Build Coastguard Worker \activecatcodes 4622*6a54128fSAndroid Build Coastguard Worker \input \jobname.toc 4623*6a54128fSAndroid Build Coastguard Worker} 4624*6a54128fSAndroid Build Coastguard Worker 4625*6a54128fSAndroid Build Coastguard Worker\newskip\contentsrightmargin \contentsrightmargin=1in 4626*6a54128fSAndroid Build Coastguard Worker\newcount\savepageno 4627*6a54128fSAndroid Build Coastguard Worker\newcount\lastnegativepageno \lastnegativepageno = -1 4628*6a54128fSAndroid Build Coastguard Worker 4629*6a54128fSAndroid Build Coastguard Worker% Prepare to read what we've written to \tocfile. 4630*6a54128fSAndroid Build Coastguard Worker% 4631*6a54128fSAndroid Build Coastguard Worker\def\startcontents#1{% 4632*6a54128fSAndroid Build Coastguard Worker % If @setchapternewpage on, and @headings double, the contents should 4633*6a54128fSAndroid Build Coastguard Worker % start on an odd page, unlike chapters. Thus, we maintain 4634*6a54128fSAndroid Build Coastguard Worker % \contentsalignmacro in parallel with \pagealignmacro. 4635*6a54128fSAndroid Build Coastguard Worker % From: Torbjorn Granlund <[email protected]> 4636*6a54128fSAndroid Build Coastguard Worker \contentsalignmacro 4637*6a54128fSAndroid Build Coastguard Worker \immediate\closeout\tocfile 4638*6a54128fSAndroid Build Coastguard Worker % 4639*6a54128fSAndroid Build Coastguard Worker % Don't need to put `Contents' or `Short Contents' in the headline. 4640*6a54128fSAndroid Build Coastguard Worker % It is abundantly clear what they are. 4641*6a54128fSAndroid Build Coastguard Worker \def\thischapter{}% 4642*6a54128fSAndroid Build Coastguard Worker \chapmacro{#1}{Yomitfromtoc}{}% 4643*6a54128fSAndroid Build Coastguard Worker % 4644*6a54128fSAndroid Build Coastguard Worker \savepageno = \pageno 4645*6a54128fSAndroid Build Coastguard Worker \begingroup % Set up to handle contents files properly. 4646*6a54128fSAndroid Build Coastguard Worker \raggedbottom % Worry more about breakpoints than the bottom. 4647*6a54128fSAndroid Build Coastguard Worker \advance\hsize by -\contentsrightmargin % Don't use the full line length. 4648*6a54128fSAndroid Build Coastguard Worker % 4649*6a54128fSAndroid Build Coastguard Worker % Roman numerals for page numbers. 4650*6a54128fSAndroid Build Coastguard Worker \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi 4651*6a54128fSAndroid Build Coastguard Worker} 4652*6a54128fSAndroid Build Coastguard Worker 4653*6a54128fSAndroid Build Coastguard Worker 4654*6a54128fSAndroid Build Coastguard Worker% Normal (long) toc. 4655*6a54128fSAndroid Build Coastguard Worker\def\contents{% 4656*6a54128fSAndroid Build Coastguard Worker \startcontents{\putwordTOC}% 4657*6a54128fSAndroid Build Coastguard Worker \openin 1 \jobname.toc 4658*6a54128fSAndroid Build Coastguard Worker \ifeof 1 \else 4659*6a54128fSAndroid Build Coastguard Worker \readtocfile 4660*6a54128fSAndroid Build Coastguard Worker \fi 4661*6a54128fSAndroid Build Coastguard Worker \vfill \eject 4662*6a54128fSAndroid Build Coastguard Worker \contentsalignmacro % in case @setchapternewpage odd is in effect 4663*6a54128fSAndroid Build Coastguard Worker \ifeof 1 \else 4664*6a54128fSAndroid Build Coastguard Worker \pdfmakeoutlines 4665*6a54128fSAndroid Build Coastguard Worker \fi 4666*6a54128fSAndroid Build Coastguard Worker \closein 1 4667*6a54128fSAndroid Build Coastguard Worker \endgroup 4668*6a54128fSAndroid Build Coastguard Worker \lastnegativepageno = \pageno 4669*6a54128fSAndroid Build Coastguard Worker \global\pageno = \savepageno 4670*6a54128fSAndroid Build Coastguard Worker} 4671*6a54128fSAndroid Build Coastguard Worker 4672*6a54128fSAndroid Build Coastguard Worker% And just the chapters. 4673*6a54128fSAndroid Build Coastguard Worker\def\summarycontents{% 4674*6a54128fSAndroid Build Coastguard Worker \startcontents{\putwordShortTOC}% 4675*6a54128fSAndroid Build Coastguard Worker % 4676*6a54128fSAndroid Build Coastguard Worker \let\numchapentry = \shortchapentry 4677*6a54128fSAndroid Build Coastguard Worker \let\appentry = \shortchapentry 4678*6a54128fSAndroid Build Coastguard Worker \let\unnchapentry = \shortunnchapentry 4679*6a54128fSAndroid Build Coastguard Worker % We want a true roman here for the page numbers. 4680*6a54128fSAndroid Build Coastguard Worker \secfonts 4681*6a54128fSAndroid Build Coastguard Worker \let\rm=\shortcontrm \let\bf=\shortcontbf 4682*6a54128fSAndroid Build Coastguard Worker \let\sl=\shortcontsl \let\tt=\shortconttt 4683*6a54128fSAndroid Build Coastguard Worker \rm 4684*6a54128fSAndroid Build Coastguard Worker \hyphenpenalty = 10000 4685*6a54128fSAndroid Build Coastguard Worker \advance\baselineskip by 1pt % Open it up a little. 4686*6a54128fSAndroid Build Coastguard Worker \def\numsecentry##1##2##3##4{} 4687*6a54128fSAndroid Build Coastguard Worker \let\appsecentry = \numsecentry 4688*6a54128fSAndroid Build Coastguard Worker \let\unnsecentry = \numsecentry 4689*6a54128fSAndroid Build Coastguard Worker \let\numsubsecentry = \numsecentry 4690*6a54128fSAndroid Build Coastguard Worker \let\appsubsecentry = \numsecentry 4691*6a54128fSAndroid Build Coastguard Worker \let\unnsubsecentry = \numsecentry 4692*6a54128fSAndroid Build Coastguard Worker \let\numsubsubsecentry = \numsecentry 4693*6a54128fSAndroid Build Coastguard Worker \let\appsubsubsecentry = \numsecentry 4694*6a54128fSAndroid Build Coastguard Worker \let\unnsubsubsecentry = \numsecentry 4695*6a54128fSAndroid Build Coastguard Worker \openin 1 \jobname.toc 4696*6a54128fSAndroid Build Coastguard Worker \ifeof 1 \else 4697*6a54128fSAndroid Build Coastguard Worker \readtocfile 4698*6a54128fSAndroid Build Coastguard Worker \fi 4699*6a54128fSAndroid Build Coastguard Worker \closein 1 4700*6a54128fSAndroid Build Coastguard Worker \vfill \eject 4701*6a54128fSAndroid Build Coastguard Worker \contentsalignmacro % in case @setchapternewpage odd is in effect 4702*6a54128fSAndroid Build Coastguard Worker \endgroup 4703*6a54128fSAndroid Build Coastguard Worker \lastnegativepageno = \pageno 4704*6a54128fSAndroid Build Coastguard Worker \global\pageno = \savepageno 4705*6a54128fSAndroid Build Coastguard Worker} 4706*6a54128fSAndroid Build Coastguard Worker\let\shortcontents = \summarycontents 4707*6a54128fSAndroid Build Coastguard Worker 4708*6a54128fSAndroid Build Coastguard Worker% Typeset the label for a chapter or appendix for the short contents. 4709*6a54128fSAndroid Build Coastguard Worker% The arg is, e.g., `A' for an appendix, or `3' for a chapter. 4710*6a54128fSAndroid Build Coastguard Worker% 4711*6a54128fSAndroid Build Coastguard Worker\def\shortchaplabel#1{% 4712*6a54128fSAndroid Build Coastguard Worker % This space should be enough, since a single number is .5em, and the 4713*6a54128fSAndroid Build Coastguard Worker % widest letter (M) is 1em, at least in the Computer Modern fonts. 4714*6a54128fSAndroid Build Coastguard Worker % But use \hss just in case. 4715*6a54128fSAndroid Build Coastguard Worker % (This space doesn't include the extra space that gets added after 4716*6a54128fSAndroid Build Coastguard Worker % the label; that gets put in by \shortchapentry above.) 4717*6a54128fSAndroid Build Coastguard Worker % 4718*6a54128fSAndroid Build Coastguard Worker % We'd like to right-justify chapter numbers, but that looks strange 4719*6a54128fSAndroid Build Coastguard Worker % with appendix letters. And right-justifying numbers and 4720*6a54128fSAndroid Build Coastguard Worker % left-justifying letters looks strange when there is less than 10 4721*6a54128fSAndroid Build Coastguard Worker % chapters. Have to read the whole toc once to know how many chapters 4722*6a54128fSAndroid Build Coastguard Worker % there are before deciding ... 4723*6a54128fSAndroid Build Coastguard Worker \hbox to 1em{#1\hss}% 4724*6a54128fSAndroid Build Coastguard Worker} 4725*6a54128fSAndroid Build Coastguard Worker 4726*6a54128fSAndroid Build Coastguard Worker% These macros generate individual entries in the table of contents. 4727*6a54128fSAndroid Build Coastguard Worker% The first argument is the chapter or section name. 4728*6a54128fSAndroid Build Coastguard Worker% The last argument is the page number. 4729*6a54128fSAndroid Build Coastguard Worker% The arguments in between are the chapter number, section number, ... 4730*6a54128fSAndroid Build Coastguard Worker 4731*6a54128fSAndroid Build Coastguard Worker% Chapters, in the main contents. 4732*6a54128fSAndroid Build Coastguard Worker\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} 4733*6a54128fSAndroid Build Coastguard Worker% 4734*6a54128fSAndroid Build Coastguard Worker% Chapters, in the short toc. 4735*6a54128fSAndroid Build Coastguard Worker% See comments in \dochapentry re vbox and related settings. 4736*6a54128fSAndroid Build Coastguard Worker\def\shortchapentry#1#2#3#4{% 4737*6a54128fSAndroid Build Coastguard Worker \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% 4738*6a54128fSAndroid Build Coastguard Worker} 4739*6a54128fSAndroid Build Coastguard Worker 4740*6a54128fSAndroid Build Coastguard Worker% Appendices, in the main contents. 4741*6a54128fSAndroid Build Coastguard Worker% Need the word Appendix, and a fixed-size box. 4742*6a54128fSAndroid Build Coastguard Worker% 4743*6a54128fSAndroid Build Coastguard Worker\def\appendixbox#1{% 4744*6a54128fSAndroid Build Coastguard Worker % We use M since it's probably the widest letter. 4745*6a54128fSAndroid Build Coastguard Worker \setbox0 = \hbox{\putwordAppendix{} M}% 4746*6a54128fSAndroid Build Coastguard Worker \hbox to \wd0{\putwordAppendix{} #1\hss}} 4747*6a54128fSAndroid Build Coastguard Worker% 4748*6a54128fSAndroid Build Coastguard Worker\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} 4749*6a54128fSAndroid Build Coastguard Worker 4750*6a54128fSAndroid Build Coastguard Worker% Unnumbered chapters. 4751*6a54128fSAndroid Build Coastguard Worker\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} 4752*6a54128fSAndroid Build Coastguard Worker\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} 4753*6a54128fSAndroid Build Coastguard Worker 4754*6a54128fSAndroid Build Coastguard Worker% Sections. 4755*6a54128fSAndroid Build Coastguard Worker\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} 4756*6a54128fSAndroid Build Coastguard Worker\let\appsecentry=\numsecentry 4757*6a54128fSAndroid Build Coastguard Worker\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} 4758*6a54128fSAndroid Build Coastguard Worker 4759*6a54128fSAndroid Build Coastguard Worker% Subsections. 4760*6a54128fSAndroid Build Coastguard Worker\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} 4761*6a54128fSAndroid Build Coastguard Worker\let\appsubsecentry=\numsubsecentry 4762*6a54128fSAndroid Build Coastguard Worker\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} 4763*6a54128fSAndroid Build Coastguard Worker 4764*6a54128fSAndroid Build Coastguard Worker% And subsubsections. 4765*6a54128fSAndroid Build Coastguard Worker\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} 4766*6a54128fSAndroid Build Coastguard Worker\let\appsubsubsecentry=\numsubsubsecentry 4767*6a54128fSAndroid Build Coastguard Worker\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} 4768*6a54128fSAndroid Build Coastguard Worker 4769*6a54128fSAndroid Build Coastguard Worker% This parameter controls the indentation of the various levels. 4770*6a54128fSAndroid Build Coastguard Worker% Same as \defaultparindent. 4771*6a54128fSAndroid Build Coastguard Worker\newdimen\tocindent \tocindent = 15pt 4772*6a54128fSAndroid Build Coastguard Worker 4773*6a54128fSAndroid Build Coastguard Worker% Now for the actual typesetting. In all these, #1 is the text and #2 is the 4774*6a54128fSAndroid Build Coastguard Worker% page number. 4775*6a54128fSAndroid Build Coastguard Worker% 4776*6a54128fSAndroid Build Coastguard Worker% If the toc has to be broken over pages, we want it to be at chapters 4777*6a54128fSAndroid Build Coastguard Worker% if at all possible; hence the \penalty. 4778*6a54128fSAndroid Build Coastguard Worker\def\dochapentry#1#2{% 4779*6a54128fSAndroid Build Coastguard Worker \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip 4780*6a54128fSAndroid Build Coastguard Worker \begingroup 4781*6a54128fSAndroid Build Coastguard Worker \chapentryfonts 4782*6a54128fSAndroid Build Coastguard Worker \tocentry{#1}{\dopageno\bgroup#2\egroup}% 4783*6a54128fSAndroid Build Coastguard Worker \endgroup 4784*6a54128fSAndroid Build Coastguard Worker \nobreak\vskip .25\baselineskip plus.1\baselineskip 4785*6a54128fSAndroid Build Coastguard Worker} 4786*6a54128fSAndroid Build Coastguard Worker 4787*6a54128fSAndroid Build Coastguard Worker\def\dosecentry#1#2{\begingroup 4788*6a54128fSAndroid Build Coastguard Worker \secentryfonts \leftskip=\tocindent 4789*6a54128fSAndroid Build Coastguard Worker \tocentry{#1}{\dopageno\bgroup#2\egroup}% 4790*6a54128fSAndroid Build Coastguard Worker\endgroup} 4791*6a54128fSAndroid Build Coastguard Worker 4792*6a54128fSAndroid Build Coastguard Worker\def\dosubsecentry#1#2{\begingroup 4793*6a54128fSAndroid Build Coastguard Worker \subsecentryfonts \leftskip=2\tocindent 4794*6a54128fSAndroid Build Coastguard Worker \tocentry{#1}{\dopageno\bgroup#2\egroup}% 4795*6a54128fSAndroid Build Coastguard Worker\endgroup} 4796*6a54128fSAndroid Build Coastguard Worker 4797*6a54128fSAndroid Build Coastguard Worker\def\dosubsubsecentry#1#2{\begingroup 4798*6a54128fSAndroid Build Coastguard Worker \subsubsecentryfonts \leftskip=3\tocindent 4799*6a54128fSAndroid Build Coastguard Worker \tocentry{#1}{\dopageno\bgroup#2\egroup}% 4800*6a54128fSAndroid Build Coastguard Worker\endgroup} 4801*6a54128fSAndroid Build Coastguard Worker 4802*6a54128fSAndroid Build Coastguard Worker% We use the same \entry macro as for the index entries. 4803*6a54128fSAndroid Build Coastguard Worker\let\tocentry = \entry 4804*6a54128fSAndroid Build Coastguard Worker 4805*6a54128fSAndroid Build Coastguard Worker% Space between chapter (or whatever) number and the title. 4806*6a54128fSAndroid Build Coastguard Worker\def\labelspace{\hskip1em \relax} 4807*6a54128fSAndroid Build Coastguard Worker 4808*6a54128fSAndroid Build Coastguard Worker\def\dopageno#1{{\rm #1}} 4809*6a54128fSAndroid Build Coastguard Worker\def\doshortpageno#1{{\rm #1}} 4810*6a54128fSAndroid Build Coastguard Worker 4811*6a54128fSAndroid Build Coastguard Worker\def\chapentryfonts{\secfonts \rm} 4812*6a54128fSAndroid Build Coastguard Worker\def\secentryfonts{\textfonts} 4813*6a54128fSAndroid Build Coastguard Worker\def\subsecentryfonts{\textfonts} 4814*6a54128fSAndroid Build Coastguard Worker\def\subsubsecentryfonts{\textfonts} 4815*6a54128fSAndroid Build Coastguard Worker 4816*6a54128fSAndroid Build Coastguard Worker 4817*6a54128fSAndroid Build Coastguard Worker\message{environments,} 4818*6a54128fSAndroid Build Coastguard Worker% @foo ... @end foo. 4819*6a54128fSAndroid Build Coastguard Worker 4820*6a54128fSAndroid Build Coastguard Worker% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. 4821*6a54128fSAndroid Build Coastguard Worker% 4822*6a54128fSAndroid Build Coastguard Worker% Since these characters are used in examples, it should be an even number of 4823*6a54128fSAndroid Build Coastguard Worker% \tt widths. Each \tt character is 1en, so two makes it 1em. 4824*6a54128fSAndroid Build Coastguard Worker% 4825*6a54128fSAndroid Build Coastguard Worker\def\point{$\star$} 4826*6a54128fSAndroid Build Coastguard Worker\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} 4827*6a54128fSAndroid Build Coastguard Worker\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} 4828*6a54128fSAndroid Build Coastguard Worker\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} 4829*6a54128fSAndroid Build Coastguard Worker\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} 4830*6a54128fSAndroid Build Coastguard Worker 4831*6a54128fSAndroid Build Coastguard Worker% The @error{} command. 4832*6a54128fSAndroid Build Coastguard Worker% Adapted from the TeXbook's \boxit. 4833*6a54128fSAndroid Build Coastguard Worker% 4834*6a54128fSAndroid Build Coastguard Worker\newbox\errorbox 4835*6a54128fSAndroid Build Coastguard Worker% 4836*6a54128fSAndroid Build Coastguard Worker{\tentt \global\dimen0 = 3em}% Width of the box. 4837*6a54128fSAndroid Build Coastguard Worker\dimen2 = .55pt % Thickness of rules 4838*6a54128fSAndroid Build Coastguard Worker% The text. (`r' is open on the right, `e' somewhat less so on the left.) 4839*6a54128fSAndroid Build Coastguard Worker\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} 4840*6a54128fSAndroid Build Coastguard Worker% 4841*6a54128fSAndroid Build Coastguard Worker\setbox\errorbox=\hbox to \dimen0{\hfil 4842*6a54128fSAndroid Build Coastguard Worker \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. 4843*6a54128fSAndroid Build Coastguard Worker \advance\hsize by -2\dimen2 % Rules. 4844*6a54128fSAndroid Build Coastguard Worker \vbox{% 4845*6a54128fSAndroid Build Coastguard Worker \hrule height\dimen2 4846*6a54128fSAndroid Build Coastguard Worker \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. 4847*6a54128fSAndroid Build Coastguard Worker \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. 4848*6a54128fSAndroid Build Coastguard Worker \kern3pt\vrule width\dimen2}% Space to right. 4849*6a54128fSAndroid Build Coastguard Worker \hrule height\dimen2} 4850*6a54128fSAndroid Build Coastguard Worker \hfil} 4851*6a54128fSAndroid Build Coastguard Worker% 4852*6a54128fSAndroid Build Coastguard Worker\def\error{\leavevmode\lower.7ex\copy\errorbox} 4853*6a54128fSAndroid Build Coastguard Worker 4854*6a54128fSAndroid Build Coastguard Worker% @tex ... @end tex escapes into raw Tex temporarily. 4855*6a54128fSAndroid Build Coastguard Worker% One exception: @ is still an escape character, so that @end tex works. 4856*6a54128fSAndroid Build Coastguard Worker% But \@ or @@ will get a plain tex @ character. 4857*6a54128fSAndroid Build Coastguard Worker 4858*6a54128fSAndroid Build Coastguard Worker\envdef\tex{% 4859*6a54128fSAndroid Build Coastguard Worker \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 4860*6a54128fSAndroid Build Coastguard Worker \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 4861*6a54128fSAndroid Build Coastguard Worker \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie 4862*6a54128fSAndroid Build Coastguard Worker \catcode `\%=14 4863*6a54128fSAndroid Build Coastguard Worker \catcode `\+=\other 4864*6a54128fSAndroid Build Coastguard Worker \catcode `\"=\other 4865*6a54128fSAndroid Build Coastguard Worker \catcode `\|=\other 4866*6a54128fSAndroid Build Coastguard Worker \catcode `\<=\other 4867*6a54128fSAndroid Build Coastguard Worker \catcode `\>=\other 4868*6a54128fSAndroid Build Coastguard Worker \escapechar=`\\ 4869*6a54128fSAndroid Build Coastguard Worker % 4870*6a54128fSAndroid Build Coastguard Worker \let\b=\ptexb 4871*6a54128fSAndroid Build Coastguard Worker \let\bullet=\ptexbullet 4872*6a54128fSAndroid Build Coastguard Worker \let\c=\ptexc 4873*6a54128fSAndroid Build Coastguard Worker \let\,=\ptexcomma 4874*6a54128fSAndroid Build Coastguard Worker \let\.=\ptexdot 4875*6a54128fSAndroid Build Coastguard Worker \let\dots=\ptexdots 4876*6a54128fSAndroid Build Coastguard Worker \let\equiv=\ptexequiv 4877*6a54128fSAndroid Build Coastguard Worker \let\!=\ptexexclam 4878*6a54128fSAndroid Build Coastguard Worker \let\i=\ptexi 4879*6a54128fSAndroid Build Coastguard Worker \let\indent=\ptexindent 4880*6a54128fSAndroid Build Coastguard Worker \let\noindent=\ptexnoindent 4881*6a54128fSAndroid Build Coastguard Worker \let\{=\ptexlbrace 4882*6a54128fSAndroid Build Coastguard Worker \let\+=\tabalign 4883*6a54128fSAndroid Build Coastguard Worker \let\}=\ptexrbrace 4884*6a54128fSAndroid Build Coastguard Worker \let\/=\ptexslash 4885*6a54128fSAndroid Build Coastguard Worker \let\*=\ptexstar 4886*6a54128fSAndroid Build Coastguard Worker \let\t=\ptext 4887*6a54128fSAndroid Build Coastguard Worker \let\frenchspacing=\plainfrenchspacing 4888*6a54128fSAndroid Build Coastguard Worker % 4889*6a54128fSAndroid Build Coastguard Worker \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% 4890*6a54128fSAndroid Build Coastguard Worker \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% 4891*6a54128fSAndroid Build Coastguard Worker \def\@{@}% 4892*6a54128fSAndroid Build Coastguard Worker} 4893*6a54128fSAndroid Build Coastguard Worker% There is no need to define \Etex. 4894*6a54128fSAndroid Build Coastguard Worker 4895*6a54128fSAndroid Build Coastguard Worker% Define @lisp ... @end lisp. 4896*6a54128fSAndroid Build Coastguard Worker% @lisp environment forms a group so it can rebind things, 4897*6a54128fSAndroid Build Coastguard Worker% including the definition of @end lisp (which normally is erroneous). 4898*6a54128fSAndroid Build Coastguard Worker 4899*6a54128fSAndroid Build Coastguard Worker% Amount to narrow the margins by for @lisp. 4900*6a54128fSAndroid Build Coastguard Worker\newskip\lispnarrowing \lispnarrowing=0.4in 4901*6a54128fSAndroid Build Coastguard Worker 4902*6a54128fSAndroid Build Coastguard Worker% This is the definition that ^^M gets inside @lisp, @example, and other 4903*6a54128fSAndroid Build Coastguard Worker% such environments. \null is better than a space, since it doesn't 4904*6a54128fSAndroid Build Coastguard Worker% have any width. 4905*6a54128fSAndroid Build Coastguard Worker\def\lisppar{\null\endgraf} 4906*6a54128fSAndroid Build Coastguard Worker 4907*6a54128fSAndroid Build Coastguard Worker% This space is always present above and below environments. 4908*6a54128fSAndroid Build Coastguard Worker\newskip\envskipamount \envskipamount = 0pt 4909*6a54128fSAndroid Build Coastguard Worker 4910*6a54128fSAndroid Build Coastguard Worker% Make spacing and below environment symmetrical. We use \parskip here 4911*6a54128fSAndroid Build Coastguard Worker% to help in doing that, since in @example-like environments \parskip 4912*6a54128fSAndroid Build Coastguard Worker% is reset to zero; thus the \afterenvbreak inserts no space -- but the 4913*6a54128fSAndroid Build Coastguard Worker% start of the next paragraph will insert \parskip. 4914*6a54128fSAndroid Build Coastguard Worker% 4915*6a54128fSAndroid Build Coastguard Worker\def\aboveenvbreak{{% 4916*6a54128fSAndroid Build Coastguard Worker % =10000 instead of <10000 because of a special case in \itemzzz and 4917*6a54128fSAndroid Build Coastguard Worker % \sectionheading, q.v. 4918*6a54128fSAndroid Build Coastguard Worker \ifnum \lastpenalty=10000 \else 4919*6a54128fSAndroid Build Coastguard Worker \advance\envskipamount by \parskip 4920*6a54128fSAndroid Build Coastguard Worker \endgraf 4921*6a54128fSAndroid Build Coastguard Worker \ifdim\lastskip<\envskipamount 4922*6a54128fSAndroid Build Coastguard Worker \removelastskip 4923*6a54128fSAndroid Build Coastguard Worker % it's not a good place to break if the last penalty was \nobreak 4924*6a54128fSAndroid Build Coastguard Worker % or better ... 4925*6a54128fSAndroid Build Coastguard Worker \ifnum\lastpenalty<10000 \penalty-50 \fi 4926*6a54128fSAndroid Build Coastguard Worker \vskip\envskipamount 4927*6a54128fSAndroid Build Coastguard Worker \fi 4928*6a54128fSAndroid Build Coastguard Worker \fi 4929*6a54128fSAndroid Build Coastguard Worker}} 4930*6a54128fSAndroid Build Coastguard Worker 4931*6a54128fSAndroid Build Coastguard Worker\let\afterenvbreak = \aboveenvbreak 4932*6a54128fSAndroid Build Coastguard Worker 4933*6a54128fSAndroid Build Coastguard Worker% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will 4934*6a54128fSAndroid Build Coastguard Worker% also clear it, so that its embedded environments do the narrowing again. 4935*6a54128fSAndroid Build Coastguard Worker\let\nonarrowing=\relax 4936*6a54128fSAndroid Build Coastguard Worker 4937*6a54128fSAndroid Build Coastguard Worker% @cartouche ... @end cartouche: draw rectangle w/rounded corners around 4938*6a54128fSAndroid Build Coastguard Worker% environment contents. 4939*6a54128fSAndroid Build Coastguard Worker\font\circle=lcircle10 4940*6a54128fSAndroid Build Coastguard Worker\newdimen\circthick 4941*6a54128fSAndroid Build Coastguard Worker\newdimen\cartouter\newdimen\cartinner 4942*6a54128fSAndroid Build Coastguard Worker\newskip\normbskip\newskip\normpskip\newskip\normlskip 4943*6a54128fSAndroid Build Coastguard Worker\circthick=\fontdimen8\circle 4944*6a54128fSAndroid Build Coastguard Worker% 4945*6a54128fSAndroid Build Coastguard Worker\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth 4946*6a54128fSAndroid Build Coastguard Worker\def\ctr{{\hskip 6pt\circle\char'010}} 4947*6a54128fSAndroid Build Coastguard Worker\def\cbl{{\circle\char'012\hskip -6pt}} 4948*6a54128fSAndroid Build Coastguard Worker\def\cbr{{\hskip 6pt\circle\char'011}} 4949*6a54128fSAndroid Build Coastguard Worker\def\carttop{\hbox to \cartouter{\hskip\lskip 4950*6a54128fSAndroid Build Coastguard Worker \ctl\leaders\hrule height\circthick\hfil\ctr 4951*6a54128fSAndroid Build Coastguard Worker \hskip\rskip}} 4952*6a54128fSAndroid Build Coastguard Worker\def\cartbot{\hbox to \cartouter{\hskip\lskip 4953*6a54128fSAndroid Build Coastguard Worker \cbl\leaders\hrule height\circthick\hfil\cbr 4954*6a54128fSAndroid Build Coastguard Worker \hskip\rskip}} 4955*6a54128fSAndroid Build Coastguard Worker% 4956*6a54128fSAndroid Build Coastguard Worker\newskip\lskip\newskip\rskip 4957*6a54128fSAndroid Build Coastguard Worker 4958*6a54128fSAndroid Build Coastguard Worker\envdef\cartouche{% 4959*6a54128fSAndroid Build Coastguard Worker \ifhmode\par\fi % can't be in the midst of a paragraph. 4960*6a54128fSAndroid Build Coastguard Worker \startsavinginserts 4961*6a54128fSAndroid Build Coastguard Worker \lskip=\leftskip \rskip=\rightskip 4962*6a54128fSAndroid Build Coastguard Worker \leftskip=0pt\rightskip=0pt % we want these *outside*. 4963*6a54128fSAndroid Build Coastguard Worker \cartinner=\hsize \advance\cartinner by-\lskip 4964*6a54128fSAndroid Build Coastguard Worker \advance\cartinner by-\rskip 4965*6a54128fSAndroid Build Coastguard Worker \cartouter=\hsize 4966*6a54128fSAndroid Build Coastguard Worker \advance\cartouter by 18.4pt % allow for 3pt kerns on either 4967*6a54128fSAndroid Build Coastguard Worker % side, and for 6pt waste from 4968*6a54128fSAndroid Build Coastguard Worker % each corner char, and rule thickness 4969*6a54128fSAndroid Build Coastguard Worker \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip 4970*6a54128fSAndroid Build Coastguard Worker % Flag to tell @lisp, etc., not to narrow margin. 4971*6a54128fSAndroid Build Coastguard Worker \let\nonarrowing = t% 4972*6a54128fSAndroid Build Coastguard Worker \vbox\bgroup 4973*6a54128fSAndroid Build Coastguard Worker \baselineskip=0pt\parskip=0pt\lineskip=0pt 4974*6a54128fSAndroid Build Coastguard Worker \carttop 4975*6a54128fSAndroid Build Coastguard Worker \hbox\bgroup 4976*6a54128fSAndroid Build Coastguard Worker \hskip\lskip 4977*6a54128fSAndroid Build Coastguard Worker \vrule\kern3pt 4978*6a54128fSAndroid Build Coastguard Worker \vbox\bgroup 4979*6a54128fSAndroid Build Coastguard Worker \kern3pt 4980*6a54128fSAndroid Build Coastguard Worker \hsize=\cartinner 4981*6a54128fSAndroid Build Coastguard Worker \baselineskip=\normbskip 4982*6a54128fSAndroid Build Coastguard Worker \lineskip=\normlskip 4983*6a54128fSAndroid Build Coastguard Worker \parskip=\normpskip 4984*6a54128fSAndroid Build Coastguard Worker \vskip -\parskip 4985*6a54128fSAndroid Build Coastguard Worker \comment % For explanation, see the end of \def\group. 4986*6a54128fSAndroid Build Coastguard Worker} 4987*6a54128fSAndroid Build Coastguard Worker\def\Ecartouche{% 4988*6a54128fSAndroid Build Coastguard Worker \ifhmode\par\fi 4989*6a54128fSAndroid Build Coastguard Worker \kern3pt 4990*6a54128fSAndroid Build Coastguard Worker \egroup 4991*6a54128fSAndroid Build Coastguard Worker \kern3pt\vrule 4992*6a54128fSAndroid Build Coastguard Worker \hskip\rskip 4993*6a54128fSAndroid Build Coastguard Worker \egroup 4994*6a54128fSAndroid Build Coastguard Worker \cartbot 4995*6a54128fSAndroid Build Coastguard Worker \egroup 4996*6a54128fSAndroid Build Coastguard Worker \checkinserts 4997*6a54128fSAndroid Build Coastguard Worker} 4998*6a54128fSAndroid Build Coastguard Worker 4999*6a54128fSAndroid Build Coastguard Worker 5000*6a54128fSAndroid Build Coastguard Worker% This macro is called at the beginning of all the @example variants, 5001*6a54128fSAndroid Build Coastguard Worker% inside a group. 5002*6a54128fSAndroid Build Coastguard Worker\def\nonfillstart{% 5003*6a54128fSAndroid Build Coastguard Worker \aboveenvbreak 5004*6a54128fSAndroid Build Coastguard Worker \hfuzz = 12pt % Don't be fussy 5005*6a54128fSAndroid Build Coastguard Worker \sepspaces % Make spaces be word-separators rather than space tokens. 5006*6a54128fSAndroid Build Coastguard Worker \let\par = \lisppar % don't ignore blank lines 5007*6a54128fSAndroid Build Coastguard Worker \obeylines % each line of input is a line of output 5008*6a54128fSAndroid Build Coastguard Worker \parskip = 0pt 5009*6a54128fSAndroid Build Coastguard Worker \parindent = 0pt 5010*6a54128fSAndroid Build Coastguard Worker \emergencystretch = 0pt % don't try to avoid overfull boxes 5011*6a54128fSAndroid Build Coastguard Worker \ifx\nonarrowing\relax 5012*6a54128fSAndroid Build Coastguard Worker \advance \leftskip by \lispnarrowing 5013*6a54128fSAndroid Build Coastguard Worker \exdentamount=\lispnarrowing 5014*6a54128fSAndroid Build Coastguard Worker \else 5015*6a54128fSAndroid Build Coastguard Worker \let\nonarrowing = \relax 5016*6a54128fSAndroid Build Coastguard Worker \fi 5017*6a54128fSAndroid Build Coastguard Worker \let\exdent=\nofillexdent 5018*6a54128fSAndroid Build Coastguard Worker} 5019*6a54128fSAndroid Build Coastguard Worker 5020*6a54128fSAndroid Build Coastguard Worker% If you want all examples etc. small: @set dispenvsize small. 5021*6a54128fSAndroid Build Coastguard Worker% If you want even small examples the full size: @set dispenvsize nosmall. 5022*6a54128fSAndroid Build Coastguard Worker% This affects the following displayed environments: 5023*6a54128fSAndroid Build Coastguard Worker% @example, @display, @format, @lisp 5024*6a54128fSAndroid Build Coastguard Worker% 5025*6a54128fSAndroid Build Coastguard Worker\def\smallword{small} 5026*6a54128fSAndroid Build Coastguard Worker\def\nosmallword{nosmall} 5027*6a54128fSAndroid Build Coastguard Worker\let\SETdispenvsize\relax 5028*6a54128fSAndroid Build Coastguard Worker\def\setnormaldispenv{% 5029*6a54128fSAndroid Build Coastguard Worker \ifx\SETdispenvsize\smallword 5030*6a54128fSAndroid Build Coastguard Worker \smallexamplefonts \rm 5031*6a54128fSAndroid Build Coastguard Worker \fi 5032*6a54128fSAndroid Build Coastguard Worker} 5033*6a54128fSAndroid Build Coastguard Worker\def\setsmalldispenv{% 5034*6a54128fSAndroid Build Coastguard Worker \ifx\SETdispenvsize\nosmallword 5035*6a54128fSAndroid Build Coastguard Worker \else 5036*6a54128fSAndroid Build Coastguard Worker \smallexamplefonts \rm 5037*6a54128fSAndroid Build Coastguard Worker \fi 5038*6a54128fSAndroid Build Coastguard Worker} 5039*6a54128fSAndroid Build Coastguard Worker 5040*6a54128fSAndroid Build Coastguard Worker% We often define two environments, @foo and @smallfoo. 5041*6a54128fSAndroid Build Coastguard Worker% Let's do it by one command: 5042*6a54128fSAndroid Build Coastguard Worker\def\makedispenv #1#2{ 5043*6a54128fSAndroid Build Coastguard Worker \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} 5044*6a54128fSAndroid Build Coastguard Worker \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} 5045*6a54128fSAndroid Build Coastguard Worker \expandafter\let\csname E#1\endcsname \afterenvbreak 5046*6a54128fSAndroid Build Coastguard Worker \expandafter\let\csname Esmall#1\endcsname \afterenvbreak 5047*6a54128fSAndroid Build Coastguard Worker} 5048*6a54128fSAndroid Build Coastguard Worker 5049*6a54128fSAndroid Build Coastguard Worker% Define two synonyms: 5050*6a54128fSAndroid Build Coastguard Worker\def\maketwodispenvs #1#2#3{ 5051*6a54128fSAndroid Build Coastguard Worker \makedispenv{#1}{#3} 5052*6a54128fSAndroid Build Coastguard Worker \makedispenv{#2}{#3} 5053*6a54128fSAndroid Build Coastguard Worker} 5054*6a54128fSAndroid Build Coastguard Worker 5055*6a54128fSAndroid Build Coastguard Worker% @lisp: indented, narrowed, typewriter font; @example: same as @lisp. 5056*6a54128fSAndroid Build Coastguard Worker% 5057*6a54128fSAndroid Build Coastguard Worker% @smallexample and @smalllisp: use smaller fonts. 5058*6a54128fSAndroid Build Coastguard Worker% Originally contributed by Pavel@xerox. 5059*6a54128fSAndroid Build Coastguard Worker% 5060*6a54128fSAndroid Build Coastguard Worker\maketwodispenvs {lisp}{example}{% 5061*6a54128fSAndroid Build Coastguard Worker \nonfillstart 5062*6a54128fSAndroid Build Coastguard Worker \tt 5063*6a54128fSAndroid Build Coastguard Worker \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. 5064*6a54128fSAndroid Build Coastguard Worker \gobble % eat return 5065*6a54128fSAndroid Build Coastguard Worker} 5066*6a54128fSAndroid Build Coastguard Worker 5067*6a54128fSAndroid Build Coastguard Worker% @display/@smalldisplay: same as @lisp except keep current font. 5068*6a54128fSAndroid Build Coastguard Worker% 5069*6a54128fSAndroid Build Coastguard Worker\makedispenv {display}{% 5070*6a54128fSAndroid Build Coastguard Worker \nonfillstart 5071*6a54128fSAndroid Build Coastguard Worker \gobble 5072*6a54128fSAndroid Build Coastguard Worker} 5073*6a54128fSAndroid Build Coastguard Worker 5074*6a54128fSAndroid Build Coastguard Worker% @format/@smallformat: same as @display except don't narrow margins. 5075*6a54128fSAndroid Build Coastguard Worker% 5076*6a54128fSAndroid Build Coastguard Worker\makedispenv{format}{% 5077*6a54128fSAndroid Build Coastguard Worker \let\nonarrowing = t% 5078*6a54128fSAndroid Build Coastguard Worker \nonfillstart 5079*6a54128fSAndroid Build Coastguard Worker \gobble 5080*6a54128fSAndroid Build Coastguard Worker} 5081*6a54128fSAndroid Build Coastguard Worker 5082*6a54128fSAndroid Build Coastguard Worker% @flushleft: same as @format, but doesn't obey \SETdispenvsize. 5083*6a54128fSAndroid Build Coastguard Worker\envdef\flushleft{% 5084*6a54128fSAndroid Build Coastguard Worker \let\nonarrowing = t% 5085*6a54128fSAndroid Build Coastguard Worker \nonfillstart 5086*6a54128fSAndroid Build Coastguard Worker \gobble 5087*6a54128fSAndroid Build Coastguard Worker} 5088*6a54128fSAndroid Build Coastguard Worker\let\Eflushleft = \afterenvbreak 5089*6a54128fSAndroid Build Coastguard Worker 5090*6a54128fSAndroid Build Coastguard Worker% @flushright. 5091*6a54128fSAndroid Build Coastguard Worker% 5092*6a54128fSAndroid Build Coastguard Worker\envdef\flushright{% 5093*6a54128fSAndroid Build Coastguard Worker \let\nonarrowing = t% 5094*6a54128fSAndroid Build Coastguard Worker \nonfillstart 5095*6a54128fSAndroid Build Coastguard Worker \advance\leftskip by 0pt plus 1fill 5096*6a54128fSAndroid Build Coastguard Worker \gobble 5097*6a54128fSAndroid Build Coastguard Worker} 5098*6a54128fSAndroid Build Coastguard Worker\let\Eflushright = \afterenvbreak 5099*6a54128fSAndroid Build Coastguard Worker 5100*6a54128fSAndroid Build Coastguard Worker 5101*6a54128fSAndroid Build Coastguard Worker% @quotation does normal linebreaking (hence we can't use \nonfillstart) 5102*6a54128fSAndroid Build Coastguard Worker% and narrows the margins. We keep \parskip nonzero in general, since 5103*6a54128fSAndroid Build Coastguard Worker% we're doing normal filling. So, when using \aboveenvbreak and 5104*6a54128fSAndroid Build Coastguard Worker% \afterenvbreak, temporarily make \parskip 0. 5105*6a54128fSAndroid Build Coastguard Worker% 5106*6a54128fSAndroid Build Coastguard Worker\envdef\quotation{% 5107*6a54128fSAndroid Build Coastguard Worker {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip 5108*6a54128fSAndroid Build Coastguard Worker \parindent=0pt 5109*6a54128fSAndroid Build Coastguard Worker % 5110*6a54128fSAndroid Build Coastguard Worker % @cartouche defines \nonarrowing to inhibit narrowing at next level down. 5111*6a54128fSAndroid Build Coastguard Worker \ifx\nonarrowing\relax 5112*6a54128fSAndroid Build Coastguard Worker \advance\leftskip by \lispnarrowing 5113*6a54128fSAndroid Build Coastguard Worker \advance\rightskip by \lispnarrowing 5114*6a54128fSAndroid Build Coastguard Worker \exdentamount = \lispnarrowing 5115*6a54128fSAndroid Build Coastguard Worker \else 5116*6a54128fSAndroid Build Coastguard Worker \let\nonarrowing = \relax 5117*6a54128fSAndroid Build Coastguard Worker \fi 5118*6a54128fSAndroid Build Coastguard Worker \parsearg\quotationlabel 5119*6a54128fSAndroid Build Coastguard Worker} 5120*6a54128fSAndroid Build Coastguard Worker 5121*6a54128fSAndroid Build Coastguard Worker% We have retained a nonzero parskip for the environment, since we're 5122*6a54128fSAndroid Build Coastguard Worker% doing normal filling. 5123*6a54128fSAndroid Build Coastguard Worker% 5124*6a54128fSAndroid Build Coastguard Worker\def\Equotation{% 5125*6a54128fSAndroid Build Coastguard Worker \par 5126*6a54128fSAndroid Build Coastguard Worker \ifx\quotationauthor\undefined\else 5127*6a54128fSAndroid Build Coastguard Worker % indent a bit. 5128*6a54128fSAndroid Build Coastguard Worker \leftline{\kern 2\leftskip \sl ---\quotationauthor}% 5129*6a54128fSAndroid Build Coastguard Worker \fi 5130*6a54128fSAndroid Build Coastguard Worker {\parskip=0pt \afterenvbreak}% 5131*6a54128fSAndroid Build Coastguard Worker} 5132*6a54128fSAndroid Build Coastguard Worker 5133*6a54128fSAndroid Build Coastguard Worker% If we're given an argument, typeset it in bold with a colon after. 5134*6a54128fSAndroid Build Coastguard Worker\def\quotationlabel#1{% 5135*6a54128fSAndroid Build Coastguard Worker \def\temp{#1}% 5136*6a54128fSAndroid Build Coastguard Worker \ifx\temp\empty \else 5137*6a54128fSAndroid Build Coastguard Worker {\bf #1: }% 5138*6a54128fSAndroid Build Coastguard Worker \fi 5139*6a54128fSAndroid Build Coastguard Worker} 5140*6a54128fSAndroid Build Coastguard Worker 5141*6a54128fSAndroid Build Coastguard Worker 5142*6a54128fSAndroid Build Coastguard Worker% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} 5143*6a54128fSAndroid Build Coastguard Worker% If we want to allow any <char> as delimiter, 5144*6a54128fSAndroid Build Coastguard Worker% we need the curly braces so that makeinfo sees the @verb command, eg: 5145*6a54128fSAndroid Build Coastguard Worker% `@verbx...x' would look like the '@verbx' command. [email protected] 5146*6a54128fSAndroid Build Coastguard Worker% 5147*6a54128fSAndroid Build Coastguard Worker% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. 5148*6a54128fSAndroid Build Coastguard Worker% 5149*6a54128fSAndroid Build Coastguard Worker% [Knuth] p.344; only we need to do the other characters Texinfo sets 5150*6a54128fSAndroid Build Coastguard Worker% active too. Otherwise, they get lost as the first character on a 5151*6a54128fSAndroid Build Coastguard Worker% verbatim line. 5152*6a54128fSAndroid Build Coastguard Worker\def\dospecials{% 5153*6a54128fSAndroid Build Coastguard Worker \do\ \do\\\do\{\do\}\do\$\do\&% 5154*6a54128fSAndroid Build Coastguard Worker \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% 5155*6a54128fSAndroid Build Coastguard Worker \do\<\do\>\do\|\do\@\do+\do\"% 5156*6a54128fSAndroid Build Coastguard Worker} 5157*6a54128fSAndroid Build Coastguard Worker% 5158*6a54128fSAndroid Build Coastguard Worker% [Knuth] p. 380 5159*6a54128fSAndroid Build Coastguard Worker\def\uncatcodespecials{% 5160*6a54128fSAndroid Build Coastguard Worker \def\do##1{\catcode`##1=\other}\dospecials} 5161*6a54128fSAndroid Build Coastguard Worker% 5162*6a54128fSAndroid Build Coastguard Worker% [Knuth] pp. 380,381,391 5163*6a54128fSAndroid Build Coastguard Worker% Disable Spanish ligatures ?` and !` of \tt font 5164*6a54128fSAndroid Build Coastguard Worker\begingroup 5165*6a54128fSAndroid Build Coastguard Worker \catcode`\`=\active\gdef`{\relax\lq} 5166*6a54128fSAndroid Build Coastguard Worker\endgroup 5167*6a54128fSAndroid Build Coastguard Worker% 5168*6a54128fSAndroid Build Coastguard Worker% Setup for the @verb command. 5169*6a54128fSAndroid Build Coastguard Worker% 5170*6a54128fSAndroid Build Coastguard Worker% Eight spaces for a tab 5171*6a54128fSAndroid Build Coastguard Worker\begingroup 5172*6a54128fSAndroid Build Coastguard Worker \catcode`\^^I=\active 5173*6a54128fSAndroid Build Coastguard Worker \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} 5174*6a54128fSAndroid Build Coastguard Worker\endgroup 5175*6a54128fSAndroid Build Coastguard Worker% 5176*6a54128fSAndroid Build Coastguard Worker\def\setupverb{% 5177*6a54128fSAndroid Build Coastguard Worker \tt % easiest (and conventionally used) font for verbatim 5178*6a54128fSAndroid Build Coastguard Worker \def\par{\leavevmode\endgraf}% 5179*6a54128fSAndroid Build Coastguard Worker \catcode`\`=\active 5180*6a54128fSAndroid Build Coastguard Worker \tabeightspaces 5181*6a54128fSAndroid Build Coastguard Worker % Respect line breaks, 5182*6a54128fSAndroid Build Coastguard Worker % print special symbols as themselves, and 5183*6a54128fSAndroid Build Coastguard Worker % make each space count 5184*6a54128fSAndroid Build Coastguard Worker % must do in this order: 5185*6a54128fSAndroid Build Coastguard Worker \obeylines \uncatcodespecials \sepspaces 5186*6a54128fSAndroid Build Coastguard Worker} 5187*6a54128fSAndroid Build Coastguard Worker 5188*6a54128fSAndroid Build Coastguard Worker% Setup for the @verbatim environment 5189*6a54128fSAndroid Build Coastguard Worker% 5190*6a54128fSAndroid Build Coastguard Worker% Real tab expansion 5191*6a54128fSAndroid Build Coastguard Worker\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount 5192*6a54128fSAndroid Build Coastguard Worker% 5193*6a54128fSAndroid Build Coastguard Worker\def\starttabbox{\setbox0=\hbox\bgroup} 5194*6a54128fSAndroid Build Coastguard Worker\begingroup 5195*6a54128fSAndroid Build Coastguard Worker \catcode`\^^I=\active 5196*6a54128fSAndroid Build Coastguard Worker \gdef\tabexpand{% 5197*6a54128fSAndroid Build Coastguard Worker \catcode`\^^I=\active 5198*6a54128fSAndroid Build Coastguard Worker \def^^I{\leavevmode\egroup 5199*6a54128fSAndroid Build Coastguard Worker \dimen0=\wd0 % the width so far, or since the previous tab 5200*6a54128fSAndroid Build Coastguard Worker \divide\dimen0 by\tabw 5201*6a54128fSAndroid Build Coastguard Worker \multiply\dimen0 by\tabw % compute previous multiple of \tabw 5202*6a54128fSAndroid Build Coastguard Worker \advance\dimen0 by\tabw % advance to next multiple of \tabw 5203*6a54128fSAndroid Build Coastguard Worker \wd0=\dimen0 \box0 \starttabbox 5204*6a54128fSAndroid Build Coastguard Worker }% 5205*6a54128fSAndroid Build Coastguard Worker } 5206*6a54128fSAndroid Build Coastguard Worker\endgroup 5207*6a54128fSAndroid Build Coastguard Worker\def\setupverbatim{% 5208*6a54128fSAndroid Build Coastguard Worker \let\nonarrowing = t% 5209*6a54128fSAndroid Build Coastguard Worker \nonfillstart 5210*6a54128fSAndroid Build Coastguard Worker % Easiest (and conventionally used) font for verbatim 5211*6a54128fSAndroid Build Coastguard Worker \tt 5212*6a54128fSAndroid Build Coastguard Worker \def\par{\leavevmode\egroup\box0\endgraf}% 5213*6a54128fSAndroid Build Coastguard Worker \catcode`\`=\active 5214*6a54128fSAndroid Build Coastguard Worker \tabexpand 5215*6a54128fSAndroid Build Coastguard Worker % Respect line breaks, 5216*6a54128fSAndroid Build Coastguard Worker % print special symbols as themselves, and 5217*6a54128fSAndroid Build Coastguard Worker % make each space count 5218*6a54128fSAndroid Build Coastguard Worker % must do in this order: 5219*6a54128fSAndroid Build Coastguard Worker \obeylines \uncatcodespecials \sepspaces 5220*6a54128fSAndroid Build Coastguard Worker \everypar{\starttabbox}% 5221*6a54128fSAndroid Build Coastguard Worker} 5222*6a54128fSAndroid Build Coastguard Worker 5223*6a54128fSAndroid Build Coastguard Worker% Do the @verb magic: verbatim text is quoted by unique 5224*6a54128fSAndroid Build Coastguard Worker% delimiter characters. Before first delimiter expect a 5225*6a54128fSAndroid Build Coastguard Worker% right brace, after last delimiter expect closing brace: 5226*6a54128fSAndroid Build Coastguard Worker% 5227*6a54128fSAndroid Build Coastguard Worker% \def\doverb'{'<char>#1<char>'}'{#1} 5228*6a54128fSAndroid Build Coastguard Worker% 5229*6a54128fSAndroid Build Coastguard Worker% [Knuth] p. 382; only eat outer {} 5230*6a54128fSAndroid Build Coastguard Worker\begingroup 5231*6a54128fSAndroid Build Coastguard Worker \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other 5232*6a54128fSAndroid Build Coastguard Worker \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] 5233*6a54128fSAndroid Build Coastguard Worker\endgroup 5234*6a54128fSAndroid Build Coastguard Worker% 5235*6a54128fSAndroid Build Coastguard Worker\def\verb{\begingroup\setupverb\doverb} 5236*6a54128fSAndroid Build Coastguard Worker% 5237*6a54128fSAndroid Build Coastguard Worker% 5238*6a54128fSAndroid Build Coastguard Worker% Do the @verbatim magic: define the macro \doverbatim so that 5239*6a54128fSAndroid Build Coastguard Worker% the (first) argument ends when '@end verbatim' is reached, ie: 5240*6a54128fSAndroid Build Coastguard Worker% 5241*6a54128fSAndroid Build Coastguard Worker% \def\doverbatim#1@end verbatim{#1} 5242*6a54128fSAndroid Build Coastguard Worker% 5243*6a54128fSAndroid Build Coastguard Worker% For Texinfo it's a lot easier than for LaTeX, 5244*6a54128fSAndroid Build Coastguard Worker% because texinfo's \verbatim doesn't stop at '\end{verbatim}': 5245*6a54128fSAndroid Build Coastguard Worker% we need not redefine '\', '{' and '}'. 5246*6a54128fSAndroid Build Coastguard Worker% 5247*6a54128fSAndroid Build Coastguard Worker% Inspired by LaTeX's verbatim command set [latex.ltx] 5248*6a54128fSAndroid Build Coastguard Worker% 5249*6a54128fSAndroid Build Coastguard Worker\begingroup 5250*6a54128fSAndroid Build Coastguard Worker \catcode`\ =\active 5251*6a54128fSAndroid Build Coastguard Worker \obeylines % 5252*6a54128fSAndroid Build Coastguard Worker % ignore everything up to the first ^^M, that's the newline at the end 5253*6a54128fSAndroid Build Coastguard Worker % of the @verbatim input line itself. Otherwise we get an extra blank 5254*6a54128fSAndroid Build Coastguard Worker % line in the output. 5255*6a54128fSAndroid Build Coastguard Worker \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% 5256*6a54128fSAndroid Build Coastguard Worker % We really want {...\end verbatim} in the body of the macro, but 5257*6a54128fSAndroid Build Coastguard Worker % without the active space; thus we have to use \xdef and \gobble. 5258*6a54128fSAndroid Build Coastguard Worker\endgroup 5259*6a54128fSAndroid Build Coastguard Worker% 5260*6a54128fSAndroid Build Coastguard Worker\envdef\verbatim{% 5261*6a54128fSAndroid Build Coastguard Worker \setupverbatim\doverbatim 5262*6a54128fSAndroid Build Coastguard Worker} 5263*6a54128fSAndroid Build Coastguard Worker\let\Everbatim = \afterenvbreak 5264*6a54128fSAndroid Build Coastguard Worker 5265*6a54128fSAndroid Build Coastguard Worker 5266*6a54128fSAndroid Build Coastguard Worker% @verbatiminclude FILE - insert text of file in verbatim environment. 5267*6a54128fSAndroid Build Coastguard Worker% 5268*6a54128fSAndroid Build Coastguard Worker\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} 5269*6a54128fSAndroid Build Coastguard Worker% 5270*6a54128fSAndroid Build Coastguard Worker\def\doverbatiminclude#1{% 5271*6a54128fSAndroid Build Coastguard Worker {% 5272*6a54128fSAndroid Build Coastguard Worker \makevalueexpandable 5273*6a54128fSAndroid Build Coastguard Worker \setupverbatim 5274*6a54128fSAndroid Build Coastguard Worker \input #1 5275*6a54128fSAndroid Build Coastguard Worker \afterenvbreak 5276*6a54128fSAndroid Build Coastguard Worker }% 5277*6a54128fSAndroid Build Coastguard Worker} 5278*6a54128fSAndroid Build Coastguard Worker 5279*6a54128fSAndroid Build Coastguard Worker% @copying ... @end copying. 5280*6a54128fSAndroid Build Coastguard Worker% Save the text away for @insertcopying later. 5281*6a54128fSAndroid Build Coastguard Worker% 5282*6a54128fSAndroid Build Coastguard Worker% We save the uninterpreted tokens, rather than creating a box. 5283*6a54128fSAndroid Build Coastguard Worker% Saving the text in a box would be much easier, but then all the 5284*6a54128fSAndroid Build Coastguard Worker% typesetting commands (@smallbook, font changes, etc.) have to be done 5285*6a54128fSAndroid Build Coastguard Worker% beforehand -- and a) we want @copying to be done first in the source 5286*6a54128fSAndroid Build Coastguard Worker% file; b) letting users define the frontmatter in as flexible order as 5287*6a54128fSAndroid Build Coastguard Worker% possible is very desirable. 5288*6a54128fSAndroid Build Coastguard Worker% 5289*6a54128fSAndroid Build Coastguard Worker\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} 5290*6a54128fSAndroid Build Coastguard Worker\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} 5291*6a54128fSAndroid Build Coastguard Worker% 5292*6a54128fSAndroid Build Coastguard Worker\def\insertcopying{% 5293*6a54128fSAndroid Build Coastguard Worker \begingroup 5294*6a54128fSAndroid Build Coastguard Worker \parindent = 0pt % paragraph indentation looks wrong on title page 5295*6a54128fSAndroid Build Coastguard Worker \scanexp\copyingtext 5296*6a54128fSAndroid Build Coastguard Worker \endgroup 5297*6a54128fSAndroid Build Coastguard Worker} 5298*6a54128fSAndroid Build Coastguard Worker 5299*6a54128fSAndroid Build Coastguard Worker\message{defuns,} 5300*6a54128fSAndroid Build Coastguard Worker% @defun etc. 5301*6a54128fSAndroid Build Coastguard Worker 5302*6a54128fSAndroid Build Coastguard Worker\newskip\defbodyindent \defbodyindent=.4in 5303*6a54128fSAndroid Build Coastguard Worker\newskip\defargsindent \defargsindent=50pt 5304*6a54128fSAndroid Build Coastguard Worker\newskip\deflastargmargin \deflastargmargin=18pt 5305*6a54128fSAndroid Build Coastguard Worker 5306*6a54128fSAndroid Build Coastguard Worker% Start the processing of @deffn: 5307*6a54128fSAndroid Build Coastguard Worker\def\startdefun{% 5308*6a54128fSAndroid Build Coastguard Worker \ifnum\lastpenalty<10000 5309*6a54128fSAndroid Build Coastguard Worker \medbreak 5310*6a54128fSAndroid Build Coastguard Worker \else 5311*6a54128fSAndroid Build Coastguard Worker % If there are two @def commands in a row, we'll have a \nobreak, 5312*6a54128fSAndroid Build Coastguard Worker % which is there to keep the function description together with its 5313*6a54128fSAndroid Build Coastguard Worker % header. But if there's nothing but headers, we need to allow a 5314*6a54128fSAndroid Build Coastguard Worker % break somewhere. Check specifically for penalty 10002, inserted 5315*6a54128fSAndroid Build Coastguard Worker % by \defargscommonending, instead of 10000, since the sectioning 5316*6a54128fSAndroid Build Coastguard Worker % commands also insert a nobreak penalty, and we don't want to allow 5317*6a54128fSAndroid Build Coastguard Worker % a break between a section heading and a defun. 5318*6a54128fSAndroid Build Coastguard Worker % 5319*6a54128fSAndroid Build Coastguard Worker \ifnum\lastpenalty=10002 \penalty2000 \fi 5320*6a54128fSAndroid Build Coastguard Worker % 5321*6a54128fSAndroid Build Coastguard Worker % Similarly, after a section heading, do not allow a break. 5322*6a54128fSAndroid Build Coastguard Worker % But do insert the glue. 5323*6a54128fSAndroid Build Coastguard Worker \medskip % preceded by discardable penalty, so not a breakpoint 5324*6a54128fSAndroid Build Coastguard Worker \fi 5325*6a54128fSAndroid Build Coastguard Worker % 5326*6a54128fSAndroid Build Coastguard Worker \parindent=0in 5327*6a54128fSAndroid Build Coastguard Worker \advance\leftskip by \defbodyindent 5328*6a54128fSAndroid Build Coastguard Worker \exdentamount=\defbodyindent 5329*6a54128fSAndroid Build Coastguard Worker} 5330*6a54128fSAndroid Build Coastguard Worker 5331*6a54128fSAndroid Build Coastguard Worker\def\dodefunx#1{% 5332*6a54128fSAndroid Build Coastguard Worker % First, check whether we are in the right environment: 5333*6a54128fSAndroid Build Coastguard Worker \checkenv#1% 5334*6a54128fSAndroid Build Coastguard Worker % 5335*6a54128fSAndroid Build Coastguard Worker % As above, allow line break if we have multiple x headers in a row. 5336*6a54128fSAndroid Build Coastguard Worker % It's not a great place, though. 5337*6a54128fSAndroid Build Coastguard Worker \ifnum\lastpenalty=10002 \penalty3000 \fi 5338*6a54128fSAndroid Build Coastguard Worker % 5339*6a54128fSAndroid Build Coastguard Worker % And now, it's time to reuse the body of the original defun: 5340*6a54128fSAndroid Build Coastguard Worker \expandafter\gobbledefun#1% 5341*6a54128fSAndroid Build Coastguard Worker} 5342*6a54128fSAndroid Build Coastguard Worker\def\gobbledefun#1\startdefun{} 5343*6a54128fSAndroid Build Coastguard Worker 5344*6a54128fSAndroid Build Coastguard Worker% \printdefunline \deffnheader{text} 5345*6a54128fSAndroid Build Coastguard Worker% 5346*6a54128fSAndroid Build Coastguard Worker\def\printdefunline#1#2{% 5347*6a54128fSAndroid Build Coastguard Worker \begingroup 5348*6a54128fSAndroid Build Coastguard Worker % call \deffnheader: 5349*6a54128fSAndroid Build Coastguard Worker #1#2 \endheader 5350*6a54128fSAndroid Build Coastguard Worker % common ending: 5351*6a54128fSAndroid Build Coastguard Worker \interlinepenalty = 10000 5352*6a54128fSAndroid Build Coastguard Worker \advance\rightskip by 0pt plus 1fil 5353*6a54128fSAndroid Build Coastguard Worker \endgraf 5354*6a54128fSAndroid Build Coastguard Worker \nobreak\vskip -\parskip 5355*6a54128fSAndroid Build Coastguard Worker \penalty 10002 % signal to \startdefun and \dodefunx 5356*6a54128fSAndroid Build Coastguard Worker % Some of the @defun-type tags do not enable magic parentheses, 5357*6a54128fSAndroid Build Coastguard Worker % rendering the following check redundant. But we don't optimize. 5358*6a54128fSAndroid Build Coastguard Worker \checkparencounts 5359*6a54128fSAndroid Build Coastguard Worker \endgroup 5360*6a54128fSAndroid Build Coastguard Worker} 5361*6a54128fSAndroid Build Coastguard Worker 5362*6a54128fSAndroid Build Coastguard Worker\def\Edefun{\endgraf\medbreak} 5363*6a54128fSAndroid Build Coastguard Worker 5364*6a54128fSAndroid Build Coastguard Worker% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; 5365*6a54128fSAndroid Build Coastguard Worker% the only thing remainnig is to define \deffnheader. 5366*6a54128fSAndroid Build Coastguard Worker% 5367*6a54128fSAndroid Build Coastguard Worker\def\makedefun#1{% 5368*6a54128fSAndroid Build Coastguard Worker \expandafter\let\csname E#1\endcsname = \Edefun 5369*6a54128fSAndroid Build Coastguard Worker \edef\temp{\noexpand\domakedefun 5370*6a54128fSAndroid Build Coastguard Worker \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% 5371*6a54128fSAndroid Build Coastguard Worker \temp 5372*6a54128fSAndroid Build Coastguard Worker} 5373*6a54128fSAndroid Build Coastguard Worker 5374*6a54128fSAndroid Build Coastguard Worker% \domakedefun \deffn \deffnx \deffnheader 5375*6a54128fSAndroid Build Coastguard Worker% 5376*6a54128fSAndroid Build Coastguard Worker% Define \deffn and \deffnx, without parameters. 5377*6a54128fSAndroid Build Coastguard Worker% \deffnheader has to be defined explicitly. 5378*6a54128fSAndroid Build Coastguard Worker% 5379*6a54128fSAndroid Build Coastguard Worker\def\domakedefun#1#2#3{% 5380*6a54128fSAndroid Build Coastguard Worker \envdef#1{% 5381*6a54128fSAndroid Build Coastguard Worker \startdefun 5382*6a54128fSAndroid Build Coastguard Worker \parseargusing\activeparens{\printdefunline#3}% 5383*6a54128fSAndroid Build Coastguard Worker }% 5384*6a54128fSAndroid Build Coastguard Worker \def#2{\dodefunx#1}% 5385*6a54128fSAndroid Build Coastguard Worker \def#3% 5386*6a54128fSAndroid Build Coastguard Worker} 5387*6a54128fSAndroid Build Coastguard Worker 5388*6a54128fSAndroid Build Coastguard Worker%%% Untyped functions: 5389*6a54128fSAndroid Build Coastguard Worker 5390*6a54128fSAndroid Build Coastguard Worker% @deffn category name args 5391*6a54128fSAndroid Build Coastguard Worker\makedefun{deffn}{\deffngeneral{}} 5392*6a54128fSAndroid Build Coastguard Worker 5393*6a54128fSAndroid Build Coastguard Worker% @deffn category class name args 5394*6a54128fSAndroid Build Coastguard Worker\makedefun{defop}#1 {\defopon{#1\ \putwordon}} 5395*6a54128fSAndroid Build Coastguard Worker 5396*6a54128fSAndroid Build Coastguard Worker% \defopon {category on}class name args 5397*6a54128fSAndroid Build Coastguard Worker\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } 5398*6a54128fSAndroid Build Coastguard Worker 5399*6a54128fSAndroid Build Coastguard Worker% \deffngeneral {subind}category name args 5400*6a54128fSAndroid Build Coastguard Worker% 5401*6a54128fSAndroid Build Coastguard Worker\def\deffngeneral#1#2 #3 #4\endheader{% 5402*6a54128fSAndroid Build Coastguard Worker % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. 5403*6a54128fSAndroid Build Coastguard Worker \dosubind{fn}{\code{#3}}{#1}% 5404*6a54128fSAndroid Build Coastguard Worker \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% 5405*6a54128fSAndroid Build Coastguard Worker} 5406*6a54128fSAndroid Build Coastguard Worker 5407*6a54128fSAndroid Build Coastguard Worker%%% Typed functions: 5408*6a54128fSAndroid Build Coastguard Worker 5409*6a54128fSAndroid Build Coastguard Worker% @deftypefn category type name args 5410*6a54128fSAndroid Build Coastguard Worker\makedefun{deftypefn}{\deftypefngeneral{}} 5411*6a54128fSAndroid Build Coastguard Worker 5412*6a54128fSAndroid Build Coastguard Worker% @deftypeop category class type name args 5413*6a54128fSAndroid Build Coastguard Worker\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} 5414*6a54128fSAndroid Build Coastguard Worker 5415*6a54128fSAndroid Build Coastguard Worker% \deftypeopon {category on}class type name args 5416*6a54128fSAndroid Build Coastguard Worker\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } 5417*6a54128fSAndroid Build Coastguard Worker 5418*6a54128fSAndroid Build Coastguard Worker% \deftypefngeneral {subind}category type name args 5419*6a54128fSAndroid Build Coastguard Worker% 5420*6a54128fSAndroid Build Coastguard Worker\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% 5421*6a54128fSAndroid Build Coastguard Worker \dosubind{fn}{\code{#4}}{#1}% 5422*6a54128fSAndroid Build Coastguard Worker \defname{#2}{#3}{#4}\defunargs{#5\unskip}% 5423*6a54128fSAndroid Build Coastguard Worker} 5424*6a54128fSAndroid Build Coastguard Worker 5425*6a54128fSAndroid Build Coastguard Worker%%% Typed variables: 5426*6a54128fSAndroid Build Coastguard Worker 5427*6a54128fSAndroid Build Coastguard Worker% @deftypevr category type var args 5428*6a54128fSAndroid Build Coastguard Worker\makedefun{deftypevr}{\deftypecvgeneral{}} 5429*6a54128fSAndroid Build Coastguard Worker 5430*6a54128fSAndroid Build Coastguard Worker% @deftypecv category class type var args 5431*6a54128fSAndroid Build Coastguard Worker\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} 5432*6a54128fSAndroid Build Coastguard Worker 5433*6a54128fSAndroid Build Coastguard Worker% \deftypecvof {category of}class type var args 5434*6a54128fSAndroid Build Coastguard Worker\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } 5435*6a54128fSAndroid Build Coastguard Worker 5436*6a54128fSAndroid Build Coastguard Worker% \deftypecvgeneral {subind}category type var args 5437*6a54128fSAndroid Build Coastguard Worker% 5438*6a54128fSAndroid Build Coastguard Worker\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% 5439*6a54128fSAndroid Build Coastguard Worker \dosubind{vr}{\code{#4}}{#1}% 5440*6a54128fSAndroid Build Coastguard Worker \defname{#2}{#3}{#4}\defunargs{#5\unskip}% 5441*6a54128fSAndroid Build Coastguard Worker} 5442*6a54128fSAndroid Build Coastguard Worker 5443*6a54128fSAndroid Build Coastguard Worker%%% Untyped variables: 5444*6a54128fSAndroid Build Coastguard Worker 5445*6a54128fSAndroid Build Coastguard Worker% @defvr category var args 5446*6a54128fSAndroid Build Coastguard Worker\makedefun{defvr}#1 {\deftypevrheader{#1} {} } 5447*6a54128fSAndroid Build Coastguard Worker 5448*6a54128fSAndroid Build Coastguard Worker% @defcv category class var args 5449*6a54128fSAndroid Build Coastguard Worker\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} 5450*6a54128fSAndroid Build Coastguard Worker 5451*6a54128fSAndroid Build Coastguard Worker% \defcvof {category of}class var args 5452*6a54128fSAndroid Build Coastguard Worker\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } 5453*6a54128fSAndroid Build Coastguard Worker 5454*6a54128fSAndroid Build Coastguard Worker%%% Type: 5455*6a54128fSAndroid Build Coastguard Worker% @deftp category name args 5456*6a54128fSAndroid Build Coastguard Worker\makedefun{deftp}#1 #2 #3\endheader{% 5457*6a54128fSAndroid Build Coastguard Worker \doind{tp}{\code{#2}}% 5458*6a54128fSAndroid Build Coastguard Worker \defname{#1}{}{#2}\defunargs{#3\unskip}% 5459*6a54128fSAndroid Build Coastguard Worker} 5460*6a54128fSAndroid Build Coastguard Worker 5461*6a54128fSAndroid Build Coastguard Worker% Remaining @defun-like shortcuts: 5462*6a54128fSAndroid Build Coastguard Worker\makedefun{defun}{\deffnheader{\putwordDeffunc} } 5463*6a54128fSAndroid Build Coastguard Worker\makedefun{defmac}{\deffnheader{\putwordDefmac} } 5464*6a54128fSAndroid Build Coastguard Worker\makedefun{defspec}{\deffnheader{\putwordDefspec} } 5465*6a54128fSAndroid Build Coastguard Worker\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } 5466*6a54128fSAndroid Build Coastguard Worker\makedefun{defvar}{\defvrheader{\putwordDefvar} } 5467*6a54128fSAndroid Build Coastguard Worker\makedefun{defopt}{\defvrheader{\putwordDefopt} } 5468*6a54128fSAndroid Build Coastguard Worker\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } 5469*6a54128fSAndroid Build Coastguard Worker\makedefun{defmethod}{\defopon\putwordMethodon} 5470*6a54128fSAndroid Build Coastguard Worker\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} 5471*6a54128fSAndroid Build Coastguard Worker\makedefun{defivar}{\defcvof\putwordInstanceVariableof} 5472*6a54128fSAndroid Build Coastguard Worker\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} 5473*6a54128fSAndroid Build Coastguard Worker 5474*6a54128fSAndroid Build Coastguard Worker% \defname, which formats the name of the @def (not the args). 5475*6a54128fSAndroid Build Coastguard Worker% #1 is the category, such as "Function". 5476*6a54128fSAndroid Build Coastguard Worker% #2 is the return type, if any. 5477*6a54128fSAndroid Build Coastguard Worker% #3 is the function name. 5478*6a54128fSAndroid Build Coastguard Worker% 5479*6a54128fSAndroid Build Coastguard Worker% We are followed by (but not passed) the arguments, if any. 5480*6a54128fSAndroid Build Coastguard Worker% 5481*6a54128fSAndroid Build Coastguard Worker\def\defname#1#2#3{% 5482*6a54128fSAndroid Build Coastguard Worker % Get the values of \leftskip and \rightskip as they were outside the @def... 5483*6a54128fSAndroid Build Coastguard Worker \advance\leftskip by -\defbodyindent 5484*6a54128fSAndroid Build Coastguard Worker % 5485*6a54128fSAndroid Build Coastguard Worker % How we'll format the type name. Putting it in brackets helps 5486*6a54128fSAndroid Build Coastguard Worker % distinguish it from the body text that may end up on the next line 5487*6a54128fSAndroid Build Coastguard Worker % just below it. 5488*6a54128fSAndroid Build Coastguard Worker \def\temp{#1}% 5489*6a54128fSAndroid Build Coastguard Worker \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} 5490*6a54128fSAndroid Build Coastguard Worker % 5491*6a54128fSAndroid Build Coastguard Worker % Figure out line sizes for the paragraph shape. 5492*6a54128fSAndroid Build Coastguard Worker % The first line needs space for \box0; but if \rightskip is nonzero, 5493*6a54128fSAndroid Build Coastguard Worker % we need only space for the part of \box0 which exceeds it: 5494*6a54128fSAndroid Build Coastguard Worker \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip 5495*6a54128fSAndroid Build Coastguard Worker % The continuations: 5496*6a54128fSAndroid Build Coastguard Worker \dimen2=\hsize \advance\dimen2 by -\defargsindent 5497*6a54128fSAndroid Build Coastguard Worker % (plain.tex says that \dimen1 should be used only as global.) 5498*6a54128fSAndroid Build Coastguard Worker \parshape 2 0in \dimen0 \defargsindent \dimen2 5499*6a54128fSAndroid Build Coastguard Worker % 5500*6a54128fSAndroid Build Coastguard Worker % Put the type name to the right margin. 5501*6a54128fSAndroid Build Coastguard Worker \noindent 5502*6a54128fSAndroid Build Coastguard Worker \hbox to 0pt{% 5503*6a54128fSAndroid Build Coastguard Worker \hfil\box0 \kern-\hsize 5504*6a54128fSAndroid Build Coastguard Worker % \hsize has to be shortened this way: 5505*6a54128fSAndroid Build Coastguard Worker \kern\leftskip 5506*6a54128fSAndroid Build Coastguard Worker % Intentionally do not respect \rightskip, since we need the space. 5507*6a54128fSAndroid Build Coastguard Worker }% 5508*6a54128fSAndroid Build Coastguard Worker % 5509*6a54128fSAndroid Build Coastguard Worker % Allow all lines to be underfull without complaint: 5510*6a54128fSAndroid Build Coastguard Worker \tolerance=10000 \hbadness=10000 5511*6a54128fSAndroid Build Coastguard Worker \exdentamount=\defbodyindent 5512*6a54128fSAndroid Build Coastguard Worker {% 5513*6a54128fSAndroid Build Coastguard Worker % defun fonts. We use typewriter by default (used to be bold) because: 5514*6a54128fSAndroid Build Coastguard Worker % . we're printing identifiers, they should be in tt in principle. 5515*6a54128fSAndroid Build Coastguard Worker % . in languages with many accents, such as Czech or French, it's 5516*6a54128fSAndroid Build Coastguard Worker % common to leave accents off identifiers. The result looks ok in 5517*6a54128fSAndroid Build Coastguard Worker % tt, but exceedingly strange in rm. 5518*6a54128fSAndroid Build Coastguard Worker % . we don't want -- and --- to be treated as ligatures. 5519*6a54128fSAndroid Build Coastguard Worker % . this still does not fix the ?` and !` ligatures, but so far no 5520*6a54128fSAndroid Build Coastguard Worker % one has made identifiers using them :). 5521*6a54128fSAndroid Build Coastguard Worker \df \tt 5522*6a54128fSAndroid Build Coastguard Worker \def\temp{#2}% return value type 5523*6a54128fSAndroid Build Coastguard Worker \ifx\temp\empty\else \tclose{\temp} \fi 5524*6a54128fSAndroid Build Coastguard Worker #3% output function name 5525*6a54128fSAndroid Build Coastguard Worker }% 5526*6a54128fSAndroid Build Coastguard Worker {\rm\enskip}% hskip 0.5 em of \tenrm 5527*6a54128fSAndroid Build Coastguard Worker % 5528*6a54128fSAndroid Build Coastguard Worker \boldbrax 5529*6a54128fSAndroid Build Coastguard Worker % arguments will be output next, if any. 5530*6a54128fSAndroid Build Coastguard Worker} 5531*6a54128fSAndroid Build Coastguard Worker 5532*6a54128fSAndroid Build Coastguard Worker% Print arguments in slanted roman (not ttsl), inconsistently with using 5533*6a54128fSAndroid Build Coastguard Worker% tt for the name. This is because literal text is sometimes needed in 5534*6a54128fSAndroid Build Coastguard Worker% the argument list (groff manual), and ttsl and tt are not very 5535*6a54128fSAndroid Build Coastguard Worker% distinguishable. Prevent hyphenation at `-' chars. 5536*6a54128fSAndroid Build Coastguard Worker% 5537*6a54128fSAndroid Build Coastguard Worker\def\defunargs#1{% 5538*6a54128fSAndroid Build Coastguard Worker % use sl by default (not ttsl), 5539*6a54128fSAndroid Build Coastguard Worker % tt for the names. 5540*6a54128fSAndroid Build Coastguard Worker \df \sl \hyphenchar\font=0 5541*6a54128fSAndroid Build Coastguard Worker % 5542*6a54128fSAndroid Build Coastguard Worker % On the other hand, if an argument has two dashes (for instance), we 5543*6a54128fSAndroid Build Coastguard Worker % want a way to get ttsl. Let's try @var for that. 5544*6a54128fSAndroid Build Coastguard Worker \let\var=\ttslanted 5545*6a54128fSAndroid Build Coastguard Worker #1% 5546*6a54128fSAndroid Build Coastguard Worker \sl\hyphenchar\font=45 5547*6a54128fSAndroid Build Coastguard Worker} 5548*6a54128fSAndroid Build Coastguard Worker 5549*6a54128fSAndroid Build Coastguard Worker% We want ()&[] to print specially on the defun line. 5550*6a54128fSAndroid Build Coastguard Worker% 5551*6a54128fSAndroid Build Coastguard Worker\def\activeparens{% 5552*6a54128fSAndroid Build Coastguard Worker \catcode`\(=\active \catcode`\)=\active 5553*6a54128fSAndroid Build Coastguard Worker \catcode`\[=\active \catcode`\]=\active 5554*6a54128fSAndroid Build Coastguard Worker \catcode`\&=\active 5555*6a54128fSAndroid Build Coastguard Worker} 5556*6a54128fSAndroid Build Coastguard Worker 5557*6a54128fSAndroid Build Coastguard Worker% Make control sequences which act like normal parenthesis chars. 5558*6a54128fSAndroid Build Coastguard Worker\let\lparen = ( \let\rparen = ) 5559*6a54128fSAndroid Build Coastguard Worker 5560*6a54128fSAndroid Build Coastguard Worker% Be sure that we always have a definition for `(', etc. For example, 5561*6a54128fSAndroid Build Coastguard Worker% if the fn name has parens in it, \boldbrax will not be in effect yet, 5562*6a54128fSAndroid Build Coastguard Worker% so TeX would otherwise complain about undefined control sequence. 5563*6a54128fSAndroid Build Coastguard Worker{ 5564*6a54128fSAndroid Build Coastguard Worker \activeparens 5565*6a54128fSAndroid Build Coastguard Worker \global\let(=\lparen \global\let)=\rparen 5566*6a54128fSAndroid Build Coastguard Worker \global\let[=\lbrack \global\let]=\rbrack 5567*6a54128fSAndroid Build Coastguard Worker \global\let& = \& 5568*6a54128fSAndroid Build Coastguard Worker 5569*6a54128fSAndroid Build Coastguard Worker \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} 5570*6a54128fSAndroid Build Coastguard Worker \gdef\magicamp{\let&=\amprm} 5571*6a54128fSAndroid Build Coastguard Worker} 5572*6a54128fSAndroid Build Coastguard Worker 5573*6a54128fSAndroid Build Coastguard Worker\newcount\parencount 5574*6a54128fSAndroid Build Coastguard Worker 5575*6a54128fSAndroid Build Coastguard Worker% If we encounter &foo, then turn on ()-hacking afterwards 5576*6a54128fSAndroid Build Coastguard Worker\newif\ifampseen 5577*6a54128fSAndroid Build Coastguard Worker\def\amprm#1 {\ampseentrue{\bf\ }} 5578*6a54128fSAndroid Build Coastguard Worker 5579*6a54128fSAndroid Build Coastguard Worker\def\parenfont{% 5580*6a54128fSAndroid Build Coastguard Worker \ifampseen 5581*6a54128fSAndroid Build Coastguard Worker % At the first level, print parens in roman, 5582*6a54128fSAndroid Build Coastguard Worker % otherwise use the default font. 5583*6a54128fSAndroid Build Coastguard Worker \ifnum \parencount=1 \rm \fi 5584*6a54128fSAndroid Build Coastguard Worker \else 5585*6a54128fSAndroid Build Coastguard Worker % The \sf parens (in \boldbrax) actually are a little bolder than 5586*6a54128fSAndroid Build Coastguard Worker % the contained text. This is especially needed for [ and ] . 5587*6a54128fSAndroid Build Coastguard Worker \sf 5588*6a54128fSAndroid Build Coastguard Worker \fi 5589*6a54128fSAndroid Build Coastguard Worker} 5590*6a54128fSAndroid Build Coastguard Worker\def\infirstlevel#1{% 5591*6a54128fSAndroid Build Coastguard Worker \ifampseen 5592*6a54128fSAndroid Build Coastguard Worker \ifnum\parencount=1 5593*6a54128fSAndroid Build Coastguard Worker #1% 5594*6a54128fSAndroid Build Coastguard Worker \fi 5595*6a54128fSAndroid Build Coastguard Worker \fi 5596*6a54128fSAndroid Build Coastguard Worker} 5597*6a54128fSAndroid Build Coastguard Worker\def\bfafterword#1 {#1 \bf} 5598*6a54128fSAndroid Build Coastguard Worker 5599*6a54128fSAndroid Build Coastguard Worker\def\opnr{% 5600*6a54128fSAndroid Build Coastguard Worker \global\advance\parencount by 1 5601*6a54128fSAndroid Build Coastguard Worker {\parenfont(}% 5602*6a54128fSAndroid Build Coastguard Worker \infirstlevel \bfafterword 5603*6a54128fSAndroid Build Coastguard Worker} 5604*6a54128fSAndroid Build Coastguard Worker\def\clnr{% 5605*6a54128fSAndroid Build Coastguard Worker {\parenfont)}% 5606*6a54128fSAndroid Build Coastguard Worker \infirstlevel \sl 5607*6a54128fSAndroid Build Coastguard Worker \global\advance\parencount by -1 5608*6a54128fSAndroid Build Coastguard Worker} 5609*6a54128fSAndroid Build Coastguard Worker 5610*6a54128fSAndroid Build Coastguard Worker\newcount\brackcount 5611*6a54128fSAndroid Build Coastguard Worker\def\lbrb{% 5612*6a54128fSAndroid Build Coastguard Worker \global\advance\brackcount by 1 5613*6a54128fSAndroid Build Coastguard Worker {\bf[}% 5614*6a54128fSAndroid Build Coastguard Worker} 5615*6a54128fSAndroid Build Coastguard Worker\def\rbrb{% 5616*6a54128fSAndroid Build Coastguard Worker {\bf]}% 5617*6a54128fSAndroid Build Coastguard Worker \global\advance\brackcount by -1 5618*6a54128fSAndroid Build Coastguard Worker} 5619*6a54128fSAndroid Build Coastguard Worker 5620*6a54128fSAndroid Build Coastguard Worker\def\checkparencounts{% 5621*6a54128fSAndroid Build Coastguard Worker \ifnum\parencount=0 \else \badparencount \fi 5622*6a54128fSAndroid Build Coastguard Worker \ifnum\brackcount=0 \else \badbrackcount \fi 5623*6a54128fSAndroid Build Coastguard Worker} 5624*6a54128fSAndroid Build Coastguard Worker\def\badparencount{% 5625*6a54128fSAndroid Build Coastguard Worker \errmessage{Unbalanced parentheses in @def}% 5626*6a54128fSAndroid Build Coastguard Worker \global\parencount=0 5627*6a54128fSAndroid Build Coastguard Worker} 5628*6a54128fSAndroid Build Coastguard Worker\def\badbrackcount{% 5629*6a54128fSAndroid Build Coastguard Worker \errmessage{Unbalanced square braces in @def}% 5630*6a54128fSAndroid Build Coastguard Worker \global\brackcount=0 5631*6a54128fSAndroid Build Coastguard Worker} 5632*6a54128fSAndroid Build Coastguard Worker 5633*6a54128fSAndroid Build Coastguard Worker 5634*6a54128fSAndroid Build Coastguard Worker\message{macros,} 5635*6a54128fSAndroid Build Coastguard Worker% @macro. 5636*6a54128fSAndroid Build Coastguard Worker 5637*6a54128fSAndroid Build Coastguard Worker% To do this right we need a feature of e-TeX, \scantokens, 5638*6a54128fSAndroid Build Coastguard Worker% which we arrange to emulate with a temporary file in ordinary TeX. 5639*6a54128fSAndroid Build Coastguard Worker\ifx\eTeXversion\undefined 5640*6a54128fSAndroid Build Coastguard Worker \newwrite\macscribble 5641*6a54128fSAndroid Build Coastguard Worker \def\scantokens#1{% 5642*6a54128fSAndroid Build Coastguard Worker \toks0={#1}% 5643*6a54128fSAndroid Build Coastguard Worker \immediate\openout\macscribble=\jobname.tmp 5644*6a54128fSAndroid Build Coastguard Worker \immediate\write\macscribble{\the\toks0}% 5645*6a54128fSAndroid Build Coastguard Worker \immediate\closeout\macscribble 5646*6a54128fSAndroid Build Coastguard Worker \input \jobname.tmp 5647*6a54128fSAndroid Build Coastguard Worker } 5648*6a54128fSAndroid Build Coastguard Worker\fi 5649*6a54128fSAndroid Build Coastguard Worker 5650*6a54128fSAndroid Build Coastguard Worker\def\scanmacro#1{% 5651*6a54128fSAndroid Build Coastguard Worker \begingroup 5652*6a54128fSAndroid Build Coastguard Worker \newlinechar`\^^M 5653*6a54128fSAndroid Build Coastguard Worker \let\xeatspaces\eatspaces 5654*6a54128fSAndroid Build Coastguard Worker % Undo catcode changes of \startcontents and \doprintindex 5655*6a54128fSAndroid Build Coastguard Worker % When called from @insertcopying or (short)caption, we need active 5656*6a54128fSAndroid Build Coastguard Worker % backslash to get it printed correctly. Previously, we had 5657*6a54128fSAndroid Build Coastguard Worker % \catcode`\\=\other instead. We'll see whether a problem appears 5658*6a54128fSAndroid Build Coastguard Worker % with macro expansion. --kasal, 19aug04 5659*6a54128fSAndroid Build Coastguard Worker \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ 5660*6a54128fSAndroid Build Coastguard Worker % ... and \example 5661*6a54128fSAndroid Build Coastguard Worker \spaceisspace 5662*6a54128fSAndroid Build Coastguard Worker % 5663*6a54128fSAndroid Build Coastguard Worker % Append \endinput to make sure that TeX does not see the ending newline. 5664*6a54128fSAndroid Build Coastguard Worker % 5665*6a54128fSAndroid Build Coastguard Worker % I've verified that it is necessary both for e-TeX and for ordinary TeX 5666*6a54128fSAndroid Build Coastguard Worker % --kasal, 29nov03 5667*6a54128fSAndroid Build Coastguard Worker \scantokens{#1\endinput}% 5668*6a54128fSAndroid Build Coastguard Worker \endgroup 5669*6a54128fSAndroid Build Coastguard Worker} 5670*6a54128fSAndroid Build Coastguard Worker 5671*6a54128fSAndroid Build Coastguard Worker\def\scanexp#1{% 5672*6a54128fSAndroid Build Coastguard Worker \edef\temp{\noexpand\scanmacro{#1}}% 5673*6a54128fSAndroid Build Coastguard Worker \temp 5674*6a54128fSAndroid Build Coastguard Worker} 5675*6a54128fSAndroid Build Coastguard Worker 5676*6a54128fSAndroid Build Coastguard Worker\newcount\paramno % Count of parameters 5677*6a54128fSAndroid Build Coastguard Worker\newtoks\macname % Macro name 5678*6a54128fSAndroid Build Coastguard Worker\newif\ifrecursive % Is it recursive? 5679*6a54128fSAndroid Build Coastguard Worker 5680*6a54128fSAndroid Build Coastguard Worker% List of all defined macros in the form 5681*6a54128fSAndroid Build Coastguard Worker% \definedummyword\macro1\definedummyword\macro2... 5682*6a54128fSAndroid Build Coastguard Worker% Currently is also contains all @aliases; the list can be split 5683*6a54128fSAndroid Build Coastguard Worker% if there is a need. 5684*6a54128fSAndroid Build Coastguard Worker\def\macrolist{} 5685*6a54128fSAndroid Build Coastguard Worker 5686*6a54128fSAndroid Build Coastguard Worker% Add the macro to \macrolist 5687*6a54128fSAndroid Build Coastguard Worker\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} 5688*6a54128fSAndroid Build Coastguard Worker\def\addtomacrolistxxx#1{% 5689*6a54128fSAndroid Build Coastguard Worker \toks0 = \expandafter{\macrolist\definedummyword#1}% 5690*6a54128fSAndroid Build Coastguard Worker \xdef\macrolist{\the\toks0}% 5691*6a54128fSAndroid Build Coastguard Worker} 5692*6a54128fSAndroid Build Coastguard Worker 5693*6a54128fSAndroid Build Coastguard Worker% Utility routines. 5694*6a54128fSAndroid Build Coastguard Worker% This does \let #1 = #2, with \csnames; that is, 5695*6a54128fSAndroid Build Coastguard Worker% \let \csname#1\endcsname = \csname#2\endcsname 5696*6a54128fSAndroid Build Coastguard Worker% (except of course we have to play expansion games). 5697*6a54128fSAndroid Build Coastguard Worker% 5698*6a54128fSAndroid Build Coastguard Worker\def\cslet#1#2{% 5699*6a54128fSAndroid Build Coastguard Worker \expandafter\let 5700*6a54128fSAndroid Build Coastguard Worker \csname#1\expandafter\endcsname 5701*6a54128fSAndroid Build Coastguard Worker \csname#2\endcsname 5702*6a54128fSAndroid Build Coastguard Worker} 5703*6a54128fSAndroid Build Coastguard Worker 5704*6a54128fSAndroid Build Coastguard Worker% Trim leading and trailing spaces off a string. 5705*6a54128fSAndroid Build Coastguard Worker% Concepts from aro-bend problem 15 (see CTAN). 5706*6a54128fSAndroid Build Coastguard Worker{\catcode`\@=11 5707*6a54128fSAndroid Build Coastguard Worker\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} 5708*6a54128fSAndroid Build Coastguard Worker\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} 5709*6a54128fSAndroid Build Coastguard Worker\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} 5710*6a54128fSAndroid Build Coastguard Worker\def\unbrace#1{#1} 5711*6a54128fSAndroid Build Coastguard Worker\unbrace{\gdef\trim@@@ #1 } #2@{#1} 5712*6a54128fSAndroid Build Coastguard Worker} 5713*6a54128fSAndroid Build Coastguard Worker 5714*6a54128fSAndroid Build Coastguard Worker% Trim a single trailing ^^M off a string. 5715*6a54128fSAndroid Build Coastguard Worker{\catcode`\^^M=\other \catcode`\Q=3% 5716*6a54128fSAndroid Build Coastguard Worker\gdef\eatcr #1{\eatcra #1Q^^MQ}% 5717*6a54128fSAndroid Build Coastguard Worker\gdef\eatcra#1^^MQ{\eatcrb#1Q}% 5718*6a54128fSAndroid Build Coastguard Worker\gdef\eatcrb#1Q#2Q{#1}% 5719*6a54128fSAndroid Build Coastguard Worker} 5720*6a54128fSAndroid Build Coastguard Worker 5721*6a54128fSAndroid Build Coastguard Worker% Macro bodies are absorbed as an argument in a context where 5722*6a54128fSAndroid Build Coastguard Worker% all characters are catcode 10, 11 or 12, except \ which is active 5723*6a54128fSAndroid Build Coastguard Worker% (as in normal texinfo). It is necessary to change the definition of \. 5724*6a54128fSAndroid Build Coastguard Worker 5725*6a54128fSAndroid Build Coastguard Worker% It's necessary to have hard CRs when the macro is executed. This is 5726*6a54128fSAndroid Build Coastguard Worker% done by making ^^M (\endlinechar) catcode 12 when reading the macro 5727*6a54128fSAndroid Build Coastguard Worker% body, and then making it the \newlinechar in \scanmacro. 5728*6a54128fSAndroid Build Coastguard Worker 5729*6a54128fSAndroid Build Coastguard Worker\def\scanctxt{% 5730*6a54128fSAndroid Build Coastguard Worker \catcode`\"=\other 5731*6a54128fSAndroid Build Coastguard Worker \catcode`\+=\other 5732*6a54128fSAndroid Build Coastguard Worker \catcode`\<=\other 5733*6a54128fSAndroid Build Coastguard Worker \catcode`\>=\other 5734*6a54128fSAndroid Build Coastguard Worker \catcode`\@=\other 5735*6a54128fSAndroid Build Coastguard Worker \catcode`\^=\other 5736*6a54128fSAndroid Build Coastguard Worker \catcode`\_=\other 5737*6a54128fSAndroid Build Coastguard Worker \catcode`\|=\other 5738*6a54128fSAndroid Build Coastguard Worker \catcode`\~=\other 5739*6a54128fSAndroid Build Coastguard Worker} 5740*6a54128fSAndroid Build Coastguard Worker 5741*6a54128fSAndroid Build Coastguard Worker\def\scanargctxt{% 5742*6a54128fSAndroid Build Coastguard Worker \scanctxt 5743*6a54128fSAndroid Build Coastguard Worker \catcode`\\=\other 5744*6a54128fSAndroid Build Coastguard Worker \catcode`\^^M=\other 5745*6a54128fSAndroid Build Coastguard Worker} 5746*6a54128fSAndroid Build Coastguard Worker 5747*6a54128fSAndroid Build Coastguard Worker\def\macrobodyctxt{% 5748*6a54128fSAndroid Build Coastguard Worker \scanctxt 5749*6a54128fSAndroid Build Coastguard Worker \catcode`\{=\other 5750*6a54128fSAndroid Build Coastguard Worker \catcode`\}=\other 5751*6a54128fSAndroid Build Coastguard Worker \catcode`\^^M=\other 5752*6a54128fSAndroid Build Coastguard Worker \usembodybackslash 5753*6a54128fSAndroid Build Coastguard Worker} 5754*6a54128fSAndroid Build Coastguard Worker 5755*6a54128fSAndroid Build Coastguard Worker\def\macroargctxt{% 5756*6a54128fSAndroid Build Coastguard Worker \scanctxt 5757*6a54128fSAndroid Build Coastguard Worker \catcode`\\=\other 5758*6a54128fSAndroid Build Coastguard Worker} 5759*6a54128fSAndroid Build Coastguard Worker 5760*6a54128fSAndroid Build Coastguard Worker% \mbodybackslash is the definition of \ in @macro bodies. 5761*6a54128fSAndroid Build Coastguard Worker% It maps \foo\ => \csname macarg.foo\endcsname => #N 5762*6a54128fSAndroid Build Coastguard Worker% where N is the macro parameter number. 5763*6a54128fSAndroid Build Coastguard Worker% We define \csname macarg.\endcsname to be \realbackslash, so 5764*6a54128fSAndroid Build Coastguard Worker% \\ in macro replacement text gets you a backslash. 5765*6a54128fSAndroid Build Coastguard Worker 5766*6a54128fSAndroid Build Coastguard Worker{\catcode`@=0 @catcode`@\=@active 5767*6a54128fSAndroid Build Coastguard Worker @gdef@usembodybackslash{@let\=@mbodybackslash} 5768*6a54128fSAndroid Build Coastguard Worker @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} 5769*6a54128fSAndroid Build Coastguard Worker} 5770*6a54128fSAndroid Build Coastguard Worker\expandafter\def\csname macarg.\endcsname{\realbackslash} 5771*6a54128fSAndroid Build Coastguard Worker 5772*6a54128fSAndroid Build Coastguard Worker\def\macro{\recursivefalse\parsearg\macroxxx} 5773*6a54128fSAndroid Build Coastguard Worker\def\rmacro{\recursivetrue\parsearg\macroxxx} 5774*6a54128fSAndroid Build Coastguard Worker 5775*6a54128fSAndroid Build Coastguard Worker\def\macroxxx#1{% 5776*6a54128fSAndroid Build Coastguard Worker \getargs{#1}% now \macname is the macname and \argl the arglist 5777*6a54128fSAndroid Build Coastguard Worker \ifx\argl\empty % no arguments 5778*6a54128fSAndroid Build Coastguard Worker \paramno=0% 5779*6a54128fSAndroid Build Coastguard Worker \else 5780*6a54128fSAndroid Build Coastguard Worker \expandafter\parsemargdef \argl;% 5781*6a54128fSAndroid Build Coastguard Worker \fi 5782*6a54128fSAndroid Build Coastguard Worker \if1\csname ismacro.\the\macname\endcsname 5783*6a54128fSAndroid Build Coastguard Worker \message{Warning: redefining \the\macname}% 5784*6a54128fSAndroid Build Coastguard Worker \else 5785*6a54128fSAndroid Build Coastguard Worker \expandafter\ifx\csname \the\macname\endcsname \relax 5786*6a54128fSAndroid Build Coastguard Worker \else \errmessage{Macro name \the\macname\space already defined}\fi 5787*6a54128fSAndroid Build Coastguard Worker \global\cslet{macsave.\the\macname}{\the\macname}% 5788*6a54128fSAndroid Build Coastguard Worker \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% 5789*6a54128fSAndroid Build Coastguard Worker \addtomacrolist{\the\macname}% 5790*6a54128fSAndroid Build Coastguard Worker \fi 5791*6a54128fSAndroid Build Coastguard Worker \begingroup \macrobodyctxt 5792*6a54128fSAndroid Build Coastguard Worker \ifrecursive \expandafter\parsermacbody 5793*6a54128fSAndroid Build Coastguard Worker \else \expandafter\parsemacbody 5794*6a54128fSAndroid Build Coastguard Worker \fi} 5795*6a54128fSAndroid Build Coastguard Worker 5796*6a54128fSAndroid Build Coastguard Worker\parseargdef\unmacro{% 5797*6a54128fSAndroid Build Coastguard Worker \if1\csname ismacro.#1\endcsname 5798*6a54128fSAndroid Build Coastguard Worker \global\cslet{#1}{macsave.#1}% 5799*6a54128fSAndroid Build Coastguard Worker \global\expandafter\let \csname ismacro.#1\endcsname=0% 5800*6a54128fSAndroid Build Coastguard Worker % Remove the macro name from \macrolist: 5801*6a54128fSAndroid Build Coastguard Worker \begingroup 5802*6a54128fSAndroid Build Coastguard Worker \expandafter\let\csname#1\endcsname \relax 5803*6a54128fSAndroid Build Coastguard Worker \let\definedummyword\unmacrodo 5804*6a54128fSAndroid Build Coastguard Worker \xdef\macrolist{\macrolist}% 5805*6a54128fSAndroid Build Coastguard Worker \endgroup 5806*6a54128fSAndroid Build Coastguard Worker \else 5807*6a54128fSAndroid Build Coastguard Worker \errmessage{Macro #1 not defined}% 5808*6a54128fSAndroid Build Coastguard Worker \fi 5809*6a54128fSAndroid Build Coastguard Worker} 5810*6a54128fSAndroid Build Coastguard Worker 5811*6a54128fSAndroid Build Coastguard Worker% Called by \do from \dounmacro on each macro. The idea is to omit any 5812*6a54128fSAndroid Build Coastguard Worker% macro definitions that have been changed to \relax. 5813*6a54128fSAndroid Build Coastguard Worker% 5814*6a54128fSAndroid Build Coastguard Worker\def\unmacrodo#1{% 5815*6a54128fSAndroid Build Coastguard Worker \ifx #1\relax 5816*6a54128fSAndroid Build Coastguard Worker % remove this 5817*6a54128fSAndroid Build Coastguard Worker \else 5818*6a54128fSAndroid Build Coastguard Worker \noexpand\definedummyword \noexpand#1% 5819*6a54128fSAndroid Build Coastguard Worker \fi 5820*6a54128fSAndroid Build Coastguard Worker} 5821*6a54128fSAndroid Build Coastguard Worker 5822*6a54128fSAndroid Build Coastguard Worker% This makes use of the obscure feature that if the last token of a 5823*6a54128fSAndroid Build Coastguard Worker% <parameter list> is #, then the preceding argument is delimited by 5824*6a54128fSAndroid Build Coastguard Worker% an opening brace, and that opening brace is not consumed. 5825*6a54128fSAndroid Build Coastguard Worker\def\getargs#1{\getargsxxx#1{}} 5826*6a54128fSAndroid Build Coastguard Worker\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} 5827*6a54128fSAndroid Build Coastguard Worker\def\getmacname #1 #2\relax{\macname={#1}} 5828*6a54128fSAndroid Build Coastguard Worker\def\getmacargs#1{\def\argl{#1}} 5829*6a54128fSAndroid Build Coastguard Worker 5830*6a54128fSAndroid Build Coastguard Worker% Parse the optional {params} list. Set up \paramno and \paramlist 5831*6a54128fSAndroid Build Coastguard Worker% so \defmacro knows what to do. Define \macarg.blah for each blah 5832*6a54128fSAndroid Build Coastguard Worker% in the params list, to be ##N where N is the position in that list. 5833*6a54128fSAndroid Build Coastguard Worker% That gets used by \mbodybackslash (above). 5834*6a54128fSAndroid Build Coastguard Worker 5835*6a54128fSAndroid Build Coastguard Worker% We need to get `macro parameter char #' into several definitions. 5836*6a54128fSAndroid Build Coastguard Worker% The technique used is stolen from LaTeX: let \hash be something 5837*6a54128fSAndroid Build Coastguard Worker% unexpandable, insert that wherever you need a #, and then redefine 5838*6a54128fSAndroid Build Coastguard Worker% it to # just before using the token list produced. 5839*6a54128fSAndroid Build Coastguard Worker% 5840*6a54128fSAndroid Build Coastguard Worker% The same technique is used to protect \eatspaces till just before 5841*6a54128fSAndroid Build Coastguard Worker% the macro is used. 5842*6a54128fSAndroid Build Coastguard Worker 5843*6a54128fSAndroid Build Coastguard Worker\def\parsemargdef#1;{\paramno=0\def\paramlist{}% 5844*6a54128fSAndroid Build Coastguard Worker \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} 5845*6a54128fSAndroid Build Coastguard Worker\def\parsemargdefxxx#1,{% 5846*6a54128fSAndroid Build Coastguard Worker \if#1;\let\next=\relax 5847*6a54128fSAndroid Build Coastguard Worker \else \let\next=\parsemargdefxxx 5848*6a54128fSAndroid Build Coastguard Worker \advance\paramno by 1% 5849*6a54128fSAndroid Build Coastguard Worker \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname 5850*6a54128fSAndroid Build Coastguard Worker {\xeatspaces{\hash\the\paramno}}% 5851*6a54128fSAndroid Build Coastguard Worker \edef\paramlist{\paramlist\hash\the\paramno,}% 5852*6a54128fSAndroid Build Coastguard Worker \fi\next} 5853*6a54128fSAndroid Build Coastguard Worker 5854*6a54128fSAndroid Build Coastguard Worker% These two commands read recursive and nonrecursive macro bodies. 5855*6a54128fSAndroid Build Coastguard Worker% (They're different since rec and nonrec macros end differently.) 5856*6a54128fSAndroid Build Coastguard Worker 5857*6a54128fSAndroid Build Coastguard Worker\long\def\parsemacbody#1@end macro% 5858*6a54128fSAndroid Build Coastguard Worker{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% 5859*6a54128fSAndroid Build Coastguard Worker\long\def\parsermacbody#1@end rmacro% 5860*6a54128fSAndroid Build Coastguard Worker{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% 5861*6a54128fSAndroid Build Coastguard Worker 5862*6a54128fSAndroid Build Coastguard Worker% This defines the macro itself. There are six cases: recursive and 5863*6a54128fSAndroid Build Coastguard Worker% nonrecursive macros of zero, one, and many arguments. 5864*6a54128fSAndroid Build Coastguard Worker% Much magic with \expandafter here. 5865*6a54128fSAndroid Build Coastguard Worker% \xdef is used so that macro definitions will survive the file 5866*6a54128fSAndroid Build Coastguard Worker% they're defined in; @include reads the file inside a group. 5867*6a54128fSAndroid Build Coastguard Worker\def\defmacro{% 5868*6a54128fSAndroid Build Coastguard Worker \let\hash=##% convert placeholders to macro parameter chars 5869*6a54128fSAndroid Build Coastguard Worker \ifrecursive 5870*6a54128fSAndroid Build Coastguard Worker \ifcase\paramno 5871*6a54128fSAndroid Build Coastguard Worker % 0 5872*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname\the\macname\endcsname{% 5873*6a54128fSAndroid Build Coastguard Worker \noexpand\scanmacro{\temp}}% 5874*6a54128fSAndroid Build Coastguard Worker \or % 1 5875*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname\the\macname\endcsname{% 5876*6a54128fSAndroid Build Coastguard Worker \bgroup\noexpand\macroargctxt 5877*6a54128fSAndroid Build Coastguard Worker \noexpand\braceorline 5878*6a54128fSAndroid Build Coastguard Worker \expandafter\noexpand\csname\the\macname xxx\endcsname}% 5879*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname\the\macname xxx\endcsname##1{% 5880*6a54128fSAndroid Build Coastguard Worker \egroup\noexpand\scanmacro{\temp}}% 5881*6a54128fSAndroid Build Coastguard Worker \else % many 5882*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname\the\macname\endcsname{% 5883*6a54128fSAndroid Build Coastguard Worker \bgroup\noexpand\macroargctxt 5884*6a54128fSAndroid Build Coastguard Worker \noexpand\csname\the\macname xx\endcsname}% 5885*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname\the\macname xx\endcsname##1{% 5886*6a54128fSAndroid Build Coastguard Worker \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% 5887*6a54128fSAndroid Build Coastguard Worker \expandafter\expandafter 5888*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef 5889*6a54128fSAndroid Build Coastguard Worker \expandafter\expandafter 5890*6a54128fSAndroid Build Coastguard Worker \csname\the\macname xxx\endcsname 5891*6a54128fSAndroid Build Coastguard Worker \paramlist{\egroup\noexpand\scanmacro{\temp}}% 5892*6a54128fSAndroid Build Coastguard Worker \fi 5893*6a54128fSAndroid Build Coastguard Worker \else 5894*6a54128fSAndroid Build Coastguard Worker \ifcase\paramno 5895*6a54128fSAndroid Build Coastguard Worker % 0 5896*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname\the\macname\endcsname{% 5897*6a54128fSAndroid Build Coastguard Worker \noexpand\norecurse{\the\macname}% 5898*6a54128fSAndroid Build Coastguard Worker \noexpand\scanmacro{\temp}\egroup}% 5899*6a54128fSAndroid Build Coastguard Worker \or % 1 5900*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname\the\macname\endcsname{% 5901*6a54128fSAndroid Build Coastguard Worker \bgroup\noexpand\macroargctxt 5902*6a54128fSAndroid Build Coastguard Worker \noexpand\braceorline 5903*6a54128fSAndroid Build Coastguard Worker \expandafter\noexpand\csname\the\macname xxx\endcsname}% 5904*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname\the\macname xxx\endcsname##1{% 5905*6a54128fSAndroid Build Coastguard Worker \egroup 5906*6a54128fSAndroid Build Coastguard Worker \noexpand\norecurse{\the\macname}% 5907*6a54128fSAndroid Build Coastguard Worker \noexpand\scanmacro{\temp}\egroup}% 5908*6a54128fSAndroid Build Coastguard Worker \else % many 5909*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname\the\macname\endcsname{% 5910*6a54128fSAndroid Build Coastguard Worker \bgroup\noexpand\macroargctxt 5911*6a54128fSAndroid Build Coastguard Worker \expandafter\noexpand\csname\the\macname xx\endcsname}% 5912*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname\the\macname xx\endcsname##1{% 5913*6a54128fSAndroid Build Coastguard Worker \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% 5914*6a54128fSAndroid Build Coastguard Worker \expandafter\expandafter 5915*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef 5916*6a54128fSAndroid Build Coastguard Worker \expandafter\expandafter 5917*6a54128fSAndroid Build Coastguard Worker \csname\the\macname xxx\endcsname 5918*6a54128fSAndroid Build Coastguard Worker \paramlist{% 5919*6a54128fSAndroid Build Coastguard Worker \egroup 5920*6a54128fSAndroid Build Coastguard Worker \noexpand\norecurse{\the\macname}% 5921*6a54128fSAndroid Build Coastguard Worker \noexpand\scanmacro{\temp}\egroup}% 5922*6a54128fSAndroid Build Coastguard Worker \fi 5923*6a54128fSAndroid Build Coastguard Worker \fi} 5924*6a54128fSAndroid Build Coastguard Worker 5925*6a54128fSAndroid Build Coastguard Worker\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} 5926*6a54128fSAndroid Build Coastguard Worker 5927*6a54128fSAndroid Build Coastguard Worker% \braceorline decides whether the next nonwhitespace character is a 5928*6a54128fSAndroid Build Coastguard Worker% {. If so it reads up to the closing }, if not, it reads the whole 5929*6a54128fSAndroid Build Coastguard Worker% line. Whatever was read is then fed to the next control sequence 5930*6a54128fSAndroid Build Coastguard Worker% as an argument (by \parsebrace or \parsearg) 5931*6a54128fSAndroid Build Coastguard Worker\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} 5932*6a54128fSAndroid Build Coastguard Worker\def\braceorlinexxx{% 5933*6a54128fSAndroid Build Coastguard Worker \ifx\nchar\bgroup\else 5934*6a54128fSAndroid Build Coastguard Worker \expandafter\parsearg 5935*6a54128fSAndroid Build Coastguard Worker \fi \next} 5936*6a54128fSAndroid Build Coastguard Worker 5937*6a54128fSAndroid Build Coastguard Worker 5938*6a54128fSAndroid Build Coastguard Worker% @alias. 5939*6a54128fSAndroid Build Coastguard Worker% We need some trickery to remove the optional spaces around the equal 5940*6a54128fSAndroid Build Coastguard Worker% sign. Just make them active and then expand them all to nothing. 5941*6a54128fSAndroid Build Coastguard Worker\def\alias{\parseargusing\obeyspaces\aliasxxx} 5942*6a54128fSAndroid Build Coastguard Worker\def\aliasxxx #1{\aliasyyy#1\relax} 5943*6a54128fSAndroid Build Coastguard Worker\def\aliasyyy #1=#2\relax{% 5944*6a54128fSAndroid Build Coastguard Worker {% 5945*6a54128fSAndroid Build Coastguard Worker \expandafter\let\obeyedspace=\empty 5946*6a54128fSAndroid Build Coastguard Worker \addtomacrolist{#1}% 5947*6a54128fSAndroid Build Coastguard Worker \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% 5948*6a54128fSAndroid Build Coastguard Worker }% 5949*6a54128fSAndroid Build Coastguard Worker \next 5950*6a54128fSAndroid Build Coastguard Worker} 5951*6a54128fSAndroid Build Coastguard Worker 5952*6a54128fSAndroid Build Coastguard Worker 5953*6a54128fSAndroid Build Coastguard Worker\message{cross references,} 5954*6a54128fSAndroid Build Coastguard Worker 5955*6a54128fSAndroid Build Coastguard Worker\newwrite\auxfile 5956*6a54128fSAndroid Build Coastguard Worker 5957*6a54128fSAndroid Build Coastguard Worker\newif\ifhavexrefs % True if xref values are known. 5958*6a54128fSAndroid Build Coastguard Worker\newif\ifwarnedxrefs % True if we warned once that they aren't known. 5959*6a54128fSAndroid Build Coastguard Worker 5960*6a54128fSAndroid Build Coastguard Worker% @inforef is relatively simple. 5961*6a54128fSAndroid Build Coastguard Worker\def\inforef #1{\inforefzzz #1,,,,**} 5962*6a54128fSAndroid Build Coastguard Worker\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, 5963*6a54128fSAndroid Build Coastguard Worker node \samp{\ignorespaces#1{}}} 5964*6a54128fSAndroid Build Coastguard Worker 5965*6a54128fSAndroid Build Coastguard Worker% @node's only job in TeX is to define \lastnode, which is used in 5966*6a54128fSAndroid Build Coastguard Worker% cross-references. The @node line might or might not have commas, and 5967*6a54128fSAndroid Build Coastguard Worker% might or might not have spaces before the first comma, like: 5968*6a54128fSAndroid Build Coastguard Worker% @node foo , bar , ... 5969*6a54128fSAndroid Build Coastguard Worker% We don't want such trailing spaces in the node name. 5970*6a54128fSAndroid Build Coastguard Worker% 5971*6a54128fSAndroid Build Coastguard Worker\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} 5972*6a54128fSAndroid Build Coastguard Worker% 5973*6a54128fSAndroid Build Coastguard Worker% also remove a trailing comma, in case of something like this: 5974*6a54128fSAndroid Build Coastguard Worker% @node Help-Cross, , , Cross-refs 5975*6a54128fSAndroid Build Coastguard Worker\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} 5976*6a54128fSAndroid Build Coastguard Worker\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} 5977*6a54128fSAndroid Build Coastguard Worker 5978*6a54128fSAndroid Build Coastguard Worker\let\nwnode=\node 5979*6a54128fSAndroid Build Coastguard Worker\let\lastnode=\empty 5980*6a54128fSAndroid Build Coastguard Worker 5981*6a54128fSAndroid Build Coastguard Worker% Write a cross-reference definition for the current node. #1 is the 5982*6a54128fSAndroid Build Coastguard Worker% type (Ynumbered, Yappendix, Ynothing). 5983*6a54128fSAndroid Build Coastguard Worker% 5984*6a54128fSAndroid Build Coastguard Worker\def\donoderef#1{% 5985*6a54128fSAndroid Build Coastguard Worker \ifx\lastnode\empty\else 5986*6a54128fSAndroid Build Coastguard Worker \setref{\lastnode}{#1}% 5987*6a54128fSAndroid Build Coastguard Worker \global\let\lastnode=\empty 5988*6a54128fSAndroid Build Coastguard Worker \fi 5989*6a54128fSAndroid Build Coastguard Worker} 5990*6a54128fSAndroid Build Coastguard Worker 5991*6a54128fSAndroid Build Coastguard Worker% @anchor{NAME} -- define xref target at arbitrary point. 5992*6a54128fSAndroid Build Coastguard Worker% 5993*6a54128fSAndroid Build Coastguard Worker\newcount\savesfregister 5994*6a54128fSAndroid Build Coastguard Worker% 5995*6a54128fSAndroid Build Coastguard Worker\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} 5996*6a54128fSAndroid Build Coastguard Worker\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} 5997*6a54128fSAndroid Build Coastguard Worker\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} 5998*6a54128fSAndroid Build Coastguard Worker 5999*6a54128fSAndroid Build Coastguard Worker% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an 6000*6a54128fSAndroid Build Coastguard Worker% anchor), which consists of three parts: 6001*6a54128fSAndroid Build Coastguard Worker% 1) NAME-title - the current sectioning name taken from \thissection, 6002*6a54128fSAndroid Build Coastguard Worker% or the anchor name. 6003*6a54128fSAndroid Build Coastguard Worker% 2) NAME-snt - section number and type, passed as the SNT arg, or 6004*6a54128fSAndroid Build Coastguard Worker% empty for anchors. 6005*6a54128fSAndroid Build Coastguard Worker% 3) NAME-pg - the page number. 6006*6a54128fSAndroid Build Coastguard Worker% 6007*6a54128fSAndroid Build Coastguard Worker% This is called from \donoderef, \anchor, and \dofloat. In the case of 6008*6a54128fSAndroid Build Coastguard Worker% floats, there is an additional part, which is not written here: 6009*6a54128fSAndroid Build Coastguard Worker% 4) NAME-lof - the text as it should appear in a @listoffloats. 6010*6a54128fSAndroid Build Coastguard Worker% 6011*6a54128fSAndroid Build Coastguard Worker\def\setref#1#2{% 6012*6a54128fSAndroid Build Coastguard Worker \pdfmkdest{#1}% 6013*6a54128fSAndroid Build Coastguard Worker \iflinks 6014*6a54128fSAndroid Build Coastguard Worker {% 6015*6a54128fSAndroid Build Coastguard Worker \atdummies % preserve commands, but don't expand them 6016*6a54128fSAndroid Build Coastguard Worker \edef\writexrdef##1##2{% 6017*6a54128fSAndroid Build Coastguard Worker \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef 6018*6a54128fSAndroid Build Coastguard Worker ##1}{##2}}% these are parameters of \writexrdef 6019*6a54128fSAndroid Build Coastguard Worker }% 6020*6a54128fSAndroid Build Coastguard Worker \toks0 = \expandafter{\thissection}% 6021*6a54128fSAndroid Build Coastguard Worker \immediate \writexrdef{title}{\the\toks0 }% 6022*6a54128fSAndroid Build Coastguard Worker \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. 6023*6a54128fSAndroid Build Coastguard Worker \writexrdef{pg}{\folio}% will be written later, during \shipout 6024*6a54128fSAndroid Build Coastguard Worker }% 6025*6a54128fSAndroid Build Coastguard Worker \fi 6026*6a54128fSAndroid Build Coastguard Worker} 6027*6a54128fSAndroid Build Coastguard Worker 6028*6a54128fSAndroid Build Coastguard Worker% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is 6029*6a54128fSAndroid Build Coastguard Worker% the node name, #2 the name of the Info cross-reference, #3 the printed 6030*6a54128fSAndroid Build Coastguard Worker% node name, #4 the name of the Info file, #5 the name of the printed 6031*6a54128fSAndroid Build Coastguard Worker% manual. All but the node name can be omitted. 6032*6a54128fSAndroid Build Coastguard Worker% 6033*6a54128fSAndroid Build Coastguard Worker\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} 6034*6a54128fSAndroid Build Coastguard Worker\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} 6035*6a54128fSAndroid Build Coastguard Worker\def\ref#1{\xrefX[#1,,,,,,,]} 6036*6a54128fSAndroid Build Coastguard Worker\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup 6037*6a54128fSAndroid Build Coastguard Worker \unsepspaces 6038*6a54128fSAndroid Build Coastguard Worker \def\printedmanual{\ignorespaces #5}% 6039*6a54128fSAndroid Build Coastguard Worker \def\printedrefname{\ignorespaces #3}% 6040*6a54128fSAndroid Build Coastguard Worker \setbox1=\hbox{\printedmanual\unskip}% 6041*6a54128fSAndroid Build Coastguard Worker \setbox0=\hbox{\printedrefname\unskip}% 6042*6a54128fSAndroid Build Coastguard Worker \ifdim \wd0 = 0pt 6043*6a54128fSAndroid Build Coastguard Worker % No printed node name was explicitly given. 6044*6a54128fSAndroid Build Coastguard Worker \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax 6045*6a54128fSAndroid Build Coastguard Worker % Use the node name inside the square brackets. 6046*6a54128fSAndroid Build Coastguard Worker \def\printedrefname{\ignorespaces #1}% 6047*6a54128fSAndroid Build Coastguard Worker \else 6048*6a54128fSAndroid Build Coastguard Worker % Use the actual chapter/section title appear inside 6049*6a54128fSAndroid Build Coastguard Worker % the square brackets. Use the real section title if we have it. 6050*6a54128fSAndroid Build Coastguard Worker \ifdim \wd1 > 0pt 6051*6a54128fSAndroid Build Coastguard Worker % It is in another manual, so we don't have it. 6052*6a54128fSAndroid Build Coastguard Worker \def\printedrefname{\ignorespaces #1}% 6053*6a54128fSAndroid Build Coastguard Worker \else 6054*6a54128fSAndroid Build Coastguard Worker \ifhavexrefs 6055*6a54128fSAndroid Build Coastguard Worker % We know the real title if we have the xref values. 6056*6a54128fSAndroid Build Coastguard Worker \def\printedrefname{\refx{#1-title}{}}% 6057*6a54128fSAndroid Build Coastguard Worker \else 6058*6a54128fSAndroid Build Coastguard Worker % Otherwise just copy the Info node name. 6059*6a54128fSAndroid Build Coastguard Worker \def\printedrefname{\ignorespaces #1}% 6060*6a54128fSAndroid Build Coastguard Worker \fi% 6061*6a54128fSAndroid Build Coastguard Worker \fi 6062*6a54128fSAndroid Build Coastguard Worker \fi 6063*6a54128fSAndroid Build Coastguard Worker \fi 6064*6a54128fSAndroid Build Coastguard Worker % 6065*6a54128fSAndroid Build Coastguard Worker % Make link in pdf output. 6066*6a54128fSAndroid Build Coastguard Worker \ifpdf 6067*6a54128fSAndroid Build Coastguard Worker \leavevmode 6068*6a54128fSAndroid Build Coastguard Worker \getfilename{#4}% 6069*6a54128fSAndroid Build Coastguard Worker {\turnoffactive 6070*6a54128fSAndroid Build Coastguard Worker % See comments at \activebackslashdouble. 6071*6a54128fSAndroid Build Coastguard Worker {\activebackslashdouble \xdef\pdfxrefdest{#1}% 6072*6a54128fSAndroid Build Coastguard Worker \backslashparens\pdfxrefdest}% 6073*6a54128fSAndroid Build Coastguard Worker % 6074*6a54128fSAndroid Build Coastguard Worker \ifnum\filenamelength>0 6075*6a54128fSAndroid Build Coastguard Worker \startlink attr{/Border [0 0 0]}% 6076*6a54128fSAndroid Build Coastguard Worker goto file{\the\filename.pdf} name{\pdfxrefdest}% 6077*6a54128fSAndroid Build Coastguard Worker \else 6078*6a54128fSAndroid Build Coastguard Worker \startlink attr{/Border [0 0 0]}% 6079*6a54128fSAndroid Build Coastguard Worker goto name{\pdfmkpgn{\pdfxrefdest}}% 6080*6a54128fSAndroid Build Coastguard Worker \fi 6081*6a54128fSAndroid Build Coastguard Worker }% 6082*6a54128fSAndroid Build Coastguard Worker \linkcolor 6083*6a54128fSAndroid Build Coastguard Worker \fi 6084*6a54128fSAndroid Build Coastguard Worker % 6085*6a54128fSAndroid Build Coastguard Worker % Float references are printed completely differently: "Figure 1.2" 6086*6a54128fSAndroid Build Coastguard Worker % instead of "[somenode], p.3". We distinguish them by the 6087*6a54128fSAndroid Build Coastguard Worker % LABEL-title being set to a magic string. 6088*6a54128fSAndroid Build Coastguard Worker {% 6089*6a54128fSAndroid Build Coastguard Worker % Have to otherify everything special to allow the \csname to 6090*6a54128fSAndroid Build Coastguard Worker % include an _ in the xref name, etc. 6091*6a54128fSAndroid Build Coastguard Worker \indexnofonts 6092*6a54128fSAndroid Build Coastguard Worker \turnoffactive 6093*6a54128fSAndroid Build Coastguard Worker \expandafter\global\expandafter\let\expandafter\Xthisreftitle 6094*6a54128fSAndroid Build Coastguard Worker \csname XR#1-title\endcsname 6095*6a54128fSAndroid Build Coastguard Worker }% 6096*6a54128fSAndroid Build Coastguard Worker \iffloat\Xthisreftitle 6097*6a54128fSAndroid Build Coastguard Worker % If the user specified the print name (third arg) to the ref, 6098*6a54128fSAndroid Build Coastguard Worker % print it instead of our usual "Figure 1.2". 6099*6a54128fSAndroid Build Coastguard Worker \ifdim\wd0 = 0pt 6100*6a54128fSAndroid Build Coastguard Worker \refx{#1-snt}{}% 6101*6a54128fSAndroid Build Coastguard Worker \else 6102*6a54128fSAndroid Build Coastguard Worker \printedrefname 6103*6a54128fSAndroid Build Coastguard Worker \fi 6104*6a54128fSAndroid Build Coastguard Worker % 6105*6a54128fSAndroid Build Coastguard Worker % if the user also gave the printed manual name (fifth arg), append 6106*6a54128fSAndroid Build Coastguard Worker % "in MANUALNAME". 6107*6a54128fSAndroid Build Coastguard Worker \ifdim \wd1 > 0pt 6108*6a54128fSAndroid Build Coastguard Worker \space \putwordin{} \cite{\printedmanual}% 6109*6a54128fSAndroid Build Coastguard Worker \fi 6110*6a54128fSAndroid Build Coastguard Worker \else 6111*6a54128fSAndroid Build Coastguard Worker % node/anchor (non-float) references. 6112*6a54128fSAndroid Build Coastguard Worker % 6113*6a54128fSAndroid Build Coastguard Worker % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not 6114*6a54128fSAndroid Build Coastguard Worker % insert empty discretionaries after hyphens, which means that it will 6115*6a54128fSAndroid Build Coastguard Worker % not find a line break at a hyphen in a node names. Since some manuals 6116*6a54128fSAndroid Build Coastguard Worker % are best written with fairly long node names, containing hyphens, this 6117*6a54128fSAndroid Build Coastguard Worker % is a loss. Therefore, we give the text of the node name again, so it 6118*6a54128fSAndroid Build Coastguard Worker % is as if TeX is seeing it for the first time. 6119*6a54128fSAndroid Build Coastguard Worker \ifdim \wd1 > 0pt 6120*6a54128fSAndroid Build Coastguard Worker \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% 6121*6a54128fSAndroid Build Coastguard Worker \else 6122*6a54128fSAndroid Build Coastguard Worker % _ (for example) has to be the character _ for the purposes of the 6123*6a54128fSAndroid Build Coastguard Worker % control sequence corresponding to the node, but it has to expand 6124*6a54128fSAndroid Build Coastguard Worker % into the usual \leavevmode...\vrule stuff for purposes of 6125*6a54128fSAndroid Build Coastguard Worker % printing. So we \turnoffactive for the \refx-snt, back on for the 6126*6a54128fSAndroid Build Coastguard Worker % printing, back off for the \refx-pg. 6127*6a54128fSAndroid Build Coastguard Worker {\turnoffactive 6128*6a54128fSAndroid Build Coastguard Worker % Only output a following space if the -snt ref is nonempty; for 6129*6a54128fSAndroid Build Coastguard Worker % @unnumbered and @anchor, it won't be. 6130*6a54128fSAndroid Build Coastguard Worker \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% 6131*6a54128fSAndroid Build Coastguard Worker \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi 6132*6a54128fSAndroid Build Coastguard Worker }% 6133*6a54128fSAndroid Build Coastguard Worker % output the `[mynode]' via a macro so it can be overridden. 6134*6a54128fSAndroid Build Coastguard Worker \xrefprintnodename\printedrefname 6135*6a54128fSAndroid Build Coastguard Worker % 6136*6a54128fSAndroid Build Coastguard Worker % But we always want a comma and a space: 6137*6a54128fSAndroid Build Coastguard Worker ,\space 6138*6a54128fSAndroid Build Coastguard Worker % 6139*6a54128fSAndroid Build Coastguard Worker % output the `page 3'. 6140*6a54128fSAndroid Build Coastguard Worker \turnoffactive \putwordpage\tie\refx{#1-pg}{}% 6141*6a54128fSAndroid Build Coastguard Worker \fi 6142*6a54128fSAndroid Build Coastguard Worker \fi 6143*6a54128fSAndroid Build Coastguard Worker \endlink 6144*6a54128fSAndroid Build Coastguard Worker\endgroup} 6145*6a54128fSAndroid Build Coastguard Worker 6146*6a54128fSAndroid Build Coastguard Worker% This macro is called from \xrefX for the `[nodename]' part of xref 6147*6a54128fSAndroid Build Coastguard Worker% output. It's a separate macro only so it can be changed more easily, 6148*6a54128fSAndroid Build Coastguard Worker% since square brackets don't work well in some documents. Particularly 6149*6a54128fSAndroid Build Coastguard Worker% one that Bob is working on :). 6150*6a54128fSAndroid Build Coastguard Worker% 6151*6a54128fSAndroid Build Coastguard Worker\def\xrefprintnodename#1{[#1]} 6152*6a54128fSAndroid Build Coastguard Worker 6153*6a54128fSAndroid Build Coastguard Worker% Things referred to by \setref. 6154*6a54128fSAndroid Build Coastguard Worker% 6155*6a54128fSAndroid Build Coastguard Worker\def\Ynothing{} 6156*6a54128fSAndroid Build Coastguard Worker\def\Yomitfromtoc{} 6157*6a54128fSAndroid Build Coastguard Worker\def\Ynumbered{% 6158*6a54128fSAndroid Build Coastguard Worker \ifnum\secno=0 6159*6a54128fSAndroid Build Coastguard Worker \putwordChapter@tie \the\chapno 6160*6a54128fSAndroid Build Coastguard Worker \else \ifnum\subsecno=0 6161*6a54128fSAndroid Build Coastguard Worker \putwordSection@tie \the\chapno.\the\secno 6162*6a54128fSAndroid Build Coastguard Worker \else \ifnum\subsubsecno=0 6163*6a54128fSAndroid Build Coastguard Worker \putwordSection@tie \the\chapno.\the\secno.\the\subsecno 6164*6a54128fSAndroid Build Coastguard Worker \else 6165*6a54128fSAndroid Build Coastguard Worker \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno 6166*6a54128fSAndroid Build Coastguard Worker \fi\fi\fi 6167*6a54128fSAndroid Build Coastguard Worker} 6168*6a54128fSAndroid Build Coastguard Worker\def\Yappendix{% 6169*6a54128fSAndroid Build Coastguard Worker \ifnum\secno=0 6170*6a54128fSAndroid Build Coastguard Worker \putwordAppendix@tie @char\the\appendixno{}% 6171*6a54128fSAndroid Build Coastguard Worker \else \ifnum\subsecno=0 6172*6a54128fSAndroid Build Coastguard Worker \putwordSection@tie @char\the\appendixno.\the\secno 6173*6a54128fSAndroid Build Coastguard Worker \else \ifnum\subsubsecno=0 6174*6a54128fSAndroid Build Coastguard Worker \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno 6175*6a54128fSAndroid Build Coastguard Worker \else 6176*6a54128fSAndroid Build Coastguard Worker \putwordSection@tie 6177*6a54128fSAndroid Build Coastguard Worker @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno 6178*6a54128fSAndroid Build Coastguard Worker \fi\fi\fi 6179*6a54128fSAndroid Build Coastguard Worker} 6180*6a54128fSAndroid Build Coastguard Worker 6181*6a54128fSAndroid Build Coastguard Worker% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. 6182*6a54128fSAndroid Build Coastguard Worker% If its value is nonempty, SUFFIX is output afterward. 6183*6a54128fSAndroid Build Coastguard Worker% 6184*6a54128fSAndroid Build Coastguard Worker\def\refx#1#2{% 6185*6a54128fSAndroid Build Coastguard Worker {% 6186*6a54128fSAndroid Build Coastguard Worker \indexnofonts 6187*6a54128fSAndroid Build Coastguard Worker \otherbackslash 6188*6a54128fSAndroid Build Coastguard Worker \expandafter\global\expandafter\let\expandafter\thisrefX 6189*6a54128fSAndroid Build Coastguard Worker \csname XR#1\endcsname 6190*6a54128fSAndroid Build Coastguard Worker }% 6191*6a54128fSAndroid Build Coastguard Worker \ifx\thisrefX\relax 6192*6a54128fSAndroid Build Coastguard Worker % If not defined, say something at least. 6193*6a54128fSAndroid Build Coastguard Worker \angleleft un\-de\-fined\angleright 6194*6a54128fSAndroid Build Coastguard Worker \iflinks 6195*6a54128fSAndroid Build Coastguard Worker \ifhavexrefs 6196*6a54128fSAndroid Build Coastguard Worker \message{\linenumber Undefined cross reference `#1'.}% 6197*6a54128fSAndroid Build Coastguard Worker \else 6198*6a54128fSAndroid Build Coastguard Worker \ifwarnedxrefs\else 6199*6a54128fSAndroid Build Coastguard Worker \global\warnedxrefstrue 6200*6a54128fSAndroid Build Coastguard Worker \message{Cross reference values unknown; you must run TeX again.}% 6201*6a54128fSAndroid Build Coastguard Worker \fi 6202*6a54128fSAndroid Build Coastguard Worker \fi 6203*6a54128fSAndroid Build Coastguard Worker \fi 6204*6a54128fSAndroid Build Coastguard Worker \else 6205*6a54128fSAndroid Build Coastguard Worker % It's defined, so just use it. 6206*6a54128fSAndroid Build Coastguard Worker \thisrefX 6207*6a54128fSAndroid Build Coastguard Worker \fi 6208*6a54128fSAndroid Build Coastguard Worker #2% Output the suffix in any case. 6209*6a54128fSAndroid Build Coastguard Worker} 6210*6a54128fSAndroid Build Coastguard Worker 6211*6a54128fSAndroid Build Coastguard Worker% This is the macro invoked by entries in the aux file. Usually it's 6212*6a54128fSAndroid Build Coastguard Worker% just a \def (we prepend XR to the control sequence name to avoid 6213*6a54128fSAndroid Build Coastguard Worker% collisions). But if this is a float type, we have more work to do. 6214*6a54128fSAndroid Build Coastguard Worker% 6215*6a54128fSAndroid Build Coastguard Worker\def\xrdef#1#2{% 6216*6a54128fSAndroid Build Coastguard Worker \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value. 6217*6a54128fSAndroid Build Coastguard Worker % 6218*6a54128fSAndroid Build Coastguard Worker % Was that xref control sequence that we just defined for a float? 6219*6a54128fSAndroid Build Coastguard Worker \expandafter\iffloat\csname XR#1\endcsname 6220*6a54128fSAndroid Build Coastguard Worker % it was a float, and we have the (safe) float type in \iffloattype. 6221*6a54128fSAndroid Build Coastguard Worker \expandafter\let\expandafter\floatlist 6222*6a54128fSAndroid Build Coastguard Worker \csname floatlist\iffloattype\endcsname 6223*6a54128fSAndroid Build Coastguard Worker % 6224*6a54128fSAndroid Build Coastguard Worker % Is this the first time we've seen this float type? 6225*6a54128fSAndroid Build Coastguard Worker \expandafter\ifx\floatlist\relax 6226*6a54128fSAndroid Build Coastguard Worker \toks0 = {\do}% yes, so just \do 6227*6a54128fSAndroid Build Coastguard Worker \else 6228*6a54128fSAndroid Build Coastguard Worker % had it before, so preserve previous elements in list. 6229*6a54128fSAndroid Build Coastguard Worker \toks0 = \expandafter{\floatlist\do}% 6230*6a54128fSAndroid Build Coastguard Worker \fi 6231*6a54128fSAndroid Build Coastguard Worker % 6232*6a54128fSAndroid Build Coastguard Worker % Remember this xref in the control sequence \floatlistFLOATTYPE, 6233*6a54128fSAndroid Build Coastguard Worker % for later use in \listoffloats. 6234*6a54128fSAndroid Build Coastguard Worker \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}% 6235*6a54128fSAndroid Build Coastguard Worker \fi 6236*6a54128fSAndroid Build Coastguard Worker} 6237*6a54128fSAndroid Build Coastguard Worker 6238*6a54128fSAndroid Build Coastguard Worker% Read the last existing aux file, if any. No error if none exists. 6239*6a54128fSAndroid Build Coastguard Worker% 6240*6a54128fSAndroid Build Coastguard Worker\def\tryauxfile{% 6241*6a54128fSAndroid Build Coastguard Worker \openin 1 \jobname.aux 6242*6a54128fSAndroid Build Coastguard Worker \ifeof 1 \else 6243*6a54128fSAndroid Build Coastguard Worker \readdatafile{aux}% 6244*6a54128fSAndroid Build Coastguard Worker \global\havexrefstrue 6245*6a54128fSAndroid Build Coastguard Worker \fi 6246*6a54128fSAndroid Build Coastguard Worker \closein 1 6247*6a54128fSAndroid Build Coastguard Worker} 6248*6a54128fSAndroid Build Coastguard Worker 6249*6a54128fSAndroid Build Coastguard Worker\def\setupdatafile{% 6250*6a54128fSAndroid Build Coastguard Worker \catcode`\^^@=\other 6251*6a54128fSAndroid Build Coastguard Worker \catcode`\^^A=\other 6252*6a54128fSAndroid Build Coastguard Worker \catcode`\^^B=\other 6253*6a54128fSAndroid Build Coastguard Worker \catcode`\^^C=\other 6254*6a54128fSAndroid Build Coastguard Worker \catcode`\^^D=\other 6255*6a54128fSAndroid Build Coastguard Worker \catcode`\^^E=\other 6256*6a54128fSAndroid Build Coastguard Worker \catcode`\^^F=\other 6257*6a54128fSAndroid Build Coastguard Worker \catcode`\^^G=\other 6258*6a54128fSAndroid Build Coastguard Worker \catcode`\^^H=\other 6259*6a54128fSAndroid Build Coastguard Worker \catcode`\^^K=\other 6260*6a54128fSAndroid Build Coastguard Worker \catcode`\^^L=\other 6261*6a54128fSAndroid Build Coastguard Worker \catcode`\^^N=\other 6262*6a54128fSAndroid Build Coastguard Worker \catcode`\^^P=\other 6263*6a54128fSAndroid Build Coastguard Worker \catcode`\^^Q=\other 6264*6a54128fSAndroid Build Coastguard Worker \catcode`\^^R=\other 6265*6a54128fSAndroid Build Coastguard Worker \catcode`\^^S=\other 6266*6a54128fSAndroid Build Coastguard Worker \catcode`\^^T=\other 6267*6a54128fSAndroid Build Coastguard Worker \catcode`\^^U=\other 6268*6a54128fSAndroid Build Coastguard Worker \catcode`\^^V=\other 6269*6a54128fSAndroid Build Coastguard Worker \catcode`\^^W=\other 6270*6a54128fSAndroid Build Coastguard Worker \catcode`\^^X=\other 6271*6a54128fSAndroid Build Coastguard Worker \catcode`\^^Z=\other 6272*6a54128fSAndroid Build Coastguard Worker \catcode`\^^[=\other 6273*6a54128fSAndroid Build Coastguard Worker \catcode`\^^\=\other 6274*6a54128fSAndroid Build Coastguard Worker \catcode`\^^]=\other 6275*6a54128fSAndroid Build Coastguard Worker \catcode`\^^^=\other 6276*6a54128fSAndroid Build Coastguard Worker \catcode`\^^_=\other 6277*6a54128fSAndroid Build Coastguard Worker % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. 6278*6a54128fSAndroid Build Coastguard Worker % in xref tags, i.e., node names. But since ^^e4 notation isn't 6279*6a54128fSAndroid Build Coastguard Worker % supported in the main text, it doesn't seem desirable. Furthermore, 6280*6a54128fSAndroid Build Coastguard Worker % that is not enough: for node names that actually contain a ^ 6281*6a54128fSAndroid Build Coastguard Worker % character, we would end up writing a line like this: 'xrdef {'hat 6282*6a54128fSAndroid Build Coastguard Worker % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first 6283*6a54128fSAndroid Build Coastguard Worker % argument, and \hat is not an expandable control sequence. It could 6284*6a54128fSAndroid Build Coastguard Worker % all be worked out, but why? Either we support ^^ or we don't. 6285*6a54128fSAndroid Build Coastguard Worker % 6286*6a54128fSAndroid Build Coastguard Worker % The other change necessary for this was to define \auxhat: 6287*6a54128fSAndroid Build Coastguard Worker % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter 6288*6a54128fSAndroid Build Coastguard Worker % and then to call \auxhat in \setq. 6289*6a54128fSAndroid Build Coastguard Worker % 6290*6a54128fSAndroid Build Coastguard Worker \catcode`\^=\other 6291*6a54128fSAndroid Build Coastguard Worker % 6292*6a54128fSAndroid Build Coastguard Worker % Special characters. Should be turned off anyway, but... 6293*6a54128fSAndroid Build Coastguard Worker \catcode`\~=\other 6294*6a54128fSAndroid Build Coastguard Worker \catcode`\[=\other 6295*6a54128fSAndroid Build Coastguard Worker \catcode`\]=\other 6296*6a54128fSAndroid Build Coastguard Worker \catcode`\"=\other 6297*6a54128fSAndroid Build Coastguard Worker \catcode`\_=\other 6298*6a54128fSAndroid Build Coastguard Worker \catcode`\|=\other 6299*6a54128fSAndroid Build Coastguard Worker \catcode`\<=\other 6300*6a54128fSAndroid Build Coastguard Worker \catcode`\>=\other 6301*6a54128fSAndroid Build Coastguard Worker \catcode`\$=\other 6302*6a54128fSAndroid Build Coastguard Worker \catcode`\#=\other 6303*6a54128fSAndroid Build Coastguard Worker \catcode`\&=\other 6304*6a54128fSAndroid Build Coastguard Worker \catcode`\%=\other 6305*6a54128fSAndroid Build Coastguard Worker \catcode`+=\other % avoid \+ for paranoia even though we've turned it off 6306*6a54128fSAndroid Build Coastguard Worker % 6307*6a54128fSAndroid Build Coastguard Worker % This is to support \ in node names and titles, since the \ 6308*6a54128fSAndroid Build Coastguard Worker % characters end up in a \csname. It's easier than 6309*6a54128fSAndroid Build Coastguard Worker % leaving it active and making its active definition an actual \ 6310*6a54128fSAndroid Build Coastguard Worker % character. What I don't understand is why it works in the *value* 6311*6a54128fSAndroid Build Coastguard Worker % of the xrdef. Seems like it should be a catcode12 \, and that 6312*6a54128fSAndroid Build Coastguard Worker % should not typeset properly. But it works, so I'm moving on for 6313*6a54128fSAndroid Build Coastguard Worker % now. --karl, 15jan04. 6314*6a54128fSAndroid Build Coastguard Worker \catcode`\\=\other 6315*6a54128fSAndroid Build Coastguard Worker % 6316*6a54128fSAndroid Build Coastguard Worker % Make the characters 128-255 be printing characters. 6317*6a54128fSAndroid Build Coastguard Worker {% 6318*6a54128fSAndroid Build Coastguard Worker \count1=128 6319*6a54128fSAndroid Build Coastguard Worker \def\loop{% 6320*6a54128fSAndroid Build Coastguard Worker \catcode\count1=\other 6321*6a54128fSAndroid Build Coastguard Worker \advance\count1 by 1 6322*6a54128fSAndroid Build Coastguard Worker \ifnum \count1<256 \loop \fi 6323*6a54128fSAndroid Build Coastguard Worker }% 6324*6a54128fSAndroid Build Coastguard Worker }% 6325*6a54128fSAndroid Build Coastguard Worker % 6326*6a54128fSAndroid Build Coastguard Worker % @ is our escape character in .aux files, and we need braces. 6327*6a54128fSAndroid Build Coastguard Worker \catcode`\{=1 6328*6a54128fSAndroid Build Coastguard Worker \catcode`\}=2 6329*6a54128fSAndroid Build Coastguard Worker \catcode`\@=0 6330*6a54128fSAndroid Build Coastguard Worker} 6331*6a54128fSAndroid Build Coastguard Worker 6332*6a54128fSAndroid Build Coastguard Worker\def\readdatafile#1{% 6333*6a54128fSAndroid Build Coastguard Worker\begingroup 6334*6a54128fSAndroid Build Coastguard Worker \setupdatafile 6335*6a54128fSAndroid Build Coastguard Worker \input\jobname.#1 6336*6a54128fSAndroid Build Coastguard Worker\endgroup} 6337*6a54128fSAndroid Build Coastguard Worker 6338*6a54128fSAndroid Build Coastguard Worker\message{insertions,} 6339*6a54128fSAndroid Build Coastguard Worker% including footnotes. 6340*6a54128fSAndroid Build Coastguard Worker 6341*6a54128fSAndroid Build Coastguard Worker\newcount \footnoteno 6342*6a54128fSAndroid Build Coastguard Worker 6343*6a54128fSAndroid Build Coastguard Worker% The trailing space in the following definition for supereject is 6344*6a54128fSAndroid Build Coastguard Worker% vital for proper filling; pages come out unaligned when you do a 6345*6a54128fSAndroid Build Coastguard Worker% pagealignmacro call if that space before the closing brace is 6346*6a54128fSAndroid Build Coastguard Worker% removed. (Generally, numeric constants should always be followed by a 6347*6a54128fSAndroid Build Coastguard Worker% space to prevent strange expansion errors.) 6348*6a54128fSAndroid Build Coastguard Worker\def\supereject{\par\penalty -20000\footnoteno =0 } 6349*6a54128fSAndroid Build Coastguard Worker 6350*6a54128fSAndroid Build Coastguard Worker% @footnotestyle is meaningful for info output only. 6351*6a54128fSAndroid Build Coastguard Worker\let\footnotestyle=\comment 6352*6a54128fSAndroid Build Coastguard Worker 6353*6a54128fSAndroid Build Coastguard Worker{\catcode `\@=11 6354*6a54128fSAndroid Build Coastguard Worker% 6355*6a54128fSAndroid Build Coastguard Worker% Auto-number footnotes. Otherwise like plain. 6356*6a54128fSAndroid Build Coastguard Worker\gdef\footnote{% 6357*6a54128fSAndroid Build Coastguard Worker \let\indent=\ptexindent 6358*6a54128fSAndroid Build Coastguard Worker \let\noindent=\ptexnoindent 6359*6a54128fSAndroid Build Coastguard Worker \global\advance\footnoteno by \@ne 6360*6a54128fSAndroid Build Coastguard Worker \edef\thisfootno{$^{\the\footnoteno}$}% 6361*6a54128fSAndroid Build Coastguard Worker % 6362*6a54128fSAndroid Build Coastguard Worker % In case the footnote comes at the end of a sentence, preserve the 6363*6a54128fSAndroid Build Coastguard Worker % extra spacing after we do the footnote number. 6364*6a54128fSAndroid Build Coastguard Worker \let\@sf\empty 6365*6a54128fSAndroid Build Coastguard Worker \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi 6366*6a54128fSAndroid Build Coastguard Worker % 6367*6a54128fSAndroid Build Coastguard Worker % Remove inadvertent blank space before typesetting the footnote number. 6368*6a54128fSAndroid Build Coastguard Worker \unskip 6369*6a54128fSAndroid Build Coastguard Worker \thisfootno\@sf 6370*6a54128fSAndroid Build Coastguard Worker \dofootnote 6371*6a54128fSAndroid Build Coastguard Worker}% 6372*6a54128fSAndroid Build Coastguard Worker 6373*6a54128fSAndroid Build Coastguard Worker% Don't bother with the trickery in plain.tex to not require the 6374*6a54128fSAndroid Build Coastguard Worker% footnote text as a parameter. Our footnotes don't need to be so general. 6375*6a54128fSAndroid Build Coastguard Worker% 6376*6a54128fSAndroid Build Coastguard Worker% Oh yes, they do; otherwise, @ifset (and anything else that uses 6377*6a54128fSAndroid Build Coastguard Worker% \parseargline) fails inside footnotes because the tokens are fixed when 6378*6a54128fSAndroid Build Coastguard Worker% the footnote is read. --karl, 16nov96. 6379*6a54128fSAndroid Build Coastguard Worker% 6380*6a54128fSAndroid Build Coastguard Worker\gdef\dofootnote{% 6381*6a54128fSAndroid Build Coastguard Worker \insert\footins\bgroup 6382*6a54128fSAndroid Build Coastguard Worker % We want to typeset this text as a normal paragraph, even if the 6383*6a54128fSAndroid Build Coastguard Worker % footnote reference occurs in (for example) a display environment. 6384*6a54128fSAndroid Build Coastguard Worker % So reset some parameters. 6385*6a54128fSAndroid Build Coastguard Worker \hsize=\pagewidth 6386*6a54128fSAndroid Build Coastguard Worker \interlinepenalty\interfootnotelinepenalty 6387*6a54128fSAndroid Build Coastguard Worker \splittopskip\ht\strutbox % top baseline for broken footnotes 6388*6a54128fSAndroid Build Coastguard Worker \splitmaxdepth\dp\strutbox 6389*6a54128fSAndroid Build Coastguard Worker \floatingpenalty\@MM 6390*6a54128fSAndroid Build Coastguard Worker \leftskip\z@skip 6391*6a54128fSAndroid Build Coastguard Worker \rightskip\z@skip 6392*6a54128fSAndroid Build Coastguard Worker \spaceskip\z@skip 6393*6a54128fSAndroid Build Coastguard Worker \xspaceskip\z@skip 6394*6a54128fSAndroid Build Coastguard Worker \parindent\defaultparindent 6395*6a54128fSAndroid Build Coastguard Worker % 6396*6a54128fSAndroid Build Coastguard Worker \smallfonts \rm 6397*6a54128fSAndroid Build Coastguard Worker % 6398*6a54128fSAndroid Build Coastguard Worker % Because we use hanging indentation in footnotes, a @noindent appears 6399*6a54128fSAndroid Build Coastguard Worker % to exdent this text, so make it be a no-op. makeinfo does not use 6400*6a54128fSAndroid Build Coastguard Worker % hanging indentation so @noindent can still be needed within footnote 6401*6a54128fSAndroid Build Coastguard Worker % text after an @example or the like (not that this is good style). 6402*6a54128fSAndroid Build Coastguard Worker \let\noindent = \relax 6403*6a54128fSAndroid Build Coastguard Worker % 6404*6a54128fSAndroid Build Coastguard Worker % Hang the footnote text off the number. Use \everypar in case the 6405*6a54128fSAndroid Build Coastguard Worker % footnote extends for more than one paragraph. 6406*6a54128fSAndroid Build Coastguard Worker \everypar = {\hang}% 6407*6a54128fSAndroid Build Coastguard Worker \textindent{\thisfootno}% 6408*6a54128fSAndroid Build Coastguard Worker % 6409*6a54128fSAndroid Build Coastguard Worker % Don't crash into the line above the footnote text. Since this 6410*6a54128fSAndroid Build Coastguard Worker % expands into a box, it must come within the paragraph, lest it 6411*6a54128fSAndroid Build Coastguard Worker % provide a place where TeX can split the footnote. 6412*6a54128fSAndroid Build Coastguard Worker \footstrut 6413*6a54128fSAndroid Build Coastguard Worker \futurelet\next\fo@t 6414*6a54128fSAndroid Build Coastguard Worker} 6415*6a54128fSAndroid Build Coastguard Worker}%end \catcode `\@=11 6416*6a54128fSAndroid Build Coastguard Worker 6417*6a54128fSAndroid Build Coastguard Worker% In case a @footnote appears in a vbox, save the footnote text and create 6418*6a54128fSAndroid Build Coastguard Worker% the real \insert just after the vbox finished. Otherwise, the insertion 6419*6a54128fSAndroid Build Coastguard Worker% would be lost. 6420*6a54128fSAndroid Build Coastguard Worker% Similarly, if a @footnote appears inside an alignment, save the footnote 6421*6a54128fSAndroid Build Coastguard Worker% text to a box and make the \insert when a row of the table is finished. 6422*6a54128fSAndroid Build Coastguard Worker% And the same can be done for other insert classes. --kasal, 16nov03. 6423*6a54128fSAndroid Build Coastguard Worker 6424*6a54128fSAndroid Build Coastguard Worker% Replace the \insert primitive by a cheating macro. 6425*6a54128fSAndroid Build Coastguard Worker% Deeper inside, just make sure that the saved insertions are not spilled 6426*6a54128fSAndroid Build Coastguard Worker% out prematurely. 6427*6a54128fSAndroid Build Coastguard Worker% 6428*6a54128fSAndroid Build Coastguard Worker\def\startsavinginserts{% 6429*6a54128fSAndroid Build Coastguard Worker \ifx \insert\ptexinsert 6430*6a54128fSAndroid Build Coastguard Worker \let\insert\saveinsert 6431*6a54128fSAndroid Build Coastguard Worker \else 6432*6a54128fSAndroid Build Coastguard Worker \let\checkinserts\relax 6433*6a54128fSAndroid Build Coastguard Worker \fi 6434*6a54128fSAndroid Build Coastguard Worker} 6435*6a54128fSAndroid Build Coastguard Worker 6436*6a54128fSAndroid Build Coastguard Worker% This \insert replacement works for both \insert\footins{foo} and 6437*6a54128fSAndroid Build Coastguard Worker% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. 6438*6a54128fSAndroid Build Coastguard Worker% 6439*6a54128fSAndroid Build Coastguard Worker\def\saveinsert#1{% 6440*6a54128fSAndroid Build Coastguard Worker \edef\next{\noexpand\savetobox \makeSAVEname#1}% 6441*6a54128fSAndroid Build Coastguard Worker \afterassignment\next 6442*6a54128fSAndroid Build Coastguard Worker % swallow the left brace 6443*6a54128fSAndroid Build Coastguard Worker \let\temp = 6444*6a54128fSAndroid Build Coastguard Worker} 6445*6a54128fSAndroid Build Coastguard Worker\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} 6446*6a54128fSAndroid Build Coastguard Worker\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} 6447*6a54128fSAndroid Build Coastguard Worker 6448*6a54128fSAndroid Build Coastguard Worker\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} 6449*6a54128fSAndroid Build Coastguard Worker 6450*6a54128fSAndroid Build Coastguard Worker\def\placesaveins#1{% 6451*6a54128fSAndroid Build Coastguard Worker \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname 6452*6a54128fSAndroid Build Coastguard Worker {\box#1}% 6453*6a54128fSAndroid Build Coastguard Worker} 6454*6a54128fSAndroid Build Coastguard Worker 6455*6a54128fSAndroid Build Coastguard Worker% eat @SAVE -- beware, all of them have catcode \other: 6456*6a54128fSAndroid Build Coastguard Worker{ 6457*6a54128fSAndroid Build Coastguard Worker \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) 6458*6a54128fSAndroid Build Coastguard Worker \gdef\gobblesave @SAVE{} 6459*6a54128fSAndroid Build Coastguard Worker} 6460*6a54128fSAndroid Build Coastguard Worker 6461*6a54128fSAndroid Build Coastguard Worker% initialization: 6462*6a54128fSAndroid Build Coastguard Worker\def\newsaveins #1{% 6463*6a54128fSAndroid Build Coastguard Worker \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% 6464*6a54128fSAndroid Build Coastguard Worker \next 6465*6a54128fSAndroid Build Coastguard Worker} 6466*6a54128fSAndroid Build Coastguard Worker\def\newsaveinsX #1{% 6467*6a54128fSAndroid Build Coastguard Worker \csname newbox\endcsname #1% 6468*6a54128fSAndroid Build Coastguard Worker \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts 6469*6a54128fSAndroid Build Coastguard Worker \checksaveins #1}% 6470*6a54128fSAndroid Build Coastguard Worker} 6471*6a54128fSAndroid Build Coastguard Worker 6472*6a54128fSAndroid Build Coastguard Worker% initialize: 6473*6a54128fSAndroid Build Coastguard Worker\let\checkinserts\empty 6474*6a54128fSAndroid Build Coastguard Worker\newsaveins\footins 6475*6a54128fSAndroid Build Coastguard Worker\newsaveins\margin 6476*6a54128fSAndroid Build Coastguard Worker 6477*6a54128fSAndroid Build Coastguard Worker 6478*6a54128fSAndroid Build Coastguard Worker% @image. We use the macros from epsf.tex to support this. 6479*6a54128fSAndroid Build Coastguard Worker% If epsf.tex is not installed and @image is used, we complain. 6480*6a54128fSAndroid Build Coastguard Worker% 6481*6a54128fSAndroid Build Coastguard Worker% Check for and read epsf.tex up front. If we read it only at @image 6482*6a54128fSAndroid Build Coastguard Worker% time, we might be inside a group, and then its definitions would get 6483*6a54128fSAndroid Build Coastguard Worker% undone and the next image would fail. 6484*6a54128fSAndroid Build Coastguard Worker\openin 1 = epsf.tex 6485*6a54128fSAndroid Build Coastguard Worker\ifeof 1 \else 6486*6a54128fSAndroid Build Coastguard Worker % Do not bother showing banner with epsf.tex v2.7k (available in 6487*6a54128fSAndroid Build Coastguard Worker % doc/epsf.tex and on ctan). 6488*6a54128fSAndroid Build Coastguard Worker \def\epsfannounce{\toks0 = }% 6489*6a54128fSAndroid Build Coastguard Worker \input epsf.tex 6490*6a54128fSAndroid Build Coastguard Worker\fi 6491*6a54128fSAndroid Build Coastguard Worker\closein 1 6492*6a54128fSAndroid Build Coastguard Worker% 6493*6a54128fSAndroid Build Coastguard Worker% We will only complain once about lack of epsf.tex. 6494*6a54128fSAndroid Build Coastguard Worker\newif\ifwarnednoepsf 6495*6a54128fSAndroid Build Coastguard Worker\newhelp\noepsfhelp{epsf.tex must be installed for images to 6496*6a54128fSAndroid Build Coastguard Worker work. It is also included in the Texinfo distribution, or you can get 6497*6a54128fSAndroid Build Coastguard Worker it from ftp://tug.org/tex/epsf.tex.} 6498*6a54128fSAndroid Build Coastguard Worker% 6499*6a54128fSAndroid Build Coastguard Worker\def\image#1{% 6500*6a54128fSAndroid Build Coastguard Worker \ifx\epsfbox\undefined 6501*6a54128fSAndroid Build Coastguard Worker \ifwarnednoepsf \else 6502*6a54128fSAndroid Build Coastguard Worker \errhelp = \noepsfhelp 6503*6a54128fSAndroid Build Coastguard Worker \errmessage{epsf.tex not found, images will be ignored}% 6504*6a54128fSAndroid Build Coastguard Worker \global\warnednoepsftrue 6505*6a54128fSAndroid Build Coastguard Worker \fi 6506*6a54128fSAndroid Build Coastguard Worker \else 6507*6a54128fSAndroid Build Coastguard Worker \imagexxx #1,,,,,\finish 6508*6a54128fSAndroid Build Coastguard Worker \fi 6509*6a54128fSAndroid Build Coastguard Worker} 6510*6a54128fSAndroid Build Coastguard Worker% 6511*6a54128fSAndroid Build Coastguard Worker% Arguments to @image: 6512*6a54128fSAndroid Build Coastguard Worker% #1 is (mandatory) image filename; we tack on .eps extension. 6513*6a54128fSAndroid Build Coastguard Worker% #2 is (optional) width, #3 is (optional) height. 6514*6a54128fSAndroid Build Coastguard Worker% #4 is (ignored optional) html alt text. 6515*6a54128fSAndroid Build Coastguard Worker% #5 is (ignored optional) extension. 6516*6a54128fSAndroid Build Coastguard Worker% #6 is just the usual extra ignored arg for parsing this stuff. 6517*6a54128fSAndroid Build Coastguard Worker\newif\ifimagevmode 6518*6a54128fSAndroid Build Coastguard Worker\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup 6519*6a54128fSAndroid Build Coastguard Worker \catcode`\^^M = 5 % in case we're inside an example 6520*6a54128fSAndroid Build Coastguard Worker \normalturnoffactive % allow _ et al. in names 6521*6a54128fSAndroid Build Coastguard Worker % If the image is by itself, center it. 6522*6a54128fSAndroid Build Coastguard Worker \ifvmode 6523*6a54128fSAndroid Build Coastguard Worker \imagevmodetrue 6524*6a54128fSAndroid Build Coastguard Worker \nobreak\bigskip 6525*6a54128fSAndroid Build Coastguard Worker % Usually we'll have text after the image which will insert 6526*6a54128fSAndroid Build Coastguard Worker % \parskip glue, so insert it here too to equalize the space 6527*6a54128fSAndroid Build Coastguard Worker % above and below. 6528*6a54128fSAndroid Build Coastguard Worker \nobreak\vskip\parskip 6529*6a54128fSAndroid Build Coastguard Worker \nobreak 6530*6a54128fSAndroid Build Coastguard Worker \line\bgroup 6531*6a54128fSAndroid Build Coastguard Worker \fi 6532*6a54128fSAndroid Build Coastguard Worker % 6533*6a54128fSAndroid Build Coastguard Worker % Output the image. 6534*6a54128fSAndroid Build Coastguard Worker \ifpdf 6535*6a54128fSAndroid Build Coastguard Worker \dopdfimage{#1}{#2}{#3}% 6536*6a54128fSAndroid Build Coastguard Worker \else 6537*6a54128fSAndroid Build Coastguard Worker % \epsfbox itself resets \epsf?size at each figure. 6538*6a54128fSAndroid Build Coastguard Worker \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi 6539*6a54128fSAndroid Build Coastguard Worker \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi 6540*6a54128fSAndroid Build Coastguard Worker \epsfbox{#1.eps}% 6541*6a54128fSAndroid Build Coastguard Worker \fi 6542*6a54128fSAndroid Build Coastguard Worker % 6543*6a54128fSAndroid Build Coastguard Worker \ifimagevmode \egroup \bigbreak \fi % space after the image 6544*6a54128fSAndroid Build Coastguard Worker\endgroup} 6545*6a54128fSAndroid Build Coastguard Worker 6546*6a54128fSAndroid Build Coastguard Worker 6547*6a54128fSAndroid Build Coastguard Worker% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, 6548*6a54128fSAndroid Build Coastguard Worker% etc. We don't actually implement floating yet, we always include the 6549*6a54128fSAndroid Build Coastguard Worker% float "here". But it seemed the best name for the future. 6550*6a54128fSAndroid Build Coastguard Worker% 6551*6a54128fSAndroid Build Coastguard Worker\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} 6552*6a54128fSAndroid Build Coastguard Worker 6553*6a54128fSAndroid Build Coastguard Worker% There may be a space before second and/or third parameter; delete it. 6554*6a54128fSAndroid Build Coastguard Worker\def\eatcommaspace#1, {#1,} 6555*6a54128fSAndroid Build Coastguard Worker 6556*6a54128fSAndroid Build Coastguard Worker% #1 is the optional FLOATTYPE, the text label for this float, typically 6557*6a54128fSAndroid Build Coastguard Worker% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, 6558*6a54128fSAndroid Build Coastguard Worker% this float will not be numbered and cannot be referred to. 6559*6a54128fSAndroid Build Coastguard Worker% 6560*6a54128fSAndroid Build Coastguard Worker% #2 is the optional xref label. Also must be present for the float to 6561*6a54128fSAndroid Build Coastguard Worker% be referable. 6562*6a54128fSAndroid Build Coastguard Worker% 6563*6a54128fSAndroid Build Coastguard Worker% #3 is the optional positioning argument; for now, it is ignored. It 6564*6a54128fSAndroid Build Coastguard Worker% will somehow specify the positions allowed to float to (here, top, bottom). 6565*6a54128fSAndroid Build Coastguard Worker% 6566*6a54128fSAndroid Build Coastguard Worker% We keep a separate counter for each FLOATTYPE, which we reset at each 6567*6a54128fSAndroid Build Coastguard Worker% chapter-level command. 6568*6a54128fSAndroid Build Coastguard Worker\let\resetallfloatnos=\empty 6569*6a54128fSAndroid Build Coastguard Worker% 6570*6a54128fSAndroid Build Coastguard Worker\def\dofloat#1,#2,#3,#4\finish{% 6571*6a54128fSAndroid Build Coastguard Worker \let\thiscaption=\empty 6572*6a54128fSAndroid Build Coastguard Worker \let\thisshortcaption=\empty 6573*6a54128fSAndroid Build Coastguard Worker % 6574*6a54128fSAndroid Build Coastguard Worker % don't lose footnotes inside @float. 6575*6a54128fSAndroid Build Coastguard Worker % 6576*6a54128fSAndroid Build Coastguard Worker % BEWARE: when the floats start float, we have to issue warning whenever an 6577*6a54128fSAndroid Build Coastguard Worker % insert appears inside a float which could possibly float. --kasal, 26may04 6578*6a54128fSAndroid Build Coastguard Worker % 6579*6a54128fSAndroid Build Coastguard Worker \startsavinginserts 6580*6a54128fSAndroid Build Coastguard Worker % 6581*6a54128fSAndroid Build Coastguard Worker % We can't be used inside a paragraph. 6582*6a54128fSAndroid Build Coastguard Worker \par 6583*6a54128fSAndroid Build Coastguard Worker % 6584*6a54128fSAndroid Build Coastguard Worker \vtop\bgroup 6585*6a54128fSAndroid Build Coastguard Worker \def\floattype{#1}% 6586*6a54128fSAndroid Build Coastguard Worker \def\floatlabel{#2}% 6587*6a54128fSAndroid Build Coastguard Worker \def\floatloc{#3}% we do nothing with this yet. 6588*6a54128fSAndroid Build Coastguard Worker % 6589*6a54128fSAndroid Build Coastguard Worker \ifx\floattype\empty 6590*6a54128fSAndroid Build Coastguard Worker \let\safefloattype=\empty 6591*6a54128fSAndroid Build Coastguard Worker \else 6592*6a54128fSAndroid Build Coastguard Worker {% 6593*6a54128fSAndroid Build Coastguard Worker % the floattype might have accents or other special characters, 6594*6a54128fSAndroid Build Coastguard Worker % but we need to use it in a control sequence name. 6595*6a54128fSAndroid Build Coastguard Worker \indexnofonts 6596*6a54128fSAndroid Build Coastguard Worker \turnoffactive 6597*6a54128fSAndroid Build Coastguard Worker \xdef\safefloattype{\floattype}% 6598*6a54128fSAndroid Build Coastguard Worker }% 6599*6a54128fSAndroid Build Coastguard Worker \fi 6600*6a54128fSAndroid Build Coastguard Worker % 6601*6a54128fSAndroid Build Coastguard Worker % If label is given but no type, we handle that as the empty type. 6602*6a54128fSAndroid Build Coastguard Worker \ifx\floatlabel\empty \else 6603*6a54128fSAndroid Build Coastguard Worker % We want each FLOATTYPE to be numbered separately (Figure 1, 6604*6a54128fSAndroid Build Coastguard Worker % Table 1, Figure 2, ...). (And if no label, no number.) 6605*6a54128fSAndroid Build Coastguard Worker % 6606*6a54128fSAndroid Build Coastguard Worker \expandafter\getfloatno\csname\safefloattype floatno\endcsname 6607*6a54128fSAndroid Build Coastguard Worker \global\advance\floatno by 1 6608*6a54128fSAndroid Build Coastguard Worker % 6609*6a54128fSAndroid Build Coastguard Worker {% 6610*6a54128fSAndroid Build Coastguard Worker % This magic value for \thissection is output by \setref as the 6611*6a54128fSAndroid Build Coastguard Worker % XREFLABEL-title value. \xrefX uses it to distinguish float 6612*6a54128fSAndroid Build Coastguard Worker % labels (which have a completely different output format) from 6613*6a54128fSAndroid Build Coastguard Worker % node and anchor labels. And \xrdef uses it to construct the 6614*6a54128fSAndroid Build Coastguard Worker % lists of floats. 6615*6a54128fSAndroid Build Coastguard Worker % 6616*6a54128fSAndroid Build Coastguard Worker \edef\thissection{\floatmagic=\safefloattype}% 6617*6a54128fSAndroid Build Coastguard Worker \setref{\floatlabel}{Yfloat}% 6618*6a54128fSAndroid Build Coastguard Worker }% 6619*6a54128fSAndroid Build Coastguard Worker \fi 6620*6a54128fSAndroid Build Coastguard Worker % 6621*6a54128fSAndroid Build Coastguard Worker % start with \parskip glue, I guess. 6622*6a54128fSAndroid Build Coastguard Worker \vskip\parskip 6623*6a54128fSAndroid Build Coastguard Worker % 6624*6a54128fSAndroid Build Coastguard Worker % Don't suppress indentation if a float happens to start a section. 6625*6a54128fSAndroid Build Coastguard Worker \restorefirstparagraphindent 6626*6a54128fSAndroid Build Coastguard Worker} 6627*6a54128fSAndroid Build Coastguard Worker 6628*6a54128fSAndroid Build Coastguard Worker% we have these possibilities: 6629*6a54128fSAndroid Build Coastguard Worker% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap 6630*6a54128fSAndroid Build Coastguard Worker% @float Foo,lbl & no caption: Foo 1.1 6631*6a54128fSAndroid Build Coastguard Worker% @float Foo & @caption{Cap}: Foo: Cap 6632*6a54128fSAndroid Build Coastguard Worker% @float Foo & no caption: Foo 6633*6a54128fSAndroid Build Coastguard Worker% @float ,lbl & Caption{Cap}: 1.1: Cap 6634*6a54128fSAndroid Build Coastguard Worker% @float ,lbl & no caption: 1.1 6635*6a54128fSAndroid Build Coastguard Worker% @float & @caption{Cap}: Cap 6636*6a54128fSAndroid Build Coastguard Worker% @float & no caption: 6637*6a54128fSAndroid Build Coastguard Worker% 6638*6a54128fSAndroid Build Coastguard Worker\def\Efloat{% 6639*6a54128fSAndroid Build Coastguard Worker \let\floatident = \empty 6640*6a54128fSAndroid Build Coastguard Worker % 6641*6a54128fSAndroid Build Coastguard Worker % In all cases, if we have a float type, it comes first. 6642*6a54128fSAndroid Build Coastguard Worker \ifx\floattype\empty \else \def\floatident{\floattype}\fi 6643*6a54128fSAndroid Build Coastguard Worker % 6644*6a54128fSAndroid Build Coastguard Worker % If we have an xref label, the number comes next. 6645*6a54128fSAndroid Build Coastguard Worker \ifx\floatlabel\empty \else 6646*6a54128fSAndroid Build Coastguard Worker \ifx\floattype\empty \else % if also had float type, need tie first. 6647*6a54128fSAndroid Build Coastguard Worker \appendtomacro\floatident{\tie}% 6648*6a54128fSAndroid Build Coastguard Worker \fi 6649*6a54128fSAndroid Build Coastguard Worker % the number. 6650*6a54128fSAndroid Build Coastguard Worker \appendtomacro\floatident{\chaplevelprefix\the\floatno}% 6651*6a54128fSAndroid Build Coastguard Worker \fi 6652*6a54128fSAndroid Build Coastguard Worker % 6653*6a54128fSAndroid Build Coastguard Worker % Start the printed caption with what we've constructed in 6654*6a54128fSAndroid Build Coastguard Worker % \floatident, but keep it separate; we need \floatident again. 6655*6a54128fSAndroid Build Coastguard Worker \let\captionline = \floatident 6656*6a54128fSAndroid Build Coastguard Worker % 6657*6a54128fSAndroid Build Coastguard Worker \ifx\thiscaption\empty \else 6658*6a54128fSAndroid Build Coastguard Worker \ifx\floatident\empty \else 6659*6a54128fSAndroid Build Coastguard Worker \appendtomacro\captionline{: }% had ident, so need a colon between 6660*6a54128fSAndroid Build Coastguard Worker \fi 6661*6a54128fSAndroid Build Coastguard Worker % 6662*6a54128fSAndroid Build Coastguard Worker % caption text. 6663*6a54128fSAndroid Build Coastguard Worker \appendtomacro\captionline{\scanexp\thiscaption}% 6664*6a54128fSAndroid Build Coastguard Worker \fi 6665*6a54128fSAndroid Build Coastguard Worker % 6666*6a54128fSAndroid Build Coastguard Worker % If we have anything to print, print it, with space before. 6667*6a54128fSAndroid Build Coastguard Worker % Eventually this needs to become an \insert. 6668*6a54128fSAndroid Build Coastguard Worker \ifx\captionline\empty \else 6669*6a54128fSAndroid Build Coastguard Worker \vskip.5\parskip 6670*6a54128fSAndroid Build Coastguard Worker \captionline 6671*6a54128fSAndroid Build Coastguard Worker % 6672*6a54128fSAndroid Build Coastguard Worker % Space below caption. 6673*6a54128fSAndroid Build Coastguard Worker \vskip\parskip 6674*6a54128fSAndroid Build Coastguard Worker \fi 6675*6a54128fSAndroid Build Coastguard Worker % 6676*6a54128fSAndroid Build Coastguard Worker % If have an xref label, write the list of floats info. Do this 6677*6a54128fSAndroid Build Coastguard Worker % after the caption, to avoid chance of it being a breakpoint. 6678*6a54128fSAndroid Build Coastguard Worker \ifx\floatlabel\empty \else 6679*6a54128fSAndroid Build Coastguard Worker % Write the text that goes in the lof to the aux file as 6680*6a54128fSAndroid Build Coastguard Worker % \floatlabel-lof. Besides \floatident, we include the short 6681*6a54128fSAndroid Build Coastguard Worker % caption if specified, else the full caption if specified, else nothing. 6682*6a54128fSAndroid Build Coastguard Worker {% 6683*6a54128fSAndroid Build Coastguard Worker \atdummies 6684*6a54128fSAndroid Build Coastguard Worker % 6685*6a54128fSAndroid Build Coastguard Worker % since we read the caption text in the macro world, where ^^M 6686*6a54128fSAndroid Build Coastguard Worker % is turned into a normal character, we have to scan it back, so 6687*6a54128fSAndroid Build Coastguard Worker % we don't write the literal three characters "^^M" into the aux file. 6688*6a54128fSAndroid Build Coastguard Worker \scanexp{% 6689*6a54128fSAndroid Build Coastguard Worker \xdef\noexpand\gtemp{% 6690*6a54128fSAndroid Build Coastguard Worker \ifx\thisshortcaption\empty 6691*6a54128fSAndroid Build Coastguard Worker \thiscaption 6692*6a54128fSAndroid Build Coastguard Worker \else 6693*6a54128fSAndroid Build Coastguard Worker \thisshortcaption 6694*6a54128fSAndroid Build Coastguard Worker \fi 6695*6a54128fSAndroid Build Coastguard Worker }% 6696*6a54128fSAndroid Build Coastguard Worker }% 6697*6a54128fSAndroid Build Coastguard Worker \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident 6698*6a54128fSAndroid Build Coastguard Worker \ifx\gtemp\empty \else : \gtemp \fi}}% 6699*6a54128fSAndroid Build Coastguard Worker }% 6700*6a54128fSAndroid Build Coastguard Worker \fi 6701*6a54128fSAndroid Build Coastguard Worker \egroup % end of \vtop 6702*6a54128fSAndroid Build Coastguard Worker % 6703*6a54128fSAndroid Build Coastguard Worker % place the captured inserts 6704*6a54128fSAndroid Build Coastguard Worker % 6705*6a54128fSAndroid Build Coastguard Worker % BEWARE: when the floats start floating, we have to issue warning 6706*6a54128fSAndroid Build Coastguard Worker % whenever an insert appears inside a float which could possibly 6707*6a54128fSAndroid Build Coastguard Worker % float. --kasal, 26may04 6708*6a54128fSAndroid Build Coastguard Worker % 6709*6a54128fSAndroid Build Coastguard Worker \checkinserts 6710*6a54128fSAndroid Build Coastguard Worker} 6711*6a54128fSAndroid Build Coastguard Worker 6712*6a54128fSAndroid Build Coastguard Worker% Append the tokens #2 to the definition of macro #1, not expanding either. 6713*6a54128fSAndroid Build Coastguard Worker% 6714*6a54128fSAndroid Build Coastguard Worker\def\appendtomacro#1#2{% 6715*6a54128fSAndroid Build Coastguard Worker \expandafter\def\expandafter#1\expandafter{#1#2}% 6716*6a54128fSAndroid Build Coastguard Worker} 6717*6a54128fSAndroid Build Coastguard Worker 6718*6a54128fSAndroid Build Coastguard Worker% @caption, @shortcaption 6719*6a54128fSAndroid Build Coastguard Worker% 6720*6a54128fSAndroid Build Coastguard Worker\def\caption{\docaption\thiscaption} 6721*6a54128fSAndroid Build Coastguard Worker\def\shortcaption{\docaption\thisshortcaption} 6722*6a54128fSAndroid Build Coastguard Worker\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} 6723*6a54128fSAndroid Build Coastguard Worker\def\defcaption#1#2{\egroup \def#1{#2}} 6724*6a54128fSAndroid Build Coastguard Worker 6725*6a54128fSAndroid Build Coastguard Worker% The parameter is the control sequence identifying the counter we are 6726*6a54128fSAndroid Build Coastguard Worker% going to use. Create it if it doesn't exist and assign it to \floatno. 6727*6a54128fSAndroid Build Coastguard Worker\def\getfloatno#1{% 6728*6a54128fSAndroid Build Coastguard Worker \ifx#1\relax 6729*6a54128fSAndroid Build Coastguard Worker % Haven't seen this figure type before. 6730*6a54128fSAndroid Build Coastguard Worker \csname newcount\endcsname #1% 6731*6a54128fSAndroid Build Coastguard Worker % 6732*6a54128fSAndroid Build Coastguard Worker % Remember to reset this floatno at the next chap. 6733*6a54128fSAndroid Build Coastguard Worker \expandafter\gdef\expandafter\resetallfloatnos 6734*6a54128fSAndroid Build Coastguard Worker \expandafter{\resetallfloatnos #1=0 }% 6735*6a54128fSAndroid Build Coastguard Worker \fi 6736*6a54128fSAndroid Build Coastguard Worker \let\floatno#1% 6737*6a54128fSAndroid Build Coastguard Worker} 6738*6a54128fSAndroid Build Coastguard Worker 6739*6a54128fSAndroid Build Coastguard Worker% \setref calls this to get the XREFLABEL-snt value. We want an @xref 6740*6a54128fSAndroid Build Coastguard Worker% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we 6741*6a54128fSAndroid Build Coastguard Worker% first read the @float command. 6742*6a54128fSAndroid Build Coastguard Worker% 6743*6a54128fSAndroid Build Coastguard Worker\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% 6744*6a54128fSAndroid Build Coastguard Worker 6745*6a54128fSAndroid Build Coastguard Worker% Magic string used for the XREFLABEL-title value, so \xrefX can 6746*6a54128fSAndroid Build Coastguard Worker% distinguish floats from other xref types. 6747*6a54128fSAndroid Build Coastguard Worker\def\floatmagic{!!float!!} 6748*6a54128fSAndroid Build Coastguard Worker 6749*6a54128fSAndroid Build Coastguard Worker% #1 is the control sequence we are passed; we expand into a conditional 6750*6a54128fSAndroid Build Coastguard Worker% which is true if #1 represents a float ref. That is, the magic 6751*6a54128fSAndroid Build Coastguard Worker% \thissection value which we \setref above. 6752*6a54128fSAndroid Build Coastguard Worker% 6753*6a54128fSAndroid Build Coastguard Worker\def\iffloat#1{\expandafter\doiffloat#1==\finish} 6754*6a54128fSAndroid Build Coastguard Worker% 6755*6a54128fSAndroid Build Coastguard Worker% #1 is (maybe) the \floatmagic string. If so, #2 will be the 6756*6a54128fSAndroid Build Coastguard Worker% (safe) float type for this float. We set \iffloattype to #2. 6757*6a54128fSAndroid Build Coastguard Worker% 6758*6a54128fSAndroid Build Coastguard Worker\def\doiffloat#1=#2=#3\finish{% 6759*6a54128fSAndroid Build Coastguard Worker \def\temp{#1}% 6760*6a54128fSAndroid Build Coastguard Worker \def\iffloattype{#2}% 6761*6a54128fSAndroid Build Coastguard Worker \ifx\temp\floatmagic 6762*6a54128fSAndroid Build Coastguard Worker} 6763*6a54128fSAndroid Build Coastguard Worker 6764*6a54128fSAndroid Build Coastguard Worker% @listoffloats FLOATTYPE - print a list of floats like a table of contents. 6765*6a54128fSAndroid Build Coastguard Worker% 6766*6a54128fSAndroid Build Coastguard Worker\parseargdef\listoffloats{% 6767*6a54128fSAndroid Build Coastguard Worker \def\floattype{#1}% floattype 6768*6a54128fSAndroid Build Coastguard Worker {% 6769*6a54128fSAndroid Build Coastguard Worker % the floattype might have accents or other special characters, 6770*6a54128fSAndroid Build Coastguard Worker % but we need to use it in a control sequence name. 6771*6a54128fSAndroid Build Coastguard Worker \indexnofonts 6772*6a54128fSAndroid Build Coastguard Worker \turnoffactive 6773*6a54128fSAndroid Build Coastguard Worker \xdef\safefloattype{\floattype}% 6774*6a54128fSAndroid Build Coastguard Worker }% 6775*6a54128fSAndroid Build Coastguard Worker % 6776*6a54128fSAndroid Build Coastguard Worker % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. 6777*6a54128fSAndroid Build Coastguard Worker \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax 6778*6a54128fSAndroid Build Coastguard Worker \ifhavexrefs 6779*6a54128fSAndroid Build Coastguard Worker % if the user said @listoffloats foo but never @float foo. 6780*6a54128fSAndroid Build Coastguard Worker \message{\linenumber No `\safefloattype' floats to list.}% 6781*6a54128fSAndroid Build Coastguard Worker \fi 6782*6a54128fSAndroid Build Coastguard Worker \else 6783*6a54128fSAndroid Build Coastguard Worker \begingroup 6784*6a54128fSAndroid Build Coastguard Worker \leftskip=\tocindent % indent these entries like a toc 6785*6a54128fSAndroid Build Coastguard Worker \let\do=\listoffloatsdo 6786*6a54128fSAndroid Build Coastguard Worker \csname floatlist\safefloattype\endcsname 6787*6a54128fSAndroid Build Coastguard Worker \endgroup 6788*6a54128fSAndroid Build Coastguard Worker \fi 6789*6a54128fSAndroid Build Coastguard Worker} 6790*6a54128fSAndroid Build Coastguard Worker 6791*6a54128fSAndroid Build Coastguard Worker% This is called on each entry in a list of floats. We're passed the 6792*6a54128fSAndroid Build Coastguard Worker% xref label, in the form LABEL-title, which is how we save it in the 6793*6a54128fSAndroid Build Coastguard Worker% aux file. We strip off the -title and look up \XRLABEL-lof, which 6794*6a54128fSAndroid Build Coastguard Worker% has the text we're supposed to typeset here. 6795*6a54128fSAndroid Build Coastguard Worker% 6796*6a54128fSAndroid Build Coastguard Worker% Figures without xref labels will not be included in the list (since 6797*6a54128fSAndroid Build Coastguard Worker% they won't appear in the aux file). 6798*6a54128fSAndroid Build Coastguard Worker% 6799*6a54128fSAndroid Build Coastguard Worker\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} 6800*6a54128fSAndroid Build Coastguard Worker\def\listoffloatsdoentry#1-title\finish{{% 6801*6a54128fSAndroid Build Coastguard Worker % Can't fully expand XR#1-lof because it can contain anything. Just 6802*6a54128fSAndroid Build Coastguard Worker % pass the control sequence. On the other hand, XR#1-pg is just the 6803*6a54128fSAndroid Build Coastguard Worker % page number, and we want to fully expand that so we can get a link 6804*6a54128fSAndroid Build Coastguard Worker % in pdf output. 6805*6a54128fSAndroid Build Coastguard Worker \toksA = \expandafter{\csname XR#1-lof\endcsname}% 6806*6a54128fSAndroid Build Coastguard Worker % 6807*6a54128fSAndroid Build Coastguard Worker % use the same \entry macro we use to generate the TOC and index. 6808*6a54128fSAndroid Build Coastguard Worker \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% 6809*6a54128fSAndroid Build Coastguard Worker \writeentry 6810*6a54128fSAndroid Build Coastguard Worker}} 6811*6a54128fSAndroid Build Coastguard Worker 6812*6a54128fSAndroid Build Coastguard Worker\message{localization,} 6813*6a54128fSAndroid Build Coastguard Worker% and i18n. 6814*6a54128fSAndroid Build Coastguard Worker 6815*6a54128fSAndroid Build Coastguard Worker% @documentlanguage is usually given very early, just after 6816*6a54128fSAndroid Build Coastguard Worker% @setfilename. If done too late, it may not override everything 6817*6a54128fSAndroid Build Coastguard Worker% properly. Single argument is the language abbreviation. 6818*6a54128fSAndroid Build Coastguard Worker% It would be nice if we could set up a hyphenation file here. 6819*6a54128fSAndroid Build Coastguard Worker% 6820*6a54128fSAndroid Build Coastguard Worker\parseargdef\documentlanguage{% 6821*6a54128fSAndroid Build Coastguard Worker \tex % read txi-??.tex file in plain TeX. 6822*6a54128fSAndroid Build Coastguard Worker % Read the file if it exists. 6823*6a54128fSAndroid Build Coastguard Worker \openin 1 txi-#1.tex 6824*6a54128fSAndroid Build Coastguard Worker \ifeof 1 6825*6a54128fSAndroid Build Coastguard Worker \errhelp = \nolanghelp 6826*6a54128fSAndroid Build Coastguard Worker \errmessage{Cannot read language file txi-#1.tex}% 6827*6a54128fSAndroid Build Coastguard Worker \else 6828*6a54128fSAndroid Build Coastguard Worker \input txi-#1.tex 6829*6a54128fSAndroid Build Coastguard Worker \fi 6830*6a54128fSAndroid Build Coastguard Worker \closein 1 6831*6a54128fSAndroid Build Coastguard Worker \endgroup 6832*6a54128fSAndroid Build Coastguard Worker} 6833*6a54128fSAndroid Build Coastguard Worker\newhelp\nolanghelp{The given language definition file cannot be found or 6834*6a54128fSAndroid Build Coastguard Workeris empty. Maybe you need to install it? In the current directory 6835*6a54128fSAndroid Build Coastguard Workershould work if nowhere else does.} 6836*6a54128fSAndroid Build Coastguard Worker 6837*6a54128fSAndroid Build Coastguard Worker 6838*6a54128fSAndroid Build Coastguard Worker% @documentencoding should change something in TeX eventually, most 6839*6a54128fSAndroid Build Coastguard Worker% likely, but for now just recognize it. 6840*6a54128fSAndroid Build Coastguard Worker\let\documentencoding = \comment 6841*6a54128fSAndroid Build Coastguard Worker 6842*6a54128fSAndroid Build Coastguard Worker 6843*6a54128fSAndroid Build Coastguard Worker% Page size parameters. 6844*6a54128fSAndroid Build Coastguard Worker% 6845*6a54128fSAndroid Build Coastguard Worker\newdimen\defaultparindent \defaultparindent = 15pt 6846*6a54128fSAndroid Build Coastguard Worker 6847*6a54128fSAndroid Build Coastguard Worker\chapheadingskip = 15pt plus 4pt minus 2pt 6848*6a54128fSAndroid Build Coastguard Worker\secheadingskip = 12pt plus 3pt minus 2pt 6849*6a54128fSAndroid Build Coastguard Worker\subsecheadingskip = 9pt plus 2pt minus 2pt 6850*6a54128fSAndroid Build Coastguard Worker 6851*6a54128fSAndroid Build Coastguard Worker% Prevent underfull vbox error messages. 6852*6a54128fSAndroid Build Coastguard Worker\vbadness = 10000 6853*6a54128fSAndroid Build Coastguard Worker 6854*6a54128fSAndroid Build Coastguard Worker% Don't be so finicky about underfull hboxes, either. 6855*6a54128fSAndroid Build Coastguard Worker\hbadness = 2000 6856*6a54128fSAndroid Build Coastguard Worker 6857*6a54128fSAndroid Build Coastguard Worker% Following George Bush, just get rid of widows and orphans. 6858*6a54128fSAndroid Build Coastguard Worker\widowpenalty=10000 6859*6a54128fSAndroid Build Coastguard Worker\clubpenalty=10000 6860*6a54128fSAndroid Build Coastguard Worker 6861*6a54128fSAndroid Build Coastguard Worker% Use TeX 3.0's \emergencystretch to help line breaking, but if we're 6862*6a54128fSAndroid Build Coastguard Worker% using an old version of TeX, don't do anything. We want the amount of 6863*6a54128fSAndroid Build Coastguard Worker% stretch added to depend on the line length, hence the dependence on 6864*6a54128fSAndroid Build Coastguard Worker% \hsize. We call this whenever the paper size is set. 6865*6a54128fSAndroid Build Coastguard Worker% 6866*6a54128fSAndroid Build Coastguard Worker\def\setemergencystretch{% 6867*6a54128fSAndroid Build Coastguard Worker \ifx\emergencystretch\thisisundefined 6868*6a54128fSAndroid Build Coastguard Worker % Allow us to assign to \emergencystretch anyway. 6869*6a54128fSAndroid Build Coastguard Worker \def\emergencystretch{\dimen0}% 6870*6a54128fSAndroid Build Coastguard Worker \else 6871*6a54128fSAndroid Build Coastguard Worker \emergencystretch = .15\hsize 6872*6a54128fSAndroid Build Coastguard Worker \fi 6873*6a54128fSAndroid Build Coastguard Worker} 6874*6a54128fSAndroid Build Coastguard Worker 6875*6a54128fSAndroid Build Coastguard Worker% Parameters in order: 1) textheight; 2) textwidth; 6876*6a54128fSAndroid Build Coastguard Worker% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; 6877*6a54128fSAndroid Build Coastguard Worker% 7) physical page height; 8) physical page width. 6878*6a54128fSAndroid Build Coastguard Worker% 6879*6a54128fSAndroid Build Coastguard Worker% We also call \setleading{\textleading}, so the caller should define 6880*6a54128fSAndroid Build Coastguard Worker% \textleading. The caller should also set \parskip. 6881*6a54128fSAndroid Build Coastguard Worker% 6882*6a54128fSAndroid Build Coastguard Worker\def\internalpagesizes#1#2#3#4#5#6#7#8{% 6883*6a54128fSAndroid Build Coastguard Worker \voffset = #3\relax 6884*6a54128fSAndroid Build Coastguard Worker \topskip = #6\relax 6885*6a54128fSAndroid Build Coastguard Worker \splittopskip = \topskip 6886*6a54128fSAndroid Build Coastguard Worker % 6887*6a54128fSAndroid Build Coastguard Worker \vsize = #1\relax 6888*6a54128fSAndroid Build Coastguard Worker \advance\vsize by \topskip 6889*6a54128fSAndroid Build Coastguard Worker \outervsize = \vsize 6890*6a54128fSAndroid Build Coastguard Worker \advance\outervsize by 2\topandbottommargin 6891*6a54128fSAndroid Build Coastguard Worker \pageheight = \vsize 6892*6a54128fSAndroid Build Coastguard Worker % 6893*6a54128fSAndroid Build Coastguard Worker \hsize = #2\relax 6894*6a54128fSAndroid Build Coastguard Worker \outerhsize = \hsize 6895*6a54128fSAndroid Build Coastguard Worker \advance\outerhsize by 0.5in 6896*6a54128fSAndroid Build Coastguard Worker \pagewidth = \hsize 6897*6a54128fSAndroid Build Coastguard Worker % 6898*6a54128fSAndroid Build Coastguard Worker \normaloffset = #4\relax 6899*6a54128fSAndroid Build Coastguard Worker \bindingoffset = #5\relax 6900*6a54128fSAndroid Build Coastguard Worker % 6901*6a54128fSAndroid Build Coastguard Worker \ifpdf 6902*6a54128fSAndroid Build Coastguard Worker \pdfpageheight #7\relax 6903*6a54128fSAndroid Build Coastguard Worker \pdfpagewidth #8\relax 6904*6a54128fSAndroid Build Coastguard Worker \fi 6905*6a54128fSAndroid Build Coastguard Worker % 6906*6a54128fSAndroid Build Coastguard Worker \setleading{\textleading} 6907*6a54128fSAndroid Build Coastguard Worker % 6908*6a54128fSAndroid Build Coastguard Worker \parindent = \defaultparindent 6909*6a54128fSAndroid Build Coastguard Worker \setemergencystretch 6910*6a54128fSAndroid Build Coastguard Worker} 6911*6a54128fSAndroid Build Coastguard Worker 6912*6a54128fSAndroid Build Coastguard Worker% @letterpaper (the default). 6913*6a54128fSAndroid Build Coastguard Worker\def\letterpaper{{\globaldefs = 1 6914*6a54128fSAndroid Build Coastguard Worker \parskip = 3pt plus 2pt minus 1pt 6915*6a54128fSAndroid Build Coastguard Worker \textleading = 13.2pt 6916*6a54128fSAndroid Build Coastguard Worker % 6917*6a54128fSAndroid Build Coastguard Worker % If page is nothing but text, make it come out even. 6918*6a54128fSAndroid Build Coastguard Worker \internalpagesizes{46\baselineskip}{6in}% 6919*6a54128fSAndroid Build Coastguard Worker {\voffset}{.25in}% 6920*6a54128fSAndroid Build Coastguard Worker {\bindingoffset}{36pt}% 6921*6a54128fSAndroid Build Coastguard Worker {11in}{8.5in}% 6922*6a54128fSAndroid Build Coastguard Worker}} 6923*6a54128fSAndroid Build Coastguard Worker 6924*6a54128fSAndroid Build Coastguard Worker% Use @smallbook to reset parameters for 7x9.25 trim size. 6925*6a54128fSAndroid Build Coastguard Worker\def\smallbook{{\globaldefs = 1 6926*6a54128fSAndroid Build Coastguard Worker \parskip = 2pt plus 1pt 6927*6a54128fSAndroid Build Coastguard Worker \textleading = 12pt 6928*6a54128fSAndroid Build Coastguard Worker % 6929*6a54128fSAndroid Build Coastguard Worker \internalpagesizes{7.5in}{5in}% 6930*6a54128fSAndroid Build Coastguard Worker {\voffset}{.25in}% 6931*6a54128fSAndroid Build Coastguard Worker {\bindingoffset}{16pt}% 6932*6a54128fSAndroid Build Coastguard Worker {9.25in}{7in}% 6933*6a54128fSAndroid Build Coastguard Worker % 6934*6a54128fSAndroid Build Coastguard Worker \lispnarrowing = 0.3in 6935*6a54128fSAndroid Build Coastguard Worker \tolerance = 700 6936*6a54128fSAndroid Build Coastguard Worker \hfuzz = 1pt 6937*6a54128fSAndroid Build Coastguard Worker \contentsrightmargin = 0pt 6938*6a54128fSAndroid Build Coastguard Worker \defbodyindent = .5cm 6939*6a54128fSAndroid Build Coastguard Worker}} 6940*6a54128fSAndroid Build Coastguard Worker 6941*6a54128fSAndroid Build Coastguard Worker% Use @smallerbook to reset parameters for 6x9 trim size. 6942*6a54128fSAndroid Build Coastguard Worker% (Just testing, parameters still in flux.) 6943*6a54128fSAndroid Build Coastguard Worker\def\smallerbook{{\globaldefs = 1 6944*6a54128fSAndroid Build Coastguard Worker \parskip = 1.5pt plus 1pt 6945*6a54128fSAndroid Build Coastguard Worker \textleading = 12pt 6946*6a54128fSAndroid Build Coastguard Worker % 6947*6a54128fSAndroid Build Coastguard Worker \internalpagesizes{7.4in}{4.8in}% 6948*6a54128fSAndroid Build Coastguard Worker {-.2in}{-.4in}% 6949*6a54128fSAndroid Build Coastguard Worker {0pt}{14pt}% 6950*6a54128fSAndroid Build Coastguard Worker {9in}{6in}% 6951*6a54128fSAndroid Build Coastguard Worker % 6952*6a54128fSAndroid Build Coastguard Worker \lispnarrowing = 0.25in 6953*6a54128fSAndroid Build Coastguard Worker \tolerance = 700 6954*6a54128fSAndroid Build Coastguard Worker \hfuzz = 1pt 6955*6a54128fSAndroid Build Coastguard Worker \contentsrightmargin = 0pt 6956*6a54128fSAndroid Build Coastguard Worker \defbodyindent = .4cm 6957*6a54128fSAndroid Build Coastguard Worker}} 6958*6a54128fSAndroid Build Coastguard Worker 6959*6a54128fSAndroid Build Coastguard Worker% Use @afourpaper to print on European A4 paper. 6960*6a54128fSAndroid Build Coastguard Worker\def\afourpaper{{\globaldefs = 1 6961*6a54128fSAndroid Build Coastguard Worker \parskip = 3pt plus 2pt minus 1pt 6962*6a54128fSAndroid Build Coastguard Worker \textleading = 13.2pt 6963*6a54128fSAndroid Build Coastguard Worker % 6964*6a54128fSAndroid Build Coastguard Worker % Double-side printing via postscript on Laserjet 4050 6965*6a54128fSAndroid Build Coastguard Worker % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. 6966*6a54128fSAndroid Build Coastguard Worker % To change the settings for a different printer or situation, adjust 6967*6a54128fSAndroid Build Coastguard Worker % \normaloffset until the front-side and back-side texts align. Then 6968*6a54128fSAndroid Build Coastguard Worker % do the same for \bindingoffset. You can set these for testing in 6969*6a54128fSAndroid Build Coastguard Worker % your texinfo source file like this: 6970*6a54128fSAndroid Build Coastguard Worker % @tex 6971*6a54128fSAndroid Build Coastguard Worker % \global\normaloffset = -6mm 6972*6a54128fSAndroid Build Coastguard Worker % \global\bindingoffset = 10mm 6973*6a54128fSAndroid Build Coastguard Worker % @end tex 6974*6a54128fSAndroid Build Coastguard Worker \internalpagesizes{51\baselineskip}{160mm} 6975*6a54128fSAndroid Build Coastguard Worker {\voffset}{\hoffset}% 6976*6a54128fSAndroid Build Coastguard Worker {\bindingoffset}{44pt}% 6977*6a54128fSAndroid Build Coastguard Worker {297mm}{210mm}% 6978*6a54128fSAndroid Build Coastguard Worker % 6979*6a54128fSAndroid Build Coastguard Worker \tolerance = 700 6980*6a54128fSAndroid Build Coastguard Worker \hfuzz = 1pt 6981*6a54128fSAndroid Build Coastguard Worker \contentsrightmargin = 0pt 6982*6a54128fSAndroid Build Coastguard Worker \defbodyindent = 5mm 6983*6a54128fSAndroid Build Coastguard Worker}} 6984*6a54128fSAndroid Build Coastguard Worker 6985*6a54128fSAndroid Build Coastguard Worker% Use @afivepaper to print on European A5 paper. 6986*6a54128fSAndroid Build Coastguard Worker% From [email protected], 2 July 2000. 6987*6a54128fSAndroid Build Coastguard Worker% He also recommends making @example and @lisp be small. 6988*6a54128fSAndroid Build Coastguard Worker\def\afivepaper{{\globaldefs = 1 6989*6a54128fSAndroid Build Coastguard Worker \parskip = 2pt plus 1pt minus 0.1pt 6990*6a54128fSAndroid Build Coastguard Worker \textleading = 12.5pt 6991*6a54128fSAndroid Build Coastguard Worker % 6992*6a54128fSAndroid Build Coastguard Worker \internalpagesizes{160mm}{120mm}% 6993*6a54128fSAndroid Build Coastguard Worker {\voffset}{\hoffset}% 6994*6a54128fSAndroid Build Coastguard Worker {\bindingoffset}{8pt}% 6995*6a54128fSAndroid Build Coastguard Worker {210mm}{148mm}% 6996*6a54128fSAndroid Build Coastguard Worker % 6997*6a54128fSAndroid Build Coastguard Worker \lispnarrowing = 0.2in 6998*6a54128fSAndroid Build Coastguard Worker \tolerance = 800 6999*6a54128fSAndroid Build Coastguard Worker \hfuzz = 1.2pt 7000*6a54128fSAndroid Build Coastguard Worker \contentsrightmargin = 0pt 7001*6a54128fSAndroid Build Coastguard Worker \defbodyindent = 2mm 7002*6a54128fSAndroid Build Coastguard Worker \tableindent = 12mm 7003*6a54128fSAndroid Build Coastguard Worker}} 7004*6a54128fSAndroid Build Coastguard Worker 7005*6a54128fSAndroid Build Coastguard Worker% A specific text layout, 24x15cm overall, intended for A4 paper. 7006*6a54128fSAndroid Build Coastguard Worker\def\afourlatex{{\globaldefs = 1 7007*6a54128fSAndroid Build Coastguard Worker \afourpaper 7008*6a54128fSAndroid Build Coastguard Worker \internalpagesizes{237mm}{150mm}% 7009*6a54128fSAndroid Build Coastguard Worker {\voffset}{4.6mm}% 7010*6a54128fSAndroid Build Coastguard Worker {\bindingoffset}{7mm}% 7011*6a54128fSAndroid Build Coastguard Worker {297mm}{210mm}% 7012*6a54128fSAndroid Build Coastguard Worker % 7013*6a54128fSAndroid Build Coastguard Worker % Must explicitly reset to 0 because we call \afourpaper. 7014*6a54128fSAndroid Build Coastguard Worker \globaldefs = 0 7015*6a54128fSAndroid Build Coastguard Worker}} 7016*6a54128fSAndroid Build Coastguard Worker 7017*6a54128fSAndroid Build Coastguard Worker% Use @afourwide to print on A4 paper in landscape format. 7018*6a54128fSAndroid Build Coastguard Worker\def\afourwide{{\globaldefs = 1 7019*6a54128fSAndroid Build Coastguard Worker \afourpaper 7020*6a54128fSAndroid Build Coastguard Worker \internalpagesizes{241mm}{165mm}% 7021*6a54128fSAndroid Build Coastguard Worker {\voffset}{-2.95mm}% 7022*6a54128fSAndroid Build Coastguard Worker {\bindingoffset}{7mm}% 7023*6a54128fSAndroid Build Coastguard Worker {297mm}{210mm}% 7024*6a54128fSAndroid Build Coastguard Worker \globaldefs = 0 7025*6a54128fSAndroid Build Coastguard Worker}} 7026*6a54128fSAndroid Build Coastguard Worker 7027*6a54128fSAndroid Build Coastguard Worker% @pagesizes TEXTHEIGHT[,TEXTWIDTH] 7028*6a54128fSAndroid Build Coastguard Worker% Perhaps we should allow setting the margins, \topskip, \parskip, 7029*6a54128fSAndroid Build Coastguard Worker% and/or leading, also. Or perhaps we should compute them somehow. 7030*6a54128fSAndroid Build Coastguard Worker% 7031*6a54128fSAndroid Build Coastguard Worker\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} 7032*6a54128fSAndroid Build Coastguard Worker\def\pagesizesyyy#1,#2,#3\finish{{% 7033*6a54128fSAndroid Build Coastguard Worker \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi 7034*6a54128fSAndroid Build Coastguard Worker \globaldefs = 1 7035*6a54128fSAndroid Build Coastguard Worker % 7036*6a54128fSAndroid Build Coastguard Worker \parskip = 3pt plus 2pt minus 1pt 7037*6a54128fSAndroid Build Coastguard Worker \setleading{\textleading}% 7038*6a54128fSAndroid Build Coastguard Worker % 7039*6a54128fSAndroid Build Coastguard Worker \dimen0 = #1 7040*6a54128fSAndroid Build Coastguard Worker \advance\dimen0 by \voffset 7041*6a54128fSAndroid Build Coastguard Worker % 7042*6a54128fSAndroid Build Coastguard Worker \dimen2 = \hsize 7043*6a54128fSAndroid Build Coastguard Worker \advance\dimen2 by \normaloffset 7044*6a54128fSAndroid Build Coastguard Worker % 7045*6a54128fSAndroid Build Coastguard Worker \internalpagesizes{#1}{\hsize}% 7046*6a54128fSAndroid Build Coastguard Worker {\voffset}{\normaloffset}% 7047*6a54128fSAndroid Build Coastguard Worker {\bindingoffset}{44pt}% 7048*6a54128fSAndroid Build Coastguard Worker {\dimen0}{\dimen2}% 7049*6a54128fSAndroid Build Coastguard Worker}} 7050*6a54128fSAndroid Build Coastguard Worker 7051*6a54128fSAndroid Build Coastguard Worker% Set default to letter. 7052*6a54128fSAndroid Build Coastguard Worker% 7053*6a54128fSAndroid Build Coastguard Worker\letterpaper 7054*6a54128fSAndroid Build Coastguard Worker 7055*6a54128fSAndroid Build Coastguard Worker 7056*6a54128fSAndroid Build Coastguard Worker\message{and turning on texinfo input format.} 7057*6a54128fSAndroid Build Coastguard Worker 7058*6a54128fSAndroid Build Coastguard Worker% Define macros to output various characters with catcode for normal text. 7059*6a54128fSAndroid Build Coastguard Worker\catcode`\"=\other 7060*6a54128fSAndroid Build Coastguard Worker\catcode`\~=\other 7061*6a54128fSAndroid Build Coastguard Worker\catcode`\^=\other 7062*6a54128fSAndroid Build Coastguard Worker\catcode`\_=\other 7063*6a54128fSAndroid Build Coastguard Worker\catcode`\|=\other 7064*6a54128fSAndroid Build Coastguard Worker\catcode`\<=\other 7065*6a54128fSAndroid Build Coastguard Worker\catcode`\>=\other 7066*6a54128fSAndroid Build Coastguard Worker\catcode`\+=\other 7067*6a54128fSAndroid Build Coastguard Worker\catcode`\$=\other 7068*6a54128fSAndroid Build Coastguard Worker\def\normaldoublequote{"} 7069*6a54128fSAndroid Build Coastguard Worker\def\normaltilde{~} 7070*6a54128fSAndroid Build Coastguard Worker\def\normalcaret{^} 7071*6a54128fSAndroid Build Coastguard Worker\def\normalunderscore{_} 7072*6a54128fSAndroid Build Coastguard Worker\def\normalverticalbar{|} 7073*6a54128fSAndroid Build Coastguard Worker\def\normalless{<} 7074*6a54128fSAndroid Build Coastguard Worker\def\normalgreater{>} 7075*6a54128fSAndroid Build Coastguard Worker\def\normalplus{+} 7076*6a54128fSAndroid Build Coastguard Worker\def\normaldollar{$}%$ font-lock fix 7077*6a54128fSAndroid Build Coastguard Worker 7078*6a54128fSAndroid Build Coastguard Worker% This macro is used to make a character print one way in \tt 7079*6a54128fSAndroid Build Coastguard Worker% (where it can probably be output as-is), and another way in other fonts, 7080*6a54128fSAndroid Build Coastguard Worker% where something hairier probably needs to be done. 7081*6a54128fSAndroid Build Coastguard Worker% 7082*6a54128fSAndroid Build Coastguard Worker% #1 is what to print if we are indeed using \tt; #2 is what to print 7083*6a54128fSAndroid Build Coastguard Worker% otherwise. Since all the Computer Modern typewriter fonts have zero 7084*6a54128fSAndroid Build Coastguard Worker% interword stretch (and shrink), and it is reasonable to expect all 7085*6a54128fSAndroid Build Coastguard Worker% typewriter fonts to have this, we can check that font parameter. 7086*6a54128fSAndroid Build Coastguard Worker% 7087*6a54128fSAndroid Build Coastguard Worker\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} 7088*6a54128fSAndroid Build Coastguard Worker 7089*6a54128fSAndroid Build Coastguard Worker% Same as above, but check for italic font. Actually this also catches 7090*6a54128fSAndroid Build Coastguard Worker% non-italic slanted fonts since it is impossible to distinguish them from 7091*6a54128fSAndroid Build Coastguard Worker% italic fonts. But since this is only used by $ and it uses \sl anyway 7092*6a54128fSAndroid Build Coastguard Worker% this is not a problem. 7093*6a54128fSAndroid Build Coastguard Worker\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} 7094*6a54128fSAndroid Build Coastguard Worker 7095*6a54128fSAndroid Build Coastguard Worker% Turn off all special characters except @ 7096*6a54128fSAndroid Build Coastguard Worker% (and those which the user can use as if they were ordinary). 7097*6a54128fSAndroid Build Coastguard Worker% Most of these we simply print from the \tt font, but for some, we can 7098*6a54128fSAndroid Build Coastguard Worker% use math or other variants that look better in normal text. 7099*6a54128fSAndroid Build Coastguard Worker 7100*6a54128fSAndroid Build Coastguard Worker\catcode`\"=\active 7101*6a54128fSAndroid Build Coastguard Worker\def\activedoublequote{{\tt\char34}} 7102*6a54128fSAndroid Build Coastguard Worker\let"=\activedoublequote 7103*6a54128fSAndroid Build Coastguard Worker\catcode`\~=\active 7104*6a54128fSAndroid Build Coastguard Worker\def~{{\tt\char126}} 7105*6a54128fSAndroid Build Coastguard Worker\chardef\hat=`\^ 7106*6a54128fSAndroid Build Coastguard Worker\catcode`\^=\active 7107*6a54128fSAndroid Build Coastguard Worker\def^{{\tt \hat}} 7108*6a54128fSAndroid Build Coastguard Worker 7109*6a54128fSAndroid Build Coastguard Worker\catcode`\_=\active 7110*6a54128fSAndroid Build Coastguard Worker\def_{\ifusingtt\normalunderscore\_} 7111*6a54128fSAndroid Build Coastguard Worker\let\realunder=_ 7112*6a54128fSAndroid Build Coastguard Worker% Subroutine for the previous macro. 7113*6a54128fSAndroid Build Coastguard Worker\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } 7114*6a54128fSAndroid Build Coastguard Worker 7115*6a54128fSAndroid Build Coastguard Worker\catcode`\|=\active 7116*6a54128fSAndroid Build Coastguard Worker\def|{{\tt\char124}} 7117*6a54128fSAndroid Build Coastguard Worker\chardef \less=`\< 7118*6a54128fSAndroid Build Coastguard Worker\catcode`\<=\active 7119*6a54128fSAndroid Build Coastguard Worker\def<{{\tt \less}} 7120*6a54128fSAndroid Build Coastguard Worker\chardef \gtr=`\> 7121*6a54128fSAndroid Build Coastguard Worker\catcode`\>=\active 7122*6a54128fSAndroid Build Coastguard Worker\def>{{\tt \gtr}} 7123*6a54128fSAndroid Build Coastguard Worker\catcode`\+=\active 7124*6a54128fSAndroid Build Coastguard Worker\def+{{\tt \char 43}} 7125*6a54128fSAndroid Build Coastguard Worker\catcode`\$=\active 7126*6a54128fSAndroid Build Coastguard Worker\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix 7127*6a54128fSAndroid Build Coastguard Worker 7128*6a54128fSAndroid Build Coastguard Worker% If a .fmt file is being used, characters that might appear in a file 7129*6a54128fSAndroid Build Coastguard Worker% name cannot be active until we have parsed the command line. 7130*6a54128fSAndroid Build Coastguard Worker% So turn them off again, and have \everyjob (or @setfilename) turn them on. 7131*6a54128fSAndroid Build Coastguard Worker% \otherifyactive is called near the end of this file. 7132*6a54128fSAndroid Build Coastguard Worker\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} 7133*6a54128fSAndroid Build Coastguard Worker 7134*6a54128fSAndroid Build Coastguard Worker% Used sometimes to turn off (effectively) the active characters even after 7135*6a54128fSAndroid Build Coastguard Worker% parsing them. 7136*6a54128fSAndroid Build Coastguard Worker\def\turnoffactive{% 7137*6a54128fSAndroid Build Coastguard Worker \normalturnoffactive 7138*6a54128fSAndroid Build Coastguard Worker \otherbackslash 7139*6a54128fSAndroid Build Coastguard Worker} 7140*6a54128fSAndroid Build Coastguard Worker 7141*6a54128fSAndroid Build Coastguard Worker\catcode`\@=0 7142*6a54128fSAndroid Build Coastguard Worker 7143*6a54128fSAndroid Build Coastguard Worker% \backslashcurfont outputs one backslash character in current font, 7144*6a54128fSAndroid Build Coastguard Worker% as in \char`\\. 7145*6a54128fSAndroid Build Coastguard Worker\global\chardef\backslashcurfont=`\\ 7146*6a54128fSAndroid Build Coastguard Worker\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work 7147*6a54128fSAndroid Build Coastguard Worker 7148*6a54128fSAndroid Build Coastguard Worker% \realbackslash is an actual character `\' with catcode other, and 7149*6a54128fSAndroid Build Coastguard Worker% \doublebackslash is two of them (for the pdf outlines). 7150*6a54128fSAndroid Build Coastguard Worker{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} 7151*6a54128fSAndroid Build Coastguard Worker 7152*6a54128fSAndroid Build Coastguard Worker% In texinfo, backslash is an active character; it prints the backslash 7153*6a54128fSAndroid Build Coastguard Worker% in fixed width font. 7154*6a54128fSAndroid Build Coastguard Worker\catcode`\\=\active 7155*6a54128fSAndroid Build Coastguard Worker@def@normalbackslash{{@tt@backslashcurfont}} 7156*6a54128fSAndroid Build Coastguard Worker% On startup, @fixbackslash assigns: 7157*6a54128fSAndroid Build Coastguard Worker% @let \ = @normalbackslash 7158*6a54128fSAndroid Build Coastguard Worker 7159*6a54128fSAndroid Build Coastguard Worker% \rawbackslash defines an active \ to do \backslashcurfont. 7160*6a54128fSAndroid Build Coastguard Worker% \otherbackslash defines an active \ to be a literal `\' character with 7161*6a54128fSAndroid Build Coastguard Worker% catcode other. 7162*6a54128fSAndroid Build Coastguard Worker@gdef@rawbackslash{@let\=@backslashcurfont} 7163*6a54128fSAndroid Build Coastguard Worker@gdef@otherbackslash{@let\=@realbackslash} 7164*6a54128fSAndroid Build Coastguard Worker 7165*6a54128fSAndroid Build Coastguard Worker% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of 7166*6a54128fSAndroid Build Coastguard Worker% the literal character `\'. 7167*6a54128fSAndroid Build Coastguard Worker% 7168*6a54128fSAndroid Build Coastguard Worker@def@normalturnoffactive{% 7169*6a54128fSAndroid Build Coastguard Worker @let\=@normalbackslash 7170*6a54128fSAndroid Build Coastguard Worker @let"=@normaldoublequote 7171*6a54128fSAndroid Build Coastguard Worker @let~=@normaltilde 7172*6a54128fSAndroid Build Coastguard Worker @let^=@normalcaret 7173*6a54128fSAndroid Build Coastguard Worker @let_=@normalunderscore 7174*6a54128fSAndroid Build Coastguard Worker @let|=@normalverticalbar 7175*6a54128fSAndroid Build Coastguard Worker @let<=@normalless 7176*6a54128fSAndroid Build Coastguard Worker @let>=@normalgreater 7177*6a54128fSAndroid Build Coastguard Worker @let+=@normalplus 7178*6a54128fSAndroid Build Coastguard Worker @let$=@normaldollar %$ font-lock fix 7179*6a54128fSAndroid Build Coastguard Worker @unsepspaces 7180*6a54128fSAndroid Build Coastguard Worker} 7181*6a54128fSAndroid Build Coastguard Worker 7182*6a54128fSAndroid Build Coastguard Worker% Make _ and + \other characters, temporarily. 7183*6a54128fSAndroid Build Coastguard Worker% This is canceled by @fixbackslash. 7184*6a54128fSAndroid Build Coastguard Worker@otherifyactive 7185*6a54128fSAndroid Build Coastguard Worker 7186*6a54128fSAndroid Build Coastguard Worker% If a .fmt file is being used, we don't want the `\input texinfo' to show up. 7187*6a54128fSAndroid Build Coastguard Worker% That is what \eatinput is for; after that, the `\' should revert to printing 7188*6a54128fSAndroid Build Coastguard Worker% a backslash. 7189*6a54128fSAndroid Build Coastguard Worker% 7190*6a54128fSAndroid Build Coastguard Worker@gdef@eatinput input texinfo{@fixbackslash} 7191*6a54128fSAndroid Build Coastguard Worker@global@let\ = @eatinput 7192*6a54128fSAndroid Build Coastguard Worker 7193*6a54128fSAndroid Build Coastguard Worker% On the other hand, perhaps the file did not have a `\input texinfo'. Then 7194*6a54128fSAndroid Build Coastguard Worker% the first `\' in the file would cause an error. This macro tries to fix 7195*6a54128fSAndroid Build Coastguard Worker% that, assuming it is called before the first `\' could plausibly occur. 7196*6a54128fSAndroid Build Coastguard Worker% Also turn back on active characters that might appear in the input 7197*6a54128fSAndroid Build Coastguard Worker% file name, in case not using a pre-dumped format. 7198*6a54128fSAndroid Build Coastguard Worker% 7199*6a54128fSAndroid Build Coastguard Worker@gdef@fixbackslash{% 7200*6a54128fSAndroid Build Coastguard Worker @ifx\@eatinput @let\ = @normalbackslash @fi 7201*6a54128fSAndroid Build Coastguard Worker @catcode`+=@active 7202*6a54128fSAndroid Build Coastguard Worker @catcode`@_=@active 7203*6a54128fSAndroid Build Coastguard Worker} 7204*6a54128fSAndroid Build Coastguard Worker 7205*6a54128fSAndroid Build Coastguard Worker% Say @foo, not \foo, in error messages. 7206*6a54128fSAndroid Build Coastguard Worker@escapechar = `@@ 7207*6a54128fSAndroid Build Coastguard Worker 7208*6a54128fSAndroid Build Coastguard Worker% These look ok in all fonts, so just make them not special. 7209*6a54128fSAndroid Build Coastguard Worker@catcode`@& = @other 7210*6a54128fSAndroid Build Coastguard Worker@catcode`@# = @other 7211*6a54128fSAndroid Build Coastguard Worker@catcode`@% = @other 7212*6a54128fSAndroid Build Coastguard Worker 7213*6a54128fSAndroid Build Coastguard Worker 7214*6a54128fSAndroid Build Coastguard Worker@c Local variables: 7215*6a54128fSAndroid Build Coastguard Worker@c eval: (add-hook 'write-file-hooks 'time-stamp) 7216*6a54128fSAndroid Build Coastguard Worker@c page-delimiter: "^\\\\message" 7217*6a54128fSAndroid Build Coastguard Worker@c time-stamp-start: "def\\\\texinfoversion{" 7218*6a54128fSAndroid Build Coastguard Worker@c time-stamp-format: "%:y-%02m-%02d.%02H" 7219*6a54128fSAndroid Build Coastguard Worker@c time-stamp-end: "}" 7220*6a54128fSAndroid Build Coastguard Worker@c End: 7221*6a54128fSAndroid Build Coastguard Worker 7222*6a54128fSAndroid Build Coastguard Worker@c vim:sw=2: 7223*6a54128fSAndroid Build Coastguard Worker 7224*6a54128fSAndroid Build Coastguard Worker@ignore 7225*6a54128fSAndroid Build Coastguard Worker arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 7226*6a54128fSAndroid Build Coastguard Worker@end ignore 7227