|
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 |
%
|
|