Blame build-aux/texinfo.tex

Packit 33f14e
% texinfo.tex -- TeX macros to handle Texinfo files.
Packit 33f14e
% 
Packit 33f14e
% Load plain if necessary, i.e., if running under initex.
Packit 33f14e
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
Packit 33f14e
%
Packit 33f14e
\def\texinfoversion{2017-05-14.14}
Packit 33f14e
%
Packit 33f14e
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
Packit 33f14e
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
Packit 33f14e
% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
Packit 33f14e
% Free Software Foundation, Inc.
Packit 33f14e
%
Packit 33f14e
% This texinfo.tex file is free software: you can redistribute it and/or
Packit 33f14e
% modify it under the terms of the GNU General Public License as
Packit 33f14e
% published by the Free Software Foundation, either version 3 of the
Packit 33f14e
% License, or (at your option) any later version.
Packit 33f14e
%
Packit 33f14e
% This texinfo.tex file is distributed in the hope that it will be
Packit 33f14e
% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
Packit 33f14e
% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 33f14e
% General Public License for more details.
Packit 33f14e
%
Packit 33f14e
% You should have received a copy of the GNU General Public License
Packit 33f14e
% along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit 33f14e
%
Packit 33f14e
% As a special exception, when this file is read by TeX when processing
Packit 33f14e
% a Texinfo source document, you may use the result without
Packit 33f14e
% restriction. This Exception is an additional permission under section 7
Packit 33f14e
% of the GNU General Public License, version 3 ("GPLv3").
Packit 33f14e
%
Packit 33f14e
% Please try the latest version of texinfo.tex before submitting bug
Packit 33f14e
% reports; you can get the latest version from:
Packit 33f14e
%   http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
Packit 33f14e
%   http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
Packit 33f14e
%   http://www.gnu.org/software/texinfo/ (the Texinfo home page)
Packit 33f14e
% The texinfo.tex in any given distribution could well be out
Packit 33f14e
% of date, so if that's what you're using, please check.
Packit 33f14e
%
Packit 33f14e
% Send bug reports to bug-texinfo@gnu.org.  Please include including a
Packit 33f14e
% complete document in each bug report with which we can reproduce the
Packit 33f14e
% problem.  Patches are, of course, greatly appreciated.
Packit 33f14e
%
Packit 33f14e
% To process a Texinfo manual with TeX, it's most reliable to use the
Packit 33f14e
% texi2dvi shell script that comes with the distribution.  For a simple
Packit 33f14e
% manual foo.texi, however, you can get away with this:
Packit 33f14e
%   tex foo.texi
Packit 33f14e
%   texindex foo.??
Packit 33f14e
%   tex foo.texi
Packit 33f14e
%   tex foo.texi
Packit 33f14e
%   dvips foo.dvi -o  # or whatever; this makes foo.ps.
Packit 33f14e
% The extra TeX runs get the cross-reference information correct.
Packit 33f14e
% Sometimes one run after texindex suffices, and sometimes you need more
Packit 33f14e
% than two; texi2dvi does it as many times as necessary.
Packit 33f14e
%
Packit 33f14e
% It is possible to adapt texinfo.tex for other languages, to some
Packit 33f14e
% extent.  You can get the existing language-specific files from the
Packit 33f14e
% full Texinfo distribution.
Packit 33f14e
%
Packit 33f14e
% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
Packit 33f14e
Packit 33f14e
Packit 33f14e
\message{Loading texinfo [version \texinfoversion]:}
Packit 33f14e
Packit 33f14e
% If in a .fmt file, print the version number
Packit 33f14e
% and turn on active characters that we couldn't do earlier because
Packit 33f14e
% they might have appeared in the input file name.
Packit 33f14e
\everyjob{\message{[Texinfo version \texinfoversion]}%
Packit 33f14e
  \catcode`+=\active \catcode`\_=\active}
Packit 33f14e
Packit 33f14e
% LaTeX's \typeout.  This ensures that the messages it is used for
Packit 33f14e
% are identical in format to the corresponding ones from latex/pdflatex.
Packit 33f14e
\def\typeout{\immediate\write17}%
Packit 33f14e
Packit 33f14e
\chardef\other=12
Packit 33f14e
Packit 33f14e
% We never want plain's \outer definition of \+ in Texinfo.
Packit 33f14e
% For @tex, we can use \tabalign.
Packit 33f14e
\let\+ = \relax
Packit 33f14e
Packit 33f14e
% Save some plain tex macros whose names we will redefine.
Packit 33f14e
\let\ptexb=\b
Packit 33f14e
\let\ptexbullet=\bullet
Packit 33f14e
\let\ptexc=\c
Packit 33f14e
\let\ptexcomma=\,
Packit 33f14e
\let\ptexdot=\.
Packit 33f14e
\let\ptexdots=\dots
Packit 33f14e
\let\ptexend=\end
Packit 33f14e
\let\ptexequiv=\equiv
Packit 33f14e
\let\ptexexclam=\!
Packit 33f14e
\let\ptexfootnote=\footnote
Packit 33f14e
\let\ptexgtr=>
Packit 33f14e
\let\ptexhat=^
Packit 33f14e
\let\ptexi=\i
Packit 33f14e
\let\ptexindent=\indent
Packit 33f14e
\let\ptexinsert=\insert
Packit 33f14e
\let\ptexlbrace=\{
Packit 33f14e
\let\ptexless=<
Packit 33f14e
\let\ptexnewwrite\newwrite
Packit 33f14e
\let\ptexnoindent=\noindent
Packit 33f14e
\let\ptexplus=+
Packit 33f14e
\let\ptexraggedright=\raggedright
Packit 33f14e
\let\ptexrbrace=\}
Packit 33f14e
\let\ptexslash=\/
Packit 33f14e
\let\ptexsp=\sp
Packit 33f14e
\let\ptexstar=\*
Packit 33f14e
\let\ptexsup=\sup
Packit 33f14e
\let\ptext=\t
Packit 33f14e
\let\ptextop=\top
Packit 33f14e
{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
Packit 33f14e
Packit 33f14e
% If this character appears in an error message or help string, it
Packit 33f14e
% starts a new line in the output.
Packit 33f14e
\newlinechar = `^^J
Packit 33f14e
Packit 33f14e
% Use TeX 3.0's \inputlineno to get the line number, for better error
Packit 33f14e
% messages, but if we're using an old version of TeX, don't do anything.
Packit 33f14e
%
Packit 33f14e
\ifx\inputlineno\thisisundefined
Packit 33f14e
  \let\linenumber = \empty % Pre-3.0.
Packit 33f14e
\else
Packit 33f14e
  \def\linenumber{l.\the\inputlineno:\space}
Packit 33f14e
\fi
Packit 33f14e
Packit 33f14e
% Set up fixed words for English if not already set.
Packit 33f14e
\ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
Packit 33f14e
\ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
Packit 33f14e
\ifx\putworderror\undefined     \gdef\putworderror{error}\fi
Packit 33f14e
\ifx\putwordfile\undefined      \gdef\putwordfile{file}\fi
Packit 33f14e
\ifx\putwordin\undefined        \gdef\putwordin{in}\fi
Packit 33f14e
\ifx\putwordIndexIsEmpty\undefined       \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
Packit 33f14e
\ifx\putwordIndexNonexistent\undefined   \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
Packit 33f14e
\ifx\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi
Packit 33f14e
\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
Packit 33f14e
\ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi
Packit 33f14e
\ifx\putwordNoTitle\undefined   \gdef\putwordNoTitle{No Title}\fi
Packit 33f14e
\ifx\putwordof\undefined        \gdef\putwordof{of}\fi
Packit 33f14e
\ifx\putwordon\undefined        \gdef\putwordon{on}\fi
Packit 33f14e
\ifx\putwordpage\undefined      \gdef\putwordpage{page}\fi
Packit 33f14e
\ifx\putwordsection\undefined   \gdef\putwordsection{section}\fi
Packit 33f14e
\ifx\putwordSection\undefined   \gdef\putwordSection{Section}\fi
Packit 33f14e
\ifx\putwordsee\undefined       \gdef\putwordsee{see}\fi
Packit 33f14e
\ifx\putwordSee\undefined       \gdef\putwordSee{See}\fi
Packit 33f14e
\ifx\putwordShortTOC\undefined  \gdef\putwordShortTOC{Short Contents}\fi
Packit 33f14e
\ifx\putwordTOC\undefined       \gdef\putwordTOC{Table of Contents}\fi
Packit 33f14e
%
Packit 33f14e
\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
Packit 33f14e
\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
Packit 33f14e
\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
Packit 33f14e
\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
Packit 33f14e
\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
Packit 33f14e
\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
Packit 33f14e
\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
Packit 33f14e
\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
Packit 33f14e
\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
Packit 33f14e
\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
Packit 33f14e
\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
Packit 33f14e
\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
Packit 33f14e
%
Packit 33f14e
\ifx\putwordDefmac\undefined    \gdef\putwordDefmac{Macro}\fi
Packit 33f14e
\ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
Packit 33f14e
\ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
Packit 33f14e
\ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
Packit 33f14e
\ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
Packit 33f14e
Packit 33f14e
% Give the space character the catcode for a space.
Packit 33f14e
\def\spaceisspace{\catcode`\ =10\relax}
Packit 33f14e
Packit 33f14e
% Likewise for ^^M, the end of line character.
Packit 33f14e
\def\endlineisspace{\catcode13=10\relax}
Packit 33f14e
Packit 33f14e
\chardef\dashChar  = `\-
Packit 33f14e
\chardef\slashChar = `\/
Packit 33f14e
\chardef\underChar = `\_
Packit 33f14e
Packit 33f14e
% Ignore a token.
Packit 33f14e
%
Packit 33f14e
\def\gobble#1{}
Packit 33f14e
Packit 33f14e
% The following is used inside several \edef's.
Packit 33f14e
\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
Packit 33f14e
Packit 33f14e
% Hyphenation fixes.
Packit 33f14e
\hyphenation{
Packit 33f14e
  Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
Packit 33f14e
  ap-pen-dix bit-map bit-maps
Packit 33f14e
  data-base data-bases eshell fall-ing half-way long-est man-u-script
Packit 33f14e
  man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
Packit 33f14e
  par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
Packit 33f14e
  spell-ing spell-ings
Packit 33f14e
  stand-alone strong-est time-stamp time-stamps which-ever white-space
Packit 33f14e
  wide-spread wrap-around
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% Sometimes it is convenient to have everything in the transcript file
Packit 33f14e
% and nothing on the terminal.  We don't just call \tracingall here,
Packit 33f14e
% since that produces some useless output on the terminal.  We also make
Packit 33f14e
% some effort to order the tracing commands to reduce output in the log
Packit 33f14e
% file; cf. trace.sty in LaTeX.
Packit 33f14e
%
Packit 33f14e
\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
Packit 33f14e
\def\loggingall{%
Packit 33f14e
  \tracingstats2
Packit 33f14e
  \tracingpages1
Packit 33f14e
  \tracinglostchars2  % 2 gives us more in etex
Packit 33f14e
  \tracingparagraphs1
Packit 33f14e
  \tracingoutput1
Packit 33f14e
  \tracingmacros2
Packit 33f14e
  \tracingrestores1
Packit 33f14e
  \showboxbreadth\maxdimen \showboxdepth\maxdimen
Packit 33f14e
  \ifx\eTeXversion\thisisundefined\else % etex gives us more logging
Packit 33f14e
    \tracingscantokens1
Packit 33f14e
    \tracingifs1
Packit 33f14e
    \tracinggroups1
Packit 33f14e
    \tracingnesting2
Packit 33f14e
    \tracingassigns1
Packit 33f14e
  \fi
Packit 33f14e
  \tracingcommands3  % 3 gives us more in etex
Packit 33f14e
  \errorcontextlines16
Packit 33f14e
}%
Packit 33f14e
Packit 33f14e
% @errormsg{MSG}.  Do the index-like expansions on MSG, but if things
Packit 33f14e
% aren't perfect, it's not the end of the world, being an error message,
Packit 33f14e
% after all.
Packit 33f14e
% 
Packit 33f14e
\def\errormsg{\begingroup \indexnofonts \doerrormsg}
Packit 33f14e
\def\doerrormsg#1{\errmessage{#1}}
Packit 33f14e
Packit 33f14e
% add check for \lastpenalty to plain's definitions.  If the last thing
Packit 33f14e
% we did was a \nobreak, we don't want to insert more space.
Packit 33f14e
%
Packit 33f14e
\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
Packit 33f14e
  \removelastskip\penalty-50\smallskip\fi\fi}
Packit 33f14e
\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
Packit 33f14e
  \removelastskip\penalty-100\medskip\fi\fi}
Packit 33f14e
\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
Packit 33f14e
  \removelastskip\penalty-200\bigskip\fi\fi}
Packit 33f14e
Packit 33f14e
%? Output routine
Packit 33f14e
%
Packit 33f14e
Packit 33f14e
% For a final copy, take out the rectangles
Packit 33f14e
% that mark overfull boxes (in case you have decided
Packit 33f14e
% that the text looks ok even though it passes the margin).
Packit 33f14e
%
Packit 33f14e
\def\finalout{\overfullrule=0pt }
Packit 33f14e
Packit 33f14e
% Do @cropmarks to get crop marks.
Packit 33f14e
%
Packit 33f14e
\newif\ifcropmarks
Packit 33f14e
\let\cropmarks = \cropmarkstrue
Packit 33f14e
%
Packit 33f14e
% Dimensions to add cropmarks at corners.
Packit 33f14e
% Added by P. A. MacKay, 12 Nov. 1986
Packit 33f14e
%
Packit 33f14e
\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
Packit 33f14e
\newdimen\cornerlong  \cornerlong=1pc
Packit 33f14e
\newdimen\cornerthick \cornerthick=.3pt
Packit 33f14e
\newdimen\topandbottommargin \topandbottommargin=.75in
Packit 33f14e
Packit 33f14e
% Output a mark which sets \thischapter, \thissection and \thiscolor.
Packit 33f14e
% We dump everything together because we only have one kind of mark.
Packit 33f14e
% This works because we only use \botmark / \topmark, not \firstmark.
Packit 33f14e
%
Packit 33f14e
% A mark contains a subexpression of the \ifcase ... \fi construct.
Packit 33f14e
% \get*marks macros below extract the needed part using \ifcase.
Packit 33f14e
%
Packit 33f14e
% Another complication is to let the user choose whether \thischapter
Packit 33f14e
% (\thissection) refers to the chapter (section) in effect at the top
Packit 33f14e
% of a page, or that at the bottom of a page.
Packit 33f14e
Packit 33f14e
% \domark is called twice inside \chapmacro, to add one
Packit 33f14e
% mark before the section break, and one after.
Packit 33f14e
%   In the second call \prevchapterdefs is the same as \lastchapterdefs,
Packit 33f14e
% and \prevsectiondefs is the same as \lastsectiondefs.
Packit 33f14e
%   Then if the page is not broken at the mark, some of the previous
Packit 33f14e
% section appears on the page, and we can get the name of this section
Packit 33f14e
% from \firstmark for @everyheadingmarks top.
Packit 33f14e
%   @everyheadingmarks bottom uses \botmark.
Packit 33f14e
%
Packit 33f14e
% See page 260 of The TeXbook.
Packit 33f14e
\def\domark{%
Packit 33f14e
  \toks0=\expandafter{\lastchapterdefs}%
Packit 33f14e
  \toks2=\expandafter{\lastsectiondefs}%
Packit 33f14e
  \toks4=\expandafter{\prevchapterdefs}%
Packit 33f14e
  \toks6=\expandafter{\prevsectiondefs}%
Packit 33f14e
  \toks8=\expandafter{\lastcolordefs}%
Packit 33f14e
  \mark{%
Packit 33f14e
                   \the\toks0 \the\toks2  % 0: marks for @everyheadingmarks top
Packit 33f14e
      \noexpand\or \the\toks4 \the\toks6  % 1: for @everyheadingmarks bottom
Packit 33f14e
    \noexpand\else \the\toks8             % 2: color marks
Packit 33f14e
  }%
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% \gettopheadingmarks, \getbottomheadingmarks,
Packit 33f14e
% \getcolormarks - extract needed part of mark.
Packit 33f14e
%
Packit 33f14e
% \topmark doesn't work for the very first chapter (after the title
Packit 33f14e
% page or the contents), so we use \firstmark there -- this gets us
Packit 33f14e
% the mark with the chapter defs, unless the user sneaks in, e.g.,
Packit 33f14e
% @setcolor (or @url, or @link, etc.) between @contents and the very
Packit 33f14e
% first @chapter.
Packit 33f14e
\def\gettopheadingmarks{%
Packit 33f14e
  \ifcase0\topmark\fi
Packit 33f14e
  \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
Packit 33f14e
}
Packit 33f14e
\def\getbottomheadingmarks{\ifcase1\botmark\fi}
Packit 33f14e
\def\getcolormarks{\ifcase2\topmark\fi}
Packit 33f14e
Packit 33f14e
% Avoid "undefined control sequence" errors.
Packit 33f14e
\def\lastchapterdefs{}
Packit 33f14e
\def\lastsectiondefs{}
Packit 33f14e
\def\lastsection{}
Packit 33f14e
\def\prevchapterdefs{}
Packit 33f14e
\def\prevsectiondefs{}
Packit 33f14e
\def\lastcolordefs{}
Packit 33f14e
Packit 33f14e
% Margin to add to right of even pages, to left of odd pages.
Packit 33f14e
\newdimen\bindingoffset
Packit 33f14e
\newdimen\normaloffset
Packit 33f14e
\newdimen\txipagewidth \newdimen\txipageheight
Packit 33f14e
Packit 33f14e
% Main output routine.
Packit 33f14e
%
Packit 33f14e
\chardef\PAGE = 255
Packit 33f14e
\output = {\onepageout{\pagecontents\PAGE}}
Packit 33f14e
Packit 33f14e
\newbox\headlinebox
Packit 33f14e
\newbox\footlinebox
Packit 33f14e
Packit 33f14e
% \onepageout takes a vbox as an argument.
Packit 33f14e
% \shipout a vbox for a single page, adding an optional header, footer,
Packit 33f14e
% cropmarks, and footnote.  This also causes index entries for this page
Packit 33f14e
% to be written to the auxiliary files.
Packit 33f14e
%
Packit 33f14e
\def\onepageout#1{%
Packit 33f14e
  \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
Packit 33f14e
  %
Packit 33f14e
  \ifodd\pageno  \advance\hoffset by \bindingoffset
Packit 33f14e
  \else \advance\hoffset by -\bindingoffset\fi
Packit 33f14e
  %
Packit 33f14e
  % Common context changes for both heading and footing.
Packit 33f14e
  % Do this outside of the \shipout so @code etc. will be expanded in
Packit 33f14e
  % the headline as they should be, not taken literally (outputting ''code).
Packit 33f14e
  \def\commmonheadfootline{\let\hsize=\txipagewidth \texinfochars}
Packit 33f14e
  %
Packit 33f14e
  % Retrieve the information for the headings from the marks in the page,
Packit 33f14e
  % and call Plain TeX's \makeheadline and \makefootline, which use the
Packit 33f14e
  % values in \headline and \footline.
Packit 33f14e
  %
Packit 33f14e
  % This is used to check if we are on the first page of a chapter.
Packit 33f14e
  \ifcase1\topmark\fi
Packit 33f14e
  \let\prevchaptername\thischaptername
Packit 33f14e
  \ifcase0\firstmark\fi
Packit 33f14e
  \let\curchaptername\thischaptername
Packit 33f14e
  %
Packit 33f14e
  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
Packit 33f14e
  \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
Packit 33f14e
  %
Packit 33f14e
  \ifx\curchaptername\prevchaptername
Packit 33f14e
    \let\thischapterheading\thischapter
Packit 33f14e
  \else
Packit 33f14e
    % \thischapterheading is the same as \thischapter except it is blank
Packit 33f14e
    % for the first page of a chapter.  This is to prevent the chapter name 
Packit 33f14e
    % being shown twice.
Packit 33f14e
    \def\thischapterheading{}%
Packit 33f14e
  \fi
Packit 33f14e
  %
Packit 33f14e
  \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}%
Packit 33f14e
  \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}%
Packit 33f14e
  %
Packit 33f14e
  {%
Packit 33f14e
    % Set context for writing to auxiliary files like index files.
Packit 33f14e
    % Have to do this stuff outside the \shipout because we want it to
Packit 33f14e
    % take effect in \write's, yet the group defined by the \vbox ends
Packit 33f14e
    % before the \shipout runs.
Packit 33f14e
    %
Packit 33f14e
    \indexdummies         % don't expand commands in the output.
Packit 33f14e
    \normalturnoffactive  % \ in index entries must not stay \, e.g., if
Packit 33f14e
               % the page break happens to be in the middle of an example.
Packit 33f14e
               % We don't want .vr (or whatever) entries like this:
Packit 33f14e
               % \entry{{\indexbackslash }acronym}{32}{\code {\acronym}}
Packit 33f14e
               % "\acronym" won't work when it's read back in;
Packit 33f14e
               % it needs to be
Packit 33f14e
               % {\code {{\backslashcurfont }acronym}
Packit 33f14e
    \shipout\vbox{%
Packit 33f14e
      % Do this early so pdf references go to the beginning of the page.
Packit 33f14e
      \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
Packit 33f14e
      %
Packit 33f14e
      \ifcropmarks \vbox to \outervsize\bgroup
Packit 33f14e
        \hsize = \outerhsize
Packit 33f14e
        \vskip-\topandbottommargin
Packit 33f14e
        \vtop to0pt{%
Packit 33f14e
          \line{\ewtop\hfil\ewtop}%
Packit 33f14e
          \nointerlineskip
Packit 33f14e
          \line{%
Packit 33f14e
            \vbox{\moveleft\cornerthick\nstop}%
Packit 33f14e
            \hfill
Packit 33f14e
            \vbox{\moveright\cornerthick\nstop}%
Packit 33f14e
          }%
Packit 33f14e
          \vss}%
Packit 33f14e
        \vskip\topandbottommargin
Packit 33f14e
        \line\bgroup
Packit 33f14e
          \hfil % center the page within the outer (page) hsize.
Packit 33f14e
          \ifodd\pageno\hskip\bindingoffset\fi
Packit 33f14e
          \vbox\bgroup
Packit 33f14e
      \fi
Packit 33f14e
      %
Packit 33f14e
      \unvbox\headlinebox
Packit 33f14e
      \pagebody{#1}%
Packit 33f14e
      \ifdim\ht\footlinebox > 0pt
Packit 33f14e
        % Only leave this space if the footline is nonempty.
Packit 33f14e
        % (We lessened \vsize for it in \oddfootingyyy.)
Packit 33f14e
        % The \baselineskip=24pt in plain's \makefootline has no effect.
Packit 33f14e
        \vskip 24pt
Packit 33f14e
        \unvbox\footlinebox
Packit 33f14e
      \fi
Packit 33f14e
      %
Packit 33f14e
      \ifcropmarks
Packit 33f14e
          \egroup % end of \vbox\bgroup
Packit 33f14e
        \hfil\egroup % end of (centering) \line\bgroup
Packit 33f14e
        \vskip\topandbottommargin plus1fill minus1fill
Packit 33f14e
        \boxmaxdepth = \cornerthick
Packit 33f14e
        \vbox to0pt{\vss
Packit 33f14e
          \line{%
Packit 33f14e
            \vbox{\moveleft\cornerthick\nsbot}%
Packit 33f14e
            \hfill
Packit 33f14e
            \vbox{\moveright\cornerthick\nsbot}%
Packit 33f14e
          }%
Packit 33f14e
          \nointerlineskip
Packit 33f14e
          \line{\ewbot\hfil\ewbot}%
Packit 33f14e
        }%
Packit 33f14e
      \egroup % \vbox from first cropmarks clause
Packit 33f14e
      \fi
Packit 33f14e
    }% end of \shipout\vbox
Packit 33f14e
  }% end of group with \indexdummies
Packit 33f14e
  \advancepageno
Packit 33f14e
  \ifnum\outputpenalty>-20000 \else\dosupereject\fi
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
\newinsert\margin \dimen\margin=\maxdimen
Packit 33f14e
Packit 33f14e
% Main part of page, including any footnotes
Packit 33f14e
\def\pagebody#1{\vbox to\txipageheight{\boxmaxdepth=\maxdepth #1}}
Packit 33f14e
{\catcode`\@ =11
Packit 33f14e
\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
Packit 33f14e
% marginal hacks, juha@viisa.uucp (Juha Takala)
Packit 33f14e
\ifvoid\margin\else % marginal info is present
Packit 33f14e
  \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
Packit 33f14e
\dimen@=\dp#1\relax \unvbox#1\relax
Packit 33f14e
\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
Packit 33f14e
\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% Here are the rules for the cropmarks.  Note that they are
Packit 33f14e
% offset so that the space between them is truly \outerhsize or \outervsize
Packit 33f14e
% (P. A. MacKay, 12 November, 1986)
Packit 33f14e
%
Packit 33f14e
\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
Packit 33f14e
\def\nstop{\vbox
Packit 33f14e
  {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
Packit 33f14e
\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
Packit 33f14e
\def\nsbot{\vbox
Packit 33f14e
  {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
Packit 33f14e
Packit 33f14e
Packit 33f14e
% Argument parsing
Packit 33f14e
Packit 33f14e
% Parse an argument, then pass it to #1.  The argument is the rest of
Packit 33f14e
% the input line (except we remove a trailing comment).  #1 should be a
Packit 33f14e
% macro which expects an ordinary undelimited TeX argument.
Packit 33f14e
% For example, \def\foo{\parsearg\fooxxx}.
Packit 33f14e
%
Packit 33f14e
\def\parsearg{\parseargusing{}}
Packit 33f14e
\def\parseargusing#1#2{%
Packit 33f14e
  \def\argtorun{#2}%
Packit 33f14e
  \begingroup
Packit 33f14e
    \obeylines
Packit 33f14e
    \spaceisspace
Packit 33f14e
    #1%
Packit 33f14e
    \parseargline\empty% Insert the \empty token, see \finishparsearg below.
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
{\obeylines %
Packit 33f14e
  \gdef\parseargline#1^^M{%
Packit 33f14e
    \endgroup % End of the group started in \parsearg.
Packit 33f14e
    \argremovecomment #1\comment\ArgTerm%
Packit 33f14e
  }%
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% First remove any @comment, then any @c comment.  Also remove a @texinfoc
Packit 33f14e
% comment (see \scanmacro for details).  Pass the result on to \argcheckspaces.
Packit 33f14e
\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
Packit 33f14e
\def\argremovec#1\c#2\ArgTerm{\argremovetexinfoc #1\texinfoc\ArgTerm}
Packit 33f14e
\def\argremovetexinfoc#1\texinfoc#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
Packit 33f14e
Packit 33f14e
% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
Packit 33f14e
%
Packit 33f14e
% \argremovec might leave us with trailing space, e.g.,
Packit 33f14e
%    @end itemize  @c foo
Packit 33f14e
% This space token undergoes the same procedure and is eventually removed
Packit 33f14e
% by \finishparsearg.
Packit 33f14e
%
Packit 33f14e
\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
Packit 33f14e
\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
Packit 33f14e
\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
Packit 33f14e
  \def\temp{#3}%
Packit 33f14e
  \ifx\temp\empty
Packit 33f14e
    % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
Packit 33f14e
    \let\temp\finishparsearg
Packit 33f14e
  \else
Packit 33f14e
    \let\temp\argcheckspaces
Packit 33f14e
  \fi
Packit 33f14e
  % Put the space token in:
Packit 33f14e
  \temp#1 #3\ArgTerm
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% If a _delimited_ argument is enclosed in braces, they get stripped; so
Packit 33f14e
% to get _exactly_ the rest of the line, we had to prevent such situation.
Packit 33f14e
% We prepended an \empty token at the very beginning and we expand it now,
Packit 33f14e
% just before passing the control to \argtorun.
Packit 33f14e
% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
Packit 33f14e
% either the null string, or it ends with \^^M---thus there is no danger
Packit 33f14e
% that a pair of braces would be stripped.
Packit 33f14e
%
Packit 33f14e
% But first, we have to remove the trailing space token.
Packit 33f14e
%
Packit 33f14e
\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
Packit 33f14e
Packit 33f14e
Packit 33f14e
% \parseargdef - define a command taking an argument on the line
Packit 33f14e
%
Packit 33f14e
% \parseargdef\foo{...}
Packit 33f14e
%	is roughly equivalent to
Packit 33f14e
% \def\foo{\parsearg\Xfoo}
Packit 33f14e
% \def\Xfoo#1{...}
Packit 33f14e
\def\parseargdef#1{%
Packit 33f14e
  \expandafter \doparseargdef \csname\string#1\endcsname #1%
Packit 33f14e
}
Packit 33f14e
\def\doparseargdef#1#2{%
Packit 33f14e
  \def#2{\parsearg#1}%
Packit 33f14e
  \def#1##1%
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% Several utility definitions with active space:
Packit 33f14e
{
Packit 33f14e
  \obeyspaces
Packit 33f14e
  \gdef\obeyedspace{ }
Packit 33f14e
Packit 33f14e
  % Make each space character in the input produce a normal interword
Packit 33f14e
  % space in the output.  Don't allow a line break at this space, as this
Packit 33f14e
  % is used only in environments like @example, where each line of input
Packit 33f14e
  % should produce a line of output anyway.
Packit 33f14e
  %
Packit 33f14e
  \gdef\sepspaces{\obeyspaces\let =\tie}
Packit 33f14e
Packit 33f14e
  % If an index command is used in an @example environment, any spaces
Packit 33f14e
  % therein should become regular spaces in the raw index file, not the
Packit 33f14e
  % expansion of \tie (\leavevmode \penalty \@M \ ).
Packit 33f14e
  \gdef\unsepspaces{\let =\space}
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
Packit 33f14e
\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
Packit 33f14e
Packit 33f14e
% Define the framework for environments in texinfo.tex.  It's used like this:
Packit 33f14e
%
Packit 33f14e
%   \envdef\foo{...}
Packit 33f14e
%   \def\Efoo{...}
Packit 33f14e
%
Packit 33f14e
% It's the responsibility of \envdef to insert \begingroup before the
Packit 33f14e
% actual body; @end closes the group after calling \Efoo.  \envdef also
Packit 33f14e
% defines \thisenv, so the current environment is known; @end checks
Packit 33f14e
% whether the environment name matches.  The \checkenv macro can also be
Packit 33f14e
% used to check whether the current environment is the one expected.
Packit 33f14e
%
Packit 33f14e
% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
Packit 33f14e
% are not treated as environments; they don't open a group.  (The
Packit 33f14e
% implementation of @end takes care not to call \endgroup in this
Packit 33f14e
% special case.)
Packit 33f14e
Packit 33f14e
Packit 33f14e
% At run-time, environments start with this:
Packit 33f14e
\def\startenvironment#1{\begingroup\def\thisenv{#1}}
Packit 33f14e
% initialize
Packit 33f14e
\let\thisenv\empty
Packit 33f14e
Packit 33f14e
% ... but they get defined via ``\envdef\foo{...}'':
Packit 33f14e
\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
Packit 33f14e
\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
Packit 33f14e
Packit 33f14e
% Check whether we're in the right environment:
Packit 33f14e
\def\checkenv#1{%
Packit 33f14e
  \def\temp{#1}%
Packit 33f14e
  \ifx\thisenv\temp
Packit 33f14e
  \else
Packit 33f14e
    \badenverr
Packit 33f14e
  \fi
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% Environment mismatch, #1 expected:
Packit 33f14e
\def\badenverr{%
Packit 33f14e
  \errhelp = \EMsimple
Packit 33f14e
  \errmessage{This command can appear only \inenvironment\temp,
Packit 33f14e
    not \inenvironment\thisenv}%
Packit 33f14e
}
Packit 33f14e
\def\inenvironment#1{%
Packit 33f14e
  \ifx#1\empty
Packit 33f14e
    outside of any environment%
Packit 33f14e
  \else
Packit 33f14e
    in environment \expandafter\string#1%
Packit 33f14e
  \fi
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% @end foo executes the definition of \Efoo.
Packit 33f14e
% But first, it executes a specialized version of \checkenv
Packit 33f14e
%
Packit 33f14e
\parseargdef\end{%
Packit 33f14e
  \if 1\csname iscond.#1\endcsname
Packit 33f14e
  \else
Packit 33f14e
    % The general wording of \badenverr may not be ideal.
Packit 33f14e
    \expandafter\checkenv\csname#1\endcsname
Packit 33f14e
    \csname E#1\endcsname
Packit 33f14e
    \endgroup
Packit 33f14e
  \fi
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
\newhelp\EMsimple{Press RETURN to continue.}
Packit 33f14e
Packit 33f14e
Packit 33f14e
% Be sure we're in horizontal mode when doing a tie, since we make space
Packit 33f14e
% equivalent to this in @example-like environments. Otherwise, a space
Packit 33f14e
% at the beginning of a line will start with \penalty -- and
Packit 33f14e
% since \penalty is valid in vertical mode, we'd end up putting the
Packit 33f14e
% penalty on the vertical list instead of in the new paragraph.
Packit 33f14e
{\catcode`@ = 11
Packit 33f14e
 % Avoid using \@M directly, because that causes trouble
Packit 33f14e
 % if the definition is written into an index file.
Packit 33f14e
 \global\let\tiepenalty = \@M
Packit 33f14e
 \gdef\tie{\leavevmode\penalty\tiepenalty\ }
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% @: forces normal size whitespace following.
Packit 33f14e
\def\:{\spacefactor=1000 }
Packit 33f14e
Packit 33f14e
% @* forces a line break.
Packit 33f14e
\def\*{\unskip\hfil\break\hbox{}\ignorespaces}
Packit 33f14e
Packit 33f14e
% @/ allows a line break.
Packit 33f14e
\let\/=\allowbreak
Packit 33f14e
Packit 33f14e
% @. is an end-of-sentence period.
Packit 33f14e
\def\.{.\spacefactor=\endofsentencespacefactor\space}
Packit 33f14e
Packit 33f14e
% @! is an end-of-sentence bang.
Packit 33f14e
\def\!{!\spacefactor=\endofsentencespacefactor\space}
Packit 33f14e
Packit 33f14e
% @? is an end-of-sentence query.
Packit 33f14e
\def\?{?\spacefactor=\endofsentencespacefactor\space}
Packit 33f14e
Packit 33f14e
% @frenchspacing on|off  says whether to put extra space after punctuation.
Packit 33f14e
%
Packit 33f14e
\def\onword{on}
Packit 33f14e
\def\offword{off}
Packit 33f14e
%
Packit 33f14e
\parseargdef\frenchspacing{%
Packit 33f14e
  \def\temp{#1}%
Packit 33f14e
  \ifx\temp\onword \plainfrenchspacing
Packit 33f14e
  \else\ifx\temp\offword \plainnonfrenchspacing
Packit 33f14e
  \else
Packit 33f14e
    \errhelp = \EMsimple
Packit 33f14e
    \errmessage{Unknown @frenchspacing option `\temp', must be on|off}%
Packit 33f14e
  \fi\fi
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% @w prevents a word break.  Without the \leavevmode, @w at the
Packit 33f14e
% beginning of a paragraph, when TeX is still in vertical mode, would
Packit 33f14e
% produce a whole line of output instead of starting the paragraph.
Packit 33f14e
\def\w#1{\leavevmode\hbox{#1}}
Packit 33f14e
Packit 33f14e
% @group ... @end group forces ... to be all on one page, by enclosing
Packit 33f14e
% it in a TeX vbox.  We use \vtop instead of \vbox to construct the box
Packit 33f14e
% to keep its height that of a normal line.  According to the rules for
Packit 33f14e
% \topskip (p.114 of the TeXbook), the glue inserted is
Packit 33f14e
% max (\topskip - \ht (first item), 0).  If that height is large,
Packit 33f14e
% therefore, no glue is inserted, and the space between the headline and
Packit 33f14e
% the text is small, which looks bad.
Packit 33f14e
%
Packit 33f14e
% Another complication is that the group might be very large.  This can
Packit 33f14e
% cause the glue on the previous page to be unduly stretched, because it
Packit 33f14e
% does not have much material.  In this case, it's better to add an
Packit 33f14e
% explicit \vfill so that the extra space is at the bottom.  The
Packit 33f14e
% threshold for doing this is if the group is more than \vfilllimit
Packit 33f14e
% percent of a page (\vfilllimit can be changed inside of @tex).
Packit 33f14e
%
Packit 33f14e
\newbox\groupbox
Packit 33f14e
\def\vfilllimit{0.7}
Packit 33f14e
%
Packit 33f14e
\envdef\group{%
Packit 33f14e
  \ifnum\catcode`\^^M=\active \else
Packit 33f14e
    \errhelp = \groupinvalidhelp
Packit 33f14e
    \errmessage{@group invalid in context where filling is enabled}%
Packit 33f14e
  \fi
Packit 33f14e
  \startsavinginserts
Packit 33f14e
  %
Packit 33f14e
  \setbox\groupbox = \vtop\bgroup
Packit 33f14e
    % Do @comment since we are called inside an environment such as
Packit 33f14e
    % @example, where each end-of-line in the input causes an
Packit 33f14e
    % end-of-line in the output.  We don't want the end-of-line after
Packit 33f14e
    % the `@group' to put extra space in the output.  Since @group
Packit 33f14e
    % should appear on a line by itself (according to the Texinfo
Packit 33f14e
    % manual), we don't worry about eating any user text.
Packit 33f14e
    \comment
Packit 33f14e
}
Packit 33f14e
%
Packit 33f14e
% The \vtop produces a box with normal height and large depth; thus, TeX puts
Packit 33f14e
% \baselineskip glue before it, and (when the next line of text is done)
Packit 33f14e
% \lineskip glue after it.  Thus, space below is not quite equal to space
Packit 33f14e
% above.  But it's pretty close.
Packit 33f14e
\def\Egroup{%
Packit 33f14e
    % To get correct interline space between the last line of the group
Packit 33f14e
    % and the first line afterwards, we have to propagate \prevdepth.
Packit 33f14e
    \endgraf % Not \par, as it may have been set to \lisppar.
Packit 33f14e
    \global\dimen1 = \prevdepth
Packit 33f14e
  \egroup           % End the \vtop.
Packit 33f14e
  \addgroupbox
Packit 33f14e
  \prevdepth = \dimen1
Packit 33f14e
  \checkinserts
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
\def\addgroupbox{
Packit 33f14e
  % \dimen0 is the vertical size of the group's box.
Packit 33f14e
  \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
Packit 33f14e
  % \dimen2 is how much space is left on the page (more or less).
Packit 33f14e
  \dimen2 = \txipageheight   \advance\dimen2 by -\pagetotal
Packit 33f14e
  % if the group doesn't fit on the current page, and it's a big big
Packit 33f14e
  % group, force a page break.
Packit 33f14e
  \ifdim \dimen0 > \dimen2
Packit 33f14e
    \ifdim \pagetotal < \vfilllimit\txipageheight
Packit 33f14e
      \page
Packit 33f14e
    \fi
Packit 33f14e
  \fi
Packit 33f14e
  \box\groupbox
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
%
Packit 33f14e
% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
Packit 33f14e
% message, so this ends up printing `@group can only ...'.
Packit 33f14e
%
Packit 33f14e
\newhelp\groupinvalidhelp{%
Packit 33f14e
group can only be used in environments such as @example,^^J%
Packit 33f14e
where each line of input produces a line of output.}
Packit 33f14e
Packit 33f14e
% @need space-in-mils
Packit 33f14e
% forces a page break if there is not space-in-mils remaining.
Packit 33f14e
Packit 33f14e
\newdimen\mil  \mil=0.001in
Packit 33f14e
Packit 33f14e
\parseargdef\need{%
Packit 33f14e
  % Ensure vertical mode, so we don't make a big box in the middle of a
Packit 33f14e
  % paragraph.
Packit 33f14e
  \par
Packit 33f14e
  %
Packit 33f14e
  % If the @need value is less than one line space, it's useless.
Packit 33f14e
  \dimen0 = #1\mil
Packit 33f14e
  \dimen2 = \ht\strutbox
Packit 33f14e
  \advance\dimen2 by \dp\strutbox
Packit 33f14e
  \ifdim\dimen0 > \dimen2
Packit 33f14e
    %
Packit 33f14e
    % Do a \strut just to make the height of this box be normal, so the
Packit 33f14e
    % normal leading is inserted relative to the preceding line.
Packit 33f14e
    % And a page break here is fine.
Packit 33f14e
    \vtop to #1\mil{\strut\vfil}%
Packit 33f14e
    %
Packit 33f14e
    % TeX does not even consider page breaks if a penalty added to the
Packit 33f14e
    % main vertical list is 10000 or more.  But in order to see if the
Packit 33f14e
    % empty box we just added fits on the page, we must make it consider
Packit 33f14e
    % page breaks.  On the other hand, we don't want to actually break the
Packit 33f14e
    % page after the empty box.  So we use a penalty of 9999.
Packit 33f14e
    %
Packit 33f14e
    % There is an extremely small chance that TeX will actually break the
Packit 33f14e
    % page at this \penalty, if there are no other feasible breakpoints in
Packit 33f14e
    % sight.  (If the user is using lots of big @group commands, which
Packit 33f14e
    % almost-but-not-quite fill up a page, TeX will have a hard time doing
Packit 33f14e
    % good page breaking, for example.)  However, I could not construct an
Packit 33f14e
    % example where a page broke at this \penalty; if it happens in a real
Packit 33f14e
    % document, then we can reconsider our strategy.
Packit 33f14e
    \penalty9999
Packit 33f14e
    %
Packit 33f14e
    % Back up by the size of the box, whether we did a page break or not.
Packit 33f14e
    \kern -#1\mil
Packit 33f14e
    %
Packit 33f14e
    % Do not allow a page break right after this kern.
Packit 33f14e
    \nobreak
Packit 33f14e
  \fi
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% @br   forces paragraph break (and is undocumented).
Packit 33f14e
Packit 33f14e
\let\br = \par
Packit 33f14e
Packit 33f14e
% @page forces the start of a new page.
Packit 33f14e
%
Packit 33f14e
\def\page{\par\vfill\supereject}
Packit 33f14e
Packit 33f14e
% @exdent text....
Packit 33f14e
% outputs text on separate line in roman font, starting at standard page margin
Packit 33f14e
Packit 33f14e
% This records the amount of indent in the innermost environment.
Packit 33f14e
% That's how much \exdent should take out.
Packit 33f14e
\newskip\exdentamount
Packit 33f14e
Packit 33f14e
% This defn is used inside fill environments such as @defun.
Packit 33f14e
\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
Packit 33f14e
Packit 33f14e
% This defn is used inside nofill environments such as @example.
Packit 33f14e
\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
Packit 33f14e
  \leftline{\hskip\leftskip{\rm#1}}}}
Packit 33f14e
Packit 33f14e
% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
Packit 33f14e
% paragraph.  For more general purposes, use the \margin insertion
Packit 33f14e
% class.  WHICH is `l' or `r'.  Not documented, written for gawk manual.
Packit 33f14e
%
Packit 33f14e
\newskip\inmarginspacing \inmarginspacing=1cm
Packit 33f14e
\def\strutdepth{\dp\strutbox}
Packit 33f14e
%
Packit 33f14e
\def\doinmargin#1#2{\strut\vadjust{%
Packit 33f14e
  \nobreak
Packit 33f14e
  \kern-\strutdepth
Packit 33f14e
  \vtop to \strutdepth{%
Packit 33f14e
    \baselineskip=\strutdepth
Packit 33f14e
    \vss
Packit 33f14e
    % if you have multiple lines of stuff to put here, you'll need to
Packit 33f14e
    % make the vbox yourself of the appropriate size.
Packit 33f14e
    \ifx#1l%
Packit 33f14e
      \llap{\ignorespaces #2\hskip\inmarginspacing}%
Packit 33f14e
    \else
Packit 33f14e
      \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
Packit 33f14e
    \fi
Packit 33f14e
    \null
Packit 33f14e
  }%
Packit 33f14e
}}
Packit 33f14e
\def\inleftmargin{\doinmargin l}
Packit 33f14e
\def\inrightmargin{\doinmargin r}
Packit 33f14e
%
Packit 33f14e
% @inmargin{TEXT [, RIGHT-TEXT]}
Packit 33f14e
% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
Packit 33f14e
% else use TEXT for both).
Packit 33f14e
%
Packit 33f14e
\def\inmargin#1{\parseinmargin #1,,\finish}
Packit 33f14e
\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
Packit 33f14e
  \setbox0 = \hbox{\ignorespaces #2}%
Packit 33f14e
  \ifdim\wd0 > 0pt
Packit 33f14e
    \def\lefttext{#1}%  have both texts
Packit 33f14e
    \def\righttext{#2}%
Packit 33f14e
  \else
Packit 33f14e
    \def\lefttext{#1}%  have only one text
Packit 33f14e
    \def\righttext{#1}%
Packit 33f14e
  \fi
Packit 33f14e
  %
Packit 33f14e
  \ifodd\pageno
Packit 33f14e
    \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
Packit 33f14e
  \else
Packit 33f14e
    \def\temp{\inleftmargin\lefttext}%
Packit 33f14e
  \fi
Packit 33f14e
  \temp
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% @include FILE -- \input text of FILE.
Packit 33f14e
%
Packit 33f14e
\def\include{\parseargusing\filenamecatcodes\includezzz}
Packit 33f14e
\def\includezzz#1{%
Packit 33f14e
  \pushthisfilestack
Packit 33f14e
  \def\thisfile{#1}%
Packit 33f14e
  {%
Packit 33f14e
    \makevalueexpandable  % we want to expand any @value in FILE.
Packit 33f14e
    \turnoffactive        % and allow special characters in the expansion
Packit 33f14e
    \indexnofonts         % Allow `@@' and other weird things in file names.
Packit 33f14e
    \wlog{texinfo.tex: doing @include of #1^^J}%
Packit 33f14e
    \edef\temp{\noexpand\input #1 }%
Packit 33f14e
    %
Packit 33f14e
    % This trickery is to read FILE outside of a group, in case it makes
Packit 33f14e
    % definitions, etc.
Packit 33f14e
    \expandafter
Packit 33f14e
  }\temp
Packit 33f14e
  \popthisfilestack
Packit 33f14e
}
Packit 33f14e
\def\filenamecatcodes{%
Packit 33f14e
  \catcode`\\=\other
Packit 33f14e
  \catcode`~=\other
Packit 33f14e
  \catcode`^=\other
Packit 33f14e
  \catcode`_=\other
Packit 33f14e
  \catcode`|=\other
Packit 33f14e
  \catcode`<=\other
Packit 33f14e
  \catcode`>=\other
Packit 33f14e
  \catcode`+=\other
Packit 33f14e
  \catcode`-=\other
Packit 33f14e
  \catcode`\`=\other
Packit 33f14e
  \catcode`\'=\other
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
\def\pushthisfilestack{%
Packit 33f14e
  \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
Packit 33f14e
}
Packit 33f14e
\def\pushthisfilestackX{%
Packit 33f14e
  \expandafter\pushthisfilestackY\thisfile\StackTerm
Packit 33f14e
}
Packit 33f14e
\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
Packit 33f14e
  \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
\def\popthisfilestack{\errthisfilestackempty}
Packit 33f14e
\def\errthisfilestackempty{\errmessage{Internal error:
Packit 33f14e
  the stack of filenames is empty.}}
Packit 33f14e
%
Packit 33f14e
\def\thisfile{}
Packit 33f14e
Packit 33f14e
% @center line
Packit 33f14e
% outputs that line, centered.
Packit 33f14e
%
Packit 33f14e
\parseargdef\center{%
Packit 33f14e
  \ifhmode
Packit 33f14e
    \let\centersub\centerH
Packit 33f14e
  \else
Packit 33f14e
    \let\centersub\centerV
Packit 33f14e
  \fi
Packit 33f14e
  \centersub{\hfil \ignorespaces#1\unskip \hfil}%
Packit 33f14e
  \let\centersub\relax % don't let the definition persist, just in case
Packit 33f14e
}
Packit 33f14e
\def\centerH#1{{%
Packit 33f14e
  \hfil\break
Packit 33f14e
  \advance\hsize by -\leftskip
Packit 33f14e
  \advance\hsize by -\rightskip
Packit 33f14e
  \line{#1}%
Packit 33f14e
  \break
Packit 33f14e
}}
Packit 33f14e
%
Packit 33f14e
\newcount\centerpenalty
Packit 33f14e
\def\centerV#1{%
Packit 33f14e
  % The idea here is the same as in \startdefun, \cartouche, etc.: if
Packit 33f14e
  % @center is the first thing after a section heading, we need to wipe
Packit 33f14e
  % out the negative parskip inserted by \sectionheading, but still
Packit 33f14e
  % prevent a page break here.
Packit 33f14e
  \centerpenalty = \lastpenalty
Packit 33f14e
  \ifnum\centerpenalty>10000 \vskip\parskip \fi
Packit 33f14e
  \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi
Packit 33f14e
  \line{\kern\leftskip #1\kern\rightskip}%
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% @sp n   outputs n lines of vertical space
Packit 33f14e
%
Packit 33f14e
\parseargdef\sp{\vskip #1\baselineskip}
Packit 33f14e
Packit 33f14e
% @comment ...line which is ignored...
Packit 33f14e
% @c is the same as @comment
Packit 33f14e
% @ignore ... @end ignore  is another way to write a comment
Packit 33f14e
Packit 33f14e
Packit 33f14e
\def\c{\begingroup \catcode`\^^M=\active%
Packit 33f14e
\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
Packit 33f14e
\cxxx}
Packit 33f14e
{\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}}
Packit 33f14e
%
Packit 33f14e
\let\comment\c
Packit 33f14e
Packit 33f14e
% @paragraphindent NCHARS
Packit 33f14e
% We'll use ems for NCHARS, close enough.
Packit 33f14e
% NCHARS can also be the word `asis' or `none'.
Packit 33f14e
% We cannot feasibly implement @paragraphindent asis, though.
Packit 33f14e
%
Packit 33f14e
\def\asisword{asis} % no translation, these are keywords
Packit 33f14e
\def\noneword{none}
Packit 33f14e
%
Packit 33f14e
\parseargdef\paragraphindent{%
Packit 33f14e
  \def\temp{#1}%
Packit 33f14e
  \ifx\temp\asisword
Packit 33f14e
  \else
Packit 33f14e
    \ifx\temp\noneword
Packit 33f14e
      \defaultparindent = 0pt
Packit 33f14e
    \else
Packit 33f14e
      \defaultparindent = #1em
Packit 33f14e
    \fi
Packit 33f14e
  \fi
Packit 33f14e
  \parindent = \defaultparindent
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% @exampleindent NCHARS
Packit 33f14e
% We'll use ems for NCHARS like @paragraphindent.
Packit 33f14e
% It seems @exampleindent asis isn't necessary, but
Packit 33f14e
% I preserve it to make it similar to @paragraphindent.
Packit 33f14e
\parseargdef\exampleindent{%
Packit 33f14e
  \def\temp{#1}%
Packit 33f14e
  \ifx\temp\asisword
Packit 33f14e
  \else
Packit 33f14e
    \ifx\temp\noneword
Packit 33f14e
      \lispnarrowing = 0pt
Packit 33f14e
    \else
Packit 33f14e
      \lispnarrowing = #1em
Packit 33f14e
    \fi
Packit 33f14e
  \fi
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% @firstparagraphindent WORD
Packit 33f14e
% If WORD is `none', then suppress indentation of the first paragraph
Packit 33f14e
% after a section heading.  If WORD is `insert', then do indent at such
Packit 33f14e
% paragraphs.
Packit 33f14e
%
Packit 33f14e
% The paragraph indentation is suppressed or not by calling
Packit 33f14e
% \suppressfirstparagraphindent, which the sectioning commands do.
Packit 33f14e
% We switch the definition of this back and forth according to WORD.
Packit 33f14e
% By default, we suppress indentation.
Packit 33f14e
%
Packit 33f14e
\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
Packit 33f14e
\def\insertword{insert}
Packit 33f14e
%
Packit 33f14e
\parseargdef\firstparagraphindent{%
Packit 33f14e
  \def\temp{#1}%
Packit 33f14e
  \ifx\temp\noneword
Packit 33f14e
    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
Packit 33f14e
  \else\ifx\temp\insertword
Packit 33f14e
    \let\suppressfirstparagraphindent = \relax
Packit 33f14e
  \else
Packit 33f14e
    \errhelp = \EMsimple
Packit 33f14e
    \errmessage{Unknown @firstparagraphindent option `\temp'}%
Packit 33f14e
  \fi\fi
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% Here is how we actually suppress indentation.  Redefine \everypar to
Packit 33f14e
% \kern backwards by \parindent, and then reset itself to empty.
Packit 33f14e
%
Packit 33f14e
% We also make \indent itself not actually do anything until the next
Packit 33f14e
% paragraph.
Packit 33f14e
%
Packit 33f14e
\gdef\dosuppressfirstparagraphindent{%
Packit 33f14e
  \gdef\indent  {\restorefirstparagraphindent \indent}%
Packit 33f14e
  \gdef\noindent{\restorefirstparagraphindent \noindent}%
Packit 33f14e
  \global\everypar = {\kern -\parindent \restorefirstparagraphindent}%
Packit 33f14e
}
Packit 33f14e
%
Packit 33f14e
\gdef\restorefirstparagraphindent{%
Packit 33f14e
  \global\let\indent = \ptexindent
Packit 33f14e
  \global\let\noindent = \ptexnoindent
Packit 33f14e
  \global\everypar = {}%
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
Packit 33f14e
% @refill is a no-op.
Packit 33f14e
\let\refill=\relax
Packit 33f14e
Packit 33f14e
% @setfilename INFO-FILENAME - ignored
Packit 33f14e
\let\setfilename=\comment
Packit 33f14e
Packit 33f14e
% @bye.
Packit 33f14e
\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
Packit 33f14e
Packit 33f14e
Packit 33f14e
\message{pdf,}
Packit 33f14e
% adobe `portable' document format
Packit 33f14e
\newcount\tempnum
Packit 33f14e
\newcount\lnkcount
Packit 33f14e
\newtoks\filename
Packit 33f14e
\newcount\filenamelength
Packit 33f14e
\newcount\pgn
Packit 33f14e
\newtoks\toksA
Packit 33f14e
\newtoks\toksB
Packit 33f14e
\newtoks\toksC
Packit 33f14e
\newtoks\toksD
Packit 33f14e
\newbox\boxA
Packit 33f14e
\newbox\boxB
Packit 33f14e
\newcount\countA
Packit 33f14e
\newif\ifpdf
Packit 33f14e
\newif\ifpdfmakepagedest
Packit 33f14e
Packit 33f14e
%
Packit 33f14e
% For LuaTeX
Packit 33f14e
%
Packit 33f14e
Packit 33f14e
\newif\iftxiuseunicodedestname
Packit 33f14e
\txiuseunicodedestnamefalse % For pdfTeX etc.
Packit 33f14e
Packit 33f14e
\ifx\luatexversion\thisisundefined
Packit 33f14e
\else
Packit 33f14e
  % Use Unicode destination names
Packit 33f14e
  \txiuseunicodedestnametrue
Packit 33f14e
  % Escape PDF strings with converting UTF-16 from UTF-8
Packit 33f14e
  \begingroup
Packit 33f14e
    \catcode`\%=12
Packit 33f14e
    \directlua{
Packit 33f14e
      function UTF16oct(str)
Packit 33f14e
        tex.sprint(string.char(0x5c) .. '376' .. string.char(0x5c) .. '377')
Packit 33f14e
        for c in string.utfvalues(str) do
Packit 33f14e
          if c < 0x10000 then
Packit 33f14e
            tex.sprint(
Packit 33f14e
              string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
Packit 33f14e
                            string.char(0x5c) .. string.char(0x25) .. '03o',
Packit 33f14e
                            (c / 256), (c % 256)))
Packit 33f14e
          else
Packit 33f14e
            c = c - 0x10000
Packit 33f14e
            local c_hi = c / 1024 + 0xd800
Packit 33f14e
            local c_lo = c % 1024 + 0xdc00
Packit 33f14e
            tex.sprint(
Packit 33f14e
              string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
Packit 33f14e
                            string.char(0x5c) .. string.char(0x25) .. '03o' ..
Packit 33f14e
                            string.char(0x5c) .. string.char(0x25) .. '03o' ..
Packit 33f14e
                            string.char(0x5c) .. string.char(0x25) .. '03o',
Packit 33f14e
                            (c_hi / 256), (c_hi % 256),
Packit 33f14e
                            (c_lo / 256), (c_lo % 256)))
Packit 33f14e
          end
Packit 33f14e
        end
Packit 33f14e
      end
Packit 33f14e
    }
Packit 33f14e
  \endgroup
Packit 33f14e
  \def\pdfescapestrutfsixteen#1{\directlua{UTF16oct('\luaescapestring{#1}')}}
Packit 33f14e
  % Escape PDF strings without converting
Packit 33f14e
  \begingroup
Packit 33f14e
    \directlua{
Packit 33f14e
      function PDFescstr(str)
Packit 33f14e
        for c in string.bytes(str) do
Packit 33f14e
          if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then
Packit 33f14e
            tex.sprint(
Packit 33f14e
              string.format(string.char(0x5c) .. string.char(0x25) .. '03o',
Packit 33f14e
                            c))
Packit 33f14e
          else
Packit 33f14e
            tex.sprint(string.char(c))
Packit 33f14e
          end
Packit 33f14e
        end
Packit 33f14e
      end
Packit 33f14e
    }
Packit 33f14e
  \endgroup
Packit 33f14e
  \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}}
Packit 33f14e
  \ifnum\luatexversion>84
Packit 33f14e
    % For LuaTeX >= 0.85
Packit 33f14e
    \def\pdfdest{\pdfextension dest}
Packit 33f14e
    \let\pdfoutput\outputmode
Packit 33f14e
    \def\pdfliteral{\pdfextension literal}
Packit 33f14e
    \def\pdfcatalog{\pdfextension catalog}
Packit 33f14e
    \def\pdftexversion{\numexpr\pdffeedback version\relax}
Packit 33f14e
    \let\pdfximage\saveimageresource
Packit 33f14e
    \let\pdfrefximage\useimageresource
Packit 33f14e
    \let\pdflastximage\lastsavedimageresourceindex
Packit 33f14e
    \def\pdfendlink{\pdfextension endlink\relax}
Packit 33f14e
    \def\pdfoutline{\pdfextension outline}
Packit 33f14e
    \def\pdfstartlink{\pdfextension startlink}
Packit 33f14e
    \def\pdffontattr{\pdfextension fontattr}
Packit 33f14e
    \def\pdfobj{\pdfextension obj}
Packit 33f14e
    \def\pdflastobj{\numexpr\pdffeedback lastobj\relax}
Packit 33f14e
    \let\pdfpagewidth\pagewidth
Packit 33f14e
    \let\pdfpageheight\pageheight
Packit 33f14e
    \edef\pdfhorigin{\pdfvariable horigin}
Packit 33f14e
    \edef\pdfvorigin{\pdfvariable vorigin}
Packit 33f14e
  \fi
Packit 33f14e
\fi
Packit 33f14e
Packit 33f14e
% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
Packit 33f14e
% can be set).  So we test for \relax and 0 as well as being undefined.
Packit 33f14e
\ifx\pdfoutput\thisisundefined
Packit 33f14e
\else
Packit 33f14e
  \ifx\pdfoutput\relax
Packit 33f14e
  \else
Packit 33f14e
    \ifcase\pdfoutput
Packit 33f14e
    \else
Packit 33f14e
      \pdftrue
Packit 33f14e
    \fi
Packit 33f14e
  \fi
Packit 33f14e
\fi
Packit 33f14e
Packit 33f14e
% PDF uses PostScript string constants for the names of xref targets,
Packit 33f14e
% for display in the outlines, and in other places.  Thus, we have to
Packit 33f14e
% double any backslashes.  Otherwise, a name like "\node" will be
Packit 33f14e
% interpreted as a newline (\n), followed by o, d, e.  Not good.
Packit 33f14e
% 
Packit 33f14e
% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
Packit 33f14e
% related messages.  The final outcome is that it is up to the TeX user
Packit 33f14e
% to double the backslashes and otherwise make the string valid, so
Packit 33f14e
% that's what we do.  pdftex 1.30.0 (ca.2005) introduced a primitive to
Packit 33f14e
% do this reliably, so we use it.
Packit 33f14e
Packit 33f14e
% #1 is a control sequence in which to do the replacements,
Packit 33f14e
% which we \xdef.
Packit 33f14e
\def\txiescapepdf#1{%
Packit 33f14e
  \ifx\pdfescapestring\thisisundefined
Packit 33f14e
    % No primitive available; should we give a warning or log?
Packit 33f14e
    % Many times it won't matter.
Packit 33f14e
    \xdef#1{#1}%
Packit 33f14e
  \else
Packit 33f14e
    % The expandable \pdfescapestring primitive escapes parentheses,
Packit 33f14e
    % backslashes, and other special chars.
Packit 33f14e
    \xdef#1{\pdfescapestring{#1}}%
Packit 33f14e
  \fi
Packit 33f14e
}
Packit 33f14e
\def\txiescapepdfutfsixteen#1{%
Packit 33f14e
  \ifx\pdfescapestrutfsixteen\thisisundefined
Packit 33f14e
    % No UTF-16 converting macro available.
Packit 33f14e
    \txiescapepdf{#1}%
Packit 33f14e
  \else
Packit 33f14e
    \xdef#1{\pdfescapestrutfsixteen{#1}}%
Packit 33f14e
  \fi
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
Packit 33f14e
with PDF output, and none of those formats could be found.  (.eps cannot
Packit 33f14e
be supported due to the design of the PDF format; use regular TeX (DVI
Packit 33f14e
output) for that.)}
Packit 33f14e
Packit 33f14e
\ifpdf
Packit 33f14e
  %
Packit 33f14e
  % Color manipulation macros using ideas from pdfcolor.tex,
Packit 33f14e
  % except using rgb instead of cmyk; the latter is said to render as a
Packit 33f14e
  % very dark gray on-screen and a very dark halftone in print, instead
Packit 33f14e
  % of actual black. The dark red here is dark enough to print on paper as
Packit 33f14e
  % nearly black, but still distinguishable for online viewing.  We use
Packit 33f14e
  % black by default, though.
Packit 33f14e
  \def\rgbDarkRed{0.50 0.09 0.12}
Packit 33f14e
  \def\rgbBlack{0 0 0}
Packit 33f14e
  %
Packit 33f14e
  % rg sets the color for filling (usual text, etc.);
Packit 33f14e
  % RG sets the color for stroking (thin rules, e.g., normal _'s).
Packit 33f14e
  \def\pdfsetcolor#1{\pdfliteral{#1 rg  #1 RG}}
Packit 33f14e
  %
Packit 33f14e
  % Set color, and create a mark which defines \thiscolor accordingly,
Packit 33f14e
  % so that \makeheadline knows which color to restore.
Packit 33f14e
  \def\setcolor#1{%
Packit 33f14e
    \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
Packit 33f14e
    \domark
Packit 33f14e
    \pdfsetcolor{#1}%
Packit 33f14e
  }
Packit 33f14e
  %
Packit 33f14e
  \def\maincolor{\rgbBlack}
Packit 33f14e
  \pdfsetcolor{\maincolor}
Packit 33f14e
  \edef\thiscolor{\maincolor}
Packit 33f14e
  \def\lastcolordefs{}
Packit 33f14e
  %
Packit 33f14e
  \def\makefootline{%
Packit 33f14e
    \baselineskip24pt
Packit 33f14e
    \line{\pdfsetcolor{\maincolor}\the\footline}%
Packit 33f14e
  }
Packit 33f14e
  %
Packit 33f14e
  \def\makeheadline{%
Packit 33f14e
    \vbox to 0pt{%
Packit 33f14e
      \vskip-22.5pt
Packit 33f14e
      \line{%
Packit 33f14e
        \vbox to8.5pt{}%
Packit 33f14e
        % Extract \thiscolor definition from the marks.
Packit 33f14e
        \getcolormarks
Packit 33f14e
        % Typeset the headline with \maincolor, then restore the color.
Packit 33f14e
        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
Packit 33f14e
      }%
Packit 33f14e
      \vss
Packit 33f14e
    }%
Packit 33f14e
    \nointerlineskip
Packit 33f14e
  }
Packit 33f14e
  %
Packit 33f14e
  %
Packit 33f14e
  \pdfcatalog{/PageMode /UseOutlines}
Packit 33f14e
  %
Packit 33f14e
  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
Packit 33f14e
  \def\dopdfimage#1#2#3{%
Packit 33f14e
    \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
Packit 33f14e
    \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
Packit 33f14e
    %
Packit 33f14e
    % pdftex (and the PDF format) support .pdf, .png, .jpg (among
Packit 33f14e
    % others).  Let's try in that order, PDF first since if
Packit 33f14e
    % someone has a scalable image, presumably better to use that than a
Packit 33f14e
    % bitmap.
Packit 33f14e
    \let\pdfimgext=\empty
Packit 33f14e
    \begingroup
Packit 33f14e
      \openin 1 #1.pdf \ifeof 1
Packit 33f14e
        \openin 1 #1.PDF \ifeof 1
Packit 33f14e
          \openin 1 #1.png \ifeof 1
Packit 33f14e
            \openin 1 #1.jpg \ifeof 1
Packit 33f14e
              \openin 1 #1.jpeg \ifeof 1
Packit 33f14e
                \openin 1 #1.JPG \ifeof 1
Packit 33f14e
                  \errhelp = \nopdfimagehelp
Packit 33f14e
                  \errmessage{Could not find image file #1 for pdf}%
Packit 33f14e
                \else \gdef\pdfimgext{JPG}%
Packit 33f14e
                \fi
Packit 33f14e
              \else \gdef\pdfimgext{jpeg}%
Packit 33f14e
              \fi
Packit 33f14e
            \else \gdef\pdfimgext{jpg}%
Packit 33f14e
            \fi
Packit 33f14e
          \else \gdef\pdfimgext{png}%
Packit 33f14e
          \fi
Packit 33f14e
        \else \gdef\pdfimgext{PDF}%
Packit 33f14e
        \fi
Packit 33f14e
      \else \gdef\pdfimgext{pdf}%
Packit 33f14e
      \fi
Packit 33f14e
      \closein 1
Packit 33f14e
    \endgroup
Packit 33f14e
    %
Packit 33f14e
    % without \immediate, ancient pdftex seg faults when the same image is
Packit 33f14e
    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
Packit 33f14e
    \ifnum\pdftexversion < 14
Packit 33f14e
      \immediate\pdfimage
Packit 33f14e
    \else
Packit 33f14e
      \immediate\pdfximage
Packit 33f14e
    \fi
Packit 33f14e
      \ifdim \wd0 >0pt width \pdfimagewidth \fi
Packit 33f14e
      \ifdim \wd2 >0pt height \pdfimageheight \fi
Packit 33f14e
      \ifnum\pdftexversion<13
Packit 33f14e
         #1.\pdfimgext
Packit 33f14e
       \else
Packit 33f14e
         {#1.\pdfimgext}%
Packit 33f14e
       \fi
Packit 33f14e
    \ifnum\pdftexversion < 14 \else
Packit 33f14e
      \pdfrefximage \pdflastximage
Packit 33f14e
    \fi}
Packit 33f14e
  %
Packit 33f14e
  \def\setpdfdestname#1{{%
Packit 33f14e
    % We have to set dummies so commands such as @code, and characters
Packit 33f14e
    % such as \, aren't expanded when present in a section title.
Packit 33f14e
    \indexnofonts
Packit 33f14e
    \makevalueexpandable
Packit 33f14e
    \turnoffactive
Packit 33f14e
    \iftxiuseunicodedestname
Packit 33f14e
      \ifx \declaredencoding \latone
Packit 33f14e
        % Pass through Latin-1 characters.
Packit 33f14e
        % LuaTeX with byte wise I/O converts Latin-1 characters to Unicode.
Packit 33f14e
      \else
Packit 33f14e
        \ifx \declaredencoding \utfeight
Packit 33f14e
          % Pass through Unicode characters.
Packit 33f14e
        \else
Packit 33f14e
          % Use ASCII approximations in destination names.
Packit 33f14e
          \passthroughcharsfalse
Packit 33f14e
        \fi
Packit 33f14e
      \fi
Packit 33f14e
    \else
Packit 33f14e
      % Use ASCII approximations in destination names.
Packit 33f14e
      \passthroughcharsfalse
Packit 33f14e
    \fi
Packit 33f14e
    \def\pdfdestname{#1}%
Packit 33f14e
    \txiescapepdf\pdfdestname
Packit 33f14e
  }}
Packit 33f14e
  %
Packit 33f14e
  \def\setpdfoutlinetext#1{{%
Packit 33f14e
    \indexnofonts
Packit 33f14e
    \makevalueexpandable
Packit 33f14e
    \turnoffactive
Packit 33f14e
    \ifx \declaredencoding \latone
Packit 33f14e
      % The PDF format can use an extended form of Latin-1 in bookmark
Packit 33f14e
      % strings.  See Appendix D of the PDF Reference, Sixth Edition, for
Packit 33f14e
      % the "PDFDocEncoding".
Packit 33f14e
      \passthroughcharstrue
Packit 33f14e
      % Pass through Latin-1 characters.
Packit 33f14e
      %   LuaTeX: Convert to Unicode
Packit 33f14e
      %   pdfTeX: Use Latin-1 as PDFDocEncoding
Packit 33f14e
      \def\pdfoutlinetext{#1}%
Packit 33f14e
    \else
Packit 33f14e
      \ifx \declaredencoding \utfeight
Packit 33f14e
        \ifx\luatexversion\thisisundefined
Packit 33f14e
          % For pdfTeX  with UTF-8.
Packit 33f14e
          % TODO: the PDF format can use UTF-16 in bookmark strings,
Packit 33f14e
          % but the code for this isn't done yet.
Packit 33f14e
          % Use ASCII approximations.
Packit 33f14e
          \passthroughcharsfalse
Packit 33f14e
          \def\pdfoutlinetext{#1}%
Packit 33f14e
        \else
Packit 33f14e
          % For LuaTeX with UTF-8.
Packit 33f14e
          % Pass through Unicode characters for title texts.
Packit 33f14e
          \passthroughcharstrue
Packit 33f14e
          \def\pdfoutlinetext{#1}%
Packit 33f14e
        \fi
Packit 33f14e
      \else
Packit 33f14e
        % For non-Latin-1 or non-UTF-8 encodings.
Packit 33f14e
        % Use ASCII approximations.
Packit 33f14e
        \passthroughcharsfalse
Packit 33f14e
        \def\pdfoutlinetext{#1}%
Packit 33f14e
      \fi
Packit 33f14e
    \fi
Packit 33f14e
    % LuaTeX: Convert to UTF-16
Packit 33f14e
    % pdfTeX: Use Latin-1 as PDFDocEncoding
Packit 33f14e
    \txiescapepdfutfsixteen\pdfoutlinetext
Packit 33f14e
  }}
Packit 33f14e
  %
Packit 33f14e
  \def\pdfmkdest#1{%
Packit 33f14e
    \setpdfdestname{#1}%
Packit 33f14e
    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
Packit 33f14e
  }
Packit 33f14e
  %
Packit 33f14e
  % used to mark target names; must be expandable.
Packit 33f14e
  \def\pdfmkpgn#1{#1}
Packit 33f14e
  %
Packit 33f14e
  % by default, use black for everything.
Packit 33f14e
  \def\urlcolor{\rgbBlack}
Packit 33f14e
  \def\linkcolor{\rgbBlack}
Packit 33f14e
  \def\endlink{\setcolor{\maincolor}\pdfendlink}
Packit 33f14e
  %
Packit 33f14e
  % Adding outlines to PDF; macros for calculating structure of outlines
Packit 33f14e
  % come from Petr Olsak
Packit 33f14e
  \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
Packit 33f14e
    \else \csname#1\endcsname \fi}
Packit 33f14e
  \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
Packit 33f14e
    \advance\tempnum by 1
Packit 33f14e
    \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
Packit 33f14e
  %
Packit 33f14e
  % #1 is the section text, which is what will be displayed in the
Packit 33f14e
  % outline by the pdf viewer.  #2 is the pdf expression for the number
Packit 33f14e
  % of subentries (or empty, for subsubsections).  #3 is the node text,
Packit 33f14e
  % which might be empty if this toc entry had no corresponding node.
Packit 33f14e
  % #4 is the page number
Packit 33f14e
  %
Packit 33f14e
  \def\dopdfoutline#1#2#3#4{%
Packit 33f14e
    % Generate a link to the node text if that exists; else, use the
Packit 33f14e
    % page number.  We could generate a destination for the section
Packit 33f14e
    % text in the case where a section has no node, but it doesn't
Packit 33f14e
    % seem worth the trouble, since most documents are normally structured.
Packit 33f14e
    \setpdfoutlinetext{#1}
Packit 33f14e
    \setpdfdestname{#3}
Packit 33f14e
    \ifx\pdfdestname\empty
Packit 33f14e
      \def\pdfdestname{#4}%
Packit 33f14e
    \fi
Packit 33f14e
    %
Packit 33f14e
    \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}%
Packit 33f14e
  }
Packit 33f14e
  %
Packit 33f14e
  \def\pdfmakeoutlines{%
Packit 33f14e
    \begingroup
Packit 33f14e
      % Read toc silently, to get counts of subentries for \pdfoutline.
Packit 33f14e
      \def\partentry##1##2##3##4{}% ignore parts in the outlines
Packit 33f14e
      \def\numchapentry##1##2##3##4{%
Packit 33f14e
	\def\thischapnum{##2}%
Packit 33f14e
	\def\thissecnum{0}%
Packit 33f14e
	\def\thissubsecnum{0}%
Packit 33f14e
      }%
Packit 33f14e
      \def\numsecentry##1##2##3##4{%
Packit 33f14e
	\advancenumber{chap\thischapnum}%
Packit 33f14e
	\def\thissecnum{##2}%
Packit 33f14e
	\def\thissubsecnum{0}%
Packit 33f14e
      }%
Packit 33f14e
      \def\numsubsecentry##1##2##3##4{%
Packit 33f14e
	\advancenumber{sec\thissecnum}%
Packit 33f14e
	\def\thissubsecnum{##2}%
Packit 33f14e
      }%
Packit 33f14e
      \def\numsubsubsecentry##1##2##3##4{%
Packit 33f14e
	\advancenumber{subsec\thissubsecnum}%
Packit 33f14e
      }%
Packit 33f14e
      \def\thischapnum{0}%
Packit 33f14e
      \def\thissecnum{0}%
Packit 33f14e
      \def\thissubsecnum{0}%
Packit 33f14e
      %
Packit 33f14e
      % use \def rather than \let here because we redefine \chapentry et
Packit 33f14e
      % al. a second time, below.
Packit 33f14e
      \def\appentry{\numchapentry}%
Packit 33f14e
      \def\appsecentry{\numsecentry}%
Packit 33f14e
      \def\appsubsecentry{\numsubsecentry}%
Packit 33f14e
      \def\appsubsubsecentry{\numsubsubsecentry}%
Packit 33f14e
      \def\unnchapentry{\numchapentry}%
Packit 33f14e
      \def\unnsecentry{\numsecentry}%
Packit 33f14e
      \def\unnsubsecentry{\numsubsecentry}%
Packit 33f14e
      \def\unnsubsubsecentry{\numsubsubsecentry}%
Packit 33f14e
      \readdatafile{toc}%
Packit 33f14e
      %
Packit 33f14e
      % Read toc second time, this time actually producing the outlines.
Packit 33f14e
      % The `-' means take the \expnumber as the absolute number of
Packit 33f14e
      % subentries, which we calculated on our first read of the .toc above.
Packit 33f14e
      %
Packit 33f14e
      % We use the node names as the destinations.
Packit 33f14e
      \def\numchapentry##1##2##3##4{%
Packit 33f14e
        \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
Packit 33f14e
      \def\numsecentry##1##2##3##4{%
Packit 33f14e
        \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
Packit 33f14e
      \def\numsubsecentry##1##2##3##4{%
Packit 33f14e
        \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
Packit 33f14e
      \def\numsubsubsecentry##1##2##3##4{% count is always zero
Packit 33f14e
        \dopdfoutline{##1}{}{##3}{##4}}%
Packit 33f14e
      %
Packit 33f14e
      % PDF outlines are displayed using system fonts, instead of
Packit 33f14e
      % document fonts.  Therefore we cannot use special characters,
Packit 33f14e
      % since the encoding is unknown.  For example, the eogonek from
Packit 33f14e
      % Latin 2 (0xea) gets translated to a | character.  Info from
Packit 33f14e
      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
Packit 33f14e
      %
Packit 33f14e
      % TODO this right, we have to translate 8-bit characters to
Packit 33f14e
      % their "best" equivalent, based on the @documentencoding.  Too
Packit 33f14e
      % much work for too little return.  Just use the ASCII equivalents
Packit 33f14e
      % we use for the index sort strings.
Packit 33f14e
      % 
Packit 33f14e
      \indexnofonts
Packit 33f14e
      \setupdatafile
Packit 33f14e
      % We can have normal brace characters in the PDF outlines, unlike
Packit 33f14e
      % Texinfo index files.  So set that up.
Packit 33f14e
      \def\{{\lbracecharliteral}%
Packit 33f14e
      \def\}{\rbracecharliteral}%
Packit 33f14e
      \catcode`\\=\active \otherbackslash
Packit 33f14e
      \input \tocreadfilename
Packit 33f14e
    \endgroup
Packit 33f14e
  }
Packit 33f14e
  {\catcode`[=1 \catcode`]=2
Packit 33f14e
   \catcode`{=\other \catcode`}=\other
Packit 33f14e
   \gdef\lbracecharliteral[{]%
Packit 33f14e
   \gdef\rbracecharliteral[}]%
Packit 33f14e
  ]
Packit 33f14e
  %
Packit 33f14e
  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
Packit 33f14e
    \ifx\PP\D\let\nextsp\relax
Packit 33f14e
    \else\let\nextsp\skipspaces
Packit 33f14e
      \addtokens{\filename}{\PP}%
Packit 33f14e
      \advance\filenamelength by 1
Packit 33f14e
    \fi
Packit 33f14e
    \nextsp}
Packit 33f14e
  \def\getfilename#1{%
Packit 33f14e
    \filenamelength=0
Packit 33f14e
    % If we don't expand the argument now, \skipspaces will get
Packit 33f14e
    % snagged on things like "@value{foo}".
Packit 33f14e
    \edef\temp{#1}%
Packit 33f14e
    \expandafter\skipspaces\temp|\relax
Packit 33f14e
  }
Packit 33f14e
  \ifnum\pdftexversion < 14
Packit 33f14e
    \let \startlink \pdfannotlink
Packit 33f14e
  \else
Packit 33f14e
    \let \startlink \pdfstartlink
Packit 33f14e
  \fi
Packit 33f14e
  % make a live url in pdf output.
Packit 33f14e
  \def\pdfurl#1{%
Packit 33f14e
    \begingroup
Packit 33f14e
      % it seems we really need yet another set of dummies; have not
Packit 33f14e
      % tried to figure out what each command should do in the context
Packit 33f14e
      % of @url.  for now, just make @/ a no-op, that's the only one
Packit 33f14e
      % people have actually reported a problem with.
Packit 33f14e
      %
Packit 33f14e
      \normalturnoffactive
Packit 33f14e
      \def\@{@}%
Packit 33f14e
      \let\/=\empty
Packit 33f14e
      \makevalueexpandable
Packit 33f14e
      % do we want to go so far as to use \indexnofonts instead of just
Packit 33f14e
      % special-casing \var here?
Packit 33f14e
      \def\var##1{##1}%
Packit 33f14e
      %
Packit 33f14e
      \leavevmode\setcolor{\urlcolor}%
Packit 33f14e
      \startlink attr{/Border [0 0 0]}%
Packit 33f14e
        user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
Packit 33f14e
    \endgroup}
Packit 33f14e
  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
Packit 33f14e
  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
Packit 33f14e
  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
Packit 33f14e
  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
Packit 33f14e
  \def\maketoks{%
Packit 33f14e
    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
Packit 33f14e
    \ifx\first0\adn0
Packit 33f14e
    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
Packit 33f14e
    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
Packit 33f14e
    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
Packit 33f14e
    \else
Packit 33f14e
      \ifnum0=\countA\else\makelink\fi
Packit 33f14e
      \ifx\first.\let\next=\done\else
Packit 33f14e
        \let\next=\maketoks
Packit 33f14e
        \addtokens{\toksB}{\the\toksD}
Packit 33f14e
        \ifx\first,\addtokens{\toksB}{\space}\fi
Packit 33f14e
      \fi
Packit 33f14e
    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
Packit 33f14e
    \next}
Packit 33f14e
  \def\makelink{\addtokens{\toksB}%
Packit 33f14e
    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
Packit 33f14e
  \def\pdflink#1{%
Packit 33f14e
    \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
Packit 33f14e
    \setcolor{\linkcolor}#1\endlink}
Packit 33f14e
  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
Packit 33f14e
\else
Packit 33f14e
  % non-pdf mode
Packit 33f14e
  \let\pdfmkdest = \gobble
Packit 33f14e
  \let\pdfurl = \gobble
Packit 33f14e
  \let\endlink = \relax
Packit 33f14e
  \let\setcolor = \gobble
Packit 33f14e
  \let\pdfsetcolor = \gobble
Packit 33f14e
  \let\pdfmakeoutlines = \relax
Packit 33f14e
\fi  % \ifx\pdfoutput
Packit 33f14e
Packit 33f14e
%
Packit 33f14e
% For XeTeX
Packit 33f14e
%
Packit 33f14e
\ifx\XeTeXrevision\thisisundefined
Packit 33f14e
\else
Packit 33f14e
  %
Packit 33f14e
  % XeTeX version check
Packit 33f14e
  %
Packit 33f14e
  \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1
Packit 33f14e
    % TeX Live 2016 contains XeTeX 0.99996 and xdvipdfmx 20160307.
Packit 33f14e
    % It can use the `dvipdfmx:config' special (from TeX Live SVN r40941).
Packit 33f14e
    % For avoiding PDF destination name replacement, we use this special
Packit 33f14e
    % instead of xdvipdfmx's command line option `-C 0x0010'.
Packit 33f14e
    \special{dvipdfmx:config C 0x0010}
Packit 33f14e
    % XeTeX 0.99995+ comes with xdvipdfmx 20160307+.
Packit 33f14e
    % It can handle Unicode destination names for PDF.
Packit 33f14e
    \txiuseunicodedestnametrue
Packit 33f14e
  \else
Packit 33f14e
    % XeTeX < 0.99996 (TeX Live < 2016) cannot use the
Packit 33f14e
    % `dvipdfmx:config' special.
Packit 33f14e
    % So for avoiding PDF destination name replacement,
Packit 33f14e
    % xdvipdfmx's command line option `-C 0x0010' is necessary.
Packit 33f14e
    %
Packit 33f14e
    % XeTeX < 0.99995 can not handle Unicode destination names for PDF
Packit 33f14e
    % because xdvipdfmx 20150315 has a UTF-16 conversion issue.
Packit 33f14e
    % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
Packit 33f14e
    \txiuseunicodedestnamefalse
Packit 33f14e
  \fi
Packit 33f14e
  %
Packit 33f14e
  % Color support
Packit 33f14e
  %
Packit 33f14e
  \def\rgbDarkRed{0.50 0.09 0.12}
Packit 33f14e
  \def\rgbBlack{0 0 0}
Packit 33f14e
  %
Packit 33f14e
  \def\pdfsetcolor#1{\special{pdf:scolor [#1]}}
Packit 33f14e
  %
Packit 33f14e
  % Set color, and create a mark which defines \thiscolor accordingly,
Packit 33f14e
  % so that \makeheadline knows which color to restore.
Packit 33f14e
  \def\setcolor#1{%
Packit 33f14e
    \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
Packit 33f14e
    \domark
Packit 33f14e
    \pdfsetcolor{#1}%
Packit 33f14e
  }
Packit 33f14e
  %
Packit 33f14e
  \def\maincolor{\rgbBlack}
Packit 33f14e
  \pdfsetcolor{\maincolor}
Packit 33f14e
  \edef\thiscolor{\maincolor}
Packit 33f14e
  \def\lastcolordefs{}
Packit 33f14e
  %
Packit 33f14e
  \def\makefootline{%
Packit 33f14e
    \baselineskip24pt
Packit 33f14e
    \line{\pdfsetcolor{\maincolor}\the\footline}%
Packit 33f14e
  }
Packit 33f14e
  %
Packit 33f14e
  \def\makeheadline{%
Packit 33f14e
    \vbox to 0pt{%
Packit 33f14e
      \vskip-22.5pt
Packit 33f14e
      \line{%
Packit 33f14e
        \vbox to8.5pt{}%
Packit 33f14e
        % Extract \thiscolor definition from the marks.
Packit 33f14e
        \getcolormarks
Packit 33f14e
        % Typeset the headline with \maincolor, then restore the color.
Packit 33f14e
        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
Packit 33f14e
      }%
Packit 33f14e
      \vss
Packit 33f14e
    }%
Packit 33f14e
    \nointerlineskip
Packit 33f14e
  }
Packit 33f14e
  %
Packit 33f14e
  % PDF outline support
Packit 33f14e
  %
Packit 33f14e
  % Emulate pdfTeX primitive
Packit 33f14e
  \def\pdfdest name#1 xyz{%
Packit 33f14e
    \special{pdf:dest (#1) [@thispage /XYZ @xpos @ypos null]}%
Packit 33f14e
  }
Packit 33f14e
  %
Packit 33f14e
  \def\setpdfdestname#1{{%
Packit 33f14e
    % We have to set dummies so commands such as @code, and characters
Packit 33f14e
    % such as \, aren't expanded when present in a section title.
Packit 33f14e
    \indexnofonts
Packit 33f14e
    \makevalueexpandable
Packit 33f14e
    \turnoffactive
Packit 33f14e
    \iftxiuseunicodedestname
Packit 33f14e
      % Pass through Unicode characters.
Packit 33f14e
    \else
Packit 33f14e
      % Use ASCII approximations in destination names.
Packit 33f14e
      \passthroughcharsfalse
Packit 33f14e
    \fi
Packit 33f14e
    \def\pdfdestname{#1}%
Packit 33f14e
    \txiescapepdf\pdfdestname
Packit 33f14e
  }}
Packit 33f14e
  %
Packit 33f14e
  \def\setpdfoutlinetext#1{{%
Packit 33f14e
    \turnoffactive
Packit 33f14e
    % Always use Unicode characters in title texts.
Packit 33f14e
    \def\pdfoutlinetext{#1}%
Packit 33f14e
    % For XeTeX, xdvipdfmx converts to UTF-16.
Packit 33f14e
    % So we do not convert.
Packit 33f14e
    \txiescapepdf\pdfoutlinetext
Packit 33f14e
  }}
Packit 33f14e
  %
Packit 33f14e
  \def\pdfmkdest#1{%
Packit 33f14e
    \setpdfdestname{#1}%
Packit 33f14e
    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
Packit 33f14e
  }
Packit 33f14e
  %
Packit 33f14e
  % by default, use black for everything.
Packit 33f14e
  \def\urlcolor{\rgbBlack}
Packit 33f14e
  \def\linkcolor{\rgbBlack}
Packit 33f14e
  \def\endlink{\setcolor{\maincolor}\pdfendlink}
Packit 33f14e
  %
Packit 33f14e
  \def\dopdfoutline#1#2#3#4{%
Packit 33f14e
    \setpdfoutlinetext{#1}
Packit 33f14e
    \setpdfdestname{#3}
Packit 33f14e
    \ifx\pdfdestname\empty
Packit 33f14e
      \def\pdfdestname{#4}%
Packit 33f14e
    \fi
Packit 33f14e
    %
Packit 33f14e
    \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A
Packit 33f14e
      << /S /GoTo /D (\pdfdestname) >> >> }%
Packit 33f14e
  }
Packit 33f14e
  %
Packit 33f14e
  \def\pdfmakeoutlines{%
Packit 33f14e
    \begingroup
Packit 33f14e
      %
Packit 33f14e
      % For XeTeX, counts of subentries are not necessary.
Packit 33f14e
      % Therefore, we read toc only once.
Packit 33f14e
      %
Packit 33f14e
      % We use node names as destinations.
Packit 33f14e
      \def\partentry##1##2##3##4{}% ignore parts in the outlines
Packit 33f14e
      \def\numchapentry##1##2##3##4{%
Packit 33f14e
        \dopdfoutline{##1}{1}{##3}{##4}}%
Packit 33f14e
      \def\numsecentry##1##2##3##4{%
Packit 33f14e
        \dopdfoutline{##1}{2}{##3}{##4}}%
Packit 33f14e
      \def\numsubsecentry##1##2##3##4{%
Packit 33f14e
        \dopdfoutline{##1}{3}{##3}{##4}}%
Packit 33f14e
      \def\numsubsubsecentry##1##2##3##4{%
Packit 33f14e
        \dopdfoutline{##1}{4}{##3}{##4}}%
Packit 33f14e
      %
Packit 33f14e
      \let\appentry\numchapentry%
Packit 33f14e
      \let\appsecentry\numsecentry%
Packit 33f14e
      \let\appsubsecentry\numsubsecentry%
Packit 33f14e
      \let\appsubsubsecentry\numsubsubsecentry%
Packit 33f14e
      \let\unnchapentry\numchapentry%
Packit 33f14e
      \let\unnsecentry\numsecentry%
Packit 33f14e
      \let\unnsubsecentry\numsubsecentry%
Packit 33f14e
      \let\unnsubsubsecentry\numsubsubsecentry%
Packit 33f14e
      %
Packit 33f14e
      % For XeTeX, xdvipdfmx converts strings to UTF-16.
Packit 33f14e
      % Therefore, the encoding and the language may not be considered.
Packit 33f14e
      %
Packit 33f14e
      \indexnofonts
Packit 33f14e
      \setupdatafile
Packit 33f14e
      % We can have normal brace characters in the PDF outlines, unlike
Packit 33f14e
      % Texinfo index files.  So set that up.
Packit 33f14e
      \def\{{\lbracecharliteral}%
Packit 33f14e
      \def\}{\rbracecharliteral}%
Packit 33f14e
      \catcode`\\=\active \otherbackslash
Packit 33f14e
      \input \tocreadfilename
Packit 33f14e
    \endgroup
Packit 33f14e
  }
Packit 33f14e
  {\catcode`[=1 \catcode`]=2
Packit 33f14e
   \catcode`{=\other \catcode`}=\other
Packit 33f14e
   \gdef\lbracecharliteral[{]%
Packit 33f14e
   \gdef\rbracecharliteral[}]%
Packit 33f14e
  ]
Packit 33f14e
Packit 33f14e
  \special{pdf:docview << /PageMode /UseOutlines >> }
Packit 33f14e
  % ``\special{pdf:tounicode ...}'' is not necessary
Packit 33f14e
  % because xdvipdfmx converts strings from UTF-8 to UTF-16 without it.
Packit 33f14e
  % However, due to a UTF-16 conversion issue of xdvipdfmx 20150315,
Packit 33f14e
  % ``\special{pdf:dest ...}'' cannot handle non-ASCII strings.
Packit 33f14e
  % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
Packit 33f14e
%
Packit 33f14e
  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
Packit 33f14e
    \ifx\PP\D\let\nextsp\relax
Packit 33f14e
    \else\let\nextsp\skipspaces
Packit 33f14e
      \addtokens{\filename}{\PP}%
Packit 33f14e
      \advance\filenamelength by 1
Packit 33f14e
    \fi
Packit 33f14e
    \nextsp}
Packit 33f14e
  \def\getfilename#1{%
Packit 33f14e
    \filenamelength=0
Packit 33f14e
    % If we don't expand the argument now, \skipspaces will get
Packit 33f14e
    % snagged on things like "@value{foo}".
Packit 33f14e
    \edef\temp{#1}%
Packit 33f14e
    \expandafter\skipspaces\temp|\relax
Packit 33f14e
  }
Packit 33f14e
  % make a live url in pdf output.
Packit 33f14e
  \def\pdfurl#1{%
Packit 33f14e
    \begingroup
Packit 33f14e
      % it seems we really need yet another set of dummies; have not
Packit 33f14e
      % tried to figure out what each command should do in the context
Packit 33f14e
      % of @url.  for now, just make @/ a no-op, that's the only one
Packit 33f14e
      % people have actually reported a problem with.
Packit 33f14e
      %
Packit 33f14e
      \normalturnoffactive
Packit 33f14e
      \def\@{@}%
Packit 33f14e
      \let\/=\empty
Packit 33f14e
      \makevalueexpandable
Packit 33f14e
      % do we want to go so far as to use \indexnofonts instead of just
Packit 33f14e
      % special-casing \var here?
Packit 33f14e
      \def\var##1{##1}%
Packit 33f14e
      %
Packit 33f14e
      \leavevmode\setcolor{\urlcolor}%
Packit 33f14e
      \special{pdf:bann << /Border [0 0 0]
Packit 33f14e
        /Subtype /Link /A << /S /URI /URI (#1) >> >>}%
Packit 33f14e
    \endgroup}
Packit 33f14e
  \def\endlink{\setcolor{\maincolor}\special{pdf:eann}}
Packit 33f14e
  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
Packit 33f14e
  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
Packit 33f14e
  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
Packit 33f14e
  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
Packit 33f14e
  \def\maketoks{%
Packit 33f14e
    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
Packit 33f14e
    \ifx\first0\adn0
Packit 33f14e
    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
Packit 33f14e
    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
Packit 33f14e
    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
Packit 33f14e
    \else
Packit 33f14e
      \ifnum0=\countA\else\makelink\fi
Packit 33f14e
      \ifx\first.\let\next=\done\else
Packit 33f14e
        \let\next=\maketoks
Packit 33f14e
        \addtokens{\toksB}{\the\toksD}
Packit 33f14e
        \ifx\first,\addtokens{\toksB}{\space}\fi
Packit 33f14e
      \fi
Packit 33f14e
    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
Packit 33f14e
    \next}
Packit 33f14e
  \def\makelink{\addtokens{\toksB}%
Packit 33f14e
    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
Packit 33f14e
  \def\pdflink#1{%
Packit 33f14e
    \special{pdf:bann << /Border [0 0 0]
Packit 33f14e
      /Type /Annot /Subtype /Link /A << /S /GoTo /D (#1) >> >>}%
Packit 33f14e
    \setcolor{\linkcolor}#1\endlink}
Packit 33f14e
  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
Packit 33f14e
%
Packit 33f14e
  %
Packit 33f14e
  % @image support
Packit 33f14e
  %
Packit 33f14e
  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
Packit 33f14e
  \def\doxeteximage#1#2#3{%
Packit 33f14e
    \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
Packit 33f14e
    \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
Packit 33f14e
    %
Packit 33f14e
    % XeTeX (and the PDF format) supports .pdf, .png, .jpg (among
Packit 33f14e
    % others).  Let's try in that order, PDF first since if
Packit 33f14e
    % someone has a scalable image, presumably better to use that than a
Packit 33f14e
    % bitmap.
Packit 33f14e
    \let\xeteximgext=\empty
Packit 33f14e
    \begingroup
Packit 33f14e
      \openin 1 #1.pdf \ifeof 1
Packit 33f14e
        \openin 1 #1.PDF \ifeof 1
Packit 33f14e
          \openin 1 #1.png \ifeof 1
Packit 33f14e
            \openin 1 #1.jpg \ifeof 1
Packit 33f14e
              \openin 1 #1.jpeg \ifeof 1
Packit 33f14e
                \openin 1 #1.JPG \ifeof 1
Packit 33f14e
                  \errmessage{Could not find image file #1 for XeTeX}%
Packit 33f14e
                \else \gdef\xeteximgext{JPG}%
Packit 33f14e
                \fi
Packit 33f14e
              \else \gdef\xeteximgext{jpeg}%
Packit 33f14e
              \fi
Packit 33f14e
            \else \gdef\xeteximgext{jpg}%
Packit 33f14e
            \fi
Packit 33f14e
          \else \gdef\xeteximgext{png}%
Packit 33f14e
          \fi
Packit 33f14e
        \else \gdef\xeteximgext{PDF}%
Packit 33f14e
        \fi
Packit 33f14e
      \else \gdef\xeteximgext{pdf}%
Packit 33f14e
      \fi
Packit 33f14e
      \closein 1
Packit 33f14e
    \endgroup
Packit 33f14e
    %
Packit 33f14e
    \def\xetexpdfext{pdf}%
Packit 33f14e
    \ifx\xeteximgext\xetexpdfext
Packit 33f14e
      \XeTeXpdffile "#1".\xeteximgext ""
Packit 33f14e
    \else
Packit 33f14e
      \def\xetexpdfext{PDF}%
Packit 33f14e
      \ifx\xeteximgext\xetexpdfext
Packit 33f14e
        \XeTeXpdffile "#1".\xeteximgext ""
Packit 33f14e
      \else
Packit 33f14e
        \XeTeXpicfile "#1".\xeteximgext ""
Packit 33f14e
      \fi
Packit 33f14e
    \fi
Packit 33f14e
    \ifdim \wd0 >0pt width \xeteximagewidth \fi
Packit 33f14e
    \ifdim \wd2 >0pt height \xeteximageheight \fi \relax
Packit 33f14e
  }
Packit 33f14e
\fi
Packit 33f14e
Packit 33f14e
Packit 33f14e
%
Packit 33f14e
\message{fonts,}
Packit 33f14e
Packit 33f14e
% Set the baselineskip to #1, and the lineskip and strut size
Packit 33f14e
% correspondingly.  There is no deep meaning behind these magic numbers
Packit 33f14e
% used as factors; they just match (closely enough) what Knuth defined.
Packit 33f14e
%
Packit 33f14e
\def\lineskipfactor{.08333}
Packit 33f14e
\def\strutheightpercent{.70833}
Packit 33f14e
\def\strutdepthpercent {.29167}
Packit 33f14e
%
Packit 33f14e
% can get a sort of poor man's double spacing by redefining this.
Packit 33f14e
\def\baselinefactor{1}
Packit 33f14e
%
Packit 33f14e
\newdimen\textleading
Packit 33f14e
\def\setleading#1{%
Packit 33f14e
  \dimen0 = #1\relax
Packit 33f14e
  \normalbaselineskip = \baselinefactor\dimen0
Packit 33f14e
  \normallineskip = \lineskipfactor\normalbaselineskip
Packit 33f14e
  \normalbaselines
Packit 33f14e
  \setbox\strutbox =\hbox{%
Packit 33f14e
    \vrule width0pt height\strutheightpercent\baselineskip
Packit 33f14e
                    depth \strutdepthpercent \baselineskip
Packit 33f14e
  }%
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% PDF CMaps.  See also LaTeX's t1.cmap.
Packit 33f14e
%
Packit 33f14e
% do nothing with this by default.
Packit 33f14e
\expandafter\let\csname cmapOT1\endcsname\gobble
Packit 33f14e
\expandafter\let\csname cmapOT1IT\endcsname\gobble
Packit 33f14e
\expandafter\let\csname cmapOT1TT\endcsname\gobble
Packit 33f14e
Packit 33f14e
% if we are producing pdf, and we have \pdffontattr, then define cmaps.
Packit 33f14e
% (\pdffontattr was introduced many years ago, but people still run
Packit 33f14e
% older pdftex's; it's easy to conditionalize, so we do.)
Packit 33f14e
\ifpdf \ifx\pdffontattr\thisisundefined \else
Packit 33f14e
  \begingroup
Packit 33f14e
    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
Packit 33f14e
    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
Packit 33f14e
%%DocumentNeededResources: ProcSet (CIDInit)
Packit 33f14e
%%IncludeResource: ProcSet (CIDInit)
Packit 33f14e
%%BeginResource: CMap (TeX-OT1-0)
Packit 33f14e
%%Title: (TeX-OT1-0 TeX OT1 0)
Packit 33f14e
%%Version: 1.000
Packit 33f14e
%%EndComments
Packit 33f14e
/CIDInit /ProcSet findresource begin
Packit 33f14e
12 dict begin
Packit 33f14e
begincmap
Packit 33f14e
/CIDSystemInfo
Packit 33f14e
<< /Registry (TeX)
Packit 33f14e
/Ordering (OT1)
Packit 33f14e
/Supplement 0
Packit 33f14e
>> def
Packit 33f14e
/CMapName /TeX-OT1-0 def
Packit 33f14e
/CMapType 2 def
Packit 33f14e
1 begincodespacerange
Packit 33f14e
<00> <7F>
Packit 33f14e
endcodespacerange
Packit 33f14e
8 beginbfrange
Packit 33f14e
<00> <01> <0393>
Packit 33f14e
<09> <0A> <03A8>
Packit 33f14e
<23> <26> <0023>
Packit 33f14e
<28> <3B> <0028>
Packit 33f14e
<3F> <5B> <003F>
Packit 33f14e
<5D> <5E> <005D>
Packit 33f14e
<61> <7A> <0061>
Packit 33f14e
<7B> <7C> <2013>
Packit 33f14e
endbfrange
Packit 33f14e
40 beginbfchar
Packit 33f14e
<02> <0398>
Packit 33f14e
<03> <039B>
Packit 33f14e
<04> <039E>
Packit 33f14e
<05> <03A0>
Packit 33f14e
<06> <03A3>
Packit 33f14e
<07> <03D2>
Packit 33f14e
<08> <03A6>
Packit 33f14e
<0B> <00660066>
Packit 33f14e
<0C> <00660069>
Packit 33f14e
<0D> <0066006C>
Packit 33f14e
<0E> <006600660069>
Packit 33f14e
<0F> <00660066006C>
Packit 33f14e
<10> <0131>
Packit 33f14e
<11> <0237>
Packit 33f14e
<12> <0060>
Packit 33f14e
<13> <00B4>
Packit 33f14e
<14> <02C7>
Packit 33f14e
<15> <02D8>
Packit 33f14e
<16> <00AF>
Packit 33f14e
<17> <02DA>
Packit 33f14e
<18> <00B8>
Packit 33f14e
<19> <00DF>
Packit 33f14e
<1A> <00E6>
Packit 33f14e
<1B> <0153>
Packit 33f14e
<1C> <00F8>
Packit 33f14e
<1D> <00C6>
Packit 33f14e
<1E> <0152>
Packit 33f14e
<1F> <00D8>
Packit 33f14e
<21> <0021>
Packit 33f14e
<22> <201D>
Packit 33f14e
<27> <2019>
Packit 33f14e
<3C> <00A1>
Packit 33f14e
<3D> <003D>
Packit 33f14e
<3E> <00BF>
Packit 33f14e
<5C> <201C>
Packit 33f14e
<5F> <02D9>
Packit 33f14e
<60> <2018>
Packit 33f14e
<7D> <02DD>
Packit 33f14e
<7E> <007E>
Packit 33f14e
<7F> <00A8>
Packit 33f14e
endbfchar
Packit 33f14e
endcmap
Packit 33f14e
CMapName currentdict /CMap defineresource pop
Packit 33f14e
end
Packit 33f14e
end
Packit 33f14e
%%EndResource
Packit 33f14e
%%EOF
Packit 33f14e
    }\endgroup
Packit 33f14e
  \expandafter\edef\csname cmapOT1\endcsname#1{%
Packit 33f14e
    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
Packit 33f14e
  }%
Packit 33f14e
%
Packit 33f14e
% \cmapOT1IT
Packit 33f14e
  \begingroup
Packit 33f14e
    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
Packit 33f14e
    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
Packit 33f14e
%%DocumentNeededResources: ProcSet (CIDInit)
Packit 33f14e
%%IncludeResource: ProcSet (CIDInit)
Packit 33f14e
%%BeginResource: CMap (TeX-OT1IT-0)
Packit 33f14e
%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
Packit 33f14e
%%Version: 1.000
Packit 33f14e
%%EndComments
Packit 33f14e
/CIDInit /ProcSet findresource begin
Packit 33f14e
12 dict begin
Packit 33f14e
begincmap
Packit 33f14e
/CIDSystemInfo
Packit 33f14e
<< /Registry (TeX)
Packit 33f14e
/Ordering (OT1IT)
Packit 33f14e
/Supplement 0
Packit 33f14e
>> def
Packit 33f14e
/CMapName /TeX-OT1IT-0 def
Packit 33f14e
/CMapType 2 def
Packit 33f14e
1 begincodespacerange
Packit 33f14e
<00> <7F>
Packit 33f14e
endcodespacerange
Packit 33f14e
8 beginbfrange
Packit 33f14e
<00> <01> <0393>
Packit 33f14e
<09> <0A> <03A8>
Packit 33f14e
<25> <26> <0025>
Packit 33f14e
<28> <3B> <0028>
Packit 33f14e
<3F> <5B> <003F>
Packit 33f14e
<5D> <5E> <005D>
Packit 33f14e
<61> <7A> <0061>
Packit 33f14e
<7B> <7C> <2013>
Packit 33f14e
endbfrange
Packit 33f14e
42 beginbfchar
Packit 33f14e
<02> <0398>
Packit 33f14e
<03> <039B>
Packit 33f14e
<04> <039E>
Packit 33f14e
<05> <03A0>
Packit 33f14e
<06> <03A3>
Packit 33f14e
<07> <03D2>
Packit 33f14e
<08> <03A6>
Packit 33f14e
<0B> <00660066>
Packit 33f14e
<0C> <00660069>
Packit 33f14e
<0D> <0066006C>
Packit 33f14e
<0E> <006600660069>
Packit 33f14e
<0F> <00660066006C>
Packit 33f14e
<10> <0131>
Packit 33f14e
<11> <0237>
Packit 33f14e
<12> <0060>
Packit 33f14e
<13> <00B4>
Packit 33f14e
<14> <02C7>
Packit 33f14e
<15> <02D8>
Packit 33f14e
<16> <00AF>
Packit 33f14e
<17> <02DA>
Packit 33f14e
<18> <00B8>
Packit 33f14e
<19> <00DF>
Packit 33f14e
<1A> <00E6>
Packit 33f14e
<1B> <0153>
Packit 33f14e
<1C> <00F8>
Packit 33f14e
<1D> <00C6>
Packit 33f14e
<1E> <0152>
Packit 33f14e
<1F> <00D8>
Packit 33f14e
<21> <0021>
Packit 33f14e
<22> <201D>
Packit 33f14e
<23> <0023>
Packit 33f14e
<24> <00A3>
Packit 33f14e
<27> <2019>
Packit 33f14e
<3C> <00A1>
Packit 33f14e
<3D> <003D>
Packit 33f14e
<3E> <00BF>
Packit 33f14e
<5C> <201C>
Packit 33f14e
<5F> <02D9>
Packit 33f14e
<60> <2018>
Packit 33f14e
<7D> <02DD>
Packit 33f14e
<7E> <007E>
Packit 33f14e
<7F> <00A8>
Packit 33f14e
endbfchar
Packit 33f14e
endcmap
Packit 33f14e
CMapName currentdict /CMap defineresource pop
Packit 33f14e
end
Packit 33f14e
end
Packit 33f14e
%%EndResource
Packit 33f14e
%%EOF
Packit 33f14e
    }\endgroup
Packit 33f14e
  \expandafter\edef\csname cmapOT1IT\endcsname#1{%
Packit 33f14e
    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
Packit 33f14e
  }%
Packit 33f14e
%
Packit 33f14e
% \cmapOT1TT
Packit 33f14e
  \begingroup
Packit 33f14e
    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
Packit 33f14e
    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
Packit 33f14e
%%DocumentNeededResources: ProcSet (CIDInit)
Packit 33f14e
%%IncludeResource: ProcSet (CIDInit)
Packit 33f14e
%%BeginResource: CMap (TeX-OT1TT-0)
Packit 33f14e
%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
Packit 33f14e
%%Version: 1.000
Packit 33f14e
%%EndComments
Packit 33f14e
/CIDInit /ProcSet findresource begin
Packit 33f14e
12 dict begin
Packit 33f14e
begincmap
Packit 33f14e
/CIDSystemInfo
Packit 33f14e
<< /Registry (TeX)
Packit 33f14e
/Ordering (OT1TT)
Packit 33f14e
/Supplement 0
Packit 33f14e
>> def
Packit 33f14e
/CMapName /TeX-OT1TT-0 def
Packit 33f14e
/CMapType 2 def
Packit 33f14e
1 begincodespacerange
Packit 33f14e
<00> <7F>
Packit 33f14e
endcodespacerange
Packit 33f14e
5 beginbfrange
Packit 33f14e
<00> <01> <0393>
Packit 33f14e
<09> <0A> <03A8>
Packit 33f14e
<21> <26> <0021>
Packit 33f14e
<28> <5F> <0028>
Packit 33f14e
<61> <7E> <0061>
Packit 33f14e
endbfrange
Packit 33f14e
32 beginbfchar
Packit 33f14e
<02> <0398>
Packit 33f14e
<03> <039B>
Packit 33f14e
<04> <039E>
Packit 33f14e
<05> <03A0>
Packit 33f14e
<06> <03A3>
Packit 33f14e
<07> <03D2>
Packit 33f14e
<08> <03A6>
Packit 33f14e
<0B> <2191>
Packit 33f14e
<0C> <2193>
Packit 33f14e
<0D> <0027>
Packit 33f14e
<0E> <00A1>
Packit 33f14e
<0F> <00BF>
Packit 33f14e
<10> <0131>
Packit 33f14e
<11> <0237>
Packit 33f14e
<12> <0060>
Packit 33f14e
<13> <00B4>
Packit 33f14e
<14> <02C7>
Packit 33f14e
<15> <02D8>
Packit 33f14e
<16> <00AF>
Packit 33f14e
<17> <02DA>
Packit 33f14e
<18> <00B8>
Packit 33f14e
<19> <00DF>
Packit 33f14e
<1A> <00E6>
Packit 33f14e
<1B> <0153>
Packit 33f14e
<1C> <00F8>
Packit 33f14e
<1D> <00C6>
Packit 33f14e
<1E> <0152>
Packit 33f14e
<1F> <00D8>
Packit 33f14e
<20> <2423>
Packit 33f14e
<27> <2019>
Packit 33f14e
<60> <2018>
Packit 33f14e
<7F> <00A8>
Packit 33f14e
endbfchar
Packit 33f14e
endcmap
Packit 33f14e
CMapName currentdict /CMap defineresource pop
Packit 33f14e
end
Packit 33f14e
end
Packit 33f14e
%%EndResource
Packit 33f14e
%%EOF
Packit 33f14e
    }\endgroup
Packit 33f14e
  \expandafter\edef\csname cmapOT1TT\endcsname#1{%
Packit 33f14e
    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
Packit 33f14e
  }%
Packit 33f14e
\fi\fi
Packit 33f14e
Packit 33f14e
Packit 33f14e
% Set the font macro #1 to the font named \fontprefix#2.
Packit 33f14e
% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
Packit 33f14e
% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit).
Packit 33f14e
% Example:
Packit 33f14e
% #1 = \textrm
Packit 33f14e
% #2 = \rmshape
Packit 33f14e
% #3 = 10
Packit 33f14e
% #4 = \mainmagstep
Packit 33f14e
% #5 = OT1
Packit 33f14e
%
Packit 33f14e
\def\setfont#1#2#3#4#5{%
Packit 33f14e
  \font#1=\fontprefix#2#3 scaled #4
Packit 33f14e
  \csname cmap#5\endcsname#1%
Packit 33f14e
}
Packit 33f14e
% This is what gets called when #5 of \setfont is empty.
Packit 33f14e
\let\cmap\gobble
Packit 33f14e
%
Packit 33f14e
% (end of cmaps)
Packit 33f14e
Packit 33f14e
% Use cm as the default font prefix.
Packit 33f14e
% To specify the font prefix, you must define \fontprefix
Packit 33f14e
% before you read in texinfo.tex.
Packit 33f14e
\ifx\fontprefix\thisisundefined
Packit 33f14e
\def\fontprefix{cm}
Packit 33f14e
\fi
Packit 33f14e
% Support font families that don't use the same naming scheme as CM.
Packit 33f14e
\def\rmshape{r}
Packit 33f14e
\def\rmbshape{bx}               % where the normal face is bold
Packit 33f14e
\def\bfshape{b}
Packit 33f14e
\def\bxshape{bx}
Packit 33f14e
\def\ttshape{tt}
Packit 33f14e
\def\ttbshape{tt}
Packit 33f14e
\def\ttslshape{sltt}
Packit 33f14e
\def\itshape{ti}
Packit 33f14e
\def\itbshape{bxti}
Packit 33f14e
\def\slshape{sl}
Packit 33f14e
\def\slbshape{bxsl}
Packit 33f14e
\def\sfshape{ss}
Packit 33f14e
\def\sfbshape{ss}
Packit 33f14e
\def\scshape{csc}
Packit 33f14e
\def\scbshape{csc}
Packit 33f14e
Packit 33f14e
% Definitions for a main text size of 11pt.  (The default in Texinfo.)
Packit 33f14e
%
Packit 33f14e
\def\definetextfontsizexi{%
Packit 33f14e
% Text fonts (11.2pt, magstep1).
Packit 33f14e
\def\textnominalsize{11pt}
Packit 33f14e
\edef\mainmagstep{\magstephalf}
Packit 33f14e
\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
Packit 33f14e
\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
Packit 33f14e
\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
Packit 33f14e
\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
Packit 33f14e
\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
Packit 33f14e
\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
Packit 33f14e
\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
Packit 33f14e
\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
Packit 33f14e
\font\texti=cmmi10 scaled \mainmagstep
Packit 33f14e
\font\textsy=cmsy10 scaled \mainmagstep
Packit 33f14e
\def\textecsize{1095}
Packit 33f14e
Packit 33f14e
% A few fonts for @defun names and args.
Packit 33f14e
\setfont\defbf\bfshape{10}{\magstep1}{OT1}
Packit 33f14e
\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
Packit 33f14e
\setfont\defsl\slshape{10}{\magstep1}{OT1TT}
Packit 33f14e
\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
Packit 33f14e
\def\df{\let\ttfont=\deftt \let\bffont = \defbf
Packit 33f14e
\let\ttslfont=\defttsl \let\slfont=\defsl \bf}
Packit 33f14e
Packit 33f14e
% Fonts for indices, footnotes, small examples (9pt).
Packit 33f14e
\def\smallnominalsize{9pt}
Packit 33f14e
\setfont\smallrm\rmshape{9}{1000}{OT1}
Packit 33f14e
\setfont\smalltt\ttshape{9}{1000}{OT1TT}
Packit 33f14e
\setfont\smallbf\bfshape{10}{900}{OT1}
Packit 33f14e
\setfont\smallit\itshape{9}{1000}{OT1IT}
Packit 33f14e
\setfont\smallsl\slshape{9}{1000}{OT1}
Packit 33f14e
\setfont\smallsf\sfshape{9}{1000}{OT1}
Packit 33f14e
\setfont\smallsc\scshape{10}{900}{OT1}
Packit 33f14e
\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
Packit 33f14e
\font\smalli=cmmi9
Packit 33f14e
\font\smallsy=cmsy9
Packit 33f14e
\def\smallecsize{0900}
Packit 33f14e
Packit 33f14e
% Fonts for small examples (8pt).
Packit 33f14e
\def\smallernominalsize{8pt}
Packit 33f14e
\setfont\smallerrm\rmshape{8}{1000}{OT1}
Packit 33f14e
\setfont\smallertt\ttshape{8}{1000}{OT1TT}
Packit 33f14e
\setfont\smallerbf\bfshape{10}{800}{OT1}
Packit 33f14e
\setfont\smallerit\itshape{8}{1000}{OT1IT}
Packit 33f14e
\setfont\smallersl\slshape{8}{1000}{OT1}
Packit 33f14e
\setfont\smallersf\sfshape{8}{1000}{OT1}
Packit 33f14e
\setfont\smallersc\scshape{10}{800}{OT1}
Packit 33f14e
\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
Packit 33f14e
\font\smalleri=cmmi8
Packit 33f14e
\font\smallersy=cmsy8
Packit 33f14e
\def\smallerecsize{0800}
Packit 33f14e
Packit 33f14e
% Fonts for title page (20.4pt):
Packit 33f14e
\def\titlenominalsize{20pt}
Packit 33f14e
\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
Packit 33f14e
\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
Packit 33f14e
\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
Packit 33f14e
\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
Packit 33f14e
\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
Packit 33f14e
\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
Packit 33f14e
\let\titlebf=\titlerm
Packit 33f14e
\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
Packit 33f14e
\font\titlei=cmmi12 scaled \magstep3
Packit 33f14e
\font\titlesy=cmsy10 scaled \magstep4
Packit 33f14e
\def\titleecsize{2074}
Packit 33f14e
Packit 33f14e
% Chapter (and unnumbered) fonts (17.28pt).
Packit 33f14e
\def\chapnominalsize{17pt}
Packit 33f14e
\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
Packit 33f14e
\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
Packit 33f14e
\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
Packit 33f14e
\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
Packit 33f14e
\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
Packit 33f14e
\setfont\chapsf\sfbshape{17}{1000}{OT1}
Packit 33f14e
\let\chapbf=\chaprm
Packit 33f14e
\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
Packit 33f14e
\font\chapi=cmmi12 scaled \magstep2
Packit 33f14e
\font\chapsy=cmsy10 scaled \magstep3
Packit 33f14e
\def\chapecsize{1728}
Packit 33f14e
Packit 33f14e
% Section fonts (14.4pt).
Packit 33f14e
\def\secnominalsize{14pt}
Packit 33f14e
\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
Packit 33f14e
\setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1}
Packit 33f14e
\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
Packit 33f14e
\setfont\secsl\slbshape{10}{\magstep2}{OT1}
Packit 33f14e
\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
Packit 33f14e
\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
Packit 33f14e
\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
Packit 33f14e
\let\secbf\secrm
Packit 33f14e
\setfont\secsc\scbshape{10}{\magstep2}{OT1}
Packit 33f14e
\font\seci=cmmi12 scaled \magstep1
Packit 33f14e
\font\secsy=cmsy10 scaled \magstep2
Packit 33f14e
\def\sececsize{1440}
Packit 33f14e
Packit 33f14e
% Subsection fonts (13.15pt).
Packit 33f14e
\def\ssecnominalsize{13pt}
Packit 33f14e
\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
Packit 33f14e
\setfont\ssecit\itbshape{10}{1315}{OT1IT}
Packit 33f14e
\setfont\ssecsl\slbshape{10}{1315}{OT1}
Packit 33f14e
\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
Packit 33f14e
\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
Packit 33f14e
\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
Packit 33f14e
\let\ssecbf\ssecrm
Packit 33f14e
\setfont\ssecsc\scbshape{10}{1315}{OT1}
Packit 33f14e
\font\sseci=cmmi12 scaled \magstephalf
Packit 33f14e
\font\ssecsy=cmsy10 scaled 1315
Packit 33f14e
\def\ssececsize{1200}
Packit 33f14e
Packit 33f14e
% Reduced fonts for @acronym in text (10pt).
Packit 33f14e
\def\reducednominalsize{10pt}
Packit 33f14e
\setfont\reducedrm\rmshape{10}{1000}{OT1}
Packit 33f14e
\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
Packit 33f14e
\setfont\reducedbf\bfshape{10}{1000}{OT1}
Packit 33f14e
\setfont\reducedit\itshape{10}{1000}{OT1IT}
Packit 33f14e
\setfont\reducedsl\slshape{10}{1000}{OT1}
Packit 33f14e
\setfont\reducedsf\sfshape{10}{1000}{OT1}
Packit 33f14e
\setfont\reducedsc\scshape{10}{1000}{OT1}
Packit 33f14e
\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
Packit 33f14e
\font\reducedi=cmmi10
Packit 33f14e
\font\reducedsy=cmsy10
Packit 33f14e
\def\reducedecsize{1000}
Packit 33f14e
Packit 33f14e
\textleading = 13.2pt % line spacing for 11pt CM
Packit 33f14e
\textfonts            % reset the current fonts
Packit 33f14e
\rm
Packit 33f14e
} % end of 11pt text font size definitions, \definetextfontsizexi
Packit 33f14e
Packit 33f14e
Packit 33f14e
% Definitions to make the main text be 10pt Computer Modern, with
Packit 33f14e
% section, chapter, etc., sizes following suit.  This is for the GNU
Packit 33f14e
% Press printing of the Emacs 22 manual.  Maybe other manuals in the
Packit 33f14e
% future.  Used with @smallbook, which sets the leading to 12pt.
Packit 33f14e
%
Packit 33f14e
\def\definetextfontsizex{%
Packit 33f14e
% Text fonts (10pt).
Packit 33f14e
\def\textnominalsize{10pt}
Packit 33f14e
\edef\mainmagstep{1000}
Packit 33f14e
\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
Packit 33f14e
\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
Packit 33f14e
\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
Packit 33f14e
\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
Packit 33f14e
\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
Packit 33f14e
\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
Packit 33f14e
\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
Packit 33f14e
\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
Packit 33f14e
\font\texti=cmmi10 scaled \mainmagstep
Packit 33f14e
\font\textsy=cmsy10 scaled \mainmagstep
Packit 33f14e
\def\textecsize{1000}
Packit 33f14e
Packit 33f14e
% A few fonts for @defun names and args.
Packit 33f14e
\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
Packit 33f14e
\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
Packit 33f14e
\setfont\defsl\slshape{10}{\magstephalf}{OT1TT}
Packit 33f14e
\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
Packit 33f14e
\def\df{\let\ttfont=\deftt \let\bffont = \defbf
Packit 33f14e
\let\slfont=\defsl \let\ttslfont=\defttsl \bf}
Packit 33f14e
Packit 33f14e
% Fonts for indices, footnotes, small examples (9pt).
Packit 33f14e
\def\smallnominalsize{9pt}
Packit 33f14e
\setfont\smallrm\rmshape{9}{1000}{OT1}
Packit 33f14e
\setfont\smalltt\ttshape{9}{1000}{OT1TT}
Packit 33f14e
\setfont\smallbf\bfshape{10}{900}{OT1}
Packit 33f14e
\setfont\smallit\itshape{9}{1000}{OT1IT}
Packit 33f14e
\setfont\smallsl\slshape{9}{1000}{OT1}
Packit 33f14e
\setfont\smallsf\sfshape{9}{1000}{OT1}
Packit 33f14e
\setfont\smallsc\scshape{10}{900}{OT1}
Packit 33f14e
\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
Packit 33f14e
\font\smalli=cmmi9
Packit 33f14e
\font\smallsy=cmsy9
Packit 33f14e
\def\smallecsize{0900}
Packit 33f14e
Packit 33f14e
% Fonts for small examples (8pt).
Packit 33f14e
\def\smallernominalsize{8pt}
Packit 33f14e
\setfont\smallerrm\rmshape{8}{1000}{OT1}
Packit 33f14e
\setfont\smallertt\ttshape{8}{1000}{OT1TT}
Packit 33f14e
\setfont\smallerbf\bfshape{10}{800}{OT1}
Packit 33f14e
\setfont\smallerit\itshape{8}{1000}{OT1IT}
Packit 33f14e
\setfont\smallersl\slshape{8}{1000}{OT1}
Packit 33f14e
\setfont\smallersf\sfshape{8}{1000}{OT1}
Packit 33f14e
\setfont\smallersc\scshape{10}{800}{OT1}
Packit 33f14e
\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
Packit 33f14e
\font\smalleri=cmmi8
Packit 33f14e
\font\smallersy=cmsy8
Packit 33f14e
\def\smallerecsize{0800}
Packit 33f14e
Packit 33f14e
% Fonts for title page (20.4pt):
Packit 33f14e
\def\titlenominalsize{20pt}
Packit 33f14e
\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
Packit 33f14e
\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
Packit 33f14e
\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
Packit 33f14e
\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
Packit 33f14e
\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
Packit 33f14e
\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
Packit 33f14e
\let\titlebf=\titlerm
Packit 33f14e
\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
Packit 33f14e
\font\titlei=cmmi12 scaled \magstep3
Packit 33f14e
\font\titlesy=cmsy10 scaled \magstep4
Packit 33f14e
\def\titleecsize{2074}
Packit 33f14e
Packit 33f14e
% Chapter fonts (14.4pt).
Packit 33f14e
\def\chapnominalsize{14pt}
Packit 33f14e
\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
Packit 33f14e
\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
Packit 33f14e
\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
Packit 33f14e
\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
Packit 33f14e
\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
Packit 33f14e
\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
Packit 33f14e
\let\chapbf\chaprm
Packit 33f14e
\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
Packit 33f14e
\font\chapi=cmmi12 scaled \magstep1
Packit 33f14e
\font\chapsy=cmsy10 scaled \magstep2
Packit 33f14e
\def\chapecsize{1440}
Packit 33f14e
Packit 33f14e
% Section fonts (12pt).
Packit 33f14e
\def\secnominalsize{12pt}
Packit 33f14e
\setfont\secrm\rmbshape{12}{1000}{OT1}
Packit 33f14e
\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
Packit 33f14e
\setfont\secsl\slbshape{10}{\magstep1}{OT1}
Packit 33f14e
\setfont\sectt\ttbshape{12}{1000}{OT1TT}
Packit 33f14e
\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
Packit 33f14e
\setfont\secsf\sfbshape{12}{1000}{OT1}
Packit 33f14e
\let\secbf\secrm
Packit 33f14e
\setfont\secsc\scbshape{10}{\magstep1}{OT1}
Packit 33f14e
\font\seci=cmmi12
Packit 33f14e
\font\secsy=cmsy10 scaled \magstep1
Packit 33f14e
\def\sececsize{1200}
Packit 33f14e
Packit 33f14e
% Subsection fonts (10pt).
Packit 33f14e
\def\ssecnominalsize{10pt}
Packit 33f14e
\setfont\ssecrm\rmbshape{10}{1000}{OT1}
Packit 33f14e
\setfont\ssecit\itbshape{10}{1000}{OT1IT}
Packit 33f14e
\setfont\ssecsl\slbshape{10}{1000}{OT1}
Packit 33f14e
\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
Packit 33f14e
\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
Packit 33f14e
\setfont\ssecsf\sfbshape{10}{1000}{OT1}
Packit 33f14e
\let\ssecbf\ssecrm
Packit 33f14e
\setfont\ssecsc\scbshape{10}{1000}{OT1}
Packit 33f14e
\font\sseci=cmmi10
Packit 33f14e
\font\ssecsy=cmsy10
Packit 33f14e
\def\ssececsize{1000}
Packit 33f14e
Packit 33f14e
% Reduced fonts for @acronym in text (9pt).
Packit 33f14e
\def\reducednominalsize{9pt}
Packit 33f14e
\setfont\reducedrm\rmshape{9}{1000}{OT1}
Packit 33f14e
\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
Packit 33f14e
\setfont\reducedbf\bfshape{10}{900}{OT1}
Packit 33f14e
\setfont\reducedit\itshape{9}{1000}{OT1IT}
Packit 33f14e
\setfont\reducedsl\slshape{9}{1000}{OT1}
Packit 33f14e
\setfont\reducedsf\sfshape{9}{1000}{OT1}
Packit 33f14e
\setfont\reducedsc\scshape{10}{900}{OT1}
Packit 33f14e
\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
Packit 33f14e
\font\reducedi=cmmi9
Packit 33f14e
\font\reducedsy=cmsy9
Packit 33f14e
\def\reducedecsize{0900}
Packit 33f14e
Packit 33f14e
\divide\parskip by 2  % reduce space between paragraphs
Packit 33f14e
\textleading = 12pt   % line spacing for 10pt CM
Packit 33f14e
\textfonts            % reset the current fonts
Packit 33f14e
\rm
Packit 33f14e
} % end of 10pt text font size definitions, \definetextfontsizex
Packit 33f14e
Packit 33f14e
% Fonts for short table of contents.
Packit 33f14e
\setfont\shortcontrm\rmshape{12}{1000}{OT1}
Packit 33f14e
\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1}  % no cmb12
Packit 33f14e
\setfont\shortcontsl\slshape{12}{1000}{OT1}
Packit 33f14e
\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
Packit 33f14e
Packit 33f14e
Packit 33f14e
% We provide the user-level command
Packit 33f14e
%   @fonttextsize 10
Packit 33f14e
% (or 11) to redefine the text font size.  pt is assumed.
Packit 33f14e
%
Packit 33f14e
\def\xiword{11}
Packit 33f14e
\def\xword{10}
Packit 33f14e
\def\xwordpt{10pt}
Packit 33f14e
%
Packit 33f14e
\parseargdef\fonttextsize{%
Packit 33f14e
  \def\textsizearg{#1}%
Packit 33f14e
  %\wlog{doing @fonttextsize \textsizearg}%
Packit 33f14e
  %
Packit 33f14e
  % Set \globaldefs so that documents can use this inside @tex, since
Packit 33f14e
  % makeinfo 4.8 does not support it, but we need it nonetheless.
Packit 33f14e
  %
Packit 33f14e
 \begingroup \globaldefs=1
Packit 33f14e
  \ifx\textsizearg\xword \definetextfontsizex
Packit 33f14e
  \else \ifx\textsizearg\xiword \definetextfontsizexi
Packit 33f14e
  \else
Packit 33f14e
    \errhelp=\EMsimple
Packit 33f14e
    \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
Packit 33f14e
  \fi\fi
Packit 33f14e
 \endgroup
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
%
Packit 33f14e
% Change the current font style to #1, remembering it in \curfontstyle.
Packit 33f14e
% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
Packit 33f14e
% italics, not bold italics.
Packit 33f14e
%
Packit 33f14e
\def\setfontstyle#1{%
Packit 33f14e
  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
Packit 33f14e
  \csname #1font\endcsname  % change the current font
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
\def\rm{\fam=0 \setfontstyle{rm}}
Packit 33f14e
\def\it{\fam=\itfam \setfontstyle{it}}
Packit 33f14e
\def\sl{\fam=\slfam \setfontstyle{sl}}
Packit 33f14e
\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
Packit 33f14e
\def\tt{\fam=\ttfam \setfontstyle{tt}}
Packit 33f14e
Packit 33f14e
% Texinfo sort of supports the sans serif font style, which plain TeX does not.
Packit 33f14e
% So we set up a \sf.
Packit 33f14e
\newfam\sffam
Packit 33f14e
\def\sf{\fam=\sffam \setfontstyle{sf}}
Packit 33f14e
Packit 33f14e
% We don't need math for this font style.
Packit 33f14e
\def\ttsl{\setfontstyle{ttsl}}
Packit 33f14e
Packit 33f14e
Packit 33f14e
% In order for the font changes to affect most math symbols and letters,
Packit 33f14e
% we have to define the \textfont of the standard families.  We don't
Packit 33f14e
% bother to reset \scriptfont and \scriptscriptfont; awaiting user need.
Packit 33f14e
%
Packit 33f14e
\def\resetmathfonts{%
Packit 33f14e
  \textfont0=\rmfont \textfont1=\ifont \textfont2=\syfont
Packit 33f14e
  \textfont\itfam=\itfont \textfont\slfam=\slfont \textfont\bffam=\bffont
Packit 33f14e
  \textfont\ttfam=\ttfont \textfont\sffam=\sffont
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
%
Packit 33f14e
Packit 33f14e
% The font-changing commands (all called \...fonts) redefine the meanings
Packit 33f14e
% of \STYLEfont, instead of just \STYLE.  We do this because \STYLE needs
Packit 33f14e
% to also set the current \fam for math mode.  Our \STYLE (e.g., \rm)
Packit 33f14e
% commands hardwire \STYLEfont to set the current font.
Packit 33f14e
%
Packit 33f14e
% Each font-changing command also sets the names \lsize (one size lower)
Packit 33f14e
% and \lllsize (three sizes lower).  These relative commands are used
Packit 33f14e
% in, e.g., the LaTeX logo and acronyms.
Packit 33f14e
%
Packit 33f14e
% This all needs generalizing, badly.
Packit 33f14e
%
Packit 33f14e
Packit 33f14e
\def\assignfonts#1{%
Packit 33f14e
  \expandafter\let\expandafter\rmfont\csname #1rm\endcsname
Packit 33f14e
  \expandafter\let\expandafter\itfont\csname #1it\endcsname
Packit 33f14e
  \expandafter\let\expandafter\slfont\csname #1sl\endcsname
Packit 33f14e
  \expandafter\let\expandafter\bffont\csname #1bf\endcsname
Packit 33f14e
  \expandafter\let\expandafter\ttfont\csname #1tt\endcsname
Packit 33f14e
  \expandafter\let\expandafter\smallcaps\csname #1sc\endcsname
Packit 33f14e
  \expandafter\let\expandafter\sffont  \csname #1sf\endcsname
Packit 33f14e
  \expandafter\let\expandafter\ifont   \csname #1i\endcsname
Packit 33f14e
  \expandafter\let\expandafter\syfont  \csname #1sy\endcsname
Packit 33f14e
  \expandafter\let\expandafter\ttslfont\csname #1ttsl\endcsname
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
\newif\ifrmisbold
Packit 33f14e
Packit 33f14e
% Select smaller font size with the current style.  Used to change font size
Packit 33f14e
% in, e.g., the LaTeX logo and acronyms.  If we are using bold fonts for
Packit 33f14e
% normal roman text, also use bold fonts for roman text in the smaller size.
Packit 33f14e
\def\switchtolllsize{%
Packit 33f14e
   \expandafter\assignfonts\expandafter{\lllsize}%
Packit 33f14e
   \ifrmisbold
Packit 33f14e
     \let\rmfont\bffont
Packit 33f14e
   \fi
Packit 33f14e
   \csname\curfontstyle\endcsname
Packit 33f14e
}%
Packit 33f14e
Packit 33f14e
\def\switchtolsize{%
Packit 33f14e
   \expandafter\assignfonts\expandafter{\lsize}%
Packit 33f14e
   \ifrmisbold
Packit 33f14e
     \let\rmfont\bffont
Packit 33f14e
   \fi
Packit 33f14e
   \csname\curfontstyle\endcsname
Packit 33f14e
}%
Packit 33f14e
Packit 33f14e
\def\definefontsetatsize#1#2#3#4#5{%
Packit 33f14e
\expandafter\def\csname #1fonts\endcsname{%
Packit 33f14e
  \def\curfontsize{#1}%
Packit 33f14e
  \def\lsize{#2}\def\lllsize{#3}%
Packit 33f14e
  \csname rmisbold#5\endcsname
Packit 33f14e
  \assignfonts{#1}%
Packit 33f14e
  \resetmathfonts
Packit 33f14e
  \setleading{#4}%
Packit 33f14e
}}
Packit 33f14e
Packit 33f14e
\definefontsetatsize{text}   {reduced}{smaller}{\textleading}{false}
Packit 33f14e
\definefontsetatsize{title}  {chap}   {subsec} {27pt}  {true}
Packit 33f14e
\definefontsetatsize{chap}   {sec}    {text}   {19pt}  {true}
Packit 33f14e
\definefontsetatsize{sec}    {subsec} {reduced}{17pt}  {true}
Packit 33f14e
\definefontsetatsize{ssec}   {text}   {small}  {15pt}  {true}
Packit 33f14e
\definefontsetatsize{reduced}{small}  {smaller}{10.5pt}{false}
Packit 33f14e
\definefontsetatsize{small}  {smaller}{smaller}{10.5pt}{false}
Packit 33f14e
\definefontsetatsize{smaller}{smaller}{smaller}{9.5pt} {false}
Packit 33f14e
Packit 33f14e
\def\titlefont#1{{\titlefonts\rm #1}}
Packit 33f14e
\let\subsecfonts = \ssecfonts
Packit 33f14e
\let\subsubsecfonts = \ssecfonts
Packit 33f14e
Packit 33f14e
% Define these just so they can be easily changed for other fonts.
Packit 33f14e
\def\angleleft{$\langle$}
Packit 33f14e
\def\angleright{$\rangle$}
Packit 33f14e
Packit 33f14e
% Set the fonts to use with the @small... environments.
Packit 33f14e
\let\smallexamplefonts = \smallfonts
Packit 33f14e
Packit 33f14e
% About \smallexamplefonts.  If we use \smallfonts (9pt), @smallexample
Packit 33f14e
% can fit this many characters:
Packit 33f14e
%   8.5x11=86   smallbook=72  a4=90  a5=69
Packit 33f14e
% If we use \scriptfonts (8pt), then we can fit this many characters:
Packit 33f14e
%   8.5x11=90+  smallbook=80  a4=90+  a5=77
Packit 33f14e
% For me, subjectively, the few extra characters that fit aren't worth
Packit 33f14e
% the additional smallness of 8pt.  So I'm making the default 9pt.
Packit 33f14e
%
Packit 33f14e
% By the way, for comparison, here's what fits with @example (10pt):
Packit 33f14e
%   8.5x11=71  smallbook=60  a4=75  a5=58
Packit 33f14e
% --karl, 24jan03.
Packit 33f14e
Packit 33f14e
% Set up the default fonts, so we can use them for creating boxes.
Packit 33f14e
%
Packit 33f14e
\definetextfontsizexi
Packit 33f14e
Packit 33f14e
Packit 33f14e
\message{markup,}
Packit 33f14e
Packit 33f14e
% Check if we are currently using a typewriter font.  Since all the
Packit 33f14e
% Computer Modern typewriter fonts have zero interword stretch (and
Packit 33f14e
% shrink), and it is reasonable to expect all typewriter fonts to have
Packit 33f14e
% this property, we can check that font parameter.
Packit 33f14e
%
Packit 33f14e
\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
Packit 33f14e
Packit 33f14e
% Markup style infrastructure.  \defmarkupstylesetup\INITMACRO will
Packit 33f14e
% define and register \INITMACRO to be called on markup style changes.
Packit 33f14e
% \INITMACRO can check \currentmarkupstyle for the innermost
Packit 33f14e
% style and the set of \ifmarkupSTYLE switches for all styles
Packit 33f14e
% currently in effect.
Packit 33f14e
\newif\ifmarkupvar
Packit 33f14e
\newif\ifmarkupsamp
Packit 33f14e
\newif\ifmarkupkey
Packit 33f14e
%\newif\ifmarkupfile % @file == @samp.
Packit 33f14e
%\newif\ifmarkupoption % @option == @samp.
Packit 33f14e
\newif\ifmarkupcode
Packit 33f14e
\newif\ifmarkupkbd
Packit 33f14e
%\newif\ifmarkupenv % @env == @code.
Packit 33f14e
%\newif\ifmarkupcommand % @command == @code.
Packit 33f14e
\newif\ifmarkuptex % @tex (and part of @math, for now).
Packit 33f14e
\newif\ifmarkupexample
Packit 33f14e
\newif\ifmarkupverb
Packit 33f14e
\newif\ifmarkupverbatim
Packit 33f14e
Packit 33f14e
\let\currentmarkupstyle\empty
Packit 33f14e
Packit 33f14e
\def\setupmarkupstyle#1{%
Packit 33f14e
  \csname markup#1true\endcsname
Packit 33f14e
  \def\currentmarkupstyle{#1}%
Packit 33f14e
  \markupstylesetup
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
\let\markupstylesetup\empty
Packit 33f14e
Packit 33f14e
\def\defmarkupstylesetup#1{%
Packit 33f14e
  \expandafter\def\expandafter\markupstylesetup
Packit 33f14e
    \expandafter{\markupstylesetup #1}%
Packit 33f14e
  \def#1%
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% Markup style setup for left and right quotes.
Packit 33f14e
\defmarkupstylesetup\markupsetuplq{%
Packit 33f14e
  \expandafter\let\expandafter \temp
Packit 33f14e
    \csname markupsetuplq\currentmarkupstyle\endcsname
Packit 33f14e
  \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
\defmarkupstylesetup\markupsetuprq{%
Packit 33f14e
  \expandafter\let\expandafter \temp
Packit 33f14e
    \csname markupsetuprq\currentmarkupstyle\endcsname
Packit 33f14e
  \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
{
Packit 33f14e
\catcode`\'=\active
Packit 33f14e
\catcode`\`=\active
Packit 33f14e
Packit 33f14e
\gdef\markupsetuplqdefault{\let`\lq}
Packit 33f14e
\gdef\markupsetuprqdefault{\let'\rq}
Packit 33f14e
Packit 33f14e
\gdef\markupsetcodequoteleft{\let`\codequoteleft}
Packit 33f14e
\gdef\markupsetcodequoteright{\let'\codequoteright}
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
\let\markupsetuplqcode \markupsetcodequoteleft
Packit 33f14e
\let\markupsetuprqcode \markupsetcodequoteright
Packit 33f14e
%
Packit 33f14e
\let\markupsetuplqexample \markupsetcodequoteleft
Packit 33f14e
\let\markupsetuprqexample \markupsetcodequoteright
Packit 33f14e
%
Packit 33f14e
\let\markupsetuplqkbd     \markupsetcodequoteleft
Packit 33f14e
\let\markupsetuprqkbd     \markupsetcodequoteright
Packit 33f14e
%
Packit 33f14e
\let\markupsetuplqsamp \markupsetcodequoteleft
Packit 33f14e
\let\markupsetuprqsamp \markupsetcodequoteright
Packit 33f14e
%
Packit 33f14e
\let\markupsetuplqverb \markupsetcodequoteleft
Packit 33f14e
\let\markupsetuprqverb \markupsetcodequoteright
Packit 33f14e
%
Packit 33f14e
\let\markupsetuplqverbatim \markupsetcodequoteleft
Packit 33f14e
\let\markupsetuprqverbatim \markupsetcodequoteright
Packit 33f14e
Packit 33f14e
% Allow an option to not use regular directed right quote/apostrophe
Packit 33f14e
% (char 0x27), but instead the undirected quote from cmtt (char 0x0d).
Packit 33f14e
% The undirected quote is ugly, so don't make it the default, but it
Packit 33f14e
% works for pasting with more pdf viewers (at least evince), the
Packit 33f14e
% lilypond developers report.  xpdf does work with the regular 0x27.
Packit 33f14e
%
Packit 33f14e
\def\codequoteright{%
Packit 33f14e
  \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
Packit 33f14e
    \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
Packit 33f14e
      '%
Packit 33f14e
    \else \char'15 \fi
Packit 33f14e
  \else \char'15 \fi
Packit 33f14e
}
Packit 33f14e
%
Packit 33f14e
% and a similar option for the left quote char vs. a grave accent.
Packit 33f14e
% Modern fonts display ASCII 0x60 as a grave accent, so some people like
Packit 33f14e
% the code environments to do likewise.
Packit 33f14e
%
Packit 33f14e
\def\codequoteleft{%
Packit 33f14e
  \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
Packit 33f14e
    \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
Packit 33f14e
      % [Knuth] pp. 380,381,391
Packit 33f14e
      % \relax disables Spanish ligatures ?` and !` of \tt font.
Packit 33f14e
      \relax`%
Packit 33f14e
    \else \char'22 \fi
Packit 33f14e
  \else \char'22 \fi
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% Commands to set the quote options.
Packit 33f14e
% 
Packit 33f14e
\parseargdef\codequoteundirected{%
Packit 33f14e
  \def\temp{#1}%
Packit 33f14e
  \ifx\temp\onword
Packit 33f14e
    \expandafter\let\csname SETtxicodequoteundirected\endcsname
Packit 33f14e
      = t%
Packit 33f14e
  \else\ifx\temp\offword
Packit 33f14e
    \expandafter\let\csname SETtxicodequoteundirected\endcsname
Packit 33f14e
      = \relax
Packit 33f14e
  \else
Packit 33f14e
    \errhelp = \EMsimple
Packit 33f14e
    \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}%
Packit 33f14e
  \fi\fi
Packit 33f14e
}
Packit 33f14e
%
Packit 33f14e
\parseargdef\codequotebacktick{%
Packit 33f14e
  \def\temp{#1}%
Packit 33f14e
  \ifx\temp\onword
Packit 33f14e
    \expandafter\let\csname SETtxicodequotebacktick\endcsname
Packit 33f14e
      = t%
Packit 33f14e
  \else\ifx\temp\offword
Packit 33f14e
    \expandafter\let\csname SETtxicodequotebacktick\endcsname
Packit 33f14e
      = \relax
Packit 33f14e
  \else
Packit 33f14e
    \errhelp = \EMsimple
Packit 33f14e
    \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}%
Packit 33f14e
  \fi\fi
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
Packit 33f14e
\def\noligaturesquoteleft{\relax\lq}
Packit 33f14e
Packit 33f14e
% Count depth in font-changes, for error checks
Packit 33f14e
\newcount\fontdepth \fontdepth=0
Packit 33f14e
Packit 33f14e
% Font commands.
Packit 33f14e
Packit 33f14e
% #1 is the font command (\sl or \it), #2 is the text to slant.
Packit 33f14e
% If we are in a monospaced environment, however, 1) always use \ttsl,
Packit 33f14e
% and 2) do not add an italic correction.
Packit 33f14e
\def\dosmartslant#1#2{%
Packit 33f14e
  \ifusingtt 
Packit 33f14e
    {{\ttsl #2}\let\next=\relax}%
Packit 33f14e
    {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
Packit 33f14e
  \next
Packit 33f14e
}
Packit 33f14e
\def\smartslanted{\dosmartslant\sl}
Packit 33f14e
\def\smartitalic{\dosmartslant\it}
Packit 33f14e
Packit 33f14e
% Output an italic correction unless \next (presumed to be the following
Packit 33f14e
% character) is such as not to need one.
Packit 33f14e
\def\smartitaliccorrection{%
Packit 33f14e
  \ifx\next,%
Packit 33f14e
  \else\ifx\next-%
Packit 33f14e
  \else\ifx\next.%
Packit 33f14e
  \else\ifx\next\.%
Packit 33f14e
  \else\ifx\next\comma%
Packit 33f14e
  \else\ptexslash
Packit 33f14e
  \fi\fi\fi\fi\fi
Packit 33f14e
  \aftersmartic
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% Unconditional use \ttsl, and no ic.  @var is set to this for defuns.
Packit 33f14e
\def\ttslanted#1{{\ttsl #1}}
Packit 33f14e
Packit 33f14e
% @cite is like \smartslanted except unconditionally use \sl.  We never want
Packit 33f14e
% ttsl for book titles, do we?
Packit 33f14e
\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection}
Packit 33f14e
Packit 33f14e
\def\aftersmartic{}
Packit 33f14e
\def\var#1{%
Packit 33f14e
  \let\saveaftersmartic = \aftersmartic
Packit 33f14e
  \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}%
Packit 33f14e
  \smartslanted{#1}%
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
\let\i=\smartitalic
Packit 33f14e
\let\slanted=\smartslanted
Packit 33f14e
\let\dfn=\smartslanted
Packit 33f14e
\let\emph=\smartitalic
Packit 33f14e
Packit 33f14e
% Explicit font changes: @r, @sc, undocumented @ii.
Packit 33f14e
\def\r#1{{\rm #1}}              % roman font
Packit 33f14e
\def\sc#1{{\smallcaps#1}}       % smallcaps font
Packit 33f14e
\def\ii#1{{\it #1}}             % italic font
Packit 33f14e
Packit 33f14e
% @b, explicit bold.  Also @strong.
Packit 33f14e
\def\b#1{{\bf #1}}
Packit 33f14e
\let\strong=\b
Packit 33f14e
Packit 33f14e
% @sansserif, explicit sans.
Packit 33f14e
\def\sansserif#1{{\sf #1}}
Packit 33f14e
Packit 33f14e
% We can't just use \exhyphenpenalty, because that only has effect at
Packit 33f14e
% the end of a paragraph.  Restore normal hyphenation at the end of the
Packit 33f14e
% group within which \nohyphenation is presumably called.
Packit 33f14e
%
Packit 33f14e
\def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
Packit 33f14e
\def\restorehyphenation{\hyphenchar\font = `- }
Packit 33f14e
Packit 33f14e
% Set sfcode to normal for the chars that usually have another value.
Packit 33f14e
% Can't use plain's \frenchspacing because it uses the `\x notation, and
Packit 33f14e
% sometimes \x has an active definition that messes things up.
Packit 33f14e
%
Packit 33f14e
\catcode`@=11
Packit 33f14e
  \def\plainfrenchspacing{%
Packit 33f14e
    \sfcode`\.=\@m \sfcode`\?=\@m \sfcode`\!=\@m
Packit 33f14e
    \sfcode`\:=\@m \sfcode`\;=\@m \sfcode`\,=\@m
Packit 33f14e
    \def\endofsentencespacefactor{1000}% for @. and friends
Packit 33f14e
  }
Packit 33f14e
  \def\plainnonfrenchspacing{%
Packit 33f14e
    \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
Packit 33f14e
    \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
Packit 33f14e
    \def\endofsentencespacefactor{3000}% for @. and friends
Packit 33f14e
  }
Packit 33f14e
\catcode`@=\other
Packit 33f14e
\def\endofsentencespacefactor{3000}% default
Packit 33f14e
Packit 33f14e
% @t, explicit typewriter.
Packit 33f14e
\def\t#1{%
Packit 33f14e
  {\tt \rawbackslash \plainfrenchspacing #1}%
Packit 33f14e
  \null
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% @samp.
Packit 33f14e
\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
Packit 33f14e
Packit 33f14e
% @indicateurl is \samp, that is, with quotes.
Packit 33f14e
\let\indicateurl=\samp
Packit 33f14e
Packit 33f14e
% @code (and similar) prints in typewriter, but with spaces the same
Packit 33f14e
% size as normal in the surrounding text, without hyphenation, etc.
Packit 33f14e
% This is a subroutine for that.
Packit 33f14e
\def\tclose#1{%
Packit 33f14e
  {%
Packit 33f14e
    % Change normal interword space to be same as for the current font.
Packit 33f14e
    \spaceskip = \fontdimen2\font
Packit 33f14e
    %
Packit 33f14e
    % Switch to typewriter.
Packit 33f14e
    \tt
Packit 33f14e
    %
Packit 33f14e
    % But `\ ' produces the large typewriter interword space.
Packit 33f14e
    \def\ {{\spaceskip = 0pt{} }}%
Packit 33f14e
    %
Packit 33f14e
    % Turn off hyphenation.
Packit 33f14e
    \nohyphenation
Packit 33f14e
    %
Packit 33f14e
    \rawbackslash
Packit 33f14e
    \plainfrenchspacing
Packit 33f14e
    #1%
Packit 33f14e
  }%
Packit 33f14e
  \null % reset spacefactor to 1000
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% We *must* turn on hyphenation at `-' and `_' in @code.
Packit 33f14e
% (But see \codedashfinish below.)
Packit 33f14e
% Otherwise, it is too hard to avoid overfull hboxes
Packit 33f14e
% in the Emacs manual, the Library manual, etc.
Packit 33f14e
%
Packit 33f14e
% Unfortunately, TeX uses one parameter (\hyphenchar) to control
Packit 33f14e
% both hyphenation at - and hyphenation within words.
Packit 33f14e
% We must therefore turn them both off (\tclose does that)
Packit 33f14e
% and arrange explicitly to hyphenate at a dash. -- rms.
Packit 33f14e
{
Packit 33f14e
  \catcode`\-=\active \catcode`\_=\active
Packit 33f14e
  \catcode`\'=\active \catcode`\`=\active
Packit 33f14e
  \global\let'=\rq \global\let`=\lq  % default definitions
Packit 33f14e
  %
Packit 33f14e
  \global\def\code{\begingroup
Packit 33f14e
    \setupmarkupstyle{code}%
Packit 33f14e
    % The following should really be moved into \setupmarkupstyle handlers.
Packit 33f14e
    \catcode\dashChar=\active  \catcode\underChar=\active
Packit 33f14e
    \ifallowcodebreaks
Packit 33f14e
     \let-\codedash
Packit 33f14e
     \let_\codeunder
Packit 33f14e
    \else
Packit 33f14e
     \let-\normaldash
Packit 33f14e
     \let_\realunder
Packit 33f14e
    \fi
Packit 33f14e
    % Given -foo (with a single dash), we do not want to allow a break
Packit 33f14e
    % after the hyphen.
Packit 33f14e
    \global\let\codedashprev=\codedash
Packit 33f14e
    %
Packit 33f14e
    \codex
Packit 33f14e
  }
Packit 33f14e
  %
Packit 33f14e
  \gdef\codedash{\futurelet\next\codedashfinish}
Packit 33f14e
  \gdef\codedashfinish{%
Packit 33f14e
    \normaldash % always output the dash character itself.
Packit 33f14e
    % 
Packit 33f14e
    % Now, output a discretionary to allow a line break, unless
Packit 33f14e
    % (a) the next character is a -, or
Packit 33f14e
    % (b) the preceding character is a -.
Packit 33f14e
    % E.g., given --posix, we do not want to allow a break after either -.
Packit 33f14e
    % Given --foo-bar, we do want to allow a break between the - and the b.
Packit 33f14e
    \ifx\next\codedash \else
Packit 33f14e
      \ifx\codedashprev\codedash 
Packit 33f14e
      \else \discretionary{}{}{}\fi
Packit 33f14e
    \fi
Packit 33f14e
    % we need the space after the = for the case when \next itself is a
Packit 33f14e
    % space token; it would get swallowed otherwise.  As in @code{- a}.
Packit 33f14e
    \global\let\codedashprev= \next
Packit 33f14e
  }
Packit 33f14e
}
Packit 33f14e
\def\normaldash{-}
Packit 33f14e
%
Packit 33f14e
\def\codex #1{\tclose{#1}\endgroup}
Packit 33f14e
Packit 33f14e
\def\codeunder{%
Packit 33f14e
  % this is all so @math{@code{var_name}+1} can work.  In math mode, _
Packit 33f14e
  % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
Packit 33f14e
  % will therefore expand the active definition of _, which is us
Packit 33f14e
  % (inside @code that is), therefore an endless loop.
Packit 33f14e
  \ifusingtt{\ifmmode
Packit 33f14e
               \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
Packit 33f14e
             \else\normalunderscore \fi
Packit 33f14e
             \discretionary{}{}{}}%
Packit 33f14e
            {\_}%
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% An additional complication: the above will allow breaks after, e.g.,
Packit 33f14e
% each of the four underscores in __typeof__.  This is bad.
Packit 33f14e
% @allowcodebreaks provides a document-level way to turn breaking at -
Packit 33f14e
% and _ on and off.
Packit 33f14e
%
Packit 33f14e
\newif\ifallowcodebreaks  \allowcodebreakstrue
Packit 33f14e
Packit 33f14e
\def\keywordtrue{true}
Packit 33f14e
\def\keywordfalse{false}
Packit 33f14e
Packit 33f14e
\parseargdef\allowcodebreaks{%
Packit 33f14e
  \def\txiarg{#1}%
Packit 33f14e
  \ifx\txiarg\keywordtrue
Packit 33f14e
    \allowcodebreakstrue
Packit 33f14e
  \else\ifx\txiarg\keywordfalse
Packit 33f14e
    \allowcodebreaksfalse
Packit 33f14e
  \else
Packit 33f14e
    \errhelp = \EMsimple
Packit 33f14e
    \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}%
Packit 33f14e
  \fi\fi
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% For @command, @env, @file, @option quotes seem unnecessary,
Packit 33f14e
% so use \code rather than \samp.
Packit 33f14e
\let\command=\code
Packit 33f14e
\let\env=\code
Packit 33f14e
\let\file=\code
Packit 33f14e
\let\option=\code
Packit 33f14e
Packit 33f14e
% @uref (abbreviation for `urlref') aka @url takes an optional
Packit 33f14e
% (comma-separated) second argument specifying the text to display and
Packit 33f14e
% an optional third arg as text to display instead of (rather than in
Packit 33f14e
% addition to) the url itself.  First (mandatory) arg is the url.
Packit 33f14e
Packit 33f14e
% TeX-only option to allow changing PDF output to show only the second
Packit 33f14e
% arg (if given), and not the url (which is then just the link target).
Packit 33f14e
\newif\ifurefurlonlylink
Packit 33f14e
Packit 33f14e
% The main macro is \urefbreak, which allows breaking at expected
Packit 33f14e
% places within the url.  (There used to be another version, which
Packit 33f14e
% didn't support automatic breaking.)
Packit 33f14e
\def\urefbreak{\begingroup \urefcatcodes \dourefbreak}
Packit 33f14e
\let\uref=\urefbreak
Packit 33f14e
%
Packit 33f14e
\def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
Packit 33f14e
\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example
Packit 33f14e
  \unsepspaces
Packit 33f14e
  \pdfurl{#1}%
Packit 33f14e
  \setbox0 = \hbox{\ignorespaces #3}%
Packit 33f14e
  \ifdim\wd0 > 0pt
Packit 33f14e
    \unhbox0 % third arg given, show only that
Packit 33f14e
  \else
Packit 33f14e
    \setbox0 = \hbox{\ignorespaces #2}% look for second arg
Packit 33f14e
    \ifdim\wd0 > 0pt
Packit 33f14e
      \ifpdf
Packit 33f14e
        % For pdfTeX and LuaTeX
Packit 33f14e
        \ifurefurlonlylink
Packit 33f14e
          % PDF plus option to not display url, show just arg
Packit 33f14e
          \unhbox0             
Packit 33f14e
        \else
Packit 33f14e
          % PDF, normally display both arg and url for consistency,
Packit 33f14e
          % visibility, if the pdf is eventually used to print, etc.
Packit 33f14e
          \unhbox0\ (\urefcode{#1})%
Packit 33f14e
        \fi
Packit 33f14e
      \else
Packit 33f14e
        \ifx\XeTeXrevision\thisisundefined
Packit 33f14e
          \unhbox0\ (\urefcode{#1})% DVI, always show arg and url
Packit 33f14e
        \else
Packit 33f14e
          % For XeTeX
Packit 33f14e
          \ifurefurlonlylink
Packit 33f14e
            % PDF plus option to not display url, show just arg
Packit 33f14e
            \unhbox0             
Packit 33f14e
          \else
Packit 33f14e
            % PDF, normally display both arg and url for consistency,
Packit 33f14e
            % visibility, if the pdf is eventually used to print, etc.
Packit 33f14e
            \unhbox0\ (\urefcode{#1})%
Packit 33f14e
          \fi
Packit 33f14e
        \fi
Packit 33f14e
      \fi
Packit 33f14e
    \else
Packit 33f14e
      \urefcode{#1}% only url given, so show it
Packit 33f14e
    \fi
Packit 33f14e
  \fi
Packit 33f14e
  \endlink
Packit 33f14e
\endgroup}
Packit 33f14e
Packit 33f14e
% Allow line breaks around only a few characters (only).
Packit 33f14e
\def\urefcatcodes{%
Packit 33f14e
  \catcode`\&=\active \catcode`\.=\active
Packit 33f14e
  \catcode`\#=\active \catcode`\?=\active
Packit 33f14e
  \catcode`\/=\active
Packit 33f14e
}
Packit 33f14e
{
Packit 33f14e
  \urefcatcodes
Packit 33f14e
  %
Packit 33f14e
  \global\def\urefcode{\begingroup
Packit 33f14e
    \setupmarkupstyle{code}%
Packit 33f14e
    \urefcatcodes
Packit 33f14e
    \let&\urefcodeamp
Packit 33f14e
    \let.\urefcodedot
Packit 33f14e
    \let#\urefcodehash
Packit 33f14e
    \let?\urefcodequest
Packit 33f14e
    \let/\urefcodeslash
Packit 33f14e
    \codex
Packit 33f14e
  }
Packit 33f14e
  %
Packit 33f14e
  % By default, they are just regular characters.
Packit 33f14e
  \global\def&{\normalamp}
Packit 33f14e
  \global\def.{\normaldot}
Packit 33f14e
  \global\def#{\normalhash}
Packit 33f14e
  \global\def?{\normalquest}
Packit 33f14e
  \global\def/{\normalslash}
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% we put a little stretch before and after the breakable chars, to help
Packit 33f14e
% line breaking of long url's.  The unequal skips make look better in
Packit 33f14e
% cmtt at least, especially for dots.
Packit 33f14e
\def\urefprestretchamount{.13em}
Packit 33f14e
\def\urefpoststretchamount{.1em}
Packit 33f14e
\def\urefprestretch{\urefprebreak \hskip0pt plus\urefprestretchamount\relax}
Packit 33f14e
\def\urefpoststretch{\urefpostbreak \hskip0pt plus\urefprestretchamount\relax}
Packit 33f14e
%
Packit 33f14e
\def\urefcodeamp{\urefprestretch \&\urefpoststretch}
Packit 33f14e
\def\urefcodedot{\urefprestretch .\urefpoststretch}
Packit 33f14e
\def\urefcodehash{\urefprestretch \#\urefpoststretch}
Packit 33f14e
\def\urefcodequest{\urefprestretch ?\urefpoststretch}
Packit 33f14e
\def\urefcodeslash{\futurelet\next\urefcodeslashfinish}
Packit 33f14e
{
Packit 33f14e
  \catcode`\/=\active
Packit 33f14e
  \global\def\urefcodeslashfinish{%
Packit 33f14e
    \urefprestretch \slashChar
Packit 33f14e
    % Allow line break only after the final / in a sequence of
Packit 33f14e
    % slashes, to avoid line break between the slashes in http://.
Packit 33f14e
    \ifx\next/\else \urefpoststretch \fi
Packit 33f14e
  }
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% One more complication: by default we'll break after the special
Packit 33f14e
% characters, but some people like to break before the special chars, so
Packit 33f14e
% allow that.  Also allow no breaking at all, for manual control.
Packit 33f14e
% 
Packit 33f14e
\parseargdef\urefbreakstyle{%
Packit 33f14e
  \def\txiarg{#1}%
Packit 33f14e
  \ifx\txiarg\wordnone
Packit 33f14e
    \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak}
Packit 33f14e
  \else\ifx\txiarg\wordbefore
Packit 33f14e
    \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak}
Packit 33f14e
  \else\ifx\txiarg\wordafter
Packit 33f14e
    \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak}
Packit 33f14e
  \else
Packit 33f14e
    \errhelp = \EMsimple
Packit 33f14e
    \errmessage{Unknown @urefbreakstyle setting `\txiarg'}%
Packit 33f14e
  \fi\fi\fi
Packit 33f14e
}
Packit 33f14e
\def\wordafter{after}
Packit 33f14e
\def\wordbefore{before}
Packit 33f14e
\def\wordnone{none}
Packit 33f14e
Packit 33f14e
\urefbreakstyle after
Packit 33f14e
Packit 33f14e
% @url synonym for @uref, since that's how everyone uses it.
Packit 33f14e
%
Packit 33f14e
\let\url=\uref
Packit 33f14e
Packit 33f14e
% rms does not like angle brackets --karl, 17may97.
Packit 33f14e
% So now @email is just like @uref, unless we are pdf.
Packit 33f14e
%
Packit 33f14e
%\def\email#1{\angleleft{\tt #1}\angleright}
Packit 33f14e
\ifpdf
Packit 33f14e
  \def\email#1{\doemail#1,,\finish}
Packit 33f14e
  \def\doemail#1,#2,#3\finish{\begingroup
Packit 33f14e
    \unsepspaces
Packit 33f14e
    \pdfurl{mailto:#1}%
Packit 33f14e
    \setbox0 = \hbox{\ignorespaces #2}%
Packit 33f14e
    \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
Packit 33f14e
    \endlink
Packit 33f14e
  \endgroup}
Packit 33f14e
\else
Packit 33f14e
  \ifx\XeTeXrevision\thisisundefined
Packit 33f14e
    \let\email=\uref
Packit 33f14e
  \else
Packit 33f14e
    \def\email#1{\doemail#1,,\finish}
Packit 33f14e
    \def\doemail#1,#2,#3\finish{\begingroup
Packit 33f14e
      \unsepspaces
Packit 33f14e
      \pdfurl{mailto:#1}%
Packit 33f14e
      \setbox0 = \hbox{\ignorespaces #2}%
Packit 33f14e
      \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
Packit 33f14e
      \endlink
Packit 33f14e
    \endgroup}
Packit 33f14e
  \fi
Packit 33f14e
\fi
Packit 33f14e
Packit 33f14e
% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
Packit 33f14e
%   `example' (@kbd uses ttsl only inside of @example and friends),
Packit 33f14e
%   or `code' (@kbd uses normal tty font always).
Packit 33f14e
\parseargdef\kbdinputstyle{%
Packit 33f14e
  \def\txiarg{#1}%
Packit 33f14e
  \ifx\txiarg\worddistinct
Packit 33f14e
    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
Packit 33f14e
  \else\ifx\txiarg\wordexample
Packit 33f14e
    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
Packit 33f14e
  \else\ifx\txiarg\wordcode
Packit 33f14e
    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
Packit 33f14e
  \else
Packit 33f14e
    \errhelp = \EMsimple
Packit 33f14e
    \errmessage{Unknown @kbdinputstyle setting `\txiarg'}%
Packit 33f14e
  \fi\fi\fi
Packit 33f14e
}
Packit 33f14e
\def\worddistinct{distinct}
Packit 33f14e
\def\wordexample{example}
Packit 33f14e
\def\wordcode{code}
Packit 33f14e
Packit 33f14e
% Default is `distinct'.
Packit 33f14e
\kbdinputstyle distinct
Packit 33f14e
Packit 33f14e
% @kbd is like @code, except that if the argument is just one @key command,
Packit 33f14e
% then @kbd has no effect.
Packit 33f14e
\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}}
Packit 33f14e
Packit 33f14e
\def\xkey{\key}
Packit 33f14e
\def\kbdsub#1#2#3\par{%
Packit 33f14e
  \def\one{#1}\def\three{#3}\def\threex{??}%
Packit 33f14e
  \ifx\one\xkey\ifx\threex\three \key{#2}%
Packit 33f14e
  \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
Packit 33f14e
  \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% definition of @key that produces a lozenge.  Doesn't adjust to text size.
Packit 33f14e
%\setfont\keyrm\rmshape{8}{1000}{OT1}
Packit 33f14e
%\font\keysy=cmsy9
Packit 33f14e
%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
Packit 33f14e
%  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
Packit 33f14e
%    \vbox{\hrule\kern-0.4pt
Packit 33f14e
%     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
Packit 33f14e
%    \kern-0.4pt\hrule}%
Packit 33f14e
%  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
Packit 33f14e
Packit 33f14e
% definition of @key with no lozenge.  If the current font is already
Packit 33f14e
% monospace, don't change it; that way, we respect @kbdinputstyle.  But
Packit 33f14e
% if it isn't monospace, then use \tt.
Packit 33f14e
%
Packit 33f14e
\def\key#1{{\setupmarkupstyle{key}%
Packit 33f14e
  \nohyphenation
Packit 33f14e
  \ifmonospace\else\tt\fi
Packit 33f14e
  #1}\null}
Packit 33f14e
Packit 33f14e
% @clicksequence{File @click{} Open ...}
Packit 33f14e
\def\clicksequence#1{\begingroup #1\endgroup}
Packit 33f14e
Packit 33f14e
% @clickstyle @arrow   (by default)
Packit 33f14e
\parseargdef\clickstyle{\def\click{#1}}
Packit 33f14e
\def\click{\arrow}
Packit 33f14e
Packit 33f14e
% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
Packit 33f14e
% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
Packit 33f14e
%
Packit 33f14e
\def\dmn#1{\thinspace #1}
Packit 33f14e
Packit 33f14e
% @acronym for "FBI", "NATO", and the like.
Packit 33f14e
% We print this one point size smaller, since it's intended for
Packit 33f14e
% all-uppercase.
Packit 33f14e
%
Packit 33f14e
\def\acronym#1{\doacronym #1,,\finish}
Packit 33f14e
\def\doacronym#1,#2,#3\finish{%
Packit 33f14e
  {\switchtolsize #1}%
Packit 33f14e
  \def\temp{#2}%
Packit 33f14e
  \ifx\temp\empty \else
Packit 33f14e
    \space ({\unsepspaces \ignorespaces \temp \unskip})%
Packit 33f14e
  \fi
Packit 33f14e
  \null % reset \spacefactor=1000
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% @abbr for "Comput. J." and the like.
Packit 33f14e
% No font change, but don't do end-of-sentence spacing.
Packit 33f14e
%
Packit 33f14e
\def\abbr#1{\doabbr #1,,\finish}
Packit 33f14e
\def\doabbr#1,#2,#3\finish{%
Packit 33f14e
  {\plainfrenchspacing #1}%
Packit 33f14e
  \def\temp{#2}%
Packit 33f14e
  \ifx\temp\empty \else
Packit 33f14e
    \space ({\unsepspaces \ignorespaces \temp \unskip})%
Packit 33f14e
  \fi
Packit 33f14e
  \null % reset \spacefactor=1000
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% @asis just yields its argument.  Used with @table, for example.
Packit 33f14e
%
Packit 33f14e
\def\asis#1{#1}
Packit 33f14e
Packit 33f14e
% @math outputs its argument in math mode.
Packit 33f14e
%
Packit 33f14e
% One complication: _ usually means subscripts, but it could also mean
Packit 33f14e
% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
Packit 33f14e
% _ active, and distinguish by seeing if the current family is \slfam,
Packit 33f14e
% which is what @var uses.
Packit 33f14e
{
Packit 33f14e
  \catcode`\_ = \active
Packit 33f14e
  \gdef\mathunderscore{%
Packit 33f14e
    \catcode`\_=\active
Packit 33f14e
    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
Packit 33f14e
  }
Packit 33f14e
}
Packit 33f14e
% Another complication: we want \\ (and @\) to output a math (or tt) \.
Packit 33f14e
% FYI, plain.tex uses \\ as a temporary control sequence (for no
Packit 33f14e
% particular reason), but this is not advertised and we don't care.
Packit 33f14e
%
Packit 33f14e
% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
Packit 33f14e
\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
Packit 33f14e
%
Packit 33f14e
\def\math{%
Packit 33f14e
  \ifmmode\else % only go into math if not in math mode already
Packit 33f14e
    \tex
Packit 33f14e
    \mathunderscore
Packit 33f14e
    \let\\ = \mathbackslash
Packit 33f14e
    \mathactive
Packit 33f14e
    % make the texinfo accent commands work in math mode
Packit 33f14e
    \let\"=\ddot
Packit 33f14e
    \let\'=\acute
Packit 33f14e
    \let\==\bar
Packit 33f14e
    \let\^=\hat
Packit 33f14e
    \let\`=\grave
Packit 33f14e
    \let\u=\breve
Packit 33f14e
    \let\v=\check
Packit 33f14e
    \let\~=\tilde
Packit 33f14e
    \let\dotaccent=\dot
Packit 33f14e
    % have to provide another name for sup operator
Packit 33f14e
    \let\mathopsup=\sup
Packit 33f14e
  $\expandafter\finishmath\fi
Packit 33f14e
}
Packit 33f14e
\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
Packit 33f14e
Packit 33f14e
% Some active characters (such as <) are spaced differently in math.
Packit 33f14e
% We have to reset their definitions in case the @math was an argument
Packit 33f14e
% to a command which sets the catcodes (such as @item or @section).
Packit 33f14e
%
Packit 33f14e
{
Packit 33f14e
  \catcode`^ = \active
Packit 33f14e
  \catcode`< = \active
Packit 33f14e
  \catcode`> = \active
Packit 33f14e
  \catcode`+ = \active
Packit 33f14e
  \catcode`' = \active
Packit 33f14e
  \gdef\mathactive{%
Packit 33f14e
    \let^ = \ptexhat
Packit 33f14e
    \let< = \ptexless
Packit 33f14e
    \let> = \ptexgtr
Packit 33f14e
    \let+ = \ptexplus
Packit 33f14e
    \let' = \ptexquoteright
Packit 33f14e
  }
Packit 33f14e
}
Packit 33f14e
Packit 33f14e
% for @sub and @sup, if in math mode, just do a normal sub/superscript.
Packit 33f14e
% If in text, use math to place as sub/superscript, but switch
Packit 33f14e
% into text mode, with smaller fonts.  This is a different font than the
Packit 33f14e
% one used for real math sub/superscripts (8pt vs. 7pt), but let's not
Packit 33f14e
% fix it (significant additions to font machinery) until someone notices.
Packit 33f14e
%
Packit 33f14e
\def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi}
Packit 33f14e
\def\finishsub#1{$\sb{\hbox{\switchtolllsize #1}}$}%
Packit 33f14e
%