diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-11 23:51:04 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-11 23:51:04 +0000 |
commit | bf7e5eda82d5177d838d28170dce0f539f5e1687 (patch) | |
tree | 2cd920ffe6994cdaab8d37b5b0a59df9a5111822 /Master/texmf-dist/source/latex | |
parent | 83bcc02ee855f0bf515d44433547956d38805bf0 (diff) |
trunk/Master/texmf-dist/source/latex/base
git-svn-id: svn://tug.org/texlive/trunk@151 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex')
91 files changed, 72038 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/base/Makefile.unx b/Master/texmf-dist/source/latex/base/Makefile.unx new file mode 100644 index 00000000000..414293e93b0 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/Makefile.unx @@ -0,0 +1,56 @@ + +######################################################################## +# Start of customization section +######################################################################## + +# The directory where all runtime files reside +DESTDIR= + +# The directory where the format files reside +FORMATDIR= + +######### Edit the following only if you want to move *.fd or *.ist +######### to a different place. + +# The directory where the .fd files reside: +FDDIR=$(DESTDIR) + +# The directory where class and package files reside: +INPUTDIR=$(DESTDIR) + +# The directory where the makeindex style files reside +ISTDIR=$(DESTDIR) + +######################################################################## +# End of customization section +######################################################################## + +FORMAT=latex + + +default: + @if test ! "${DESTDIR}" -o ! "$(FORMATDIR)" ; then \ + echo "Destination directories not set." ; \ + echo "Please edit the Makefile first!" ; \ + exit 1 ; \ + else \ + make format ; \ + fi + + +format: $(FORMAT).fmt + +$(FORMAT).fmt: $(FORMAT).ltx + initex $(FORMAT).ltx + + +install: $(FORMAT).fmt + cp -i $(FORMAT).fmt $(FORMATDIR) + cp -i *.fd $(FDDIR) + cp -i *.cls *.clo *.sty *.def *.tex $(INPUTDIR) + cp -i *.ist $(ISTDIR) + +clean: + rm $(FORMAT).fmt + rm *.dvi *.log *.aux *.glo *.idx *.ind *.gls *.lof *.lot *.toc + diff --git a/Master/texmf-dist/source/latex/base/alltt.dtx b/Master/texmf-dist/source/latex/base/alltt.dtx new file mode 100644 index 00000000000..9b546ca9d82 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/alltt.dtx @@ -0,0 +1,213 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \CheckSum{108} +% \iffalse +%% +%% File `alltt.dtx'. +%% Copyright (C) 1987 by Leslie Lamport +%% Copyright (C) 1994--1997 LaTeX3 project, Johannes Braams +%% all rights reserved. +%% +%<*dtx> +\ProvidesFile{alltt.dtx} +%</dtx> +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{alltt} +%<driver>\ProvidesFile{alltt.drv} +%\ProvidesFile{alltt.dtx} + [1997/06/16 v2.0g defines alltt environment] +% +%<*driver> +\documentclass{ltxdoc} +\begin{document} +\providecommand{\Lenv}[1]{\textsf{#1}} +\providecommand{\pkg}[1]{\texttt{#1}} +\providecommand{\file}[1]{\texttt{#1}} +\DocInput{alltt.dtx} +\end{document} +%</driver> +% \fi +% +% \changes{v2.0g}{1997/06/16}{A few documentation fixes (PR 2520)} +% \changes{v2.0d}{1995/04/02}{A few documentation fixes (PR 1517)} +% +% \GetFileInfo{alltt.dtx} +% \title{The \texttt{alltt} environment\thanks{This file +% has version number \fileversion, last +% revised \filedate.}} +% \author{Johannes Braams} +% \date{\filedate} +% \maketitle +% +% \begin{abstract} +% This package defines the \Lenv{alltt} environment, which is like +% the \Lenv{verbatim} environment except that |\|, |{|, and |}| +% have their usual meanings. +% +% Thus, other commands and environments can appear within an +% \Lenv{alltt} environment. +% \end{abstract} +% +% \section{Introduction} +% +% \DescribeEnv{alltt} +% Here are some things you may want to do in an \Lenv{alltt} +% environment: +% \begin{itemize} +% \item Change fonts--e.g., by typing |{\em emphasized text\/}| +% +% \item Insert text from a file \file{foo.tex} by typing +% |\input{foo}|. Beware that each |<return>| starts a new line, so +% if \file{foo.tex} ends with a |<return>| you can wind up with an +% extra blank line if you're not careful. +% +% \item Insert a math formula. Note that |$| just produces a dollar +% sign, so you'll have to type |\(...\)| or |\[...\]|. Also, |^| +% and |_| just produce their characters; use |\sp| or |\sb| for +% super- and subscripts, as in |\(x\sp{2}\)|. +% \end{itemize} +% +% \StopEventually{} +% +% \section{The Implementation} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% \begin{environment}{alltt} +% The \Lenv{alltt} environment is similar to the \Lenv{verbatim} +% environment, except that |\|, |{| and |}| have their usual +% behaviour. +% \changes{v2.0b}{1994/10/29}{Added a missing \cs{dospecials}} +% \changes{v2.0c}{1995/01/27}{Reset \cs{dospecials} after its changed +% version is executed} +% \changes{v2.0e}{1995/05/13}{brought definition up to date with the +% verbatim environment} +% \changes{v2.0e}{1995/05/13}{Save and restore (in math mode) the +% definition of the \texttt{'} character} +% \begin{macrocode} +\begingroup +\lccode`\~=`\' +\lowercase{\endgroup +\newenvironment{alltt}{% + \trivlist + \item\relax + \if@minipage + \else + \vskip\parskip + \fi + \leftskip\@totalleftmargin + \rightskip\z@skip + \parindent\z@ + \parfillskip\@flushglue + \parskip\z@skip + \@@par + \@tempswafalse + \def\par{% + \if@tempswa + \leavevmode\null\@@par\penalty\interlinepenalty + \else + \@tempswatrue + \ifhmode\@@par\penalty\interlinepenalty\fi + \fi} + \obeylines + \verbatim@font + \let\org@prime~% + \@noligs +% \end{macrocode} +% \changes{v2.0f}{1995/07/24}{Added setting of the \cs{catcode} of the +% \texttt{'} character} +% \begin{macrocode} + \everymath\expandafter{\the\everymath + \catcode`\'=12 \let~\org@prime} + \everydisplay\expandafter{\the\everydisplay + \catcode`\'=12 \let~\org@prime} + \let\org@dospecials\dospecials + \g@remfrom@specials{\\} + \g@remfrom@specials{\{} + \g@remfrom@specials{\}} + \let\do\@makeother + \dospecials + \let\dospecials\org@dospecials + \frenchspacing\@vobeyspaces + \everypar \expandafter{\the\everypar \unpenalty}} +{\endtrivlist}} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\g@remfrom@specials} +% In the old implementation of the \pkg{alltt} package a fixed +% |\dospecials| was used. However nowadays the |\dospecials| +% command might contain more special characters at run-time then as +% was defined in the format. Therefore we remove the necessary +% special character from |\dospecials| at the start of the +% \Lenv{alltt} environment. For this we need a macro. Remember that +% the list of special characters in |\dospecials| contains the +% control sequence |\do| between the characters. We use that to +% check whether a character has to be removed. +% +% The macro |\g@remfrom@specials| takes one argument, the chracter +% to be removed from the list. +% \begin{macrocode} +\def\g@remfrom@specials#1{% +% \end{macrocode} +% We build up a new list in |\@new@speicals|. +% \begin{macrocode} + \def\@new@specials{} +% \end{macrocode} +% The command |\@remove| compares its argument with the argument of\\ +% |\g@remfrom@specials|. +% \begin{macrocode} + \def\@remove##1{% + \ifx##1#1\else +% \end{macrocode} +% When they are not the same the argument of |\@remove| is added +% (together with |\do|) to the new list. +% \begin{macrocode} + \g@addto@macro\@new@specials{\do ##1}\fi} +% \end{macrocode} +% Now we |\let| |\do| be equal to |\@remove| and execute +% |\dospecials|. +% \begin{macrocode} + \let\do\@remove\dospecials +% \end{macrocode} +% All that's left is to make |\dospecials| point to the new list. +% \begin{macrocode} + \let\dospecials\@new@specials + } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</package> +% \end{macrocode} +% +% \Finale +\endinput diff --git a/Master/texmf-dist/source/latex/base/alltt.ins b/Master/texmf-dist/source/latex/base/alltt.ins new file mode 100644 index 00000000000..eceb19c9c86 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/alltt.ins @@ -0,0 +1,79 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\generateFile{alltt.sty}{t}{% + \from{alltt.dtx}{package}} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/autoload.ins b/Master/texmf-dist/source/latex/base/autoload.ins new file mode 100644 index 00000000000..62da1132621 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/autoload.ins @@ -0,0 +1,148 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\keepsilent +\declarepreamble\mainpreamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble +\usepreamble\mainpreamble +\usedir{tex/latex/base} + +\generate{ + \file{latexa.ltx}{% + \from{ltdirchk.dtx}{initex,2ekernel,dircheck} + \from{ltplain.dtx}{autoload} + \from{ltvers.dtx}{2ekernel,autoload} + \from{ltdefns.dtx}{2ekernel,autoload} + \from{ltalloc.dtx}{2ekernel} + \from{ltcntrl.dtx}{2ekernel} + \from{lterror.dtx}{autoload} + \from{ltpar.dtx}{2ekernel} + \from{ltspace.dtx}{2ekernel} + \from{ltlogos.dtx}{2ekernel} + \from{ltfiles.dtx}{autoload} + \from{ltoutenc.dtx}{autoload} + \from{ltfssbas.dtx}{autoload} + \from{ltfsstrc.dtx}{autoload} + \from{ltfsscmp.dtx}{compat,2ekernel} + \from{ltfssdcl.dtx}{autoload} + \from{ltfssini.dtx}{compat} + \from{ltfntcmd.dtx}{2ekernel} + \from{ltcounts.dtx}{2ekernel} + \from{ltpageno.dtx}{2ekernel} + \from{ltxref.dtx}{2ekernel} + \from{ltlength.dtx}{2ekernel} + \from{ltmiscen.dtx}{2ekernel} + \from{ltmath.dtx}{2ekernel} + \from{ltlists.dtx}{2ekernel} + \from{ltboxes.dtx}{2ekernel} + \from{lttab.dtx}{autoload} + \from{ltpictur.dtx}{autoload} + \from{ltthm.dtx}{2ekernel} + \from{ltsect.dtx}{2ekernel} + \from{ltfloat.dtx}{2ekernel} + \from{ltidxglo.dtx}{2ekernel} + \from{ltbibl.dtx}{2ekernel} + \from{ltpage.dtx}{2ekernel} + \from{ltoutput.dtx}{autoload} + \from{ltclass.dtx}{2ekernel} + \from{ltfinal.dtx}{2ekernel}} + \file{autopict.sty}{% + \from{ltpictur.dtx}{def}} + \file{autotabg.sty}{% + \from{lttab.dtx}{def}} + \file{autoerr.sty}{% + \from{ltplain.dtx}{autoerr} + \from{lterror.dtx}{def} + \from{ltfiles.dtx}{autoerr} + \from{ltoutenc.dtx}{autoerr} + \from{ltfssbas.dtx}{autoerr} + \from{ltfssdcl.dtx}{autoerr}} + \file{autofss1.sty}{% + \from{ltfssbas.dtx}{def1} + \from{ltfsstrc.dtx}{def1}} +% This one is disabled at present. +% \file{autofss2.sty}}{% +% \from{ltfssbas.dtx}{def2} +% \from{ltfsstrc.dtx}{def2}} + \file{autoout1.sty}{% + \from{ltoutput.dtx}{def1}} +} + + +\Msg{} +\Msg{***********************************} +\Msg{*} +\Msg{* Now run INITEX on latexa.ltx} +\Msg{* to generate the auto-load version} +\Msg{* of LaTeX.} +\Msg{*} +\Msg{***********************************} +\Msg{} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/classes.dtx b/Master/texmf-dist/source/latex/base/classes.dtx new file mode 100644 index 00000000000..498bed48e0b --- /dev/null +++ b/Master/texmf-dist/source/latex/base/classes.dtx @@ -0,0 +1,4452 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \CheckSum{2976} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \iffalse +% \section{Identification} +% +% These document classes can only be used with \LaTeXe, so we make +% sure that an appropriate message is displayed when another \TeX{} +% format is used. +% \changes{v1.3p}{1995/11/30}{Added date of \LaTeX\ format to argument +% of \cs{NeedsTeXFormat}} +% \begin{macrocode} +%<article|report|book>\NeedsTeXFormat{LaTeX2e}[1995/12/01] +% \end{macrocode} +% +% Announce the Class name and its version: +% \begin{macrocode} +%<article>\ProvidesClass{article} +%<report>\ProvidesClass{report} +%<book>\ProvidesClass{book} +%<10pt&!bk>\ProvidesFile{size10.clo} +%<11pt&!bk>\ProvidesFile{size11.clo} +%<12pt&!bk>\ProvidesFile{size12.clo} +%<10pt&bk>\ProvidesFile{bk10.clo} +%<11pt&bk>\ProvidesFile{bk11.clo} +%<12pt&bk>\ProvidesFile{bk12.clo} +%<*driver> +\ProvidesFile{classes.drv} +%</driver> + [2004/02/16 v1.4f +%<article|report|book> Standard LaTeX document class] +%<10pt|11pt|12pt> Standard LaTeX file (size option)] +% \end{macrocode} +% +% \section{A driver for this document} +% +% The next bit of code contains the documentation driver file for +% \TeX{}, i.e., the file that will produce the documentation you are +% currently reading. It will be extracted from this file by the +% {\sc docstrip} program. +% +% \changes{1.0f}{1993/12/07}{Use class ltxdoc document class} +% \changes{1.0r}{1994/02/28}{Moved driver code in order not to need a +% separate driver} +% \begin{macrocode} +%<*driver> +] +\documentclass{ltxdoc} +% \end{macrocode} +% +% We don't want everything to appear in the index +% \begin{macrocode} +\DoNotIndex{\',\.,\@M,\@@input,\@Alph,\@alph,\@addtoreset,\@arabic} +\DoNotIndex{\@badmath,\@centercr,\@cite} +\DoNotIndex{\@dotsep,\@empty,\@float,\@gobble,\@gobbletwo,\@ignoretrue} +\DoNotIndex{\@input,\@ixpt,\@m,\@minus,\@mkboth} +\DoNotIndex{\@ne,\@nil,\@nomath,\@plus,\roman,\@set@topoint} +\DoNotIndex{\@tempboxa,\@tempcnta,\@tempdima,\@tempdimb} +\DoNotIndex{\@tempswafalse,\@tempswatrue,\@viipt,\@viiipt,\@vipt} +\DoNotIndex{\@vpt,\@warning,\@xiipt,\@xipt,\@xivpt,\@xpt,\@xviipt} +\DoNotIndex{\@xxpt,\@xxvpt,\\,\ ,\addpenalty,\addtolength,\addvspace} +\DoNotIndex{\advance,\ast,\begin,\begingroup,\bfseries,\bgroup,\box} +\DoNotIndex{\bullet} +\DoNotIndex{\cdot,\cite,\CodelineIndex,\cr,\day,\DeclareOption} +\DoNotIndex{\def,\DisableCrossrefs,\divide,\DocInput,\documentclass} +\DoNotIndex{\DoNotIndex,\egroup,\ifdim,\else,\fi,\em,\endtrivlist} +\DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup} +\DoNotIndex{\endlist,\everycr,\everypar,\ExecuteOptions,\expandafter} +\DoNotIndex{\fbox} +\DoNotIndex{\filedate,\filename,\fileversion,\fontsize,\framebox,\gdef} +\DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule} +\DoNotIndex{\hsize,\hskip,\hspace,\hss,\if@tempswa,\ifcase,\or,\fi,\fi} +\DoNotIndex{\ifhmode,\ifvmode,\ifnum,\iftrue,\ifx,\fi,\fi,\fi,\fi,\fi} +\DoNotIndex{\input} +\DoNotIndex{\jobname,\kern,\leavevmode,\let,\leftmark} +\DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark,\markboth,\markright} +\DoNotIndex{\month,\newcommand,\newcounter,\newenvironment} +\DoNotIndex{\NeedsTeXFormat,\newdimen} +\DoNotIndex{\newlength,\newpage,\nobreak,\noindent,\null,\number} +\DoNotIndex{\numberline,\OldMakeindex,\OnlyDescription,\p@} +\DoNotIndex{\pagestyle,\par,\paragraph,\paragraphmark,\parfillskip} +\DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions} +\DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright} +\DoNotIndex{\refstepcounter,\relax,\renewcommand} +\DoNotIndex{\rightmargin,\rightmark,\rightskip,\rlap,\rmfamily} +\DoNotIndex{\secdef,\selectfont,\setbox,\setcounter,\setlength} +\DoNotIndex{\settowidth,\sfcode,\skip,\sloppy,\slshape,\space} +\DoNotIndex{\symbol,\the,\trivlist,\typeout,\tw@,\undefined,\uppercase} +\DoNotIndex{\usecounter,\usefont,\usepackage,\vfil,\vfill,\viiipt} +\DoNotIndex{\viipt,\vipt,\vskip,\vspace} +\DoNotIndex{\wd,\xiipt,\year,\z@} +% \end{macrocode} +% We do want an index, using linenumbers +% \begin{macrocode} +\EnableCrossrefs +% \end{macrocode} +% We use so many \file{docstrip} modules that we set the +% \texttt{StandardModuleDepth} counter to 1. +% \begin{macrocode} +\setcounter{StandardModuleDepth}{1} +% \end{macrocode} +% The following command retrieves the date and version information +% from the file. +% \begin{macrocode} +\GetFileInfo{classes.drv} +% \end{macrocode} +% Some commonly used abbreviations +% \changes{v1.2w}{1994/12/01}{Use \cs{newcommand*}} +% \begin{macrocode} +\newcommand*{\Lopt}[1]{\textsf {#1}} +\newcommand*{\file}[1]{\texttt {#1}} +\newcommand*{\Lcount}[1]{\textsl {\small#1}} +\newcommand*{\pstyle}[1]{\textsl {#1}} +% \end{macrocode} +% We also want the full details. +% \begin{macrocode} +\begin{document} +\DocInput{classes.dtx} +\PrintIndex +% ^^A\PrintChanges +\end{document} +%</driver> +% \end{macrocode} +% +% \fi +% +% \changes{v1.0d}{1993/11/30}{remove \cs{@in}, made option makeindex +% a synonym for option makeidx} +% \changes{v1.0d}{1993/11/30}{removed \cs{@minus}, \cs{@plus}, +% \cs{@settopoint}, \cs{@setfontsize}; they are now in the +% kernel} +% \changes{v1.0d}{1993/11/30}{Added use of \cs{NeedsTeXFormat}} +% \changes{v1.0d}{1993/11/30}{Replaced \cs{bf} with \cs{bfseries}; +% \cs{rm} with \cs{rmfamily}} +% \changes{v1.0d}{1993/11/30}{Made eqaution and eqnarray environments +% in the fleqn option up to date with latex.dtx} +% \changes{v1.0f}{1993/12/08}{Made all lines shorter than 72 characters} +% \changes{v1.0g}{1993/12/08}{Made change in eqnarray for the fleqn +% option, as suggested by Rainer.} +% \changes{v1.0h}{1993/12/18}{Made the definitions of the font- and +% size-changing commands use \cs{renew} rather than \cs{new}. +% Defined the float parameters with \cs{renewcommand} rather than +% \cs{newcommand}. Corrected some typos in the fleqn option. +% Replaced two occurrences of -\cs{@secpenalty} by +% \cs{@secpenalty}. ASAJ.} +% \changes{v1.0j}{1993/12/20}{Added \cs{ProvidesFile} to size files} +% \changes{v1.0j}{1993/12/10}{Use \cs{cmd} in change entries} +% \changes{v1.0k}{1994/01/09}{Removed some typos/bugs} +% \changes{v1.0l}{1994/01/11}{add the extension to the names of the +% files} +% \changes{v1.0l}{1994/01/10}{Changed version numbering; moved leqno +% and fleqn options to an external file.} +% \changes{v1.0n}{1994/01/19}{Removed code for makeidx option and made +% it a separate package; removed use of \cs{setlength} from list +% parameters.} +% \changes{v1.0o}{1994/01/31}{Small documention changes} +% \changes{v1.0q}{1994/02/16}{Small documention changes} +% \changes{v1.1a}{1994/03/12}{Removed \cs{typeout} messages} +% \changes{v1.1f}{1994/04/15}{Inserted forgotten line break} +% \changes{v1.2a}{1994/03/17}{Added openright option. (LL)} +% \changes{v1.2b}{1994/03/17}{Added the \ldots{}matter commands. (LL)} +% \changes{v1.2c}{1994/03/17}{Fixed page numbering in titlepage +% env. (LL)} +% \changes{v1.2d}{1994/04/11}{Checked the file for long lines and +% wrapped them when necessary; made a slight implementation +% modification to the openright and openany options.} +% \changes{v1.2i}{1994/04/28}{Use LaTeX instead of LaTeX2e in messages} +% \changes{v1.2j}{1994/05/01}{Removed the use of \cs{fileversion} +% c.s.} +% \changes{v1.2l}{1994/05/11}{changed some \cs{changes} entries} +% \changes{v1.2m}{1994/05/12}{Forgot a few entries} +% \changes{v1.2o}{1994/05/24}{Changed file information} +% \changes{v1.2p}{1994/05/27}{Moved identification and driver to the +% front of the file} +% \changes{v1.2t}{1994/06/22}{Refrased a few sentences to prevent +% overfull hboxes} +% \changes{v1.2v}{1994/12/01}{Made the oneside option work for the +% book class} +% \changes{v1.2w}{1994/12/01}{Use \cs{newcommand*} for commands with +% arguments} +% \changes{v1.2z}{1995/05/16}{Always use \cs{cs} in \cs{changes} +% entries} +% \changes{v1.3a}{1995/05/17}{Replaced all \cs{hbox to} by \cs{hb@xt@}} +% \changes{v1.3d}{1995/06/05}{Replaced all \cs{uppercase} by +% \cs{MakeUppercase}} +% \changes{v1.3l}{1995/10/20}{Disabled in compatibility mode all +% options that are new in \LaTeXe.} +% \changes{v1.3v}{1997/06/16}{Documentation fixes.} +% +% +% \title{Standard Document Classes for \LaTeX{} version 2e\thanks{This +% file has version number \fileversion, last revised \filedate.}} +% +% \author{% +% Copyright (C) 1992 by Leslie Lamport \and +% Copyright (C) 1994-97 by Frank Mittelbach \and Johannes Braams +% } +% \date{\filedate} +% \maketitle +% \tableofcontents +% +% \StopEventually{} ^^A +% +% \section{The {\sc docstrip} modules} +% +% The following modules are used in the implementation to direct +% {\sc docstrip} in generating the external files: +% \begin{center} +% \begin{tabular}{ll} +% article & produce the documentclass article\\ +% report & produce the documentclass report\\ +% size10 & produce the class option for 10pt\\ +% size11 & produce the class option for 11pt\\ +% size12 & produce the class option for 12pt\\ +% book & produce the documentclass book\\ +% bk10 & produce the book class option for 10pt\\ +% bk11 & produce the book class option for 11pt\\ +% bk12 & produce the book class option for 12pt\\ +% driver & produce a documentation driver file \\ +% \end{tabular} +% \end{center} +% +% \section{Initial Code} +% +% In this part we define a few commands that are used later on. +% +% \begin{macro}{\@ptsize} +% This control sequence is used to store the second digit of the +% pointsize we are typesetting in. So, normally, it's value is one +% of 0, 1 or 2. +% \begin{macrocode} +%<*article|report|book> +\newcommand\@ptsize{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@restonecol} +% When the document has to printed in two columns, we sometimes +% have to temporarily switch to one column. This switch is used to +% remember to switch back. +% \begin{macrocode} +\newif\if@restonecol +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@titlepage} +% A switch to indicate if a titlepage has to be produced. For the +% article document class the default is not to make a separate +% titlepage. +% \begin{macrocode} +\newif\if@titlepage +%<article>\@titlepagefalse +%<!article>\@titlepagetrue +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@openright} +% A switch to indicate if chapters must start on a right-hand page. +% The default for the report class is no; for the book class it's +% yes. +% \begin{macrocode} +%<!article>\newif\if@openright +% \end{macrocode} +% \end{macro} +% +% \changes{v1.3k}{1995/08/27}{Macro \cs{if@openbib} removed} +% +% \begin{macro}{\if@mainmatter} +% \changes{v1.2v}{1994/12/01}{Moved the allocation of +% \cs{if@mainmatter} here} +% +% The switch |\if@mainmatter|, only available in the document class +% book, indicates whether we are processing the main material in +% the book. +% \begin{macrocode} +%<book>\newif\if@mainmatter \@mainmattertrue +% \end{macrocode} +% \end{macro} +% +% \section{Declaration of Options} +% +% +% \subsection{Setting Paper Sizes} +% +% The variables |\paperwidth| and |\paperheight| should reflect the +% physical paper size after trimming. For desk printer output this +% is usually the real paper size since there is no post-processing. +% Classes for real book production will probably add other paper +% sizes and additionally the production of crop marks for trimming. +% In compatibility mode, these (and some of the subsequent) options +% are disabled, as they were not present in \LaTeX 2.09. +% \changes{v1.0g}{1993/12/09}{Removed typo, A4 is not 279 mm high} +% \begin{macrocode} +\if@compatibility\else +\DeclareOption{a4paper} + {\setlength\paperheight {297mm}% + \setlength\paperwidth {210mm}} +\DeclareOption{a5paper} + {\setlength\paperheight {210mm}% + \setlength\paperwidth {148mm}} +\DeclareOption{b5paper} + {\setlength\paperheight {250mm}% + \setlength\paperwidth {176mm}} +\DeclareOption{letterpaper} + {\setlength\paperheight {11in}% + \setlength\paperwidth {8.5in}} +\DeclareOption{legalpaper} + {\setlength\paperheight {14in}% + \setlength\paperwidth {8.5in}} +\DeclareOption{executivepaper} + {\setlength\paperheight {10.5in}% + \setlength\paperwidth {7.25in}} +% \end{macrocode} +% +% The option \Lopt{landscape} switches the values of |\paperheight| +% and |\paperwidth|, assuming the dimensions were given for portrait +% paper. +% \begin{macrocode} +\DeclareOption{landscape} + {\setlength\@tempdima {\paperheight}% + \setlength\paperheight {\paperwidth}% + \setlength\paperwidth {\@tempdima}} +\fi +% \end{macrocode} +% +% \subsection{Choosing the type size} +% +% The type size options are handled by defining |\@ptsize| to contain +% the last digit of the size in question and branching on |\ifcase| +% statements. This is done for historical reasons to stay compatible +% with other packages that use the |\@ptsize| variable to select +% special actions. It makes the declarations of size options less +% than 10pt difficult, although one can probably use \texttt{9} +% and \texttt{8} assuming that a class wont define both +% \Lopt{8pt} and \Lopt{18pt} options. +% +% \begin{macrocode} +\if@compatibility + \renewcommand\@ptsize{0} +\else +\DeclareOption{10pt}{\renewcommand\@ptsize{0}} +\fi +\DeclareOption{11pt}{\renewcommand\@ptsize{1}} +\DeclareOption{12pt}{\renewcommand\@ptsize{2}} +% \end{macrocode} +% +% +% \subsection{Two-side or one-side printing} +% +% For two-sided printing we use the switch |\if@twoside|. In +% addition we have to set the |\if@mparswitch| to get any margin +% paragraphs into the outside margin. +% \begin{macrocode} +\if@compatibility\else +\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse} +\fi +\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue} +% \end{macrocode} +% +% +% \subsection{Draft option} +% +% If the user requests \Lopt{draft} we show any overfull boxes. +% We could probably add some more interesting stuff to this option. +% \begin{macrocode} +\DeclareOption{draft}{\setlength\overfullrule{5pt}} +\if@compatibility\else +\DeclareOption{final}{\setlength\overfullrule{0pt}} +\fi +% \end{macrocode} +% +% \subsection{Titlepage option} +% An article usually has no separate titlepage, but the user can +% request one. +% \begin{macrocode} +\DeclareOption{titlepage}{\@titlepagetrue} +\if@compatibility\else +\DeclareOption{notitlepage}{\@titlepagefalse} +\fi +% \end{macrocode} +% +% \subsection{openright option} +% This option determines whether or not a chapter must start on +% a right-hand page +% request one. +% \begin{macrocode} +%<!article>\if@compatibility +%<book>\@openrighttrue +%<!article>\else +%<!article>\DeclareOption{openright}{\@openrighttrue} +%<!article>\DeclareOption{openany}{\@openrightfalse} +%<!article>\fi +% \end{macrocode} +% +% \subsection{Twocolumn printing} +% +% Two-column and one-column printing is again realized via a switch. +% \begin{macrocode} +\if@compatibility\else +\DeclareOption{onecolumn}{\@twocolumnfalse} +\fi +\DeclareOption{twocolumn}{\@twocolumntrue} +% \end{macrocode} +% +% \subsection{Equation numbering on the left} +% +% The option \Lopt{leqno} can be used to get the equation numbers +% on the left side of the equation. It loads code which is generated +% automatically from the kernel files when the format is built. +% If the equation number does get a special formatting then instead +% of using the kernel file the class would need to provide the code +% explicitly. +% \begin{macrocode} +\DeclareOption{leqno}{\input{leqno.clo}} +% \end{macrocode} +% +% \subsection{Flush left displays} +% +% The option \Lopt{fleqn} redefines the displayed math environments +% in such a way that they come out flush left, with an indentation +% of |\mathindent| from the prevailing left margin. It loads +% code which is generated +% automatically from the kernel files when the format is built. +% \changes{v1.0h}{1993/12/18}{Corrected some typos. ASAJ.} +% \begin{macrocode} +\DeclareOption{fleqn}{\input{fleqn.clo}} +% \end{macrocode} +% +% \subsection{Open bibliography} +% +% The option \Lopt{openbib} produces the ``open'' bibliography +% style, in which each block starts on a new line, and succeeding +% lines in a block are indented by |\bibindent|. +% \changes{v1.3k}{1995/08/27}{openbib option reimplemented} +% \begin{macrocode} +\DeclareOption{openbib}{% +% \end{macrocode} +% First some hook into the bibliography environment is filled. +% \begin{macrocode} + \AtEndOfPackage{% + \renewcommand\@openbib@code{% + \advance\leftmargin\bibindent + \itemindent -\bibindent + \listparindent \itemindent + \parsep \z@ + }% +% \end{macrocode} +% In addition the definition of |\newblock| is overwritten. +% \begin{macrocode} + \renewcommand\newblock{\par}}% +} +% \end{macrocode} +% +% +% \section{Executing Options} +% +% Here we execute the default options to initialize certain +% variables. Note that the document class `book' always uses two +% sided printing. +% \begin{macrocode} +%<*article> +\ExecuteOptions{letterpaper,10pt,oneside,onecolumn,final} +%</article> +%<*report> +\ExecuteOptions{letterpaper,10pt,oneside,onecolumn,final,openany} +%</report> +%<*book> +\ExecuteOptions{letterpaper,10pt,twoside,onecolumn,final,openright} +%</book> +% \end{macrocode} +% +% The |\ProcessOptions| command causes the execution of the code +% for every option \Lopt{FOO} +% which is declared and for which the user typed +% the \Lopt{FOO} option in his +% |\documentclass| command. For every option \Lopt{BAR} he typed, +% which is not declared, the option is assumed to be a global option. +% All options will be passed as document options to any +% |\usepackage| command in the document preamble. +% \begin{macrocode} +\ProcessOptions +% \end{macrocode} +% Now that all the options have been executed we can load the +% chosen class option file that contains all size dependent code. +% \begin{macrocode} +%<!book>\input{size1\@ptsize.clo} +%<book>\input{bk1\@ptsize.clo} +%</article|report|book> +% \end{macrocode} +% +% \section{Loading Packages} +% +% The standard class files do not load additional packages. +% +% +% \section{Document Layout} +% \label{sec:classes:maincode} +% +% In this section we are finally dealing with the nasty typographical +% details. +% +% \subsection{Fonts} +% +% \LaTeX\ offers the user commands to change the size of the font, +% relative to the `main' size. Each relative size changing command +% |\size| executes the command +% |\@setfontsize||\size|\meta{font-size}\meta{baselineskip} where: +% +% \begin{description} +% \item[\meta{font-size}] The absolute size of the font to use from +% now on. +% +% \item[\meta{baselineskip}] The normal value of |\baselineskip| +% for the size of the font selected. (The actual value will be +% |\baselinestretch| * \meta{baselineskip}.) +% \end{description} +% +% A number of commands, defined in the \LaTeX{} kernel, shorten the +% following definitions and are used throughout. They are: +% \begin{center} +% \begin{tabular}{ll@{\qquad}ll@{\qquad}ll} +% \verb=\@vpt= & 5 & \verb=\@vipt= & 6 & \verb=\@viipt= & 7 \\ +% \verb=\@viiipt= & 8 & \verb=\@ixpt= & 9 & \verb=\@xpt= & 10 \\ +% \verb=\@xipt= & 10.95 & \verb=\@xiipt= & 12 & \verb=\@xivpt= & 14.4\\ +% ... +% \end{tabular} +% \end{center} +% +% \begin{macro}{\normalsize} +% \begin{macro}{\@normalsize} +% \changes{v1.0o}{1994/01/31}{\cs{@normalsize} now defined in the +% kernel} +% +% The user level command for the main size is |\normalsize|. +% Internally \LaTeX{} uses |\@normalsize| when it refers to the +% main size. |\@normalsize| will be defined to work like +% |\normalsize| if the latter is redefined from its default +% definition (that just issues an error message). Otherwise +% |\@normalsize| simply selects a 10pt/12pt size. +% +% The |\normalsize| macro also sets new values for\\ +% |\abovedisplayskip|, |\abovedisplayshortskip| and +% |\belowdisplayshortskip|. +% +% \changes{v1.0e}{1993/12/07}{\cs{normalsize} doesn't exist, so use +% \cs{newcommand}} +% \changes{v1.0h}{1993/12/18}{\cs{normalsize} is now defined in the +% kernel, so use \cs{renewcommand}. ASAJ.} +% \begin{macrocode} +%<*10pt|11pt|12pt> +\renewcommand\normalsize{% +%<*10pt> + \@setfontsize\normalsize\@xpt\@xiipt + \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@ + \abovedisplayshortskip \z@ \@plus3\p@ + \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@ +%</10pt> +%<*11pt> + \@setfontsize\normalsize\@xipt{13.6}% + \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@ + \abovedisplayshortskip \z@ \@plus3\p@ + \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@ +%</11pt> +%<*12pt> + \@setfontsize\normalsize\@xiipt{14.5}% + \abovedisplayskip 12\p@ \@plus3\p@ \@minus7\p@ + \abovedisplayshortskip \z@ \@plus3\p@ + \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@ +%</12pt> +% \end{macrocode} +% The |\belowdisplayskip| is always equal to the +% |\abovedisplayskip|. The parameters of the first level list are +% always given by |\@listI|. +% \begin{macrocode} + \belowdisplayskip \abovedisplayskip + \let\@listi\@listI} +% \end{macrocode} +% +% We initially choose the normalsize font. +% \begin{macrocode} +\normalsize +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\small} +% This is similar to |\normalsize|. +% \changes{v1.0h}{1993/12/18}{\cs{small} is now defined in the kernel, +% so use \cs{renewcommand}. ASAJ.} +% \changes{v1.2e}{1994/04/14}{\cs{small} is no longer defined in the +% kernel; use \cs{newcommand}} +% \begin{macrocode} +\newcommand\small{% +%<*10pt> + \@setfontsize\small\@ixpt{11}% + \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus2\p@ + \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 4\p@ \@plus2\p@ \@minus2\p@ + \parsep 2\p@ \@plus\p@ \@minus\p@ + \itemsep \parsep}% +%</10pt> +%<*11pt> + \@setfontsize\small\@xpt\@xiipt + \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@ + \abovedisplayshortskip \z@ \@plus3\p@ + \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 6\p@ \@plus2\p@ \@minus2\p@ + \parsep 3\p@ \@plus2\p@ \@minus\p@ + \itemsep \parsep}% +%</11pt> +%<*12pt> + \@setfontsize\small\@xipt{13.6}% + \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@ + \abovedisplayshortskip \z@ \@plus3\p@ + \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 9\p@ \@plus3\p@ \@minus5\p@ + \parsep 4.5\p@ \@plus2\p@ \@minus\p@ + \itemsep \parsep}% +%</12pt> + \belowdisplayskip \abovedisplayskip +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\footnotesize} +% This is similar to |\normalsize|. +% \changes{v1.0h}{1993/12/18}{\cs{footnotesize} is now defined in the +% kernel, so use \cs{renewcommand}. ASAJ.} +% \changes{v1.2e}{1994/04/14}{use \cs{newcommand} again} +% \begin{macrocode} +\newcommand\footnotesize{% +%<*10pt> + \@setfontsize\footnotesize\@viiipt{9.5}% + \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus\p@ + \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 3\p@ \@plus\p@ \@minus\p@ + \parsep 2\p@ \@plus\p@ \@minus\p@ + \itemsep \parsep}% +%</10pt> +%<*11pt> + \@setfontsize\footnotesize\@ixpt{11}% + \abovedisplayskip 8\p@ \@plus2\p@ \@minus4\p@ + \abovedisplayshortskip \z@ \@plus\p@ + \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 4\p@ \@plus2\p@ \@minus2\p@ + \parsep 2\p@ \@plus\p@ \@minus\p@ + \itemsep \parsep}% +%</11pt> +%<*12pt> + \@setfontsize\footnotesize\@xpt\@xiipt + \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@ + \abovedisplayshortskip \z@ \@plus3\p@ + \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@ + \def\@listi{\leftmargin\leftmargini + \topsep 6\p@ \@plus2\p@ \@minus2\p@ + \parsep 3\p@ \@plus2\p@ \@minus\p@ + \itemsep \parsep}% +%</12pt> + \belowdisplayskip \abovedisplayskip +} +%</10pt|11pt|12pt> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\scriptsize} +% \begin{macro}{\tiny} +% \begin{macro}{\large} +% \begin{macro}{\Large} +% \begin{macro}{\LARGE} +% \begin{macro}{\huge} +% \begin{macro}{\Huge} +% These are all much simpler than the previous macros, they just +% select a new fontsize, but leave the parameters for displays and +% lists alone. +% \changes{v1.0h}{1993/12/18}{These are now defined in the kernel, +% so use \cs{renewcommand}. ASAJ.} +% \changes{v1.2e}{1994/04/14}{use \cs{newcommand} again} +% \begin{macrocode} +%<*10pt> +\newcommand\scriptsize{\@setfontsize\scriptsize\@viipt\@viiipt} +\newcommand\tiny{\@setfontsize\tiny\@vpt\@vipt} +\newcommand\large{\@setfontsize\large\@xiipt{14}} +\newcommand\Large{\@setfontsize\Large\@xivpt{18}} +\newcommand\LARGE{\@setfontsize\LARGE\@xviipt{22}} +\newcommand\huge{\@setfontsize\huge\@xxpt{25}} +\newcommand\Huge{\@setfontsize\Huge\@xxvpt{30}} +%</10pt> +%<*11pt> +\newcommand\scriptsize{\@setfontsize\scriptsize\@viiipt{9.5}} +\newcommand\tiny{\@setfontsize\tiny\@vipt\@viipt} +\newcommand\large{\@setfontsize\large\@xiipt{14}} +\newcommand\Large{\@setfontsize\Large\@xivpt{18}} +\newcommand\LARGE{\@setfontsize\LARGE\@xviipt{22}} +\newcommand\huge{\@setfontsize\huge\@xxpt{25}} +\newcommand\Huge{\@setfontsize\Huge\@xxvpt{30}} +%</11pt> +%<*12pt> +\newcommand\scriptsize{\@setfontsize\scriptsize\@viiipt{9.5}} +\newcommand\tiny{\@setfontsize\tiny\@vipt\@viipt} +\newcommand\large{\@setfontsize\large\@xivpt{18}} +\newcommand\Large{\@setfontsize\Large\@xviipt{22}} +\newcommand\LARGE{\@setfontsize\LARGE\@xxpt{25}} +\newcommand\huge{\@setfontsize\huge\@xxvpt{30}} +\let\Huge=\huge +%</12pt> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsection{Paragraphing} +% +% \begin{macro}{\lineskip} +% \begin{macro}{\normallineskip} +% These parameters control \TeX's behaviour when two lines tend to +% come too close together. +% \begin{macrocode} +%<*article|report|book> +\setlength\lineskip{1\p@} +\setlength\normallineskip{1\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\baselinestretch} +% This is used as a multiplier for |\baselineskip|. The default is +% to \emph{not} stretch the baselines. Note that if this command +% doesn't resolve to ``empty'' any \texttt{plus} or \texttt{minus} +% part in the specification of |\baselineskip| is ignored. +% \begin{macrocode} +\renewcommand\baselinestretch{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\parskip} +% \begin{macro}{\parindent} +% |\parskip| gives extra vertical space between paragraphs and +% |\parindent| is the width of the paragraph indentation. The value +% of |\parindent| depends on whether we are in two column mode. +% \changes{v1.0m}{1994/01/12}{\cs{parindent} should be different, +% depending on the pointsize} +% \begin{macrocode} +\setlength\parskip{0\p@ \@plus \p@} +%</article|report|book> +%<*10pt|11pt|12pt> +\if@twocolumn + \setlength\parindent{1em} +\else +%<10pt> \setlength\parindent{15\p@} +%<11pt> \setlength\parindent{17\p@} +%<12pt> \setlength\parindent{1.5em} +\fi +%</10pt|11pt|12pt> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\smallskipamount} +% \begin{macro}{\medskipamount} +% \begin{macro}{\bigskipamount} +% The values for these three parameters are set in the \LaTeX\ +% kernel. They should perhaps vary, according to the size option +% specified. But as they have always had the same value regardless +% of the size option we do not change them to stay compatible with +% both \LaTeX~2.09 and older releases of \LaTeXe. +% \changes{v1.3n}{1995/10/29}{Added setting the values of +% \cs{...skipamount}} +% \begin{macrocode} +%<*10pt|11pt|12pt> +\setlength\smallskipamount{3\p@ \@plus 1\p@ \@minus 1\p@} +\setlength\medskipamount{6\p@ \@plus 2\p@ \@minus 2\p@} +\setlength\bigskipamount{12\p@ \@plus 4\p@ \@minus 4\p@} +%</10pt|11pt|12pt> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@lowpenalty} +% \begin{macro}{\@medpenalty} +% \begin{macro}{\@highpenalty}% +% The commands |\nopagebreak| and |\nolinebreak| put in penalties +% to discourage these breaks at the point they are put in. +% They use |\@lowpenalty|, |\@medpenalty| or |\@highpenalty|, +% dependent on their argument. +% \begin{macrocode} +%<*article|report|book> +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\clubpenalty} +% \begin{macro}{\widowpenalty} +% These penalties are use to discourage club and widow lines. +% Because we use their default values we only show them here, +% commented out. +% \begin{macrocode} +% \clubpenalty 150 +% \widowpenalty 150 +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\displaywidowpenalty} +% \begin{macro}{\predisplaypenalty} +% \begin{macro}{\postdisplaypenalty} +% Discourage (but not so much) widows in front of a math display +% and forbid breaking directly in front of a display. Allow break +% after a display without a penalty. Again the default values are +% used, therefore we only show them here. +% \begin{macrocode} +% \displaywidowpenalty 50 +% \predisplaypenalty 10000 +% \postdisplaypenalty 0 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\interlinepenalty} +% Allow the breaking of a page in the middle of a paragraph. +% \begin{macrocode} +% \interlinepenalty 0 +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\brokenpenalty} +% We allow the breaking of a page after a hyphenated line. +% \changes{v1.1a}{1994/03/12}{Show correct default which is 100} +% \begin{macrocode} +% \brokenpenalty 100 +%</article|report|book> +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Page Layout} +% +% All margin dimensions are measured from a point one inch from the +% top and lefthand side of the page. +% +% \subsubsection{Vertical spacing} +% +% \begin{macro}{\headheight} +% \begin{macro}{\headsep} +% \begin{macro}{\topskip} +% The |\headheight| is the height of the box that will contain the +% running head. The |\headsep| is the distance between the bottom +% of the running head and the top of the text. The |\topskip| is +% the |\baselineskip| for the first line on a page; \LaTeX's output +% routine will not work properly if it has the value 0pt, so do not +% do that! +% \begin{macrocode} +%<*10pt|11pt|12pt> +\setlength\headheight{12\p@} +%<!bk>\setlength\headsep {25\p@} +%<10pt&bk>\setlength\headsep {.25in} +%<11pt&bk>\setlength\headsep {.275in} +%<12pt&bk>\setlength\headsep {.275in} +%<10pt>\setlength\topskip {10\p@} +%<11pt>\setlength\topskip {11\p@} +%<12pt>\setlength\topskip {12\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\footskip} +% The distance from the baseline of the box which contains the +% running footer to the baseline of last line of text is controlled +% by the |\footskip|. +% \begin{macrocode} +%<!bk>\setlength\footskip{30\p@} +%<10pt&bk>\setlength\footskip{.35in} +%<11pt&bk>\setlength\footskip{.38in} +%<12pt&bk>\setlength\footskip{30\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\maxdepth} +% \changes{v1.2k}{1994/05/06}{Added setting of \cs{maxdepth} and +% \cs{@maxdepth}} +% \changes{v1.3j}{1995/08/16}{Take setting of +% \cs{@maxdepth} out again} +% The \TeX\ primitive register |\maxdepth| has a function that is +% similar to that of |\topskip|. The register |\@maxdepth| should +% always contain a copy of |\maxdepth|. This is achieved by setting +% it internally at |\begin{document}|. In both plain \TeX\ and +% \LaTeX~2.09 |\maxdepth| had a fixed value of \texttt{4pt}; in +% native \LaTeX2e\ mode we let the value depend on the typesize. We +% set it so that |\maxdepth| $+$ |\topskip| $=$ typesize $\times +% 1.5$. As it happens, in these classes |\topskip| is equal to the +% typesize, therefore we set |\maxdepth| to half the value of +% |\topskip|. +% \begin{macrocode} +\if@compatibility \setlength\maxdepth{4\p@} \else +\setlength\maxdepth{.5\topskip} \fi +% \end{macrocode} +% \end{macro} +% +% \subsubsection{The dimension of text} +% +% \begin{macro}{\textwidth} +% When we are in compatibility mode we have to make sure that the +% dimensions of the printed area are not different from what the +% user was used to see. +% +% \begin{macrocode} +\if@compatibility + \if@twocolumn + \setlength\textwidth{410\p@} + \else +%<10pt&!bk> \setlength\textwidth{345\p@} +%<11pt&!bk> \setlength\textwidth{360\p@} +%<12pt&!bk> \setlength\textwidth{390\p@} +%<10pt&bk> \setlength\textwidth{4.5in} +%<11pt&bk> \setlength\textwidth{5in} +%<12pt&bk> \setlength\textwidth{5in} + \fi +% \end{macrocode} +% When we are not in compatibility mode we can set some of the +% dimensions differently, taking into account the paper size for +% instance. +% \begin{macrocode} +\else +% \end{macrocode} +% First, we calculate the maximum |\textwidth|, which we will allow +% on the selected paper and store it in |\@tempdima|. Then we store +% the length of a line with approximately 60--70 characters in +% |\@tempdimb|. The values given are more or less suitable when +% Computer Modern fonts are used. +% \changes{v1.1a}{1994/03/12}{Have old values for width in native mode} +% \begin{macrocode} + \setlength\@tempdima{\paperwidth} + \addtolength\@tempdima{-2in} +%<10pt> \setlength\@tempdimb{345\p@} +%<11pt> \setlength\@tempdimb{360\p@} +%<12pt> \setlength\@tempdimb{390\p@} +% \end{macrocode} +% +% Now we can set the |\textwidth|, depending on whether we will be +% setting one or two columns. +% +% In two column mode each \emph{column} shouldn't be wider than +% |\@tempdimb| (which could happen on \textsc{a3} paper for +% instance). +% \begin{macrocode} + \if@twocolumn + \ifdim\@tempdima>2\@tempdimb\relax + \setlength\textwidth{2\@tempdimb} + \else + \setlength\textwidth{\@tempdima} + \fi +% \end{macrocode} +% +% In one column mode the text should not be wider than the minimum +% of the paperwidth (minus 2 inches for the margins) and the +% maximum length of a line as defined by the number of characters. +% \begin{macrocode} + \else + \ifdim\@tempdima>\@tempdimb\relax + \setlength\textwidth{\@tempdimb} + \else + \setlength\textwidth{\@tempdima} + \fi + \fi +\fi +% \end{macrocode} +% +% Here we modify the width of the text a little to be a whole +% number of points. +% \begin{macrocode} +\if@compatibility\else + \@settopoint\textwidth +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\textheight} +% Now that we have computed the width of the text, we have to take +% care of the height. The |\textheight| is the height of text +% (including footnotes and figures, excluding running head and +% foot). +% +% First make sure that the compatibility mode gets the same +% dimensions as we had with \LaTeX2.09. The number of lines was +% calculated as the floor of the old |\textheight| minus +% |\topskip|, divided by |\baselineskip| for |\normalsize|. The +% old value of |\textheight| was 528pt. +% +% \begin{macrocode} +\if@compatibility +%<10pt&!bk> \setlength\textheight{43\baselineskip} +%<10pt&bk> \setlength\textheight{41\baselineskip} +%<11pt> \setlength\textheight{38\baselineskip} +%<12pt> \setlength\textheight{36\baselineskip} +% \end{macrocode} +% +% Again we compute this, depending on the papersize and depending +% on the baselineskip that is used, in order to have a whole number +% of lines on the page. +% \begin{macrocode} +\else + \setlength\@tempdima{\paperheight} +% \end{macrocode} +% +% We leave at least a 1 inch margin on the top and the bottom of +% the page. +% \begin{macrocode} + \addtolength\@tempdima{-2in} +% \end{macrocode} +% +% We also have to leave room for the running headers and footers. +% \begin{macrocode} + \addtolength\@tempdima{-1.5in} +% \end{macrocode} +% +% Then we divide the result by the current |\baselineskip| and +% store this in the count register |\@tempcnta|, which then +% contains the number of lines that fit on this page. +% \begin{macrocode} + \divide\@tempdima\baselineskip + \@tempcnta=\@tempdima +% \end{macrocode} +% +% From this we can calculate the height of the text. +% \begin{macrocode} + \setlength\textheight{\@tempcnta\baselineskip} +\fi +% \end{macrocode} +% +% The first line on the page has a height of |\topskip|. +% \begin{macrocode} +\addtolength\textheight{\topskip} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsubsection{Margins} +% +% Most of the values of these parameters are now calculated, based +% on the papersize in use. In the calcluations the |\marginparsep| +% needs to be taken into account so we give it its value first. +% +% \begin{macro}{\marginparsep} +% \begin{macro}{\marginparpush} +% The horizontal space between the main text and marginal notes is +% determined by |\marginparsep|, the minimum vertical separation +% between two marginal notes is controlled by |\marginparpush|. +% \begin{macrocode} +\if@twocolumn + \setlength\marginparsep {10\p@} +\else +%<10pt&!bk> \setlength\marginparsep{11\p@} +%<11pt&!bk> \setlength\marginparsep{10\p@} +%<12pt&!bk> \setlength\marginparsep{10\p@} +%<bk> \setlength\marginparsep{7\p@} +\fi +%<10pt|11pt>\setlength\marginparpush{5\p@} +%<12pt>\setlength\marginparpush{7\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% Now we can give the values for the other margin parameters. For +% native \LaTeXe, these are calculated. +% \begin{macro}{\oddsidemargin} +% \begin{macro}{\evensidemargin} +% \begin{macro}{\marginparwidth} +% First we give the values for the compatibility mode. +% +% Values for two-sided printing: +% \begin{macrocode} +\if@compatibility +%<*bk> +%<10pt> \setlength\oddsidemargin {.5in} +%<11pt> \setlength\oddsidemargin {.25in} +%<12pt> \setlength\oddsidemargin {.25in} +%<10pt> \setlength\evensidemargin {1.5in} +%<11pt> \setlength\evensidemargin {1.25in} +%<12pt> \setlength\evensidemargin {1.25in} +%<10pt> \setlength\marginparwidth {.75in} +%<11pt> \setlength\marginparwidth {1in} +%<12pt> \setlength\marginparwidth {1in} +%</bk> +%<*!bk> + \if@twoside +%<10pt> \setlength\oddsidemargin {44\p@} +%<11pt> \setlength\oddsidemargin {36\p@} +%<12pt> \setlength\oddsidemargin {21\p@} +%<10pt> \setlength\evensidemargin {82\p@} +%<11pt> \setlength\evensidemargin {74\p@} +%<12pt> \setlength\evensidemargin {59\p@} +%<10pt> \setlength\marginparwidth {107\p@} +%<11pt> \setlength\marginparwidth {100\p@} +%<12pt> \setlength\marginparwidth {85\p@} +% \end{macrocode} +% Values for one-sided printing: +% \begin{macrocode} + \else +%<10pt> \setlength\oddsidemargin {63\p@} +%<11pt> \setlength\oddsidemargin {54\p@} +%<12pt> \setlength\oddsidemargin {39.5\p@} +%<10pt> \setlength\evensidemargin {63\p@} +%<11pt> \setlength\evensidemargin {54\p@} +%<12pt> \setlength\evensidemargin {39.5\p@} +%<10pt> \setlength\marginparwidth {90\p@} +%<11pt> \setlength\marginparwidth {83\p@} +%<12pt> \setlength\marginparwidth {68\p@} + \fi +%</!bk> +% \end{macrocode} +% And values for two column mode: +% \begin{macrocode} + \if@twocolumn + \setlength\oddsidemargin {30\p@} + \setlength\evensidemargin {30\p@} + \setlength\marginparwidth {48\p@} + \fi +% \end{macrocode} +% +% When we are not in compatibility mode we can take the dimensions +% of the selected paper into account. +% +% The values for |\oddsidemargin| and |\marginparwidth| will be set +% depending on the status of the |\if@twoside|. +% +% If |@twoside| is true (which is always the case for book) we make +% the inner margin smaller than the outer one. +% \begin{macrocode} +\else + \if@twoside + \setlength\@tempdima {\paperwidth} + \addtolength\@tempdima {-\textwidth} + \setlength\oddsidemargin {.4\@tempdima} + \addtolength\oddsidemargin {-1in} +% \end{macrocode} +% The width of the margin for text is set to the remainder of the +% width except for a `real margin' of white space of width 0.4in. +% A check should perhaps be built in to ensure that the (text) +% margin width does not get too small! +% +% \changes{v1.1a}{1994/03/12}{New algorithm for \cs{oddsidemargin}} +% \changes{v1.1a}{1994/03/12}{New algorithm for \cs{marginparwidth}} +% \changes{v1.2z}{1995/04/14}{Also take \cs{marginparsep} into account +% here} +% \begin{macrocode} + \setlength\marginparwidth {.6\@tempdima} + \addtolength\marginparwidth {-\marginparsep} + \addtolength\marginparwidth {-0.4in} +% \end{macrocode} +% For one-sided printing we center the text on the page, by +% calculating the difference between |\textwidth| and +% |\paperwidth|. Half of that difference is than used for +% the margin (thus |\oddsidemargin| is |1in| less). +% \begin{macrocode} + \else + \setlength\@tempdima {\paperwidth} + \addtolength\@tempdima {-\textwidth} + \setlength\oddsidemargin {.5\@tempdima} + \addtolength\oddsidemargin {-1in} + \setlength\marginparwidth {.5\@tempdima} + \addtolength\marginparwidth {-\marginparsep} + \addtolength\marginparwidth {-0.4in} + \addtolength\marginparwidth {-.4in} + \fi +% \end{macrocode} +% With the above algorithm the |\marginparwidth| can come out quite +% large which we may not want. +% \begin{macrocode} + \ifdim \marginparwidth >2in + \setlength\marginparwidth{2in} + \fi +% \end{macrocode} +% Having done these calculations we make them pt values. +% \begin{macrocode} + \@settopoint\oddsidemargin + \@settopoint\marginparwidth +% \end{macrocode} +% +% The |\evensidemargin| can now be computed from the values set +% above. +% \changes{v1.0l}{1994/01/11}{Computing of \cs{evensidemargin} +% should only occur in compatibility mode} +% \begin{macrocode} + \setlength\evensidemargin {\paperwidth} + \addtolength\evensidemargin{-2in} + \addtolength\evensidemargin{-\textwidth} + \addtolength\evensidemargin{-\oddsidemargin} +% \end{macrocode} +% Setting |\evensidemargin| to a full point value may produce a +% small error. However it will lie within the error range a +% doublesided printer of today's technology can accurately print. +% \begin{macrocode} + \@settopoint\evensidemargin +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\topmargin} +% The |\topmargin| is the distance between the top of `the +% printable area'---which is 1 inch below the top of the +% paper--and the top of the box which contains the running head. +% +% It can now be computed from the values set above. +% \begin{macrocode} +\if@compatibility +%<!bk> \setlength\topmargin{27pt} +%<10pt&bk> \setlength\topmargin{.75in} +%<11pt&bk> \setlength\topmargin{.73in} +%<12pt&bk> \setlength\topmargin{.73in} +\else + \setlength\topmargin{\paperheight} + \addtolength\topmargin{-2in} + \addtolength\topmargin{-\headheight} + \addtolength\topmargin{-\headsep} + \addtolength\topmargin{-\textheight} + \addtolength\topmargin{-\footskip} % this might be wrong! +% \end{macrocode} +% By changing the factor in the next line the complete page +% can be shifted vertically. +% \changes{v1.2u}{1994/07/13}{Moved rounding of \cs{topmargin} to +% native mode} +% \begin{macrocode} + \addtolength\topmargin{-.5\topmargin} + \@settopoint\topmargin +\fi +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{Footnotes} +% +% \begin{macro}{\footnotesep} +% |\footnotesep| is the height of the strut placed at the beginning +% of every footnote. It equals the height of a normal +% |\footnotesize| strut in this +% class, thus no extra space occurs between footnotes. +% \begin{macrocode} +%<10pt>\setlength\footnotesep{6.65\p@} +%<11pt>\setlength\footnotesep{7.7\p@} +%<12pt>\setlength\footnotesep{8.4\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\footins} +% |\skip\footins| is the space between the last line of the main +% text and the top of the first footnote. +% \begin{macrocode} +%<10pt>\setlength{\skip\footins}{9\p@ \@plus 4\p@ \@minus 2\p@} +%<11pt>\setlength{\skip\footins}{10\p@ \@plus 4\p@ \@minus 2\p@} +%<12pt>\setlength{\skip\footins}{10.8\p@ \@plus 4\p@ \@minus 2\p@} +%</10pt|11pt|12pt> +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Float placement parameters} +% +% All float parameters are given default values in the \LaTeXe{} +% kernel. For this reason parameters that are not counters +% need to be set with |\renewcommand|. +% +% \paragraph{Limits for the placement of floating objects} +% +% \begin{macro}{\c@topnumber} +% The \Lcount{topnumber} counter holds the maximum number of +% floats that can appear on the top of a text page. +% \begin{macrocode} +%<*article|report|book> +\setcounter{topnumber}{2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\topfraction} +% This indicates the maximum part of a text page that can be +% occupied by floats at the top. +% \changes{v1.0h}{1993/12/18}{Replaced \cs{newcommand} with +% \cs{renewcommand}. ASAJ.} +% \begin{macrocode} +\renewcommand\topfraction{.7} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@bottomnumber} +% The \Lcount{bottomnumber} counter holds the maximum number of +% floats that can appear on the bottom of a text page. +% \begin{macrocode} +\setcounter{bottomnumber}{1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bottomfraction} +% This indicates the maximum part of a text page that can be +% occupied by floats at the bottom. +% \changes{v1.0h}{1993/12/18}{Replaced \cs{newcommand} with +% \cs{renewcommand}. ASAJ.} +% \begin{macrocode} +\renewcommand\bottomfraction{.3} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@totalnumber} +% This indicates the maximum number of floats that can appear on +% any text page. +% \begin{macrocode} +\setcounter{totalnumber}{3} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\textfraction} +% This indicates the minimum part of a text page that has to be +% occupied by text. +% \changes{v1.0h}{1993/12/18}{Replaced \cs{newcommand} with +% \cs{renewcommand}. ASAJ.} +% \begin{macrocode} +\renewcommand\textfraction{.2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\floatpagefraction} +% This indicates the minimum part of a page that has to be +% occupied by floating objects before a `float page' is produced. +% \changes{v1.0h}{1993/12/18}{Replaced \cs{newcommand} with +% \cs{renewcommand}. ASAJ.} +% \begin{macrocode} +\renewcommand\floatpagefraction{.5} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@dbltopnumber} +% The \Lcount{dbltopnumber} counter holds the maximum number of +% two column floats that can appear on the top of a two column text +% page. +% \begin{macrocode} +\setcounter{dbltopnumber}{2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\dbltopfraction} +% This indicates the maximum part of a two column text page that +% can be occupied by two column floats at the top. +% \changes{v1.0h}{1993/12/18}{Replaced \cs{newcommand} with +% \cs{renewcommand}. ASAJ.} +% \begin{macrocode} +\renewcommand\dbltopfraction{.7} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\dblfloatpagefraction} +% This indicates the minimum part of a page that has to be +% occupied by two column wide floating objects before a `float +% page' is produced. +% \changes{v1.0h}{1993/12/18}{Replaced \cs{newcommand} with +% \cs{renewcommand}. ASAJ.} +% \begin{macrocode} +\renewcommand\dblfloatpagefraction{.5} +%</article|report|book> +% \end{macrocode} +% \end{macro} +% +% \paragraph{Floats on a text page} +% +% \begin{macro}{\floatsep} +% \begin{macro}{\textfloatsep} +% \begin{macro}{\intextsep} +% When a floating object is placed on a page with text, these +% parameters control the separation between the float and the other +% objects on the page. These parameters are used for both +% one-column mode and single-column floats in two-column mode. +% +% |\floatsep| is the space between adjacent floats that are moved +% to the top or bottom of the text page. +% +% |\textfloatsep| is the space between the main text and floats +% at the top or bottom of the page. +% +% |\intextsep| is the space between in-text floats and the text. +% \begin{macrocode} +%<*10pt> +\setlength\floatsep {12\p@ \@plus 2\p@ \@minus 2\p@} +\setlength\textfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@} +\setlength\intextsep {12\p@ \@plus 2\p@ \@minus 2\p@} +%</10pt> +%<*11pt> +\setlength\floatsep {12\p@ \@plus 2\p@ \@minus 2\p@} +\setlength\textfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@} +\setlength\intextsep {12\p@ \@plus 2\p@ \@minus 2\p@} +%</11pt> +%<*12pt> +\setlength\floatsep {12\p@ \@plus 2\p@ \@minus 4\p@} +\setlength\textfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@} +\setlength\intextsep {14\p@ \@plus 4\p@ \@minus 4\p@} +%</12pt> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\dblfloatsep} +% \begin{macro}{\dbltextfloatsep} +% When floating objects that span the whole |\textwidth| are placed +% on a text page when we are in twocolumn mode the separation +% between the float and the text is controlled by |\dblfloatsep| +% and |\dbltextfloatsep|. +% +% |\dblfloatsep| is the space between adjacent floats that are moved +% to the top or bottom of the text page. +% +% |\dbltextfloatsep| is the space between the main text and floats +% at the top or bottom of the page. +% +% \begin{macrocode} +%<*10pt> +\setlength\dblfloatsep {12\p@ \@plus 2\p@ \@minus 2\p@} +\setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@} +%</10pt> +%<*11pt> +\setlength\dblfloatsep {12\p@ \@plus 2\p@ \@minus 2\p@} +\setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@} +%</11pt> +%<*12pt> +\setlength\dblfloatsep {14\p@ \@plus 2\p@ \@minus 4\p@} +\setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@} +%</12pt> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \paragraph{Floats on their own page or column} +% +% \begin{macro}{\@fptop} +% \begin{macro}{\@fpsep} +% \begin{macro}{\@fpbot} +% When floating objects are placed on separate pages the layout of +% such pages is controlled by these parameters. At the top of the +% page |\@fptop| amount of stretchable whitespace is inserted, at +% the bottom of the page we get an |\@fpbot| amount of stretchable +% whitespace. Between adjacent floats the |\@fpsep| is inserted. +% +% These parameters are used for the placement of floating objects +% in one column mode, or in single column floats in two column +% mode. +% +% Note that at least one of the two parameters |\@fptop| and +% |\@fpbot| should contain a |plus ...fil| to allow filling the +% remaining empty space. +% \begin{macrocode} +%<*10pt> +\setlength\@fptop{0\p@ \@plus 1fil} +\setlength\@fpsep{8\p@ \@plus 2fil} +\setlength\@fpbot{0\p@ \@plus 1fil} +%</10pt> +%<*11pt> +\setlength\@fptop{0\p@ \@plus 1fil} +\setlength\@fpsep{8\p@ \@plus 2fil} +\setlength\@fpbot{0\p@ \@plus 1fil} +%</11pt> +%<*12pt> +\setlength\@fptop{0\p@ \@plus 1fil} +\setlength\@fpsep{10\p@ \@plus 2fil} +\setlength\@fpbot{0\p@ \@plus 1fil} +%</12pt> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@dblfptop} +% \begin{macro}{\@dblfpsep} +% \begin{macro}{\@dblfpbot} +% Double column floats in two column mode are handled with similar +% parameters. +% \begin{macrocode} +%<*10pt> +\setlength\@dblfptop{0\p@ \@plus 1fil} +\setlength\@dblfpsep{8\p@ \@plus 2fil} +\setlength\@dblfpbot{0\p@ \@plus 1fil} +%</10pt> +%<*11pt> +\setlength\@dblfptop{0\p@ \@plus 1fil} +\setlength\@dblfpsep{8\p@ \@plus 2fil} +\setlength\@dblfpbot{0\p@ \@plus 1fil} +%</11pt> +%<*12pt> +\setlength\@dblfptop{0\p@ \@plus 1fil} +\setlength\@dblfpsep{10\p@ \@plus 2fil} +\setlength\@dblfpbot{0\p@ \@plus 1fil} +%</12pt> +%<*article|report|book> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Page Styles} +% +% The page style \pstyle{foo} is defined by defining the command +% |\ps@foo|. This command should make only local definitions. +% There should be no stray spaces in the definition, since they +% could lead to mysterious extra spaces in the output (well, that's +% something that should be always avoided). +% +% \begin{macro}{\@evenhead} +% \begin{macro}{\@oddhead} +% \begin{macro}{\@evenfoot} +% \begin{macro}{\@oddfoot} +% The |\ps@...| command defines the macros |\@oddhead|, +% |\@oddfoot|, |\@evenhead|, and |\@evenfoot| to define the running +% heads and feet---e.g., |\@oddhead| is the macro to produce the +% contents of the heading box for odd-numbered pages. It is called +% inside an |\hbox| of width |\textwidth|. +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Marking conventions} +% +% To make headings determined by the sectioning commands, the page +% style defines the commands |\chaptermark|, |\sectionmark|, +% \ldots,\\ +% where |\chaptermark{|\meta{TEXT}|}| is called by +% |\chapter| to set a mark, and so on. +% +% The |\...mark| commands and the |\...head| macros are defined +% with the help of the following macros. (All the |\...mark| +% commands should be initialized to no-ops.) +% +% \LaTeX{} extends \TeX's |\mark| facility by producing two kinds +% of marks, a `left' and a `right' mark, using the following +% commands: +% \begin{flushleft} +% |\markboth{|\meta{LEFT}|}{|\meta{RIGHT}|}|: Adds both marks. +% +% |\markright{|\meta{RIGHT}|}|: Adds a `right' mark. +% +% |\leftmark|: Used in the |\@oddhead|, |\@oddfoot|, |\@evenhead| +% or |\@evenfoot| macros, it gets the current `left' +% mark. |\leftmark| works like \TeX's |\botmark| +% command. +% +% |\rightmark|: Used in the |\@oddhead|, |\@oddfoot|, |\@evenhead| +% or |\@evenfoot| macros, it gets the current +% `right' mark. |\rightmark| works like \TeX's +% |\firstmark| command. +% \end{flushleft} +% +% The marking commands work reasonably well for right marks +% `numbered within' left marks---e.g., the left mark is changed by a +% |\chapter| command and the right mark is changed by a |\section| +% command. However, it does produce somewhat anomalous results if +% two |\markboth|'s occur on the same page. +% +% +% Commands like |\tableofcontents| that should set the marks in some +% page styles use a |\@mkboth| command, which is |\let| by the +% pagestyle command (|\ps@...|) to |\markboth| for setting the +% heading or to |\@gobbletwo| to do nothing. +% +% +% \subsubsection{Defining the page styles} +% \label{sec:classes:pagestyle} +% +% The pagestyles \pstyle{empty} and \pstyle{plain} are defined in +% \file{latex.dtx}. +% +% \begin{macro}{\ps@headings} +% The definition of the page style \pstyle{headings} has to be +% different for two sided printing than it is for one sided +% printing. +% +% \begin{macrocode} +\if@twoside + \def\ps@headings{% +% \end{macrocode} +% The running feet are empty in this page style, the running head +% contains the page number and one of the marks. +% \begin{macrocode} + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\thepage\hfil\slshape\leftmark}% + \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% +% \end{macrocode} +% +% When using this page style, the contents of the running head is +% determined by the chapter and section titles. So we |\let| +% |\@mkboth| to |\markboth|. +% \begin{macrocode} + \let\@mkboth\markboth +% \end{macrocode} +% +% For the article document class we define |\sectionmark| to clear +% the right mark and put the number of the section (when it is +% numbered) and its title in the left mark. The rightmark is set by +% |\subsectionmark| to contain the subsection titles. +% +% Note the use of |##1| for the parameter of the |\sectionmark| +% command, which will be defined when |\ps@headings| is executed. +% +% \changes{v1.2z}{1995/04/03}{Removed extra dot after \cs{thesection} +% (PR 1519)} +% \changes{v1.3c}{1995/05/25}{Replace \cs{hskip} +% \texttt{1em}\cs{relax} with \cs{quad}} +% \begin{macrocode} +%<*article> + \def\sectionmark##1{% + \markboth {\MakeUppercase{% + \ifnum \c@secnumdepth >\z@ + \thesection\quad + \fi + ##1}}{}}% + \def\subsectionmark##1{% + \markright {% + \ifnum \c@secnumdepth >\@ne + \thesubsection\quad + \fi + ##1}}} +%</article> +% \end{macrocode} +% +% In the report and book document classes we use the |\chaptermark| +% and |\sectionmark| macros to fill the running heads. +% +% Note the use of |##1| for the parameter of the |\chaptermark| +% command, which will be defined when |\ps@headings| is executed. +% +% \begin{macrocode} +%<*report|book> + \def\chaptermark##1{% + \markboth {\MakeUppercase{% + \ifnum \c@secnumdepth >\m@ne +%<book> \if@mainmatter + \@chapapp\ \thechapter. \ % +%<book> \fi + \fi + ##1}}{}}% + \def\sectionmark##1{% + \markright {\MakeUppercase{% + \ifnum \c@secnumdepth >\z@ + \thesection. \ % + \fi + ##1}}}} +%</report|book> +% \end{macrocode} +% +% The definition of |\ps@headings| for one sided printing can be +% much simpler, because we treat even and odd pages the same. +% Therefore we don't need to define |\@even...|. +% \begin{macrocode} +\else + \def\ps@headings{% + \let\@oddfoot\@empty + \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% + \let\@mkboth\markboth +% \end{macrocode} +% We use |\markright| now instead of |\markboth| as we did for two +% sided printing. +% \begin{macrocode} +%<*article> + \def\sectionmark##1{% + \markright {\MakeUppercase{% + \ifnum \c@secnumdepth >\m@ne + \thesection\quad + \fi + ##1}}}} +%</article> +% \end{macrocode} +% +% \begin{macrocode} +%<*report|book> + \def\chaptermark##1{% + \markright {\MakeUppercase{% + \ifnum \c@secnumdepth >\m@ne +%<book> \if@mainmatter + \@chapapp\ \thechapter. \ % +%<book> \fi + \fi + ##1}}}} +%</report|book> +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ps@myheadings} +% The definition of the page style \pstyle{myheadings} is fairly +% simple because the user determines the contents of the running +% head himself by using the |\markboth| and |\markright| commands. +% +% \begin{macrocode} +\def\ps@myheadings{% + \let\@oddfoot\@empty\let\@evenfoot\@empty + \def\@evenhead{\thepage\hfil\slshape\leftmark}% + \def\@oddhead{{\slshape\rightmark}\hfil\thepage}% +% \end{macrocode} +% +% We have to make sure that the marking commands that are used by +% the chapter and section headings are disabled. We do this +% |\let|ting them to a macro that gobbles its argument(s). +% \begin{macrocode} + \let\@mkboth\@gobbletwo +%<!article> \let\chaptermark\@gobble + \let\sectionmark\@gobble +%<article> \let\subsectionmark\@gobble + } +% \end{macrocode} +% \end{macro} +% +% \section{Document Markup} +% +% \subsection{The title} +% +% \begin{macro}{\title} +% \begin{macro}{\author} +% \begin{macro}{\date} +% These three macros are provided by \file{latex.dtx} to provide +% information about the title, author(s) and date of the document. +% The information is stored away in internal control sequences. +% It is the task of the |\maketitle| command to use the +% information provided. The definitions of these macros are shown +% here for information. +% \begin{macrocode} +% \newcommand*{\title}[1]{\gdef\@title{#1}} +% \newcommand*{\author}[1]{\gdef\@author{#1}} +% \newcommand*{\date}[1]{\gdef\@date{#1}} +% \end{macrocode} +% The |\date| macro gets today's date by default. +% \begin{macrocode} +% \date{\today} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\maketitle} +% The definition of |\maketitle| depends on whether a separate +% title page is made. This is the default for the report and book +% document classes, but for the article class it is optional. +% +% When we are making a title page, we locally redefine +% |\footnotesize| and |footnoterule| to change the appearance of +% the footnotes that are produced by the |\thanks| command; +% these changes affect all footnotes. +% \changes{v1.3o}{1995/11/02}{(CAR) Make \cs{footnote} always work in +% title, etc} +% \begin{macrocode} + \if@titlepage + \newcommand\maketitle{\begin{titlepage}% + \let\footnotesize\small + \let\footnoterule\relax + \let \footnote \thanks +% \end{macrocode} +% We center the entire title vertically; the centering is set off a +% little by adding a |\vskip|. (In compatibility mode the pagenumber +% is set to 0 by the titlepage environment to keep the behaviour +% of \LaTeX\ 2.09 style files.) +% \changes{v1.0g}{1993/12/09}{Removed the setting of the page number, +% when not in compatibility mode} +% \changes{v1.2c}{1994/03/17}{Removed setting of page number, now done +% in titlepage environment} +% \begin{macrocode} + \null\vfil + \vskip 60\p@ +% \end{macrocode} +% Then we set the title, in a |\LARGE| font; leave a little space +% and set the author(s) in a |\large| font. We do this inside a +% tabular environment to get them in a single column. +% Before the date we leave a little whitespace again. +% \begin{macrocode} + \begin{center}% + {\LARGE \@title \par}% + \vskip 3em% + {\large + \lineskip .75em% + \begin{tabular}[t]{c}% + \@author + \end{tabular}\par}% + \vskip 1.5em% + {\large \@date \par}% % Set date in \large size. + \end{center}\par +% \end{macrocode} +% Then we call |\@thanks| to print the information that goes into +% the footnote and finish the page. +% \begin{macrocode} + \@thanks + \vfil\null + \end{titlepage}% +% \end{macrocode} +% We reset the \Lcount{footnote} counter, disable |\thanks| and +% |\maketitle| and save some storage space by emptying the internal +% information macros. +% \changes{v1.3j}{1995/08/16}{use \cs{let} to save space} +% \changes{v1.3n}{1995/10/29}{Empty \cs{@date} as well} +% \begin{macrocode} + \setcounter{footnote}{0}% + \global\let\thanks\relax + \global\let\maketitle\relax + \global\let\@thanks\@empty + \global\let\@author\@empty + \global\let\@date\@empty + \global\let\@title\@empty +% \end{macrocode} +% After the title is set the declaration commands |\title|, etc.\ +% can vanish. +% The definition of |\and| makes only sense within the argument of +% |\author| so this can go as well. +% \changes{v1.3k}{1995/08/27}{Disable \cs{title} and similar decls} +% \begin{macrocode} + \global\let\title\relax + \global\let\author\relax + \global\let\date\relax + \global\let\and\relax +} +% \end{macrocode} +% When the title is not on a page of its own, the layout of the +% title is a little different. We use symbols to mark the footnotes +% and we have to deal with two column documents. +% +% Therefore we first start a new group to keep changes local. Then +% we redefine |\thefootnote| to use |\fnsymbol|; and change +% |\@makefnmark| so that footnotemarks have zero width (to make the +% centering of the author names look better). +% \changes{v1.2s}{1994/06/02}{Reset \cs{@makefntext}} +% \changes{v1.3a}{1995/05/17}{Use \cs{@makefnmark} in definition of +% \cs{@makefntext}} +% \changes{v1.3g}{1995/06/26}{Fix definition of \cs{@makefnmark} and +% \cs{@makefntext} to a) work and b) without using math} +% \begin{macrocode} +\else +\newcommand\maketitle{\par + \begingroup + \renewcommand\thefootnote{\@fnsymbol\c@footnote}% + \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}% + \long\def\@makefntext##1{\parindent 1em\noindent + \hb@xt@1.8em{% + \hss\@textsuperscript{\normalfont\@thefnmark}}##1}% +% \end{macrocode} +% If this is a twocolumn document we start a new page in twocolumn +% mode, with the title set to the full width of the text. The +% actual printing of the title information is left to +% |\@maketitle|. +% \changes{v1.2k}{1994/05/06}{Added check on number of columns in use +% locally} +% \begin{macrocode} + \if@twocolumn + \ifnum \col@number=\@ne + \@maketitle + \else + \twocolumn[\@maketitle]% + \fi + \else +% \end{macrocode} +% When this is not a twocolumn document we just start a new page, +% prevent floating objects from appearing on the top of this page +% and print the title information. +% \begin{macrocode} + \newpage + \global\@topnum\z@ % Prevents figures from going at top of page. + \@maketitle + \fi +% \end{macrocode} +% This page gets a \pstyle{plain} layout. We call |\@thanks| to +% produce the footnotes. +% \begin{macrocode} + \thispagestyle{plain}\@thanks +% \end{macrocode} +% Now we can close the group, reset the \Lcount{footnote} counter, +% disable |\thanks|, |\maketitle| and |\@maketitle| and save some +% storage space by emptying the internal information macros. +% \changes{v1.3j}{1995/08/16}{use \cs{let} to save space} +% \changes{v1.3k}{1995/08/27}{Disable \cs{title} and similar decls} +% \changes{v1.3n}{1995/10/29}{Empty \cs{@date} as well} +% \begin{macrocode} + \endgroup + \setcounter{footnote}{0}% + \global\let\thanks\relax + \global\let\maketitle\relax + \global\let\@maketitle\relax + \global\let\@thanks\@empty + \global\let\@author\@empty + \global\let\@date\@empty + \global\let\@title\@empty + \global\let\title\relax + \global\let\author\relax + \global\let\date\relax + \global\let\and\relax +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@maketitle} +% This macro takes care of formatting the title information when we +% have no separate title page. +% +% We always start a new page, leave some white space and center the +% information. The title is set in a |\LARGE| font, the author +% names and the in a |\large| font. +% \changes{v1.3o}{1995/11/02}{(CAR) Make \cs{footnote} always work in +% title, etc} +% \begin{macrocode} +\def\@maketitle{% + \newpage + \null + \vskip 2em% + \begin{center}% + \let \footnote \thanks + {\LARGE \@title \par}% + \vskip 1.5em% + {\large + \lineskip .5em% + \begin{tabular}[t]{c}% + \@author + \end{tabular}\par}% + \vskip 1em% + {\large \@date}% + \end{center}% + \par + \vskip 1.5em} +\fi +% \end{macrocode} +% \end{macro} +% +% \subsection{Chapters and Sections} +% +% \subsubsection{Building blocks} The definitions in this part of the +% class file make use of two internal macros, |\@startsection| and +% |\secdef|. To understand +% what is going on here, we describe their syntax. +% +% The macro |\@startsection| has 6 required arguments, optionally +% followed by a $*$, an optional argument and a required argument: +% +% |\@startsection|\meta{name}\meta{level}\meta{indent}^^A +% \meta{beforeskip}\meta{afterskip}\meta{style} +% optional *\\ +% \null\hphantom{\bslash @startsection}^^A +% |[|\meta{altheading}|]|\meta{heading} +% +% It is a generic command to start a section, the arguments have +% the following meaning: +% +% \begin{description} +% \item[\meta{name}] The name of the user level command, e.g., +% `section'. +% \item[\meta{level}] A number, denoting the depth of the section +% -- e.g., chapter=1, section = 2, etc. A section number +% will be printed if and only if \meta{level} $<=$ the value +% of the \Lcount{secnumdepth} counter. +% \item[\meta{indent}] The indentation of the heading from the left +% margin +% \item[\meta{beforeskip}] The absolute value of this argument +% gives the skip to leave above the heading. If it is +% negative, then the paragraph indent of the text following +% the heading is suppressed. +% \item[\meta{afterskip}] If positive, this gives the skip to leave +% below the heading, else it gives the skip to leave to the +% right of a run-in heading. +% \item[\meta{style}] Commands to set the style of the heading. +% \item[$*$] When this is missing the heading is numbered and the +% corresponding counter is incremented. +% \item[\meta{altheading}] Gives an alternative heading to use in +% the table of contents and in the running heads. This should +% be present when the $*$ form is used. +% \item[\meta{heading}] The heading of the new section. +% \end{description} +% A sectioning command is normally defined to |\@startsection| and +% its first six arguments. +% +% The macro |\secdef| can be used when a sectioning command is +% defined without using |\@startsection|. It has two arguments: +% +% |\secdef|\meta{unstarcmds}\meta{starcmds} +% +% \begin{description} +% \item[\meta{unstarcmds}] Used for the normal form of the +% sectioning command. +% \item[\meta{starcmds}] Used for the $*$-form of the +% sectioning command. +% \end{description} +% +% You can use |\secdef| as follows: +% \begin{verbatim} +% \def\chapter { ... \secdef \CMDA \CMDB } +% \def\CMDA [#1]#2{ ... } % Command to define +% % \chapter[...]{...} +% \def\CMDB #1{ ... } % Command to define +% % \chapter*{...} +% \end{verbatim} +% +% \subsubsection{Mark commands} +% +% \begin{macro}{\chaptermark} +% \begin{macro}{\sectionmark} +% \begin{macro}{\subsectionmark} +% \begin{macro}{\subsubsectionmark} +% \begin{macro}{\paragraphmark} +% \begin{macro}{\subparagraphmark} +% Default initializations of |\...mark| commands. These commands +% are used in the definition of the page styles (see +% section~\ref{sec:classes:pagestyle}) Most of them are already defined by +% \file{latex.dtx}, so they are only shown here. +% +% \begin{macrocode} +%<!article>\newcommand*\chaptermark[1]{} +% \newcommand*\sectionmark[1]{} +% \newcommand*\subsectionmark[1]{} +% \newcommand*\subsubsectionmark[1]{} +% \newcommand*\paragraphmark[1]{} +% \newcommand*\subparagraphmark[1]{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Define Counters} +% +% \begin{macro}{\c@secnumdepth} +% The value of the counter \Lcount{secnumdepth} gives the depth of +% the highest-level sectioning command that is to produce section +% numbers. +% \begin{macrocode} +%<article>\setcounter{secnumdepth}{3} +%<!article>\setcounter{secnumdepth}{2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@part} +% \begin{macro}{\c@chapter} +% \begin{macro}{\c@section} +% \begin{macro}{\c@subsection} +% \begin{macro}{\c@subsubsection} +% \begin{macro}{\c@paragraph} +% \begin{macro}{\c@subparagraph} +% These counters are used for the section numbers. The macro\\ +% |\newcounter{|\meta{newctr}|}[|\meta{oldctr}|]|\\ +% defines\meta{newctr} to be a counter, which is reset to zero when +% counter \meta{oldctr} is stepped. Counter \meta{oldctr} must +% already be defined. +% +% \begin{macrocode} +\newcounter {part} +%<article>\newcounter {section} +%<*report|book> +\newcounter {chapter} +\newcounter {section}[chapter] +%</report|book> +\newcounter {subsection}[section] +\newcounter {subsubsection}[subsection] +\newcounter {paragraph}[subsubsection] +\newcounter {subparagraph}[paragraph] +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\thepart} +% \begin{macro}{\thechapter} +% \begin{macro}{\thesection} +% \begin{macro}{\thesubsection} +% \begin{macro}{\thesubsubsection} +% \begin{macro}{\theparagraph} +% \begin{macro}{\thesubparagraph} +% For any counter \Lcount{CTR}, |\theCTR| is a macro that defines +% the printed version of counter \Lcount{CTR}. It is defined in +% terms of the following macros: +% +% |\arabic{|\Lcount{COUNTER}|}| prints the value of +% \Lcount{COUNTER} as an arabic numeral. +% +% |\roman{|\Lcount{COUNTER}|}| prints the value of +% \Lcount{COUNTER} as a lowercase roman numberal. +% +% |\Roman{|\Lcount{COUNTER}|}| prints the value of +% \Lcount{COUNTER} as an uppercase roman numberal. +% +% |\alph{|\Lcount{COUNTER}|}| prints the value of \Lcount{COUNTER} +% as a lowercase letter: $1 =$~a, $2 =$~ b, etc. +% +% |\Alph{|\Lcount{COUNTER}|}| prints the value of \Lcount{COUNTER} +% as an uppercase letter: $1 =$~A, $2 =$~B, etc. +% +% Actually to save space the internal counter repesentations +% and the commands operating on those are used. +% \begin{macrocode} +\renewcommand \thepart {\@Roman\c@part} +%<article>\renewcommand \thesection {\@arabic\c@section} +%<*report|book> +\renewcommand \thechapter {\@arabic\c@chapter} +\renewcommand \thesection {\thechapter.\@arabic\c@section} +%</report|book> +\renewcommand\thesubsection {\thesection.\@arabic\c@subsection} +\renewcommand\thesubsubsection{\thesubsection .\@arabic\c@subsubsection} +\renewcommand\theparagraph {\thesubsubsection.\@arabic\c@paragraph} +\renewcommand\thesubparagraph {\theparagraph.\@arabic\c@subparagraph} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@chapapp} +% |\@chapapp| is initially defined to be `|\chaptername|'. The +% |\appendix| command redefines it to be `|\appendixname|'. +% +% \begin{macrocode} +%<report|book>\newcommand\@chapapp{\chaptername} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Front Matter, Main Matter, and Back Matter} +% +% A book contains these three (logical) sections. The switch +% |\@mainmatter| is true iff we are processing Main Matter. When +% this switch is false, the |\chapter| command does not print +% chapter numbers. +% +% Here we define the commands that start these sections. +% \begin{macro}{\frontmatter} +% This command starts Roman page numbering and turns off chapter +% numbering. Since this restarts the page numbering from 1, it +% should also ensure that a recto page is used. +% \changes{v1.3r}{1996/05/26}{Make this command react to the option +% \texttt{openany}} +% \changes{v1.3y}{1998/05/05}{Two years on: Make this command not +% react to the option \texttt{openany} as this makes the +% verso/recto numbering wrong: see pr/2754 for discussion} +% \begin{macrocode} +%<*book> +\newcommand\frontmatter{% +% \if@openright + \cleardoublepage +% \else +% \clearpage +% \fi + \@mainmatterfalse + \pagenumbering{roman}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\mainmatter} +% This command clears the page, starts arabic page numbering and +% turns on chapter numbering. Since this restarts the page numbering +% from 1, it should also ensure that a recto page is used. +% \changes{v1.3r}{1996/05/26}{Make this command react to the option +% \texttt{openany}} +% \changes{v1.3y}{1998/05/05}{Two years on: Make this command not +% react to the option \texttt{openany} as this makes the +% verso/recto numbering wrong: see pr/2754 for discussion} +% \begin{macrocode} +\newcommand\mainmatter{% +% \if@openright + \cleardoublepage +% \else +% \clearpage +% \fi + \@mainmattertrue + \pagenumbering{arabic}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\backmatter} +% This clears the page, turns off chapter numbering and leaves page +% numbering unchanged. +% \begin{macrocode} +\newcommand\backmatter{% + \if@openright + \cleardoublepage + \else + \clearpage + \fi + \@mainmatterfalse} +%</book> +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Parts} +% +% \begin{macro}{\part} +% The command to start a new part of our document. +% +% In the article class the definition of |\part| is rather simple; +% we start a new paragraph, add a little white space, suppress the +% indentation of the first paragraph and make use of |\secdef|. +% As in other sectioning commands (cf.\ |\@startsection| in the +% {\LaTeXe} kernel), we need to check the |@noskipsec| switch and +% force horizontal mode if it is set. +% \changes{v1.4a}{1999/01/07}{Check \texttt{@noskipsec} switch and +% possibly force horizontal mode; see PR/2889.} +% \begin{macrocode} +%<*article> +\newcommand\part{% + \if@noskipsec \leavevmode \fi + \par + \addvspace{4ex}% + \@afterindentfalse + \secdef\@part\@spart} +%</article> +% \end{macrocode} +% +% For the report and book classes we things a bit different. +% +% We start a new (righthand) page and use the \pstyle{plain} +% pagestyle. +% \changes{v1.3r}{1996/05/26}{Make this command react to the option +% \texttt{openany}} +% \begin{macrocode} +%<*report|book> +\newcommand\part{% + \if@openright + \cleardoublepage + \else + \clearpage + \fi + \thispagestyle{plain}% +% \end{macrocode} +% When we are making a two column document, this will be a one +% column page. We use |@tempswa| to remember to switch back to two +% columns. +% \begin{macrocode} + \if@twocolumn + \onecolumn + \@tempswatrue + \else + \@tempswafalse + \fi +% \end{macrocode} +% We need an empty box to prevent the fil glue from disappearing. +% \changes{v1.3j}{1995/08/16}{Replace \cs{hbox} by \cs{null}} +% \begin{macrocode} + \null\vfil +% \end{macrocode} +% Here we use |\secdef| to indicate which commands to use to make +% the actual heading. +% \begin{macrocode} + \secdef\@part\@spart} +%</report|book> +% \end{macrocode} +% +% \begin{macro}{\@part} +% This macro does the actual formatting of the title of the part. +% Again the macro is differently defined for the article document +% class than for the document classes report and book. + +% When \Lcount{secnumdepth} is larger than $-1$ for the +% document class article, we have a numbered +% part, otherwise it is unnumbered. +% \begin{macrocode} +%<*article> +\def\@part[#1]#2{% + \ifnum \c@secnumdepth >\m@ne + \refstepcounter{part}% + \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}% + \else + \addcontentsline{toc}{part}{#1}% + \fi +% \end{macrocode} +% We print the title flush left in the article class. +% Also we prevent breaking between lines and reset the font. +% \changes{v1.3c}{1995/05/25}{replace \cs{reset@font} with +% \cs{normalfont}} +% \begin{macrocode} + {\parindent \z@ \raggedright + \interlinepenalty \@M + \normalfont +% \end{macrocode} +% When this is a numbered part we have to print the number and the +% title. The |\nobreak| should prevent a page break here. +% \changes{v1.4e}{2001/05/24}{Replaced tilde with \cs{nobreakspace} +% (pr/3310)} +% \begin{macrocode} + \ifnum \c@secnumdepth >\m@ne + \Large\bfseries \partname\nobreakspace\thepart + \par\nobreak + \fi + \huge \bfseries #2% +% \end{macrocode} +% Now we empty the mark registers, leave some white space and let +% |\@afterheading| take care of suppressing the indentation. +% \begin{macrocode} + \markboth{}{}\par}% + \nobreak + \vskip 3ex + \@afterheading} +%</article> +% \end{macrocode} +% +% When \Lcount{secnumdepth} is larger than $-2$ for the +% document class report and book, we have a numbered +% part, otherwise it is unnumbered. +% \begin{macrocode} +%<*report|book> +\def\@part[#1]#2{% + \ifnum \c@secnumdepth >-2\relax + \refstepcounter{part}% + \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}% + \else + \addcontentsline{toc}{part}{#1}% + \fi +% \end{macrocode} +% We empty the mark registers and center the title on the page in the +% report and book document classes. +% Also we prevent breaking between lines and reset the font. +% \changes{v1.3c}{1995/05/25}{replace \cs{reset@font} with +% \cs{normalfont}} +% \changes{v1.3j}{1995/08/16}{add missing percent} +% \begin{macrocode} + \markboth{}{}% + {\centering + \interlinepenalty \@M + \normalfont +% \end{macrocode} +% When this is a numbered part we have to print the number. +% \changes{v1.4e}{2001/05/24}{Replaced tilde with \cs{nobreakspace} +% (pr/3310)} +% \begin{macrocode} + \ifnum \c@secnumdepth >-2\relax + \huge\bfseries \partname\nobreakspace\thepart + \par +% \end{macrocode} +% We leave some space before we print the title and leave the +% finishing up to |\@endpart|. +% \begin{macrocode} + \vskip 20\p@ + \fi + \Huge \bfseries #2\par}% + \@endpart} +%</report|book> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@spart} +% This macro does the actual formatting of the title of the part +% when the star form of the user command was used. In this case we +% \emph{never} print a number. Otherwise the formatting is the +% same. +% +% The differences between the definition of this macro in the +% article document class and in the report and book document +% classes are similar as they were for |\@part|. +% \changes{v1.3c}{1995/05/25}{replace \cs{reset@font} with +% \cs{normalfont}} +% \begin{macrocode} +%<*article> +\def\@spart#1{% + {\parindent \z@ \raggedright + \interlinepenalty \@M + \normalfont + \huge \bfseries #1\par}% + \nobreak + \vskip 3ex + \@afterheading} +%</article> +%<*report|book> +\def\@spart#1{% + {\centering + \interlinepenalty \@M + \normalfont + \Huge \bfseries #1\par}% + \@endpart} +%</report|book> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@endpart} +% \changes{v1.3j}{1995/08/16}{move docstrip guard to avoid defining +% \cs{@endpart} in article} +% This macro finishes the part page, for both |\@part| and +% |\@spart|. +% +% First we fill the current page. +% \begin{macrocode} +%<*report|book> +\def\@endpart{\vfil\newpage +% \end{macrocode} +% Then, when we are in twosided mode and chapters are supposed to +% be on right hand sides, we produce a completely blank page. +% \changes{v1.4b}{2000/05/19}{Only add empty page after part if +% twoside and openright (pr/3155)} +% \begin{macrocode} + \if@twoside + \if@openright + \null + \thispagestyle{empty}% + \newpage + \fi + \fi +% \end{macrocode} +% When this was a two column document we have to switch back to two +% column mode. +% \begin{macrocode} + \if@tempswa + \twocolumn + \fi} +%</report|book> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{Chapters} +% +% \begin{macro}{\chapter} +% A chapter should always start on a new page therefore we start by +% calling |\clearpage| and setting the pagestyle for this page to +% \pstyle{plain}. +% \begin{macrocode} +%<*report|book> +\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi + \thispagestyle{plain}% +% \end{macrocode} +% Then we prevent floats from appearing at the top of this page +% because it looks weird to see a floating object above a chapter +% title. +% \begin{macrocode} + \global\@topnum\z@ +% \end{macrocode} +% Then we suppress the indentation of the first paragraph by +% setting the switch |\@afterindent| to |false|. We use |\secdef| +% to specify the macros to use for actually setting the chapter +% title. +% \begin{macrocode} + \@afterindentfalse + \secdef\@chapter\@schapter} +% \end{macrocode} +% +% \begin{macro}{\@chapter} +% This macro is called when we have a numbered chapter. When +% \Lcount{secnumdepth} is larger than $-1$ and, in the book +% class, |\@mainmatter| is true, we display the chapter +% number. We also inform the user that a new chapter is about to be +% typeset by writing a message to the terminal. +% \begin{macrocode} +\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne +%<book> \if@mainmatter + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}% + {\protect\numberline{\thechapter}#1}% +%<*book> + \else + \addcontentsline{toc}{chapter}{#1}% + \fi +%</book> + \else + \addcontentsline{toc}{chapter}{#1}% + \fi +% \end{macrocode} +% After having written an entry to the table of contents we store +% the (alternative) title of this chapter with |\chaptermark| and +% add some white space to the lists of figures and tables. +% \begin{macrocode} + \chaptermark{#1}% + \addtocontents{lof}{\protect\addvspace{10\p@}}% + \addtocontents{lot}{\protect\addvspace{10\p@}}% +% \end{macrocode} +% Then we call upon |\@makechapterhead| to format the actual +% chapter title. We have to do this in a special way when we are in +% twocolumn mode in order to have the chapter title use the entire +% |\textwidth|. In one column mode we call |\@afterheading| which +% takes care of suppressing the indentation. +% \begin{macrocode} + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi} +% \end{macrocode} +% +% \begin{macro}{\@makechapterhead} +% The macro above uses |\@makechapterhead|\meta{text} to format the +% heading of the chapter. +% +% We begin by leaving some white space. The we open a group in +% which we have a paragraph indent of 0pt, and in which we have the +% text set ragged right. We also reset the font. +% \changes{v1.3c}{1995/05/25}{replace \cs{reset@font} with +% \cs{normalfont}} +% \begin{macrocode} +\def\@makechapterhead#1{% + \vspace*{50\p@}% + {\parindent \z@ \raggedright \normalfont +% \end{macrocode} +% Then we check whether the number of the chapter has to be printed. +% If so we leave some whitespace between the chapternumber and its +% title. +% \changes{v1.2v}{1994/11/30}{Added a \cs{nobreak} to prevent a +% pagebreak between the chapternumber and the chaptertitle} +% \changes{v1.3j}{1995/08/16}{replace braces by \cs{space}} +% \begin{macrocode} + \ifnum \c@secnumdepth >\m@ne +%<book> \if@mainmatter + \huge\bfseries \@chapapp\space \thechapter + \par\nobreak + \vskip 20\p@ +%<book> \fi + \fi +% \end{macrocode} +% Now we set the title in a large bold font. We prevent a pagebreak +% from occuring in the middle of or after the title. Finally we +% leave some whitespace before the text begins. +% \changes{v1.2v}{1994/11/30}{Added \cs{interlinepenalty}\cs{@M} to +% prevent a pagebreak in the middle of a title} +% \begin{macrocode} + \interlinepenalty\@M + \Huge \bfseries #1\par\nobreak + \vskip 40\p@ + }} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@schapter} +% This macro is called when we have an unnumbered chapter. It is +% much simpler than |\@chapter| because it only needs to typeset +% the chapter title. +% \begin{macrocode} +\def\@schapter#1{\if@twocolumn + \@topnewpage[\@makeschapterhead{#1}]% + \else + \@makeschapterhead{#1}% + \@afterheading + \fi} +% \end{macrocode} +% +% \begin{macro}{\@makeschapterhead} +% The macro above uses |\@makeschapterhead|\meta{text}to format +% the heading of the chapter. It is similar to |\@makechapterhead| +% except that it never has to print a chapter number. +% +% \changes{v1.2v}{1994/11/30}{Added \cs{interlinepenalty}\cs{@M} to +% prevent a pagebreak in the middle of a title} +% \changes{v1.3c}{1995/05/25}{replace \cs{reset@font} with +% \cs{normalfont}} +% \begin{macrocode} +\def\@makeschapterhead#1{% + \vspace*{50\p@}% + {\parindent \z@ \raggedright + \normalfont + \interlinepenalty\@M + \Huge \bfseries #1\par\nobreak + \vskip 40\p@ + }} +%</report|book> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{Lower level headings} +% +% These commands all make use of |\@startsection|. +% \begin{macro}{\section} +% This gives a normal heading with white space above and below the +% heading, the title set in |\Large\bfseries|, and no indentation +% on the first paragraph. +% \changes{v1.3c}{1995/05/25}{replace \cs{reset@font} with +% \cs{normalfont}} +% \begin{macrocode} +\newcommand\section{\@startsection {section}{1}{\z@}% + {-3.5ex \@plus -1ex \@minus -.2ex}% + {2.3ex \@plus.2ex}% + {\normalfont\Large\bfseries}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\subsection} +% This gives a normal heading with white space above and below the +% heading, the title set in |\large\bfseries|, and no indentation +% on the first paragraph. +% \begin{macrocode} +\newcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\normalfont\large\bfseries}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\subsubsection} +% This gives a normal heading with white space above and below the +% heading, the title set in |\normalsize\bfseries|, and no +% indentation on the first paragraph. +% \begin{macrocode} +\newcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-3.25ex\@plus -1ex \@minus -.2ex}% + {1.5ex \@plus .2ex}% + {\normalfont\normalsize\bfseries}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\paragraph} +% This gives a run-in heading with white space above and to the +% right of the heading, the title set in |\normalsize\bfseries|. +% \begin{macrocode} +\newcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {3.25ex \@plus1ex \@minus.2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\subparagraph} +% This gives an indented run-in heading with white space above and +% to the right of the heading, the title set in +% |\normalsize\bfseries|. +% \begin{macrocode} +\newcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% + {3.25ex \@plus1ex \@minus .2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} +% \end{macrocode} +% \end{macro} +% +% \subsection{Lists} +% +% \subsubsection{General List Parameters} +% +% The following commands are used to set the default values for the list +% environment's parameters. See the \LaTeX{} manual for an explanation +% of the meanings of the parameters. Defaults for the list +% environment are set as follows. First, |\rightmargin|, +% |\listparindent| and |\itemindent| are set to 0pt. Then, for a Kth +% level list, the command |\@listK| is called, where `K' denotes `i', +% '`i', ... , `vi'. (I.e., |\@listiii| is called for a third-level +% list.) By convention, |\@listK| should set |\leftmargin| to +% |\leftmarginK|. +% +% \begin{macro}{\leftmargin} +% \begin{macro}{\leftmargini} +% \begin{macro}{\leftmarginii} +% \begin{macro}{\leftmarginiii} +% \begin{macro}{\leftmarginiv} +% \begin{macro}{\leftmarginv} +% \begin{macro}{\leftmarginvi} +% \changes{v1.0m}{1994/01/12}{Use em instead of pt to remain +% compatible with old styles} +% \changes{v1.3q}{1995/12/20}{Temporary(?) fix: revert to setting +% \cs{leftmargin} at outer level} +% +% When we are in two column mode some of the margins are set somewhat +% smaller. +% \begin{macrocode} +\if@twocolumn + \setlength\leftmargini {2em} +\else + \setlength\leftmargini {2.5em} +\fi +% \end{macrocode} +% Until the whole of the parameter setting in these files is +% rationalised, we need to set the value of |\leftmargin| at this +% outer level. +% \begin{macrocode} +\leftmargin \leftmargini +% \end{macrocode} +% The following three are calculated so that they are larger than +% the sum of |\labelsep| and the width of the default labels (which +% are `(m)', `vii.' and `M.'). +% \begin{macrocode} +\setlength\leftmarginii {2.2em} +\setlength\leftmarginiii {1.87em} +\setlength\leftmarginiv {1.7em} +\if@twocolumn + \setlength\leftmarginv {.5em} + \setlength\leftmarginvi {.5em} +\else + \setlength\leftmarginv {1em} + \setlength\leftmarginvi {1em} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\labelsep} +% \begin{macro}{\labelwidth} +% \changes{v1.0m}{1994/01/12}{Use em instead of pt to remain +% compatible with old styles} +% |\labelsep| is the distance between the label and the text of an +% item; |\labelwidth| is the width of the label. +% \begin{macrocode} +\setlength \labelsep {.5em} +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\partopsep} +% When the user leaves a blank line before the environment an extra +% vertical space of |\partopsep| is inserted, in addition to +% |\parskip| and |\topsep|. +% \changes{v1.0m}{1994/01/12}{\cs{partopsep} should be different, +% depending on the pointsize} +% \begin{macrocode} +%</article|report|book> +%<10pt>\setlength\partopsep{2\p@ \@plus 1\p@ \@minus 1\p@} +%<11pt>\setlength\partopsep{3\p@ \@plus 1\p@ \@minus 1\p@} +%<12pt>\setlength\partopsep{3\p@ \@plus 2\p@ \@minus 2\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@beginparpenalty} +% \begin{macro}{\@endparpenalty} +% These penalties are inserted before and after a list or paragraph +% environment. They are set to a bonus value to encourage page +% breaking at these points. +% \begin{macro}{\@itempenalty} +% This penalty is inserted between list items. +% \begin{macrocode} +%<*article|report|book> +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty +%</article|report|book> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@listi} +% \begin{macro}{\@listI} +% |\@listi| defines the values of +% |\leftmargin|, |\parsep|, |\topsep|, |\itemsep|, etc.\ for the +% lists that appear on top-level. Its definition is modified by the +% font-size commands (eg within |\small| the list parameters get +% ``smaller'' values). +% +% For this reason \@listI is defined to hold a saved copy of \@listi +% so that |\normalsize| can switch all parameters back. +% +% \begin{macrocode} +%<*10pt|11pt|12pt> +\def\@listi{\leftmargin\leftmargini +%<*10pt> + \parsep 4\p@ \@plus2\p@ \@minus\p@ + \topsep 8\p@ \@plus2\p@ \@minus4\p@ + \itemsep4\p@ \@plus2\p@ \@minus\p@} +%</10pt> +%<*11pt> + \parsep 4.5\p@ \@plus2\p@ \@minus\p@ + \topsep 9\p@ \@plus3\p@ \@minus5\p@ + \itemsep4.5\p@ \@plus2\p@ \@minus\p@} +%</11pt> +%<*12pt> + \parsep 5\p@ \@plus2.5\p@ \@minus\p@ + \topsep 10\p@ \@plus4\p@ \@minus6\p@ + \itemsep5\p@ \@plus2.5\p@ \@minus\p@} +%</12pt> +\let\@listI\@listi +% \end{macrocode} +% We initialise the parameters although strictly speaking that +% is not necessary. +% \begin{macrocode} +\@listi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@listii} +% \begin{macro}{\@listiii} +% \begin{macro}{\@listiv} +% \begin{macro}{\@listv} +% \begin{macro}{\@listvi} +% Here are the same macros for the higher level lists. Note that +% they don't have saved versions and are not modified by the font +% size commands. In other words this class assumes that nested +% lists only appear in |\normalsize|, i.e.\ the main document size. +% \begin{macrocode} +\def\@listii {\leftmargin\leftmarginii + \labelwidth\leftmarginii + \advance\labelwidth-\labelsep +%<*10pt> + \topsep 4\p@ \@plus2\p@ \@minus\p@ + \parsep 2\p@ \@plus\p@ \@minus\p@ +%</10pt> +%<*11pt> + \topsep 4.5\p@ \@plus2\p@ \@minus\p@ + \parsep 2\p@ \@plus\p@ \@minus\p@ +%</11pt> +%<*12pt> + \topsep 5\p@ \@plus2.5\p@ \@minus\p@ + \parsep 2.5\p@ \@plus\p@ \@minus\p@ +%</12pt> + \itemsep \parsep} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii + \advance\labelwidth-\labelsep +%<10pt> \topsep 2\p@ \@plus\p@\@minus\p@ +%<11pt> \topsep 2\p@ \@plus\p@\@minus\p@ +%<12pt> \topsep 2.5\p@\@plus\p@\@minus\p@ + \parsep \z@ + \partopsep \p@ \@plus\z@ \@minus\p@ + \itemsep \topsep} +\def\@listiv {\leftmargin\leftmarginiv + \labelwidth\leftmarginiv + \advance\labelwidth-\labelsep} +\def\@listv {\leftmargin\leftmarginv + \labelwidth\leftmarginv + \advance\labelwidth-\labelsep} +\def\@listvi {\leftmargin\leftmarginvi + \labelwidth\leftmarginvi + \advance\labelwidth-\labelsep} +%</10pt|11pt|12pt> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Enumerate} +% +% The enumerate environment uses four counters: \Lcount{enumi}, +% \Lcount{enumii}, \Lcount{enumiii} and \Lcount{enumiv}, where +% \Lcount{enumN} controls the numbering of the Nth level +% enumeration. +% +% \begin{macro}{\theenumi} +% \begin{macro}{\theenumii} +% \begin{macro}{\theenumiii} +% \begin{macro}{\theenumiv} +% The counters are already defined in \file{latex.dtx}, but their +% representation is changed here. +% +% \begin{macrocode} +%<*article|report|book> +\renewcommand\theenumi{\@arabic\c@enumi} +\renewcommand\theenumii{\@alph\c@enumii} +\renewcommand\theenumiii{\@roman\c@enumiii} +\renewcommand\theenumiv{\@Alph\c@enumiv} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\labelenumi} +% \begin{macro}{\labelenumii} +% \begin{macro}{\labelenumiii} +% \begin{macro}{\labelenumiv} +% The label for each item is generated by the commands\\ +% |\labelenumi| \ldots\ |\labelenumiv|. +% \begin{macrocode} +\newcommand\labelenumi{\theenumi.} +\newcommand\labelenumii{(\theenumii)} +\newcommand\labelenumiii{\theenumiii.} +\newcommand\labelenumiv{\theenumiv.} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\p@enumii} +% \begin{macro}{\p@enumiii} +% \begin{macro}{\p@enumiv} +% The expansion of |\p@enumN||\theenumN| defines the output of a +% |\ref| command when referencing an item of the Nth level of an +% enumerated list. +% \begin{macrocode} +\renewcommand\p@enumii{\theenumi} +\renewcommand\p@enumiii{\theenumi(\theenumii)} +\renewcommand\p@enumiv{\p@enumiii\theenumiii} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Itemize} +% +% \begin{macro}{\labelitemi} +% \begin{macro}{\labelitemii} +% \changes{v1.2k}{1994/05/06}{Inserted \cs{normalfont}} +% \changes{v1.3s}{1996/08/24}{Replaced -{}- with \cs{textendash}} +% \changes{v1.3u}{1996/10/31}{Changed to \cs{textbullet}, +% \cs{textasteriskcentered} and \cs{textperiodcentered}} +% \begin{macro}{\labelitemiii} +% \begin{macro}{\labelitemiv} +% Itemization is controlled by four commands: |\labelitemi|, +% |\labelitemii|, |\labelitemiii|, and |\labelitemiv|, which define +% the labels of thevarious itemization levels: the symbols used are +% bullet, bold en-dash, centered asterisk and centred dot. +% +% \begin{macrocode} +\newcommand\labelitemi{\textbullet} +\newcommand\labelitemii{\normalfont\bfseries \textendash} +\newcommand\labelitemiii{\textasteriskcentered} +\newcommand\labelitemiv{\textperiodcentered} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Description} +% +% \begin{environment}{description} +% The description environment is defined here -- while the itemize +% and enumerate environments are defined in \file{latex.dtx}. +% +% \begin{macrocode} +\newenvironment{description} + {\list{}{\labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\descriptionlabel} +% To change the formatting of the label, you must redefine +% |\descriptionlabel|. +% +% \changes{v1.2k}{1994/05/06}{Inserted \cs{normalfont}} +% \changes{v1.2y}{1995/01/31}{made command short} +% \begin{macrocode} +\newcommand*\descriptionlabel[1]{\hspace\labelsep + \normalfont\bfseries #1} +% \end{macrocode} +% \end{macro} +% +% \subsection{Defining new environments} +% +% \subsubsection{Abstract} +% +% \begin{environment}{abstract} +% When we are producing a separate titlepage we also put the +% abstract on a page of its own. It will be centred vertically on +% the page. +% +% Note that this environment is not defined for books. +% \changes{v1.3e}{1995/06/19}{Added setting of \cs{@endparpenalty} +% to avoid page break after abstract heading.} +% \begin{macrocode} +% \changes{v1.3m}{1995/10/23}{Added setting of \cs{beginparpenalty} to +% discourage page break before abstract heading.} +%<*article|report> +\if@titlepage + \newenvironment{abstract}{% + \titlepage + \null\vfil + \@beginparpenalty\@lowpenalty + \begin{center}% + \bfseries \abstractname + \@endparpenalty\@M + \end{center}}% + {\par\vfil\null\endtitlepage} +% \end{macrocode} +% When we are not making a separate titlepage --the default for the +% article document class-- we have to check if we are in twocolumn +% mode. In that case the abstract is as a |\section*|, otherwise +% the quotation environment is used to typeset the abstract. +% \begin{macrocode} +\else + \newenvironment{abstract}{% + \if@twocolumn + \section*{\abstractname}% + \else + \small + \begin{center}% + {\bfseries \abstractname\vspace{-.5em}\vspace{\z@}}% + \end{center}% + \quotation + \fi} + {\if@twocolumn\else\endquotation\fi} +\fi +%</article|report> +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Verse} +% +% \begin{environment}{verse} +% The verse environment is defined by making clever use of the +% list environment's parameters. The user types |\\| to end a line. +% This is implemented by |\let|'ing |\\| equal |\@centercr|. +% +% \changes{v1.3j}{1995/08/16}{stop \cs{item} scanning for [ with +% \cs{relax}} +% \begin{macrocode} +\newenvironment{verse} + {\let\\\@centercr + \list{}{\itemsep \z@ + \itemindent -1.5em% + \listparindent\itemindent + \rightmargin \leftmargin + \advance\leftmargin 1.5em}% + \item\relax} + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Quotation} +% +% \begin{environment}{quotation} +% The quotation environment is also defined by making clever use of +% the list environment's parameters. The lines in the environment +% are set smaller than |\textwidth|. The first line of a paragraph +% inside this environment is indented. +% +% \changes{v1.3j}{1995/08/16}{stop \cs{item} scanning for [ with +% \cs{relax}} +% \begin{macrocode} +\newenvironment{quotation} + {\list{}{\listparindent 1.5em% + \itemindent \listparindent + \rightmargin \leftmargin + \parsep \z@ \@plus\p@}% + \item\relax} + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Quote} +% +% \begin{environment}{quote} +% The quote environment is like the quotation environment except +% that paragraphs are not indented. +% +% \changes{v1.3j}{1995/08/16}{stop \cs{item} scanning for [ with +% \cs{relax}} +% \begin{macrocode} +\newenvironment{quote} + {\list{}{\rightmargin\leftmargin}% + \item\relax} + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Theorem} +% +% This document class does not define it's own theorem environments, +% the defaults, supplied by \file{latex.dtx} are available. +% +% \subsubsection{Titlepage} +% +% \begin{environment}{titlepage} +% In the normal environments, the titlepage environment does nothing +% but start and end a page, and inhibit page numbers. In the report +% style, it also resets the page number to one, and then sets it +% back to one at the end. In compatibility mode, it sets the +% page number to zero. This is incorrect since it results in using +% the page parameters for a right-hand page but it is the way it was. +% In two-column style, it still makes a +% one-column page. +% +% \changes{v1.0g}{1993/12/09}{Moved the setting of +% \cs{@restonecolfalse}} +% \changes{v1.2c}{1994/03/17}{page :!= 0 only in compatibility mode +% (LL)} +% \changes{v1.2d}{1994/04/11}{Moved \cs{cleardoublepage} inside +% definition of titlepage environment} +% \changes{v1.3i}{1995/08/08}{New implementation with support for +% twoside and openright option} +% +% First we do give the definition for compatibility mode. +% \begin{macrocode} +\if@compatibility +\newenvironment{titlepage} + {% +%<book> \cleardoublepage + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse\newpage + \fi + \thispagestyle{empty}% + \setcounter{page}\z@ + }% + {\if@restonecol\twocolumn \else \newpage \fi + } +% \end{macrocode} +% +% And here is the one for native \LaTeXe{}. +% \begin{macrocode} +\else +\newenvironment{titlepage} + {% +%<book> \cleardoublepage + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse\newpage + \fi + \thispagestyle{empty}% + \setcounter{page}\@ne + }% + {\if@restonecol\twocolumn \else \newpage \fi +% \end{macrocode} +% If we are not in two-side mode the first page after the title page +% should also get page number 1. +% \begin{macrocode} + \if@twoside\else + \setcounter{page}\@ne + \fi + } +\fi +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Appendix} +% +% \begin{macro}{\appendix} +% +% The |\appendix| command is not really an environment, it is a +% macro that makes some changes in the way things are done. +% +% In the article document class the |\appendix| command must do the +% following: +% \begin{itemize} +% \item reset the section and subsection counters to zero, +% \item redefine |\thesection| to produce alphabetic appendix +% numbers. This redefinition is done globally to ensure that it +% survives even if |\appendix| is issued within an environment such +% as \texttt{multicols}. +% \end{itemize} +% +% \changes{1.3z}{1998/09/19}{Redefine \cs{thesection} globally (pr/2862)} +% \begin{macrocode} +%<*article> +\newcommand\appendix{\par + \setcounter{section}{0}% + \setcounter{subsection}{0}% + \gdef\thesection{\@Alph\c@section}} +%</article> +% \end{macrocode} +% +% In the report and book document classes the |\appendix| command +% must do the following: +% \begin{itemize} +% \item reset the chapter and section counters to zero, +% \item set |\@chapapp| to |\appendixname| (for messages), +% \item redefine the chapter counter to produce appendix numbers, +% \item possibly redefine the |\chapter| command if appendix titles +% and headings are to look different from chapter titles and +% headings. This redefinition is done globally to ensure that it +% survives even if |\appendix| is issued within an environment such +% as \texttt{multicols}. +% \end{itemize} +% +% \changes{1.3z}{1998/09/19}{Redefine \cs{thechapter} and +% \cs{@chapapp} globally (pr/2862)} +% \begin{macrocode} +%<*report|book> +\newcommand\appendix{\par + \setcounter{chapter}{0}% + \setcounter{section}{0}% + \gdef\@chapapp{\appendixname}% + \gdef\thechapter{\@Alph\c@chapter}} +%</report|book> +% \end{macrocode} +% \end{macro} +% +% \subsection{Setting parameters for existing environments} +% +% \subsubsection{Array and tabular} +% +% \begin{macro}{\arraycolsep} +% The columns in an array environment are separated by +% 2|\arraycolsep|. +% \begin{macrocode} +\setlength\arraycolsep{5\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tabcolsep} +% The columns in an tabular environment are separated by +% 2|\tabcolsep|. +% \begin{macrocode} +\setlength\tabcolsep{6\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\arrayrulewidth} +% The width of rules in the array and tabular environments is given +% by\\ |\arrayrulewidth|. +% \begin{macrocode} +\setlength\arrayrulewidth{.4\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\doublerulesep} +% The space between adjacent rules in the array and tabular +% environments is given by |\doublerulesep|. +% \begin{macrocode} +\setlength\doublerulesep{2\p@} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Tabbing} +% +% \begin{macro}{\tabbingsep} +% This controls the space that the |\'| command puts in. (See +% \LaTeX{} manual for an explanation.) +% \begin{macrocode} +\setlength\tabbingsep{\labelsep} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Minipage} +% +% \begin{macro}{\@minipagerestore} +% The macro |\@minipagerestore| is called upon entry to a minipage +% environment to set up things that are to be handled differently +% inside a minipage environment. In the current styles, it does +% nothing. +% \end{macro} +% +% \begin{macro}{\@mpfootins} +% Minipages have their own footnotes; |\skip||\@mpfootins| plays +% same r\^ole for footnotes in a minipage as |\skip||\footins| does +% for ordinary footnotes. +% +% \begin{macrocode} +\skip\@mpfootins = \skip\footins +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Framed boxes} +% +% \begin{macro}{\fboxsep} +% The space left by |\fbox| and |\framebox| between the box and the +% text in it. +% \begin{macro}{\fboxrule} +% The width of the rules in the box made by |\fbox| and |\framebox|. +% \begin{macrocode} +\setlength\fboxsep{3\p@} +\setlength\fboxrule{.4\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{Equation and eqnarray} +% +% \begin{macro}{\theequation} +% When within chapters, the equation counter will be reset at +% the beginning of a new chapter and the equation number will +% be prefixed by the chapter number. +% \changes{v1.3u}{1996/10/31}{Added test for non-zero chapter number} +% +% This code must follow the |\chapter| definition or, more exactly, +% the definition of the chapter counter. +% \begin{macrocode} +%<article>\renewcommand \theequation {\@arabic\c@equation} +%<*report|book> +\@addtoreset {equation}{chapter} +\renewcommand\theequation + {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@equation} +%</report|book> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jot} +% |\jot| is the extra space added between lines of an eqnarray +% environment. The default value is used. +% \begin{macrocode} +% \setlength\jot{3pt} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@eqnnum} +% The macro |\@eqnnum| defines how equation numbers are to appear in +% equations. Again the default is used. +% +% \begin{macrocode} +% \def\@eqnnum{(\theequation)} +% \end{macrocode} +% \end{macro} +% +% \subsection{Floating objects} +% +% The file \file{latex.dtx} only defines a number of tools with +% which floating objects can be defined. This is done in the +% document class. It needs to define the following macros for each +% floating object of type \texttt{TYPE} (e.g., \texttt{TYPE} = +% figure). +% +% \begin{description} +% \item[\texttt{\bslash fps@TYPE}] +% The default placement specifier for floats of type +% \texttt{TYPE}. +% +% \item[\texttt{\bslash ftype@TYPE}] +% The type number for floats of type \texttt{TYPE}. Each +% \texttt{TYPE} has associated a unique positive \texttt +% {TYPE} number, which is a power of two. E.g., figures might +% have type number 1, tables type number 2, programs type +% number 4, etc. +% +% \item[\texttt{\bslash ext@TYPE}] +% The file extension indicating the file on which the contents +% list for float type \texttt{TYPE} is stored. For example, +% |\ext@figure| = `lof'. +% +% \item[\texttt{\bslash fnum@TYPE}] +% A macro to generate the figure number for a caption. For +% example, |\fnum@TYPE| == `Figure |\thefigure|'. +% +% \item[\texttt{\bslash @makecaption}{\meta{num}}{\meta{text}}] +% A macro to make a caption, with \meta{num} the value produced +% by |\fnum@...| and \meta{text} the text of the caption. It +% can assume it's in a |\parbox| of the appropriate width. +% This will be used for \emph{all} floating objects. +% +% \end{description} +% +% The actual environment that implements a floating object such as +% a figure is defined using the macros |\@float| and |\end@float|, +% which are defined in \file{latex.dtx}. +% +% An environment that implements a single column floating object is +% started with |\@float{|\texttt{TYPE}|}[|\meta{placement}|]| of type +% \texttt{TYPE} with \meta{placement} as the placement specifier. +% The default value of \meta{PLACEMENT} is defined by |\fps@TYPE|. +% +% The environment is ended by |\end@float|. E.g., |\figure| == +% |\@float|{figure}, |\endfigure| == |\end@float|. +% +% \subsubsection{Figure} +% +% Here is the implementation of the figure environment. +% +% \begin{macro}{\c@figure} +% First we have to allocate a counter to number the figures. +% +% In the report and book document classes figures within chapters are +% numbered per chapter. +% \changes{v1.3u}{1996/10/31}{Added test for non-zero chapter number} +% \begin{macrocode} +%<*article> +\newcounter{figure} +\renewcommand \thefigure {\@arabic\c@figure} +%</article> +%<*report|book> +\newcounter{figure}[chapter] +\renewcommand \thefigure + {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@figure} +%</report|book> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fps@figure} +% \begin{macro}{\ftype@figure} +% \begin{macro}{\ext@figure} +% \begin{macro}{\num@figure} +% Here are the parameters for the floating objects of type `figure'. +% \changes{v1.4e}{2001/05/24}{Replaced tilde with \cs{nobreakspace} +% (pr/3310)} +% \begin{macrocode} +\def\fps@figure{tbp} +\def\ftype@figure{1} +\def\ext@figure{lof} +\def\fnum@figure{\figurename\nobreakspace\thefigure} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{environment}{figure} +% \begin{environment}{figure*} +% And the definition of the actual environment. The form with the +% |*| is used for double column figures. +% \begin{macrocode} +\newenvironment{figure} + {\@float{figure}} + {\end@float} +\newenvironment{figure*} + {\@dblfloat{figure}} + {\end@dblfloat} +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% \subsubsection{Table} +% +% Here is the implementation of the table environment. It is very +% much the same as the figure environment. +% +% \begin{macro}{\c@table} +% First we have to allocate a counter to number the tables. +% +% In the report and book document classes tables within chapters are +% numbered per chapter. +% \changes{v1.3u}{1996/10/31}{Added test for non-zero chapter number} +% \begin{macrocode} +%<*article> +\newcounter{table} +\renewcommand\thetable{\@arabic\c@table} +%</article> +%<*report|book> +\newcounter{table}[chapter] +\renewcommand \thetable + {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@table} +%</report|book> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fps@table} +% \begin{macro}{\ftype@table} +% \begin{macro}{\ext@table} +% \begin{macro}{\num@table} +% Here are the parameters for the floating objects of type `table'. +% \changes{v1.4e}{2001/05/24}{Replaced tilde with \cs{nobreakspace} +% (pr/3310)} +% \begin{macrocode} +\def\fps@table{tbp} +\def\ftype@table{2} +\def\ext@table{lot} +\def\fnum@table{\tablename\nobreakspace\thetable} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{environment}{table} +% \begin{environment}{table*} +% And the definition of the actual environment. The form with the +% |*| is used for double column tables. +% \begin{macrocode} +\newenvironment{table} + {\@float{table}} + {\end@float} +\newenvironment{table*} + {\@dblfloat{table}} + {\end@dblfloat} +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% \subsubsection{Captions} +% +% \begin{macro}{\@makecaption} +% The |\caption| command calls |\@makecaption| to format the +% caption of floating objects. It gets two arguments, +% \meta{number}, the number of the floating object and \meta{text}, +% the text of the caption. Usually \meta{number} contains a string +% such as `Figure 3.2'. The macro can assume it is called inside a +% |\parbox| of right width, with |\normalsize|. +% +% \begin{macro}{\abovecaptionskip} +% \begin{macro}{\belowcaptionskip} +% These lengths contain the amount of white space to leave above +% and below the caption. +% \begin{macrocode} +\newlength\abovecaptionskip +\newlength\belowcaptionskip +\setlength\abovecaptionskip{10\p@} +\setlength\belowcaptionskip{0\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% The definition of this macro is |\long| in order to allow more +% then one paragraph in a caption. +% \begin{macrocode} +\long\def\@makecaption#1#2{% + \vskip\abovecaptionskip +% \end{macrocode} +% We want to see if the caption fits on one line on the page, +% therefore we first typeset it in a temporary box. +% \changes{v1.2q}{1994/05/29}{Use \cs{sbox}\cs{@tempboxa} instead of +% \cs{setbox}\cs{@tempboxa}\cs{hbox} to make this colour safe} +% \begin{macrocode} + \sbox\@tempboxa{#1: #2}% +% \end{macrocode} +% We can the measure its width. It that is larger than the current +% |\hsize| we typeset the caption as an ordinary paragraph. +% \begin{macrocode} + \ifdim \wd\@tempboxa >\hsize + #1: #2\par +% \end{macrocode} +% If the caption fits, we center it. Because this uses an |\hbox| +% directly in vertical mode, it does not execute the |\everypar| +% tokens; the only thing that could be needed here is resetting the +% `minipage flag' so we do this explicitly. +% \changes{v1.2x}{1994/12/09}{Due to a change in the way floats are +% handled we need to set the \cs{if@minipage} switch to false} +% \begin{macrocode} + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} +% \end{macrocode} +% \end{macro} +% +% \subsection{Font changing} +% +% Here we supply the declarative font changing commands that were +% common in \LaTeX\ version 2.09 and earlier. These commands work +% in text mode \emph{and} in math mode. They are provided for +% compatibility, but one should start using the |\text...| and +% |\math...| commands instead. These commands are defined using +% |\DeclareTextFontCommand|, a command with three arguments: the +% user command to be defined; \LaTeX\ commands to execute in text +% mode and \LaTeX\ commands to execute in math mode. +% +% \changes{v1.0g}{1993/12/12}{Distinguished between compatibility and +% `normal' mode for the font changing commands.} +% \changes{v1.0h}{1993/12/18}{These are now defined in the kernel, so +% use \cs{@renewfontswitch}. Compatibility mode defines +% \cs{@renewfontswitch} to do nothing, so we don't need to check +% for compatibility mode any more.} +% \changes{v1.0j}{1993/12/20}{Added \cs{normalfont} back in the +% definitions of \cs{rm} etc. as this should be the default +% behaviour} +% \changes{v1.2e}{1994/04/14}{\cs{@renewfontswitch} has become +% \cs{DeclareOldFontCommand}} +% +% \begin{macro}{\rm} +% \changes{v1.0f}{1993/12/08}{Macro added} +% \begin{macro}{\tt} +% \changes{v1.0f}{1993/12/08}{Macro added} +% \begin{macro}{\sf} +% \changes{v1.0f}{1993/12/08}{Macro added} +% +% The commands to change the family. When in compatibility mode we +% select the `default' font first, to get \LaTeX2.09 behviour. +% \begin{macrocode} +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bf} +% \changes{v1.0f}{1993/12/08}{Macro added} +% The command to change to the bold series. One should use +% |\mdseries| to explicitly switch back to medium series. +% \begin{macrocode} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\sl} +% \changes{v1.0f}{1993/12/08}{Macro added} +% \changes{v1.2g}{1994/04/24}{Added warning if used in math mode} +% \begin{macro}{\it} +% \changes{v1.0f}{1993/12/08}{Macro added} +% \begin{macro}{\sc} +% \changes{v1.0f}{1993/12/08}{Macro added} +% \changes{v1.2g}{1994/04/24}{Added warning if used in math mode} +% +% And the commands to change the shape of the font. The slanted and +% small caps shapes are not available by default as math alphabets, +% so those changes do nothing in math mode. However, we do warn the +% user that the selection will not have any effect.One should use +% |\upshape| to explicitly change back to the upright shape. +% \begin{macrocode} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cal} +% \changes{v1.0g}{1993/12/12}{Macro added} +% \begin{macro}{\mit} +% \changes{v1.0g}{1993/12/12}{Macro added} +% +% The commands |\cal| and |\mit| should only be used in math mode, +% outside math mode they have no effect. Currently the New Font +% Selection Scheme defines these commands to generate warning +% messages. Therefore we have to define them `by hand'. +% \changes{v1.2w}{1994/12/01}{Now define \cs{cal} and \cs{mit} using +% \cs{DeclareRobustCommand*}} +% \changes{v1.3j}{1995/08/16}{Remove surplus braces} +% \begin{macrocode} +\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} +\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \section{Cross Referencing} +% \subsection{Table of Contents, etc.} +% +% A |\section| command writes a +% |\contentsline{section}{|\meta{title}|}{|\meta{page}|}| command +% on the \file{.toc} file, where \meta{title} contains the +% contents of the entry and \meta{page} is the page number. If +% sections are being numbered, then \meta{title} will be of the +% form |\numberline{|\meta{num}|}{|\meta{heading}|}| where +% \meta{num} is the number produced by |\thesection|. Other +% sectioning commands work similarly. +% +% A |\caption| command in a `figure' environment writes +% +% |\contentsline{figure}{\numberline{|\meta{num}|}{|% +% \meta{caption}|}}{|\meta{page}|}| +% +% on the .\file{lof} file, where \meta{num} is the number produced +% by |\thefigure| and \meta{caption} is the figure caption. It +% works similarly for a `table' environment. +% +% The command |\contentsline{|\meta{name}|}| expands to +% |\l@|\meta{name}. So, to specify the table of contents, we must +% define |\l@chapter|, |\l@section|, |\l@subsection|, ... ; to +% specify the list of figures, we must define |\l@figure|; and so +% on. Most of these can be defined with the |\@dottedtocline| +% command, which works as follows. +% +% |\@dottedtocline{|\meta{level}|}{|\meta{indent}|}{|^^A +% \meta{numwidth}|}{|^^A +% \meta{title}|}{|\meta{page}|}| +% +% \begin{description} +% \item[\meta{level}] An entry is produced only if\meta{ level} +% $<=$ value of the \Lcount{tocdepth} counter. Note, +% |\chapter| is level 0, |\section| is level 1, etc. +% \item[\meta{indent}] The indentation from the outer left margin +% of the start of the contents line. +% \item[\meta{numwidth}] The width of a box in which the section +% number is to go, if \meta{title} includes a |\numberline| +% command. +% \end{description} +% +% \begin{macro}{\@pnumwidth} +% \begin{macro}{\@tocrmarg} +% \begin{macro}{\@dotsep} +% This command uses the following three parameters, which are set +% with a |\newcommand| (so em's can be used to make them depend upon +% the font). +% \begin{description} +% \item[\texttt{\bslash @pnumwidth}] The width of a box in which the +% page number is put. +% \changes{v1.2v}{1994/10/29}{Changed documentation from $!>$ or $!=$ to +% $\ge$} +% \item[\texttt{\bslash @tocrmarg}] The right margin for multiple +% line entries. One wants |\@tocrmarg| $\ge$ |\@pnumwidth| +% \item[\texttt{\bslash @dotsep}] Separation between dots, in mu +% units. Should be defined as a number like 2 or 1.7 +% \end{description} +% +% \begin{macrocode} +\newcommand\@pnumwidth{1.55em} +\newcommand\@tocrmarg{2.55em} +\newcommand\@dotsep{4.5} +%<article>\setcounter{tocdepth}{3} +%<!article>\setcounter{tocdepth}{2} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Table of Contents} +% +% \begin{macro}{\tableofcontents} +% This macro is used to request that \LaTeX{} produces a table of +% contents. In the report and book document classes the tables of +% contents, figures etc. are always set in single-column style. +% +% \changes{v1.0g}{1993/12/09}{Moved the setting of +% \cs{@restonecolfalse}} +% \begin{macrocode} +\newcommand\tableofcontents{% +%<*report|book> + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi +% \end{macrocode} +% The title is set using the |\chapter*| command, making sure that +% the running head --if one is required-- contains the right +% information. +% \begin{macrocode} + \chapter*{\contentsname +%</report|book> +%<article> \section*{\contentsname + \@mkboth{% + \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}% +% \end{macrocode} +% The the actual table of contents is made by calling +% |\@starttoc{toc}|. After that we restore twocolumn mode if +% necessary. +% \begin{macrocode} + \@starttoc{toc}% +%<!article> \if@restonecol\twocolumn\fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@part} +% Each sectioning command needs an additional macro to format its +% entry in the table of contents, as described above. The macro for +% the entry for parts is defined in a special way. +% +% First we make sure that if a pagebreak should occur, it occurs +% \emph{before} this entry. Also a little whitespace is added and a +% group begun to keep changes local. +% \changes{v1.0h}{1993/12/18}{Replaced -\cs{@secpenalty} by +% \cs{@secpenalty}. ASAJ.} +% \changes{v1.2i}{1994/04/28}{Don't print a toc line when the tocdepth +% counter is less then -1} +% \changes{v1.3b}{1995/05/23}{Added missing braces around argument +% to \cs{addpenalty}.} +% \changes{v1.3x}{1997/10/10}{Removed setting of \cs{@tempdima} as +% this macro does not use \cs{numberline} to set the toc line.} +% \changes{v1.4a}{1998/10/12}{we should use \cs{@tocrmarg}; see PR/2881.} +% \begin{macrocode} +\newcommand*\l@part[2]{% + \ifnum \c@tocdepth >-2\relax +%<article> \addpenalty\@secpenalty +%<!article> \addpenalty{-\@highpenalty}% + \addvspace{2.25em \@plus\p@}% +% \end{macrocode} +% The macro |\numberline| requires that the width of the box that +% holds the part number is stored in \LaTeX's scratch register +% |\@tempdima|. Therefore we initialize it there even though we do +% not use |\numberline| internally---the value used is quite large +% so that something like |\numberline{VIII}| would still work. +% \changes{v1.4d}{2001/04/21}{Initialize \cs{@tempdima} to some +% sensible value (pr/3327)} +% \begin{macrocode} + \setlength\@tempdima{3em}% + \begingroup +% \end{macrocode} +% We set |\parindent| to 0pt and use |\rightskip| to leave +% enough room for the pagenumbers.\footnote{^^A +% We should really set \cs{rightskip} to \cs{@tocrmarg} instead +% of \cs{@pnumwidth} (no version of {\LaTeX} ever did this), +% otherwise the \cs{rightskip} is too small. +% Unfortunately this can't be changed in {\LaTeXe} as we don't +% want to create different versions of {\LaTeXe} which produce +% different typset output unless this is absolutely necessary; +% instead we suspend it for \LaTeX3.} +% To prevent overfull box messages the |\parfillskip| is set to a +% negative value. +% \begin{macrocode} + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth +% \end{macrocode} +% Now we can set the entry, in a large bold font. We make sure to +% leave vertical mode, set the part title and add the pagenumber, +% set flush right. +% \begin{macrocode} + {\leavevmode + \large \bfseries #1\hfil \hb@xt@\@pnumwidth{\hss #2}}\par +% \end{macrocode} +% Prevent a pagebreak immediately after this entry, but use +% |\everypar| to reset the |\if@nobreak| switch. Finally we close +% the group. +% \changes{v1.3j}{1995/08/16}{Add missing percent} +% \begin{macrocode} + \nobreak +%<article> \if@compatibility + \global\@nobreaktrue + \everypar{\global\@nobreakfalse\everypar{}}% +%<article> \fi + \endgroup + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@chapter} +% This macro formats the entries in the table of contents for +% chapters. It is very similar to |\l@part| +% +% First we make sure that if a pagebreak should occur, it occurs +% \emph{before} this entry. Also a little whitespace is added and a +% group begun to keep changes local. +% \changes{v1.2i}{1994/04/28}{Don't print a toc line when the tocdepth +% counter is less than 0} +% \changes{v1.3b}{1995/05/23}{Added missing braces around argument +% to \cs{addpenalty}.} +% \changes{v1.4a}{1998/10/12}{we should use \cs{@tocrmarg}; see PR/2881.} +% \begin{macrocode} +%<*report|book> +\newcommand*\l@chapter[2]{% + \ifnum \c@tocdepth >\m@ne + \addpenalty{-\@highpenalty}% + \vskip 1.0em \@plus\p@ +% \end{macrocode} +% +% The macro |\numberline| requires that the width of the box that +% holds the part number is stored in \LaTeX's scratch register +% |\@tempdima|. Therefore we initialize it there even though we do +% not use |\numberline| internally (the position as well as the +% values seems questionable but can't be changed without producing +% compatibility problems). We begin a group, and change +% some of the paragraph parameters (see also the remark at +% \cs{l@part} regarding \cs{rightskip}). +% \begin{macrocode} + \setlength\@tempdima{1.5em}% + \begingroup + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth +% \end{macrocode} +% Then we leave vertical mode and switch to a bold font. +% \begin{macrocode} + \leavevmode \bfseries +% \end{macrocode} +% Because we do not use |\numberline| here, we have do some fine +% tuning `by hand', before we can set the entry. We discourage but +% not disallow a pagebreak immediately after a chapter entry. +% \begin{macrocode} + \advance\leftskip\@tempdima + \hskip -\leftskip + #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par + \penalty\@highpenalty + \endgroup + \fi} +%</report|book> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@section} +% In the article document class the entry in the table of contents +% for sections looks much like the chapter entries for the report +% and book document classes. +% +% First we make sure that if a pagebreak should occur, it occurs +% \emph{before} this entry. Also a little whitespace is added and a +% group begun to keep changes local. +% \changes{v1.0h}{1993/12/18}{Replaced -\cs{@secpenalty} by +% \cs{@secpenalty}. ASAJ.} +% \changes{v1.2i}{1994/04/28}{Don't print a toc line when the tocdepth +% counter is less than 1.} +% \changes{v1.4a}{1998/10/12}{we should use \cs{@tocrmarg}; see PR/2881.} +% \begin{macrocode} +%<*article> +\newcommand*\l@section[2]{% + \ifnum \c@tocdepth >\z@ + \addpenalty\@secpenalty + \addvspace{1.0em \@plus\p@}% +% \end{macrocode} +% +% The macro |\numberline| requires that the width of the box that +% holds the part number is stored in \LaTeX's scratch register +% |\@tempdima|. Therefore we put it there. We begin a group, and +% change some of the paragraph parameters (see also the remark at +% \cs{l@part} regarding \cs{rightskip}). +% \begin{macrocode} + \setlength\@tempdima{1.5em}% + \begingroup + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth +% \end{macrocode} +% Then we leave vertical mode and switch to a bold font. +% \begin{macrocode} + \leavevmode \bfseries +% \end{macrocode} +% Because we do not use |\numberline| here, we have do some fine +% tuning `by hand', before we can set the entry. We discourage but +% not disallow a pagebreak immediately after a chapter entry. +% \begin{macrocode} + \advance\leftskip\@tempdima + \hskip -\leftskip + #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par + \endgroup + \fi} +%</article> +% \end{macrocode} +% In the report and book document classes the definition for +% |\l@section| is much simpler. +% \begin{macrocode} +%<*report|book> +\newcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}} +%</report|book> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@subsection} +% \begin{macro}{\l@subsubsection} +% \begin{macro}{\l@paragraph} +% \begin{macro}{\l@subparagraph} +% All lower level entries are defined using the macro +% |\@dottedtocline| (see above). +% \begin{macrocode} +%<*article> +\newcommand*\l@subsection{\@dottedtocline{2}{1.5em}{2.3em}} +\newcommand*\l@subsubsection{\@dottedtocline{3}{3.8em}{3.2em}} +\newcommand*\l@paragraph{\@dottedtocline{4}{7.0em}{4.1em}} +\newcommand*\l@subparagraph{\@dottedtocline{5}{10em}{5em}} +%</article> +%<*report|book> +\newcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}} +\newcommand*\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}} +\newcommand*\l@paragraph{\@dottedtocline{4}{10em}{5em}} +\newcommand*\l@subparagraph{\@dottedtocline{5}{12em}{6em}} +%</report|book> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{List of figures} +% +% \begin{macro}{\listoffigures} +% This macro is used to request that \LaTeX{} produces a list of +% figures. It is very similar to |\tableofcontents|. +% +% \changes{v1.0g}{1993/12/09}{Moved the setting of +% \cs{@restonecolfalse}} +% \changes{v1.4c}{2001/01/06}{Moved \cs{@mkboth} out of heading +% arg (pr/3285)} +% \begin{macrocode} +\newcommand\listoffigures{% +%<*report|book> + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \chapter*{\listfigurename}% +%</report|book> +%<article> \section*{\listfigurename}% + \@mkboth{\MakeUppercase\listfigurename}% + {\MakeUppercase\listfigurename}% + \@starttoc{lof}% +%<report|book> \if@restonecol\twocolumn\fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@figure} +% This macro produces an entry in the list of figures. +% \begin{macrocode} +\newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{List of tables} +% +% \begin{macro}{\listoftables} +% This macro is used to request that \LaTeX{} produces a list of +% tables. It is very similar to |\tableofcontents|. +% +% \changes{v1.0g}{1993/12/09}{Moved the setting of +% \cs{@restonecolfalse}} +% \changes{v1.4c}{2001/01/06}{Moved \cs{@mkboth} out of heading +% arg (pr/3285)} +% \begin{macrocode} +\newcommand\listoftables{% +%<*report|book> + \if@twocolumn + \@restonecoltrue\onecolumn + \else + \@restonecolfalse + \fi + \chapter*{\listtablename}% +%</report|book> +%<article> \section*{\listtablename}% + \@mkboth{% + \MakeUppercase\listtablename}% + {\MakeUppercase\listtablename}% + \@starttoc{lot}% +%<report|book> \if@restonecol\twocolumn\fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\l@table} +% This macro produces an entry in the list of tables. +% \begin{macrocode} +\let\l@table\l@figure +% \end{macrocode} +% \end{macro} +% +% \subsection{Bibliography} +% +% \begin{macro}{\bibindent} +% The ``open'' bibliography format uses an indentation of +% |\bibindent|. +% \begin{macrocode} +\newdimen\bibindent +\setlength\bibindent{1.5em} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{thebibliography} +% The `thebibliography' environment executes the following +% commands: +% +% |\renewcommand{\newblock}{\hskip.11em \@plus.33em \@minus.07em}|\\ +% --- Defines the ``closed'' format, where the blocks (major units +% of information) of an entry run together. +% +% |\sloppy| --- Used because it's rather hard to do line breaks in +% bibliographies, +% +% |\sfcode`\.=1000\relax| --- +% Causes a `.' (period) not to produce an end-of-sentence space. +% +% The implementation of this environment is based on the generic +% list environment. It uses the \Lcount{enumiv} counter internally +% to generate the labels of the list. +% +% When an empty `thebibliography' environment is found, a warning +% is issued. +% +% \changes{v1.0i}{1993/12/19}{Corrected definition of thebibliography +% for article} +% \changes{v1.2z}{1995/05/09}{added a missing percent character} +% \changes{v1.3b}{1995/05/23}{Added missing braces in definition +% of thebibliography environment.} +% \changes{v1.3j}{1995/08/16}{remove surplus spaces} +% \changes{v1.3k}{1995/08/27}{Code for openbib changed} +% \changes{v1.3t}{1996/10/05}{Added setting value of \cs{@clubpenalty}} +% \begin{macrocode} +\newenvironment{thebibliography}[1] +%<*article> + {\section*{\refname}% +% \end{macrocode} +% The |\@mkboth| was moved out of the heading argument since at +% least in report and book (twocolumn option) there are definitions +% for |\chapter| which would swallow it otherwise. +% \changes{v1.4c}{2001/01/06}{Moved \cs{@mkboth} out of heading +% arg (pr/3285)} +% \begin{macrocode} + \@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}% +%</article> +%<*!article> + {\chapter*{\bibname}% + \@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}% +%</!article> + \list{\@biblabel{\@arabic\c@enumiv}}% + {\settowidth\labelwidth{\@biblabel{#1}}% + \leftmargin\labelwidth + \advance\leftmargin\labelsep + \@openbib@code + \usecounter{enumiv}% + \let\p@enumiv\@empty + \renewcommand\theenumiv{\@arabic\c@enumiv}}% + \sloppy +% \end{macrocode} +% This is setting the normal (non-infinite) value of +% |\clubpenalty| for the whole of this environment, +% so we must reset its stored value also. (Why is there a |%| after +% the second 4000 below?) +% \begin{macrocode} + \clubpenalty4000 + \@clubpenalty \clubpenalty + \widowpenalty4000% + \sfcode`\.\@m} + {\def\@noitemerr + {\@latex@warning{Empty `thebibliography' environment}}% + \endlist} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\newblock} +% The default definition for |\newblock| is to produce a small space. +% \changes{v1.3k}{1995/08/27}{Default changed.} +% \begin{macrocode} +\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@openbib@code} +% The default definition for |\@openbib@code| is to do nothing. +% It will be changed by the \Lopt{openbib} option. +% \changes{v1.3k}{1995/08/27}{Macro added} +% \begin{macrocode} +\let\@openbib@code\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@biblabel} +% The label for a |\bibitem[...]| command is produced by this +% macro. The default from \file{latex.dtx} is used. +% \begin{macrocode} +% \renewcommand*{\@biblabel}[1]{[#1]\hfill} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@cite} +% The output of the |\cite| command is produced by this macro. The +% default from \file{latex.dtx} is used. +% \begin{macrocode} +% \renewcommand*{\@cite}[1]{[#1]} +% \end{macrocode} +% \end{macro} +% +% \subsection{The index} +% +% \begin{environment}{theindex} +% The environment `theindex' can be used for indices. It makes an +% index with two columns, with each entry a separate paragraph. At +% the user level the commands |\item|, |\subitem| and |\subsubitem| +% are used to produce index entries of various levels. When a new +% letter of the alphabet is encountered an amount of |\indexspace| +% white space can be added. +% +% +% \changes{v1.0g}{1993/12/09}{Moved the setting of +% \cs{@restonecoltrue}} +% \begin{macrocode} +\newenvironment{theindex} + {\if@twocolumn + \@restonecolfalse + \else + \@restonecoltrue + \fi +%<article> \twocolumn[\section*{\indexname}]% +%<!article> \twocolumn[\@makeschapterhead{\indexname}]% + \@mkboth{\MakeUppercase\indexname}% + {\MakeUppercase\indexname}% + \thispagestyle{plain}\parindent\z@ +% \end{macrocode} +% Parameter changes to |\columnseprule| and |\columnsep| have to be +% done after |\twocolumn| has acted. Otherwise they can affect the +% last page before the index. +% \changes{ v1.4f}{2004/02/16}{Moved setting of \cs{columnsep} and +% \cs{columnseprule} later to avoid affecting the wrong page (pr/3616)} +% \begin{macrocode} + \parskip\z@ \@plus .3\p@\relax + \columnseprule \z@ + \columnsep 35\p@ + \let\item\@idxitem} +% \end{macrocode} +% When the document continues after the index and it was a one +% column document we have to switch back to one column after the +% index. +% \begin{macrocode} + {\if@restonecol\onecolumn\else\clearpage\fi} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\@idxitem} +% \begin{macro}{\subitem} +% \begin{macro}{\subsubitem} +% These macros are used to format the entries in the index. ^^AA ??? +% \changes{v1.3f}{1995/06/23}{Corrected error in definition of +% \cs{@idxitem}.} +% \changes{v1.3j}{1995/08/16}{use \cs{@idxitem} to save space} +% \begin{macrocode} +\newcommand\@idxitem{\par\hangindent 40\p@} +\newcommand\subitem{\@idxitem \hspace*{20\p@}} +\newcommand\subsubitem{\@idxitem \hspace*{30\p@}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\indexspace} +% The amount of white space that is inserted between `letter +% blocks' in the index. +% \begin{macrocode} +\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax} +% \end{macrocode} +% \end{macro} +% +% \subsection{Footnotes} +% +% \begin{macro}{\footnoterule} +% Usually, footnotes are separated from the main body of the text +% by a small rule. This rule is drawn by the macro |\footnoterule|. +% We have to make sure that the rule takes no vertical space (see +% \file{plain.tex}) so we compensate for the natural heigth of the +% rule of 0.4pt by adding the right amount of vertical skip. +% +% To prevent the rule from colliding with the footnote we first add +% a little negative vertical skip, then we put the rule and make +% sure we end up at the same point where we begun this operation. +% \changes{v1.3a}{1995/05/17}{use \cs{@width}} +% \begin{macrocode} +\renewcommand\footnoterule{% + \kern-3\p@ + \hrule\@width.4\columnwidth + \kern2.6\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@footnote} +% Footnotes are numbered within chapters in the report and book +% document styles. +% \begin{macrocode} +%<!article>\@addtoreset{footnote}{chapter} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makefntext} +% The footnote mechanism of \LaTeX{} calls the macro |\@makefntext| +% to produce the actual footnote. The macro gets the text of the +% footnote as its argument and should use |\@thefnmark| as the mark +% of the footnote. The macro |\@makefntext|is called when +% effectively inside a |\parbox| of width |\columnwidth| (i.e., +% with |\hsize| = |\columnwidth|). +% +% An example of what can be achieved is given by the following piece +% of \TeX\ code. +% \begin{verbatim} +% \newcommand\@makefntext[1]{% +% \@setpar{\@@par +% \@tempdima = \hsize +% \advance\@tempdima-10pt +% \parshape \@ne 10pt \@tempdima}% +% \par +% \parindent 1em\noindent +% \hbox to \z@{\hss\@makefnmark}#1} +% \end{verbatim} +% The effect of this definition is that all lines of the footnote +% are indented by 10pt, while the first line of a new paragraph is +% indented by 1em. To change these dimensions, just substitute the +% desired value for `10pt' (in both places) or `1em'. The mark is +% flushright against the footnote. +% +% In these document classes we use a simpler macro, in which the +% footnote text is set like an ordinary text paragraph, with no +% indentation except on the first line of a paragraph, and the +% first line of the footnote. Thus, all the macro must do is set +% |\parindent| to the appropriate value for succeeding paragraphs +% and put the proper indentation before the mark. +% +% \changes{v1.1a}{1994/03/13}{Use \cs{@makefnmark} to generate +% footnote marker} +% \begin{macrocode} +\newcommand\@makefntext[1]{% + \parindent 1em% + \noindent + \hb@xt@1.8em{\hss\@makefnmark}#1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makefnmark} +% The footnote markers that are printed in the text to point to the +% footnotes should be produced by the macro |\@makefnmark|. We use +% the default definition for it. +% \begin{macrocode} +%\renewcommand\@makefnmark{\hbox{\@textsuperscript +% {\normalfont\@thefnmark}}} +% \end{macrocode} +% \end{macro} +% +% \section{Initialization} +% +% \subsection{Words} +% +% This document class is for documents prepared in the English language. +% To prepare a version for another language, various English words must +% be replaced. All the English words that require replacement are +% defined below in command names. These commands may be redefined in +% any class or package that is customising \LaTeX\ for use with +% non-English languages. +% \changes{v1.3h}{1995/07/20}{Split up to save save stack /1742} +% +% \begin{macro}{\contentsname} +% \begin{macro}{\listfigurename} +% \begin{macro}{\listtablename} +% \begin{macrocode} +\newcommand\contentsname{Contents} +\newcommand\listfigurename{List of Figures} +\newcommand\listtablename{List of Tables} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\refname} +% \begin{macro}{\bibname} +% \begin{macro}{\indexname} +% \begin{macrocode} +%<article>\newcommand\refname{References} +%<report|book>\newcommand\bibname{Bibliography} +\newcommand\indexname{Index} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\figurename} +% \begin{macro}{\tablename} +% \begin{macrocode} +\newcommand\figurename{Figure} +\newcommand\tablename{Table} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\partname} +% \begin{macro}{\chaptername} +% \begin{macro}{\appendixname} +% \begin{macro}{\abstractname} +% \begin{macrocode} +\newcommand\partname{Part} +%<report|book>\newcommand\chaptername{Chapter} +\newcommand\appendixname{Appendix} +%<!book>\newcommand\abstractname{Abstract} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Date} +% +% \begin{macro}{\today} +% This macro uses the \TeX\ primitives |\month|, |\day| and |\year| +% to provide the date of the \LaTeX-run. +% +% At |\begin{document}| this definition will be optimised +% so that the names of all the `wrong' months are not stored. +% This optimisation is not done here as that would `freeze' +% |\today| in any special purpose format made by loading the class +% file into the format file. +% \changes{v1.3j}{1995/08/16}{use \cs{edef} to save a lot of space} +% \changes{v1.3w}{1997/10/06}{use \cs{def} again, latex/2620} +% \begin{macrocode} +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} +% \end{macrocode} +% \end{macro} +% +% \subsection{Two column mode} +% +% \begin{macro}{\columnsep} +% This gives the distance between two columns in two column mode. +% \begin{macrocode} +\setlength\columnsep{10\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\columnseprule} +% This gives the width of the rule between two columns in two +% column mode. We have no visible rule. +% \begin{macrocode} +\setlength\columnseprule{0\p@} +% \end{macrocode} +% \end{macro} +% +% \subsection{The page style} +% We have \pstyle{plain} pages in the document classes article and +% report unless the user specified otherwise. In the `book' +% document class we use the page style \pstyle{headings} by +% default. We use arabic pagenumbers. +% \begin{macrocode} +%<!book>\pagestyle{plain} +%<book>\pagestyle{headings} +\pagenumbering{arabic} +% \end{macrocode} +% +% \subsection{Single or double sided printing} +% +% +% \changes{v1.2v}{1994/11/10}{removed typo} +% When the \Lopt{twoside} option wasn't specified, we don't try to +% make each page as long as all the others. +% \begin{macrocode} +\if@twoside +\else + \raggedbottom +\fi +% \end{macrocode} +% When the \Lopt{twocolumn} option was specified we call +% |\twocolumn| to activate this mode. We try to make each column as +% long as the others, but call |sloppy| to make our life easier. +% \begin{macrocode} +\if@twocolumn + \twocolumn + \sloppy + \flushbottom +% \end{macrocode} +% Normally we call |\onecolumn| to initiate typesetting in one +% column. +% \begin{macrocode} +\else + \onecolumn +\fi +%</article|report|book> +% \end{macrocode} +% +% \changes{v1.3i}{1995/08/09}{Moved code for generic class options +% leqno and fleqn to kernel file} +% +% \Finale +% +\endinput + diff --git a/Master/texmf-dist/source/latex/base/classes.ins b/Master/texmf-dist/source/latex/base/classes.ins new file mode 100644 index 00000000000..0ae699f7832 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/classes.ins @@ -0,0 +1,113 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\generate{\file{article.cls}{\from{classes.dtx}{article}} + \file{report.cls}{\from{classes.dtx}{report}} + \file{book.cls}{\from{classes.dtx}{book}} + \file{size10.clo}{\from{classes.dtx}{10pt}} + \file{size11.clo}{\from{classes.dtx}{11pt}} + \file{size12.clo}{\from{classes.dtx}{12pt}} + \file{bk10.clo}{\from{classes.dtx}{10pt,bk}} + \file{bk11.clo}{\from{classes.dtx}{11pt,bk}} + \file{bk12.clo}{\from{classes.dtx}{12pt,bk}} + } + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space article.cls} +\Msg{* \space\space report.cls} +\Msg{* \space\space book.cls} +\Msg{* \space\space size10.clo} +\Msg{* \space\space size11.clo} +\Msg{* \space\space size12.clo} +\Msg{* \space\space bk10.clo} +\Msg{* \space\space bk11.clo} +\Msg{* \space\space bk12.clo} +\Msg{* \space\space leqno.clo} +\Msg{* \space\space fleqn.clo} +\Msg{*} +\Msg{* To produce the documentation run the files ending with} +\Msg{* `.dtx' through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} +} + +\endbatchfile + diff --git a/Master/texmf-dist/source/latex/base/cmextra.ins b/Master/texmf-dist/source/latex/base/cmextra.ins new file mode 100644 index 00000000000..88df1a1a397 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/cmextra.ins @@ -0,0 +1,142 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +In particular, permission is granted to customize the declarations in +this file to serve the needs of your installation. + +However, NO PERMISSION is granted to distribute a modified version +of this file under its original name. + +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +% Concrete font support removed: Use the contributed package available +% from ctan tex-archive/macros/latex/contrib/supported/ccfonts. +% +% \Ask\answer{% +% ************************************************************** +% ^^J* +% ^^J* Do you have the Concrete Roman fonts installed on your system, +% ^^J* or do you intend to install them? +% ^^J* +% ^^J* If so please answer with `y' otherwise with `n' below. +% ^^J* +% ^^J* You can easily redo this installation later in case you +% ^^J* change your mind. +% ^^J**************************************************************} +% +% {\ifx\answer\y +% +% \Msg{*** Generating font defs for Cork encoded fonts ***} +% \Msg{*** Generating font defs for old TeX Text encoding ***} +% \Msg{*** Generating font defs for math italic encoding ***} +% +% \generate{% +% \file{t1ccr.fd}{\from{cmfonts.fdd}{fd,T1ccr}} +% \file{ot1ccr.fd}{\from{cmfonts.fdd}{fd,OT1ccr}} +% \file{omlccm.fd}{\from{cmfonts.fdd}{fd,OMLccm}}} +% +% \fi} + +\Ask\answer{% + ************************************************************** + ^^J* + ^^J* Do you have the cyrillic fonts from the University of + ^^J* Washington installed on your system, + ^^J* or do you intend to install them? + ^^J* + ^^J* If so please answer with `y' otherwise with `n' below. + ^^J* + ^^J* You can easily redo this installation later in case you + ^^J* change your mind. + ^^J**************************************************************} + +{\ifx\answer\y + +\Msg{*** Generating font defs for old TeX cyrillic text encoding ***} + +\generate{% + \file{ot2cmr.fd}{\from{cmfonts.fdd}{fd,OT2cmr}} + \file{ot2cmss.fd}{\from{cmfonts.fdd}{fd,OT2cmss}}} + +\fi} + + + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space All *.fd} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} +} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/cmfonts.fdd b/Master/texmf-dist/source/latex/base/cmfonts.fdd new file mode 100644 index 00000000000..f493f30c724 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/cmfonts.fdd @@ -0,0 +1,1300 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \CheckSum{295} +% +%\iffalse This is a META comment +% +% File `cmfonts.fdd'. +% Copyright (C) 1989-1999 Frank Mittelbach and Rainer Sch\"opf, +% all rights reserved. +% +%<OMLccm, >\ProvidesFile{omlccm.fd} +%<OMLcmm, >\ProvidesFile{omlcmm.fd} +%<OMLcmr, >\ProvidesFile{omlcmr.fd} +%<OMScmr, >\ProvidesFile{omscmr.fd} +%<OMScmsy, >\ProvidesFile{omscmsy.fd} +%<OMXcmex, >\ProvidesFile{omxcmex.fd} +%<OT1ccr, >\ProvidesFile{ot1ccr.fd} +%<OT1cmdh, >\ProvidesFile{ot1cmdh.fd} +%<OT1cmfib, >\ProvidesFile{ot1cmfib.fd} +%<OT1cmfr, >\ProvidesFile{ot1cmfr.fd} +%<OT1cmr, >\ProvidesFile{ot1cmr.fd} +%<OT1cmss, >\ProvidesFile{ot1cmss.fd} +%<OT1cmtt, >\ProvidesFile{ot1cmtt.fd} +%<OT1cmvtt, >\ProvidesFile{ot1cmvtt.fd} +%<OT2cmr, >\ProvidesFile{ot2cmr.fd} +%<OT2cmss, >\ProvidesFile{ot2cmss.fd} +%<T1ccr, >\ProvidesFile{t1ccr.fd} +%<T1cmdh, >\ProvidesFile{t1cmdh.fd} +%<T1cmfib, >\ProvidesFile{t1cmfib.fd} +%<T1cmfr, >\ProvidesFile{t1cmfr.fd} +%<T1cmr, >\ProvidesFile{t1cmr.fd} +%<T1cmss, >\ProvidesFile{t1cmss.fd} +%<T1cmtt, >\ProvidesFile{t1cmtt.fd} +%<T1cmvtt, >\ProvidesFile{t1cmvtt.fd} +%<TS1cmr, >\ProvidesFile{ts1cmr.fd} +%<TS1cmss, >\ProvidesFile{ts1cmss.fd} +%<TS1cmtt, >\ProvidesFile{ts1cmtt.fd} +%<TS1cmvtt, >\ProvidesFile{ts1cmvtt.fd} +%<Ucmr, >\ProvidesFile{ucmr.fd} +%<Ucmss, >\ProvidesFile{ucmss.fd} +%<Ucmtt, >\ProvidesFile{ucmtt.fd} +%<*driver, > + \ProvidesFile{cmfonts.drv} +%</driver, > + [1999/05/25 v2.5h Standard LaTeX font definitions] +% +%<*driver> +\documentclass{ltxdoc} +\GetFileInfo{cmfonts.drv} +\providecommand\dst{\expandafter{\normalfont\scshape docstrip}} +\title{The file \texttt{cmfonts.fdd} for use with + \LaTeXe.\thanks{This file has version + number \fileversion, dated \filedate.}} +\date{\filedate}\author{Frank Mittelbach \and Rainer Sch\"opf} +\begin{document} +\maketitle + \DocInput{cmfonts.fdd} +\end{document} +%</driver> +% +%\fi +% +% +% +% \changes{v2.5e}{1997/06/16}{Replaced reference to DC-fonts by ec +% fonts.} +% \changes{v2.5c}{1997/05/26}{Removed spaces in and around arguments +% to \cs{DeclareFontShape} and \cs{EC@family}.} +% \changes{v2.4j}{1996/11/20}{lowercase filenames /1044} +% \changes{v2.4h}{1996/05/19}{Added CM variable typewriter family} +% \changes{v2.4g}{1996/05/17} +% {Force \cs{hyphenchar} of OT1 fonts to 45, in case +% \cs{defaulthyphenchar} has changed.} +% \changes{v2.4g}{1996/05/17} +% {Remove some spurious extra empty arguments to +% \cs{DeclareFontFamily} calls} +% \changes{v2.4d}{1995/12/01} +% {Documentation changes from Ulrik Vieth /1989} +% \changes{v2.4d}{1995/12/01} +% {Dont force T1 hyphenchar to 127. latex/1853} +% \changes{v2.4c}{1995/11/07}{Use decimal rather than octal character +% specification for \cs{hyphenchar} and \cs{skewchar} so that there is +% no problem with an active quote character.} +% \changes{v2.4a}{1995/10/22}{Added support for new (v1.2) DC fonts +% and text companion fonts (TS1 encoding).} +% \changes{v2.3d}{1994/11/02}{Added more font substitutions for +% \cs{pounds}.} +% \changes{v2.3d}{1994/10/30}{Added OMLcmr.fd and OMScmr.fd.} +% \changes{v2.3b}{1994/05/12}{Added \cs{ProvidesFile} commands} +% \changes{v2.3a}{1994/05/03}{Included definitions for +% AMS-supplied cm fonts.} +% \changes{v2.2f}{1994/02/07}{Added missing size 10.95 for +% cmr/b/n and cmr/m/ui.} +% \changes{v2.2e}{1994/02/02}{Corrected encoding scheme U.} +% \changes{v2.2d}{1994/01/27}{Replaced most ssub with sub} +% \changes{v2.2a}{1993/12/13}{Removed \cs{CodelineIndex} from the +% driver code.} +% +% \changes{v2.1a}{1993/10/17}{Shape u renamed to ui.} +% \changes{v2.1a}{1993/10/17}{File renamed to cmfonts.fdd.} +% +% +% +% \section{Introduction} +% +% This file contains the external font information needed to load +% the Computer Modern fonts designed by Don Knuth and distributed with +% \TeX. +% +% From this file all {\ttfamily.fd} files (font definition files) for +% the Computer Modern fonts, both with old encoding (|OT1|) and Cork +% encoding (|T1|) are generated. The Cork encoded fonts are known +% under the name ec fonts. +% +% \section{Customization} +% +% If you plan to install the AMS font package or if you have it +% already installed, please note that within this package there are +% additional sizes of the Computer Modern symbol and math italic +% fonts. With the release of \LaTeXe, these AMS `extracm' fonts have +% been included in the \LaTeX\ font set. Therefore, the math |.fd| files +% produced here assume the presence of these AMS extensions. +% +% For text fonts in \texttt{T1} encoding, the directive |new| selects +% the new (version 1.2) DC fonts. +% +% For the text fonts in \texttt{OT1} and \texttt{U} encoding, +% the optional \dst{} directive |ori| selects a conservatively +% generated set of font definition files, +% which means that only the basic font sizes coming with an old +% \LaTeX~2.09 installation are included into the |\DeclareFontShape| +% commands. However, on many installations, people have added missing +% sizes by scaling up or down available Metafont sources. For example, +% the Computer Modern Roman italic font |cmti| is only available in +% the sizes 7, 8, 9, and 10pt. Nevertheless one could generate it for +% the sizes 5, and 6pt by using the source from |cmti7| scaled +% downwards. The corresponding enlarged font set is generated if the +% \dst{} directive |ori| is not used. +% +% When you generate the |.fd| files using the installation script +% |cmfonts.ins| distributed with \LaTeXe, the enlarged font set is +% selected. +% If you want to select the conservative set of |.fd| files, you have to +% replace statements like +% \begin{verbatim} +% \generateFile{OT1cmr.fd}{t}{\from{cmfonts.fdd}{fd,OT1cmr}} +%\end{verbatim} +% with +% \begin{verbatim} +% \generateFile{OT1cmr.fd}{t}{\from{cmfonts.fdd}{fd,OT1cmr,ori}} +%\end{verbatim} +% in the installation script, or more exactly by copying the +% installation script to a file with a new name and change that copy. +% +% \StopEventually{} +% +% \section{The \texttt{docstrip} modules} +% +% The following modules are used to direct \texttt{docstrip} in +% generating external files: +% \begin{center} +% \begin{tabular}{ll} +% driver & produce a documentation driver file \\ +% nowarn & produce |.fd| files that do not warn about substitutions\\ +% ori & make conservative |.fd| files\\ +% new & select version 1.2 DC fonts\\ +% ec & select EC fonts\\ +% fd & produce a font definition file (actually no longer used)\\[2pt] +% OMLccm & make Concrete Roman Math italic\\ +% OMLcmm & make Computer Modern Math italic\\ +% OMLcmr & make Computer Modern Roman (math italic encoding)\\ +% OMScmr & make Computer Modern Roman (math symbol encoding)\\ +% OMScmsy & make Computer Modern Symbols \\ +% OMXcmex & make Computer Modern large Symbols\\ +% OT1ccr & make Concrete Roman (old encoding) \\ +% OT1cmdh & make Computer Modern Dunhill (old encoding)\\ +% OT1cmfib & make Computer Modern Fibonacci (old encoding)\\ +% OT1cmfr & make Computer Modern Funny (old encoding)\\ +% OT1cmr & make Computer Modern Roman (old encoding)\\ +% OT1cmss & make Computer Modern Sans (old encoding)\\ +% OT1cmtt & make Computer Modern Typewriter (old encoding)\\ +% OT1cmvtt & make Computer Modern Variable Typewriter (old encoding)\\ +% OT2cmr & make Computer Modern Roman (old cyrillic encoding)\\ +% OT2cmss & make Computer Modern Sans (old cyrillic encoding)\\ +% T1ccr & make Concrete Roman (Cork encoding)\\ +% T1cmdh & make Computer Modern Dunhill (Cork encoding)\\ +% T1cmfib & make Computer Modern Fibonacci (Cork encoding)\\ +% T1cmfr & make Computer Modern Funny (Cork encoding)\\ +% T1cmr & make Computer Modern Roman (Cork encoding)\\ +% T1cmss & make Computer Modern Sans (Cork encoding)\\ +% T1cmtt & make Computer Modern Typewriter (Cork encoding)\\ +% T1cmvtt & make Computer Modern Variable Typewriter (Cork +% encoding)\\ +% TS1cmr & make Computer Modern Roman text companion fonts\\ +% TS1cmss & make Computer Modern Sans text companion fonts\\ +% TS1cmtt & make Computer Modern Typewriter text companion fonts\\ +% TS1cmvtt & make Computer Modern Variable Typewriter text +% companion fonts\\ +% Ucmr & make Computer Modern Roman (unknown encoding)\\ +% Ucmss & make Computer Modern Sans (unknown encoding)\\ +% Ucmtt & make Computer Modern Typewriter (unknown encoding)\\ +% \end{tabular} +% \end{center} +% A typical \texttt{docstrip} command file would then have entries like: +% \begin{verbatim} +%\generateFile{OT1cmr.fd}{t}{\from{cmfonts.fdd}{fd,OT1cmr}} +%\end{verbatim} +% +% +% \section{The font definition files} +% +% As always we begin by identifying the latest version of the files +% in the \textsf{log} file. The explicit spaces are necessary in an +% |.fd| file and the |\string| guards against situations where |`|, +% |<| or |>| is active. +% \changes{v2.2g}{1994/02/15}{Removed surplus \cs{string}} +% +% \subsection{Fonts with Cork encoding (\texttt{T1})} +% +% We start with the DC-fonts. These are Computer Modern fonts +% reimplemented originally by Norbert Schwarz, and since release~1.2 +% by J\"org Knappen. +% You can get them from \TeX{} +% archives and from \TeX{} organizations. We strongly recommend +% that you use them because they are encoded in the approved +% standard encoding for text fonts. +% +% \subsubsection{Commands for fonts with the `EC' naming scheme} +% Before the declarations for the individual fonts, first define +% some abreviations that may be used as most of the fonts in the +% `new' dc font distribution come in the same range of sizes. +% The same is true for the ec fonts, with a somewhat enlarged font +% size range. +% \changes{v2.5f}{1998/01/10}{Added larger sizes for ec fonts only +% (thanks to Christian Cornelssen)} +% \begin{macrocode} +%<*new|ec> +%<*!tt> +\providecommand{\EC@family}[5]{% + \DeclareFontShape{#1}{#2}{#3}{#4}% + {<5><6><7><8><9><10><10.95><12><14.4>% +%<ec> <17.28><20.74><24.88><29.86><35.83>genb*#5}{}} +%<!ec> <17.28><20.74><24.88>genb*#5}{}} +%</!tt> +% \end{macrocode} +% For monospaced fonts, the normal interpolation breaks down below +% 8pt, so scale the 8pt fonts instead. +% \changes{v2.5f}{1998/01/10}{Added larger sizes for ec fonts only +% (thanks to Christian Cornelssen)} +% \begin{macrocode} +%<*tt> +\providecommand{\EC@ttfamily}[5]{% + \DeclareFontShape{#1}{#2}{#3}{#4}% + {<5><6><7><8>#50800% +%<ec> <9><10><10.95><12><14.4><17.28><20.74><24.88><29.86>% +%<ec> <35.83>genb*#5}{}} +%<!ec> <9><10><10.95><12><14.4><17.28><20.74><24.88>genb*#5}{}} +%</tt> +%</new|ec> +% \end{macrocode} +% +% \subsubsection{The Computer Modern Roman} +% +% This family is available in the shapes |n|, |sl|, |it|, |sc|, and +% |ui|. +% \begin{macrocode} +%<*T1cmr> +\DeclareFontFamily{T1}{cmr}{} +%<*!new&!ec> +\DeclareFontShape{T1}{cmr}{m}{n}{% + <5><6><7><8><9>gen*dcr% + <10><10.95>dcr10% + <12><14.4>dcr12% + <17.28><20.74><24.88>dcr17}{} +\DeclareFontShape{T1}{cmr}{m}{sl}{% + <5><6><7><8>dcsl8% + <9>dcsl9% + <10><10.95>dcsl10% + <12><14.4>dcsl12% + <17.28><20.74><24.88>dcsl17% + }{} +\DeclareFontShape{T1}{cmr}{m}{it}{% + <5><6>dcti7% + <7><8><9>gen*dcti% + <10><10.95>dcti10% + <12><14.4>dcti12% + <17.28><20.74><24.88>dcti17% + }{} +\DeclareFontShape{T1}{cmr}{m}{sc}{% + <5><6><7><8><9><10><10.95>dccsc10% + <12><14.4>dccsc12% + <17.28><20.74><24.88>dccsc17% + }{} +\DeclareFontShape{T1}{cmr}{m}{ui}{% + <5><6>dcu7% + <7><8><9>gen*dcu% + <10><10.95>dcu10% + <12><14.4>dcu12% + <17.28><20.74><24.88>dcu17% + }{} +% \end{macrocode} +% There is a bold `|b|' series, but unfortunately only the normal +% shape is available in this series. +% \begin{macrocode} +%<+T1cmr>%%%%%%% bold series +\DeclareFontShape{T1}{cmr}{b}{n}{% + <5><6><7><8><9>gen*dcb% + <10><10.95>dcb10% + <12><14.4>dcb12% + <17.28><20.74><24.88>dcb17% + }{} +% \end{macrocode} +% Finally there is a bold extended series `|bx|' with the shapes +% |n|, |sl|, and |it|. +% \begin{macrocode} +%<+T1cmr>%%%%%%%% bold extended series +\DeclareFontShape{T1}{cmr}{bx}{n}{% + <5><6><7><8><9>gen*dcbx% + <10><10.95>dcbx10% + <12><14.4><17.28><20.74><24.88>dcbx12% + }{} +\DeclareFontShape{T1}{cmr}{bx}{sl}{% + <5><6><7><8><9>gen*dcbxsl% + <10><10.95>dcbxsl10% + <12><14.4><17.28><20.74><24.88>dcbxsl12% + }{} +\DeclareFontShape{T1}{cmr}{bx}{it}{% + <5><6><7><8><9><10><10.95>dcbxti10% + <12><14.4>dcbxti12% + <17.28><20.74><24.88>dcbxti17% + }{} +%</!new&!ec> +% \end{macrocode} +% \changes{v2.4d}{1995/12/01} +% {Ulrik Vieth. Add ui shape /1989} +% \begin{macrocode} +%<*new> +\EC@family{T1}{cmr}{m}{n}{dcr} +\EC@family{T1}{cmr}{m}{sl}{dcsl} +\EC@family{T1}{cmr}{m}{it}{dcti} +\EC@family{T1}{cmr}{m}{sc}{dccc} +\EC@family{T1}{cmr}{bx}{n}{dcbx} +\EC@family{T1}{cmr}{b}{n}{dcb} +\EC@family{T1}{cmr}{bx}{it}{dcbi} +\EC@family{T1}{cmr}{bx}{sl}{dcbl} +\EC@family{T1}{cmr}{m}{ui}{dcu} +%</new> +% \end{macrocode} +% \changes{v2.5a}{1997/01/14} +% {EC fonts} +% \changes{v2.5d}{1997/06/02}{bold sc fonts latex/2497} +% \begin{macrocode} +%<*ec> +\EC@family{T1}{cmr}{m}{n}{ecrm} +\EC@family{T1}{cmr}{m}{sl}{ecsl} +\EC@family{T1}{cmr}{m}{it}{ecti} +\EC@family{T1}{cmr}{m}{sc}{eccc} +\EC@family{T1}{cmr}{bx}{n}{ecbx} +\EC@family{T1}{cmr}{b}{n}{ecrb} +\EC@family{T1}{cmr}{bx}{it}{ecbi} +\EC@family{T1}{cmr}{bx}{sl}{ecbl} +\EC@family{T1}{cmr}{bx}{sc}{ecxc} +\EC@family{T1}{cmr}{m}{ui}{ecui} +%</ec> +%</T1cmr> +% \end{macrocode} +% +% \subsubsection{Computer Modern Fibonacci} +% +% This family was created by Don Knuth as an experiment, supplying +% only Fibonacci numbers to the parameters of the Metafont sources +% of the Computer Modern Meta family. +% \begin{macrocode} +%<*T1cmfib> +\DeclareFontFamily{T1}{cmfib}{} +%<*!new&!ec> +\DeclareFontShape{T1}{cmfib}{m}{n}{% + <8><9><10><12>gen*dcfib% + }{} +%</!new&!ec> +% \end{macrocode} +% \changes{v2.4f}{1995/12/20} +% {Family name and external file name corrected Ulrik Vieth /2017} +% In fact these `dcfb' fonts are currently withdrawn as they generate +% metafont errors. +% \begin{macrocode} +%<*new> +\EC@family{T1}{cmfib}{m}{n}{dcfb} +%</new> +% \end{macrocode} +% \changes{v2.5a}{1997/01/14} +% {EC fonts, new slanted fibonacci} +% \begin{macrocode} +%<*ec> +\EC@family{T1}{cmfib}{m}{n}{ecfb} +\EC@family{T1}{cmfib}{m}{sl}{ecfs} +%</ec> +%</T1cmfib> +% \end{macrocode} +% +% \subsubsection{Computer Modern Funny (Roman)} +% +% This family was created by Don Knuth as another experiment. +% \begin{macrocode} +%<*T1cmfr> +\DeclareFontFamily{T1}{cmfr}{} +%<*!new&!ec> +\DeclareFontShape{T1}{cmfr}{m}{n}{% + <10>dcff10% + }{} +\DeclareFontShape{T1}{cmfr}{m}{it}{% + <10>dcfi10% + }{} +%</!new&!ec> +%<*new> +\EC@family{T1}{cmfr}{m}{n}{dcff} +\EC@family{T1}{cmfr}{m}{it}{dcfi} +%</new> +% \end{macrocode} +% \changes{v2.5a}{1997/01/14} +% {EC fonts} +% \begin{macrocode} +%<*ec> +\EC@family{T1}{cmfr}{m}{n}{ecff} +\EC@family{T1}{cmfr}{m}{it}{ecfi} +%</ec> +%</T1cmfr> +% \end{macrocode} +% +% \subsubsection{Computer Modern Sans} +% +% \begin{macrocode} +%<*T1cmss> +\DeclareFontFamily{T1}{cmss}{} +%<*!new&!ec> +\DeclareFontShape{T1}{cmss}{m}{n}{% + <5><6><7><8>dcss8% + <9>dcss9% + <10><10.95>dcss10% + <12><14.4>dcss12% + <17.28><20.74><24.88>dcss17% + }{} +\DeclareFontShape{T1}{cmss}{m}{it}% + {<->sub*cmss/m/sl}{} +\DeclareFontShape{T1}{cmss}{m}{sl}{% + <5><6><7><8>dcssi8% + <9>dcssi9% + <10><10.95>dcssi10% + <12><14.4>dcssi12% + <17.28><20.74><24.88>dcssi17% + }{} +%</!new&!ec> +%<*new> +\EC@family{T1}{cmss}{m}{n}{dcss} +\EC@family{T1}{cmss}{m}{sl}{dcsi} +\EC@family{T1}{cmss}{m}{it}{dcsi} +\EC@family{T1}{cmss}{bx}{n}{dcsx} +\EC@family{T1}{cmss}{bx}{it}{dcso} +\EC@family{T1}{cmss}{bx}{sl}{dcso} +%</new> +% \end{macrocode} +% \changes{v2.5a}{1997/01/14} +% {EC fonts} +% \begin{macrocode} +%<*ec> +\EC@family{T1}{cmss}{m}{n}{ecss} +\EC@family{T1}{cmss}{m}{sl}{ecsi} +\EC@family{T1}{cmss}{m}{it}{ecsi} +\EC@family{T1}{cmss}{bx}{n}{ecsx} +\EC@family{T1}{cmss}{bx}{it}{ecso} +\EC@family{T1}{cmss}{bx}{sl}{ecso} +%</ec> +% \end{macrocode} +% The next substitution is very questionable. +% \begin{macrocode} +%<+T1cmss>%%%%%% Font/shape undefined, therefore substituted +\DeclareFontShape{T1}{cmss}{m}{sc}% + {<->sub*cmr/m/sc}{} +% \end{macrocode} +% The next font group is quite attractive for display. +% \begin{macrocode} +%<+T1cmss>%%%%%%% semibold condensed series +\DeclareFontShape{T1}{cmss}{sbc}{n}{% + <5><6><7><8><9><10><10.95><12><14.4><17.28>% + <20.74><24.88>% +%<!ec>dcssdc10 +%<ec>ecssdc10 + }{} +% \end{macrocode} +% +% \begin{macrocode} +%<*!new&!ec> +%<+T1cmss>%%%%%%%% bold extended series +\DeclareFontShape{T1}{cmss}{bx}{n}{% + <5><6><7><8><9><10><10.95><12><14.4><17.28>% + <20.74><24.88>dcssbx10% + }{} +% \end{macrocode} +% Another questionable substitution, but if we have the above +% we might as well have this one +% \changes{v2.5g}{1998/03/27}{Added subst for cmss/bx/sc (pr/2586)} +% \begin{macrocode} +%<+T1cmss>%%%%%% Font/shape undefined, therefore substituted +\DeclareFontShape{T1}{cmss}{bx}{sc}% + {<->sub*cmr/m/sc}{} +%</!new&!ec> +%</T1cmss> +% \end{macrocode} +% +% \subsubsection{Computer Modern Typewriter} +% +% Perhaps the best font in the Computer Modern suite. +% \begin{macrocode} +%<*T1cmtt> +\DeclareFontFamily{T1}{cmtt}{\hyphenchar \font\m@ne} +%<*!new&!ec> +\DeclareFontShape{T1}{cmtt}{m}{n}{% + <8><9>gen*dctt% + <10><10.95>dctt10% + <12><14.4><17.28><20.74><24.88>dctt12% + }{} +\DeclareFontShape{T1}{cmtt}{m}{it}{% + <8><9>gen*dcitt% + <10><10.95>dcitt10% + <12><14.4>dcitt12% + <17.28><20.74><24.88>dcitt17% + }{} +\DeclareFontShape{T1}{cmtt}{m}{sl}{% + <8><9>gen*dcsltt% + <10><10.95>dcsltt10% + <12><14.4><17.28><20.74><24.88>dcsltt12% + }{} +\DeclareFontShape{T1}{cmtt}{m}{sc}{% + <10><10.95>dctcsc10% + <12><14.4>dctcsc12% + <17.28><20.74><24.88>dctcsc17% + }{} +%</!new&!ec> +% \end{macrocode} +% \changes{v2.4e}{1995/12/04} +% {Ulrik Vieth. added dctc /1989} +% \begin{macrocode} +%<*new> +\EC@ttfamily{T1}{cmtt}{m}{n}{dctt} +\EC@ttfamily{T1}{cmtt}{m}{sl}{dcst} +\EC@ttfamily{T1}{cmtt}{m}{it}{dcit} +\EC@ttfamily{T1}{cmtt}{m}{sc}{dctc} +% \end{macrocode} +% \changes{v2.4i}{1996/09/26}{Added substitutions for T1 bold +% extended typewriter fonts (new version).} +% Finally, we define substitutions for the series |bx|. It comes +% with or without a warning. +% \begin{macrocode} +\DeclareFontShape{T1}{cmtt}{bx}{n}% +%<-nowarn> {<->sub*cmtt/m/n}{} +%<+nowarn> {<->ssub*cmtt/m/n}{} +\DeclareFontShape{T1}{cmtt}{bx}{it}% +%<-nowarn> {<->sub*cmtt/m/it}{} +%<+nowarn> {<->ssub*cmtt/m/it}{} +%</new> +% \end{macrocode} +% \changes{v2.5a}{1997/01/14} +% {EC fonts} +% \begin{macrocode} +%<*ec> +\EC@ttfamily{T1}{cmtt}{m}{n}{ectt} +\EC@ttfamily{T1}{cmtt}{m}{sl}{ecst} +\EC@ttfamily{T1}{cmtt}{m}{it}{ecit} +\EC@ttfamily{T1}{cmtt}{m}{sc}{ectc} +% \end{macrocode} +% \changes{v2.4i}{1996/09/26}{Added substitutions for T1 bold +% extended typewriter fonts (new version).} +% Finally, we define substitutions for the series |bx|. It comes +% with or without a warning. +% \begin{macrocode} +\DeclareFontShape{T1}{cmtt}{bx}{n}% +%<-nowarn> {<->sub*cmtt/m/n}{} +%<+nowarn> {<->ssub*cmtt/m/n}{} +\DeclareFontShape{T1}{cmtt}{bx}{it}% +%<-nowarn> {<->sub*cmtt/m/it}{} +%<+nowarn> {<->ssub*cmtt/m/it}{} +%</ec> +%</T1cmtt> +% \end{macrocode} +% +% +% \subsubsection{Computer Modern Variable Typewriter} +% +% The Computer Modern Variable Typewriter family is the +% proportional spaced version of the Computer Modern Typewriter +% family. It is implemented as a separate family to allow easy use +% in normal text, including changes of shape/series etc if available. +% This family also allows normal hyphenation. +% +% In the first implementations for the Cork encoding only the +% normal shape is available. Starting with release 1.3 italic will +% be provided as well. +% \begin{macrocode} +%<*T1cmvtt> +\DeclareFontFamily{T1}{cmvtt}{} +%<*!new&!ec> +\DeclareFontShape{T1}{cmvtt}{m}{n}{% + <8><9>gen*dcvtt% + <10><10.95>dcvtt10% + <12><14.4><17.28><20.74><24.88>dcvtt12% + }{} +%</!new&!ec> +% \end{macrocode} +% With release 1.3 there will be an italic shape as well. +% \begin{macrocode} +%<*new> +\EC@ttfamily{T1}{cmvtt}{m}{n}{dcvt} +\EC@ttfamily{T1}{cmvtt}{m}{it}{dcvi} +%</new> +%<*ec> +\EC@ttfamily{T1}{cmvtt}{m}{n}{ecvt} +\EC@ttfamily{T1}{cmvtt}{m}{it}{ecvi} +%</ec> +%</T1cmvtt> +% \end{macrocode} +% +% +% \subsubsection{Computer Modern Dunhill} +% +% The smoker's choice? Within the Cork encoding this font comes with +% a full size range by default but only with one series. +% \begin{macrocode} +%<*T1cmdh> +\DeclareFontFamily{T1}{cmdh}{} +%<*!new&!ec> +\DeclareFontShape{T1}{cmdh}{m}{n}{% + <5><6><7><8><9>gen*dcdunh% + <10><10.95>dcdunh10% + <12><14.4>dcdunh12% + <17.28><20.74><24.88>dcdunh17}{} +%</!new&!ec> +%<*new> +\EC@family{T1}{cmdh}{m}{n}{dcdh} +%</new> +%<*ec> +\EC@family{T1}{cmdh}{m}{n}{ecdh} +%</ec> +%</T1cmdh> +% \end{macrocode} +% +% \subsubsection{Concrete Roman} +% +% A font near to Computer Modern Typewriter designed to go with the +% Euler Math fonts. +% \begin{macrocode} +%<*T1ccr> +\DeclareFontFamily{T1}{ccr}{} +\DeclareFontShape{T1}{ccr}{m}{n}{% + <5><6><7><8><9><10><12>gen*dccr% + <10.95>dccr11 <14.4>dccr14% + <17.28><20.74><24.88>dccr17}{} +\DeclareFontShape{T1}{ccr}{m}{it}{% + <10><10.95><12>dcti10}{} +\DeclareFontShape{T1}{ccr}{m}{sc}{% + <10><10.95><12>dccsc10 }{} +% \end{macrocode} +% Note the condensed slanted variant (not used). +% \changes{v2.4d}{1995/12/01} +% {Ulrik Vieth. Removed dcslc9 (no such font...) /1989} +% \begin{macrocode} +%\DeclareFontShape{T1}{ccr}{c}{sl}{<9>dcslc9}{} +% \end{macrocode} +% Finally a few substitution fonts for combinations not available. +% As suggested by Leslie Lamport and several others the +% substitution should warn by default. We control this my a \dst{} +% module so that one can modify this behavior from the outside. +% \changes{v2.0f}{1993/09/24}{Added substitution fonts} +% \begin{macrocode} +\DeclareFontShape{T1}{ccr}{bx}{sl}{% +%<-nowarn> <->sub*cmr/bx/it +%<+nowarn> <->ssub*cmr/bx/it +}{} +\DeclareFontShape{T1}{ccr}{bx}{n}{% +%<-nowarn> <->sub*cmr/bx/n +%<+nowarn> <->ssub*cmr/bx/n +}{} +\DeclareFontShape{T1}{ccr}{bx}{it}{% +%<-nowarn> <->sub*cmr/bx/it +%<+nowarn> <->ssub*cmr/bx/it +}{} +%</T1ccr> +% \end{macrocode} +% +% +% \subsubsection{The text companion fonts for \texttt{T1} encoding} +% +% \changes{v2.4e}{1995/12/04} +% {Ulrik Vieth. added tcu /1989} +% \begin{macrocode} +%<*TS1cmr> +\DeclareFontFamily{TS1}{cmr}{\hyphenchar\font\m@ne} +%<!ec>\EC@family{TS1}{cmr}{m}{n}{tcr} +%<ec>\EC@family{TS1}{cmr}{m}{n}{tcrm} +\EC@family{TS1}{cmr}{m}{sl}{tcsl} +\EC@family{TS1}{cmr}{m}{it}{tcti} +\EC@family{TS1}{cmr}{bx}{n}{tcbx} +%<!ec>\EC@family{TS1}{cmr}{b}{n}{tcb} +%<ec>\EC@family{TS1}{cmr}{b}{n}{tcrb} +\EC@family{TS1}{cmr}{bx}{it}{tcbi} +\EC@family{TS1}{cmr}{bx}{sl}{tcbl} +%<!ec>\EC@family{TS1}{cmr}{m}{ui}{tcu} +%<ec>\EC@family{TS1}{cmr}{m}{ui}{tcui} +%</TS1cmr> +%<*TS1cmss> +\DeclareFontFamily{TS1}{cmss}{\hyphenchar\font\m@ne} +\EC@family{TS1}{cmss}{m}{n}{tcss} +\EC@family{TS1}{cmss}{m}{sl}{tcsi} +\EC@family{TS1}{cmss}{m}{it}{tcsi} +\EC@family{TS1}{cmss}{bx}{n}{tcsx} +\EC@family{TS1}{cmss}{bx}{it}{tcso} +\EC@family{TS1}{cmss}{bx}{sl}{tcso} +%</TS1cmss> +%<*TS1cmtt> +\DeclareFontFamily{TS1}{cmtt}{\hyphenchar\font\m@ne} +\EC@ttfamily{TS1}{cmtt}{m}{n}{tctt} +\EC@ttfamily{TS1}{cmtt}{m}{sl}{tcst} +\EC@ttfamily{TS1}{cmtt}{m}{it}{tcit} +%</TS1cmtt> +% \end{macrocode} +% Again the italic shape is only available with release 1.3. +% \begin{macrocode} +%<*TS1cmvtt> +\DeclareFontFamily{TS1}{cmvtt}{} +\EC@ttfamily{TS1}{cmvtt}{m}{n}{tcvt} +\EC@ttfamily{TS1}{cmvtt}{m}{it}{tcvi} +%</TS1cmvtt> +% \end{macrocode} +% +% \subsection{Fonts with the old \TeX{} text encoding (\texttt{OT1})} +% +% Note that in contrast to the Cork encoding, which is fully +% defined, the old \TeX{} text encoding isn't implemented consistent +% within all fonts. Most noticeably is that a dollar sign (\$) in +% some fonts is replaced by a pound symbol (\pounds) in others, +% which produced quite a number of bug fixes in the NFSS1. Also the +% typewriter fonts contain a few different characters which are not +% present in other fonts. +% +% If one would use the philosophy of NFSS2 consequently all these +% would therefore be different encodings and font mixing would +% therefore be nearly impossible with older fonts. Therefore such +% encodings are considered the same but one should be remember that +% in some situations this may cause problems. +% +% In other words, use |T1| encoding whenever possible, the |OT..| +% encodings will be removed in some future release. +% +% \subsubsection{Computer Modern Roman (\texttt{OT1})} +% +% Beside the |OT1| encoding we also define the same family as |U| +% encoded which is used for accepting old sources with stuff like +% |\newmathalphabet| in it. +% \begin{macrocode} +%<*OT1cmr,Ucmr> +%<+OT1cmr>\DeclareFontFamily{OT1}{cmr}{\hyphenchar\font45 } +%<+Ucmr>\DeclareFontFamily{U}{cmr}{\hyphenchar\font45 } +%<+OT1cmr>\DeclareFontShape{OT1}{cmr}{m}{n}% +%<+Ucmr>\DeclareFontShape{U}{cmr}{m}{n}% + {<5><6><7><8><9><10><12>gen*cmr% + <10.95>cmr10% + <14.4>cmr12% + <17.28><20.74><24.88>cmr17}{} +%<+OT1cmr>\DeclareFontShape{OT1}{cmr}{m}{sl}% +%<+Ucmr>\DeclareFontShape{U}{cmr}{m}{sl}% + {% +%<+ori> <5-8>sub*cmr/m/n% +%<-ori> <5><6><7>cmsl8% + <8><9>gen*cmsl% + <10><10.95>cmsl10% + <12><14.4><17.28><20.74><24.88>cmsl12% + }{} +%<+OT1cmr>\DeclareFontShape{OT1}{cmr}{m}{it}% +%<+Ucmr>\DeclareFontShape{U}{cmr}{m}{it}% + {% +%<+ori> <5-7>sub*cmr/m/n% +%<+ori> <7>cmti7% +%<-ori> <5><6><7>cmti7% + <8>cmti8% + <9>cmti9% + <10><10.95>cmti10% + <12><14.4><17.28><20.74><24.88>cmti12% + }{} +%<+OT1cmr>\DeclareFontShape{OT1}{cmr}{m}{sc}% +%<+Ucmr>\DeclareFontShape{U}{cmr}{m}{sc}% + {% +%<+ori> <5-8>sub*cmr/m/n% +%<+ori> <8><9><10><10.95><12>% +%<+ori> <14.4><17.28><20.74><24.88>cmcsc10% +%<-ori> <5><6><7><8><9><10><10.95><12>% +%<-ori> <14.4><17.28><20.74><24.88>cmcsc10% + }{} +% \end{macrocode} +% Here we try to cure the famous \$ $\to$ \pounds{} bug: +% \changes{v2.2c}{1994/01/18}{Corrected forgotten renaming of font +% shape u to ui in substitution.} +% \begin{macrocode} +%<+OT1cmr,Ucmr>% Warning: please note that the upright shape below is +%<+OT1cmr,Ucmr>% used for the \pounds symbol of LaTeX. So this +%<+OT1cmr,Ucmr>% font definition shouldn't be removed. +%<+OT1cmr,Ucmr>% +%<+ori>% If cmu below 10pt is not available we substitute +%<+ori>% cmti as far as possible (sizes 7, 8, 9). This is +%<+ori>% done because cmu is used mainly for producing the +%<+ori>% the \pound symbol and it is better to get a slanted +%<+ori>% (or bigger) pound then to get a $ sign in such +%<+ori>% situations. +%<+OT1cmr>\DeclareFontShape{OT1}{cmr}{m}{ui} +%<+Ucmr>\DeclareFontShape{U}{cmr}{m}{ui} + { +%<+ori> <7>subf*cmti7% +%<+ori> <8>subf*cmti8% +%<+ori> <9>subf*cmti9% +%<+ori> <10><10.95><12><14.4><17.28><20.74><24.88>cmu10% +%<-ori> <5><6><7><8><9><10><10.95><12>% +%<-ori> <14.4><17.28><20.74><24.88>cmu10% + }{} +%<+OT1cmr,Ucmr>%%%%%%% bold series +%<+OT1cmr>\DeclareFontShape{OT1}{cmr}{b}{n} +%<+Ucmr>\DeclareFontShape{U}{cmr}{b}{n}% + {% +%<+ori> <-10>sub*cmr/bx/n% +%<+ori> <10><10.95><12><14.4><17.28><20.74><24.88>cmb10% +%<-ori> <5><6><7><8><9><10><10.95><12>% +%<-ori> <14.4><17.28><20.74><24.88>cmb10% + }{} +%<+OT1cmr,Ucmr>%%%%%%%% bold extended series +%<+OT1cmr>\DeclareFontShape{OT1}{cmr}{bx}{n} +%<+Ucmr>\DeclareFontShape{U}{cmr}{bx}{n}% + {% + <5><6><7><8><9>gen*cmbx% + <10><10.95>cmbx10% + <12><14.4><17.28><20.74><24.88>cmbx12% + }{} +%<+OT1cmr>\DeclareFontShape{OT1}{cmr}{bx}{sl} +%<+Ucmr>\DeclareFontShape{U}{cmr}{bx}{sl}% + {% +%<+ori> <-10>sub*cmr/bx/n% +%<+ori> <10><10.95><12><14.4><17.28><20.74><24.88>cmbxsl10% +%<-ori> <5><6><7><8><9>% +%<-ori> <10><10.95><12><14.4><17.28><20.74><24.88>cmbxsl10% + }{} +%<+OT1cmr>\DeclareFontShape{OT1}{cmr}{bx}{it} +%<+Ucmr>\DeclareFontShape{U}{cmr}{bx}{it}% + {% +%<+ori> <-10>sub*cmr/bx/n% +%<+ori> <10><10.95><12><14.4><17.28><20.74><24.88>cmbxti10% +%<-ori> <5><6><7><8><9>% +%<-ori> <10><10.95><12><14.4><17.28><20.74><24.88>cmbxti10% + }{} +% \end{macrocode} +% \changes{v2.5h}{1999/05/09}{docstrip `nowarn' guard was the wrong way +% around (pr/3036)} +% \begin{macrocode} +%<+OT1cmr,Ucmr>% Again this is necessary for a correct \pounds symbol in +%<+OT1cmr,Ucmr>% the cmr fonts Hopefully the dc/ec font layout will take +%<+OT1cmr,Ucmr>% over soon. +%<+OT1cmr,Ucmr>% +%<+OT1cmr>\DeclareFontShape{OT1}{cmr}{bx}{ui} +%<+Ucmr>\DeclareFontShape{U}{cmr}{bx}{ui}% +%<-nowarn> {<->sub*cmr/m/ui}{} +%<+nowarn> {<->ssub*cmr/m/ui}{} +%</OT1cmr,Ucmr> +% \end{macrocode} +% +% \subsubsection{Computer Modern Sans (\texttt{OT1})} +% +% Same game for the Sans family. +% \begin{macrocode} +%<*OT1cmss,Ucmss> +%<+OT1cmss>\DeclareFontFamily{OT1}{cmss}{\hyphenchar\font45 } +%<+Ucmss>\DeclareFontFamily{U}{cmss}{\hyphenchar\font45 } +%<+OT1cmss>\DeclareFontShape{OT1}{cmss}{m}{n} +%<+Ucmss>\DeclareFontShape{U}{cmss}{m}{n}% + {% +%<+ori> <-8>sub*cmr/m/n% +%<+ori> <8>cmss8% +%<-ori> <5><6><7><8>cmss8% + <9>cmss9% + <10><10.95>cmss10% + <12><14.4>cmss12% + <17.28><20.74><24.88>cmss17% + }{} +%<+OT1cmss,Ucmss>% Font undefined, therefore substituted +%<+OT1cmss>\DeclareFontShape{OT1}{cmss}{m}{it} +%<+Ucmss>\DeclareFontShape{U}{cmss}{m}{it}% +%<-nowarn> {<->sub*cmss/m/sl}{} +%<+nowarn> {<->ssub*cmss/m/sl}{} +%<+OT1cmss>\DeclareFontShape{OT1}{cmss}{m}{sl} +%<+Ucmss>\DeclareFontShape{U}{cmss}{m}{sl}% + {% +%<+ori> <-8>sub*cmss/m/n% +%<+ori> <8><9>gen*cmssi% +%<-ori> <5><6><7><8>cmssi8<9>cmssi9% + <10><10.95>cmssi10% + <12><14.4>cmssi12% + <17.28><20.74><24.88>cmssi17% + }{} +%<+OT1cmss,Ucmss>%%%%%%% Font/shape undefined, therefore substituted +%<+OT1cmss>\DeclareFontShape{OT1}{cmss}{m}{sc} +%<+Ucmss>\DeclareFontShape{U}{cmss}{m}{sc}% + {<->sub*cmr/m/sc}{} +%<+OT1cmss,Ucmss>%%%%%%% Font/shape undefined, therefore substituted +%<+OT1cmss>\DeclareFontShape{OT1}{cmss}{m}{ui} +%<+Ucmss>\DeclareFontShape{U}{cmss}{m}{ui}% + {<->sub*cmr/m/ui}{} +%<+OT1cmss,Ucmss>%%%%%%%% semibold condensed series +%<+OT1cmss>\DeclareFontShape{OT1}{cmss}{sbc}{n} +%<+Ucmss>\DeclareFontShape{U}{cmss}{sbc}{n}% + {% +%<+ori> <-10>sub*cmss/m/n% +%<-ori> <5><6><7><8><9>cmssdc10% + <10><10.95><12><14.4><17.28><20.74><24.88>cmssdc10% + }{} + +%<+OT1cmss,Ucmss>%%%%%%%%% bold extended series +%<+OT1cmss>\DeclareFontShape{OT1}{cmss}{bx}{n} +%<+Ucmss>\DeclareFontShape{U}{cmss}{bx}{n}% + {% +%<+ori> <-10>sub*cmss/m/n% +%<-ori> <5><6><7><8><9>cmssbx10% + <10><10.95><12><14.4><17.28><20.74><24.88>cmssbx10% + }{} +%<+OT1cmss,Ucmss>%%%%%%% Font/shape undefined, therefore substituted +%<+OT1cmss>\DeclareFontShape{OT1}{cmss}{bx}{ui} +%<+Ucmss>\DeclareFontShape{U}{cmss}{bx}{ui}% + {<->sub*cmr/bx/ui}{} +%</OT1cmss,Ucmss> +% \end{macrocode} +% +% \subsubsection{Computer Modern Typewriter (\texttt{OT1})} +% +% Notice that this encoding is in fact quite different and we +% shouldn't therefore substitute some other font group if the +% correct size or shape isn't available. Otherwise, we may end with +% a |\verb| suddenly producing a lot of funny chars instead of the +% desired ones. +% \begin{macrocode} +%<*OT1cmtt,Ucmtt> +%<+OT1cmtt>\DeclareFontFamily{OT1}{cmtt}{\hyphenchar \font\m@ne} +%<+Ucmtt>\DeclareFontFamily{U}{cmtt}{\hyphenchar \font\m@ne} +%<+OT1cmtt>\DeclareFontShape{OT1}{cmtt}{m}{n} +%<+Ucmtt>\DeclareFontShape{U}{cmtt}{m}{n}% + {% +% \end{macrocode} +% This substitution for |ori| is wrong and only in here because +% that was the way stuff has be set up in the old |lfonts.tex| file. +% \begin{macrocode} +%<+ori> <-8>sub*cmr/m/n% +%<+ori> <8><9>gen*cmtt% +%<-ori> <5><6><7><8>cmtt8<9>cmtt9% + <10><10.95>cmtt10% + <12><14.4><17.28><20.74><24.88>cmtt12% + }{} +%<+OT1cmtt,Ucmtt>%%%%%% make sure subst shapes are available +%<+OT1cmtt>\DeclareFontShape{OT1}{cmtt}{m}{it} +%<+Ucmtt>\DeclareFontShape{U}{cmtt}{m}{it}% + {% +% \end{macrocode} +% The following substitution however is okay since both fonts have +% the same encoding. +% \begin{macrocode} +%<+ori> <-10>sub*cmtt/m/n% +%<-ori> <5><6><7><8><9>% + <10><10.95><12><14.4><17.28><20.74><24.88>cmitt10% + }{} +%<+OT1cmtt>\DeclareFontShape{OT1}{cmtt}{m}{sl} +%<+Ucmtt>\DeclareFontShape{U}{cmtt}{m}{sl}% + {% +%<+ori> <-10>sub*cmtt/m/n% +%<-ori> <5><6><7><8><9>% + <10><10.95><12><14.4><17.28><20.74><24.88>cmsltt10% + }{} +%<+OT1cmtt>\DeclareFontShape{OT1}{cmtt}{m}{sc} +%<+Ucmtt>\DeclareFontShape{U}{cmtt}{m}{sc}% + {% +%<+ori> <-10>sub*cmtt/m/n% +%<-ori> <5><6><7><8><9>% + <10><10.95><12><14.4><17.28><20.74><24.88>cmtcsc10% + }{} +%<+OT1cmtt>\DeclareFontShape{OT1}{cmtt}{m}{ui} +%<+Ucmtt>\DeclareFontShape{U}{cmtt}{m}{ui}% +%<-nowarn> {<->sub*cmtt/m/it}{} +%<+nowarn> {<->ssub*cmtt/m/it}{} +%<+OT1cmtt>\DeclareFontShape{OT1}{cmtt}{bx}{n} +%<+Ucmtt>\DeclareFontShape{U}{cmtt}{bx}{n}% +%<-nowarn> {<->sub*cmtt/m/n}{} +%<+nowarn> {<->ssub*cmtt/m/n}{} +%<+OT1cmtt>\DeclareFontShape{OT1}{cmtt}{bx}{it} +%<+Ucmtt>\DeclareFontShape{U}{cmtt}{bx}{it}% +%<-nowarn> {<->sub*cmtt/m/it}{} +%<+nowarn> {<->ssub*cmtt/m/it}{} +%<+OT1cmtt>\DeclareFontShape{OT1}{cmtt}{bx}{ui} +%<+Ucmtt>\DeclareFontShape{U}{cmtt}{bx}{ui}% +%<-nowarn> {<->sub*cmtt/m/it}{} +%<+nowarn> {<->ssub*cmtt/m/it}{} +%</OT1cmtt,Ucmtt> +% \end{macrocode} +% +% +% \subsubsection{Computer Modern Variable Typewriter (\texttt{OT1})} +% +% The Computer Modern Variable Typewriter family is the +% proportional spaced version of the Computer Modern Typewriter +% family. It is implemented as a separate family to allow easy use +% in normal text, including changes of shape/series etc if available. +% This family also allows normal hyphenation. +% \changes{v2.5b}{1997/02/25} +% {typo fixed in ot1cmvtt \cs{ProvidesFile} latex/2394} +% \begin{macrocode} +%<*OT1cmvtt> +\DeclareFontFamily{OT1}{cmvtt}{\hyphenchar\font45 } +\DeclareFontShape{OT1}{cmvtt}{m}{n}% + {% + <5><6><7><8><9><10><10.95>% + <12><14.4><17.28><20.74><24.88>cmvtt10% + }{} +% \end{macrocode} +% This font is probably not available to everybody as it is not +% part of the standard distribution. One might find it in +% \texttt{.../systems/knuth/local} on CTAN. +% \begin{macrocode} +\DeclareFontShape{OT1}{cmvtt}{m}{it}% + {% + <5><6><7><8><9><10><10.95>% + <12><14.4><17.28><20.74><24.88>cmvtti10% + }{} +%</OT1cmvtt> +% \end{macrocode} +% +% +% \subsubsection{Computer Modern Funny (\texttt{OT1})} +% +% \begin{macrocode} +%<*OT1cmfr> +\DeclareFontFamily{OT1}{cmfr}{\hyphenchar\font45 } +\DeclareFontShape{OT1}{cmfr}{m}{n}{% + <10>cmff10% + }{} +\DeclareFontShape{OT1}{cmfr}{m}{it}{% + <10>cmfi10% + }{} +%</OT1cmfr> +% \end{macrocode} +% +% \subsubsection{Computer Modern Dunhill (\texttt{OT1})} +% +% \begin{macrocode} +%<*OT1cmdh> +\DeclareFontFamily{OT1}{cmdh}{\hyphenchar\font45 } +\DeclareFontShape{OT1}{cmdh}{m}{n}{% + <10>cmdunh10% + }{} +%</OT1cmdh> +% \end{macrocode} +% +% \subsubsection{Computer Modern Fibonacci (\texttt{OT1})} +% +% \begin{macrocode} +%<*OT1cmfib> +\DeclareFontFamily{OT1}{cmfib}{\hyphenchar\font45 } +\DeclareFontShape{OT1}{cmfib}{m}{n}{% + <8>cmfib8% + }{} +%</OT1cmfib> +% \end{macrocode} +% +% \subsection{Math fonts} +% +% \subsubsection{Computer Modern Math italics} +% \changes{v2.0d}{1993/06/12}{OML/cmm/bx/it added for +% \cs{oldstylenums}} +% \changes{v2.3a}{1994/05/02}{Included font definitions for +% AMS-supplied cm fonts.} +% \begin{macrocode} +%<*OMLcmm> +\DeclareFontFamily{OML}{cmm}{\skewchar\font127 } +\DeclareFontShape{OML}{cmm}{m}{it}% + {<5><6><7><8><9>gen*cmmi% + <10><10.95>cmmi10% + <12><14.4><17.28><20.74><24.88>cmmi12% + }{} +\DeclareFontShape{OML}{cmm}{b}{it}{% + <5><6><7><8><9>gen*cmmib% + <10><10.95><12><14.4><17.28><20.74><24.88>cmmib10% + }{} +% \end{macrocode} +% This will allow the |\oldstylenums| command to work within +% |\textbf|. +% \begin{macrocode} +\DeclareFontShape{OML}{cmm}{bx}{it}% + {<->ssub*cmm/b/it}{} +%</OMLcmm> +% \end{macrocode} +% +% \subsubsection{Computer Modern Roman Math italics} +% +% \changes{v2.3d}{1994/10/30}{Added OMLcmr font substitutions pointing +% to OMLcmm. } +% \changes{v2.3f}{1995/04/22}{Corrected OMLcmr \cs{skewchar}} +% +% Some text symbols like `\t oo' and `$<$' are kept in the OML +% encoding, so we need font substititutions from OML/cmr to OML/cmm. +% \begin{macrocode} +%<*OMLcmr> +\DeclareFontFamily{OML}{cmr}{\skewchar\font127 } +\DeclareFontShape{OML}{cmr}{m}{n}% + {<->ssub*cmm/m/it}{} +\DeclareFontShape{OML}{cmr}{m}{it}% + {<->ssub*cmm/m/it}{} +\DeclareFontShape{OML}{cmr}{m}{sl}% + {<->ssub*cmm/m/it}{} +\DeclareFontShape{OML}{cmr}{m}{sc}% + {<->ssub*cmm/m/it}{} +\DeclareFontShape{OML}{cmr}{bx}{n}% + {<->ssub*cmm/b/it}{} +\DeclareFontShape{OML}{cmr}{bx}{it}% + {<->ssub*cmm/b/it}{} +\DeclareFontShape{OML}{cmr}{bx}{sl}% + {<->ssub*cmm/b/it}{} +\DeclareFontShape{OML}{cmr}{bx}{sc}% + {<->ssub*cmm/b/it}{} +%</OMLcmr> +% \end{macrocode} +% +% \subsubsection{Computer Modern Math symbols} +% +% \changes{v2.3a}{1994/05/02}{Included font definitions for +% AMS-supplied cm fonts.} +% \begin{macrocode} +%<*OMScmsy> +\DeclareFontFamily{OMS}{cmsy}{\skewchar\font48 } +\DeclareFontShape{OMS}{cmsy}{m}{n}{% + <5><6><7><8><9><10>gen*cmsy% + <10.95><12><14.4><17.28><20.74><24.88>cmsy10% + }{} +\DeclareFontShape{OMS}{cmsy}{b}{n}{% + <5><6><7><8><9>gen*cmbsy% + <10><10.95><12><14.4><17.28><20.74><24.88>cmbsy10% + }{} +%</OMScmsy> +% \end{macrocode} +% +% \subsubsection{Computer Modern Roman Math symbols} +% +% \changes{v2.3d}{1994/10/30}{Added OMScmr font substitutions pointing +% to OMScmm. } +% +% Some text symbols like `\P' and `\dag' are kept in the OMS encoding, +% so we need font substititutions from OMS/cmr to OMS/cmsy. +% \begin{macrocode} +%<*OMScmr> +\DeclareFontFamily{OMS}{cmr}{\skewchar\font48 } +\DeclareFontShape{OMS}{cmr}{m}{n}% + {<->ssub*cmsy/m/n}{} +\DeclareFontShape{OMS}{cmr}{m}{it}% + {<->ssub*cmsy/m/n}{} +\DeclareFontShape{OMS}{cmr}{m}{sl}% + {<->ssub*cmsy/m/n}{} +\DeclareFontShape{OMS}{cmr}{m}{sc}% + {<->ssub*cmsy/m/n}{} +\DeclareFontShape{OMS}{cmr}{bx}{n}% + {<->ssub*cmsy/b/n}{} +\DeclareFontShape{OMS}{cmr}{bx}{it}% + {<->ssub*cmsy/b/n}{} +\DeclareFontShape{OMS}{cmr}{bx}{sl}% + {<->ssub*cmsy/b/n}{} +\DeclareFontShape{OMS}{cmr}{bx}{sc}% + {<->ssub*cmsy/b/n}{} +%</OMScmr> +% \end{macrocode} +% +% \subsubsection{Computer Modern large symbols} +% +% \begin{macrocode} +%<*OMXcmex> +\DeclareFontFamily{OMX}{cmex}{} +\DeclareFontShape{OMX}{cmex}{m}{n}{% + <->sfixed*cmex10% + }{} +%</OMXcmex> +% \end{macrocode} +% +% +% \subsubsection{Concrete Roman} +% +% \changes{v2.3d}{1994/07/13}{Added new concrete shapes} +% \begin{macrocode} +%<*OT1ccr> +\DeclareFontFamily{OT1}{ccr}{\hyphenchar\font45 } +\DeclareFontShape{OT1}{ccr}{m}{n}{% + <5><6><7><8><9><10>gen*ccr% + <10.95><12><14.4><17.28><20.74><24.88>ccr10}{} +\DeclareFontShape{OT1}{ccr}{m}{it}{% + <10><10.95><12>ccti10}{} +\DeclareFontShape{OT1}{ccr}{m}{sc}{% + <10><10.95><12>cccsc10}{} +\DeclareFontShape{OT1}{ccr}{m}{sl}{% + <9>ccsl9% + <10><10.95><12>ccsl10}{} +\DeclareFontShape{OT1}{ccr}{c}{sl}{<9>ccslc9}{} +% \end{macrocode} +% Finally a few substitution fonts for combinations not available. +% \changes{v2.0f}{1993/09/24}{Added substitution fonts} +% \begin{macrocode} +\DeclareFontShape{OT1}{ccr}{bx}{n}% + {<->sub*cmr/bx/n}{} +\DeclareFontShape{OT1}{ccr}{bx}{sl}% + {<->sub*cmr/bx/sl}{} +\DeclareFontShape{OT1}{ccr}{bx}{it}% + {<->sub*cmr/bx/it}{} +%</OT1ccr> +% \end{macrocode} +% +% \subsubsection{Concrete Roman math italic} +% +% \changes{v2.4d}{1995/12/01} +% {Ulrik Vieth. Add 10.95 and 12 size for ccmi10 /1989} +% \begin{macrocode} +%<*OMLccm> +\DeclareFontFamily{OML}{ccm}{\skewchar\font127 } +\DeclareFontShape{OML}{ccm}{m}{it}{% + <10><10.95><12>ccmi10}{} +%</OMLccm> +% \end{macrocode} +% +% \subsubsection{Computer Modern Roman in \texttt{OT2} encoding} +% +% These fonts are from the University of Washington. They do not +% belong into this file but at the moment there is no other place. +% \begin{macrocode} +%<*OT2cmr> +\DeclareFontFamily{OT2}{cmr}{\hyphenchar\font45 } +\DeclareFontShape{OT2}{cmr}{m}{n}{% + <5><6><7><8><9>gen*wncyr% + <10><10.95><12><14.4><17.28><20.74><24.88>wncyr10}{} +\DeclareFontShape{OT2}{cmr}{m}{it}{% + <5><6><7><8><9>gen*wncyi% + <10><10.95><12><14.4><17.28><20.74><24.88>wncyi10}{} +\DeclareFontShape{OT2}{cmr}{m}{sc}{% + <5><6><7><8><9><10><10.95><12><14.4>% + <17.28><20.74><24.88>wncysc10}{} +%<+OT2cmr>%%%%%%%%%%%%% bold series +\DeclareFontShape{OT2}{cmr}{b}{n}{% + <5><6><7><8><9>gen*wncyb% + <10><10.95><12><14.4><17.28><20.74><24.88>wncyb10}{} +%</OT2cmr> +% \end{macrocode} +% +% \subsubsection{Computer Modern Sans in \texttt{OT2} encoding} +% +% Some more fonts from the University of Washington. +% \begin{macrocode} +%<*OT2cmss> +\DeclareFontFamily{OT2}{cmss}{\hyphenchar\font45 } +\DeclareFontShape{OT2}{cmss}{m}{n}{% + <8><9>gen*wncyss% + <10><10.95><12><14.4><17.28><20.74><24.88>wncyss10}{} +%</OT2cmss> +% \end{macrocode} +% +% The next line goes into all files and in addition prevents \dst{} +% from adding any further code from the main source file (such as a +% character table. +% \begin{macrocode} +\endinput +% \end{macrocode} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/cmfonts.ins b/Master/texmf-dist/source/latex/base/cmfonts.ins new file mode 100644 index 00000000000..8c06ef303f1 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/cmfonts.ins @@ -0,0 +1,113 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +In particular, permission is granted to customize the declarations in +this file to serve the needs of your installation. + +However, NO PERMISSION is granted to distribute a modified version +of this file under its original name. + +\endpreamble + + +\keepsilent +\usedir{tex/latex/base} + +\generate{\file{ot1cmss.fd}{\from{cmfonts.fdd}{OT1cmss}} + \file{ot1cmr.fd}{\from{cmfonts.fdd}{OT1cmr}} + \file{ot1cmtt.fd}{\from{cmfonts.fdd}{OT1cmtt,nowarn}} + \file{ot1cmvtt.fd}{\from{cmfonts.fdd}{OT1cmvtt}} + \file{ot1cmfib.fd}{\from{cmfonts.fdd}{OT1cmfib}} + \file{ot1cmfr.fd}{\from{cmfonts.fdd}{OT1cmfr}} + \file{ot1cmdh.fd}{\from{cmfonts.fdd}{OT1cmdh}}} + +\generate{\file{ucmr.fd}{\from{cmfonts.fdd}{Ucmr}} + \file{ucmss.fd}{\from{cmfonts.fdd}{Ucmss}} + \file{ucmtt.fd}{\from{cmfonts.fdd}{Ucmtt}} + \file{omlcmm.fd}{\from{cmfonts.fdd}{OMLcmm}} + \file{omscmsy.fd}{\from{cmfonts.fdd}{OMScmsy}} + \file{omxcmex.fd}{\from{cmfonts.fdd}{OMXcmex}} + \file{omlcmr.fd}{\from{cmfonts.fdd}{OMLcmr}} + \file{omscmr.fd}{\from{cmfonts.fdd}{OMScmr}} + } + + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space All *.fd} +\Msg{*} +\Msg{* To produce the documentation run the files ending with} +\Msg{* `.fdd' through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} +} + +\endbatchfile + diff --git a/Master/texmf-dist/source/latex/base/doc.dtx b/Master/texmf-dist/source/latex/base/doc.dtx new file mode 100644 index 00000000000..cb658e0c800 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/doc.dtx @@ -0,0 +1,4894 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% ^^A -*-LaTeX-*- +% +% ^^A These shouldn't come out in .ist files, hence the module +% ^^A comments, or in the printed version, hence temporary comment +% ^^A category for `<' +%\catcode`\<=14 +%<+package|shortvrb>\NeedsTeXFormat{LaTeX2e}[1994/12/01] +%<+package> \ProvidesPackage{doc} +%<+shortvrb>\ProvidesPackage{shortvrb} +%<+package|shortvrb> [2004/02/09 v2.1b +%<+package|shortvrb> Standard LaTeX documentation package (FMi)] +%\catcode`\<=12 +% +% \CheckSum{2171} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +%\iffalse This is a METACOMMENT +% Everything up to the next `\ fi' (without a blank) will +% be ignored. This is necessary because `%' may no longer +% be a comment mark when this file is read in. +% +% +%% Package `doc' to use with LaTeX 2e +%% Copyright (C) 1989-1999 Frank Mittelbach, all rights reserved. +% +% +% Version: Date: Changes: +% +% 1.0a 5.5.88 This is nothing but a collection of tests and +% hacks. It is certainly going to be greatly +% changed. +% Better not to use it! +% 1.5a and earlier... are not longer recorded +% 1.5b and higher... are documented with the (undocumented) \changes +% feature. +%\fi +% \changes{v1.5f}{1989/4/29}{Thanks to Brian who documented the +% \cs{changes} macro feature.} +% \changes{v1.5g}{1989/5/07}{MacroTopsep now called MacrocodeTopsep and +% new MacroTopsep added} +% \changes{v1.5h}{1989/05/17}{All lines shortened to <72 characters} +% \changes{v1.5j}{1989/06/09}{Corrections by Ron Whitney added} +% \changes{v1.5q}{1989/11/03}{`\ldots{}Listing macros renamed to +% `\ldots{}Input. Suggested by R. Wonneberger} +% \changes{v1.5w}{1990/02/05}{Counter codelineno renamed to CodelineNo} +% \changes{v1.9a}{1993/12/02}{Upgrade for LaTeX2e} +% \changes{v1.9d}{1993/12/20}{Protected changes entry.} +% \changes{v1.0p}{1994/05/21}{Use new error commands} +% +% +% \hyphenation{make-index} +% +% \DoNotIndex{\@,\@@par,\@beginparpenalty,\@empty} +% \DoNotIndex{\@flushglue,\@gobble,\@input} +% \DoNotIndex{\@makefnmark,\@makeother,\@maketitle} +% \DoNotIndex{\@namedef,\@ne,\@spaces,\@tempa} +% \DoNotIndex{\@tempb,\@tempswafalse,\@tempswatrue} +% \DoNotIndex{\@thanks,\@thefnmark,\@topnum} +% \DoNotIndex{\@@,\@elt,\@forloop,\@fortmp,\@gtempa,\@totalleftmargin} +% \DoNotIndex{\",\/,\@ifundefined,\@nil,\@verbatim,\@vobeyspaces} +% \DoNotIndex{\|,\~,\ ,\active,\advance,\aftergroup,\begingroup,\bgroup} +% \DoNotIndex{\mathcal,\csname,\def,\documentstyle,\dospecials,\edef} +% \DoNotIndex{\egroup} +% \DoNotIndex{\else,\endcsname,\endgroup,\endinput,\endtrivlist} +% \DoNotIndex{\expandafter,\fi,\fnsymbol,\futurelet,\gdef,\global} +% \DoNotIndex{\hbox,\hss,\if,\if@inlabel,\if@tempswa,\if@twocolumn} +% \DoNotIndex{\ifcase} +% \DoNotIndex{\ifcat,\iffalse,\ifx,\ignorespaces,\index,\input,\item} +% \DoNotIndex{\jobname,\kern,\leavevmode,\leftskip,\let,\llap,\lower} +% \DoNotIndex{\m@ne,\next,\newpage,\nobreak,\noexpand,\nonfrenchspacing} +% \DoNotIndex{\obeylines,\or,\protect,\raggedleft,\rightskip,\rm,\sc} +% \DoNotIndex{\setbox,\setcounter,\small,\space,\string,\strut} +% \DoNotIndex{\strutbox} +% \DoNotIndex{\thefootnote,\thispagestyle,\topmargin,\trivlist,\tt} +% \DoNotIndex{\twocolumn,\typeout,\vss,\vtop,\xdef,\z@} +% \DoNotIndex{\,,\@bsphack,\@esphack,\@noligs,\@vobeyspaces,\@xverbatim} +% \DoNotIndex{\`,\catcode,\end,\escapechar,\frenchspacing,\glossary} +% \DoNotIndex{\hangindent,\hfil,\hfill,\hskip,\hspace,\ht,\it,\langle} +% \DoNotIndex{\leaders,\long,\makelabel,\marginpar,\markboth,\mathcode} +% \DoNotIndex{\mathsurround,\mbox,\newcount,\newdimen,\newskip} +% \DoNotIndex{\nopagebreak} +% \DoNotIndex{\parfillskip,\parindent,\parskip,\penalty,\raise,\rangle} +% \DoNotIndex{\section,\setlength,\TeX,\topsep,\underline,\unskip,\verb} +% \DoNotIndex{\vskip,\vspace,\widetilde,\\,\%,\@date,\@defpar} +% \DoNotIndex{\[,\{,\},\]} +% \DoNotIndex{\count@,\ifnum,\loop,\today,\uppercase,\uccode} +% \DoNotIndex{\baselineskip,\begin,\tw@} +% \DoNotIndex{\a,\b,\c,\d,\e,\f,\g,\h,\i,\j,\k,\l,\m,\n,\o,\p,\q} +% \DoNotIndex{\r,\s,\t,\u,\v,\w,\x,\y,\z,\A,\B,\C,\D,\E,\F,\G,\H} +% \DoNotIndex{\I,\J,\K,\L,\M,\N,\O,\P,\Q,\R,\S,\T,\U,\V,\W,\X,\Y,\Z} +% \DoNotIndex{\1,\2,\3,\4,\5,\6,\7,\8,\9,\0} +% \DoNotIndex{\!,\#,\$,\&,\',\(,\),\+,\.,\:,\;,\<,\=,\>,\?,\_} +% \DoNotIndex{\discretionary,\immediate,\makeatletter,\makeatother} +% \DoNotIndex{\meaning,\newenvironment,\par,\relax,\renewenvironment} +% \DoNotIndex{\repeat,\scriptsize,\selectfont,\the,\undefined} +% \DoNotIndex{\arabic,\do,\makeindex,\null,\number,\show,\write,\@ehc} +% \DoNotIndex{\@author,\@ehc,\@ifstar,\@sanitize,\@title,\everypar} +% \DoNotIndex{\if@minipage,\if@restonecol,\ifeof,\ifmmode} +% \DoNotIndex{\lccode,\newtoks,\onecolumn,\openin,\p@,\SelfDocumenting} +% \DoNotIndex{\settowidth,\@resetonecoltrue,\@resetonecolfalse,\bf} +% \DoNotIndex{\clearpage,\closein,\lowercase,\@inlabelfalse} +% \DoNotIndex{\selectfont,\mathcode,\newmathalphabet,\rmdefault} +% \DoNotIndex{\bfdefault} +% +% \MakeShortVerb{\"} +% \setcounter{StandardModuleDepth}{1} +% +% {\catcode`\p=12 \catcode`\t=12 ^^A hack used later on to print +% \gdef\dimenvalue#1pt{$#1$pt}} ^^A a register value with a - sign +% +% \newcommand{\DOC}{\texttt{doc}} +% +% \changes{v1.9t}{1995/05/11}{Use \cs{GetFileInfo}} +% \GetFileInfo{doc.sty} +% +% \title{The \DOC{} and \texttt{shortvrb} Packages\thanks +% {This file has version number \fileversion{} dated \filedate{}.}} +% \author{Frank Mittelbach\thanks{Further commentary added at Royal +% Military College of Science by B. Hamilton Kelly; English +% translation of parts of the original German commentary +% provided by Andrew Mills; fairly substantial additions, +% particularly from \texttt{newdoc}, and +% documentation of post-v1.5q features added at v1.7a by Dave +% Love (SERC Daresbury Lab). Extraction of \texttt{shortvrb} +% package added by Joachim Schrod (TU~Darmstadt).}\\ +% Gutenberg Universit\"at Mainz} +% +% \maketitle +% +% \begin{abstract} +% This package contains the definitions that are necessary to +% format the documentation of package files. The package was +% developed in Mainz in cooperation with the Royal Military College +% of Science. This is an update which documents various changes +% and new features in \DOC{} and integrates the features of +% \textsf{newdoc}. +% \end{abstract} +% +% \newif\ifmulticols +% \IfFileExists{multicol.sty}{\multicolstrue}{} +% +% \ifmulticols +% \addtocontents{toc}{\protect\begin{multicols}{2}} +% \fi +% +% {\parskip 0pt ^^A We have to reset \parskip +% ^^A (bug in \LaTeX) +% \tableofcontents +% } +% +% \changes{v1.7a}{1992/02/25}{Miscellaneous small changes to the text} +% +% \ifmulticols +% \begin{multicols}{2}[\section*{Preface to version 1.7}] +% \else \section*{Preface to version 1.7} \fi +% +% This version of \texttt{doc.dtx} documents changes which have occurred +% since the last published version \cite{art:doc} but which have been +% present in distributed versions of \texttt{doc.sty} for some time. It +% also integrates the (undocumented) features of the distributed +% \texttt{newdoc.sty}. +% +% The following changes and additions have been made to the user +% interface since the published version~\cite{art:doc}. See +% \S\ref{sec:interface} for more details. +% \begin{description} +% \item[Driver mechanism] "\DocInput" is now used in the driver file +% to input possibly multiple independent \DOC{} files and \DOC{} no +% longer has to be the last package. "\IndexListing" is replaced +% by "\IndexInput"; +% \item[Indexing] is controlled by "\PageIndex" and "\CodelineIndex", +% one of which must be specified to produce an index---there is no +% longer a "\makeindex" in the default "\DocstyleParms"; +% \item[The \texttt{macro} environment] now takes as argument the +% macro name {\em with\/} the backslash; +% \item[Verbatim text] Newlines are now forbidden inside "\verb" and +% commands "\MakeShortVerb" and "\DeleteShortVerb" are provided for +% verbatim shorthand; +% \item[\texttt{\bslash par}] can now be used in "\DoNotIndex"; +% \item[Checksum/character table support] for ensuring the integrity +% of distributions is added; +% \item[\texttt{\bslash printindex}] becomes "\PrintIndex"; +% \item[\texttt{multicol.sty}] is no longer necessary to use \DOC{} or +% print the documentation (although it is recommended); +% \item[`Docstrip' modules] are recognised and formatted specially. +% \end{description} +% +% As well as adding some completely new stuff, +% the opportunity has been taken to add some commentary to the code +% formerly in \texttt{newdoc.sty} and that added after version 1.5k of +% \texttt{doc.sty}. Since (as noted in the sections concerned) this +% commentary wasn't written by Frank Mittelbach but the code was, it is +% probably {\em not\/} true in this case that ``if the code and +% comments disagree both are probably wrong''! +% +% \subsection*{Bugs} +% +% There are some known bugs in this version: +% \begin{itemize} +% \item The "\DoNotIndex" command doesn't work for some single +% character commands most noticeable "\%". +% \item The `General changes' glossary entry would come out after +% macro names with a leading "!" and possibly a leading |"|; +% \item If you have an old version of \textsf{makeindex} long "\changes" +% entries will come out strangely and you may find the section +% header amalgamated with the first changes entry. Try to get an +% up-to-date one (see p.~\pageref{makeindex:version}); +% \item Because the accompanying \textsf{makeindex} style files support +% the inconsistent attribute specifications of older and newer +% versions \textsf{makeindex} always complains about three `unknown +% specifier's when sorting the index and changes entries. +% \item If "\MakeShortVerb" and "\DeleteShortVerb" are used with +% single character arguments, e.g., "{|}" instead of "{\|}" chaos +% may happen. +% \end{itemize} +% (Some `features' are documented below.) +% +% \subsection*{Wish list} +% +% \begin{itemize} +% \item Hooks to allow "\DescribeMacro" and "\DescribeEnv" to write +% out to a special file information about the package's `exported' +% definitions which they describe. This could subsequently be +% included in the \texttt{docstrip}ped \texttt{.sty} file in a +% suitable form for use by smart editors in command completion, +% spelling checking etc., based on the packages used in a document. +% This would need agreement on a `suitable form'. \item Indexing of +% the modules used in \texttt{docstrip}'s "%<" directives. I'm not +% sure how to index directives containing module combinations; \item +% Writing out bibliographic information about the package; \item Allow +% turning off use of the special font for, say, the next guarded +% block. +% \end{itemize} +% +% \ifmulticols +% \end{multicols} +% +% \begin{multicols}{2}[\medskip \rule{\textwidth}{.3pt} +% \section{Introduction}] +% \else +% \section{Introduction} +% \fi +% +% The \TeX{} macros which are described here allow definitions and +% documentation to be held in one and the same file. This has the +% advantage that normally very complicated instructions are made +% simpler to understand by comments inside the definition. In addition +% to this, updates are easier and only one source file needs to be +% changed. On the other hand, because of this, the package files are +% considerably longer: thus \TeX{} takes longer to load them. If this +% is a problem, there is an easy remedy: one needs only to run the +% \texttt{docstrip.tex} program that removes nearly all lines that begin +% with a +% percent sign. +% +% The idea of integrated documentation was born with the development +% of the \TeX{} program; it was crystallized in Pascal with the \Web{} +% system. The advantages of this method are plain to see (it's easy +% to make comparisons \cite{art:Knuthliterat}). Since this +% development, systems similar to \Web{} have been developed for other +% programming languages. But for one of the most complicated +% programming languages (\TeX) the documentation has however been +% neglected. The \TeX{} world seems to be divided between:--- +% \begin{itemize} \item a couple of ``wizards'', who produce many +% lines of completely unreadable code ``off the cuff'', and \item many +% users who are amazed that it works just how they want it to do. Or +% rather, who despair that certain macros refuse to do what is +% expected of them.\end{itemize} +% +% I do not think that the \Web{} system is {\em the\/} reference work; +% on the contrary, it is a prototype which suffices for the +% development of programs within the \TeX{} world. It is sufficient, +% but not totally sufficient.\footnote{I know that this will be seen +% differently by a few people, but this product should not be seen as +% the finished product, at least as far as applications concerning +% \TeX{} are concerned. The long-standing debate over `multiple +% change files' shows this well.} As a result of \Web, new programming +% perspectives have been demonstrated; unfortunately, though, they +% haven't been developed further for other programming languages. +% +% The method of documentation of \TeX{} macros which I have introduced +% here should also only be taken as a first sketch. It is designed +% explicitly to run under \LaTeX{} alone. Not because I was of the +% opinion that this was the best starting point, but because from this +% starting point it was the quickest to develop.\footnote{This +% argument is a bad one, however, it is all too often trotted out.} As +% a result of this design decision, I had to move away from the +% concept of modularization; this was certainly a step backward. +% +% I would be happy if this article could spark off discussion over +% \TeX\ documentation. I can only advise anyone who thinks that they +% can cope without documentation to ``Stop Time'' until he or she +% completely understands the \AmSTeX{} source code. +% +% +% +% +% +% \subsection{Using the \DOC{} package} +% +% Just like any other package, invoke it by requesting it with a +% |\usepackage| command in the preamble. \textsf{Doc}'s use of +% |\reversemarginpars| may make it incompatible with some classes. +% \changes{v1.7a}{1992/02/25}{Altered usage info} +% +% +% \ifmulticols\end{multicols}\fi +% +% +% \section{The User Interface}\label{sec:interface} +% \subsection{The driver file} +% +% If one is going to document a set of macros with the \DOC{} +% package one has to prepare a special driver file which produces the +% formatted document. This driver file has the following +% characteristics: +% +% \noindent |\documentclass[|\meta{options}]^^A +% |{|\meta{document-class}|}|\\[1pt] +% |\usepackage{doc}|\\[3pt] +% \hspace*{10pt}\meta{preamble}\\[3pt] +% |\begin{document}|\\[3pt] +% \hspace*{10pt}\meta{special input commands}\\[3pt] +% |\end{document}| +% +% The \meta{document-class} might be any document class, I normally +% use \texttt{article}. +% +% In the \meta{preamble} one should place declarations which +% manipulate the behavior of the \DOC{} package like +% |\DisableCrossrefs| or |\OnlyDescription|. +% +% \DescribeMacro\DocInput \DescribeMacro\IndexInput +% Finally the \meta{special input commands} part should contain one or +% more |\DocInput|\meta{file name} and/or +% |\IndexInput|\meta{file name} commands. The +% |\DocInput| command is used for files prepared for the +% \DOC{} package whereas |\IndexInput| can be used for all kinds of +% macro files. See page \pageref{..Input} for more details of +% "\IndexInput". Multiple "\DocInput"s can be used with a +% number of included files which are each self-contained +% self-documenting packages---for instance, each containing +% "\maketitle". +% +% As an example, the driver file for the \DOC{} package itself is +% the following text surrounded by "%<*driver>" and "%</driver>". +% To produce the documentation you can simply run the \texttt{.dtx} +% file through \LaTeX{} in which case this code will be executed +% (loading the document class \texttt{ltxdoc}, etc.) or you can +% extract this into a separate file by using +% the \texttt{docstrip} program. +% The line numbers below are added by +% \DOC{}'s formatting. +% Note that the class \textsf{ltxdoc} has the \DOC{} package +% preloaded. +% \changes{v1.7a}{1992/03/06}{Added +% docstrip-derivable driver file as example.} +% \changes{v1.7c}{1992/04/01}{Expurgated ltugboat.sty from driver.} +% \begin{macrocode} +%<*driver> +\documentclass{ltxdoc} +\EnableCrossrefs + %\DisableCrossrefs % Say \DisableCrossrefs if index is ready +\CodelineIndex +\RecordChanges % Gather update information + %\OnlyDescription % comment out for implementation details + %\OldMakeindex % use if your MakeIndex is pre-v2.9 +\setlength\hfuzz{15pt} % dont make so many +\hbadness=7000 % over and under full box warnings +\begin{document} + \DocInput{doc.dtx} +\end{document} +%</driver> +% \end{macrocode} +% +% +% \subsection{General conventions} +% +% A \TeX{} file prepared to be used with the `doc' package +% consists of `documentation parts' intermixed with `definition +% parts'. +% +% Every line of a `documentation part' starts with a percent sign +% (|%|) in column one. It may contain arbitrary \TeX{} or +% \LaTeX{} commands except that the character `|%|' cannot be +% used as a comment character. +% \SortIndex{\string^\string^A}{\string\verb\verbatimchar +% \string^\string^A\verbatimchar \encapchar usage} To allow user +% comments, the |^^A| character is defined as a comment character +% later on. Such `metacomments' may be also be included simply by +% surrounding them with "\iffalse" \ldots~"\fi". +% +% All other parts of the file are called `definition parts'. They +% contain fractions of the macros described in the `documentation +% parts'. +% +% If the file is used to define new macros (e.g.\ as a package file in +% the |\usepackage| macro), the `documentation parts' are +% bypassed at high speed and the macro definitions are pasted +% together, even if they are split into several `definition parts'. +% +% \DescribeEnv{macrocode} +% On the other hand, if the documentation of these macros is to be +% produced, the `definition parts' should be typeset verbatim. To +% achieve this, these parts are surrounded by the \textsf{macrocode} +% environment. +% More exactly: before a `definition part' there should be a line +% containing\\ +% \hspace*{\MacroIndent}\verb*+% \begin{macrocode}+\\ +% and after this part a line\\ +% \hspace*{\MacroIndent}\verb*+% \end{macrocode}+\\ +% There must be {\em exactly\/} four spaces between the |%| +% and |\end{macrocode}| --- \TeX{} is looking for this string +% and not for the macro while processing a `definition part'. +% +% Inside a `definition part' all \TeX{} commands are allowed; even the +% percent sign could be used to suppress unwanted spaces etc. +% +% \DescribeEnv{macrocode*} Instead of the \textsf{macrocode} +% environment one can also use the \textsf{macrocode$*$} environment +% which produces the same results except that spaces are printed as +% \nopagebreak\verb*+ + characters. +% +% +% +% \subsection{Describing the usage of new macros} +% +% \DescribeMacro\DescribeMacro +% When you describe a new macro you may use |\DescribeMacro| to +% indicate that at this point the usage of a specific macro is +% explained. It takes one argument which will be printed in the margin +% and also produces a special index entry. For example, I used +% |\DescribeMacro{\DescribeMacro}| to make clear that this is the +% point where the usage of |\DescribeMacro| is explained. +% +% \DescribeMacro\DescribeEnv +% An analogous macro |\DescribeEnv| should be used to indicate +% that a \LaTeX{} environment is explained. It will produce a somewhat +% different index entry. Below I used |\DescribeEnv{verbatim}|. +% +% \DescribeEnv{verbatim} +% It is often a good idea to include examples of the usage of new macros +% in the text. Because of the |%| sign in the first column of every +% row, the \textsf{verbatim} environment is slightly altered to suppress +% those +% characters.\footnote{These macros were written by Rainer +% Sch\"opf~\cite{art:verbatim}. He also +% provided a new \textsf{verbatim} environment +% which can be used inside of other macros.} +% \DescribeEnv{verbatim*} +% The \textsf{verbatim$*$} environment is changed in the same way. +% \changes{v1.7a}{1992/02/26}{Documented \cs{verb} change.} +% \DescribeMacro\verb +% The "\verb" command is re-implemented to give an error report if a +% newline appears in its argument. +% The \textsf{verbatim} and \textsf{verbatim$*$} environments set text +% in the style defined by "\MacroFont"~(\S\ref{sec:macrofont}). +% +% +% +% \subsection{Describing the definition of new macros} +% +% \DescribeEnv{macro} +% To describe the definition of a new macro we use the \textsf{macro} +% environment. It has one argument: the name of the new +% macro.\footnote{This is a change to the style design I described in +% ^^A \TUB ^^A removed in case ltugboat.sty not used +% \textsl{TUGboat\/}\ 10\#1 (Jan.~89). We finally decided +% that it would +% be better to use the macro name {\em with\/} the +% backslash as an argument.} +% This argument is also used to print the name in the margin and to +% produce an index entry. +% Actually the index entries for usage and definition are different to +% allow an easy reference. +% This environment might be nested. In this case the +% labels in the margin are placed under each other. +% \changes{v1.7a}{1992/02/26}{Note on need for some text in macro env.} +% There should be some text---even if it's just an empty +% "\mbox{}"---in this environment before "\begin{macrocode}" or the +% marginal label won't print in the right place. +% +% \DescribeMacro\MacrocodeTopsep +% \DescribeMacro\MacroTopsep +% There also exist four style parameters: |\MacrocodeTopsep| and +% |\MacroTopsep| are used to control the vertical spacing above +% and below the \textsf{macrocode} and the \textsf{macro} +% \DescribeMacro\MacroIndent +% environment, |\MacroIndent| is used to indent the lines of code +% and +% \DescribeMacro\MacroFont \label{sec:macrofont} +% |\MacroFont| holds the font and a possible size change command +% for the code lines, the "verbatim"["*"] environment and the macro +% names printed in the margin. If you want +% to change their default values in a +% class file (like \texttt{ltugboat.cls}) use the |\DocstyleParms| +% command described below. Starting with release 2.0a it can now +% be changed directly as long as the redefinition happens before +% the |\begin{document}|. +% +% +% +% +% \subsection{Formatting the margins} +% +% \DescribeMacro\PrintDescribeMacro +% \DescribeMacro\PrintDescribeEnv +% \DescribeMacro\PrintMacroName +% \DescribeMacro\PrintEnvName +% As mentioned earlier, some macros and the \textsf{macro} environment +% print their arguments in the margin. This is actually done by four +% macros which are user +% definable.\footnote{You may place the changed definitions in a +% separate package +% file or at the beginning of the documentation +% file. +% For example, if you don't like any names in the +% margin +% but want a fine index you can simply +% \texttt{\bslash let} +% these macros equal \texttt{\bslash @gobble}. +% The doc package won't redefine any existing +% definitions of these macros.} +% They are named |\PrintDescribeMacro|, |\PrintDescribeEnv|, +% |\PrintMacroName| (called by the \textsf{macro} environment) and +% |\PrintEnvName| (called by the \textsf{environment} environment). +% +% +% \subsection{Using a special escape character} +% +% \DescribeMacro\SpecialEscapechar +% If one defines complicated macros it is sometimes necessary to +% introduce a new escape character because the `|\|' has got a +% special |\catcode|. In this case one can use +% |\SpecialEscapechar| to indicate which character is actually +% used to play the r\^ole of the `|\|'. A scheme like this is +% needed because the \textsf{macrocode} environment and its counterpart +% \textsf{macrocode$*$} produce an index entry for every occurrence of a +% macro name. They would be very confused if you didn't tell them that +% you'd changed |\catcode|$\,$s. The argument to +% |\SpecialEscapechar| is a single-letter control sequence, that +% is, one has to use "\|" for example to denote that `\verb+|+' +% is used as an escape character. |\SpecialEscapechar| only +% changes the behavior of the next \textsf{macrocode} or +% \textsf{macrocode$*$} environment. +% +% The actual index entries created will all be printed with |\| +% rather than \verb+|+, but this probably reflects their usage, if not +% their definition, and anyway must be preferable to not having any +% entry at all. The entries {\em could\/} be formatted appropriately, +% but the effort is hardly worth it, and the resulting index might be +% more confusing (it would certainly be longer!). +% +% +% \subsection{Cross-referencing all macros used} +% +% \DescribeMacro\DisableCrossrefs \DescribeMacro\EnableCrossrefs As +% already mentioned, every new macro name used within a +% \textsf{macrocode} or \textsf{macrocode$*$} environment will produce +% an index entry. In this way one can easily find out where a specific +% macro is used. Since \TeX{} is considerably slower when it has to +% produce such a bulk of index entries one can turn off this feature +% by using |\DisableCrossrefs| in the driver file. To turn it on again +% just use |\EnableCrossrefs|.\footnote{Actually, \texttt{\bslash +% EnableCrossrefs} changes things more drastically; any following +% \texttt{\bslash DisableCrossrefs} which might be present in the +% source will be ignored.} +% +% +% \DescribeMacro\DoNotIndex +% But also finer control is provided. The |\DoNotIndex| macro +% takes a list of macro names separated by commas. Those names won't +% show up in the index. You might use several |\DoNotIndex| +% commands: their lists will be concatenated. In this article I used +% |\DoNotIndex| for +% all macros which are already defined in \LaTeX. +% +% All three above declarations are local to the current group. +% +% Production (or not) of the index (via the "\makeindex" commend) is +% controlled by using or omitting the following declarations in the +% driver file preamble; if neither is used, no index is produced. +% \DescribeMacro\PageIndex Using "\PageIndex" makes all index +% entries refer to their page number; with +% \DescribeMacro\CodelineIndex "\CodelineIndex", index entries +% produced by "\DescribeMacro" and "\DescribeEnv" refer to page number +% but those produced by the \textsf{macro} environment refer to the +% code lines, which will be numbered automatically.\footnote{The line +% number is actually that of the first line of the first +% \textsf{macrocode} environment in the \textsf{macro} environment.} +% \DescribeMacro\theCodelineNo +% The style of this numbering can be controlled by defining the macro +% "\theCodelineNo". Its default definition is to use scriptsize +% arabic numerals; a user-supplied definition won't be overwritten. +% +% \DescribeMacro\CodelineNumbered +% When you don't wish to get an index but want your code lines +% numbered use "\CodelineNumbered" instead of "\CodelineIndex". This +% prevents the generation of an unnecessary ".idx" file. +% +% +% \subsection{Producing the actual index entries} +% +% Several of the aforementioned macros will produce some sort of index +% entries. These entries have to be sorted by an external +% program---the current implementation assumes that the +% \textsf{makeindex} program by Chen~\cite{art:Chen} is used. +% +% But this isn't built in: one has only to redefine some of the +% following macros to be able to use any other index program. All +% macros which are installation +% dependent are defined in such a way that they won't overwrite a +% previous definition. Therefore it is safe to put the changed +% versions in a package file which might be read in before the doc +% package. +% +% To allow the user to change the specific characters recognized by +% his or her index program all characters which have special meaning +% in the \textsf{makeindex} program are given symbolic +% names.\footnote{I don't know if there exists a program which needs +% more command characters, but I hope not.} +% However, all characters used should be of |\catcode| other than +% `letter' (11). +% +% \DescribeMacro{\actualchar} +% The |\actualchar| is used to separate the `key' and the actual +% index entry. +% \DescribeMacro{\quotechar} +% The |\quotechar| is used before a special index program +% character to suppress its special meaning. +% \DescribeMacro{\encapchar} +% The |\encapchar| separates the indexing information from a +% letter string which \textsf{makeindex} uses as a \TeX{} command to +% format the page number associated with a special entry. It is used +% in this package to apply the |\main| and the |\usage| +% commands. +% \DescribeMacro{\levelchar} +% Additionally |\levelchar| is used to separate `item', +% `subitem' and `subsubitem' entries. +% +% It is a good idea to stick to these symbolic names even if you know +% which index program is used. In this way your files will be +% portable. +% +% \DescribeMacro\SpecialMainIndex +% \DescribeMacro\SpecialMainEnvIndex +% To produce a main index entry for a macro the +% |\SpecialMainIndex| macro\footnote{This macro is called by the +% \textsf{macro} environment.} may be used. It is called `special' +% because it has to print its argument verbatim. +% A similar macro, called |\SpecialMainEnvIndex| is used for indexing +% the main definition point of an +% environment.\footnote{This macro is called by the +% \textsf{environment} environment.} +% \DescribeMacro\SpecialIndex +% If you want a normal index entry for a macro name +% |\SpecialIndex| might be used.\footnote{This macro is called +% within the \textsf{macrocode} environment when encountering a macro +% name.} +% \DescribeMacro\SpecialUsageIndex +% \DescribeMacro\SpecialEnvIndex +% To index the usage of a macro or an environment +% |\SpecialUsageIndex| and |\SpecialEnvIndex| may be used. +% \DescribeMacro\SortIndex +% Additionally a |\SortIndex| command is provided. It takes two +% arguments---the sort key and the actual index entry. +% +% All these macros are normally used by other macros; you will need +% them only in an emergency. +% +% \DescribeMacro\verbatimchar +% But there is one characteristic worth mentioning: all macro names in +% the index are typeset with the |\verb*| command. Therefore one +% special character is needed to act as a delimiter for this command. +% To allow a change in this respect, again this character is +% referenced indirectly, by the macro |\verbatimchar|. It expands +% by default to \verb?+? but if your code lines contain macros with +% `\texttt{+}' characters in their names (e.g.\ when you use \verb?\+?) +% you will end up with an index entry containing \verb?\verb+\++? +% which will be typeset as `\verb+\++' and not as `\verb?\+?'. In this +% case you should redefine |\verbatimchar| globally or locally to +% overcome this problem. +% +% \DescribeMacro\* +% We also provide a |\*| macro. This is intended to be used for +% index entries like +% \begin{quote} +% index entries \\ +% \hspace*{30pt} Special macros for \* +% \end{quote} +% Such an entry might be produced with the line: +%\begin{verbatim} +% \index{index entries\levelchar Special macros for \*} +%\end{verbatim} +% +% \DescribeMacro\OldMakeindex +% Versions of \textsf{makeindex} prior to 2.9 had some bugs affecting +% \DOC{}. One of these, +% pertaining to the "%" character doesn't have a work-around +% appropriate for versions with and without the +% bug.\label{makeindex:version} If +% you have an old version, invoke "\OldMakeindex" in a +% package file or the driver file to prevent problems with index entries +% such as "\%", although you'll probably normally want to turn off +% indexing of "\%" anyway. Try to get an up-to-date \textsf{makeindex} +% from one of the \TeX{} repositories. +% +% +% \subsection{Setting the index entries} +% +% \changes{v1.7a}{1992/03/11}{Usage note on gind.ist.} After the first +% formatting pass through the \texttt{.dtx} file you need to sort the +% index entries written to the \texttt{.idx} file using +% \textsf{makeindex} or your favourite alternative. You need a +% suitable style file for \textsf{makeindex} (specified by the +% \texttt{-s} switch). A suitable one is supplied with \DOC{}, +% called \texttt{gind.ist}. +% +% \DescribeMacro\PrintIndex +% To read in and print the sorted index, just put the +% |\PrintIndex| command as the last (commented-out, and thus +% executed during the documentation pass through the file) command +% in your package file. Precede it by any bibliography commands +% necessary for your citations. +% Alternatively, it may be more convenient to put all such calls +% amongst the arguments of the |\StopEventually| macro, in +% which case a |\Finale| command should appear at the end of +% your file. +% +% \DescribeEnv{theindex} +% Contrary to standard \LaTeX, the index is typeset in three columns +% by default. This is controlled by the \LaTeX{} counter +% `\textsf{IndexColumns}' and can therefore be changed with a +% |\setcounter| declaration. Additionally one doesn't want to +% start a new page unnecessarily. Therefore the \textsf{theindex} +% environment is redefined. +% \DescribeMacro\IndexMin +% When the \textsf{theindex} environment starts it will measure how much +% space is left on the current page. If this is more than +% |\IndexMin| then the index will start on this page. Otherwise +% |\newpage| is called. +% +% Then a short introduction about the meaning of several index entries +% is typeset (still in onecolumn mode). Afterwards the actual index +% entries follow in multi-column mode. +% \DescribeMacro\IndexPrologue +% You can change this prologue with the help of the +% |\IndexPrologue| macro. Actually the section heading is also +% produced in this way, so you'd better write something like: +% \begin{verbatim} +% \IndexPrologue{\section*{Index} The index entries underlined ...} +%\end{verbatim} +% When the \textsf{theindex} environment is finished the last page will +% be reformatted to produce balanced columns. This improves the layout +% and allows the next article to start on the same page. +% \DescribeMacro\IndexParms +% Formatting of the index columns (values for |\columnssep| +% etc.)\ is controlled by the |\IndexParms| macro. It assigns the +% following values: +% \SpecialUsageIndex{\parindent}\SpecialUsageIndex{\columnsep}^^A +% \SpecialUsageIndex{\parskip}\SpecialUsageIndex{\rightskip}^^A +% \SpecialUsageIndex{\mathsurround}\SpecialUsageIndex{\parfillskip} +% \begin{center} +% \begin{tabular}{l@{\,=\,}ll@{\,=\,}l} +% |\parindent| & \IndexParms \the\parindent & +% |\columnsep| & \IndexParms \the\columnsep \\ +% |\parskip| & \IndexParms \the\parskip & +% |\rightskip| & \IndexParms +% \expandafter\dimenvalue\the\rightskip \\ +% |\mathsurround| & \IndexParms \the\mathsurround & +% |\parfillskip| & \IndexParms +% \expandafter\dimenvalue\the\parfillskip +% \end{tabular} +% \end{center} +% \DescribeMacro{\@idxitem} +% Additionally it defines |\@idxitem| (which will be used when an +% |\item| command is encountered) and selects |\small| size. +% If you want to change any of these values you have to define them +% all. +% +% \DescribeMacro\main +% \DescribeMacro\usage +% The page numbers for main index entries are encapsulated by the +% |\main| macro (underlining its argument) and the numbers +% denoting the description are encapsulated by the |\usage| macro +% (which produces {\em italics}). As usual these commands are user +% definable. +% +% +% \subsection{Changing the default values of style parameters} +% +% \DescribeMacro\DocstyleParms If you want to overwrite some default +% settings made by the \DOC{} package, you can either put your +% declarations in the driver file (that is after \texttt{doc.sty} is +% read in) or use a separate package file for doing this work. In the +% latter case you can define the macro |\DocstyleParms| to contain all +% assignments. This indirect approach is necessary if your package file +% might be read before the \texttt{doc.sty}, when some of the +% registers are not allocated. Its default definition is null. +% +% The doc package currently assigns values to the following +% registers: +% \SpecialUsageIndex{\IndexMin}\SpecialUsageIndex{\MacrocodeTopsep}^^A +% \SpecialUsageIndex{\MacroTopsep}^^A +% \SpecialUsageIndex{\MacroIndent}\SpecialUsageIndex{\marginparpush}^^A +% \SpecialUsageIndex{\marginparwidth}\SpecialUsageIndex{\tolerance} +% \begin{center} +% \begin{tabular}{l@{\,=\,}ll@{\,=\,}l} +% |\IndexMin| & \the\IndexMin & +% |\MacroTopsep| & \the\MacroTopsep \\ +% |\marginparwidth|& \the\marginparwidth & +% |\MacroIndent| & \the\MacroIndent \\ +% |\marginparpush| & \the\marginparpush & +% |\MacrocodeTopsep| & \the\MacrocodeTopsep \\ +% |\tolerance| & \the\tolerance +% \end{tabular} +% \end{center} +% +% +% \subsection{Short input of verbatim text pieces} +% +% \DescribeMacro\MakeShortVerb +% \DescribeMacro{\MakeShortVerb*} \DescribeMacro\DeleteShortVerb It is +% awkward to have to type, say, "\verb|"\ldots"|" continually when +% quoting +% verbatim bits (like macro names) in the text, so an abbreviation +% mechanism is provided. Pick a character \meta{c}---one which +% normally has catcode `other' unless you have very good reason not +% to---which you don't envisage using in the text, or not using often. +% (I like |"|, but you may prefer "|" if you have |"| active to do +% umlauts, for instance.) Then if you say +% "\MakeShortVerb{\"\meta{c}"}" you can subsequently use +% \meta{c}\meta{text}\meta{c} as the equivalent of +% "\verb"\meta{c}\meta{text}\meta{c}; analogously, the "*"-form +% "\MakeShortVerb*{\"\meta{c}"}" gives you the equivalent of +% "\verb*"\meta{c}\meta{text}\meta{c}. Use +% "\DeleteShortVerb{\"\meta{c}"}" if you subsequently want \meta{c} to +% revert to its previous meaning---you can always turn it on again +% after the unusual section. The `short verb' commands make global +% changes. The abbreviated "\verb" may not appear in the argument of +% another command just like "\verb". However the `short verb' +% character may be used freely in the \textsf{verbatim} and +% \textsf{macrocode} environments without ill effect. +% "\DeleteShortVerb" is silently ignored if its argument does not +% currently represent a short verb character. Both commands type a +% message to tell you the meaning of the character is being changed. +% +% Please remember that the command "\verb" cannot be used in arguments +% of other commands. Therefore abbreviation characters for "\verb" +% cannot be used there either. +% +% This feature is also available as a sole package, \texttt{shortvrb}. +% +% +% \subsection{Additional bells and whistles} +% +% We provide macros for logos such as \Web, \AmSTeX, \BibTeX, +% \SliTeX{} and \PlainTeX. Just type |\Web|, |\AmSTeX|, +% |\BibTeX|, |\SliTeX| or |\PlainTeX|, respectively. +% \LaTeX{} and \TeX{} are already defined in \texttt{latex.tex}. +% +% \DescribeMacro\meta +% Another useful macro is |\meta| which has one argument and +% produces something like \meta{dimen parameter}. +% +% \DescribeMacro\OnlyDescription +% \DescribeMacro\StopEventually +% You can use the |\OnlyDescription| declaration in the driver +% file to suppress the last part of your document (which presumably +% exhibits the code). To make this work +% you have to place the command |\StopEventually| at a suitable +% point in your file. This macro has one argument in which you put +% all information you want to see printed if your document ends at +% this point (for example a bibliography which is normally printed at +% the very end). When the |\OnlyDescription| declaration is +% missing the |\StopEventually| +% \DescribeMacro\Finale +% macro saves its argument in a macro called |\Finale| which can +% afterwards be used to get things back (usually at the very end). +% Such a scheme makes changes in two places unnecessary. +% +% Thus you can use this feature to produce a local guide for the +% \TeX{} users which describes only the usage of macros (most of them +% won't be interested in your definitions anyway). For the same +% reason the |\maketitle| \DescribeMacro\maketitle command is slightly +% changed to allow multiple titles in one document. So you can make +% one driver file reading in several articles at once. +% \DescribeMacro{\ps@titlepage} To avoid an unwanted +% \textsf{pagestyle} on the title page the |\maketitle| command issues +% a |\thispagestyle{titlepage}| declaration which produces a +% \textsf{plain} page if the \textsf{titlepage} page style is +% undefined. This allows class files like \textsf{ltugboat.cls} to +% define their own page styles for title pages. +% +% \DescribeMacro\AlsoImplementation +% Typesetting the whole document is the default. However, this default +% can also be explicitly selected using the declaration +% |\AlsoImplementation|. This overwrites any previous +% |\OnlyDescription| declaration. The \LaTeXe{} distribution, for +% example, is documented using the \texttt{ltxdoc} class which allows +% for a configuration file \texttt{ltxdoc.cfg}. In such a file one +% could then add the statement +% \begin{quote} +% |\AtBeginDocument{\AlsoImplementation}| +% \end{quote} +% to make sure that all documents will show the code part. +% +% \DescribeMacro\IndexInput \label{..Input} Last but not least I +% defined an |\IndexInput| macro which takes a file name as an +% argument and produces a verbatim listing of the file, indexing every +% command as it goes along. This might be handy, if you want to learn +% something about macros without enough documentation. I used this +% feature to cross-reference \texttt{latex.tex} getting a verbatim +% copy with about 15 pages index.\footnote{It took quite a long time +% and the resulting \texttt{.idx} file was longer than the +% \texttt{.dvi} file. Actually too long to be handled by the +% \textsf{makeindex} program directly (on our MicroVAX) but the final +% result was worth the trouble.} +% +% \DescribeMacro\changes +% To maintain a change history within the file, the |\changes| +% command may be placed amongst the description part of the changed +% code. It takes three arguments, thus: +% \begin{quote} +% |\changes{|\meta{version}|}{|\meta{date}|}{|^^A +% \meta{text}|}| +% \end{quote} +% The changes may be used to produce an auxiliary file (\LaTeX's +% |\glossary| mechanism is used for this) which may be printed +% after suitable formatting. The |\changes| macro encloses the +% \meta{date} in parentheses and appends the \meta{text} to form the +% printed entry in such a change history; because old +% versions\footnote{Before 2.6.} of the \textsf{makeindex} +% program limit such fields to 64 characters, care should be taken +% not to exceed this limit when describing the change. When +% referring to macros in change descriptions it is conventional to use +% "`"\meta{macroname} rather than attempting to format it properly and +% using up valuable characters in the entry with old \textsf{makeindex} +% versions. +% +% \changes{v1.7a}{1992/02/26}{Description of \cs{RecordChanges} etc. +% added +% to interface section.} \DescribeMacro\RecordChanges To cause the +% change information to be written out, include "\RecordChanges" in +% the driver file. \DescribeMacro\PrintChanges To read in and print +% the sorted change history (in two columns), just put the +% |\PrintChanges| command as the last (commented-out, and thus +% executed during the documentation pass through the file) command in +% your package file. Alternatively, this command may form one of the +% arguments of the |\StopEventually| command, although a change +% history is probably {\em not\/} required if only the description is +% being printed. The command assumes that \textsf{makeindex} or some +% other program has processed the \texttt{.glo} file to generate a +% sorted \texttt{.gls} file. You need a special \textsf{makeindex} +% style file; a suitable one is supplied with \DOC{}, called +% \texttt{gglo.ist}. \DescribeMacro\GlossaryMin +% \DescribeMacro\GlossaryPrologue \DescribeMacro\GlossaryParms The +% "\GlossaryMin", "\GlossaryPrologue" and "\GlossaryParms" macros are +% analagous to the "\Index"\ldots\ versions. (The \LaTeX{} `glossary' +% mechanism is used for the change entries.) +% +% \label{sec:checksum} +% \DescribeMacro\CharacterTable +% \DescribeMacro\CheckSum +% To overcome some of the problems of sending files over the networks +% we developed two macros which should detect corrupted files. If one +% places the lines +% \begin{flushleft} +% \small\ttfamily ^^A \ttfamily to get the blanks between "..."s +% ^^A right +%"%%\CharacterTable"\\ +%"%% {Upper-case " +%"\A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z"\\ +%"%% Lower-case " +%"\a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z"\\ +%"%% Digits \0\1\2\3\4\5\6\7\8\9"\\ +%"%% Exclamation \! Double quote "\verb=\"= +%" Hash (number) \#"\\ +%"%% Dollar \$ Percent \% Ampersand \&"\\ +%"%% Acute accent \' Left paren \( Right paren \)"\\ +%"%% Asterisk \* Plus \+ Comma \,"\\ +%"%% Minus \- Point \. Solidus \/"\\ +%"%% Colon \: Semicolon \; Less than \<"\\ +%"%% Equals \= Greater than \> Question mark \?"\\ +%"%% Commercial at \@ Left bracket \[ Backslash \\"\\ +%"%% Right bracket \] Circumflex \^ Underscore \_"\\ +%"%% Grave accent \` Left brace \{ Vertical bar \|"\\ +%"%% Right brace \} Tilde \~}"\\ +%"%%" +%\end{flushleft} +% at the beginning of the file then character translation failures +% will be detected, provided of course, that the used \DOC{} +% package has a correct default table. The percent +% signs\footnote{There are two percent signs in each line. This has +% the effect that these lines are not removed by the +% \texttt{docstrip.tex} program.} at the beginning of the lines should +% be typed in, since only the \DOC{} package should look at this +% command. +% +% Another problem of mailing files is possible truncation. To detect +% these sort of errors we provide a |\CheckSum| macro. The check-sum +% of a file is simply the number of backslashes in the code, i.e.\ all +% lines between the \textsf{macrocode} environments. But don't be +% afraid: you don't have count the code-lines yourself; this is done +% by the \DOC{} package for you. You simply have to use +% the |\StopEventually| (which starts looking for backslashes) and the +% |\Finale| command. The latter will inform you either that your file +% has no check-sum (telling you the right number) or that your number +% is incorrect (this time telling you both the correct and the +% incorrect one). Then you go to the top of your file inserting the +% line +% \begin{quote} +% |%% \CheckSum{|\meta{number}|}| +% \end{quote} +% and that's all. If you precede it only with one percent then the +% line will not show up in \texttt{docstrip} versions of the file. +% You should do so whenever you are using conditional code (see +% \texttt{docstrip} documentation) since then the check-sum will not +% reflect the number of backslashes in the stripped of versions. +% +% \DescribeMacro\bslash +% From time to time, it is necessary to print a |\| without +% being able to use the |\verb| command because the +% |\catcode|$\,$s of the symbols are already firmly +% established. In this instance we can use the command +% |\bslash| presupposing, of course, that the actual font in +% use at this point contains a `backslash' as a symbol. Note that +% this definition of |\bslash| is expandable; it inserts a +% $"\"_{12}$. This means that you have to |\protect| +% it if it is used in `moving arguments'. +% +% \DescribeMacro\MakePrivateLetters +% \changes{v1.7a}{1992/02/26}{Documented \cs{MakePrivateLetters} in +% interface section}^^A +% If your macros "\catcode" anything other than "@" to `letter', you +% should redefine "\MakePrivateLetters" so that it also makes the +% relevant characters `letters' for the benefit of the indexing. The +% default definition is just "\makeatletter". +% +% \DescribeMacro\DontCheckModules \DescribeMacro\CheckModules +% \DescribeMacro\Module \DescribeMacro\AltMacroFont The `module' +% directives of the \textsf{docstrip} system \cite{art:docstrip} are +% normally recognised and invoke special formatting. This can be +% turned on and off in the \texttt{.dtx} file or the driver file using +% "\CheckModules" and "\DontCheckModules". If checking for module +% directives is on (the default) then code in the scope of the +% directives is set as determined by the hook "\AltMacroFont", which +% gives {\small\ttfamily\itshape small italic type\-writer\/} by +% default in the New Font Selection Scheme but just ordinary +% {\small\ttfamily small type\-writer} in the old one, where a font +% such as italic typewriter can't be used portably (plug for NFSS); +% you will need to override this if you don't have the italic +% typewriter font available. Code is in such a scope if it's on a +% line beginning with "%<" or is between lines starting with +% "%<*"\meta{name list}">" and "%</"\meta{name list}">". The +% directive is formatted by the macro "\Module" whose single argument +% is the text of the directive between, but not including, the angle +% brackets; this macro may be re-defined in the driver or package file +% and by default produces results like \Module{+foo\string|bar} with no +% following space. +% +% \DescribeMacro{StandardModuleDepth} Sometimes (as in this file) the +% whole code is surrounded by modules to produce several files from a +% single source. In this case it is clearly not appropriate to format +% all code lines in a special "\AltMacroFont". For this reason a +% counter "StandardModuleDepth" is provided which defines the level of +% module nesting which is still supposed to be formatted in +% "\MacroFont" rather then "\AltMacroFont". The default setting is +% "0", for this documentation it was set to +%\begin{verbatim} +% \setcounter{StandardModuleDepth}{1} +%\end{verbatim} +% at the beginning of the file. +% +% +% \subsection{Basic usage summary} +% \changes{v1.7a}{1992/03/11}{Added basic usage summary to spell +% it out.} +% +% To sum up, the basic structure of a \texttt{.dtx} file without any +% refinements is like this: +% \begin{verse}\small +% "% "\meta{waffle}\ldots\\ +% \quad\ldots \\ +% "% \DescribeMacro{\fred}"\\ +% "% "\meta{description of fred's use}\\ +% \quad\ldots\\ +% "% \StopEventually{"\meta{finale code}"}"\\ +% \quad\ldots\\ +% "% \begin{macro}{\fred}"\\ +% "% "\meta{commentary on macro fred}\\ +% \verb*+% \begin{macrocode}+\\ +% \meta{code for macro fred}\\ +% \verb*+% \end{macrocode}+\\ +% "% \end{macro}"\\ +% \quad\ldots\\ +% "% \Finale \PrintIndex \PrintChanges" +% \end{verse} +% For examples of the use of most---if not all---of the features +% described above consult the \texttt{doc.dtx} source itself. +% +% \subsection{Acknowledgements} +% +% I would like to thank all folks at Mainz and at the Royal Military +% College of Science for their help in this project. Especially Brian +% and Rainer who pushed everything with their suggestions, bug fixes, +% etc. +% +% A big thank you to David Love who brought the documentation +% up-to-date again, after I neglected this file for more than two +% years. This was most certainly a tough job as many features added to +% \texttt{doc.dtx} after its publication in \textsl{TUGboat\/} have +% been never properly described. Beside this splendid work he kindly +% provided additional code (like ``docstrip'' module formatting) which +% I think every \textsf{doc.dtx} user will be grateful for. +% +% +% \StopEventually{ +% \begin{thebibliography}{1} +% \bibitem{book:Buerger} \textsc{G. A. B\"urger}. +% \newblock Wunderbare Reisen zu Wasser und zu Lande, Feldz\"uge +% und lustige Abenteuer des Freyherrn v.\ M\"unchhausen. +% \newblock London, 1786 \& 1788. +% \bibitem{art:Knuthliterat} \textsc{D. E. Knuth}. +% \newblock Literate Programming. +% \newblock Computer Journal, Vol.~27, \textit{pp}.~97--111, +% May 1984. +% \bibitem{book:KnuthA} \textsc{D. E. Knuth}. +% \newblock Computers \& Typesetting (The \TeX book). +% \newblock Addison-Wesley, Vol. A, 1986. +% \bibitem{art:Chen} \textsc{L. Lamport}. +% \newblock MakeIndex: An Index Processor for \LaTeX. +% \newblock 17 February 1987. +% \newblock (Taken from the file \texttt{makeindex.tex} provided +% with +% the program source code.) +% \bibitem{art:doc} \textsc{Frank Mittelbach}. +% \newblock The \DOC{}-option. +% \newblock \textsl{TUGboat}, Vol.~10(2), \textit{pp}.~245--273, +% July 1989. +% \bibitem{art:docstrip} \textsc{Frank Mittelbach, Denys Duchier and +% Johannes Braams}. +% \newblock \texttt{docstrip.dtx} (to appear). +% \newblock The file is part of the DOC package. +% \bibitem{book:Raspe} \textsc{R. E. Raspe} (*1737, \dag 1797). +% \newblock Baron M\"unchhausens narrative of his marvellous +% travels and campaigns in Russia. +% \newblock Oxford, 1785. +% \bibitem{art:verbatim} \textsc{Rainer Sch\"opf}. +% \newblock A New Implementation of \LaTeX's \texttt{verbatim} and +% \texttt{verbatim*} Environments. +% \newblock File \texttt{verbatim.doc}, version 1.4i. +% \end{thebibliography} +% ^^A\PrintIndex +% ^^A\PrintChanges +% +% \ifmulticols +% \addtocontents{toc}{\protect\end{multicols}} +% \fi +% +% } ^^A end \StopEventually +% +% +% \section{The Description of Macros} +% +% Most of the following code is destined for \texttt{doc.sty} after +% processing with \texttt{docstrip} to include the module +% \textbf{style} indicated here. (All code in this file not +% appropriate to \texttt{doc.sty} has to be included explicitly by +% docstrip so that this \texttt{.dtx} file can be used as directly as +% a package file rather than the stripped version.) The usual font +% change for the conditionally-included lines between the +% \Module{*style} and \Module{/style} directives is suppressed since +% only the lines with an explicit directive are special in this file. +% \begin{macrocode} +%<*package> +% \end{macrocode} +% Under \LaTeXe{} the test to avoid reading +% \DOC{} in twice is normally unnecessary. It was kept to only to +% stay compatible with \LaTeX209 styles that |\input| \DOC{} +% directly. +% \changes{v1.5i}{1989/06/07}{Avoid reading the file twice.} +% \begin{macrocode} +\@ifundefined{macro@cnt}{}{\endinput} +% \end{macrocode} +% +% \DescribeMacro\fileversion +% \DescribeMacro\filedate +% \DescribeMacro\docdate +% As you can see I used macros like |\fileversion| to denote the +% version number and the date. They are defined at the very beginning +% of the package file (without a surrounding \textsf{macrocode} +% environment), so I don't have to search for this place here when I +% change the version number. You can see their actual outcome in a +% footnote to the title. +% +% +% The first thing that we do next is to get ourselves a new comment +% sign. Because all sensible signs are already occupied, we will +% choose one that can only be entered indirectly: +% {\DoNotIndex{\^}^^A avoid misinterpretion !!!!! VERIFY +% \begin{macrocode} +\catcode`\^^A=14 +% \end{macrocode} +% We repeat this statement at the beginning of the document in case +% the \texttt{inputenc} package is used disabling it again. +% \changes{v2.0b}{1998/05/19}{Init docs private comment char at begin +% of document again (pr2581)} +% \begin{macrocode} +\AtBeginDocument{\catcode`\^^A=14\relax} +% \end{macrocode} +% \SortIndex{\string^\string^A}{\string\verb\verbatimchar +% \string^\string^A\verbatimchar +% \encapchar main} +% } +% +% +% \subsection{Options supported by \DOC{}} +% +% Not options available at the moment +% +% \begin{macrocode} +% \end{macrocode} +% +% +% \subsection{Macros surrounding the `definition parts'} +% +% \begin{macro}{\macrocode} +% Parts of the macro definition will be surrounded by the +% environment \textsf{macrocode}. Put more precisely, they will be +% enclosed by a macro whose argument (the text to be set +% `verbatim') is terminated by the string +% \verb*+% \end{macrocode}+. Carefully note the number of spaces. +% |\macrocode| is defined completely analogously to +% |\verbatim|, but because a few small changes were carried +% out, almost all internal macros have got new names. We start by +% calling the macro |\macro@code|, the macro which bears the +% brunt of most of the work, such as |\catcode| reassignments, +% etc. +% \changes{v1.5r}{1989/11/04}{Support for code line no. (Undoc)} +% \begin{macrocode} +\def\macrocode{\macro@code +% \end{macrocode} +% Then we take care that all spaces have the same width, and that +% they are not discarded. +% \begin{macrocode} + \frenchspacing \@vobeyspaces +% \end{macrocode} +% Before closing, we need to call |\xmacro@code|. It is this +% macro that expects an argument which is terminated by the above +% string. This way it is possible to keep the |\catcode| +% changes local. +% \changes{v1.5r}{1989/11/04}{Support for code line no. (Undoc)} +% \changes{v1.5t}{1989/11/07}{Common code moved to \cs{macro@code}.} +% \begin{macrocode} + \xmacro@code} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\macro@code} +% We will now begin with the macro that does the actual work: +% \begin{macrocode} +\def\macro@code{% +% \end{macrocode} +% In theory it should consist of a \textsf{trivlist} environment, but +% the empty space before and after the environment should not be +% too large. +% \begin{macrocode} + \topsep \MacrocodeTopsep +% \end{macrocode} +% The next parameter we set is |\@beginparpenalty|, in order +% to prevent a page break before such an environment. +% \begin{macrocode} + \@beginparpenalty \predisplaypenalty +% \end{macrocode} +% We then start a |\trivlist|, set |\parskip| back to +% zero and start an empty |\item|. +% \changes{v1.9b}{1993/12/03}{Forcing any label from macro env.} +% \begin{macrocode} + \if@inlabel\leavevmode\fi + \trivlist \parskip \z@ \item[]% +% \end{macrocode} +% Additionally, everything should be set in \texttt{typewriter} font. +% Some people might prefer it somewhat differently; because of this +% the font choice is +% macro-driven.\footnote{The font change has to be placed +% {\em after\/} +% the \texttt{\bslash item}. Otherwise a change to +% \texttt{\bslash baselineskip} will affect the +% paragraph above.} +% \begin{macrocode} + \macro@font +% \end{macrocode} +% Because |\item| sets various parameters, we have found it +% necessary to alter some of these retrospectively. +% \begin{macrocode} + \leftskip\@totalleftmargin \advance\leftskip\MacroIndent + \rightskip\z@ \parindent\z@ \parfillskip\@flushglue +% \end{macrocode} +% The next line consists of the \LaTeX{} definition of |\par| +% used in |\verbatim| and should result in blank lines being +% shown as blank lines. +% \changes{v1.5l}{1989/09/10}{Code line numbers supported.} +% \changes{v1.5t}{1989/11/07}{Call \cs{leavevmode} to get \cs{everypar} +% on blank lines.} +% \changes{v1.7c}{1992/3/24}{Added \cs{interlinepenalty} to +% \cs{par} from +% verbatim.sty} +% \begin{macrocode} + \blank@linefalse \def\par{\ifblank@line + \leavevmode\fi + \blank@linetrue\@@par + \penalty\interlinepenalty} +% \end{macrocode} +% What use is this definition of |\par|\,? We use the macro +% |\obeylines| of \cite{book:KnuthA} which changes all |^^M| +% to |\par| so that each can control its own indentation. +% Next we must also ensure that all special signs are normalized; +% that is, they must be given |\catcode| $12$. +% \changes{v1.8b}{1993/09/21}{Changed to conform to new LaTeX verbatim, +% which handles more ligatures.} +% \begin{macrocode} + \obeylines + \let\do\do@noligs \verbatim@nolig@list + \let\do\@makeother \dospecials +% \end{macrocode} +% \changes{v1.5t}{1989/11/07}{Common code added.} +% \changes{v1.5w}{1990/02/05}{Skip of \cs{@totalleftmargin} added.} If +% indexing by code lines is switched on the line number is incremented +% and set appropriately. We also check whether the start of the next +% line indicates a \texttt{docstrip} module directive and process it +% appropriately if so using "\check@module". +% \begin{macrocode} + \global\@newlistfalse + \global\@minipagefalse + \ifcodeline@index + \everypar{\global\advance\c@CodelineNo\@ne + \llap{\theCodelineNo\ \hskip\@totalleftmargin}% + \check@module}% + \else \everypar{\check@module}% + \fi +% \end{macrocode} +% We also initialize the cross-referencing feature by calling +% |\init@crossref|. This will start the scanning mechanism +% when encountering an escape character. +% \begin{macrocode} + \init@crossref} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\ifblank@line} +% \begin{macro}{\blank@linetrue} +% \begin{macro}{\blank@linefalse} +% |\ifblank@line| is the switch used in the definition above. +% In the original \textsf{verbatim} environment the |\if@tempswa| +% switch is used. This is dangerous because its value may change +% while processing lines in the \textsf{macrocode} environment. +% \begin{macrocode} +\newif\ifblank@line +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\endmacrocode} +% Because we have begun a \textsf{trivlist} environment in the +% \textsf{macrocode} environment, we must also end it. We must +% also act on the value of the "pm@module" flag (see below) and +% empty "\everypar". +% \changes{v1.5r}{1989/11/04}{Support for code line no. (Undoc)} +% \begin{macrocode} +\def\endmacrocode{% + \ifpm@module \endgroup \pm@modulefalse \fi + \everypar{}% + \global\@inlabelfalse + \endtrivlist +% \end{macrocode} +% Additionally |\close@crossref| is used to do anything needed +% to end the cross-referencing mechanism. +% \begin{macrocode} + \close@crossref} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\MacroFont} +% Here is the default definition for the |\MacroFont| macro. +% With the new math font handling in NFSS2 it isn't any longer +% correct to suppress the math font setup since this is now handled +% differently. But to keep the font change fast we use only a +% single |\selectfont| (in |\small|) and do the rest by hand. +% \changes{v1.5x}{1990/02/17}{\cs{math@fontsfalse} added for NFSS.} +% \changes{v1.7a}{1992/03/13}{Added \cs{reset@font} for NFSS.} +% \changes{v1.8c}{1993/10/25}{NFSS standard} +% \changes{v1.9t}{1995/05/26}{Removed \cs{math@fontsfalse} (different +% math setup /pr1622} +% \begin{macrocode} +\@ifundefined{MacroFont}{% + \if@compatibility +% \end{macrocode} +% Despite the above statement we will call |\small| first if +% somebody is using a \LaTeX2.09 document with doc. I wouldn't have +% bothered since doc-sources should be up-to-date but since the +% request came from someone called David Carlisle \ldots :-) +% \changes{v1.9y}{1996/01/26}{Support compat mode} +% \begin{macrocode} + \def\MacroFont{\small + \usefont\encodingdefault + \ttdefault + \mddefault + \updefault + }% + \else + \def\MacroFont{\fontencoding\encodingdefault + \fontfamily\ttdefault + \fontseries\mddefault + \fontshape\updefault + \small}% + \fi + }{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\AltMacroFont} +% \begin{macro}{\macro@font} +% \changes{v1.7a}{1992/03/12}{Added to support distinction of modules.} +% \changes{v1.7c}{1992/03/26}{Altered font change for OFSS.} +% \changes{v1.7m}{1992/10/11}{Use sltt as default.} +% \changes{v1.8c}{1993/10/25}{NFSS standard} +% \changes{v1.9t}{1995/05/26}{Removed \cs{math@fontsfalse} (different +% math setup /pr1622} +% Although most of the macro code is set in "\MacroFont" we want to be +% able to switch to indicate module code set in "\AltMacroFont". +% "\macro@font" keeps track of which one we're using. We can't do the +% same thing sensibly in OFSS as in NFSS. +% \begin{macrocode} +\@ifundefined{AltMacroFont}{% + \if@compatibility +% \end{macrocode} +% Again have |\small| first if we are in compat mode. +% \changes{v1.9y}{1996/01/26}{Support compat mode} +% \begin{macrocode} + \def\AltMacroFont{\small + \usefont\encodingdefault + \ttdefault + \mddefault + \sldefault + }% + \else + \def\AltMacroFont{\fontencoding\encodingdefault + \fontfamily\ttdefault + \fontseries\mddefault + \fontshape\sldefault + \small + }% + \fi + }{} +% \end{macrocode} +% To allow changing the "\MacroFont" in the preamble we defer +% defining the internally used "\macro@font" until after the +% preamble. +% \changes{v2.0a}{1998/05/16}{Support changing \cs{MacroFont} in +% preamble} +% \begin{macrocode} +\AtBeginDocument{\let\macro@font\MacroFont} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\check@module} +% \begin{macro}{\ifpm@module} +% \changes{v1.7a}{1992/03/12}{Added.} +% This is inserted by "\everypar" at the start of each macrocode line to +% check whether it starts with module information. (Such information is +% of the form "%<"\meta{switch}">", where the "%" must be at the +% start of the line and \meta{switch} comprises names with various +% possible separators and a possible leading "+", "-", "*" or "/" +% \cite{art:docstrip}. All that concerns us here is what the first +% character of \meta{switch} is.) First it checks the "pm@module" +% flag in case the previous line had a non-block module +% directive i.e., not "%<*" or "%</"; if it did we need to close the +% group it started and unset the flag. "\check@module" looks ahead at +% the next token and then calls "\ch@percent" to take action depending +% on whether or not it's a "%"; we don't want to expand the token at +% this stage. This is all done conditionally so it can be turned off +% if it causes problems with code that wasn't designed to be +% \texttt{docstrip}ped. +% \begin{macrocode} +\def\check@module{% + \ifcheck@modules + \ifpm@module \endgroup \pm@modulefalse \fi + \expandafter\futurelet\expandafter\next\expandafter\ch@percent + \fi} +\newif\ifpm@module +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\DontCheckModules} +% \begin{macro}{\CheckModules} +% \changes{v1.7a}{1992/03/12}{Added.} +% \begin{macro}{\ifcheck@modules} +% Here are two driver-file interface macros for turning the module +% checking on and off using the "check@modules" switch. +% \begin{macrocode} +\def\DontCheckModules{\check@modulesfalse} +\def\CheckModules{\check@modulestrue} +\newif\ifcheck@modules \check@modulestrue +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\ch@percent} +% \changes{v1.7a}{1992/03/12}{Added.} +% If the lookahead token in "\next" is $"%"_{12}$ we go on to check +% whether the following one is "<" and otherwise do nothing. Note the +% "\expandafter" to get past the "\fi". +% \begin{macrocode} +\def\ch@percent{% + \if \percentchar\next + \expandafter\check@angle + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\check@angle} +% \changes{v1.7a}{1992/03/12}{Added.} +% Before looking ahead for the "<" the "%" is gobbled by the +% argument here. +% \begin{macrocode} +\def\check@angle#1{\futurelet\next\ch@angle} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ch@angle} +% \changes{v1.7a}{1992/03/12}{Added.} +% \changes{v1.9k}{1994/02/22}{Have \texttt{<} active} +% If the current lookahead token is "<" we are defined to be +% processing a module directive can go on to look for "+" etc.; +% otherwise we must put back the gobbled "%". With \LaTeXe{} +% \texttt{<} is active so we have to be a bit careful. +% \begin{macrocode} +\begingroup +\catcode`\<\active +\gdef\ch@angle{\ifx<\next + \expandafter\ch@plus@etc + \else \percentchar \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ch@plus@etc} +% \begin{macro}{\check@plus@etc} +% \changes{v1.7a}{1992/03/12}{Added.} +% We now have to decide what sort of a directive we're dealing with +% and do the right thing with it. +% \begin{macrocode} +\gdef\ch@plus@etc<{\futurelet\next\check@plus@etc} +\gdef\check@plus@etc{% + \if +\next + \let\next\pm@module + \else\if -\next + \let\next\pm@module + \else\if *\next + \let\next\star@module + \else\if /\next + \let\next\slash@module +% \end{macrocode} +% At some point in the past the \texttt{docstrip} program was +% partly rewritten and at that time it also got support for a very +% special directive of the form |%<<| followed by an arbitrary +% string. This is used for ``verbatim'' inclusion in case of +% certain problem. We do not really attempt to pretty print that +% case but we need at least account for it since otherwise we get +% an error message since this is the only case where we will not +% have a closing |>|. +% \changes{v2.0n}{2001/05/16}{Partly support docstrip's ``verbatim'' +% directive (pr/3331)} +% \begin{macrocode} + \else\ifx <\next + \percentchar + \else + \let\next\pm@module + \fi\fi\fi\fi\fi + \next} +\endgroup +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\pm@module} +% If we're not dealing with a block +% directive ("*" or "/") i.e., it's a single special line, we set +% everything up to the next ">" appropriately and then change to the +% special macro font inside a group which will be ended at the start +% of the next line. If the apparent module directive is missing the +% terminating ">" this will lose, but then so will the \texttt{docstrip} +% implementation. An alternative strategy would be to have +% "\pm@module" make ">" active and clear a flag set here to indicate +% processing the directive. Appropriate action could then be taken if +% the flag was found still to be set when processing the next line. +% \changes{v1.7a}{1992/03/12}{Added.} +% \changes{v1.7i}{1992/07/11}{Support for fonts depending on nesting.} +% \begin{macrocode} +\begingroup +\catcode`\~=\active +\lccode`\~=`\> +\lowercase{\gdef\pm@module#1~}{\pm@moduletrue + \Module{#1}\begingroup +% \end{macrocode} +% We switch to a special font as soon the nesting is higher than +% the current value of "\c@StandardModuleDepth". We do a local +% update to the "\guard@level" here which will be restored after +% the current input line. +% \begin{macrocode} + \advance\guard@level\@ne + \ifnum\guard@level>\c@StandardModuleDepth\AltMacroFont\fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\star@module} +% \begin{macro}{\slash@module} +% \changes{v1.7a}{1992/03/12}{Added.} +% \changes{v1.7f}{1992/05/16}{Take account of nested guards.} +% \changes{v1.7i}{1992/07/11}{Add counter to determine when to switch to +% special font.} +% If the start or end of a module {\em block\/} is indicated, after +% setting the guard we have to check whether a change in the macrocode +% font should be done. This will be the case if we are already inside +% a block or are ending the outermost block. If so, we globally +% toggle the font for subsequent macrocode sections between the normal +% and special form, switching to the new one immediately. +% \changes{v1.7i}{1992/07/17}{Support for fonts depending on module +% nesting} +% \begin{macrocode} +\lowercase{\gdef\star@module#1~}{% + \Module{#1}% + \global \advance \guard@level\@ne + \ifnum \guard@level>\c@StandardModuleDepth + \global\let\macro@font=\AltMacroFont \macro@font + \fi} +\catcode`\>=\active +\gdef\slash@module#1>{% + \Module{#1}% + \global \advance \guard@level\m@ne + \ifnum \guard@level=\c@StandardModuleDepth + \global\let\macro@font\MacroFont \macro@font + \fi +} +\endgroup +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\c@StandardModuleDepth} +% \changes{v1.7i}{1992/07/11}{Counter added.} +% Counter defining up to which level modules are considered part of +% the main code. If, for example, the whole code is surrounded by +% a |%<*package>| module we better set this counter to |1| to avoid +% getting the whole code be displayed in typewriter italic. +% \begin{macrocode} +\newcounter{StandardModuleDepth} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\guard@level} +% \changes{v1.7f}{1992/05/16}{Added.} +% We need a counter to keep track of the guard nesting. +% \begin{macrocode} +\newcount \guard@level +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Module} +% \changes{v1.7a}{1992/03/12}{Added.} +% \changes{v1.7d}{1992/04/25}{Use sans font for modules.} +% This provides a hook to determine the way the module directive is +% set. It gets as argument everything between the angle brackets. +% The default is to set the contents in sans serif text between +% $\langle\,\rangle$ with the special characters suitably "\mathcode"d +% by "\mod@math@codes". (You can't just set it in a sans text font +% because normally "|" will print as an em-dash.) This is done +% differently depending on whether we have the NFSS or the old one. In +% the latter case we can easily change "\fam" appropriately. +% \changes{v1.8c}{1993/10/25}{NFSS standard} +% \begin{macrocode} +\@ifundefined{Module}{% +% \end{macrocode} +% With NFSS what we probably {\em should\/} do is change to a new +% "\mathversion" but I (Dave Love) haven't spotted an easy way to +% do so correctly if the document uses a version other than +% "normal". (We need to know in what font to set the other +% groups.) This uses a new math alphabet rather than version and +% consequently has to worry about whether we're using +% \textsf{oldlfnt} or not. I expect there's a better +% way\ldots +% \begin{macrocode} + \def\Module#1{\mod@math@codes$\langle\mathsf{#1}\rangle$} + }{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\mod@math@codes} +% \changes{v1.7c}{1992/03/26}{Added.} As well as `words', the module +% directive text might contain any of the characters "*/+-,&|!()" +% for the current version of \textsf{docstrip}. We only need +% special action for two of them in the math code changing required +% above: "|" is changed to a "\mathop" (it's normally |"026A|) and +% "&" is also made a "\mathop", but in family 0. Remember that "&" +% will not have a special catcode when it's encountered. +% \begin{macrocode} +\def\mod@math@codes{\mathcode`\|="226A \mathcode`\&="2026} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\mathsf} +% \changes{v1.7c}{1992/03/26}{Added.} +% \changes{v1.7d}{1992/04/25}{Use sans font for modules.} +% \changes{v1.7n}{1993/02/21}{\cs{sfmath} Renamed to \cs{mathsf}.} +% \changes{v1.8c}{1993/10/25}{NFSS standard} +% If NFSS is in use we need a new math alphabet which uses a sans serif +% font. To support both the release one and two of NFSS the alphabet +% was renamed to "\mathsf" which is defined in NFSS2. +% \begin{macrocode} +%\ifx\selectfont\undefined +%\else +% \ifx\mathsf\undefined +% \newmathalphabet*{\mathsf}{\sfdefault}{m}{n}\fi +%\fi +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\MacrocodeTopsep} +% \begin{macro}{\MacroIndent} +% In the code above, we have used two registers. Therefore we have +% to allocate them. The default values might be overwritten with +% the help of the |\DocstyleParms| macro. +% \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)} +% \changes{v1.5y}{1990/02/24}{Default changed.} +% \changes{v1.6b}{1990/06/15}{\cs{rm} moved before \cs{scriptsize} to +% avoid unnecessary fontwarning.} +% \begin{macrocode} +\newskip\MacrocodeTopsep \MacrocodeTopsep = 3pt plus 1.2pt minus 1pt +\newdimen\MacroIndent +\settowidth\MacroIndent{\rmfamily\scriptsize 00\ } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% +% +% \begin{macro}{\macrocode*} +% \begin{macro}{\endmacrocode*} +% Just as in the \textsf{verbatim} environment, there is also a +% `star' variant of the \textsf{macrocode} environment in which a +% space is shown by the symbol \verb*+ +. Until this moment, I +% have not yet used it (it will be used in the description of the +% definition of |\xmacro@code| below) but it's exactly on this one +% occasion {\em here\/} that you can't use it (cf.\ M\"unchhausens +% Marsh problem)\footnote{Karl Friedrich Hieronymus Frhr.\ v.\ +% M\"unchhausen (*1720, \dag1797). Several books were written +% about fantastic adventures supposedly told by him (see +% \cite{book:Raspe} or \cite{book:Buerger}). In one story he +% escaped from the marsh by pulling himself out by his hair.} +% directly. Because of this, on this one occasion we'll cheat +% around the problem with an additional comment character. But now +% back to |\macrocode*|. We start with the macro |\macro@code| +% which prepares everything and then call the macro |\sxmacro@code| +% whose argument is terminated by the string +%\verb*+% \end{macrocode*}+. +% \begin{macrocode} +\@namedef{macrocode*}{\macro@code\sxmacro@code} +% \end{macrocode} +% As we know, |\sxmacro@code| and then |\end{macrocode*}| +% (the macro, not the string), will be executed, so that for a +% happy ending we still need to define the macro +% |\endmacrocode*|. +% \begin{macrocode} +\expandafter\let\csname endmacrocode*\endcsname = \endmacrocode +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% +% +% +% +% +% \begin{macro}{\xmacro@code} +\catcode`\!=\catcode`\% ^^A In this section there must not be + ^^A any exclamation marks. + ^^A +% As already mentioned, the macro |\xmacro@code| expects an +% argument delimited by the string \verb*+% \end{macrocode}+. At +% the moment that this macro is called, the |\catcode| of +% \TeX's special characters are 12 (`other') or 13 (`active'). +% Because of this we need to utilize a different escape character +% during the definition. This happens locally. +% \begin{macrocode*} +\begingroup +\catcode`\|=\z@ \catcode`\[=\@ne \catcode`\]=\tw@ +% \end{macrocode*} +% Additionally, we need to ensure that the symbols in the above +% string contain the |\catcode|$\,$s which are available +% within the \textsf{macrocode} environment. +% \begin{macrocode*} +\catcode`\{=12 \catcode`\}=12 +\catcode`\%=12 \catcode`\ =\active \catcode`\\=\active +!% \end{macrocode*} +! Next follows the actual definition of |\macro@code|; +! notice the +! use of the new escape character. We manage to get the argument +! surrounded by the string |\end{macrocode}|, but at the end +! however, in spite of the actual characters used during the +! definition of +! this macro, |\end| with the argument |{macrocode}| +! will be executed, to ensure a balanced environment. +! \begin{macrocode*} +|gdef|xmacro@code#1% \end{macrocode}[#1|end[macrocode]] +!% \end{macrocode*} +! \begin{macro}{\sxmacro@code} +! The definition of |\sxmacro@code| is completely analogous, +! only +! here a slightly different terminating string will be used. +! Note that the space is not active in this environment. +! \begin{macrocode} +|catcode`| =12 +|gdef|sxmacro@code#1% \end{macrocode*}[#1|end[macrocode*]] +!% \end{macrocode} +! because the |\catcode| changes have been made local by +! commencing a +! new group, there now follows the matching |\endgroup| +! in a rather +! unusual style of writing. +! \begin{macrocode} +|endgroup +!% \end{macrocode} +\catcode`\!=12 +% \end{macro} +% \end{macro} +% +% +% +% +% \subsection{Macros for the `documentation parts'} +% +% +% \begin{macro}{\DescribeMacro} +% \begin{macro}{\Describe@Macro} +% \changes{v1.5v}{1990/01/28}{Macro added.} +% \changes{v1.5j}{1989/06/09}{\cs{ignorespaces} added as a temporary +% fix} +% \begin{macro}{\DescribeEnv} +% \begin{macro}{\Describe@Env} +% \changes{v1.5v}{1990/01/28}{Macro added.} +% \changes{v1.5j}{1989/06/09}{\cs{ignorespaces} added as a temporary +% fix} +% The |\DescribeMacro| and |\DescribeEnv| macros should +% print their arguments in the margin and produce an index entry. +% We simply use |\marginpar| to get the desired result. This +% is however not the best solution because the labels might be +% slightly misplaced. One also might get a lot of `marginpar moved' +% messages which are hard-wired into the \LaTeX{} output +% routine.\footnote{It might be better to change these macros into +% environments like the \textsf{macro} environment.} First we change +% to horizontal mode if necessary. The \LaTeX{} macros +% |\@bsphack| and |\@esphack| are used to make those +% commands invisible (i.e.\ to normalize the surrounding space and +% to make the |\spacefactor| transparent). +% \changes{v1.5v}{1990/01/28}{\cs{MakePrivateLetters} added.} +% \begin{macrocode} +\def\DescribeMacro{\leavevmode\@bsphack +% \end{macrocode} +% When documenting the code for the \texttt{amstex.sty} option we +% encountered a bug: the |\catcode| of |@| was active and +% therefore couldn't be used in command names. So we first have to +% make sure that we get all |\catcode|s right by calling +% |\MakePrivateLetters| inside a group. Then we call +% |\Describe@Macro| to do the work. +% \changes{v2.0g}{1999/03/22}{Parse backslash as letter in argument +% to \cs{DescribeMacro}.} +% \changes{v2.0h}{1999/03/25}{Correct errors introduced in v2.0g.} +% \begin{macrocode} + \begingroup\MakePrivateLetters\Describe@Macro} +\def\Describe@Macro#1{\endgroup + \marginpar{\raggedleft\PrintDescribeMacro{#1}}% +% \end{macrocode} +% Note the use of |\raggedleft| to place the output flushed +% right. Finally we call a macro which produces the actual index +% entry and finish with |\@esphack| to leave no +% trace.\footnote{The whole mechanism won't work because +% of the \texttt{\bslash leavevmode} in front. +% As a temporary change \texttt{\bslash ignorespaces} +% is added.} +% \begin{macrocode} + \SpecialUsageIndex{#1}\@esphack\ignorespaces} +% \end{macrocode} +% The |\DescribeEnv| macro is completely analogous. +% \changes{v1.5v}{1990/01/28}{\cs{MakePrivateLetters} added.} +% \begin{macrocode} +\def\DescribeEnv{\leavevmode\@bsphack\begingroup\MakePrivateLetters + \Describe@Env} +\def\Describe@Env#1{\endgroup + \marginpar{\raggedleft\PrintDescribeEnv{#1}}% + \SpecialEnvIndex{#1}\@esphack\ignorespaces} +% \end{macrocode} +% To put the labels in the left margin we have to use the +% |\reversemarginpar| declaration. (This means that the +% \texttt{doc.sty} can't be used with all classes or packages.) +% We also +% make the |\marginparpush| zero and |\marginparwidth| suitably +% wide. +% \changes{v1.5d}{1989/4/28}{\cs{marginparwidth} setting added.} +% \begin{macrocode} +\reversemarginpar +\setlength\marginparpush{0pt} \setlength\marginparwidth{8pc} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bslash} +% \changes{v1.7a}{1992/02/26}{Moved \cs{bslash} documentation to `user +% interface' part} +% We start a new group in which to hide the alteration of +% |\catcode|$\,$s, and make \verb+|+ introduce commands, +% whilst |\| becomes an `other' character. +% +% \begin{macrocode} +{\catcode`\|=\z@ \catcode`\\=12 +% \end{macrocode} +% Now we are able to define |\bslash| (globally) to generate a +% backslash of |\catcode| `other'. We then close this group, +% restoring original |\catcode|$\,$s. +% \SpecialEscapechar{\|} +% \begin{macrocode} +|gdef|bslash{\}} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\verbatim} +% \begin{macro}{\verbatim*} +% \changes{v1.7i}{1992/07/12}{Added changed definition for verbatim!*.} +% The \textsf{verbatim} environment holds no secrets; it consists of +% the normal \LaTeX{} environment. We also set the +% |\@beginparpenalty| and change to the font given by +% |\MacroFont|. +% \begin{macrocode} +\def\verbatim{\@beginparpenalty \predisplaypenalty \@verbatim + \MacroFont \frenchspacing \@vobeyspaces \@xverbatim} +% \end{macrocode} +% We deal in a similar way with the star form of this environment. +% \begin{macrocode} +\@namedef{verbatim*}{\@beginparpenalty \predisplaypenalty \@verbatim + \MacroFont \@sxverbatim} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@verbatim} +% Additionally we redefine the |\@verbatim| macro so that it +% suppresses |%| characters at the beginning of the line. The +% first lines are copied literally from \texttt{latex.tex}. +% \changes{v1.7i}{1992/07/12}{Added \cs{@@par} to clear possible +% \cs{parshape}.} +% \begin{macrocode} +\def\@verbatim{\trivlist \item[]\if@minipage\else\vskip\parskip\fi + \leftskip\@totalleftmargin\rightskip\z@ + \parindent\z@\parfillskip\@flushglue\parskip\z@ + \@@par + \@tempswafalse +% \end{macrocode} +% |\@verbatim| sets |^^M|, the end of line character, to +% be equal to |\par|. This control sequence is redefined +% here; |\@@par| is the paragraph primitive of \TeX. +% \changes{v1.7c}{1992/3/24}{Added \cs{interlinepenalty} to +% \cs{par} from verbatim.sty} +% \begin{macrocode} + \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par + \penalty\interlinepenalty +% \end{macrocode} +% We add a control sequence |\check@percent| to the definition +% of |\par| whose task it is to check for a percent character. +% \begin{macrocode} + \check@percent}% +% \end{macrocode} +% The rest is again copied literally from \texttt{latex.tex} (less +% "\tt"). +% \changes{v1.7a}{1992/02/26}{Removed redundant \cs{tt}.} +% \changes{v1.8b}{1993/09/21}{Changed to conform to new LaTeX verbatim, +% which handles more ligatures.} +% \begin{macrocode} + \obeylines + \let\do\do@noligs \verbatim@nolig@list + \let\do\@makeother \dospecials} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\check@percent} +% Finally we define |\check@percent|. Since this must compare a +% character with a percent sign we must first (locally) change +% percent's |\catcode| so that it is seen by \TeX. The definition +% itself is nearly trivial: grab the following character, check if +% it is a |%|, and insert it again if not. At the end of the +% \textsf{verbatim} environment this macro will peek at the next +% input line. In that case the argument to |\check@percent| might +% be a |\par| or a macro with arguments. Therefore we make the +% definition |\long| (|\par| allowed) and use the normal |\next| +% mechanism to reinsert the argument after the |\fi| if necessary. +% \changes{v1.5i}{1989/06/07}{Definition changed to `long'} +% \changes{v1.5i}{1989/06/07}{Macro \cs{next} used to guard against +% macro with arguments} +% There is a subtle problem here, the equal sign between +% |\next| and |#1| is actually necessary. Do you see why? +% The omission of this token once caused a funny error. +% \changes{v1.5u}{1989/11/14}{equal sign added.} +% \begin{macrocode} +{\catcode`\%=12 + \long\gdef\check@percent#1{\ifx #1%\let\next\@empty \else + \let\next=#1\fi \next}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\verb} +% \changes{v1.7a}{1992/02/27}{Now warns about newlines (from +% newdoc with `@noligs added).} +% \changes{v1.8b}{1993/09/21}{Changed to conform to new LaTeX \cs{verb}} +% We re-define "\verb" to check for newlines in its argument since a +% missing delimiter is difficult to detect in \DOC{} source. +% The code is the saem as in latex.tex of September 19, 1993. +% Perhaps there should be a font-changing +% hook rather than just using "\tt", but if so it probably should be +% different from "\MacroFont" since that normally includes "\small" +% and would look wrong inline. +% \changes{v1.7a}{1992/02/28}{Added math mode check (from verbatim.sty)} +% \begin{macrocode} +\def\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi + \bgroup \let\do\do@noligs \verbatim@nolig@list + \ttfamily \verb@eol@error \let\do\@makeother \dospecials + \@ifstar{\@sverb}{\@vobeyspaces \frenchspacing \@sverb}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\verb@balance@group} +% \begin{macro}{\verb@egroup} +% \begin{macro}{\verb@eol@error} +% \changes{v1.8b}{1993/09/21}{Renamed \cs{verb@err} to +% \cs{verb@eol@error}, as in new LaTeX verbatim.} +% \begin{macrocode} +\let\verb@balance@group\@empty + +\def\verb@egroup{\global\let\verb@balance@group\@empty\egroup} + +\begingroup + \obeylines% + \gdef\verb@eol@error{\obeylines% + \def^^M{\verb@egroup\@latex@error{% + Text for \noexpand\verb command ended by end of line}\@ehc}}% +\endgroup +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@sverb} +% \changes{v1.7a}{1992/02/27}{Added for \cs{verb} change.} +% \changes{v1.7a}{1992/02/28}{Now same as in verbatim.sty.} +% \changes{v1.8b}{1993/09/21}{Changed to conform to new LaTeX verbatim, +% which has better error trapping.} +% See \cite{art:verbatim} for commentary. +% \begin{macrocode} +\def\@sverb#1{% + \catcode`#1\active \lccode`\~`#1% + \gdef\verb@balance@group{\verb@egroup + \@latex@error{Illegal use of \noexpand\verb command}\@ehc}% + \aftergroup\verb@balance@group + \lowercase{\let~\verb@egroup}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\verbatim@nolig@list} +% \begin{macro}{\do@noligs} +% These macros replace the old "\@noligs" mechanism by an +% extensible version to allow more ligatures to be added. +% \begin{macrocode} +\def\verbatim@nolig@list{\do\`\do\<\do\>\do\,\do\'\do\-} +\def\do@noligs#1{% + \catcode`#1\active + \begingroup + \lccode`\~=`#1\relax + \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1}}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\macro} +% \begin{macro}{\m@cro@} +% \changes{v1.5v}{1990/01/28}{\cs{macro@} renamed to \cs{m@cro@} +% since AmSTeX +% defines another macro of the same name.} +% \begin{macro}{\macro@cnt} +% \label{page:macro} The \textsf{macro} environment is implemented as +% a \textsf{trivlist} environment, whereby in order that the macro +% names can be placed under one another in the margin +% (corresponding to the macro's nesting depth), the macro +% |\makelabel| must be altered. In order to store the nesting +% depth, we use a counter. We also need a counter to count the +% number of nested \textsf{macro} environments. +% \changes{v1.5k}{1989/08/17}{Fix for save stack problem.} +% \changes{v1.9k}{1994/02/22}{Fix probably no longer necessary} +% \begin{macrocode} +\newcount\macro@cnt \macro@cnt=0 +% \end{macrocode} +% The environment takes an argument---the macro name to be +% described. Since this name may contain special `letters' we have +% to re-|\catcode| them before scanning the argument. This is done +% by the |\MakePrivateLetters| macro. +% \changes{v1.5k}{1989/08/17}{Fix for save stack problem.} +% \changes{v1.7a}{1992/02/26}{Catcode backslash to other (from newdoc).} +% \changes{v1.9k}{1994/02/22}{Don't omit extra group} +% \begin{macrocode} +\def\macro{\begingroup + \catcode`\\12 + \MakePrivateLetters \m@cro@ \iftrue} +% \end{macrocode} +% +% \begin{macro}{\environment} +% \changes{v1.8c}{1993/10/25}{Environment added} +% The ``environment'' envrionment will be implemented just like the +% ``macro'' environment flagging any differences in the code by +% passing |\iffalse| or |\iftrue| to the |\m@cro@| environment +% doing the actual work. +% \begin{macrocode} +\def\environment{\begingroup + \catcode`\\12 + \MakePrivateLetters \m@cro@ \iffalse} +% \end{macrocode} +% \end{macro} +% +% After scanning the argument we close the group to get the normal +% |\catcode|$\,$s back. Then we assign a special value to +% |\topsep| and start a \textsf{trivlist} environment. +% \changes{v1.5f}{1989/5/07}{MacroTopsep parameter added.} +% \changes{v1.5k}{1989/08/17}{Fix for save stack problem.} +% \changes{v1.8c}{1993/10/25}{Support ``environment'' env} +% \changes{v1.9k}{1994/02/22}{Remove \cs{macro@level}} +% \begin{macrocode} +\long\def\m@cro@#1#2{\endgroup \topsep\MacroTopsep \trivlist +% \end{macrocode} +% We also save the name being described in |\saved@macroname| for +% use in conjunction with the |\changes| macro. +% \begin{macrocode} + \edef\saved@macroname{\string#2}% +% \end{macrocode} +% Now there follows a variation of |\makelabel| which is used +% should the environment not be nested, or should it lie between +% two successive |\begin{macro}| instructions or explanatory +% text. One can recognize this with the switch |\if@inlabel| +% which will be |true| in the case of successive |\item| +% commands. +% \begin{macrocode} + \def\makelabel##1{\llap{##1}}% +% \end{macrocode} +% If |@inlabel| is |true| and if $\verb=\macro@cnt= > 0$ +% then the above definition needs to be changed, because in this +% case \LaTeX{} would otherwise put the labels all on the same line +% and this would lead to them being overprinted on top of each +% other. Because of this |\makelabel| needs to be redefined +% in this case. +% \begin{macrocode} + \if@inlabel +% \end{macrocode} +% If |\macro@cnt| has the value $1$, then we redefine +% |\makelabel| so that the label will be positioned in the +% second line of the margin. As a result of this, two macro names +% appear correctly, one under the other. It's important whilst +% doing this that the generated label box is not allowed to have +% more depth than a normal line since otherwise the distance +% between the first two text lines of \TeX{} will be incorrectly +% calculated. The definition should then look like: +%\begin{verbatim} +% \def\makelabel##1{\llap{\vtop to \baselineskip +% {\hbox{\strut}\hbox{##1}\vss}}} +%\end{verbatim} +% Completely analogous to this is the case where labels need to be +% placed one under the other. The lines above are only an example +% typeset with the \textsf{verbatim} environment. To produce the real +% definition we save the value of |\macro@cnt| in +% |\count@| and empty the temp macro |\@tempa| for later +% use. +% \begin{macrocode} + \let\@tempa\@empty \count@\macro@cnt +% \end{macrocode} +% In the following loop we append for every already typeset label +% an |\hbox{\strut}| to the definition of |\@tempa|. +% \begin{macrocode} + \loop \ifnum\count@>\z@ + \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat +% \end{macrocode} +% Now be put the definition of |\makelabel| together. +% \changes{v1.5b}{1989/04/27}{vbox to vtop changed in makelabel (test)} +% \changes{v1.5e}{1989/04/28}{ht strutbox changed to baselineskip +% (test)} +% \begin{macrocode} + \edef\makelabel##1{\llap{\vtop to\baselineskip + {\@tempa\hbox{##1}\vss}}}% +% \end{macrocode} +% Next we increment the value of the nesting depth counter. This +% value inside the \textsf{macro} environment is always at least one +% after this point, but its toplevel definition is zero. Provided +% this environment has been used correctly, $|\macro@cnt|=0$ +% should not occur when |@inlabel|=\textsf{true}. It is +% however possible if this environment is used within other list +% environments (but this would have little point). +% \begin{macrocode} + \advance \macro@cnt \@ne +% \end{macrocode} +% If |@inlabel| is false we reset |\macro@cnt| assuming +% that there is enough room to print the macro name without +% shifting. +% \begin{macrocode} + \else \macro@cnt\@ne \fi +% \end{macrocode} +% Now the label will be produced using |\item|. The following +% line is only a hack saving the day until a better solution is +% implemented. We have to face two problems: the argument might be +% a |\par| which is forbidden in the argument of other macros +% if they are not defined as |\long|, or it is something like +% |\iffalse| or |\else|, i.e.\ something which will be +% misinterpreted when \TeX{} is skipping conditional text. In both +% cases |\item| will bomb, so we protect the argument by using +% |\string|. +% \begin{macrocode} + \edef\@tempa{\noexpand\item[% +% \end{macrocode} +% Depending on whether we are inside a ``macro'' or ``environment'' +% environment we use |\PrintMacroName| or |\PrintEnvName| to +% display the name. +% \begin{macrocode} + #1% + \noexpand\PrintMacroName + \else + \noexpand\PrintEnvName + \fi + {\string#2}]}% + \@tempa +% \end{macrocode} +% At this point we also produce an index entry. Because it is not +% known which index sorting program will be used, we do not use the +% command |\index|, but rather a command +% |\SpecialMainIndex| after advancing the counter for indexing +% by line number. This may be redefined by the user in +% order to generate an index entry which will be understood by the +% index program in use (note the definition of +% |\SpecialMainIndex| for our installation). +% \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)} +% \changes{v1.9u}{1995/08/06}{Removed brace group which +% killed \cs{DoNotIndex}} +% We advance the current codeline number and after producing an +% index entry revert to the original value +% \begin{macrocode} + \global\advance\c@CodelineNo\@ne +% \end{macrocode} +% Again the macro to call depends on the environment we are +% actually in. +% \begin{macrocode} + #1% + \SpecialMainIndex{#2}\nobreak + \DoNotIndex{#2}% + \else + \SpecialMainEnvIndex{#2}\nobreak + \fi + \global\advance\c@CodelineNo\m@ne +% \end{macrocode} +% The |\nobreak| is needed to prevent a page break after the +% |\write| produced by the |\SpecialMainIndex| macro. We +% exclude the new macro in the cross-referencing feature, to +% prevent spurious non-main entry references. Regarding possibly +% problematic arguments, the implementation takes +% care of |\par| and the conditionals are uncritical. +% \changes{v1.7a}{1992/03/02}{Removed redundant code checking for +% \cs{par}.}^^A +% +% Because the space symbol should be ignored between the +% |\begin{macro}{...}| and the following text we must take +% care of this with |\ignorespaces|. +% \begin{macrocode} + \ignorespaces} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% \begin{macro}{\endmacro} +% \begin{macro}{\endenvironment} +% Older releases of this environment omit the |\endgroup| token, +% when being nested. This was done to avoid unnessary stack usage. +% However it does not work if \textsf{macro} and +% \textsf{environment} environments are mixed, therefore we now +% use a simpler approach. +% \changes{v1.5k}{1989/08/17}{Fix for save stack problem.} +% \changes{v1.9k}{1994/02/22}{Don't checkfor nesting} +% \begin{macrocode} +\let\endmacro \endtrivlist +\let\endenvironment\endmacro +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\MacroTopsep} +% Here is the default value for the |\MacroTopsep| parameter +% used above. +% \begin{macrocode} +\newskip\MacroTopsep \MacroTopsep = 7pt plus 2pt minus 2pt +% \end{macrocode} +% \end{macro} +% +% +% +% +% +% \subsection{Formatting the margin} +% +% The following three macros should be user definable. +% Therefore we define those macros only if they have not already +% been defined. +% +% \begin{macro}{\PrintMacroName} +% \begin{macro}{\PrintEnvName} +% \begin{macro}{\PrintDescribeMacro} +% \begin{macro}{\PrintDescribeEnv} +% The formatting of the macro name in the left margin is done by +% these macros. We first set a |\strut| to get the height and +% depth of the normal lines. Then we change to the +% |\MacroFont| using |\string| to |\catcode| the +% argument to other (assuming that it is a macro name). Finally we +% print a space. The font change remains local since this macro +% will be called inside an |\hbox|. +% \begin{macrocode} +\@ifundefined{PrintMacroName} + {\def\PrintMacroName#1{\strut \MacroFont \string #1\ }}{} +% \end{macrocode} +% We use the same formatting conventions when describing a macro. +% \begin{macrocode} +\@ifundefined{PrintDescribeMacro} + {\def\PrintDescribeMacro#1{\strut \MacroFont \string #1\ }}{} +% \end{macrocode} +% To format the name of a new environment there is no need to use +% |\string|. +% \begin{macrocode} +\@ifundefined{PrintDescribeEnv} + {\def\PrintDescribeEnv#1{\strut \MacroFont #1\ }}{} +\@ifundefined{PrintEnvName} + {\def\PrintEnvName#1{\strut \MacroFont #1\ }}{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% \subsection{Creating index entries by scanning `macrocode'} +% +% The following macros ensure that index entries are created for each +% occurrence of a \TeX-like command (something starting with +% `|\|') providing indexing has been turned on with "\PageIndex" +% or "\CodelineIndex". With the default definitions of +% |\SpecialMainIndex|, etc., the index file generated is +% intended to be processed by Chen's \textsf{makeindex} program +% \cite{art:Chen}. +% +% +% Of course, in {\em this\/} package file itself we've sometimes had to +% make \verb+|+ take the r\^ole of \TeX's escape character to +% introduce command names at places where |\| has to belong to +% some other category. Therefore, we may also need to recognize +% \verb+|+ as the introducer for a command when setting the text +% inside the \textsf{macrocode} environment. Other users may have the +% need to make similar reassignments for their macros. +% +% +% \begin{macro}{\SpecialEscapechar}\label{sect:specialescapechar} +% \begin{macro}{\active@escape@char} +% \begin{macro}{\special@escape@char} +% The macro |\SpecialEscapechar| is used to denote a special escape +% character for the next \textsf{macrocode} environment. It has one +% argument---the new escape character given as a `single-letter' +% control sequence. Its main purpose is defining +% |\special@escape@char| to produce the chosen escape character +% |\catcode|$\,$d to 12 and |\active@escape@char| to produce the +% same character but with |\catcode| 13. +% +% The macro |\special@escape@char| is used to {\em print\/} +% the escape character while |\active@escape@char| is needed +% in the definition of |\init@crossref| to start the scanning +% mechanism. +% +% In the definition of |\SpecialEscapechar| we need an +% arbitrary character with |\catcode| 13. We use `\~{}' and +% ensure that it is active. The |\begingroup| is used to make +% a possible change local to the expansion of +% |\SpecialEscapechar|. +% \changes{v1.7g}{1992/6/19}{Making tilde active moved outside +% definition} +% \begin{macrocode} +\begingroup +\catcode`\~\active +\gdef\SpecialEscapechar#1{% + \begingroup +% \end{macrocode} +% Now we are ready for the definition of +% |\active@escape@char|. It's a little tricky: we first +% define locally the uppercase code of `\~{}' to be the new escape +% character. +% \begin{macrocode} + \uccode`\~`#1% +% \end{macrocode} +% Around the definition of |\active@escape@char| we place an +% |\uppercase| command. Recall that the expansion of +% |\uppercase| changes characters according to their +% |\uccode|, but leaves their |\catcode|$\,$s untouched +% (cf.\ \TeX{}book page 41). +% \begin{macrocode} + \uppercase{\gdef\active@escape@char{~}}% +% \end{macrocode} +% The definition of |\special@escape@char| is easier, we use +% |\string| to |\catcode| the argument of +% |\SpecialEscapechar| to 12 and suppress the preceding +% |\escapechar|. +% \begin{macrocode} + \escapechar\m@ne \xdef\special@escape@char{\string#1}% +% \end{macrocode} +% Now we close the group and end the definition: the value of +% |\escapechar| as well as the |\uccode| and +% |\catcode| of `\~{}' will be restored. +% \begin{macrocode} + \endgroup} +\endgroup +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% +% \begin{macro}{\init@crossref} +% The replacement text of |\init@crossref| should fulfill the +% following tasks: +% \begin{itemize} +% \parindent4em +% \item[1)] +% |\catcode| all characters used in macro names to +% 11 (i.e.\ `letter'). +% \item[2)] +% |\catcode| the `|\|' character to 13 +% (i.e.\ `active'). +% \item[3a)] +% |\let| the `|\|' equal |\scan@macro| +% (i.e.\ start the macro scanning mechanism) if there is +% no special escape character (i.e.\ the +% |\special@escape@char| is `|\|'). +% \item[3b)] +% Otherwise |\let| it equal |\bslash|, i.e.\ +% produce a printable |\|. +% \item[4)] +% Make the \meta{special escape character} active. +% \item[5)] +% |\let| the active version of the special escape +% character +% (i.e.\ the expansion of |\active@escape@char|) equal +% |\scan@macro|. +% \end{itemize} +% The reader might ask why we bother to |\catcode| the +% `|\|' first to 12 (at the end of |\macro@code|) then +% re-|\catcode| it to 13 in order to produce a $|\|_{12}$ +% in case 3b) above. This is done because we have to ensure that +% `|\|' has |\catcode| 13 within the \textsf{macrocode} +% environment. Otherwise the delimiter for the argument of +% |\xmacro@code| would not be found (parameter matching +% depends on |\catcode|$\,$s). +% +% Therefore we first re-|\catcode| some characters. +% \begin{macrocode} +\begingroup \catcode`\|=\z@ \catcode`\\=\active +% \end{macrocode} +% We carry out tasks 2) and 3b) first. +% \SpecialEscapechar{\|} +% \begin{macrocode} +|gdef|init@crossref{|catcode`|\|active |let\|bslash +% \end{macrocode} +% Because of the popularity of the `|@|' character as a +% `letter' in macros, we normally have to change its +% |\catcode| here, and thus fulfill task 1). But the macro +% designer might use other characters as private letters as well, +% so we use a macro to do the |\catcode| switching. +% \SpecialEscapechar\| +% \begin{macrocode} + |MakePrivateLetters +% \end{macrocode} +% Now we |\catcode| the special escape character to 13 and +% |\let| it equal |\scan@macro|, i.e.\ fulfill tasks 4) +% and 5). Note the use of |\expandafter| to insert the chosen +% escape character saved in |\special@escape@char| and +% |\active@escape@char|. +% \SpecialEscapechar\| +% \begin{macrocode} + |catcode|expandafter`|special@escape@char|active + |expandafter|let|active@escape@char|scan@macro} +|endgroup +% \end{macrocode} +% If there is no special escape character, i.e.\ if +% |\SpecialEscapechar| is |\\|, the second last line will +% overwrite the previous definition of $|\|_{13}$. In this +% way all tasks are fulfilled. +% +% For happy documenting we give default values to +% |\special@escape@char| and |\active@escape@char| with +% the following line: +% \begin{macrocode} +\SpecialEscapechar{\\} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\MakePrivateLetters} +% Here is the default definition of this command, which makes just +% the |@| into a letter. The user may change it if he/she +% needs more or other characters masquerading as letters. +% \begin{macrocode} +\@ifundefined{MakePrivateLetters} + {\let\MakePrivateLetters\makeatletter}{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\close@crossref} +% At the end of a cross-referencing part we prepare ourselves for +% the next one by setting the escape character to `|\|'. +% \begin{macrocode} +\def\close@crossref{\SpecialEscapechar\\} +% \end{macrocode} +% \end{macro} +% +% +% +% +% \subsection{Macros for scanning macro names} +% +% \begin{macro}{\scan@macro} +% \changes{v1.5k}{1989/09/04}{Support for checksum added.} +% \begin{macro}{\macro@namepart} +% The |\init@crossref| will have made |\active| our +% |\special@escape@char|, so that each +% |\active@escape@char| will invoke |\scan@macro| when +% within the \textsf{macrocode} environment. By this means, we can +% automatically add index entries for every \TeX-like command which +% is met whilst setting (in verbatim) the contents of +% \textsf{macrocode} environments. +% \begin{macrocode} +\def\scan@macro{% +% \end{macrocode} +% First we output the character which triggered this macro. Its +% version |\catcode|$\,$d to 12 is saved in +% |\special@escape@char|. We also call |\step@checksum| +% to generate later on a proper check-sum (see section +% \ref{sec:checksum} for details). +% \begin{macrocode} + \special@escape@char + \step@checksum +% \end{macrocode} +% If the \textsf{macrocode} environment contains, for example, the +% command |\\|, the second |\| should not start the +% scanning mechanism. Therefore we use a switch to decide if +% scanning of macro names is allowed. +% \begin{macrocode} + \ifscan@allowed +% \end{macrocode} +% The macro assembles the letters forming a \TeX\ command in +% |\macro@namepart| so this is initially cleared; we then set +% |\next| to the \textit{first\/} character following the +% |\| and call |\macro@switch| to determine whether that +% character is a letter or not. +% \begin{macrocode} + \let\macro@namepart\@empty + \def\next{\futurelet\next\macro@switch}% +% \end{macrocode} +% As you recognize, we actually did something else, because we have +% to defer the |\futurelet| call until after the final +% |\fi|. If, on the other hand, the scanning is disabled we +% simply |\let| |\next| equal `empty'. +% \begin{macrocode} + \else \let\next\@empty \fi +% \end{macrocode} +% Now we invoke |\next| to carry out what's needed. +% \begin{macrocode} + \next} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\ifscan@allowed} +% \begin{macro}{\scan@allowedtrue} +% \begin{macro}{\scan@allowedfalse} +% |\ifscan@allowed| is the switch used above to determine if +% the |\active@escape@char|\SpecialIndex{\active@escape@char} +% should start the macro scanning mechanism. +% \begin{macrocode} +\newif\ifscan@allowed \scan@allowedtrue +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\EnableCrossrefs} +% \begin{macro}{\DisableCrossrefs} +% At this point we might define two macros which allow the user to +% disable or enable the cross-referencing mechanism. Processing of +% files will be faster if only main index entries are generated +% (i.e., if |\DisableCrossrefs| is in force). +% \begin{macrocode} +\def\DisableCrossrefs{\@bsphack\scan@allowedfalse\@esphack} +% \end{macrocode} +% The macro |\EnableCrossrefs| will also disable any +% |\DisableCrossrefs| command encountered afterwards. +% \begin{macrocode} +\def\EnableCrossrefs{\@bsphack\scan@allowedtrue + \def\DisableCrossrefs{\@bsphack\@esphack}\@esphack} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% +% +% \begin{macro}{\macro@switch} +% Now that we have the character which follows the escape character +% (in |\next|), we can determine whether it's a `letter' +% (which probably includes |@|). +% +% If it is, we let |\next| invoke a macro which assembles the +% full command name. +% \begin{macrocode} +\def\macro@switch{\ifcat\noexpand\next a% + \let\next\macro@name +% \end{macrocode} +% Otherwise, we have a `single-character' command name. For all +% those single-character names, we use |\short@macro| to +% process them into suitable index entries. +% \begin{macrocode} + \else \let\next\short@macro \fi +% \end{macrocode} +% Now that we know what macro to use to process the macro name, we +% invoke it~\ldots +% \begin{macrocode} + \next} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\short@macro} +% \changes{v1.5c}{1989/4/27}{Corrected bad bug by putting the +% scan@allowedfalse macro before printing +% the argument.} +% \changes{v1.7a}{1992/03/10}{Ensure character stored in +% \cs{macro@namepart} as `letter' so index exclusion works.} +% This macro will be invoked (with a single character as parameter) +% when a single-character macro name has been spotted whilst +% scanning within the \textsf{macrocode} environment. +% +% First we take a look at the |\index@excludelist| to see +% whether this macro name should produce an index entry. This is +% done by the |\ifnot@excluded| macro which assumes that the +% macro name is saved in |\macro@namepart|. The character +% mustn't be stored with a special category code or exclusion from +% the index won't work, so we employ the case-changing trick used +% elsewhere. Since the argument might be an active character, +% |\string| is used to normalize it. +% \changes{v2.0e}{1998/12/28}{Correctly use the case-changing trick.} +% \begin{macrocode} +\begingroup +\catcode`\&=12 +\gdef\short@macro#1{\begingroup + \uccode`\&=\expandafter`\string#1% + \uppercase{\def\x{\def\macro@namepart{&}}}% + \expandafter\endgroup\x + \ifnot@excluded +% \end{macrocode} +% If necessary the index entry is produced by the macro +% |\produce@index|. Depending on the actual character seen, +% this macro has to do different things, so we pass the character +% as an argument. +% \begin{macrocode} + \produce@index{#1}\fi +% \end{macrocode} +% Then we disable the cross-referencing mechanism with +% |\scan@allowedfalse| and print the actual character. The +% index entry was generated first to ensure that no page break +% intervenes (recall that a |^^M| will start a new line). +% \begin{macrocode} + \scan@allowedfalse#1% +% \end{macrocode} +% After typesetting the character we can safely enable the +% cross-referencing feature again. Note that this macro won't be +% called (since |\macro@switch| won't be called) if +% cross-referencing is globally disabled. +% \begin{macrocode} + \scan@allowedtrue } +\endgroup +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\produce@index} +% \changes{v1.4s}{1989/04/23}{Added noexpand to all +% \cs{if} tests +% to avoid garbage produced by new active chars} +% \changes{v1.4s}{1989/04/23}{Used \texttt{\protect\bslash string} for +% the same reason.} +% \changes{v1.5c}{1989/4/27}{Corrected bad bug by placing the +% scan@allowedfalse macro into short@macro} +% This macro is supposed to generate a suitable |\SortIndex| +% command for a given single-letter control sequence. We test +% first for the cases which involve active characters (i.e.\ the +% backslash, the special escape character (if any), the space and +% the |^^M|). Using the |\if| test (testing for +% character codes), we have to ensure that the argument isn't +% expanded. +% \begin{macrocode} +\def\produce@index#1{% + \if\noexpand#1\special@escape@char +% \end{macrocode} +% If the character is the special escape character (or the +% `|\|' in case there was none) the |\it@is@a| macro is +% used to produce the actual |\SortIndex| call. +% \begin{macrocode} + \scan@allowedfalse \it@is@a\special@escape@char \else +% \end{macrocode} +% Next comes the test for a `|\|' which must be the +% $|\|_{13}$ expanding to |\bslash|. +% \begin{macrocode} + \if\noexpand#1\bslash \it@is@a\bslash \else +% \end{macrocode} +% Another possibility is \verb*+ +$_{13}$. Recall that |\space| +% produces a \verb*+ +$_{10}$. +% \begin{macrocode} + \if\noexpand#1\space \it@is@a\space \else +% \end{macrocode} +% The last\footnote{Well, it isn't the last active character after +% all. I added \texttt{\bslash @noligs} some days ago and now +% \texttt{`} too is active. So we have to make sure that such +% characters don't get expanded in the index.} possibility of an +% active character is |^^M|\@. In this case we don't test for +% character codes, since it is easier to look if the character is +% equal to |\par|. (We are inside the \textsf{macrocode} +% environment.) +% \begin{macrocode} + \ifx#1\par +% \end{macrocode} +% If we end up here we have just scanned a |\^^M| or something +% similar. Since this will be treated like \verb*+\ + by \TeX{} we +% produce a corresponding index entry. +% \begin{macrocode} + \it@is@a\space \else +% \end{macrocode} +% If it is the token |\relax| we do nothing. This can't happen +% when the `doc' package is used in the way described here, but was +% added to allow extensions like the \texttt{idxverb} option. +% \changes{v1.5t}{1989/11/14}{Added \cs{relax} as a possible token to +% allow extensions.} +% \begin{macrocode} + \ifx#1\relax \else +% \end{macrocode} +% The next three branches are needed because of bugs in +% our \textsf{makeindex} program. You can't produce unbalanced index +% entries\footnote{This is possible for \TeX{} if you use +% \texttt{\string{$_{12}$ \rmfamily or +% \ttfamily\string}$_{12}$}, +% but \textsf{makeindex} will complain.} +% and you have to double a percent character. To get around these +% restrictions we use special macros to produce the |\index| +% calls.\footnote{Brian \textsc{Hamilton Kelly} has written fixes for +% all three +% bugs. When they've found their way through all +% installations, +% the lines above will be removed. See +% page~\pageref{bug:fixes} if you already have them. +% (I'm not sure which versions incorporate these, but +% 2.11 is OK. See also +% \pageref{makeindex:version}.)} +% \begin{macrocode} + \if\noexpand#1\bgroup \LeftBraceIndex \else + \if\noexpand#1\egroup \RightBraceIndex \else + \if\noexpand#1\percentchar \PercentIndex \else +% \end{macrocode} +% All remaining characters are used directly to produce their index +% entries. This is possible even for the characters which have +% special meanings in the index program, provided we quote the +% characters. (This is correctly done in |\it@is@a|.) +% \begin{macrocode} + \it@is@a{\string#1}% +% \end{macrocode} +% We now need a whole pile of |\fi|$\,$s to match up with +% the |\if|$\,$s. +% \begin{macrocode} + \fi \fi \fi \fi \fi \fi \fi \fi} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\macro@name} +% We now come to the macro which assembles command names which +% consist of one or more `letters' (which might well include +% |@| symbols, or anything else which has a |\catcode| of +% 11). +% +% To do this we add the `letter' to the existing definition of +% |\macro@namepart| (which you will recall was originally set +% to |\@empty|). +% \begin{macrocode} +\def\macro@name#1{\edef\macro@namepart{\macro@namepart#1}% +% \end{macrocode} +% Then we grab hold of the {\em next\/} single character and let +% |\more@macroname| determine whether it belongs to the letter +% string forming the command name or is a `non-letter'. +% \begin{macrocode} + \futurelet\next\more@macroname} +% \end{macrocode} +% \end{macro} +% +% +% +% +% +% \begin{macro}{\more@macroname} +% +% This causes another call of |\macro@name| to add in the next +% character, if it is indeed a `letter'. +% \begin{macrocode} +\def\more@macroname{\ifcat\noexpand\next a% + \let\next\macro@name +% \end{macrocode} +% Otherwise, it finishes off the index entry by invoking +% |\macro@finish|. +% \begin{macrocode} + \else \let\next\macro@finish \fi +% \end{macrocode} +% Here's where we invoke whatever macro was |\let| equal to +% |\next|. +% \begin{macrocode} + \next} +% \end{macrocode} +% \end{macro} +% +% +% +% +% +% \begin{macro}{\macro@finish} +% When we've assembled the full `letter'-string which forms the +% command name, we set the characters forming the entire command +% name, and generate an appropriate |\index| command (provided +% the command name is not on the list of exclusions). The +% `|\|' is already typeset; therefore we only have to output +% all `letters' saved in |\macro@namepart|. +% \begin{macrocode} +\def\macro@finish{% + \macro@namepart +% \end{macrocode} +% Then we call |\ifnot@excluded| to decide whether we have to +% produce an index entry. The construction with |\@tempa| is +% needed because we want the expansion of |\macro@namepart| in +% the |\index| command.\footnote{The \texttt{\bslash index} +% command will expand its argument in the \texttt{\bslash output} +% routine. At this time \texttt{\bslash macro@namepart} might have a +% new value.} +% \begin{macrocode} + \ifnot@excluded + \edef\@tempa{\noexpand\SpecialIndex{\bslash\macro@namepart}}% + \@tempa \fi} +% \end{macrocode} +% \end{macro} +% +% +% +% +% +% \subsection[The index exclude list]{The index exclude +% list\footnotemark} +% \footnotetext{Warning: the incomplete commentary on +% \texttt{\bslash DoNotIndex} and the macros it calls +% was written by Dave Love.} +% +% The internal form of the index exclude list is +% \begin{quote} +% \meta{macro name}|,|\meta{macro name}|,| +% \ldots|,| +% \end{quote} +% where \meta{macro name} is a macro name like +% $"\"_{12}"p"{_{11}}"@"_{11}$ or $"\"_{12}"$"_{11}$. Note that the "\" +% has category `other' and the other characters in the name are all +% `letter', regardless of their normal category. +% +% \begin{macro}{\DoNotIndex} +% This macro is used to suppress macro names in the index. It +% starts off with a new group because we have to change the +% |\catcode|$\,$s of all characters which belong to `letters' +% while macros are defined. +% \begin{macrocode} +\def\DoNotIndex{\begingroup \MakePrivateLetters + \catcode`\\12 +% \end{macrocode} +% Then we call the macro which actually reads the argument given by +% the user. +% \begin{macrocode} + \do@not@index} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\do@not@index} +% We make the |\do@not@index| macro |\long| +% since the user might want to exclude the |\par| +% macro. +% \begin{macrocode} +\long\def\do@not@index#1{% +% \end{macrocode} +% It just adds to a token list after finishing the group in which +% the catcodes were changed. +% \changes{v1.7a}{1992/02/26}{Replaced with newdoc version.} +% \begin{macrocode} + \endgroup + \addto@hook\index@excludelist{#1,}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\addto@hook} +% The code for adding tokens (the second argument) to a token list +% (the first argument) is taken from~\cite{art:verbatim}, but it needs +% to be "\long" in case "\par" is amongst the tokens. +% \begin{macrocode} +\long\def\addto@hook#1#2{#1\expandafter{\the#1#2}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\index@excludelist} +% We need an initially-empty register for the excluded list. +% \begin{macrocode} +\newtoks\index@excludelist +\index@excludelist{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifnot@excluded} +% \changes{v1.7a}{1992/02/26}{Replaced with newdoc version.} +% \begin{macro}{\expanded@notin} +% Now we take a look at the |\index@excludelist| to see +% whether a macro name saved in |\macro@namepart| should +% produce an index entry. This macro is a pseudo |\if|; it +% should expand to |\iftrue| or |\iffalse| depending on +% the contents of |\index@excludelist|. +% \begin{macrocode} +\begingroup +% \end{macrocode} +% First we change "\catcode"s so that "\" is `other' and "|" a +% temporary for the escape character. This is necessary since our +% macro names are stored that way in the "\index@excludelist". +% \begin{macrocode} +\catcode`\|=0% +\catcode`\\=12 +% \end{macrocode} +% Then we define "\ifnot@excluded" to call "\expanded@notin" with +% two arguments: the first is the string "\" followed by the +% contents of "\macro@namepart" followed by a "," and the second is +% "\the" followed by "\index@excludelist". To achieve the expansion +% of "\macro@namepart", i.e.\ to pass its contents, we need a +% suitable number of "\expandafter"s. +% \SpecialEscapechar{\|} +% \begin{macrocode} +|gdef|ifnot@excluded{|expandafter + |expanded@notin|expandafter{|expandafter + \|macro@namepart,}{|the|index@excludelist}} +|endgroup +% \end{macrocode} +% The macro "\expanded@notin" now does the dirty work. It first +% defines a macro "\in@@" with a very special parameter text. If +% you look closely "\in@@" has three arguments, the first one is +% delimited by the first argument of "\expanded@notin" (i.e.\ by +% the string starting with a "\" and ending with a "," above), the +% second is undelimited (which means that it will get the next +% token after our string, and the third is delimited again and will +% get the rest up to the token "\in@@". In other words the token +% "\in@@" is also used as a delimiter. +% \begin{macrocode} +\def\expanded@notin#1#2{% + \def\in@@##1#1##2##3\in@@{% +% \end{macrocode} +% Now the replacement text simply compares the second argument +% (i.e.\ the undelimited one after our string) to the token +% "\expanded@notin". This is an unclosed "\ifx" statement which +% means that this macro behaves similar to a normal \TeX{} +% conditional. +% \begin{macrocode} + \ifx\expanded@notin##2}% +% \end{macrocode} +% After all these preparations we call "\in@@". First we expand the +% token after "\in@@" (which is "\the" from the second argument to +% "\expanded@notin"). As a result we get the contents of the +% "\index@excludelist" inserted after "\in@@". After this contents +% we add once more the string we are looking for, then the token +% "\expanded@notin" and finally the token "\in@@". +% \begin{macrocode} + \expandafter\in@@#2#1\expanded@notin\in@@} +% \end{macrocode} +% Now what happens when the macro "\in@@" above gets called? The +% first argument to "\in@@" is delimited by our string. In other +% words it will get everything from the contents of +% "\index@excludelist" before this string. If the string is not in +% "\index@excludelist" then it gets the whole contents, since after +% it we had inserted the string one more. In this case the next +% token is "\expanded@notin" which gets assigned to the second +% argument and the third argument will be empty. If, on the other +% hand, the string was inside "\index@excludelist" then the second +% argument will not be the token "\expanded@notin" and the third +% argument will be all the garbage up to "\in@@". Therefore testing +% the seconded argument, as done in the definition of "\in@@" will +% tell us whether or not the string is in "\index@includelist" and +% this was exactly what we wanted. (Deep breath.) You got +% that?\footnote{\TeX{}book page 125. The code described above is +% originally due to Michael Spivak who used a similar method within +% the \AmSTeX{} macros.} +% \end{macro} +% \end{macro} +% +% +% +% +% +% +% +% \subsection{Macros for generating index entries} +% +% Here we provide default definitions for the macros invoked to create +% index entries; these are either invoked explicitly, or automatically +% by |\scan@macro|. As already mentioned, the definitions given +% here presuppose that the |.idx| file will be processed by +% Chen's \textsf{makeindex} program --- they may be redefined for use +% with the user's favourite such program. +% +% To assist the reader in locating items in the index, all such +% entries are sorted alphabetically {\em ignoring\/} the initial +% `|\|'; this is achieved by issuing an |\index| command which +% contains the `actual' operator for \textsf{makeindex}. The default +% value for the latter operator is `|@|', but the latter character is +% so popular in \LaTeX\ package files that it is necessary to substitute +% another character. This is indicated to \textsf{makeindex} by means +% of an `index style file'; the character selected for this function +% is |=|, and therefore this character too must be specially treated +% when it is met in a \TeX\ command. A suitable index style file is +% provided amongst the supporting files for this style file in +% \texttt{gind.ist} and is generated from this source by processing +% with \texttt{docstrip} to extract the module \textbf{gind}. A +% similar style file \texttt{gglo.ist} is supplied for sorting the +% change information in the glossary file and is extracted as module +% \textbf{gglo}. First of all we add some information to the front of +% the \texttt{.ist} files. \changes{v1.7a}{1992/03/11}{glo.ist and +% gind.ist now derivable from doc.dtx with docstrip.} +% \begin{macrocode} +%</package> +%<+gind|gglo>%% This is a MAKEINDEX style file which should be used to +%<+gind>%% generate the formatted index for use with the doc +%<+gglo>%% generate the formatted change history for use with the doc +%<+gind|gglo>%% package. The TeX commands used below are defined in +%<+gind|gglo>%% doc.sty. The commands for MAKEINDEX like `level' +%<+gind|gglo>%% `item_x1' are described in `` Makeindex, A General +%<+gind|gglo>%% Purpose, Formatter-Independent Index Processor'' by +%<+gind|gglo>%% Pehong Chen. +%<+gind|gglo> +% \end{macrocode} +% +% \begin{macro}{\actualchar} +% \begin{macro}{\quotechar} +% \begin{macro}{\levelchar} +% First come the definitions of |\actualchar|, +% |\quotechar| and |\levelchar|. Note, that our defaults +% are not the ones used by the \textsf{makeindex} program without a +% style file. +% \begin{macrocode} +%<*package> +\@ifundefined{actualchar}{\def\actualchar{=}}{} +\@ifundefined{quotechar}{\def\quotechar{!}}{} +\@ifundefined{levelchar}{\def\levelchar{>}}{} +%</package> +%<+gind|gglo>actual '=' +%<+gind|gglo>quote '!' +%<+gind|gglo>level '>' +%<*package> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\encapchar} +% The \textsf{makeindex} default for the |\encapchar| isn't +% changed. +% \begin{macrocode} +\@ifundefined{encapchar}{\def\encapchar{|}}{} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\verbatimchar} +% We also need a special character to be used as a delimiter for +% the |\verb*| command used in the definitions below. +% \begin{macrocode} +\@ifundefined{verbatimchar}{\def\verbatimchar{+}}{} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\SpecialIndex} +% The |\SpecialIndex| command creates index entries for +% macros. If the argument is |\|$xyz$, the command produces +% \verb|\indexentry{|$xyz$\verb|=\verb!*+\|$xyz$\verb|+}{|$n$\verb|}| +% given the above defined defaults for |\actualchar|, +% |\quotechar| and |\verbatimchar|. We first remove the +% initial `|\|' to get a better index. +% \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)} +% \begin{macrocode} +\def\SpecialIndex#1{\@bsphack\special@index{\expandafter\@gobble + \string#1\actualchar +% \end{macrocode} +% Then follows the actual entry. A |\quotechar| is placed +% before the |*| to allow its use as a special \textsf{makeindex} +% character. Again |\@bsphack| and |\@esphack| are used +% to make the macros invisible. +% \begin{macrocode} + \string\verb\quotechar*\verbatimchar\string#1\verbatimchar}% + \@esphack} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\SpecialMainIndex} +% \begin{macro}{\SpecialMainEnvIndex} +% \begin{macro}{\SpecialUsageIndex} +% The |\SpecialMainIndex| macro is used to cross-reference the +% names introduced by the \textsf{macro} environment. The action is +% as for |\SpecialIndex|, except that \textsf{makeindex} is +% instructed to `encap'sulate the entry with the string +% \verb=|main= to cause it to generate a call of the |\main| +% macro. +% \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)} +% \changes{v2.0c}{1998/08/22}{Correctly handle single character +% control sequences like \cs{<}.} +% +% |\SpecialMainIndex| passes the macro name to be indexed on to the +% macro |\SpecialIndex@|. +% \begin{macrocode} +\def\SpecialMainIndex#1{\@bsphack\SpecialIndex@{#1}{\encapchar main}% + \@esphack} +% \end{macrocode} +% +% \begin{macro}{\SpecialIndex@} +% \changes{v2.0c}{1998/08/22}{Macro added.} +% \changes{v2.0f}{1999/02/27}{Temp fix to allow strange code in arg 1 +% (PR 2968)} +% The macro |\SpecialIndex@| does the real work for |\SpecialMainIndex| +% and |\SpecialUsageIndex|. It takes two arguments: the macro to be +% indexed (as a control sequence or list of character tokens) and the +% additional text for the index. +% \changes{v2.0g}{1999/03/22}{Correct so-called temp fix. I'm not going to +% explain this.} +% \begin{macrocode} +\begingroup + \catcode`\|=0 + \catcode`\\=12 + |gdef|@SpecialIndexHelper@#1#2|@nil{% + |if |noexpand#1\% + |gdef|@gtempa{#2}% + |else + |begingroup + |escapechar|m@ne + |expandafter|gdef|expandafter|@gtempa|expandafter{|string#1#2}% + |endgroup + |fi} +|endgroup +\def\SpecialIndex@#1#2{% +% \end{macrocode} +% The first thing it does is to convert the macro into a list of +% characters. Note that a character token list remains (mostly) unchanged. +% \begin{macrocode} + \@SpecialIndexHelper@#1\@nil +% \end{macrocode} +% The macro name \verb*|\ | has to handled in a special way. The reason +% is that the space token is skipped when \TeX\ is scanning macro +% parameters, so that the trick used below will not work. +% So, we check whether the replacement text of |\@tempa| starts with +% a space token and write the appropriate index entry. +% \begin{macrocode} + \def\@tempb{ }% + \ifcat \@tempb\@gtempa + \special@index{\quotechar\space\actualchar + \string\verb\quotechar*\verbatimchar + \quotechar\bslash\quotechar\space\verbatimchar#2}% + \else +% \end{macrocode} +% Having handled this special case we have to distinguish control +% sequences consisting of one or more +% letters and those that consists of exactly one nonletter. As character +% tokens in the replacement text of the macro |\@gtempa| have all +% category code $12$ (other), this is difficult. For simplicity, we treat +% all single character control sequences alike, irregardless of whether +% the character is a letter or not. This has the advantage that it works +% even for strange settings of the category codes. +% +% We define a utility macro |\@tempb| with two arguments, the second +% delimited by |\relax|. +% It will be called later so that the first argument is the first character +% of the macro name, and the second argument receives the rest of the +% characters. So we distinguish the two cases above by checking whether +% the second argument is empty. +% \begin{macrocode} + \def\@tempb##1##2\relax{\ifx\relax##2\relax +% \end{macrocode} +% If so, we define the helper macro |\@tempc| in a way that it +% adds quotechars in critical places. +% \begin{macrocode} + \def\@tempc{\special@index{\quotechar##1\actualchar + \string\verb\quotechar*\verbatimchar + \quotechar\bslash\quotechar##1\verbatimchar#2}}% +% \end{macrocode} +% Otherwise we write the characters as in |\SpecialIndex|. +% \begin{macrocode} + \else + \def\@tempc{\special@index{##1##2\actualchar + \string\verb\quotechar*\verbatimchar + \bslash##1##2\verbatimchar#2}}% + \fi}% +% \end{macrocode} +% Now pass the list of characters to \@tempb and call \@tempc to do the +% work. +% \begin{macrocode} + \expandafter\@tempb\@gtempa\relax + \@tempc + \fi} +% \end{macrocode} +% \end{macro} +% +% Slightly simpler is the main entry for environments +% \changes{v1.9e}{1994/02/03}{use \cs{ttfamily} with \cs{string}} +% \changes{v1.9f}{1994/02/07}{should have used \cs{noexpand}, sigh} +% \changes{v1.9i}{1994/02/11}{should have used \cs{protect}} +% \changes{v1.9j}{1994/02/16}{Back to string:-)} +% \changes{v1.9s}{1994/10/14}{Added missing percent and changed to +% \cs{ttfamily}} +% \changes{v2.0d}{1998/12/20}{Correctly handle second index entry +% by using \cs{special@index} not \cs{index} (PR/2928).} +% \changes{v2.0e}{1998/12/28}{Use \cs{string}, not \cs{protect} in argument to +% \cs{special@index}.} +% \changes{v2.1b}{2004/02/09}{environment names incorrectly sorted in +% index (pr/3615)} +% \begin{macrocode} +\def\SpecialMainEnvIndex#1{\@bsphack\special@index{% + #1\actualchar + {\string\ttfamily\space#1} + (environment)% + \encapchar main}% + \special@index{environments:\levelchar#1\actualchar{% + \string\ttfamily\space#1}\encapchar + main}\@esphack} +% \end{macrocode} +% The |\SpecialUsageIndex| is similar to |\SpecialMainIndex|, except +% that it uses the standard |\index| command. +% \texttt{usage} instead of \texttt{main}. +% \begin{macrocode} +\def\SpecialUsageIndex#1{\@bsphack + {\let\special@index\index\SpecialIndex@{#1}{\encapchar usage}}% + \@esphack} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% +% \begin{macro}{\SpecialEnvIndex} +% Indexing environments is done a little bit differently; we produce +% two index entries with the |\SpecialEnvIndex| macro: +% \changes{v1.9e}{1994/02/03}{The index needs protecting} +% \changes{v1.9g}{1994/02/08}{should have used \cs{noexpand}, sigh} +% \changes{v1.9i}{1994/02/11}{should have used \cs{protect}} +% \begin{macrocode} +\def\SpecialEnvIndex#1{\@bsphack +% \end{macrocode} +% First we sort the environment under its own name stating in the +% actual entry that this is an environment. +% \begin{macrocode} + \index{#1\actualchar{\protect\ttfamily#1} + (environment)\encapchar usage}% +% \end{macrocode} +% The second entry is sorted as a subitem under the key +% `environments:'. +% \changes{v2.1b}{2004/02/09}{environment names incorrectly sorted in +% index (pr/3615)} +% \begin{macrocode} + \index{environments:#1\actualchar\levelchar{\protect\ttfamily#1}\encapchar + usage}\@esphack} +% \end{macrocode} +% Because both entries correspond to `descriptions' of the +% environment, we encapsulate the page numbers with the +% |\usage| macro. +% \end{macro} +% +% +% +% \begin{macro}{\SortIndex} +% This macro is used to generate the index entries for any +% single-character command that |\scan@macro| encounters. The +% first parameter specifies the lexical order for the character, +% whilst the second gives the actual characters to be printed in +% the entry. It can also be used directly to generate index entries +% which differ in sort key and actual entry. +% \begin{macrocode} +\def\SortIndex#1#2{\index{#1\actualchar#2}} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\it@is@a} +% This macro is supposed to produce a correct |\SortIndex| +% entry for a given character. Since this character might be +% recognised as a `command' character by the index program used, +% all characters are quoted with the |\quotechar|. +% \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)} +% \begin{macrocode} +\def\it@is@a#1{\special@index{\quotechar #1\actualchar + \string\verb\quotechar*\verbatimchar + \quotechar\bslash\quotechar#1\verbatimchar}} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\LeftBraceIndex} +% \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)} +% \begin{macro}{\RightBraceIndex} +% \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)} These +% two macros fix the problems with \textsf{makeindex}. Note the +% `hack' with |\iffalse}\fi| to satisfy both \TeX{} and the +% \textsf{makeindex} program. When this is written to the +% \texttt{.idx} file \TeX{} will see both braces (so we get a +% balanced text). \textsf{makeindex} will also see balanced braces +% but when the actual index entry is again processed by \TeX{} the +% brace in between |\iffalse| |\fi| will vanish. +% \begin{macrocode} +\@ifundefined{LeftBraceIndex}{\def\LeftBraceIndex{% + \special@index{\bgroup\actualchar\string\verb\quotechar*\verbatimchar + \quotechar\bslash{\verbatimchar\string\iffalse}\string\fi}}}{} + +\@ifundefined{RightBraceIndex}{\def\RightBraceIndex{% + \special@index{\egroup\actualchar\string\iffalse{\string\fi\string\verb + \quotechar*\verbatimchar\quotechar\bslash}\verbatimchar}}}{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\PercentIndex} +% \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)} +% \changes{v1.7c}{1992/03/25}{Default now for bug-fixed makeindex} +% By default we assume a version of \textsf{makeindex} without the +% percent bug is being used. +% \begin{macrocode} +\@ifundefined{PercentIndex} + {\def\PercentIndex{\it@is@a\percentchar}}{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\OldMakeindex} +% \changes{v1.7c}{1992/03/26}{Replaced \cs{NewMakeIndex}.} +% \begin{macro}{\percentchar} +% Here is one solution for the percent bug in \textsf{makeindex}. +% The macro |\percentchar| denotes a |%|$_{12}$. Calling this from +% a package or the driver file sets things up +% appropriately.\label{bug:fixes} +% \begin{macrocode} +\def\OldMakeindex{\def\PercentIndex{% + \special@index{\quotechar\percentchar\actualchar\string\verb + \quotechar*\verbatimchar\quotechar\bslash + \percentchar\percentchar\verbatimchar}}} +{\catcode`\%=12 \gdef\percentchar{%}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% +% +% +% +% \subsection{Redefining the \textsf{index} environment} +% +%\changes{v1.4r}{1989/04/22}{twocols env. placed into separate file} +%\changes{v1.4?}{1989/04/19}{use DEK's algorithm and implement +% a twocols env.} +%\changes{v1.4?}{1989/04/16}{changes to the index env.} +%\changes{v1.5a}{1989/04/26}{Now input multicol.sty instead of +% multcols.sty} +% \begin{macro}{\ifhave@multicol} +% \changes{v1.7a}{1992/03/04}{Added to support avoiding multicol.sty} By +% default the index is set in three columns, and will start on the +% same page as, and underneath, the last part of the text of the +% documented package file, if possible. The last page will be +% reformatted with balanced columns. This requires the +% \textsf{multicols} environment which is described elsewhere. So +% that \DOC{} can be run independently of +% \texttt{multicol.sty} we first check for its existence and set +% the "have@multicol" flag appropriately for use below. +% \changes{v1.9a}{1993/12/02}{Use \cs{IfFileExists}} +% \changes{v1.9m}{1994/04/28}{Use \cs{RequirePackage} to load multicol} +% \begin{macrocode} +\newif\ifhave@multicol +% \end{macrocode} +% If we found \texttt{multicol.sty} we use it. It would be nice to +% delay this (and the re-definition of "theindex") until we knew +% whether an index was actually required \ldots +% \begin{macrocode} +\IfFileExists{multicol.sty}{\have@multicoltrue + \RequirePackage{multicol}% + }{} +% \end{macrocode} +% \end{macro} + +% +% \begin{macro}{\IndexMin} +% \begin{macro}{\c@IndexColumns} +% \changes{v1.4t}{1989/04/24}{Counter added.} +% If \texttt{multicol} is in use, +% when the index is started we compute the remaining space on the +% current page; if it is greater than |\IndexMin|, the first +% part of the index will then be placed in the available space. +% The number of columns set is controlled by the counter +% |\c@IndexColumns| which can be changed with a +% |\setcounter| declaration. +% \begin{macrocode} +\newdimen\IndexMin \IndexMin = 80pt +\newcount\c@IndexColumns \c@IndexColumns = 3 +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\theindex} +% Now we start the multi-column mechanism, if appropriate. We use the +% \LaTeX{} counter |\c@IndexColumns| declared above to denote +% the number of columns and insert the `index prologue' text (which +% might contain a |\section| call, etc.). See the default +% definition for an example. +% \changes{v1.4t}{1989/04/24}{Incorporated new multicols env.} +% \changes{v1.5a}{1989/04/26}{Call multicols first} +% \changes{v1.6e}{1991/04/03}{Turned into env definition.} +% \changes{v1.7a}{1992/03/04}{Include test for multicols.} +% \begin{macrocode} +\ifhave@multicol + \renewenvironment{theindex} + {\begin{multicols}\c@IndexColumns[\index@prologue][\IndexMin]% +% \end{macrocode} +% Then we make a few last minute assignments to read the individual +% index |\item|$\,$s and finish off by ignoring any initial +% space. +% \begin{macrocode} + \IndexParms \let\item\@idxitem \ignorespaces}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\endtheindex} +% \changes{v1.4t}{1989/04/24}{Incorporated new multicols env.} +% At the end of the index, we have only to end the \textsf{multicols} +% environment. +% \begin{macrocode} + {\end{multicols}} +% \end{macrocode} +% If we can't use \textsf{multicols} we warn the user and use an +% environment that's basically the one from \texttt{article.sty}. +% \begin{macrocode} +\else + \typeout{Can't find multicol.sty -- will use normal index layout if + necessary.} + \def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi + \columnseprule \z@ \columnsep 35\p@ + \twocolumn[\index@prologue]% + \IndexParms \let\item\@idxitem \ignorespaces} + \def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi} +\fi +% \end{macrocode} +% \end{macro} +% Here are the necessary \textsf{makeindex} declarations. We disable +% scanning of macro names inside the index with "\scan@allowedfalse\n" +% to avoid recursion. +% \begin{macrocode} +%</package> +%<+gind>preamble +%<+gind>"\n \\begin{theindex} \n \\makeatletter\\scan@allowedfalse\n" +%<+gind>postamble +%<+gind>"\n\n \\end{theindex}\n" +%<*package> +% \end{macrocode} +% +% +% \begin{macro}{\IndexPrologue} +% \begin{macro}{\index@prologue} +% \changes{v1.9w}{1995/12/27}{Text changed} +% \changes{v1.9x}{1996/01/11}{Text depends on code lines used} +% The |\IndexPrologue| macro is used to place a short message +% into the document above the index. It is implemented by +% redefining |\index@prologue|, a macro which holds the +% default text. We'd better make it a |\long| macro to allow +% |\par| commands in its argument. +% \begin{macrocode} +\long\def\IndexPrologue#1{\@bsphack\def\index@prologue{#1}\@esphack} +% \end{macrocode} +% Now we test whether the default is already defined by another +% package file. If not we define it. +% \changes{v2.0j}{2000/05/22}{Less obscure wording? (CAR pr/3202)} +% \begin{macrocode} +\@ifundefined{index@prologue} + {\def\index@prologue{\section*{Index}% + \markboth{Index}{Index}% + Numbers written in italic refer to the page + where the corresponding entry is described; + numbers underlined refer to the + \ifcodeline@index + code line of the + \fi + definition; numbers in roman refer to the + \ifcodeline@index + code lines + \else + pages + \fi + where the entry is used. + }}{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% +% \begin{macro}{\IndexParms} +% These are some last-minute assignments for formatting the index +% entries. They are defined in a separate macro so that a user can +% substitute different definitions. We start by defining the +% various parameters controlling leading and the separation between +% the two columns. The entire index is set in |\small| size. +% \begin{macrocode} +\@ifundefined{IndexParms} + {\def\IndexParms{% + \parindent \z@ + \columnsep 15pt + \parskip 0pt plus 1pt + \rightskip 15pt + \mathsurround \z@ + \parfillskip=-15pt + \small +% \end{macrocode} +% \begin{macro}{\@idxitem} +% \begin{macro}{\subitem} +% \begin{macro}{\subsubitem} +% Index items are formatted with hanging indentation for any items +% which may require more than one line. +% \begin{macrocode} + \def\@idxitem{\par\hangindent 30pt}% +% \end{macrocode} +% Any sub-item in the index is formatted with a 15pt indentation +% under its main heading. +% \begin{macrocode} + \def\subitem{\@idxitem\hspace*{15pt}}% +% \end{macrocode} +% Whilst sub-sub-items go in a further 10pt. +% \begin{macrocode} + \def\subsubitem{\@idxitem\hspace*{25pt}}% +% \end{macrocode} +% \begin{macro}{\indexspace} +% The \textsf{makeindex} program generates an |\indexspace| +% before each new alphabetic section commences. After this final +% definition we end the |\@ifundefined| and the definition of +% |\IndexParms|. +% \begin{macrocode} + \def\indexspace{\par\vspace{10pt plus 2pt minus 3pt}}% + }}{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\efill} +% This definition of |\efill| is intended to be used after index +% items which have no following text (for example, ``\textit{ +% see\/}'' entries). It just ensures that the current line is +% filled, preventing ``|Underfull \hbox|'' messages. +% \begin{macrocode} +\def\efill{\hfill\nopagebreak}% +%</package> +%<+gind|gglo>item_x1 "\\efill \n \\subitem " +%<+gglo>item_x2 "\\ " +%<+gind>item_x2 "\\efill \n \\subsubitem " +%<*package> +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\pfill} +% \begin{macro}{\dotfil} +% \begin{macro}{\dotfill} +% The following definitions provide the |\pfill| command; if +% this is specified in the index style file to \textsf{makeindex} as +% the delimiter to appear after index items, then the intervening +% space before the referenced page numbers will be filled with +% dots, with a little white space interpolated at each end of the +% dots. If the line is broken the dots will show up on both lines. +% \begin{macrocode} +\def\dotfill{\leaders\hbox to.6em{\hss .\hss}\hskip\z@ plus 1fill}% +\def\dotfil{\leaders\hbox to.6em{\hss .\hss}\hfil}% +\def\pfill{\unskip~\dotfill\penalty500\strut\nobreak + \dotfil~\ignorespaces}% +%</package> +%<+gind|gglo>delim_0 "\\pfill " +%<+gind|gglo>delim_1 "\\pfill " +%<+gind|gglo>delim_2 "\\pfill " +%<*package> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% \begin{macro}{\*} +% Here is the definition for the |\*| macro. It isn't used in +% this set of macros. +% \begin{macrocode} +\def\*{\leavevmode\lower.8ex\hbox{$\,\widetilde{\ }\,$}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\main} +% The \textit{defining\/} entry for a macro name is flagged with +% the string \texttt{\encapchar main}\footnote{With the current +% definition of \texttt{\bslash encapchar} substituted for +% \texttt{\encapchar}} in the |\index| command; \textsf{makeindex} +% processes this so that the |\main| macro will be invoked to +% underline the page number(s) on which the {\em definition\/} of +% the macro will be found. +% \begin{macrocode} +\@ifundefined{main}{\def\main#1{\underline{#1}}}{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\usage} +% The |\usage| macro is used to indicate entries describing +% the usage of a macro. The corresponding page number(s) will be +% set in \textit{italics}. +% \begin{macrocode} +\@ifundefined{usage}{\def\usage#1{\textit{#1}}}{} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\PrintIndex} +% \changes{v1.5k}{1989/09/04}{\cs{printindex} changed to +% \cs{PrintIndex}} +% \changes{v1.7a}{1992/02/26}{Documentation moved to interface section.} +% \changes{v1.9h}{1994/02/10}{Use \cs{@input@} instead of \cs{@input}.} +% \changes{v1.9w}{1995/12/29}{Turn the cmd into a noop after use.} +% This is the same as "\printindex" in the \textsf{makeidx} package. +% \begin{macrocode} +\def\PrintIndex{\@input@{\jobname.ind}% + \global\let\PrintIndex\@empty} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\printindex} +% Since the above macro was called |\printindex| in older versions +% of \texttt{doc.sty} the following definition was provided up to +% version 1.9y. +% \changes{v1.9z}{1996/04/17}{Commented out} +% \begin{macrocode} +%\def\printindex{\typeout{\string\printindex\space is obsolete!}% +% \typeout{Please use \string\PrintIndex\space +% if you are a macro implementor^^J +% or get a newer version of the documented +% software if you are a user}% +% \PrintIndex} +% \end{macrocode} +% \end{macro} +% +% We want headings in the index (and changes list) according to the +% initial character of the next block of entries and have to instruct +% \textsf{makeindex} appropriately. Unfortunately the specification +% for this changed sometime between versions 2.4 and 2.11 of +% \textsf{makeindex}. We provide both ways of doing it but +% unfortunately this will always produce a warning message from +% \textsf{makeindex}. This is for older versions: +% \changes{v1.7h}{1992/07/01}{Turn off headings in gls file} +% \begin{macrocode} +%</package> +%<+gind,gglo>% The next lines will produce some warnings when +%<+gind,gglo>% running Makeindex as they try to cover two different +%<+gind,gglo>% versions of the program: +%<+gind,gglo>lethead_prefix "{\\bfseries\\hfil " +%<+gind,gglo>lethead_suffix "\\hfil}\\nopagebreak\n" +%<+gind>lethead_flag 1 +%<+gglo>lethead_flag 0 +% \end{macrocode} +% This works for newer ones: +% \begin{macrocode} +%<+gind,gglo>heading_prefix "{\\bfseries\\hfil " +%<+gind,gglo>heading_suffix "\\hfil}\\nopagebreak\n" +%<+gind>headings_flag 1 +%<+gglo>headings_flag 0 +%<*package> +% \end{macrocode} +% +% +% +% \subsection[Dealing with the change history] +% {Dealing with the change history\footnotemark} +% \footnotetext{The whole section was proposed by Brian \textsc{Hamilton +% Kelly}. He also documented and debugged the macros as +% well as many other parts of this package.} +% +% To provide a change history log, the |\changes| command has +% been introduced. This takes three arguments, respectively, the +% version number of the file, the date of the change, and some detail +% regarding what change has been made. The first of these arguments +% is otherwise ignored, but the others are written out and may be used +% to generate a history of changes, to be printed at the end of the +% document. However, note that older versions of Chen's standard +% \textsf{makeindex} +% program limit any textual field to just 64 characters; therefore, +% is important that the number of characters in the second and third +% parameters should not exceed 61 altogether (to allow for the +% parentheses placed around the date). +% +% \begin{macro}{\changes} +% \changes{BHK}{1989/04/26}{Documented \texttt{\protect\bslash changes} +% command.} +% \changes{BHK}{1989/04/26}{Changed definition of +% \texttt{\protect\bslash protect}.} The output of the |\changes| +% command goes into the \meta{Glossary\_File} and therefore uses +% the normal |\glossaryentry| commands.\footnote{Note that a recent +% change in \LaTeX{} 2.09 changed the command name in the +% \texttt{.glo} file from \texttt{\bslash indexentry} to +% \texttt{\bslash glossaryentry}. It is therefore necessary to +% have a special \textsf{makeindex} style file called +% \texttt{gglo.ist} to process this file correctly.} Thus +% \textsf{makeindex} or a similar program can be used to process +% the output into a sorted ``glossary''. The |\changes| command +% commences by taking the usual measures to hide its spacing, and +% then redefines |\protect| for use within the argument of the +% generated |\indexentry| command. +% +% We re-code nearly all chars found in |\sanitize| to letter +% since the use of special package which make some characters +% active might upset the |\changes| command when writing its +% entries to the file. However we have to leave |%| as comment +% and \verb*+ + as \meta{space} otherwise chaos will happen. +% And, of course the |\| should be available as escape +% character. +% \changes{v1.5v}{1990/01/28}{`Re-code a lot of chars.} +% \changes{v1.5m}{1989/09/20}{\cs{actualchar} in second level removed.} +% \changes{v1.5o}{1989/09/24}{New sorting.} +% \changes{v1.6c}{1990/06/29}{Again new sorting.} +% \changes{v1.9u}{1995/08/06}{Use \cs{protected@edef}} +% \begin{macrocode} +\def\changes{\@bsphack\begingroup\@sanitize + \catcode`\\\z@ \catcode`\ 10 \MakePercentIgnore + \changes@} +\def\changes@#1#2#3{% + \protected@edef\@tempa{\noexpand\glossary{#1\levelchar +% \end{macrocode} +% \changes{v1.9u}{1995/08/06}{Use value of \cs{saved@macroname} to +% find out about change entries at outer level} +% If the macro "\saved@macroname" doesn't contain any macro name +% (ie is empty) the current changes entry was done at top-level. +% In this case we preceed it by "\generalname". +% \begin{macrocode} + \ifx\saved@macroname\@empty + \space + \actualchar + \generalname + \else + \expandafter\@gobble + \saved@macroname + \actualchar + \string\verb\quotechar*% + \verbatimchar\saved@macroname + \verbatimchar + \fi + :\levelchar #3}}% + \@tempa\endgroup\@esphack} +% \end{macrocode} +% +% \begin{macro}{\saved@macroname} +% \changes{BHK}{1989/04/26}{Provided for sorting outside \textsf{macro} +% environment} The entries are sorted for convenience by the name +% of the most recently introduced macroname (i.e., that in the most +% recent |\begin{macro}| command). We therefore provide +% |\saved@macroname| to record that argument, and provide a default +% definition in case |\changes| is used outside a \textsf{macro} +% environment. (This is a {\em wicked\/} hack to get such entries +% at the beginning of the sorted list! It works providing no macro +% names start with "!" or |"|.) \changes{v1.7a}{1992/03/02}{Changed +% string used for better sorting.} +% \changes{v1.9u}{1995/08/06}{Now empty by default} +% \begin{macrocode} +\def\saved@macroname{} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\generalname} +% \changes{v1.9u}{1995/08/06}{Macro added} +% This macro holds the string placed before changes entries on +% top-level. +% \begin{macrocode} +\def\generalname{General} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\RecordChanges} +% \changes{BHK}{1989/04/26}{Renames former \texttt{\protect\bslash +% PrintChanges} command.} +% To cause the changes to be written (to a \texttt{.glo}) file, we +% define |\RecordChanges| to invoke \LaTeX's usual +% |\makeglossary| command. +% \begin{macrocode} +\let\RecordChanges\makeglossary +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\GlossaryMin} +% \changes{BHK}{1989/04/26}{Added to support +% \texttt{\protect\bslash changes}.} +% \begin{macro}{\c@GlossaryColumns} +% \changes{BHK}{1989/04/26}{Added to support \texttt{\protect\bslash +% changes}.} The remaining macros are all analogues of those used +% for the \textsf{theindex} environment. When the glossary is +% started we compute the space which remains at the bottom of the +% current page; if this is greater than |\GlossaryMin| then the +% first part of the glossary will be placed in the available space. +% The number of columns set are controlled by the counter +% |\c@GlossaryColumns| which can be changed with a |\setcounter| +% declaration. +% \begin{macrocode} +\newdimen\GlossaryMin \GlossaryMin = 80pt +\newcount\c@GlossaryColumns \c@GlossaryColumns = 2 +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\theglossary} +% \changes{BHK}{1989/04/26}{Added to support +% \texttt{\protect\bslash changes}.} +% \changes{v1.5p}{1989/09/28}{Now call \cs{multicols} first.} +% \changes{v1.6e}{1991/04/03}{Turned into env definition.} +% \changes{v1.7a}{1992/03/10}{Changed to work without multicols if +% necessary.} +% \begin{macro}{\endglossary} +% \changes{BHK}{1989/04/26}{Added to support +% \texttt{\protect\bslash changes}.} +% The environment \textsf{theglossary} is defined in the same manner +% as the \textsf{theindex} environment. +% \begin{macrocode} +\ifhave@multicol + \newenvironment{theglossary}{% + \begin{multicols}\c@GlossaryColumns + [\glossary@prologue][\GlossaryMin]% + \GlossaryParms \let\item\@idxitem \ignorespaces}% + {\end{multicols}} +\else + \newenvironment{theglossary}{% + \@restonecoltrue\if@twocolumn\@restonecolfalse\fi + \columnseprule \z@ \columnsep 35\p@ + \twocolumn[\glossary@prologue]% + \GlossaryParms \let\item\@idxitem \ignorespaces} + {\if@restonecol\onecolumn\else\clearpage\fi} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% Here are the necessary \textsf{makeindex} declarations with scanning +% disabled as for the index. +% \begin{macrocode} +%</package> +%<+gglo>preamble +%<+gglo>"\n \\begin{theglossary} \n +%<+gglo> \\makeatletter\\scan@allowedfalse\n" +%<+gglo>postamble +%<+gglo>"\n\n \\end{theglossary}\n" +% \end{macrocode} +% This difference from \texttt{gind.ist} is necessary if you have an +% up-to-date \LaTeX. +% \begin{macrocode} +%<+gglo>keyword "\\glossaryentry" +%<*package> +% \end{macrocode} +% +% +% \begin{macro}{\GlossaryPrologue} +% \changes{BHK}{1989/04/26}{Added to support +% \texttt{\protect\bslash changes}.} +% \begin{macro}{\glossary@prologue} +% \changes{BHK}{1989/04/26}{Added to support +% \texttt{\protect\bslash changes}.} +% The |\GlossaryPrologue| macro is used to place a short +% message above the glossary into the document. It is implemented +% by redefining |\glossary@prologue|, a macro which holds the +% default text. We better make it a long macro to allow +% |\par| commands in its argument. +% \begin{macrocode} +\long\def\GlossaryPrologue#1{\@bsphack + \def\glossary@prologue{#1}% + \@esphack} +% \end{macrocode} +% Now we test whether the default is already defined by another +% package file. If not we define it. +% \begin{macrocode} +\@ifundefined{glossary@prologue} + {\def\glossary@prologue{\section*{{Change History}}% + \markboth{{Change History}}{{Change History}}% + }}{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\GlossaryParms} +% \changes{BHK}{1989/04/26}{Added to support +% \texttt{\protect\bslash changes}.} +% Unless the user specifies otherwise, we set the change history +% using the same parameters as for the index. +% \begin{macrocode} +\@ifundefined{GlossaryParms}{\let\GlossaryParms\IndexParms}{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PrintChanges} +% \changes{BHK}{1989/04/26}{Added to support +% \texttt{\protect\bslash changes}.} +% To read in and print the sorted change history, just put the +% |\PrintChanges| command as the last (commented-out, and thus +% executed during the documentation pass through the file) command +% in your package file. Alternatively, this command may form one of +% the arguments of the |\StopEventually| command, although a +% change history is probably {\em not\/} required if only the +% description is being printed. +% +% The command assumes that \textsf{makeindex} or some other program +% has processed the \texttt{.glo} file to generate a sorted +% \texttt{.gls} file. +% \changes{v1.9h}{1994/02/10}{Use \cs{@input@} instead of \cs{@input}.} +% \changes{v1.9w}{1995/12/29}{Turn the cmd into a noop after use.} +% \begin{macrocode} +\def\PrintChanges{\@input@{\jobname.gls}% + \global\let\PrintChanges\@empty} +% \end{macrocode} +% \end{macro} +% +% +% +% +% +% \subsection{Bells and whistles} +% +% \begin{macro}{\StopEventually} +% \changes{v1.5k}{1989/09/04}{Support for checksum.} +% \begin{macro}{\Finale} +% \changes{v1.5k}{1989/09/04}{Support for checksum.} +% \changes{v1.5z}{1990/04/22}{Define \cs{Finale} globally.} +% \begin{macro}{\AlsoImplementation} +% \changes{v1.9w}{1995/12/27}{Macro added} +% \begin{macro}{\OnlyDescription} +% If |\AlsoImplementation| is in force the whole documentation +% including the code part will be typeset. This is the default. +% \begin{macrocode} +\newcommand\AlsoImplementation{% +% \end{macrocode} +% To make this happen we have to define +% |\StopEventually| in a way that its argument is typeset at the +% very end or more exactly at |\Finale|. For this we +% save its argument in the macro |\Finale|. +% \begin{macrocode} + \long\def\StopEventually##1{\@bsphack\gdef\Finale{##1% +% \end{macrocode} +% But |\Finale| will be called at the very end of a file. This +% is exactly the point were we want to know if the file is +% uncorrupted. Therefore we also call |\check@checksum| at this +% point. +% \begin{macrocode} + \check@checksum}% +% \end{macrocode} +% On the other hand: |\StopEventually| is more or less a +% dividing point between description and code. So we start to look +% for the check-sum of the documented file by calling +% |\init@checksum|. +% \begin{macrocode} + \init@checksum + \@esphack}% + } +% \end{macrocode} +% +% Since |\AlsoImplementation| should be the default we execute it +% and thus |\StopEventually| gets the desired meaning. +% \begin{macrocode} +\AlsoImplementation +% \end{macrocode} +% When the user places an |\OnlyDescription| declaration in +% the driver file the document should only be typeset up to +% |\StopEventually|. We therefore have to redefine this macro. +% \begin{macrocode} +\def\OnlyDescription{\@bsphack\long\def\StopEventually##1{% +% \end{macrocode} +% In this case the argument of |\StopEventually| should be set +% and afterwards \TeX{} should stop reading from this file. +% Therefore we finish this macro with +% \begin{macrocode} + ##1\endinput}\@esphack} +% \end{macrocode} +% If no |\StopEventually| command is given we silently ignore a +% |\Finale| issued. +% \changes{v1.9n}{1994/04/28}{Ignore \cs{Finale} if no +% \cs{StopEventually} is given} +% \begin{macrocode} +\let\Finale\relax +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\meta} +% \changes{v1.4t}{1989/04/24}{Macro added.} +% \changes{v1.5w}{1990/02/03}{Breaks at space allowed.} +% \changes{v1.6a}{1990/05/24}{Extra space bug corrected.} +% The |\meta| macro is a bit tricky. We want to allow line +% breaks at blanks in the argument but we don't want a break +% in between. In the past this was done by defining |\meta| in a way that a +% \verb*+ + is active when the argument is scanned. Words are then +% scanned into |\hbox|es. The active \verb*+ + will end the +% preceding |\hbox| add an ordinary space and open a new +% |\hbox|. In this way breaks are only possible at spaces. The +% disadvantage of this method was that |\meta| was neither robust +% nor could it be |\protect|ed. The new implementation fixes this +% problem by defining |\meta| in a radically different way: we +% prevent hypenation by defining a |\language| which has no +% patterns associated with it and use this to typeset the words +% within the angle brackets. +% \changes{v2.0i}{2000/05/21}{New implementation (pr/3170)} +% \begin{macrocode} +\ifx\l@nohyphenation\undefined + \newlanguage\l@nohyphenation +\fi +% \end{macrocode} +% +% \begin{macrocode} +\DeclareRobustCommand\meta[1]{% +% \end{macrocode} +% Since the old implementation of |\meta| could be used in math we +% better ensure that this is possible with the new one as +% well. So we use |\ensuremath| around |\langle| and +% |\rangle|. However this is not enough: if |\meta@font@select| +% below expands to |\itshape| it will fail if used in math +% mode. For this reason we hide the whole thing inside an +% |\nfss@text| box in that case. +% \changes{v2.0l}{2000/06/10}{Fixing changes for (pr/3170)} +% \begin{macrocode} + \ensuremath\langle + \ifmmode \expandafter \nfss@text \fi + {% + \meta@font@select +% \end{macrocode} +% Need to keep track of what we changed just in case the user +% changes font inside the argument so we store the font explicitly. +% \changes{v2.0m}{2000/07/04}{More fixing changes for (pr/3170)} +% \begin{macrocode} + \edef\meta@hyphen@restore + {\hyphenchar\the\font\the\hyphenchar\font}% + \hyphenchar\font\m@ne + \language\l@nohyphenation + #1\/% + \meta@hyphen@restore + }\ensuremath\rangle +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\meta@font@select} +% \changes{v2.0k}{2000/05/26}{Macro added (pr/3170)} +% Maske font used inside |\meta| customizable. +% \begin{macrocode} +\def\meta@font@select{\itshape} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\IndexInput} +% This next macro may be used to read in a separate file (possibly +% a package file that is {\em not\/} documented by this means) and +% set it verbatim, whilst scanning for macro names and indexing the +% latter. This could be a useful first pass in preparing to +% generate documentation for the file read. +% \begin{macrocode} +\def\IndexInput#1{% +% \end{macrocode} +% We commence by setting up a group, and initializing a +% |\trivlist| as is normally done by a +% |\begin{macrocode}| command. +% \begin{macrocode} + \begingroup \macro@code +% \end{macrocode} +% We also make spacing behave as in the \textsf{macrocode} +% environment, because otherwise all the spaces will be shown +% explicitly. +% \begin{macrocode} + \frenchspacing \@vobeyspaces +% \end{macrocode} +% Then it only remains to read in the specified file, and finish +% off the |\trivlist|. +% \changes{v1.5t}{1989/11/07}{Call \cs{endmacrocode} instead +% of \cs{endtrivlist}.} +% \begin{macrocode} + \input{#1}\endmacrocode +% \end{macrocode} +% Of course, we need to finish off the group as well. +% \begin{macrocode} + \endgroup} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\maketitle} +% The macro to generate titles is easily altered in order that it +% can be used more than once (an article with many titles). In the +% original, diverse macros were concealed after use with +% |\relax|. We must cancel anything that may have been put +% into |\@thanks|, etc., otherwise {\em all\/} titles will +% carry forward any earlier such setting! +% \changes{v1.5j}{1989/06/09}{thispagestyle plain removed} +% \changes{v1.9r}{1994/06/09}{Added new definitions of +% \cs{@makefnmark} and \cs{@makefntext}} +% \begin{macrocode} +\def\maketitle{\par + \begingroup \def \thefootnote {\fnsymbol {footnote}}% + \setcounter {footnote}\z@ + \def\@makefnmark{\hbox to\z@{$\m@th^{\@thefnmark}$\hss}}% + \long\def\@makefntext##1{\parindent 1em\noindent + \hbox to1.8em{\hss$\m@th^{\@thefnmark}$}##1}% + \if@twocolumn \twocolumn [\@maketitle ]% + \else \newpage \global \@topnum \z@ \@maketitle \fi +% \end{macrocode} +% \changes{v1.5k}{1989/09/04}{Added \cs{ps@titlepage}} +% For special formatting requirements (such as in TUGboat), we use +% pagestyle |titlepage| for this; this is later defined to be +% |plain|, unless already defined, as, for example, by +% |ltugboat.sty|. +% \begin{macrocode} + \thispagestyle{titlepage}\@thanks \endgroup +% \end{macrocode} +% If the driver file documents many files, we don't want parts of a +% title of one to propagate to the next, so we have to cancel +% these: +% \begin{macrocode} + \setcounter {footnote}\z@ + \gdef\@date{\today}\gdef\@thanks{}% + \gdef\@author{}\gdef\@title{}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\ps@titlepage} +% \changes{v1.5k}{1989/09/04}{Added \texttt{\protect\bslash +% ps@titlepage}} When a number of articles are concatenated into a +% journal, for example, it is not usual for the title pages of such +% documents to be formatted differently. Therefore, a class +% such as \textsf{ltugboat} can define this macro in advance. +% However, if no such definition exists, we use pagestyle +% \texttt{plain} for title pages. +% \begin{macrocode} +\@ifundefined{ps@titlepage} + {\let\ps@titlepage=\ps@plain}{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\MakeShortVerb} +% \changes{v1.7a}{1992/02/27}{Added (from newdoc but now alters +% \cs{dospecials}, \cs{@sanitize}).} +% This arranges an abbreviation for "\verb" such that if you say +% "\MakeShortVerb{\"\meta{c}"}" subsequently using +% \meta{c}\meta{text}\meta{c} is equivalent to +% "\verb"\meta{c}\meta{text}\meta{c}.\footnote{Warning: +% the commentary in the rest of this section was written by Dave +% Love.} In addition, the fact +% that \meta{c} is made active is recorded for the benefit of the +% \textsf{verbatim} and \textsf{macrocode} environments. +% Note particularly that the definitions below are global. +% The first thing we do (it needn't be first) is to record +% the---presumably new---special character in "\dospecials" and +% "\@sanitize" using "\add@special". +% +% \changes{v1.9e.2}{1994/02/07}{-js: Check if \protect\meta{c} is +% already an +% abbreviation for \cs{verb}.} +% Some unwary user might issue "\MakeShortVerb" for a second time, we +% better protect against this. We assume that this happened if a +% control sequence "\cc\"\meta{c} is bound, the probability that this +% name is used by another module is low. We will output a warning +% below, so that a possible error might be noticed by the programmer +% if he reads the "LOG" file. (Should have used module internal names, +% 'though.) +% +% \begin{macro}{\MakeShortVerb*} +% \changes{v2.1a}{2003/12/09}{(HjG) Added \texttt{*} form} +% This arranges an abbreviation for "\verb*" such that if you say +% "\MakeShortVerb*{\"\meta{c}"}" subsequently using +% \meta{c}\meta{text}\meta{c} is equivalent to +% "\verb*"\meta{c}\meta{text}\meta{c}. +% \begin{macrocode} +%</package> +%<*package|shortvrb> +\def\MakeShortVerb{% + \@ifstar + {\def\@shortvrbdef{\verb*}\@MakeShortVerb}% + {\def\@shortvrbdef{\verb}\@MakeShortVerb}} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\def\@MakeShortVerb#1{% + \expandafter\ifx\csname cc\string#1\endcsname\relax +% \end{macrocode} +% \changes{v1.9v}{1995/11/03}{(DPC) Use \cs{@shortvrbinfo}} +% \begin{macrocode} + \@shortvrbinfo{Made }{#1}\@shortvrbdef + \add@special{#1}% +% \end{macrocode} +% Then the character's current catcode is stored in "\cc\"\meta{c}. +% \begin{macrocode} + \expandafter + \xdef\csname cc\string#1\endcsname{\the\catcode`#1}% +% \end{macrocode} +% The character is spliced into the definition using the same trick as +% used in "\verb" (for instance), having activated "~" in a group. +% \begin{macrocode} + \begingroup + \catcode`\~\active \lccode`\~`#1% + \lowercase{% +% \end{macrocode} +% The character's old meaning is recorded in "\ac\"\meta{c} prior to +% assigning it a new one. +% \begin{macrocode} + \global\expandafter\let + \csname ac\string#1\endcsname~% + \expandafter\gdef\expandafter~\expandafter{\@shortvrbdef~}}% + \endgroup +% \end{macrocode} +% Finally the character is made active. +% \begin{macrocode} + \global\catcode`#1\active +% \end{macrocode} +% If we suspect that \meta{c} is already a short reference, we tell +% the user. Now he or she is responsible if anything goes wrong\,\dots +% \begin{macrocode} + \else +% \end{macrocode} +% \changes{v1.9v}{1995/11/03}{(DPC) Use \cs{@shortvrbinfo}} +% \begin{macrocode} + \@shortvrbinfo\@empty{#1 already}{\@empty\verb(*)}% + \fi} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\DeleteShortVerb} +% \changes{v1.7a}{1992/02/27}{Added (from newdoc but now alters +% \cs{dospecials}, \cs{@sanitize}).} +% Here's the means of undoing a "\MakeShortVerb", for instance in a +% region where you need to use the character outside a verbatim +% environment. It arranges for "\dospecials" and "\@sanitize" to be +% altered appropriately, restores the saved catcode and, if necessary, +% the character's meaning (as stored by +% "\MakeShortVerb"). If the catcode wasn't stored in +% "\cc\"\meta{c} (by "\MakeShortVerb") the command is silently +% ignored. +% \changes{v1.7a}{1992/02/28}{Check for previous matched +% \cs{MakeShortVerb} +% to avoid error.} +% \begin{macrocode} +\def\DeleteShortVerb#1{% + \expandafter\ifx\csname cc\string#1\endcsname\relax +% \end{macrocode} +% \changes{v2.1a}{2003/12/10}{(HjG) Notify user +% if it's not a short verb character} +% \begin{macrocode} + \@shortvrbinfo\@empty{#1 not}{\@empty\verb(*)}% + \else +% \end{macrocode} +% \changes{v1.9v}{1995/11/03}{(DPC) Use \cs{@shortvrbinfo}} +% \begin{macrocode} + \@shortvrbinfo{Deleted }{#1 as}{\@empty\verb(*)}% + \rem@special{#1}% + \global\catcode`#1\csname cc\string#1\endcsname +% \end{macrocode} +% \changes{v1.9e.2}{1994/02/07}{-js: Reset `cc`\protect\meta{c} in +% in \cs{DeleteShortVerb}} +% We must not forget to reset "\cc\"\meta{c}, otherwise the check in +% "\MakeShortVerb" for a repeated definition will not work. +% \begin{macrocode} + \global \expandafter\let \csname cc\string#1\endcsname \relax + \ifnum\catcode`#1=\active + \begingroup + \catcode`\~\active \lccode`\~`#1% + \lowercase{% + \global\expandafter\let\expandafter~% + \csname ac\string#1\endcsname}% + \endgroup \fi \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@shortvrbinfo} +% \changes{v1.9v}{1995/11/03}{(DPC) Macro added} +% \changes{v2.1a}{2003/12/10}{(HjG) Third argument added +% on behalf of \cmd{\MakeShortVerb*}} +% Helper function for info messages. +% \begin{macrocode} +\def\@shortvrbinfo#1#2#3{% +%<shortvrb> \PackageInfo{shortvrb}{% +%<!shortvrb> \PackageInfo{doc}{% + #1\expandafter\@gobble\string#2 a short reference + for \expandafter\string#3}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\add@special} +% \changes{v1.7a}{1992/02/27}{Added for short verb facility.} +% This helper macro adds its argument to the +% "\dospecials" macro which is conventionally used by verbatim macros +% to alter the catcodes of the currently active characters. We need +% to add "\do\"\meta{c} to the expansion of "\dospecials" after +% removing the character if it was already there to avoid multiple +% copies building up should "\MakeShortVerb" not be balanced by +% "\DeleteShortVerb" (in case anything that uses "\dospecials" cares +% about repetitions). +% \begin{macrocode} +\def\add@special#1{% + \rem@special{#1}% + \expandafter\gdef\expandafter\dospecials\expandafter + {\dospecials \do #1}% +% \end{macrocode} +% Similarly we have to add "\@makeother\"\meta{c} to "\@sanitize" +% (which is used in things like "\index" to re-catcode all special +% characters except braces). +% \begin{macrocode} + \expandafter\gdef\expandafter\@sanitize\expandafter + {\@sanitize \@makeother #1}} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\rem@special} +% \changes{v1.7a}{1992/02/27}{Added for short verb facility.} +% The inverse of "\add@special" is slightly trickier. "\do" is +% re-defined to expand to nothing if its argument is the character of +% interest, otherwise to expand simply to the argument. We can then +% re-define "\dospecials" to be the expansion of itself. The space +% after "=`##1" prevents an expansion to "\relax"! +% \begin{macrocode} +\def\rem@special#1{% + \def\do##1{% + \ifnum`#1=`##1 \else \noexpand\do\noexpand##1\fi}% + \xdef\dospecials{\dospecials}% +% \end{macrocode} +% Fixing "\@sanitize" is the same except that we need to re-define +% "\@makeother" which obviously needs to be done in a group. +% \begin{macrocode} + \begingroup + \def\@makeother##1{% + \ifnum`#1=`##1 \else \noexpand\@makeother\noexpand##1\fi}% + \xdef\@sanitize{\@sanitize}% + \endgroup} +%</package|shortvrb> +%<*package> +% \end{macrocode} +% \end{macro} +% \begin{macro}{\MakeShortverb} +% \begin{macro}{\DeleteShortverb} +% \changes{v1.7a}{1992/02/27}{Added (from newdoc).} +% These commands from \textsf{newdoc} are now obsolete. +% \begin{macrocode} +\def\MakeShortverb{\typeout{*** Switch to \noexpand\MakeShortVerb + syntax, this is obsolete ***}\MakeShortVerb} +\def\DeleteShortverb{\typeout{*** Switch to \noexpand\DeleteShortVerb + syntax, this is obsolete ***}\DeleteShortVerb} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% +% \subsection[Providing a checksum and character table] +% {Providing a checksum and character table\footnotemark} +% \footnotetext{Warning: the commentary in this section was +% written by Dave Love. } +% +% +% \begin{macro}{\init@checksum} +% The checksum mechanism works by counting backslashes in the +% macrocode. This initialises the count (when called from +% "\StopEventually"). +% \changes{v1.5k}{1989/09/04}{Macro added to support checksum.} +% \begin{macrocode} +\def\init@checksum{\relax + \global\bslash@cnt\z@} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\check@checksum} +% \changes{v1.5k}{1989/09/04}{Macro added to support checksum.} +% This reports the sum compared with the value ("\bslash@cnt") the +% file advertises. It's called from "\Finale" (if that hasn't been +% re-defined). +% \begin{macrocode} +\def\check@checksum{\relax + \ifnum\check@sum=\z@ + \typeout{**********************************}% + \typeout{* This macro file has no checksum!}% + \typeout{* The checksum should be \the\bslash@cnt!}% + \typeout{**********************************}% + \else + \ifnum\check@sum=\bslash@cnt + \typeout{*******************}% + \typeout{* Checksum passed *}% + \typeout{*******************}% + \else + \PackageError{doc}{Checksum not passed + (\the\check@sum<>\the\bslash@cnt)}% + {The file currently documented seems to be wrong.^^J% + Try to get a correct version.}% + \fi + \fi + \global\check@sum\z@} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\check@sum} +% \changes{v1.5k}{1989/09/04}{Macro added to support checksum.} +% \begin{macro}{\bslash@cnt} +% \changes{v1.5k}{1989/09/04}{Macro added to support checksum.} +% We need to define counters, "\bslash@cnt" for the number of +% backslashes counted and "\check@sum" for the value advertised by the +% file. +% \begin{macrocode} +\newcount\check@sum \check@sum = \z@ +\newcount\bslash@cnt \bslash@cnt = \z@ +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\CheckSum} +% \changes{v1.5k}{1989/09/04}{Macro added to support checksum.} +% This is the interface to setting "\check@sum". +% \begin{macrocode} +\def\CheckSum#1{\@bsphack\global\check@sum#1\relax\@esphack} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\step@checksum} +% \changes{v1.5k}{1989/09/04}{Macro added to support checksum.} +% This advances the count when a backslash is encountered in the +% macrocode. +% \begin{macrocode} +\def\step@checksum{\global\advance\bslash@cnt\@ne} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\CharacterTable} +% The user interface to the character table-checking does some +% "\catcode"ing and then compares the following table with the +% stored version. We need to have "@" of type ``other'' within the +% table since this is the way it is usually returned when reading +% in a normal document. To nevertheless have a private letter we +% use "~" for this purpose. "~" does no harm as a ``letter'' as it +% comes last in the table and therefore will not gobble following +% space. +% \changes{v1.5m}{1989/09/20}{Macro added to check character translation +% problems.} +% \changes{v1.5q}{1989/11/01}{Made character table more readable.} +% \changes{v1.5t}{1989/11/07}{Make \string\~{} letter in chartable +% macros.} +% \changes{v1.5u}{1989/11/14}{Made @ other in default table.} +% \begin{macrocode} +\def\CharacterTable{\begingroup \CharTableChanges \character@table} +% \end{macrocode} +% \end{macro} +% \def\MakePrivateLetters{\catcode`\~=11\makeatletter} +% \begin{macro}{\character@table} +% This does the work of comparing the tables and reporting the result. +% Note that the following code is enclosed in a group +% with "~" catcoded to letter. +% \begin{macrocode} +\begingroup + \catcode`\~=11 + \gdef\character@table#1{\def\used~table{#1}% + \ifx\used~table\default~table + \typeout{***************************}% + \typeout{* Character table correct *}% + \typeout{***************************}% + \else + \PackageError{doc}{Character table corrupted} + {\the\wrong@table} + \show\default~table + \show\used~table + \fi + \endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\CharTableChanges} +% When the character table is read in we need to scan it with a +% fixed set of "\catcode"s. The reference table below was defined by +% assuming the normal "\catcode"s of \TeX{}, i.e.\ "@" is of type +% other and the only token of type ``letter'' are the usual letters +% of the alphabet. If, for some reason, other characters are made +% ``letters'' then their "\catcode"s need to be restored before +% checking the table. Otherwise spaces in the table are gobbled and +% we get the information that the tables are different, even if +% they are actually equal. For this reason "\CharTableChanges" can +% be set up to locally restore the "\catcode"s of such ``letters'' +% to ``other''. +% \begin{macrocode} + \global\let\CharTableChanges\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\default~table} +% Here's what the table {\em should\/} look like (modulo spaces). +% \begin{macrocode} + \makeatother + \gdef\default~table + {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z + Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z + Digits \0\1\2\3\4\5\6\7\8\9 + Exclamation \! Double quote \" Hash (number) \# + Dollar \$ Percent \% Ampersand \& + Acute accent \' Left paren \( Right paren \) + Asterisk \* Plus \+ Comma \, + Minus \- Point \. Solidus \/ + Colon \: Semicolon \; Less than \< + Equals \= Greater than \> Question mark \? + Commercial at \@ Left bracket \[ Backslash \\ + Right bracket \] Circumflex \^ Underscore \_ + Grave accent \` Left brace \{ Vertical bar \| + Right brace \} Tilde \~} +\endgroup +% \end{macrocode} +% \end{macro} +% \let\MakePrivateLetters=\makeatletter +% +% \begin{macro}{\wrong@table} +% \changes{v1.7a}{1992/02/28}{Moved to where the catcodes are right +% so it works.} +% We need a help message in case of problems. +% \begin{macrocode} + \newhelp\wrong@table{Some of the ASCII characters are corrupted.^^J + I now \string\show\space you both tables for comparison.} +% \end{macrocode} +% \end{macro} +% +% +% \subsection[Attaching line numbers to code lines] +% {Attaching line numbers to code lines\footnotemark} +% \footnotetext{Warning: the commentary was written by Dave +% Love.} +% +% +% The code in this section allows index entries to refer to code line +% numbers---the number of the first line of macrocode in the +% \textsf{macro} environment. +% +% +% \begin{macro}{\codeline@index} +% Indexing by code line is controlled by the "codeline@index" switch. +% \changes{v1.5s}{1989/11/05}{Support for code line no. (Undoc)} +% \changes{v1.7a}{1992/02/24}{Documented code line no. support.} +% \begin{macro}{\CodelineNumbered} +% \changes{v1.8a}{1993/05/19}{Macro added} +% \begin{macrocode} +\newif\ifcodeline@index \codeline@indexfalse +\let\CodelineNumbered\codeline@indextrue +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\codeline@wrindex} +% The code index entries are written out by "\special@index". If +% indexing is by code line this is "\let" to "\codeline@wrindex"; +% if indexing is by page it is just "\index". However, if +% "\nofiles" is given, we omit writing such an index entry at all. +% \changes{v1.7j}{1992/08/14}{Added \cs{if@filesw}.} +% \begin{macrocode} +\def\codeline@wrindex#1{\if@filesw + \immediate\write\@indexfile + {\string\indexentry{#1}% + {\number\c@CodelineNo}}\fi} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\special@index} +% By default no index entries are written out. +% \begin{macrocode} +\let\special@index = \@gobble +% \end{macrocode} +% \end{macro} +% \begin{macro}{\CodelineIndex} +% \changes{v1.5u}{1989/11/14}{Added \cs{PageIndex} and +% \cs{CodelineIndex} (Undoc)} +% This switches on use of the index file with "\makeindex", sets the +% switch to indicate code line numbering and defines "\special@index" +% appropriately. +% \begin{macrocode} +\def\CodelineIndex{\makeindex + \codeline@indextrue + \let\special@index\codeline@wrindex} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\PageIndex} +% "\PageIndex" is similar. +% \begin{macrocode} +\def\PageIndex{\makeindex + \codeline@indexfalse + \let\special@index\index} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\c@CodelineNo} +% \changes{v1.5l}{1989/09/10}{Counter added to support code line +% numbers} +% \changes{v1.5y}{1990/02/24}{Default changed.} +% \changes{v1.6b}{1990/06/15}{\cs{rm} moved before \cs{scriptsize} to +% avoid unnecessary fontwarning.} +% We need a counter to keep track of the line number. +% \begin{macrocode} +\newcount\c@CodelineNo \c@CodelineNo\z@ +% \end{macrocode} +% \end{macro} +% \begin{macro}{\theCodelineNo} +% \changes{v1.7a}{1992/02/25}{Existing definition not overwritten.} +% \changes{v1.7a}{1992/03/12}{Use \cs{reset@font} for NFSS.} +% This provides a hook to control the format of line numbers which may +% be defined in a class file. +% \begin{macrocode} +\@ifundefined{theCodelineNo} + {\ifx\selectfont\undefined + \def\theCodelineNo{\rmfamily\scriptsize\arabic{CodelineNo}}% + \else + \def\theCodelineNo{\reset@font\scriptsize\arabic{CodelineNo}}% + \fi} + {} +% \end{macrocode} +% \end{macro} +% +% +% +% +% \subsection{Layout Parameters for documenting package files} +% +% \begin{macro}{\tolerance} +% People documenting package files would probably rather have things +% ``sticking out'' in overfull |\hbox|es and poorish spacing, +% because they probably don't want to spend a lot of time on making +% all the line breaks perfect! +% \begin{macrocode} + \tolerance=1000\relax +% \end{macrocode} +% \end{macro} +% +% \DeleteShortVerb{\"} +% +% The following |\mathcode| definitions allow the characters +% `|\|' +% and `\texttt{@}' to appear in |\ttfamily| font when invoked in math +% mode;\footnote{You may wonder why the definitions state that both +% characters belong to the {\em variable family\/} +% (i.e.\ the number 7 in front). The reason is this: +% Originally the \texttt{\bslash mathcode} of +% \texttt{\bslash} was defined to be \texttt{"075C}, +% i.e.\ ordinary character number 92 (hex 5C) in +% math family number 7 which is the typewriter family in +% standard \LaTeX. +% But this file should not depend on this specific +% setting, so I changed these +% \texttt{\bslash mathcode}$\,$s +% to work with any family assignments. For an example +% see the article about the new font selection scheme.} +% particularly for something like $|\@abc|=1$. +% +% If an {\em old\/} version of the \textsf{german} package is in +% force, then the `|"|' character is active and would upset the +% definition of the \meta{16-bit number} quantities below, therefore +% we change the |\catcode| of |"| inside a group, and use +% |\global|. +% \begin{macrocode} +{ \catcode`\"=12 + \global\mathcode`\\="705C \global\mathcode`\@="7040 } +% \end{macrocode} +% \MakeShortVerb{\"} +% +% \begin{macro}{\DocstyleParms} +% This macro can be used, for example, to assign new values to +% |\MacrocodeTopsep| and |\MacroIndent| and some other internal +% registers. If it is already defined, the default definition +% won't be carried out. Note that it is necessary to assign new +% values via this macro if it should be done in a class file (like +% \texttt{ltugboat.cls} for example) since the registers are +% undefined before \texttt{doc.sty} is read in. The default values +% for the internal registers are scattered over this file. +% \changes{v1.5u}{1989/11/14}{\cs{DocStyleParms} now empty} +% \begin{macrocode} +\@ifundefined{DocstyleParms}{}{} +% \end{macrocode} +% Now we allow overwriting the values by calling +% |\DocstyleParms|. +% \begin{macrocode} +\DocstyleParms \let\DocstyleParms\relax +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\AmSTeX} +% \changes{v1.5j}{1989/06/09}{Macro AmsTeX renamed to AmSTeX} +% \begin{macro}{\BibTeX} +% \begin{macro}{\SliTeX} +% Here are a few definitions which can usefully be employed when +% documenting package files: now we can readily refer to \AmSTeX, +% \BibTeX\ and \SliTeX, as well as the usual \TeX\ and \LaTeX. +% \begin{macrocode} +\@ifundefined{AmSTeX} + {\def\AmSTeX{\leavevmode\hbox{$\mathcal A\kern-.2em\lower.376ex% + \hbox{$\mathcal M$}\kern-.2em\mathcal S$-\TeX}}}{} +\@ifundefined{BibTeX} + {\def\BibTeX{{\rmfamily B\kern-.05em% + \textsc{i\kern-.025em b}\kern-.08em% + T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}}{} +\@ifundefined{SliTeX} + {\def\SliTeX{{\rmfamily S\kern-.06emL\kern-.18em\raise.32ex\hbox + {\scshape i}\kern -.03em\TeX}}}{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\PlainTeX} +% \changes{v1.5g}{1989/05/07}{space between plain and TeX changed.} +% \begin{macro}{\Web} +% There's even a \PlainTeX{} and a \Web. +% \begin{macrocode} +\@ifundefined{PlainTeX}{\def\PlainTeX{\textsc{Plain}\kern2pt\TeX}}{} +\@ifundefined{Web}{\def\Web{\textsc{Web}}}{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \subsection{Changing the \texttt{\protect\bslash catcode} of \%} +% +% \begin{macro}{\MakePercentIgnore} +% \begin{macro}{\MakePercentComment} +% And finally the most important bit: we change the |\catcode| +% of `|%|' so that it is ignored (which is how we are able to +% produce this document!). We provide two commands to do the actual +% switching. +%^^A The |\MakePercentIgnore| is then called as the +%^^A last command in this file. +% \begin{macrocode} +\def\MakePercentIgnore{\catcode`\%9\relax} +\def\MakePercentComment{\catcode`\%14\relax} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\DocInput} +% The two macros above are now used to define the |\DocInput| macro +% which was introduced in version v1.5l (or so) of the \DOC{} +% package. In older versions |\MakePercentIgnore| was placed +% at the very end of \texttt{doc.sty}. +% \begin{macrocode} +\def\DocInput#1{\MakePercentIgnore\input{#1}\MakePercentComment} +% \end{macrocode} +% \end{macro} +% +% \subsection{GetFileInfo} +% +% \begin{macro}{\GetFileInfo} +% \changes{v1.9o}{1994/05/08}{Macro added} +% \changes{v1.9z}{1997/02/05}{Missing percent latex/2404} +% Define |\filedate| and friends from info in the +% |\ProvidesPackage| etc.\ commands. +% \begin{macrocode} +\def\GetFileInfo#1{% + \def\filename{#1}% + \def\@tempb##1 ##2 ##3\relax##4\relax{% + \def\filedate{##1}% + \def\fileversion{##2}% + \def\fileinfo{##3}}% + \edef\@tempa{\csname ver@#1\endcsname}% + \expandafter\@tempb\@tempa\relax? ? \relax\relax} +% \end{macrocode} +% \end{macro} +% +% We can now finish the \texttt{docstrip} main module. +% \begin{macrocode} +%</package> +% \end{macrocode} +% +% +% \Finale +% \PrintIndex \PrintChanges +\endinput diff --git a/Master/texmf-dist/source/latex/base/docstrip.dtx b/Master/texmf-dist/source/latex/base/docstrip.dtx new file mode 100644 index 00000000000..4f6c7b61bfb --- /dev/null +++ b/Master/texmf-dist/source/latex/base/docstrip.dtx @@ -0,0 +1,4349 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +\catcode`\{=1 +\catcode`\}=2 +\def\filename{docstrip.dtx} +\def\fileversion{2.5c} +\def\filedate{2003/09/18} +\def\docdate {1999/03/31} +% \CheckSum{2436} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +% +%\iffalse +% +%% The docstrip program for use with TeX. +%% Copyright (C) 1989-1991 Frank Mittelbach +%% Copyright (C) 1992-1995 Johannes Braams, Denys Duchier, +%% Frank Mittelbach +%% Copyright (C) 1995 Marcin Woli\'nski +%% Copyright (C) 1996-1997 Mark Wooding, Marcin Woli\'nski +%% Copyright (C) 1998-2003 LaTeX3 project and the above authors +%% All rights are reserved. +%% +% +% \fi +% +% \changes{2.0b}{1991/05/29}{Added bugfix from Denys} +% \changes{2.0c}{1991/05/29}{Allow almost all characters in guard (DD)} +% \changes{2.0d}{1991/05/31}{Started merging in some of Franks code} +% \changes{2.0j}{1992/03/05}{Wrote introduction} +% \changes{2.0m}{1992/04/21}{Renamed all macros that deal with the +% parsing of boolean expressions} +% \changes{2.0m}{1992/04/25}{Removed dependency from ltugboat, +% incorporated driver file into source.} +% \changes{2.0m}{1992/04/25}{Added some missing percents; corrected some +% typos} +% \changes{2.0m-DL}{1992/05/08}{Various small corrections to English and +% typos} +% \changes{2.0q}{1992/07/01}{Changed all dates to yy/mm/dd for better +% sorting} +% \changes{2.2a}{1993/12/02}{Update for LaTeX2e} +% \changes{2.2c}{1993/12/17}{Renamed texsys.tex to texsys.cfg.} +% \changes{2.3a}{1995/08/17}{Swapped Primary with Secondary since +% expressions are generally described bottom-up} +% \changes{2.3b}{1995/08/22}{Completely changed expressions parser} +% \changes{2.3b}{1995/08/23}{Removed mechanism for checking if previous +% one-line guard is same as current (\cs{testOption}, +% \cs{closeOption})---this is not a common +% case and testing complicates things unnecessarily} +% \changes{2.3c}{1995/08/24}{When file is multiply listed in \cs{file} +% clause it \emph{is} multiply read} +% \changes{2.3c}{1995/09/04}{Changed some dirty tricks to be +% less/more dirty---all uses of \cs{afterfi}} +% \changes{2.3e}{1995/09/25}{Directories support} +% \changes{2.3e}{1995/10/24}{added \cs{makepathname} to support +% systems with bizzare pathnames} +% \changes{2.3e}{1995/10/25}{batch files work by \cs{input}} +% \changes{2.3e}{1996/10/02}{Introduced ``open lists''} +% \changes{2.4a}{1996/06/06}{Add stream limits (MDW)} +% \changes{2.4c}{1996/06/11}{Add initex support (DPC)} +% +% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ } +% \DoNotIndex{\@ne} +% \DoNotIndex{\advance,\begingroup,\catcode,\closein,\closeout} +% \DoNotIndex{\day,\def,\edef,\else,\empty,\endgroup,\errmessage} +% \DoNotIndex{\expandafter,\fi,\futurelet,\gdef,\global,\if,\ifeof} +% \DoNotIndex{\ifx,\immediate,\let,\loop,\m@ne,\message,\month} +% \DoNotIndex{\newcount} +% \DoNotIndex{\newif,\newlinechar,\newread,\newtoks,\newwrite} +% \DoNotIndex{\noexpand,\openin,\openout,\par,\read,\relax,\repeat} +% \DoNotIndex{\space,\the,\undefined,\write,\xdef,\year,\z@} +% +% ^^A some definitions for this documentation +% +% \newcommand{\ds}{\textsf{DocStrip}} ^^A maybe? +% \newcommand{\bsl}{\protect\bslash} +% \newcommand{\note}[1]{\marginpar{\textbf{#1}}} +% \newcommand{\netaddress}[1]{\texttt{#1}} +% +% ^^A override the default in doc.sty +% \makeatletter +% \renewenvironment{theglossary}{% +% \glossary@prologue% +% \GlossaryParms \let\item\@idxitem \ignorespaces}% +% {} +% \makeatother +% +% +% \changes{2.1c}{1993/02/25}{Added a setting for StandardModuleDepth} +% \setcounter{StandardModuleDepth}{1} +% +% \title{The \ds{} program% +% \thanks{This file has version number \fileversion, +% last revised \filedate, +% documentation dated \docdate.}} +% +% \changes{2.1b}{1993/02/23}{modified mailaddress of Johannes} +% \changes{2.4i}{1998/01/18}{removed mail addresses as it is hopeless +% to keep them uptodate} +% \author{% +% Frank Mittelbach +% \and +% Denys Duchier +% \and +% Johannes Braams +% \and +% Marcin Woli\'nski +% \and +% Mark Wooding +% } +% +% \date{Printed \today} +% +% \maketitle +% +% \begin{abstract} +% This document describes the implementation of the \ds{} program. +% The original version of this program was developed by Frank +% Mittelbach to accompany his \texttt{doc.sty} which enables literate +% programming in \LaTeX\@. Denys Duchier rewrote it to run either +% with \TeX\ or with \LaTeX, and to allow full boolean expressions in +% conditional guards instead of just comma-separated lists. +% Johannes Braams re-united the two implementations, documented and +% debugged the code. +% +% In September 1995 Marcin Woli\'nski changed many parts of the +% program to make use of \TeX's ability to write to multiple files +% at the same time to avoid re-reading sources. The performance +% improvement of version~2.3 came at a price of compatibility with +% some more obscure operating systems which limit the number of +% files a process can keep open. This was corrected in September +% 1996 by Mark Wooding and his changes were ``creatively merged'' +% by Marcin Woli\'nski who made at the same time changes in batch +% files processing, handling of preambles and introduced ``verbatim +% mode''. After all that, David Carlisle merged the new version into +% the \LaTeX\ sources, and made a few other changes, principally +% making \ds{} work under initex, and removing the need for +% batch files to say \verb|\def\batchfile{...}|. +% \end{abstract} +% +% \section{Introduction} +% +% \subsection{Why the \ds{} program?} When Frank Mittelbach created +% the \texttt{doc} package, he invented a way to combine \TeX\ code +% and its documentation. From then on it was more or less possible +% to do literate programming in \TeX. +% +% This way of writing \TeX\ programs obviously has great +% advantages, especially when the program becomes larger than a +% couple of macros. There is one drawback however, and that is +% that such programs may take longer than expected to run because +% \TeX\ is an interpreter and has to decide for each line of the +% program file what it has to do with it. Therefore, \TeX\ programs +% may be speeded up by removing all comments from them. +% +% By removing the comments from a \TeX\ program a new problem is +% introduced. We now have two versions of the program and both of +% them {\em have\/} to be maintained. Therefore it would be nice to +% have a possibility to remove the comments automatically, instead +% of doing it by hand. So we need a program to remove comments from +% \TeX\ programs. This could be programmed in any high level +% language, but maybe not everybody has the right compiler to +% compile the program. Everybody who wants to remove comments from +% \TeX\ programs has \TeX\@. Therefore the \ds{} program is +% implemented entirely in \TeX. +% +% \subsection{Functions of the \ds{} program} +% +% Having created the \ds{} program to remove comment lines from +% \TeX\ programs\footnote{Note that only comment lines, that is +% lines that start with a single \texttt{\%} character, are removed; +% all other comments stay in the code.} it became feasible to do more +% than just strip comments.\\ Wouldn't it be nice to have a way to +% include parts of the code only when some condition is set true? +% Wouldn't it be as nice to have the possibility to split the +% source of a \TeX\ program into several smaller files and combine +% them later into one `executable'?\\ Both these wishes have been +% implemented in the \ds{} program. +% +% \section{How to use the \ds{} program} +% A number of ways exist to use the \ds{} program: +% \begin{enumerate} +% \item The usual way to use \ds{} is to write a \emph{batch file} +% in such a way that it can be directly processed by \TeX{}. +% The batch file should contain the commands described below for +% controlling the \ds{} program. +% This allows you to set up a distribution where you can instruct +% the user to simply run +% \begin{quote} +% \texttt{TEX} \meta{batch file} +% \end{quote} +% to generate the executable versions of your files from the +% distribution sources. +% Most of the \LaTeX\ distribution is packaged this way. +% To produce such a batch file include a statement in your +% `batch file' that +% instructs \TeX\ to read \texttt{docstrip.tex}. +% The beginning of such a file would look like: +%\begin{verbatim} +% \input docstrip +% ... +%\end{verbatim} +% By convention the batch file should have extension |.ins|. But +% these days \ds{} in fact work with any extension. +% +% \item Alternatively you can instruct \TeX\ to read the file +% \texttt{docstrip.tex} and to see what happens. \TeX\ will ask +% you a few questions about the file you would like to be +% processed. When you have answered these questions it does +% its job and strips the comments from your \TeX\ code. +% \end{enumerate} +% +% \section{Configuring \ds} +% \subsection{Selecting output directories} +% \changes{2.3e}{1996/09/19}{Added documentation} +% Inspired by a desire to simplify reinstallations of \LaTeXe{} and +% to support operating systems which have an upper limit on the +% number of files allowed in a directory, \ds\ now allows +% installation scripts to specify output directories for files it +% creates. We suggest using TDS (\TeX\ directory structure) names +% of directories relative to \texttt{texmf} here. However these +% names should be thought of as a labels rather than actual names +% of directories. They get translated to actual system-dependent +% pathnames according to commands contained in a configuration file +% named \texttt{docstrip.cfg}. +% +% The configuration file is read by \ds{} just before it starts to +% process any batch file commands. +% +% If this file is not present \ds{} uses some default settings which +% ensure that files are only written to the current directory. +% However by use of this configuration file, a site maintainer can +% `enable' features of \ds{} that allow files to be written to +% alternative directories. +% +% \DescribeMacro{\usedir} +% Using this macro package author can tell where a file should be +% installed. All |\file|s generated in the scope of that +% declaration are written to a directory specified by its one +% argument. For example in \LaTeXe{} installation following +% declarations are used: +%\begin{verbatim} +% \usedir{tex/latex/base} +% \usedir{makeindex} +%\end{verbatim} +% And standard packages use +%\begin{verbatim} +% \usedir{tex/latex/tools} +% \usedir{tex/latex/babel} +%\end{verbatim} +% etc. +% +% \DescribeMacro{\showdirectory} +% Used to display directory names in messages. If some label is not +% defined it expands to |UNDEFINED (label is ...)| otherwise to a +% directory name. It is probably a good idea for every installation +% script to display at startup list of all directories that would +% be used and asking user to confirm that. +% +% The above macros are used by package/installation script +% author. The following macros are used in a configuration file, +% |docstrip.cfg|, by a system administrator to +% describe her/his local directory structure. +% +% \DescribeMacro{\BaseDirectory} This macro is administrator's way of +% saying ``yes, I want to use that directories support of +% yours''. \ds{} will write only to current directory unless your +% config has a call to this macro. (This means \ds{} won't write to +% random directories unless you tell it to, which is nice.) Using +% this macro you can specify a base directory for \TeX-related +% stuff. E.g., for many Unix systems that would be +%\begin{verbatim} +% \BaseDirectory{/usr/local/lib/texmf} +%\end{verbatim} +% and for standard em\TeX{} installation +%\begin{verbatim} +% \BaseDirectory{c:/emtex} +%\end{verbatim} +% +% \DescribeMacro{\DeclareDir} +% Having specified the base directory you should tell \ds{} how to +% interpret labels used in |\usedir| commands. This is done with +% |\DeclareDir| with two arguments. The first is the label and the +% second is actual name of directory relative to base +% directory. For example to teach \ds{} using standard em\TeX{} +% directories one would say: +%\begin{verbatim} +% \BaseDirectory{c:/emtex} +% \DeclareDir{tex/latex/base}{texinput/latex2e} +% \DeclareDir{tex/latex/tools}{texinput/tools} +% \DeclareDir{makeindex}{idxstyle} +%\end{verbatim} +% This will cause base latex files and font descriptions to be +% written to directory |c:\emtex\texinput\latex2e|, files of +% \texttt{tools} package to |c:\emtex\texinput\tools| and makeindex +% files to |c:\emtex\idxstyle|. +% +% Sometimes it is desirable to put some files outside of the base +% directory. For that reason |\DeclareDir| has a star form +% specifying absolute pathname. For example one could say +%\begin{verbatim} +% \DeclareDir*{makeindex}{d:/tools/texindex/styles} +%\end{verbatim} +% +% \DescribeMacro{\UseTDS} +% Users of systems conforming to TDS may well ask here ``do I +% really need to put a dozen of lines like +%\begin{verbatim} +% \DeclareDir{tex/latex/base}{tex/latex/base} +%\end{verbatim} +% in my config file''. The answer is |\UseTDS|. This macro causes +% \ds{} to use labels themselves for any directory you haven't +% overriden with |\DeclareDir|. The default behaviour is to raise +% an error on undefined labels because some users may want to know +% exactly where files go and not to allow \ds{} to write to random +% places. However I (MW) think this is pretty cool and my +% config says just (I'm running te\TeX{} under Linux) +%\begin{verbatim} +% \BaseDirectory{/usr/local/teTeX/texmf} +% \UseTDS +%\end{verbatim} +% +% The important thing to note here is that it is impossible to create +% a new directory from inside \TeX{}. So however you configure +% \ds, you need to create all needed directories before running +% the installation. Authors may want to begin +% every installation script by displaying a list of directories +% that will be used and asking user if he's sure all of them +% exist. +% +% Since file name syntax is OS specific \ds{} tries to guess it +% from the current directory syntax. It should succeed for Unix, +% MSDOS, Macintosh and VMS. However \ds{} will only initially +% know the current directory syntax if it is used with \LaTeX. +% If used with plain\TeX\ or initex it will not have this +% information\footnote{Except when processing the main +% \texttt{unpack.ins} batch file for the \LaTeX\ distribution, which +% takes special measures so that initex can learn the directory +% syntax.}. +% If you often use \ds{} with formats other than \LaTeX\ you should +% \emph{start} the file |docstrip.cfg| with a definition of +% |\WriteToDir|. E.g., +% |\def\WriteToDir{./}| on MSDOS/Unix, +% |\def\WriteToDir{:}| on Macintosh, +% |\def\WriteToDir{[]}| on VMS. +% +% If your system requires something +% completely different you can define in |docstrip.cfg| macros +% |\dirsep| and |\makepathname|. Check for their definition in the +% implementation part. If you want some substantially different +% scheme of translating |\usedir| labels into directory names try +% redefining macro |\usedir|. +% +% \subsection{Setting maximum numbers of streams} +% +% \DescribeMacro{\maxfiles} +% In support of some of the more obscure operating systems, there's +% a limit on the number of files a program can have open. This can +% be expressed to \ds\ through the |\maxfiles| macro. If the number +% of streams \ds\ is allowed to open is $n$, your configuration file +% can say |\maxfiles{|$n$|}|, and \ds\ won't try to open more files +% than this. Note that this limit won't include files which are +% already open. There'll usually be two of these: the installation +% script which you started, and the file |docstrip.tex| which it +% included; you must bear these in mind yourself. \ds\ assumes +% that it can open at least four files before it hits some kind of +% maximum: if this isn't the case, you have real problems. +% +% \DescribeMacro{\maxoutfiles} +% Maybe instead of having a limit on the number of files \TeX\ can +% have open, there's a limit on the number of files it can write +% to (e.g., \TeX\ itself imposes a limit of 16~files being written +% at a time). This can be expressed by saying |\maxoutfiles{|$m$|}| +% in a configuration file. You must be able to have at least one +% output file open at a time; otherwise \ds\ can't do anything at +% all. +% +% Both these options would typically be put in the |docstrip.cfg| +% file. +% +% +% \section{The user interface} +% +% \subsection{The main program} +% \DescribeMacro{\processbatchFile} The `main program' starts with +% trying to process a batch file, this is accomplished by calling +% the macro |\processbatchFile|. It counts the number of batch +% files it processes, so that when the number of files processed is +% still zero after the call to |\processbatchFile| appropriate +% action can be taken. +% +% \DescribeMacro{\interactive} When no batch files have been processed +% the macro |\interactive| is called. It prompts the user for +% information. First the extensions of the input and output files +% is determined. Then a question about optional code is asked and +% finally the user can give a list of files that have to be +% processed. +% +% \DescribeMacro{\ReportTotals} When the \texttt{stats} option is +% included in the \ds{}-program it keeps a record of the number of +% files and lines that are processed. Also the number of comments +% removed and passed as well as the number of code lines that were +% passed to the output are accounted. The macro |\ReportTotals| +% shows a summary of this information. +% +% \subsection{Batchfile commands} +% +% The commands described in this section are available to build a +% batch file for \TeX. +% +% \DescribeMacro{\input} +% All \ds{} batch files should start with the line: |\input docstrip| +% +% Do not use the \LaTeX\ syntax |\input{docstrip}| as batch files may +% be used with plain~\TeX\ or ini\TeX. +% You may that old batch files always have a line +% |\def\batchfile{|\meta{filename}|}| +% just before the input. +% Such usage is still supported but is now discouraged, as it causes +% \TeX\ to re-input the same file, using up one of its limited number +% of input streams. +% +% \DescribeMacro{\endbatchfile} +% All batch files should end with this command. Any lines after this +% in the file are ignored. In old files that start +% |\def\batchfile{|\ldots\ this command is optional, but is a good +% idea anyway. If this command is omitted from a batchfile then +% normally \TeX\ will go to its interactive |*| prompt, so you may +% stop \ds{} by typing |\endbatchfile| to this prompt. +% +% \DescribeMacro{\generate} +% \DescribeMacro{\file} +% \DescribeMacro{\from} +% The main reason for constructing a \ds{} command file is to +% describe what files should be generated, from what sources and +% what optional (`guarded') pieces of code should be included. The +% macro |\generate| is used to give \TeX\ this information. Its +% syntax is: +% \begin{quote} +% |\generate{|[|\file{|\meta{output}|}{|[|\from{|^^A +% \meta{input}|}{|\meta{optionlist}|}|]*|}|]*|}| +% \end{quote} +% The \meta{output} and \meta{input} are normal file specifications +% as are appropriate for your computer system. The +% \meta{optionlist} is a comma separated list of `options' that +% specify which optional code fragments in \meta{input} should be +% included in \meta{output}. Argument to |\generate| may contain +% some local declarations (e.g., the |\use...| commands described +% below) that will apply to all |\file|s after them. Argument to +% |\generate| is executed inside a group, so all local declarations +% are undone when |\generate| concludes. +% +% It is possible to specify multiple input files, each with its own +% \meta{optionlist}. This is indicated by the notation [\ldots]*. +% Moreover there can be many |\file| specifications in one +% |\generate| clause. This means that all these \meta{output} files +% should be generated while reading each of \meta{input} files +% once. Input files are read in order of first appearance in this +% clause. E.g. +%\begin{verbatim} +% \generate{\file{p1.sty}{\from{s1.dtx}{foo,bar}} +% \file{p2.sty}{\from{s2.dtx}{baz} +% \from{s3.dtx}{baz}} +% \file{p3.sty}{\from{s1.dtx}{zip} +% \from{s2.dtx}{zip}} +% } +%\end{verbatim} +% will cause \ds{} to read files \texttt{s1.dtx}, \texttt{s2.dtx}, +% \texttt{s3.dtx} (in that order) and produce files +% \texttt{p1.sty}, \texttt{p2.sty}, \texttt{p3.sty}. +% +% The restriction to at most 16 output streams open in a while +% does not mean that you can produce at most 16 files with one +% |\generate|. In the example above only 2 streams are needed, +% since while \texttt{s1.dtx} is processed only \texttt{p1.sty} and +% \texttt{p3.sty} are being generated; while reading +% \texttt{s2.dtx} only \texttt{p2.sty} and \texttt{p3.sty}; and +% while reading \texttt{s3.dtx} file \texttt{p2.sty} . However +% example below needs 3 streams: +%\begin{verbatim} +% \generate{\file{p1.sty}{\from{s1.dtx}{foo,bar}} +% \file{p2.sty}{\from{s2.dtx}{baz} +% \from{s3.dtx}{baz}} +% \file{p3.sty}{\from{s1.dtx}{zip} +% \from{s3.dtx}{zip}} +% } +%\end{verbatim} +% Although while reading \texttt{s2.dtx} file \texttt{p3.sty} is +% not written it must remain open since some parts of +% \texttt{s3.dtx} will go to it later. +% +% Sometimes it is not possible to create a file by reading all +% sources once. Consider the following example: +%\begin{verbatim} +% \generate{\file{p1.sty}{\from{s1.dtx}{head} +% \from{s2.dtx}{foo} +% \from{s1.dtx}{tail}} +% \file{s1.drv}{\from{s1.dtx}{driver}} +% } +%\end{verbatim} +% To generate \texttt{p1.sty} file \texttt{s1.dtx} must be read +% twice: first time with option \texttt{head}, then file +% \texttt{s2.dtx} is read and then \texttt{s1.dtx} again this time +% with option \texttt{tail}. \ds{} handles this case correctly: if +% inside one |\file| declaration there are multiple |\from|es with +% the same input file this file \emph{is} read multiple times. +% +% If the order of |\from|s specified in one of your |\file| +% specifications does not match the order of input files +% established by previous |\file|s, \ds{} will raise an error and +% abort. Then you may either read one of next sections or give up +% and put that file in separate |\generate| (but then sources will +% be read again just for that file). +% +% \paragraph{For impatient.} Try following algorithm: Find +% file that is generated from largest number of sources, start +% writing |\generate| clause with this file and its sources in +% proper order. Take other files that are to be generated and add +% them checking if they don't contradict order of sources for the +% first one. If this doesn't work read next sections. +% +% \paragraph{For mathematicians.} Relation ``file $A$ must be +% read before file $B$'' is a partial order on the set of all your +% source files. Each |\from| clause adds a chain to this order. +% What you have to do is to perform a topological sort i.e. to +% extend partial order to linear one. When you have done it just +% list your source files in |\generate| in such a way that order of +% their first appearance in the clause matches linear order. If +% this cannot be achieved read next paragraph. (Maybe future +% versions of \ds{} will perform this sort automatically, so all +% these troubles will disappear.) +% +% \paragraph{For that who must know that all.} There is a +% diverse case when it's not possible to achieve proper order of +% reading source files. Suppose you have to generate two files, +% first from \texttt{s1.dtx} and \texttt{s3.dtx} (in that order) +% and second from \texttt{s2.dtx} and \texttt{s3.dtx}. Whatever +% way you specify this the files will be read in either as +% \texttt{s1 s3 s2} or \texttt{s2 s3 s1}. The key to solution is +% magical macro |\needed| that marks a file as needed to be input +% but not directing any output from it to current |\file|. In our +% example proper specification is: +%\begin{verbatim} +% \generate{\file{p1.sty}{\from{s1.dtx}{foo} +% \needed{s2.dtx} +% \from{s3.dtx}{bar}} +% \file{p2.sty}{\from{s2.dtx}{zip} +% \from{s3.dtx}{zap}} +% } +%\end{verbatim} +% +% +% \DescribeMacro{\askforoverwritetrue} +% \DescribeMacro{\askforoverwritefalse} +% These macros specify what should happen if a file that is to be +% generated already exists. If |\askforoverwritetrue| is active +% (the default) the user is asked whether the file should be +% overwritten. If however |\askforoverwritefalse| was issued +% existing files will be overwritten silently. These switches are +% local and can be issued in any place in the file even inside +% |\generate| clause (between |\file|s however). +% +% \DescribeMacro{\askonceonly} +% You might not want to set |\askforoverwritefalse| in a batch file +% as that says that it us always all right to overwrite other people's +% files. However for large installations, such as the base \LaTeX\ +% distribution, being asked individually about hundreds of files +% is not very helpful either. A batchfile may therefore specify +% |\askonceonly|. This means that after the first time the batchfile +% asks the user a question, the user is given an option of to change +% the behaviour so that `yes' will be automatically assumed for all +% future questions. This applies to any use of the \ds{} commamnd +% |\Ask| including, but not restricted to, the file overwrite +% questions controlled by |\askforoverwritetrue|. +% +% \DescribeMacro{\preamble} +% \DescribeMacro{\endpreamble} +% \DescribeMacro{\postamble} +% \DescribeMacro{\endpostamble} +% It is possible to add a number of lines to the output of the +% \ds{} program. The information you want to add to the start of +% the output file should be listed between the |\preamble| and +% |\endpreamble| commands; the lines you want to add to the end of +% the output file should be listed between the |\postamble| and +% |\endpostamble| commands. Everything that \ds{} finds for both +% the pre- and postamble it writes to the output file, but preceded +% with value of |\MetaPrefix| (default is two \%-characters). If +% you include a |^^J| character in one of these lines, everything +% that follows it on the same line is written to a new line in the +% output file. This `feature' can be used to add a |\typeout| or +% |\message| to the the stripped file. +% +% \DescribeMacro{\declarepreamble} +% \DescribeMacro{\declarepostamble} +% \DescribeMacro{\usepreamble} +% \DescribeMacro{\usepostamble} +% \DescribeMacro{\nopreamble} +% \DescribeMacro{\nopostamble} +% Sometimes it is desirable to have different preambles for different +% files of a larger package (e.g., because some of them are +% customisable configuration files and they should be marked as +% such). In such a case one can say |\declarepreamble\somename|, +% then type in his/her preamble, end it with |\endpreamble|, +% and later on |\usepreamble\somename| to switch to this +% preamble. +% If no preamble should be used you can deploy the |\nopreamble| +% command. This command is equivalent to saying |\usepreamble\empty|. +% The same mechanism works for postambles, |\use...| +% declarations are local and can appear inside |\generate|. +% +% Commands |\preamble| and |\postamble| define and activate +% pre(post)ambles named |\defaultpreamble| and |\defaultpostamble|. +% +% \DescribeMacro{\batchinput} +% The batch file commands can be put into several batch files which +% are then executed from a master batch file. This is, for example, +% useful if a distribution consists of several distinct parts. You +% can then write individual batch files for every part and in +% addition a master file that simply calls the batch files for the +% parts. For this, call the individual batch files from the master +% file with the command |\batchinput{|\meta{file}|}|. Don't use +% |\input| for this purpose, this command +% should be used only for calling the \ds{} program as explained +% above and is ignored when used for any other purpose. +% +% \DescribeMacro{\ifToplevel} +% When batch files are nested you may want to suppress certain +% commands in the lower-level batch files such as terminal +% messages. For this purpose you can use the |\ifToplevel| command +% which executes its argument only if the current batch file is the +% outermost one. Make sure that you put the opening brace of the +% argument into the same line as the command itself, otherwise the +% \ds{} program will get confused. +% +% \DescribeMacro{\showprogress} +% \DescribeMacro{\keepsilent} +% When the option \texttt{stats} is included in \ds{} it can +% write message to the terminal as each line of the input file(s) is +% processed. This message consists of a single character, indicating +% kind of that particular line. We use the +% following characters: +% \begin{itemize} +% \item[\texttt{\%}] Whenever an input line is a comment +% \texttt{\%}-character is written to the terminal. +% \item[\texttt{.}] Whenever a code line is encountered +% a \texttt{.}-character is written on the terminal. +% \item[\texttt{/}] When a number of empty lines appear in a row in the +% input file, at most one of them is retained. The \ds{} +% program signals the removal of an empty line with the +% \texttt{/}-character. +% \item[\texttt{<}] When a `guard line' is found in the input and it +% starts a block of optionally included code, this is signalled +% on the terminal by showing the \texttt{<}-character, together +% with the boolean expression of the guard. +% \item[\texttt{>}] The end of a conditionally included block of code is +% indicated by showing the \texttt{>}-character. +% \end{itemize} +% This feature is turned on by default when the option +% \texttt{stats} is included, otherwise it is turned off. The +% feature can be toggled with the commands |\showprogress| and +% |\keepsilent|. +% +% +% \subsubsection{Supporting old interface} +% +% \DescribeMacro{\generateFile} +% Here is the old syntax for specifing what files are to be +% generated. It allows specification of just one output file. +% \begin{quote} +% |\generateFile{|\meta{output}|}{|\meta{ask}|}{|[|\from{|^^A +% \meta{input}|}{|\meta{optionlist}|}|]*|}| +% \end{quote} +% The meaning of \meta{output}, \meta{input} and +% \meta{optionslist} is just as for |\generate|. With +% \meta{ask} you can instruct \TeX\ to either silently overwrite a +% previously existing file (|f|) or to issue a warning and ask you +% if it should overwrite the existing file (|t|) (it overrides the +% |\askforoverwrite| setting). +% +% \DescribeMacro{\include} +% \DescribeMacro{\processFile} +% The earlier version of the \ds{} program supported a +% different kind of command to tell \TeX\ what to do. This command +% is less powerful than |\generateFile|; it can be used when +% \meta{output} is created from one \meta{input}. The syntax is: +% \begin{quote} +% |\include{|\meta{optionlist}|}| +% +% |\processFile{|\meta{name}|}{|\meta{inext}^^A +% |}{|\meta{outext}^^A +% |}{|\meta{ask}|}| +% \end{quote} +% This command is based on environments where filenames are +% constructed of two parts, the name and the extension, separated +% with a dot. The syntax of this command assumes that the +% \meta{input} and \meta{output} share the same name and only +% differ in their extension. This command is retained to be +% backwards compatible with the older version of \ds{}, but its use +% is not encouraged. +% +% \section{Conditional inclusion of code} +% +% When you use the \ds{} program to strip comments out of +% \TeX\ macro files you have the possibility to make more than one +% stripped macro file from one documented file. This is achieved by +% the support for optional code. The optional code is marked +% in the documented file with a `guard'. +% +% A guard is a boolean expression that is enclosed in |<| and |>|. +% It also {\em has\/} to follow the |%| at the beginning of the line. +% For example: +%\begin{verbatim} +% ... +% %<bool>\TeX code +% ... +%\end{verbatim} +% In this example the line of code will be included in \meta{output} +% if the option \texttt{bool} is present in the \meta{optionlist} of +% the |\generateFile| command. +% +% The syntax for the boolean expressions is: +% +%\DeleteShortVerb\| +% \begin{tabular}{lcl} +% \meta{Expression} & $::=$ & \meta{Secondary} +% [\{\texttt{|}, \texttt{,}\} +% \meta{Secondary}]*\\ +% \meta{Secondary} & $::=$ & +% \meta{Primary} [\texttt{\&} +% \meta{Primary}]*\\ +% \meta{Primary} & $::=$ & +% \meta{Terminal} $|$ \texttt{!}\meta{Primary} +% $|$ \texttt{(}\meta{Expression}\texttt{)}\\ +% \end{tabular} +% +% The \texttt{|} stands for disjunction, the \texttt{\&} stands for +% conjunction and the \texttt{!}\ stands for negation. The +% \meta{Terminal} is any sequence of letters and evaluates to +% \meta{true} iff\footnote{iff stands for `if and only if'} it +% occurs in the list of options that have to be included. +%\MakeShortVerb\| +% +% Two kinds of optional code are supported: one can either have +% optional code that `fits' on one line of text, like the example +% above, or one can have blocks of optional code. +% +% To distinguish both kinds of optional code the `guard modifier' +% has been introduced. The `guard modifier' is one character that +% immediately follows the |<| of the guard. It can be either |*| +% for the beginning of a block of code, or |/| for the end of a +% block of code\footnote{To be compatible with the earlier version +% of \ds{} also \texttt{+} and \texttt{-} are supported as `guard +% modifiers'. However, there is an incompatibility with the +% earlier version since a line with a \texttt{+}-modified guard is +% not included inside a block with a guard that evaluates to false, +% in contrast to the previous behaviour.}. The beginning and +% ending guards for a block of code have to be on a line by +% themselves. +% +% When a block of code is {\em not\/} included, any guards that occur +% within that block are {\em not\/} evaluated. +% +% \section{Those other languages} +% Since \TeX\ is an open system some of \TeX\ packages include +% non-\TeX\ files. Some authors use \ds\ to generate PostScript +% headers, shell scripts or programs in other languages. For them +% the comments-stripping activity of \ds\ may cause some +% trouble. This section describes how to produce non-\TeX\ files +% with \ds\ effectively. +% +% \subsection{Stuff \ds\ puts in every file} +% First problem when producing files in ``other'' languages is that +% \ds\ adds some bits to the begining and end of every generated +% file that may not fit with the syntax of the language in +% question. So we'll study carefully what exactly goes where. +% +% The whole text put on begining of file is kept in a macro defined +% by |\declarepreamble|. Every line of input presented to +% |\declarepreamble| is prepended with current value of +% |\MetaPrefix|. Standard \ds\ header is inserted before your text, +% and macros |\inFileName|, |\outFileName| and |\ReferenceLines| +% are used as placeholders for information which will be filled in +% later (specifically for each output file). Don't try to redefine +% these macros. After +%\begin{verbatim} +% \declarepreamble\foo +% ____________________________ +% Package FOO for use with TeX +% \endpreamble +%\end{verbatim} +% macro |\foo| is defined as +%\begin{verbatim} +% %%^^J +% %% This is file `\outFileName ',^^J +% %% generated with the docstrip utility.^^J +% \ReferenceLines^^J +% %% ____________________________^^J +% %% Package FOO for use with TeX. +%\end{verbatim} +% You can play with it freely or even define it from scratch. To +% embed the preamble in Adobe structured comments just use |\edef|: +%\begin{verbatim} +% \edef\foo{\perCent!PS-Adobe-3.0^^J% +% \DoubleperCent\space Title: \outFileName^^J% +% \foo^^J% +% \DoubleperCent\space EndComments} +%\end{verbatim} +% After that use |\usepreamble\foo| to select your new preamble. +% Everything above works as well for postambles. +% +% You may also prevent \ds\ from adding anything to your file, and +% put any language specific invocations directly in your code: +%\begin{verbatim} +% \generate{\usepreamble\empty +% \usepostamble\empty +% \file{foo.ps}{\from{mypackage.dtx}{ps}}} +%\end{verbatim} +% or alternatively |\nopreamble| and |\nopostamble|. +% +% \subsection{Meta comments} +% You can change the prefix used for putting meta comments to +% output files by redefining |\MetaPrefix|. Its default value is +% |\DoubleperCent|. The preamble uses value of |\MetaPrefix| +% current at time of |\declarepreamble| while meta comments in the +% source file use value current at time of |\generate|. Note that +% this means that you cannot produce concurrently two files using +% different |\MetaPrefix|es. +% +% \subsection{Verbatim mode} +% If your programming language uses some construct that can +% interferes badly with \ds\ (e.g., percent in column one) you may +% need a way for preventing it from being stripped off. For that +% purpose \ds\ features `verbatim mode'. +% +% A `Guard expression' of the form |%<<|\meta{END-TAG} marks +% the start of a section that will be copied verbatim upto a line +% containing only a percent in column 1 followed by \meta{END-TAG}. +% You can select any \meta{END-TAG} you want, but note that spaces +% count here. Example: +%\begin{verbatim} +% %<*myblock> +% some stupid() +% #computer<program> +% %<<COMMENT +% % These two lines are copied verbatim (including percents +% %% even if \MetaPrefix is something different than %%). +% %COMMENT +% using*strange@programming<language> +% %</myblock> +%\end{verbatim} +% And the output is (when stripped with \texttt{myblock} defined): +%\begin{verbatim} +% some stupid() +% #computer<program> +% % These two lines are copied verbatim (including percents +% %% even if \MetaPrefix is something different than %%). +% using*strange@programming<language> +%\end{verbatim} +% +%\StopEventually{% +%^^A \section{Conclusion} +% \PrintIndex +% \PrintChanges +%^^A \makesignature +% } +% +% \section{Producing the documentation} +% +% We provide a short driver file that can be extracted by the +% \ds{} program using the the conditional `\textsf{driver}'. To +% allow the use of \texttt{docstrip.dtx} as a program at Ini\TeX{} +% time (e.g., to strip +% off its own comments) we need to add a bit of primitive code. +% With this extra checking it is still possible to process this +% file with \LaTeXe{} to typeset the documentation. +% \changes{2.1b}{1993/02/23}{Added fontdefinitions for doc to the driver +% file, in order to get the layout of the code +% right; also added the layout definitions +% that are in effect in \texttt{doc.drv}} +% \changes{2.1c}{1993/02/23}{Remove definitions for fonts again} +% \changes{2.2f}{1994/02/26}{Allow direct processing of source} +% \begin{macrocode} +%<*driver> +% \end{macrocode} +% If |\documentclass| is undefined, e.g., if Ini\TeX{} or plain +% \TeX{} is used for formatting, we bypass the driver file. +% +% \changes{2.3a}{1995/08/20}{Changed driver} +% We use some trickery to avoid issuing |\end{document}| when +% the |\ifx| construction is unfinished. If condition below is +% true a |\fi| is constructed on the fly, the |\ifx| is completed, +% and the real |\fi| will never be seen as it comes after +% |\end{document}|. On the other hand if condition is false +% \TeX\ skips over |\csname fi\endcsname| having no idea that +% this could stand for |\fi|, driver is skipped and only then +% the condition completed. +% +% Additional guard |gobble| prevents \ds\ from extracting +% these tricks to real driver file. +% \begin{macrocode} +%<*gobble> +\ifx\jobname\relax\let\documentclass\undefined\fi +\ifx\documentclass\undefined +\else \csname fi\endcsname +%</gobble> +% \end{macrocode} +% Otherwise we process the following lines which will result in +% formatting the documentation. +% \begin{macrocode} + \documentclass{ltxdoc} + \EnableCrossrefs + % \DisableCrossrefs + % use \DisableCrossrefs if the + % index is ready + \RecordChanges + % \OnlyDescription + \typeout{Expect some Under- and overfull boxes} + \begin{document} + \DocInput{docstrip.dtx} + \end{document} +%<*gobble> +\fi +%</gobble> +%</driver> +% \end{macrocode} +% +% +% \section{The implementation} +% +% \subsection{Initex initializations} +% Allow this program to run with |initex|. +% The |Z| trickery saves the need to worry about |\outer| stuff in +% plain \TeX. +% \begin{macrocode} +%<*initex> +\catcode`\Z=\catcode`\% +\ifnum13=\catcode`\~{\egroup\else + \catcode`\Z=9 +Z +Z \catcode`\{=1 \catcode`\}=2 +Z \catcode`\#=6 \catcode`\^=7 +Z \catcode`\@=11 \catcode`\^^L=13 +Z \let\bgroup={ \let\egroup=} +Z +Z \dimendef\z@=10 \z@=0pt \chardef\@ne=1 \countdef\m@ne=22 \m@ne=-1 +Z \countdef\count@=255 +Z +Z \def\wlog{\immediate\write\m@ne} \def\space{ } +Z +Z \count10=22 % allocates \count registers 23, 24, ... +Z \count15=9 % allocates \toks registers 10, 11, ... +Z \count16=-1 % allocates input streams 0, 1, ... +Z \count17=-1 % allocates output streams 0, 1, ... +Z +Z \def\alloc@#1#2#3{\advance\count1#1\@ne#2#3\count1#1\relax} +Z +Z \def\newcount{\alloc@0\countdef} \def\newtoks{\alloc@5\toksdef} +Z \def\newread{\alloc@6\chardef} \def\newwrite{\alloc@7\chardef} +Z +Z \def\newif#1{% +Z \count@\escapechar \escapechar\m@ne +Z \let#1\iffalse +Z \@if#1\iftrue +Z \@if#1\iffalse +Z \escapechar\count@} +Z \def\@if#1#2{% +Z \expandafter\def\csname\expandafter\@gobbletwo\string#1% +Z \expandafter\@gobbletwo\string#2\endcsname +Z {\let#1#2}} +Z +Z \def\@gobbletwo#1#2{} +Z \def\@gobblethree#1#2#3{} +Z +Z \def\loop#1\repeat{\def\body{#1}\iterate} +Z \def\iterate{\body \let\next\iterate \else\let\next\relax\fi \next} +Z \let\repeat\fi +Z +Z \def\empty{} +Z +Z \def\tracingall{\tracingcommands2 \tracingstats2 +Z \tracingpages1 \tracingoutput1 \tracinglostchars1 +Z \tracingmacros2 \tracingparagraphs1 \tracingrestores1 +Z \showboxbreadth 10000 \showboxdepth 10000 \errorstopmode +Z \errorcontextlines 10000 \tracingonline1 } +Z +\bgroup}\fi\catcode`\Z=11 +\let\bgroup={ \let\egroup=} +%</initex> +% \end{macrocode} +% +% \subsection{Declarations and initializations} +% +% In order to be able to include the \texttt{@}-sign in control +% sequences its category code is changed to \meta{letter}. The +% `program' guard here allows most of the code to be excluded when +% extracting the driver file. +% \begin{macrocode} +%<*program> +\catcode`\@=11 +% \end{macrocode} +% +% When we want to write multiple lines to the terminal with one +% statement, we need a character that tells \TeX\ to break the lines. +% We use \verb=^^J= for this purpose. +% \begin{macrocode} +\newlinechar=`\^^J +% \end{macrocode} +% +% \subsubsection{Switches} +% \begin{macro}{\ifGenerate} +% The program will check if a +% file of the same name as the file it would be creating already +% exists. The switch |\ifGenerate| is used to indicate if the +% stripped file has to be generated. +% \begin{macrocode} +\newif\ifGenerate +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifContinue} +% The switch |\ifContinue| is used in various places in the +% program to indicate if a |\loop| has to end. +% \begin{macrocode} +\newif\ifContinue +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifForlist} +% \changes{2.0g}{1991/06/05}{Macro added.} +% The program contains an implementation of a for-loop, based on +% plain \TeX{}'s |\loop| macros. The implementation needs a +% switch to terminate the loop. +% \begin{macrocode} +\newif\ifForlist +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifDefault} +% The switch |\ifDefault| is used to indicate whether the +% default batch file has to be used. +% \changes{2.0f}{1991/06/04}{Macro added.} +% \begin{macrocode} +\newif\ifDefault +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifMoreFiles} +% The switch |\ifMoreFiles| is used to decide if the user +% wants more files to be processed. It is used only in interactive +% mode; initially it evaluates to \meta{true}. +% \changes{2.0h}{1991/06/19}{Macro added.} +% \begin{macrocode} +\newif\ifMoreFiles \MoreFilestrue +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifaskforoverwrite} +% The switch |\askforoverwrite| is used to decide if the user +% should be asked when a file is to be overwritten. +% \begin{macrocode} +\newif\ifaskforoverwrite \askforoverwritetrue +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Count registers} +% \begin{macro}{\blockLevel} +% Optionally included blocks of code can be nested. The counter +% |\blockLevel| will be used to keep track of the level of +% nesting. Its initial value is zero. +% \begin{macrocode} +\newcount\blockLevel \blockLevel\z@ +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\emptyLines} +% The count register |\emptyLines| is used to count the number +% of consecutive empty input lines. Only the first will be copied +% to the output file. +% \changes{2.0i}{1990/06/27}{Macro added} +% \begin{macrocode} +\newcount\emptyLines \emptyLines \z@ +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\processedLines} +% \begin{macro}{\commentsRemoved} +% \begin{macro}{\commentsPassed} +% \begin{macro}{\codeLinesPassed} +% To be able to provide the user with some statistics about the +% stripping process four counters are allocated if the statistics +% have been included when this program was \ds{}ped. The number of +% lines processed is stored in the counter |\processedLines|. +% The number of lines containing comments that are not written on +% the output file is stored in the counter |\commentsRemoved|; +% the number of comments copied to the output file is stored in the +% counter |\commentsPassed|. The number of lines containing +% macro code that are copied to the output file is stored in the +% counter |\codeLinesPassed|. +% \begin{macrocode} +%<*stats> +\newcount\processedLines \processedLines \z@ +\newcount\commentsRemoved \commentsRemoved \z@ +\newcount\commentsPassed \commentsPassed \z@ +\newcount\codeLinesPassed \codeLinesPassed \z@ +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \changes{2.0e}{1991/05/31}{Added counter allocation for the processing +% of multiple files} +% \begin{macro}{\TotalprocessedLines} +% \begin{macro}{\TotalcommentsRemoved} +% \begin{macro}{\TotalcommentsPassed} +% \begin{macro}{\TotalcodeLinesPassed} +% When more than one file is processed and when statistics have +% been included we provide the user also with information about the +% total amount of lines processed. For this purpose four more count +% registers are allocated here. +% \begin{macrocode} +\newcount\TotalprocessedLines \TotalprocessedLines \z@ +\newcount\TotalcommentsRemoved \TotalcommentsRemoved \z@ +\newcount\TotalcommentsPassed \TotalcommentsPassed \z@ +\newcount\TotalcodeLinesPassed \TotalcodeLinesPassed \z@ +%</stats> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\NumberOfFiles} +% When more than one file is processed, the number of files is +% stored in the count register |\NumberOfFiles|. +% \changes{2.4h}{1997/07/07}{Declare counter always pr/2429} +% \begin{macrocode} +\newcount\NumberOfFiles \NumberOfFiles\z@ +% \end{macrocode} +% \end{macro} +% +% \subsubsection{I/O streams} +% \begin{macro}{\inFile} +% For reading the file with documented \TeX-code, an input stream +% |\inFile| is allocated. +% \begin{macrocode} +\newread\inFile +% \end{macrocode} +% \end{macro} +% +% \changes{2.3a}{1995/08/18}{No allocated streams for console} +% \begin{macro}{\ttyin} +% \begin{macro}{\ttyout} +% Communication with the user goes through (nonexistent) stream 16. +% \begin{macrocode} +\chardef\ttyin16 +\chardef\ttyout16 +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\inputcheck} +% This stream is only used for checking for existence of files. +% \begin{macrocode} +\newread\inputcheck +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifToplevel} +% Execute the argument if current batch file is the outermost one. +% Otherwise suppress it. +% \begin{macrocode} +\newif\iftopbatchfile \topbatchfiletrue +\def\ifToplevel{\relax\iftopbatchfile + \expandafter\iden \else \expandafter\@gobble\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\batchinput} +% \changes{2.0n}{1992/04/26}{Added macro} +% \changes{2.1a}{1993/02/22}{Completely redefined (so that it works)} +% +% When the file \texttt{docstrip.tex} is read because of an +% |\input| statement in a batch file we have to prevent an +% endless loop (well, limited by \TeX's stack). Therefore we save +% the original primitive |\input| and define a new macro with +% an argument delimited by \verb*= = (i.e.\ a space) that just +% gobbles the argument. Since the end-of-line character is +% converted by \TeX{} to a space. This means that |\input| is not +% available as a command within batch files. +% +% \begin{macro}{\@@input} +% \changes{2.1a}{1993/02/22}{Macro added} +% We therefore keep a copy of the original under the name +% |\@@input| for internal use. If \ds{} runs under \LaTeX{} this +% command is already defined, so we make a quick test. +% \begin{macrocode} +\ifx\undefined\@@input \let\@@input\input\fi +% \end{macrocode} +% \end{macro} +% +% To allow the nesting of batch files the |\batchinput| command is +% provided it takes one argument, the name of the batch file to +% switch to. +% \begin{macrocode} +\def\batchinput#1{% +% \end{macrocode} +% We start a new group and locally redefine |\batchFile| to hold +% the new batch file name. We toggle the |\iftopbatchfile| switch +% since this definitely is not top batch file. +% \begin{macrocode} + \begingroup + \def\batchfile{#1}% + \topbatchfilefalse + \Defaultfalse + \usepreamble\org@preamble + \usepostamble\org@postamble + \let\destdir\WriteToDir +% \end{macrocode} +% After this we can simply call |\processbatchFile| which will +% open the new batch file and read it until it +% is exhausted. Note that if the batch file is not available, or +% misspelled this routine will produce a warning and return. +% \begin{macrocode} + \processbatchFile +% \end{macrocode} +% The value of |\batchfile| as well as local definitions of +% preambles, directories etc. will be restored +% at this closing |\endgroup|, so that further processing +% continues in the calling batch file. +% \begin{macrocode} + \endgroup +} +% \end{macrocode} +% \begin{macro}{\skip@input} +% \changes{2.0j}{1992/03/03}{Added macro} +% \changes{2.0n}{1992/04/26}{Argument delimited by space not \cs{relax}} +% \changes{2.0n}{1992/04/26}{Macro renamed from \cs{skipinput}} +% And here is the promised redefinition of |\input|: +% \begin{macrocode} +\def\skip@input#1 {} +\let\input\skip@input +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{Empty macros and macros that expand to a string} +% \begin{macro}{\guardStack} +% \changes{2.0k}{1992/04/06}{Renamed from \texttt{\bsl blockStack}} +% Because blocks of code that will conditionally be included in the +% output can be nested, a stack is maintained to keep track of +% these blocks. The main reason for this is that we want to be able +% to check if the blocks are properly nested. The stack itself is +% stored in |\guardStack|. +% \begin{macrocode} +\def\guardStack{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\blockHead} +% The macro |\blockHead| is used for storing and retrieving +% the boolean expression that starts a block. +% \begin{macrocode} +\def\blockHead{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\yes} +% \begin{macro}{\y} +% When the user is asked a question that he has to answer with either +% \meta{yes} or \meta{no}, his response has to be evaluated. For this +% reason the macros |\yes| and |\y| are defined. +% \begin{macrocode} +\def\yes{yes} +\def\y{y} +% \end{macrocode} +% \begin{macro}{\n} +% We also define |\n| for use in \ds{} command files. +% \changes{2.1e}{1993/03/09}{Macro added} +% \begin{macrocode} +\def\n{n} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\Defaultbatchile} +% \changes{2.0f}{1991/06/04}{Macro added.} +% When the \ds{} program has to process a batch file it +% can look for a batch file with a default name. This name +% is stored in |\DefaultbatchFile|. +% \begin{macrocode} +\def\DefaultbatchFile{docstrip.cmd} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\perCent} +% \begin{macro}{\DoubleperCent} +% \begin{macro}{\MetaPrefix} +% To be able to display percent-signs on the terminal, a +% \texttt{\%} with category code 12 is stored in |\perCent| and +% |\DoubleperCent|. The macro |\MetaPrefix| is put on begining of +% every meta-comment line. It is defined indirect way since some +% applications need redefining it. +% \begin{macrocode} +{\catcode`\%=12 + \gdef\perCent{%} + \gdef\DoubleperCent{%%} +} +\let\MetaPrefix\DoubleperCent +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% In order to allow formfeeds in the input we define a one-character +% control sequence \verb=^^L=. +% \begin{macrocode} +\def^^L{ } +% \end{macrocode} +% +% The only result of using |\Name| is slowing down execution since +% its typical use (e.g., |\Name\def{foo bar}...|) has exactly the +% same number of tokens as its expansion. However I think that it's +% easier to read. The meaning of |\Name| as a black box is: +% ``construct a name from second parameter and then pass it to your +% first parameter as a parameter''. +% +% |\@stripstring| is used to get tokens building name of a macro +% without leading backslash. +% \begin{macrocode} +\def\Name#1#2{\expandafter#1\csname#2\endcsname} +\def\@stripstring{\expandafter\@gobble\string} +% \end{macrocode} +% +% \subsubsection{Miscellaneous variables} +% \begin{macro}{\sourceFileName} +% The macro |\sourceFileName| is used to store the name of the +% current input file. +% \end{macro} +% \begin{macro}{\batchfile} +% The macro |\batchfile| is used to store the name of the +% batch file. +% \end{macro} +% \begin{macro}{\inLine} +% The macro |\inLine| is used to store the lines, read from +% the input file, before further processing. +% \end{macro} +% \begin{macro}{\answer} +% When some interaction with the user is needed the macro +% |\answer| is used to store his response. +% \end{macro} +% \begin{macro}{\tmp} +% Sometimes something has to be temporarily stored in a control +% sequence. For these purposes the control sequence |\tmp| is +% used. +% \end{macro} +% +% \subsection{Support macros} +% \subsubsection{The stack mechanism} +% +% It is possible to have `nested guards'. This means that within a +% block of optionally included code a subgroup is only included +% when an additional option is specified. To keep track of the +% nesting of the guards the currently `open' guard can be pushed on +% the stack |\guardStack| and later popped off the stack again. The +% macros that implement this stack mechanism are loosely based on +% code that is developed in the context of the \LaTeX3 project. +% +% To be able to implement a stack mechanism we need a couple of +% support macros. +% \begin{macro}{\eltStart} +% \changes{2.0k}{1992/04/06}{Macro added} +% \begin{macro}{\eltEnd} +% \changes{2.0k}{1992/04/06}{Macro added} +% The macros |\eltStart| and |\eltEnd| are used to delimit a stack +% element. They are both empty. +% \begin{macrocode} +\def\eltStart{} +\def\eltEnd{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\qStop} +% \changes{2.0k}{1992/04/06}{Macro added} +% The macro |\qStop| is a so-called `quark', a macro that expands to +% itself\footnote{The concept of `quarks' is developed for the +% \LaTeX3 project.}. +% \begin{macrocode} +\def\qStop{\qStop} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\pop} +% \changes{2.0k}{1992/04/06}{Macro added} The macro +% |\pop|\meta{stack}\meta{cs} `pops' the top element from the +% stack. It assigns the value of the top element to \meta{cs} and +% removes it from \meta{stack}. When \meta{stack} is empty a +% warning is issued and \meta{cs} is assigned an empty value. +% \begin{macrocode} +\def\pop#1#2{% + \ifx#1\empty + \Msg{Warning: Found end guard without matching begin}% + \let#2\empty + \else +% \end{macrocode} +% To be able to `peel' off the first guard we use an extra macro +% |\popX| that receives both the expanded and the unexpanded stack +% in its arguments. The expanded stack is delimited with the quark +% |\qStop|. +% \begin{macrocode} + \def\tmp{\expandafter\popX #1\qStop #1#2}% + \expandafter\tmp\fi} +% \end{macrocode} +% \begin{macro}{\popX} +% \changes{2.0k}{1992/04/06}{Macro added} When the stack is expanded +% the elements are surrounded with |\eltStart| and |\eltEnd|. The +% first element of the stack is assigned to |#4|. +% \begin{macrocode} +\def\popX\eltStart #1\eltEnd #2\qStop #3#4{\def#3{#2}\def#4{#1}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\push} +% \changes{2.0k}{1992/04/06}{Macro added} +% Guards can be pushed on the stack using the macro +% |\push|\meta{stack}\meta{guard}. Again we need a secondary macro +% (|\pushX|) that has both the expanded and the unexpanded stack as +% arguments. +% \begin{macrocode} +\def\push#1#2{\expandafter\pushX #1\qStop #1{\eltStart #2\eltEnd}} +% \end{macrocode} +% \begin{macro}{\pushX} +% \changes{2.0k}{1992/04/06}{Macro added} +% The macro |\pushX| picks up the complete expansion of the stack as +% its first argument and places the guard in |#3| on the `top'. +% \begin{macrocode} +\def\pushX #1\qStop #2#3{\def #2{#3#1}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{Programming structures} +% +% \begin{macro}{\forlist} +% \changes{2.0g}{1991/06/05}{Macro added.} +% When the program is used in interactive mode the +% user can supply a list of files that have to be processed. +% In order to process this list a for-loop is needed. This +% implementation of such a programming construct is based on the +% use of the \verb=\loop{=\meta{body}\verb=}\repeat= macro that +% is defined in plain \TeX\@. The syntax for this loop is: +% \begin{flushleft} +% |\for|\meta{control sequence} |:=| \meta{list} +% |\do|\\ +% \meta{body}\\ +% |\od| +% \end{flushleft} +% The \meta{list} should be a comma separated list. +% +% The first actions that have to be taken are to set the switch +% |\ifForlist| to \meta{true} and to store the loop condition +% in the macro |\ListCondition|. This is done using an +% |\edef| to allow for a control sequence that contains a +% \meta{list}. +% \begin{macrocode} +\def\forlist#1:=#2\do#3\od{% + \edef\ListCondition{#2}% + \Forlisttrue +% \end{macrocode} +% Then we start the loop. +% We store the first element from the |\ListCondition| in the +% macro that was supplied as the first argument to |\forlist|. +% This element is then removed from the |\ListCondition|. +% \begin{macrocode} + \loop + \edef#1{\expandafter\FirstElt\ListCondition,\empty.}% + \edef\ListCondition{\expandafter\OtherElts\ListCondition,\empty.}% +% \end{macrocode} +% When the first element from the \meta{list} is empty, we are done +% processing, so we switch |\ifForlist| to \meta{false}. +% When it is not empty we execute the third argument that should +% contain \TeX\ commands to execute. +% \begin{macrocode} + \ifx#1\empty \Forlistfalse \else#3\fi +% \end{macrocode} +% Finally we test the switch |\ifForlist| to decide whether the +% loop has to be continued. +% \begin{macrocode} + \ifForlist + \repeat} +% \end{macrocode} +% \begin{macro}{\FirstElt} +% \changes{2.0g}{1991/06/05}{Macro added.} +% The macro |\FirstElt| is used to get the first element from a +% comma-separated list. +% \begin{macrocode} +\def\FirstElt#1,#2.{#1} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\OtherElts} +% \changes{2.0g}{1991/06/05}{Macro added.} +% The macro |\OtherElts| is used to get all elements {\em but\/} +% the first element from a comma-separated list. +% \begin{macrocode} +\def\OtherElts#1,#2.{#2} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\whileswitch} +% \changes{2.0h}{1991/06/19}{Macro added.} When the program is used in +% interactive mode the user might want to process several files +% with different options or extensions. This goal could be reached +% by running the program several times, but it is more +% user-friendly to ask if he would like to process more files when +% we are done processing his last request. To accomplish this we +% need the implementation of a \texttt{while}-loop. Again plain +% \TeX's \verb=\loop{=\meta{body}\verb=}\repeat= is used to +% implement this programming structure. +% +% The syntax for this loop is: +% \begin{flushleft} +% |\whileswitch|\meta{switch} \verb|\fi| \meta{list} +% \verb={=\meta{body}\verb=}=\\ +% \end{flushleft} +% The first argument to this macro has to be a switch, defined +% using |\newif|; the second argument contains the statements +% to execute while the switch evaluates to \meta{true}. +% \begin{macrocode} +\def\whileswitch#1\fi#2{#1\loop#2#1\repeat\fi} +% \end{macrocode} +% \end{macro} +% +% \changes{2.3a}{1995/08/18}{New mechanism: output streams allocation} +% +% \subsubsection{Output streams allocator} +% +% For each of sixteen output streams available we have a macro +% named |\s@0| through |\s@15| saying if the stream is assigned to a +% file~(1) or not~(0). Initially all streams are not assigned. +% +% We also declare 16 counters which will be needed by the conditional +% code inclusion algorithm. +% +% \begin{macrocode} +\ifx\@tempcnta\undefined \newcount\@tempcnta \fi +\@tempcnta=0 +\loop +\Name\chardef{s@\number\@tempcnta}=0 +\csname newcount\expandafter\endcsname% + \csname off@\number\@tempcnta\endcsname +\advance\@tempcnta1 +\ifnum\@tempcnta<16\repeat +% \end{macrocode} +% +% We will use \emph{The \TeX book} style list to search through streams. +% +% \begin{macrocode} +\let\s@do\relax +\edef\@outputstreams{% + \s@do\Name\noexpand{s@0}\s@do\Name\noexpand{s@1}% + \s@do\Name\noexpand{s@2}\s@do\Name\noexpand{s@3}% + \s@do\Name\noexpand{s@4}\s@do\Name\noexpand{s@5}% + \s@do\Name\noexpand{s@6}\s@do\Name\noexpand{s@7}% + \s@do\Name\noexpand{s@8}\s@do\Name\noexpand{s@9}% + \s@do\Name\noexpand{s@10}\s@do\Name\noexpand{s@11}% + \s@do\Name\noexpand{s@12}\s@do\Name\noexpand{s@13}% + \s@do\Name\noexpand{s@14}\s@do\Name\noexpand{s@15}% + \noexpand\@nostreamerror + } +% \end{macrocode} +% +% \begin{macro}{\@nostreamerror}\begin{macro}{\@streamfound} +% When |\@outputstreams| is executed |\s@do| is defined to do +% something on condition of some test. If condition +% always fails macro |\@nostreamerror| on the end of the list +% causes an error. When condition succeeds |\@streamfound| is +% called, which gobbles rest of the list including the ending +% |\@nostreamerror|. It also gobbles |\fi| ending the condition, so +% the |\fi| is reinserted. +% +% \begin{macrocode} +\def\@nostreamerror{\errmessage{No more output streams!}} +\def\@streamfound#1\@nostreamerror{\fi} +% \end{macrocode} +% \end{macro}\end{macro} +% +% |\@stripstr| is auxiliary macro eating characters |\s@| +% (backslash,s,@). It is defined in somewhat strange way since |\s@| +% must have all category code 12 (other). This macro is used to +% extract stream numbers from stream names. +% +% \begin{macrocode} +\bgroup\edef\x{\egroup + \def\noexpand\@stripstr\string\s@{}} +\x +% \end{macrocode} +% +% \begin{macro}{\StreamOpen}\begin{macro}{\StreamPut} +% \begin{macro}{\StreamClose} +% Here is stream opening operator. Its parameter should be a macro +% named the same as the external file being opened. E.g., to +% write to file |foo.tex| use |\StreamOpen\foo|, then +% |\StreamPut\foo| and |\StreamClose\foo|. +% +% \begin{macrocode} +\chardef\stream@closed=16 +\def\StreamOpen#1{% + \chardef#1=\stream@closed + \def\s@do##1{\ifnum##1=0 + \chardef#1=\expandafter\@stripstr\string##1 % + \global\chardef##1=1 % + \immediate\openout#1=\csname pth@\@stripstring#1\endcsname % + \@streamfound + \fi} + \@outputstreams + } +\def\StreamClose#1{% + \immediate\closeout#1% + \def\s@do##1{\ifnum#1=\expandafter\@stripstr\string##1 % + \global\chardef##1=0 % + \@streamfound + \fi} + \@outputstreams + \chardef#1=\stream@closed + } +\def\StreamPut{\immediate\write} +% \end{macrocode} +% \end{macro}\end{macro}\end{macro} +% +% \subsubsection{Input and Output} +% +% \begin{macro}{\maybeMsg} +% \begin{macro}{\showprogress} +% \begin{macro}{\keepsilent} +% When this program is used it can optionally show its progress on +% the terminal. In that case it will write a special character to +% the terminal (and the transcript file) for each input line. This +% option is on by default when statistics are included in +% \texttt{docstrip.tex}. It is off when statistics are excluded. The +% commands |\showprogress| and |\keepsilent| can be used +% to choose otherwise. +% \begin{macrocode} +\def\showprogress{\let\maybeMsg\message} +\def\keepsilent{\let\maybeMsg\@gobble} +%<*stats> +\showprogress +%</stats> +%<-stats>\keepsilent +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\Msg} +% For displaying messages on the terminal the macro |\Msg| is +% defined to write {\em immediately\/} to |\ttyout|. +% \begin{macrocode} +\def\Msg{\immediate\write\ttyout} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Ask} +% The macro +% \verb=\Ask{=\meta{cs}\verb=}{=\meta{string}\verb=}= is a +% slightly modified copy of the \LaTeX\ macro |\typein|. It is +% used to ask the user a question. The \meta{string} will be +% displayed on his terminal and the response will be stored in the +% \meta{cs}. The trailing space left over from the carriage return +% is stripped off by the macro |\strip|. If the user just +% types a carriage return, the result will be an empty macro. +% \changes{2.0i}{1991/06/27}{Added check for just \protect\meta{CR}} +% \begin{macrocode} +\def\iden#1{#1} +\def\strip#1#2 \@gobble{\def #1{#2}} +\def\@defpar{\par} +\def\Ask#1#2{% + \message{#2}\read\ttyin to #1\ifx#1\@defpar\def#1{}\else + \iden{\expandafter\strip + \expandafter#1#1\@gobble\@gobble} \@gobble\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\OriginalAsk} +% \changes{2.4e}{1996/10/24}{macro added (was in unpack.ins) (DPC)} +% \begin{macrocode} +\let\OriginalAsk=\Ask +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\askonceonly} +% \changes{2.4e}{1996/10/22} +% {macro added (essentially from unpack.ins) (DPC)} +% \begin{macrocode} +\def\askonceonly{% + \def\Ask##1##2{% + \OriginalAsk{##1}{##2}% + \global\let\Ask\OriginalAsk + \Ask\noprompt{% + By default you will be asked this question for every file.^^J% + If you enter `y' now,^^J% + I will asssume `y' for all future questions^^J% + without prompting.}% + \ifx\y\noprompt\let\noprompt\yes\fi + \ifx\yes\noprompt\gdef\Ask####1####2{\def####1{y}}\fi}} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Miscellaneous} +% +% \begin{macro}{\@gobble} +% \changes{2.0a}{1991/05/25}{Macro added.} +% A macro that has an argument and puts it in the bitbucket. +% \begin{macrocode} +\def\@gobble#1{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Endinput} +% \changes{2.0f}{1991/06/04}{Macro added.} When a \texttt{doc} file +% contains a \verb+\endinput+ on a line by itself this normally +% means that anything following in this file should be ignored. +% Therefore we need a macro containing |\endinput| as its +% replacement text to check this against |\inLine| (the +% current line from the current input file). Of course the +% backslash has to have the correct |\catcode|. One way of +% doing this is feeding \verb=\\= to the |\string| operation +% and afterwards removing one of the |\| characters. +% \begin{macrocode} +\edef\Endinput{\expandafter\@gobble\string\\endinput} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\makeOther} +% During the process of reading a file with \TeX\ code the category +% code of all special characters has to be changed to \meta{other}. +% The macro |\makeOther| serves this purpose. +% \begin{macrocode} +\def\makeOther#1{\catcode`#1=12\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\end} +% \changes{2.0h}{1991/06/19}{Macro added.} For now we want the \ds{} +% program to be compatible with both plain \TeX\ and \LaTeX\@. +% \LaTeX\ hides plain \TeX{}'s |\end| command and +% calls it |\@@end|. We unhide it here. +% \begin{macrocode} +\ifx\undefined\@@end\else\let\end\@@end\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@addto} +% A macro extending macro's definition. The trick with |\csname| +% is necessary to get around |\newtoks| being outer in plain \TeX{} +% and \LaTeX\ version 2.09. +% \begin{macrocode} +\ifx\@temptokena\undefined \csname newtoks\endcsname\@temptokena\fi +% \end{macrocode} +% +% \begin{macrocode} +\def\@addto#1#2{% + \@temptokena\expandafter{#1}% + \edef#1{\the\@temptokena#2}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ifpresent} +% This macro checks if its first argument is present on a +% list passed as the second argument. Depending on the result +% it executes either its third or fourth argument. +% +% \begin{macrocode} +\def\@ifpresent#1#2#3#4{% + \def\tmp##1#1##2\qStop{\ifx!##2!}% + \expandafter\tmp#2#1\qStop #4\else #3\fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tospaces} +% This macro converts its argument delimited with |\secapsot| to +% appropriate number of spaces. We need this for smart displaying +% messages on the screen. +% +% |\@spaces| are used when we need many spaces in a row. +% \begin{macrocode} +\def\tospaces#1{% + \ifx#1\secapsot\secapsot\fi\space\tospaces} +\def\secapsot\fi\space\tospaces{\fi} +\def\@spaces{\space\space\space\space\space} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\uptospace} +% \changes{2.3c}{1995/08/24}{Macro added} +% This macro extracts from its argument delimited with |\qStop| +% part up to first occurence of space. +% \begin{macrocode} +\def\uptospace#1 #2\qStop{#1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\afterfi} +% \changes{2.3c}{1995/09/04}{Macro added} +% This macro can be used in conditionals to perform some actions +% (its first parameter) after the condition is completed (i.e. +% after reading the matching |\fi|. Second parameter is used to +% gobble the rest of |\if ... \fi| construction (some |\else| +% maybe). Note that this won't work in nested |\if|s! +% \begin{macrocode} +\def\afterfi#1#2\fi{\fi#1} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@ifnextchar} +% \changes{2.3e}{1995/09/25}{Macro added} +% This is one of \LaTeX's macros not defined by plain. My +% devious definition differs from the standard one but +% functionality is the same. +% \begin{macrocode} +\def\@ifnextchar#1#2#3{\bgroup + \def\reserved@a{\ifx\reserved@c #1 \aftergroup\@firstoftwo + \else \aftergroup\@secondoftwo\fi\egroup + {#2}{#3}}% + \futurelet\reserved@c\@ifnch + } +\def\@ifnch{\ifx \reserved@c \@sptoken \expandafter\@xifnch + \else \expandafter\reserved@a + \fi} +\def\@firstoftwo#1#2{#1} +\def\@secondoftwo#1#2{#2} +\iden{\let\@sptoken= } % +\iden{\def\@xifnch} {\futurelet\reserved@c\@ifnch} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{The evaluation of boolean expressions} +% +% For clarity we repeat here the syntax for the boolean expressions +% in a somewhat changed but equivalent way: +% +% \DeleteShortVerb\| +% \begin{tabular}{lcl} +% \meta{Expression} & $::=$ & \meta{Secondary} $|$ +% \meta{Secondary} \{\texttt{|}, \texttt{,}\} +% \meta{Expression}\\ +% \meta{Secondary} & $::=$ & \meta{Primary} $|$ +% \meta{Primary} \texttt{\&} +% \meta{Secondary}\\ +% \meta{Primary} & $::=$ & +% \meta{Terminal} $|$ \texttt{!}\meta{Primary} +% $|$ +% \texttt{(}\meta{Expression}\texttt{)}\\ +% \end{tabular} +% +% The \texttt{|} stands for disjunction, the \texttt{\&} stands for +% conjunction and the \texttt{!}\ stands for negation. The +% \meta{Terminal} is any sequence of letters and evaluates to +% \meta{true} iff it occurs in the list of options that have to be +% included. +% \MakeShortVerb\| +% +% Since we can generate multiple output files from one input, +% same guard expressions can be computed several times with +% different options. For that reason we first ``compile'' the +% expression to the form of one parameter macro |\Expr| +% expanding to nested |\if|s that when given current list of +% options produces 1 or 0 as a result. The idea is to say +% |\if1\Expr{|\meta{current set of options}|}...\fi| for all +% output files. +% +% Here is a table recursively defining translations for right +% sides of the grammar. $\tau(X)$ denotes translation of~$X$. +% +% \DeleteShortVerb\| +% \MakeShortVerb\" +% \begingroup +% \addtolength\arraycolsep{-2.1pt} +% \begin{eqnarray*} +% \tau(\meta{Terminal})&=&"\t@<Terminal>,#1,<Terminal>,\qStop"\\ +% \tau(!\meta{Primary})&=&"\if1"\,\tau(\meta{Primary})\,"0\else1\fi"\\ +% \tau(\mbox{\texttt{(}\meta{Expression}\texttt{)}}) +% &=&\tau(\meta{Expression})\\ +% \tau(\mbox{\meta{Primary}\texttt{\&}\meta{Secondary}}) +% &=&"\if0"\,\tau(\meta{Primary})\,"0\else" +% \,\tau(\meta{Secondary})\,"\fi"\\ +% \tau(\mbox{\meta{Secondary}\texttt{|}\meta{Expression}}) +% &=&"\if1"\,\tau(\meta{Secondary})\,"1\else" +% \,\tau(\meta{Expression})\,"\fi" +% \end{eqnarray*} +% \endgroup +% \DeleteShortVerb\" +% \MakeShortVerb\| +% |\t@<Terminal>| denotes macro with name constructed from |t@| +% with appended tokens of terminal. E.g., for terminal |foo| the +% translation would be +%\begin{verbatim} +% \t@foo,#1,foo,\qStop +%\end{verbatim} +% This will end up in definition of |\Expr|, so |#1| here will +% be substituted by current list of options when |\Expr| is +% called. Macro |\t@foo| would be defined as +%\begin{verbatim} +% \def\t@foo#1,foo,#2\qStop{\ifx>#2>0\else1\fi} +%\end{verbatim} +% When called as above this will expand to |1| if |foo| is +% present on current list of options and to |0| otherwise. +% +% Macros below work in ``almost expand-only'' mode i.e. +% expression is analyzed only by expansion but we have to define +% some macros on the way (e.g., |\Expr| and |\t@foo|). +% +% The first parameter of each of these macros is +% ``continuation'' (in the sense similar to the language +% \textsc{Scheme}). Continuation is a function of at least one +% argument (parameter) being the value of previous steps of +% computation. For example macro |\Primary| constructs +% translation of \meta{Primary} expression. When it decides that +% expression is completed it calls its continuation (its first +% argument) passing to it whole constructed translation. +% Continuation may expect more arguments if it wants to see what +% comes next on the input. +% +% We will perform recursive descent parse, but definitions will +% be presented in bottom-up order. +% +% \begin{macro}{\Terminal} +% +% \meta{Terminal}s are recognized by macro |\Terminal|. The +% proper way of calling it is |\Terminal{|\meta{current +% continuation}|}{}|. Parameters are: continuation, +% \meta{Terminal} so far and next character from the input. +% Macro checks if |#3| is one of terminal-ending characters and +% then takes appropriate actions. Since there are 7 ending +% chars and probably one |\csname| costs less than 7 nested +% |\if|s we construct a name and check if it is defined. +% +% We must expand |\ifx| completely before taking next actions so +% we use |\afterfi|. +% \begin{macrocode} +\def\Terminal#1#2#3{% + \expandafter\ifx\csname eT@#3\endcsname\relax +% \end{macrocode} +% If condition is true |#3| belongs to current \meta{Terminal} +% so we append it to \meta{Terminal}-so-far and call |\Terminal| +% again. +% \begin{macrocode} + \afterfi{\Terminal{#1}{#2#3}}\else +% \end{macrocode} +% When condition is false it's time to end the \meta{Terminal} +% so we call macro |\TerminalX|. Next character is reinserted to +% the input. +% +% In both cases continuation is passed unchanged. +% \begin{macrocode} + \afterfi{\TerminalX{#1}{#2}#3}\fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\eT@} +% Here we define macros marking characters that cannot appear +% inside terminal. The value is not important as long as it is +% different from |\relax|. +% \begin{macrocode} +\Name\let{eT@>}=1 +\Name\let{eT@&}=1 \Name\let{eT@!}=1 +\Name\let{eT@|}=1 \Name\let{eT@,}=1 +\Name\let{eT@(}=1 \Name\let{eT@)}=1 +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\TerminalX} +% This macro should end scanning of \meta{Terminal}. Parameters +% are continuation and gathered tokens of \meta{Terminal}. +% +% Macro starts by issuing an error message if \meta{Terminal} is +% empty. +% \begin{macrocode} +\def\TerminalX#1#2{% + \ifx>#2> \errmessage{Error in expression: empty terminal}\fi +% \end{macrocode} +% Then a macro is constructed for checking presence of +% \meta{Terminal} in options list. +% \begin{macrocode} + \Name\def{t@#2}##1,#2,##2\qStop{\ifx>##2>0\else1\fi}% +% \end{macrocode} +% And then current continuation is called with translation of +% \meta{Terminal} according to formula +% $$\tau(\meta{Terminal})=|\t@<Terminal>,#1,<Terminal>,\qStop|$$ +% \begin{macrocode} + #1{\Name\noexpand{t@#2},##1,#2,\noexpand\qStop}% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Primary} +% Parameters are continuation and next character from the input. +% +% According to the syntax \meta{Primari}es can have three forms. +% This makes us use even more dirty tricks than usual. Note the +% |\space| after a series of |\ifx|s. This series produces an +% one digit number of case to be executed. The number is given +% to |\ifcase| and |\space| stops \TeX{} scanning for a +% \meta{number}. Use of |\ifcase| gives possibility to have one +% of three actions selected without placing them in nested +% |\if|s and so to use |\afterfi|. +% \begin{macrocode} +\def\Primary#1#2{% + \ifcase \ifx!#20\else\ifx(#21\else2\fi\fi\space +% \end{macrocode} +% First case is for |!| i.e. negated \meta{Primary}. In this +% case we call |\Primary| recursively but we create new +% continuation: macro |\NPrimary| that will negate result +% passed by |\Primary| and pass it to current continuation +% (|#1|). +% \begin{macrocode} + \afterfi{\Primary{\NPrimary{#1}}}\or +% \end{macrocode} +% When next character is |(| we call |\Expression| giving it as +% continuation macro |\PExpression| which will just pass the +% result up but ensuring first that a |)| comes next. +% \begin{macrocode} + \afterfi{\Expression{\PExpression{#1}}}\or +% \end{macrocode} +% Otherwise we start a \meta{Terminal}. |#2| is not passed as +% \meta{Terminal}-so-far but reinserted to input since we didn't +% check if it can appear in a \meta{Terminal}. +% \begin{macrocode} + \afterfi{\Terminal{#1}{}#2}\fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NPrimary} +% Parameters are continuation and previously computed +% \meta{Primary}. +% +% This macro negates result of previous computations according +% to the rule +% $$\tau(!\meta{Primary}) +% =|\if1|\,\tau(\meta{Primary})\,|0\else1\fi|$$ +% \begin{macrocode} +\def\NPrimary#1#2{% + #1{\noexpand\if1#20\noexpand\else1\noexpand\fi}% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\PExpression} +% Parameters: continuation, \meta{Expression}, next character +% from input. We are checking if character is |)| and then pass +% unchanged result to our continuation. +% \begin{macrocode} +\def\PExpression#1#2#3{% + \ifx)#3\else + \errmessage{Error in expression: expected right parenthesis}\fi + #1{#2}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Secondary} +% Each \meta{Secondary} expression starts with \meta{Primary}. +% Next checks will be performed by |\SecondaryX|. +% \begin{macrocode} +\def\Secondary#1{% + \Primary{\SecondaryX{#1}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\SecondaryX} +% Parameters: continuation, translation of \meta{Primary}, next +% character. We start by checking if next character is |&|. +% \begin{macrocode} +\bgroup\catcode`\&=12 +\gdef\SecondaryX#1#2#3{% + \ifx% +% \end{macrocode} +% If it is we should parse next \meta{Secondary} and then +% combine it with results so far. Note that |\SecondaryXX| will +% have 3 parameters. +% \begin{macrocode} + \afterfi{\Secondary{\SecondaryXX{#1}{#2}}}\else +% \end{macrocode} +% Otherwise \meta{Secondary} turned out to be just +% \meta{Primary}. We call continuation passing to it translation +% of that \meta{Primary} not forgetting to reinsert |#3| to the +% input as it does not belong here. +% \begin{macrocode} + \afterfi{#1{#2}#3}\fi + } +\egroup +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\SecondaryXX} +% Parameters: continuation, translation of \meta{Primary}, +% translation of \meta{Secondary}. We construct translation of +% whole construction according to the rule: +% $$\tau(\mbox{\meta{Primary}\texttt{\&}\meta{Secondary}}) +% =|\if0|\,\tau(\meta{Primary})\,|0\else| +% \,\tau(\meta{Secondary})\,|\fi| $$ +% and pass it to our continuation. +% \begin{macrocode} +\def\SecondaryXX#1#2#3{% + #1{\noexpand\if0#20\noexpand\else#3\noexpand\fi}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Expression} +% Every \meta{Expression} starts with \meta{Secondary}. We +% construct new continuation and pass it to |\Secondary|. +% \begin{macrocode} +\def\Expression#1{% + \Secondary{\ExpressionX{#1}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ExpressionX} +% Parameters: continuation, translation of \meta{Secondary}, +% next character. We perform check if character is +% \texttt{\char`\|} or |,|. +% \begin{macrocode} +\def\ExpressionX#1#2#3{% + \if0\ifx|#31\else\ifx,#31\fi\fi0 +% \end{macrocode} +% If it is not \meta{Expression} is just a \meta{Secondary}. We +% pass its translation to continuation and reinsert |#3|. +% \begin{macrocode} + \afterfi{#1{#2}#3}\else +% \end{macrocode} +% If we are dealing with complex \meta{Expression} we should +% parse another |\Expression| now. +% \begin{macrocode} + \afterfi{\Expression{\ExpressionXX{#1}{#2}}}\fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ExpressionXX} +% Parameters: continuation, translation of \meta{Secondary}, +% translation of \meta{Expression}. +% We finish up translating of \meta{Expression} according to +% the formula: +% $$\tau(\mbox{\meta{Secondary}\texttt{\char`\|}\meta{Expression}}) +% =|\if1|\,\tau(\meta{Secondary})\,|1\else| +% \,\tau(\meta{Expression})\,|\fi|$$ +% \begin{macrocode} +\def\ExpressionXX#1#2#3{% + #1{\noexpand\if1#21\noexpand\else#3\noexpand\fi}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\StopParse} +% Here is initial continuation for whole parse process. It will +% be used by |\Evaluate|. Note that we assume that expression +% has |>| on its end. This macro eventually defines |\Expr|. +% Parameters: translation of whole \meta{Expression} and next +% character from input. +% \begin{macrocode} +\def\StopParse#1#2{% + \ifx>#2 \else\errmessage{Error in expression: spurious #2}\fi + \edef\Expr##1{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Evaluate} +% This macro is used to start parsing. We call |\Expression| +% with continuation defined above. On end of expression we +% append a |>|. +% \begin{macrocode} +\def\Evaluate#1{% + \Expression\StopParse#1>} +% \end{macrocode} +% \end{macro} +% +% \subsection{Processing the input lines} +% +% \begin{macro}{\normalLine} +% The macro |\normalLine| writes its argument (which has to be +% delimited with |\endLine|) on all active output files i.e. +% those with off-counters equal to zero. +% If statistics are included, the counter +% |\codeLinesPassed| is incremented by $1$. +% \begin{macrocode} +\def\normalLine#1\endLine{% +%<*stats> + \advance\codeLinesPassed\@ne +%</stats> + \maybeMsg{.}% + \def\inLine{#1}% + \let\do\putline@do + \activefiles + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\putline@do} +% \changes{2.3b}{1995/08/22}{Change for pre-constructed +% off-counters' names} +% This is a value for |\do| when copying line to output files. +% \begin{macrocode} +\def\putline@do#1#2#3{% + \StreamPut#1{\inLine}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\removeComment} +% The macro |\removeComment| throws its argument (which has to be +% delimited with |\endLine|) away. When statistics are included +% in the program the removed comment is counted. +% \begin{macrocode} +% +\def\removeComment#1\endLine{% +%<*stats> + \advance\commentsRemoved\@ne +%</stats> + \maybeMsg{\perCent}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\putMetaComment} +% \changes{2.3e}{1996/09/16}{Introduced \cs{MetaPrefix}} +% If a line starts with two consecutive percent signs, it is +% considered to be a {\em MetaComment\/}. Such a comment line is +% passed on to the output file unmodified. +% \begin{macrocode} +\bgroup\catcode`\%=12 +\iden{\egroup +\def\putMetaComment%}#1\endLine{% +% \end{macrocode} +% If statistics are included the line is counted. +% \begin{macrocode} +%<*stats> + \advance\commentsPassed\@ne +%</stats> +% \end{macrocode} +% The macro |\putMetaComment| has one argument, delimited with +% |\endLine|. It brings the source line with |%%| stripped. We +% prepend to it |\MetaPrefix| (which can be different from |%%|) +% and send the line to all active files. +% \begin{macrocode} + \edef\inLine{\MetaPrefix#1}% + \let\do\putline@do + \activefiles + } +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\processLine} +% \changes{2.3a}{1995/08/18}{Adaptation for concurrent version} +% \changes{2.3a}{1995/08/20}{Trying to avoid assignments} +% Each line that is read from the input stream has to be processed +% to see if it has to be written on the output stream. This task +% is performed by calling the macro |\processLine|. +% In order to do +% that, it needs to check whether the line starts with a +% `\texttt{\%}'. Therefore the macro is globally defined within a +% group. Within this group the category code of `\texttt{\%}' is +% changed to 12 (other). Because a comment character is needed, +% the category code of `\texttt{*}' is changed to 14 (comment +% character). +% +% The macro increments counter |\processedLines| by $1$ if +% statistics are included. We cannot include this line with +% |%<*stats>| since the category of \texttt{\%} is changed and the +% file must be loadable unstripped. So the whole definition is +% repeated embedded in guards. +% +% The next token from the input stream is passed in |#1|. If it is +% a `\texttt{\%}' further processing has to be done by +% |\processLineX|; otherwise this is normal (not commented out) +% line. +% +% In either case the character read is reinserted to the input +% as it may have to be written out. +% +% \begin{macrocode} +%<*!stats> +\begingroup +\catcode`\%=12 \catcode`\*=14 +\gdef\processLine#1{* + \ifx%#1 + \expandafter\processLineX + \else + \expandafter\normalLine + \fi + #1} +\endgroup +%</!stats> +%<*stats> +\begingroup +\catcode`\%=12 \catcode`\*=14 +\gdef\processLine#1{* + \advance\processedLines\@ne + \ifx%#1 + \expandafter\processLineX + \else + \expandafter\normalLine + \fi + #1} +\endgroup +%</stats> +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\processLineX} +% \changes{2.3a}{1995/08/20}{Trying to avoid assignments} +% This macro is also defined within a group, +% because it also has to check if the next +% token in the input stream is a `\texttt{\%}' character. +% +% If the second token in the current line happens to be a +% `\texttt{\%}', a \meta{MetaComment} has been found. This has to +% be copied in its entirety to the output. Another possible second +% character is `\texttt{<}', which introduces a guard expression. +% The processing of such an expression is started by calling +% |\checkOption|. +% +% When the token was neither a `\texttt{\%}' nor a `\texttt{<}', +% the line contains a normal comment that has to be removed. +% +% We express conditions in such a way that all actions appear +% on first nesting level of |\if|s. In such conditions just one +% expandafter pushes us outside whole construction. A thing to +% watch here is |\relax|. It stops search for numeric constant. +% If it wasn't here \TeX\ would expand the first case of |\ifcase| +% before knowing the value. +% +% \begin{macrocode} +\begingroup +\catcode`\%=12 \catcode`\*=14 +\gdef\processLineX%#1{* + \ifcase\ifx%#10\else + \ifx<#11\else 2\fi\fi\relax + \expandafter\putMetaComment\or + \expandafter\checkOption\or + \expandafter\removeComment\fi + #1} +\endgroup +% \end{macrocode} +% \end{macro} +% +% \subsection{The handling of options} +% +% \begin{macro}{\checkOption} +% \changes{2.3a}{1995/08/18}{Adapted to concurrent version} +% \changes{2.3a}{1995/08/20}{Trying to avoid assignments} +% \changes{2.3e}{1996/09/16}{Verbatim mode} +% When the macros that process a line have found that the line +% starts with `\texttt{\%<}', a guard line has been encountered. +% The first character of a guard can be an asterisk (\texttt{*}), a +% slash (\texttt{/}) a plus (\texttt{+}), a minus (\texttt{-}), a +% less-than sign (\texttt{<}) starting verbatim mode or +% any other character that can be found in an option name. This +% means that we have to peek at the next token and +% decide what kind of guard we have. +% +% We reinsert |#1| as it may be needed by |\doOption|. +% \begin{macrocode} +\def\checkOption<#1{% + \ifcase + \ifx*#10\else \ifx/#11\else + \ifx+#12\else \ifx-#13\else + \ifx<#14\else 5\fi\fi\fi\fi\fi\relax + \expandafter\starOption\or + \expandafter\slashOption\or + \expandafter\plusOption\or + \expandafter\minusOption\or + \expandafter\verbOption\or + \expandafter\doOption\fi + #1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\doOption} +% When no guard modifier is found by |\checkOptions|, the +% macro |\doOption| is called. It evaluates a boolean +% expression. The result of this evaluation is stored in +% |\Expr|. The guard only affects the current +% line, so |\do| is defined in such a way that depending on the +% result of the test |\if1\Expr{|\meta{options}|}|, the current +% line is either copied to the output stream or removed. Then +% the test is computed for all active output files. +% \begin{macrocode} +\def\doOption#1>#2\endLine{% + \maybeMsg{<#1 . >}% + \Evaluate{#1}% + \def\do##1##2##3{% + \if1\Expr{##2}\StreamPut##1{#2}\fi + }% + \activefiles + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\plusOption} +% When a `\texttt{+}' is found as a guard modifier, +% |\plusOption| is called. This macro is very similar to +% |\doOption|, the only difference being that displayed +% message now contains `\texttt{+}'. +% \begin{macrocode} +\def\plusOption+#1>#2\endLine{% + \maybeMsg{<+#1 . >}% + \Evaluate{#1}% + \def\do##1##2##3{% + \if1\Expr{##2}\StreamPut##1{#2}\fi + }% + \activefiles + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\minusOption} +% When a `\texttt{-}' is found as a guard modifier, +% |\minusOption| is called. This macro is very similar to +% |\plusOption|, the difference is that condition is negated. +% \begin{macrocode} +\def\minusOption-#1>#2\endLine{% + \maybeMsg{<-#1 . >}% + \Evaluate{#1}% + \def\do##1##2##3{% + \if1\Expr{##2}\else \StreamPut##1{#2}\fi + }% + \activefiles + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\starOption} +% \changes{2.3a}{1995/08/18}{Adapted to concurrent version} +% When a `\texttt{*}' is found as a guard modifier, +% |\starOption| is called. In this case a block of code will +% be included in the output on the condition that the guard +% expression evaluates to \meta{true}. +% +% The current line is gobbled as |#2|, because it only contains +% the guard and possibly a comment. +% +% \begin{macrocode} +\def\starOption*#1>#2\endLine{% +% \end{macrocode} +% First we optionally write +% a message to the terminal to indicate that a new option starts +% here. +% \begin{macrocode} + \maybeMsg{<*#1}% +% \end{macrocode} +% Then we push the current contents of |\blockHead| on the +% stack of blocks, |\guardStack| and increment the counter +% |\blockLevel| to indicate that we are now one level of +% nesting deeper. +% \changes{2.0k}{1992/04/06}{Use new stack mechanism} +% \changes{2.0k}{1992/04/09}{The macro that holds the guard needs to be +% expanded} +% \begin{macrocode} + \expandafter\push\expandafter\guardStack\expandafter{\blockHead}% + \advance\blockLevel\@ne +% \end{macrocode} +% The guard for this block of code is now stored in +% |\blockHead|. +% \begin{macrocode} + \def\blockHead{#1}% +% \end{macrocode} +% Now we evaluate guard expression for all output files +% updating off-counters. Then we create new list of active +% output files. Only files that were active in the outer block +% can remain active now. +% \begin{macrocode} + \Evaluate{#1}% + \let\do\checkguard@do + \outputfiles + \let\do\findactive@do + \edef\activefiles{\activefiles} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\checkguard@do} +% \changes{2.3b}{1995/08/22}{Change for pre-constructed +% off-counters' names} +% This form of |\do| updates off-counts according to the value of +% guard expression. +% \begin{macrocode} +\def\checkguard@do#1#2#3{% +% \end{macrocode} +% If this block of code occurs inside another block of code that is +% {\em not\/} included in the output, we increment the off counter. +% In that case the guard expression will not be +% evaluated, because a block inside another block that is excluded +% from the output will also be excluded, regardless of the +% evaluation of its guard. +% \begin{macrocode} + \ifnum#3>0 + \advance#3\@ne +% \end{macrocode} +% When the off count has value 0, we have +% to evaluate the guard expression. If the result is \meta{false} +% we increase the off-counter. +% \begin{macrocode} + \else + \if1\Expr{#2}\else + \advance#3\@ne\fi + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\findactive@do} +% \changes{2.3b}{1995/08/22}{Change for pre-constructed +% off-counters' names} +% This form of |\do| picks elements of output files list which +% have off-counters equal to zero. +% \begin{macrocode} +\def\findactive@do#1#2#3{% + \ifnum#3=0 + \noexpand\do#1{#2}#3\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\slashOption} +% \changes{2.3a}{1995/08/18}{Adapted for concurrent version} +% The macro |\slashOption| is the counterpart to +% |\starOption|. It indicates the end of a block of +% conditionally included code. We store the argument in the +% temporary control sequence |\tmp|. +% \begin{macrocode} +\def\slashOption/#1>#2\endLine{% + \def\tmp{#1}% +% \end{macrocode} +% When the counter |\blockLevel| has a value less than $1$, +% this `end-of-block' line has no corresponding `start-of-block'. +% Therefore we signal an error and ignore this end of block. +% \begin{macrocode} + \ifnum\blockLevel<\@ne + \errmessage{Spurious end block </\tmp> ignored}% +% \end{macrocode} +% Next we compare the contents of |\tmp| with the contents +% of |\blockHead|. The latter macro contains the last guard for +% a block of code that was encountered. If the contents match, we +% pop the previous guard from the stack. +% \changes{2.0k}{1992/04/06}{Use new stack mechanism} +% \begin{macrocode} + \else + \ifx\tmp\blockHead + \pop\guardStack\blockHead +% \end{macrocode} +% When the contents of the two macros don't match something is +% amiss. We signal this to the user, but accept the `end-of-block'. +%\note{Is this the desired behaviour??} +% \begin{macrocode} + \else + \errmessage{Found </\tmp> instead of </\blockHead>}% + \fi +% \end{macrocode} +% When the end of a block of optionally included code is encountered +% we optionally signal this on the terminal and decrement the counter +% |\blockLevel|. +% \begin{macrocode} + \maybeMsg{>}% + \advance\blockLevel\m@ne +% \end{macrocode} +% The last thing that has to be done is to decrement off-counters and +% make new list of active files. Now whole list of output files has +% to be searched since some inactive files could have been +% reactivated. +% \begin{macrocode} + \let\do\closeguard@do + \outputfiles + \let\do\findactive@do + \edef\activefiles{\outputfiles} + \fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\closeguard@do} +% \changes{2.3b}{1995/08/22}{Change for pre-constructed +% off-counters' names} +% This macro decrements non-zero off-counters. +% \begin{macrocode} +\def\closeguard@do#1#2#3{% + \ifnum#3>0 + \advance#3\m@ne + \fi} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\verbOption} +% \changes{2.3e}{1996/09/16}{Macro added} +% \changes{2.4g}{1996/12/13}{Reset \cs{putline@do} for /2340} +% This macro is called when a line starts with |%<<|. It reads a +% bunch of lines in verbatim mode: the lines are passed unchanged +% to the output without even checking for starting |%|. This way of +% processing ends when a line containing only a percent sign +% followed by stop mark given on the |%<<| line is found. +% \begin{macrocode} +\def\verbOption<#1\endLine{{% + \edef\verbStop{\perCent#1}\maybeMsg{<<<}% + \let\do\putline@do + \loop + \ifeof\inFile\errmessage{Source file ended while in verbatim + mode!}\fi + \read\inFile to \inLine + \if 1\ifx\inLine\verbStop 0\fi 1% if not inLine==verbStop + \activefiles + \maybeMsg{.}% + \repeat + \maybeMsg{>}% + }} +% \end{macrocode} +% \end{macro} +% +% \subsection{Batchfile commands} +% \changes{2.3e}{1996/10/02}{Added doc} +% \ds{} keeps information needed to control inclusion of sources in +% several list structures. Lists are macros expanding to a series +% of calls to macro |\do| with two or three parameters. +% Subsequently |\do| is redefined in various ways and list +% macros sometimes are executed to perform some action on every +% element, and sometimes are used inside an |\edef| to make new +% list of elements having some properties. For every input file +% \meta{infile} the following lists are kept: +% \begin{itemize} +% \item[\cs{b@}\meta{infile}] the ``open list''---names of all output +% files such that their generation should start with +% reading of \meta{infile}, +% \item[\cs{o@}\meta{infile}] the ``output list''---names of all +% output files generated from that source together with +% suitable sets of options (guards), +% \item[\cs{e@}\meta{infile}] the ``close list''---names of all +% output files that should be closed when this source is +% read. +% \end{itemize} +% +% For every output file name \meta{outfile} \ds{} keeps following +% information: +% \begin{itemize} +% \item[\cs{pth@}\meta{outfile}] full pathname (including file name), +% \item[\cs{ref@}\meta{outfile}] reference lines for the file, +% \item[\cs{in@}\meta{outfile}] names of all source files separated +% with spaces (needed by \cs{InFileName}), +% \item[\cs{pre@}\meta{outfile}] preamble template (as defined with +% |\declarepreamble|), +% \item[\cs{post@}\meta{outfile}] postamble template. +% \end{itemize} +% +% \begin{macro}{\generate} +% \changes{2.3a}{1995/08/20}{Messages changed} +% \changes{2.4a}{1996/06/06}{Repeat processing of files until all +% done (MDW)} +% This macro executes its argument in a group. |\inputfiles| is +% a list of files to be read, |\filestogenerate| list of names +% of output files (needed for the message below). |\file|s +% contained in |#1| define |\inputfiles| in such a way that all +% that has to be done when the parameter is executed is to call +% this macro. |\inputfiles| command is called over and over again +% until no output files had to be postponed. +% \begin{macrocode} +\def\generate#1{\begingroup + \let\inputfiles\empty \let\filestogenerate\empty + \let\file\@file + #1 + \ifx\filestogenerate\empty\else + \Msg{^^JGenerating file(s) \filestogenerate}\fi + \def\inFileName{\csname in@\outFileName\endcsname}% + \def\ReferenceLines{\csname ref@\outFileName\endcsname}% + \processinputfiles + \endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\processinputfiles} +% \changes{2.4a}{1996/10/02}{Macro added (MW)} +% This is a recurrent function which processes input files until +% they are all gone. +% \begin{macrocode} +\def\processinputfiles{% + \let\newinputfiles\empty + \inputfiles + \let\inputfiles\newinputfiles + \ifx\inputfiles\empty\else + \expandafter\processinputfiles + \fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\file} +% The first argument is the file to produce, the second +% argument contains the list of input files. Each entry should have +% the format +% \verb=\from{=\meta{filename.ext}\verb=}{=\meta{options}\verb=}=. +% +% \changes{2.3a}{1995/08/20}{Messages changed} +% ^^A The macro starts by displaying a message on the terminal to +% ^^A indicate which file is going to be made. +% The switch |\ifGenerate| is initially set to \meta{true}. +% \begin{macrocode} +\def\file#1#2{\errmessage{Command `\string\file' only allowed in + argument to `\string\generate'}} +\def\@file#1{% + \Generatetrue +% \end{macrocode} +% Next we construct full path name for output file and check if we +% have to be careful about overwriting existing files. If the user +% specified |\askforoverwritetrue| we will ask him if he wants to +% overwrite an existing file. Otherwise we simply go ahead. +% \begin{macrocode} + \makepathname{#1}% + \ifaskforoverwrite +% \end{macrocode} +% We try to open a file with the name of the output file for +% reading. If this succeeds the file exists and we ask the user if +% he wants to overwrite the file. +% \changes{2.0p}{1992/06/26}{Added \cs{WriteToDir} (FMi).} +% \changes{2.3a}{1995/08/18}{Changed \cs{@empty} (which was undefined) +% to \cs{empty}} +% \changes{2.3e}{1995/09/25}{Changed \cs{WriteToDir} to \cs{destdir}} +% \begin{macrocode} + \immediate\openin\inFile\@pathname\relax + \ifeof\inFile\else + \Ask\answer{File \@pathname\space already exists + \ifx\empty\destdir somewhere \fi + on the system.^^J% + Overwrite it% + \ifx\empty\destdir\space if necessary\fi + ? [y/n]}% +% \end{macrocode} +% We set the switch |\ifGenerate| according to his answer. We +% allow for both ``\texttt{y}'' and ``\texttt{yes}''. +% \begin{macrocode} + \ifx\y \answer \else + \ifx\yes\answer \else + \Generatefalse\fi\fi\fi +% \end{macrocode} +% Don't forget to close the file just opened as we want to write +% to it. +% \begin{macrocode} + \closein\inFile + \fi +% \end{macrocode} +% \changes{2.3e}{1995/09/25}{Destination directory handling} +% If file is to be generated we save its destination pathname and +% pass control to macro |\@fileX|. +% Note that file name is turned into control sequence and |\else| +% branch is skipped before calling |\@fileX|. +% \begin{macrocode} + \ifGenerate + \Name\let{pth@#1}\@pathname + \@addto\filestogenerate{\@pathname\space}% + \Name\@fileX{#1\expandafter}% + \else +% \end{macrocode} +% In case we were not allowed to overwrite an existing file +% we inform the user that we are {\em not\/} generating his file +% and we gobble |\from| specifications. +% \begin{macrocode} + \Msg{Not generating file \@pathname^^J}% + \expandafter\@gobble + \fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@fileX} +% We put name of current output file in |\curout| and initialize +% |\curinfiles| (the list of source files for this output file) +% to empty---these will be needed by |\from|. Then we start +% defining preamble for the current file. +% \begin{macrocode} +\def\@fileX#1#2{% + \chardef#1=\stream@closed + \def\curout{#1}% + \let\curinfiles\empty + \let\curinnames\empty + \def\curref{\MetaPrefix ^^J% + \MetaPrefix\space The original source files were:^^J% + \MetaPrefix ^^J}% +% \end{macrocode} +% Next we execute second parameter. |\from|s will add reference +% lines to the preamble. +% \begin{macrocode} + \let\from\@from \let\needed\@needed + #2% + \let\from\err@from \let\needed\err@needed +% \end{macrocode} +% We check order of input files. +% \begin{macrocode} + \checkorder +% \end{macrocode} +% Each |\from| clause defines |\curin| to be its first parameter. +% So now |\curin| holds name of last input file for current output +% file. This means that current output file should be closed after +% processing |\curin|. We add |#1| to proper `close list'. +% \begin{macrocode} + \Name\@addto{e@\curin}{\noexpand\closeoutput{#1}}% +% \end{macrocode} +% Last we save all the interesting information about current file. +% \begin{macrocode} + \Name\let{pre@\@stripstring#1\expandafter}\currentpreamble + \Name\let{post@\@stripstring#1\expandafter}\currentpostamble + \Name\edef{in@\@stripstring#1}{\expandafter\iden\curinnames} + \Name\edef{ref@\@stripstring#1}{\curref} + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\checkorder} +% This macro checks if the order of files in |\curinfiles| +% agrees with that of |\inputfiles|. The coding is somewhat +% clumsy. +% \begin{macrocode} +\def\checkorder{% + \expandafter\expandafter\expandafter + \checkorderX\expandafter\curinfiles + \expandafter\qStop\inputfiles\qStop + } +\def\checkorderX(#1)#2\qStop#3\qStop{% + \def\tmp##1\readsource(#1)##2\qStop{% + \ifx!##2! \order@error + \else\ifx!#2!\else + \checkorderXX##2% + \fi\fi}% + \def\checkorderXX##1\readsource(#1)\fi\fi{\fi\fi + \checkorderX#2\qStop##1\qStop}% + \tmp#3\readsource(#1)\qStop + } +\def\order@error#1\fi\fi{\fi + \errmessage{DOCSTRIP error: Incompatible order of input + files specified for file + `\iden{\expandafter\uptospace\curin} \qStop'.^^J + Read DOCSTRIP documentation for explanation.^^J + This is a serious problem, I'm exiting}\end + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\needed} +% \changes{2.3c}{1995/08/24}{Macro added} +% \changes{2.3e}{1996/09/12}{Forced expansion of argument to fix a bug +% with filenames containing macros} +% \begin{macro}{\@needed} +% This macro uniquizes name of an input file passed as a +% parameter and marks it as needed to be input. It is used +% internally by |\from|, but can also be issued in argument to +% |\file| to influence the order in which files are read. +% \begin{macrocode} +\def\needed#1{\errmessage{\string\needed\space can only be used in + argument to \string\file}} +\let\err@needed\needed +\def\@needed#1{% + \edef\reserved@a{#1}% + \expandafter\@need@d\expandafter{\reserved@a}} +\def\@need@d#1{% + \@ifpresent{(#1)}\curinfiles +% \end{macrocode} +% If |#1| is present on list of input files for current output +% file we add a space on end of its name and try again. The idea +% is to construct a name that will look different for \TeX\ but +% will lead to the same file when seen by operating system. +% \begin{macrocode} + {\@need@d{#1 }}% +% \end{macrocode} +% When it is not we check if |#1| is present in the list of +% files to be processed. If not we add it and initialize list of +% output files for that input and list of output files that +% should be closed when this file closes. We also add +% constructed name to |\curinfiles| and define |\curin| to be +% able to access constructed name from |\@from|. +% \begin{macrocode} + {\@ifpresent{\readsource(#1)}\inputfiles + {}{\@addto\inputfiles{\noexpand\readsource(#1)}% + \Name\let{b@#1}\empty + \Name\let{o@#1}\empty + \Name\let{e@#1}\empty}% + \@addto\curinfiles{(#1)}% + \def\curin{#1}}% + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\from} +% \changes{2.3c}{1995/08/24}{part of code moved to \cs{needed}} +% |\from| starts by adding a line to preamble for output file. +% \begin{macrocode} +\def\from#1#2{\errmessage{Command `\string\from' only allowed in + argument to `\string\file'}} +\let\err@from\from +\def\@from#1#2{% + \@addto\curref{\MetaPrefix\space #1 \if>#2>\else + \space (with options: `#2')\fi^^J}% +% \end{macrocode} +% Then we mark the file as needed input file. +% \begin{macrocode} + \needed{#1}% +% \end{macrocode} +% \changes{2.3e}{1996/10/02}{Introduced ``open list''} +% If this is the first |\from| in current |\file| (i.e. if the +% |\curinnames| so far is empty) the file name is added to the +% ``open list'' for the current input file. +% And |\do|\meta{current output}|{|\meta{options}|}| is appended +% to the list of output files for current input file. +% \begin{macrocode} + \ifx\curinnames\empty + \Name\@addto{b@\curin}{\noexpand\openoutput\curout}% + \fi + \@addto\curinnames{ #1}% + \Name\@addto{o@\curin}{\noexpand\do\curout{#2}}% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\readsource} +% \changes{2.4a}{1996/06/06}{Extensively hacked to honour stream +% limits (MDW)} +% \changes{2.3a}{1995/08/18}{Renamed to \cs{readsource}; adaptation for +% concurrent version} +% \changes{2.0f}{1991/06/04}{Added check for lines with \texttt{\bsl +% endinput}} This macro is called for each input file that +% is to be processed. +% +% \begin{macrocode} +\def\readsource(#1){% +% \end{macrocode} +% We try to open the input file. If this doesn't succeed, we +% tell the user so and nothing else happens. +% \begin{macrocode} + \immediate\openin\inFile\uptospace#1 \qStop\relax + \ifeof\inFile + \errmessage{Cannot find file \uptospace#1 \qStop}% + \else +% \end{macrocode} +% If statistics are included we nullify line counters +% \begin{macrocode} +%<*stats> + \processedLines\z@ + \commentsRemoved\z@ + \commentsPassed\z@ + \codeLinesPassed\z@ +%</stats> +% \end{macrocode} +% \changes{2.3b}{1995/08/22}{Change for pre-constructed +% off-counters' names} +% \changes{2.3e}{1996/10/02}{Introduced ``open list''} +% When the input file was successfully opened, we try to open all +% needed output files by executing the ``open list''. +% If any of files couldn't be opened because of number of streams +% limits, their names are put into |\refusedfiles| list. This list +% subsequently becomes the open list for the next pass. +% \begin{macrocode} + \let\refusedfiles\empty + \csname b@#1\endcsname + \Name\let{b@#1}\refusedfiles +% \end{macrocode} +% Now all output files that could be opened are open. So we go +% through the ``output list'' and for every open file we display a +% message and zero the off-counter, while closed files are appended +% to |\refusedfiles|. +% \begin{macrocode} + \Msg{} \def\@msg{Processing file \uptospace#1 \qStop} + \def\change@msg{% + \edef\@msg{\@spaces\@spaces\@spaces\space + \expandafter\tospaces\uptospace#1 \qStop\secapsot} + \let\change@msg\relax} + \let\do\showfiles@do + \let\refusedfiles\empty + \csname o@#1\endcsname +% \end{macrocode} +% If |\refusedfiles| is nonempty current source file needs reread, +% so we append it to |\newinputfiles|. +% \begin{macrocode} + \ifx\refusedfiles\empty\else + \@addto\newinputfiles{\noexpand\readsource(#1)} + \fi +% \end{macrocode} +% Finally we define |\outputfiles| and construct off-counters +% names. Now |\do|s will have 3 parameters! All output files become +% active. +% \begin{macrocode} + \let\do\makeoutlist@do + \edef\outputfiles{\csname o@#1\endcsname}% + \let\activefiles\outputfiles + \Name\let{o@#1}\refusedfiles +% \end{macrocode} +% Now we change the category code of a lot of characters to +% \meta{other} and make sure that no extra spaces appear in the +% lines read by setting the |\endlinechar| to $-1$. +% \begin{macrocode} + \makeOther\ \makeOther\\\makeOther\$% + \makeOther\#\makeOther\^\makeOther\^^K% + \makeOther\_\makeOther\^^A\makeOther\%% + \makeOther\~\makeOther\{\makeOther\}\makeOther\&% + \endlinechar-1\relax +% \end{macrocode} +% Then we start a loop to process the lines in the file one by one. +% \begin{macrocode} + \loop + \read\inFile to\inLine +% \end{macrocode} +% The first thing we check is whether the current line +% contains an |\endinput|. To allow also real |\endinput| +% commands in the source file, |\endinput| is only recognized +% when it occurs directly at the beginning of a line. +% \begin{macrocode} + \ifx\inLine\Endinput +% \end{macrocode} +% In this case we output a message to inform the programmer (in +% case this was a mistake) and end the loop immediately by setting +% \verb=Continue= to \meta{false}. Note that |\endinput| is +% not placed into the output file. This is important in cases where +% the output file is generated from several \texttt{doc} files. +% \begin{macrocode} + \Msg{File #1 ended by \string\endinput.}% + \Continuefalse + \else +% \end{macrocode} +% \changes{2.0j}{1992/03/03}{First check for end of file before check +% for empty lines} When the end of the file is found we have to +% interrupt the loop. +% \begin{macrocode} + \ifeof\inFile + \Continuefalse +% \end{macrocode} +% \changes{2.0i}{1991/06/27}{Added check for consecutive empty lines} +% If the file did not end we check if the input line is empty. +% If it is, the counter |\emptyLines| is incremented. +% \begin{macrocode} + \else + \Continuetrue + \ifx\inLine\empty + \advance\emptyLines\@ne + \else + \emptyLines\z@ + \fi +% \end{macrocode} +% When the number of empty lines seen so far exceeds 1, we skip them. +% If it doesn't, the expansion of |\inLine| is fed to |\processLine| +% with |\endLine| appended to indicate the end of the line. +% \begin{macrocode} + \ifnum \emptyLines<2 + \expandafter\processLine\inLine\endLine + \else + \maybeMsg{/}% + \fi + \fi + \fi +% \end{macrocode} +% When the processing of the line is finished, we check if there is +% more to do, in which case we repeat the loop. +% \begin{macrocode} + \ifContinue + \repeat +% \end{macrocode} +% The input file is closed. +% \begin{macrocode} + \closein\inFile +% \end{macrocode} +% We close output files for which this was the last input file. +% \begin{macrocode} + \csname e@#1\endcsname +% \end{macrocode} +% If the user was interested in statistics, we inform him of the +% number of lines processed, the number of comments that were +% either removed or passed and the number of codelines that were +% written to the output file. Also the totals are updated. +% \begin{macrocode} +%<*stats> + \Msg{Lines \space processed: \the\processedLines^^J% + Comments removed: \the\commentsRemoved^^J% + Comments \space passed: \the\commentsPassed^^J% + Codelines passed: \the\codeLinesPassed^^J}% + \global\advance\TotalprocessedLines by \processedLines + \global\advance\TotalcommentsRemoved by \commentsRemoved + \global\advance\TotalcommentsPassed by \commentsPassed + \global\advance\TotalcodeLinesPassed by \codeLinesPassed +%</stats> +% \end{macrocode} +% The |\NumberOfFiles| need to be known even if no statistics are +% gathered so we update it always. +% \changes{2.4h}{1997/07/07}{update \cs{NumberOfFiles} even if stats are +% not gathered pr/2429} +% \begin{macrocode} + \global\advance\NumberOfFiles by \@ne + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\showfiles@do} +% \changes{2.4a}{1996/10/02}{Macro added (MW)} +% A message is displayed on the terminal telling the user what we +% are about to do. For each open output file we display one line +% saying what options it is generated with and the off-counter +% associated with the file is zeroed. First line contains also name +% of input file. +% Names of output files that are closed are appended to +% |\refusedfiles|. +% \begin{macrocode} +\def\showfiles@do#1#2{% + \ifnum#1=\stream@closed + \@addto\refusedfiles{\noexpand\do#1{#2}}% + \else + \Msg{\@msg + \ifx>#2>\else\space(#2)\fi + \space -> \@stripstring#1} + \change@msg + \csname off@\number#1\endcsname=\z@ + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\makeoutlist@do} +% \changes{2.3b}{1995/08/22}{Macro added --- pre-constructed +% off-counters' names} +% This macro selects only open output files and constructs names for +% off-counters. +% \begin{macrocode} +\def\makeoutlist@do#1#2{% + \ifnum#1=\stream@closed\else + \noexpand\do#1{#2}\csname off@\number#1\endcsname + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\openoutput} +% \changes{2.3e}{1996/10/02}{Change for ``open lists'' -- renamed from +% \cs{ensureopen@do}} +% \changes{2.4a}{1996/06/06}{Check whether there are streams left (MDW)} +% This macro opens output streams if possible. +% \begin{macrocode} +\def\openoutput#1{% +% \end{macrocode} +% If both maxfile counters are non-zero\dots +% \begin{macrocode} + \if 1\ifnum\@maxfiles=\z@ 0\fi + \ifnum\@maxoutfiles=\z@ 0\fi1% +% \end{macrocode} +% \dots the stream may be opened and counters decremented. But if +% that cannot be done\dots +% \begin{macrocode} + \advance\@maxfiles\m@ne + \advance\@maxoutfiles\m@ne + \StreamOpen#1% + \WritePreamble#1% + \else +% \end{macrocode} +% \dots the file is added to the ``refuse list''. +% \begin{macrocode} + \@addto\refusedfiles{\noexpand\openoutput#1}% + \fi + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\closeoutput} +% \changes{2.4a}{1996/06/06} +% {Don't close the file if it's not open (MDW)} +% This macro closes open output stream when it is no longer +% needed and increments maxfiles counters. +% \begin{macrocode} +\def\closeoutput#1{% + \ifnum#1=\stream@closed\else + \WritePostamble#1% + \StreamClose#1% + \advance\@maxfiles\@ne + \advance\@maxoutfiles\@ne + \fi} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Preamble and postamble} +% +% \begin{macro}{\ds@heading} +% \changes{2.3e}{1996/09/16}{Macro added.} +% This is a couple of lines, stating what file is being written and +% how it was created. +% \begin{macrocode} +\def\ds@heading{% + \MetaPrefix ^^J% + \MetaPrefix\space This is file `\outFileName',^^J% + \MetaPrefix\space generated with the docstrip utility.^^J% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\AddGenerationDate} +% \changes{2.3d}{1995/11/17}{(DPC) Macro added.} +% Older versions of \ds{} added the date that any file was generated +% and the version number of \ds{}. This confused some people as they +% mistook this for the version/date of the file that was being +% written. So now this information is not normally written, but +% a batch file may call this to get an old style header. +% \begin{macrocode} +\def\AddGenerationDate{% + \def\ds@heading{% + \MetaPrefix ^^J% + \MetaPrefix\space This is file `\outFileName', generated % + on <\the\year/\the\month/\the\day> ^^J% + \MetaPrefix\space with the docstrip utility (\fileversion).^^J% + }} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\declarepreamble} +% \changes{2.3a}{1995/08/18}{renamed from \cs{preamble}; +% interface changed} +% \changes{2.0e}{1991/06/01}{Macro added.} +% \changes{2.3e}{1995/09/25} +% {Change for batchfiles working by \cs{input}} +% \changes{2.3e}{1996/09/16}{Change to allow customization.} +% When a batch file is used the +% user can specify a preamble of his own that will be written to +% each file that is created. This can be useful to include an extra +% copyright notice in the stripped version of a file. Also a +% warning that both versions of a file should {\em always\/} be +% distributed together could be written to a stripped file by +% including it in such a preamble. +% +% Every line that is written to |\outFile| that belongs to the +% preamble is preceded by two percent characters. This will prevent +% \ds{} from stripping these lines off the file. +% +% The preamble should be started with the macro +% |\declarepreamble|; it is ended by |\endpreamble|. All +% processing is done within a group in order to be able to locally +% change some values. +% +% |\ReferenceLines| is let equal |\relax| to be unexpandable. +% \begin{macrocode} +\let\inFileName\relax +\let\outFileName\relax +\let\ReferenceLines\relax +\def\declarepreamble{\begingroup +\catcode`\^^M=13 \catcode`\ =12 % +\declarepreambleX} +{\catcode`\^^M=13 % +\gdef\declarepreambleX#1#2 +\endpreamble{\endgroup% + \def^^M{^^J\MetaPrefix\space}% + \edef#1{\ds@heading% + \ReferenceLines% + \MetaPrefix\space\checkeoln#2\empty}}% +\gdef\checkeoln#1{\ifx^^M#1\else\expandafter#1\fi}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\declarepostamble} +% \changes{2.0e}{1991/06/01}{Macro added.} +% \changes{2.3e}{1995/09/25} +% {Change for batchfiles working by \cs{input}} +% Just as a preamble can be +% specified in a batch file, the same can be done for a {\em +% post\/}amble. +% +% The definition of |\declarepostamble| is very much like the +% definition above of |\declarepreamble|. +% \begin{macrocode} +\def\declarepostamble{\begingroup +\catcode`\ =12 \catcode`\^^M=13 +\declarepostambleX} +{\catcode`\^^M=13 % +\gdef\declarepostambleX#1#2 +\endpostamble{\endgroup% + \def^^M{^^J\MetaPrefix\space}% + \edef#1{\MetaPrefix\space\checkeoln#2\empty^^J% + \MetaPrefix ^^J% + \MetaPrefix\space End of file `\outFileName'.% + }}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\usepreamble} +% \begin{macro}{\usepostamble} +% Macros for selecting [pre/post]amble to be used. +% \begin{macrocode} +\def\usepreamble#1{\def\currentpreamble{#1}} +\def\usepostamble#1{\def\currentpostamble{#1}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\nopreamble} +% \changes{2.4i}{1998/01/18}{Macro added. pr/2726} +% \begin{macro}{\nopostamble} +% \changes{2.4i}{1998/01/18}{Macro added. pr/2726} +% Shortcuts for disabling the writing of [pre/post]ambles. +% This is not done by disabling |\WritePreamble| or |\WritePostamble| +% since that wouldn't +% revertable afterwards. Instead the empty [pre/post]ambles are handled +% specially in those macros. +% \begin{macrocode} +\def\nopreamble{\usepreamble\empty} +\def\nopostamble{\usepostamble\empty} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\preamble} +% \changes{2.3c}{1995/08/28}{Bug fixed: default preamble is now selected +% not only defined} +% \begin{macro}{\postamble} +% \changes{2.3c}{1995/08/28}{As for \cs{preamble}} +% For backward compatibility we provide these macros defining +% default preamble and postamble. +% \begin{macrocode} +\def\preamble{\usepreamble\defaultpreamble + \declarepreamble\defaultpreamble} +\def\postamble{\usepostamble\defaultpostamble + \declarepostamble\defaultpostamble} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\org@preamble} +% \changes{2.3a}{1995/08/18}{Macro added} +% \changes{2.3c}{1995/11/16}{With \cs{inFileName} again} +% \begin{macro}{\org@postamble} +% \changes{2.3a}{1995/08/18}{Macro added} +% Default values to use if nothing different is provided. +% \changes{2.2j}{1995/08/06}{Updated default preamble} +% \changes{2.5a}{1998/04/03}{Updated default preamble} +% \begin{macrocode} +\declarepreamble\org@preamble + +IMPORTANT NOTICE: + +For the copyright see the source file. + +Any modified versions of this file must be renamed +with new filenames distinct from \outFileName. + +For distribution of the original source see the terms +for copying and modification in the file \inFileName. + +This generated file may be distributed as long as the +original source files, as listed above, are part of the +same distribution. (The sources need not necessarily be +in the same archive or directory.) +\endpreamble +% \end{macrocode} +% +% \begin{macrocode} +\edef\org@postamble{\string\endinput^^J% + \MetaPrefix ^^J% + \MetaPrefix\space End of file `\outFileName'.% + } +% \end{macrocode} +% +% \begin{macrocode} +\let\defaultpreamble\org@preamble +\let\defaultpostamble\org@postamble +% \end{macrocode} +% +% \begin{macrocode} +\usepreamble\defaultpreamble +\usepostamble\defaultpostamble +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\originaldefault} +% \changes{2.5a}{1998/04/03}{Macro added} +% \changes{2.5b}{1998/04/28}{Macro renamed from \cs{orginaldefault} +% to \cs{originaldefault}} +% The default preamble header changed in v2.5 to allow distribution +% of generated files as long as source also distributed. If you need +% the original default, not allowing distribution of generated files +% add |\usepreamble\originaldefault| to your .ins files. +% Note then that your file can not be included in most TeX distributions +% on CD which are distributed `pre-installed' with all \LaTeX\ files +% extracted form th edocumented sources and moved to a suitable +% directory in \TeX's search path. +% \begin{macrocode} +\declarepreamble\originaldefault + +IMPORTANT NOTICE: + +For the copyright see the source file. + +You are *not* allowed to modify this file. + +You are *not* allowed to distribute this file. +For distribution of the original source see the terms +for copying and modification in the file \inFileName. + +\endpreamble +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\WritePreamble} +% \changes{2.0e}{1991/06/01}{Macro added.} +% \changes{2.3c}{1995/11/16}{Added definitions of \cs{inFileName} and +% \cs{outFileName}} +% \changes{2.3d}{1995/11/17}{(DPC) Macro added.} +% \changes{2.4i}{1998/01/18}{Test for \cs{empty} postamble and +% don't write it out. pr/2726} +% \begin{macrocode} +\def\WritePreamble#1{% +% \end{macrocode} +% We write out only non-empty preambles. +% \begin{macrocode} + \expandafter\ifx\csname pre@\@stripstring#1\endcsname\empty + \else + \edef\outFileName{\@stripstring#1}% +% \end{macrocode} +% Then the reference lines that tell from what source file(s) the +% stripped file was created and user supplied preamble. +% \begin{macrocode} + \StreamPut#1{\csname pre@\@stripstring#1\endcsname}% + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\WritePostamble} +% \changes{2.0e}{1991/06/01}{Macro added.} +% \changes{2.3c}{1995/11/16}{Added defs of \cs{inFileName} and +% \cs{outFileName}} +% \changes{2.4i}{1998/01/18}{Test for \cs{empty} postamble and +% don't write it out. pr/2726} +% Postamble attributed to |#1| is written out. The +% last line written identifies the file again. +% \begin{macrocode} +\def\WritePostamble#1{% +% \end{macrocode} +% We write out only non-empty postambles. +% \begin{macrocode} + \expandafter\ifx\csname post@\@stripstring#1\endcsname\empty + \else + \edef\outFileName{\@stripstring#1}% + \StreamPut#1{\csname post@\@stripstring#1\endcsname}% + \fi} +% \end{macrocode} +% \end{macro} +% +% \subsection{Support for writing to specified directories} +% +% As we've seen before every output file is written to directory +% specifed by the value of |\destdir| current at the moment of +% this file's |\file| declaration. +% +% \begin{macro}{\usedir} +% \changes{2.3e}{1995/09/15}{Macro added} +% This macro when called should translate its one argument into a +% directory name and define |\destdir| to that value. The default +% for |\usedir| is to ignore its argument and return name of +% current directory (if known). This can be changed by commands +% from |docstrip.cfg| file. +% +% |\showdirectory| is used just to display directory name for +% user's information. +% \begin{macrocode} +\def\usedir#1{\edef\destdir{\WriteToDir}} +\def\showdirectory#1{\WriteToDir} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\BaseDirectory} +% \changes{2.3e}{1995/09/15}{Macro added} +% \changes{2.4e}{1996/10/22}{\cs{@setwritetodir} added (DPC)} +% This is config file command for specifing root directory of the +% \TeX{} hierarchy. It enables the whole directory +% selecting mechanism by redefining |\usedir|. +% First make sure that the directory syntax commands have been set +% up by calling |\@setwritedir|, so that the value of |\dirsep| +% used by the |\edef| is (hopefully) correct. +% \begin{macrocode} +\def\BaseDirectory#1{% + \@setwritetodir + \let\usedir\alt@usedir + \let\showdirectory\showalt@directory + \edef\basedir{#1\dirsep}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\convsep} +% \changes{2.3e}{1995/09/15}{Macro added} +% This macro loops through slashes in its argument replacing them +% with current |\dirsep|. It should be called +% |\convsep some/directory/name/\qStop| (with slash on the end). +% \begin{macrocode} +\def\convsep#1/#2\qStop{% + #1\ifx\qStop#2\qStop \pesvnoc\fi\convsep\dirsep#2\qStop} +\def\pesvnoc#1\qStop{\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\alt@usedir} +% \changes{2.3e}{1995/09/15}{Macro added} +% Directory name construction macro enabling writing to various +% directories. +% \begin{macrocode} +\def\alt@usedir#1{% + \Name\ifx{dir@#1}\relax + \undefined@directory{#1}% + \else + \edef\destdir{\csname dir@#1\endcsname}% + \fi} +\def\showalt@directory#1{% + \Name\ifx{dir@#1}\relax + \showundef@directory{#1}% + \else\csname dir@#1\endcsname\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\undefined@directory} +% \changes{2.4a}{1996/10/04}{Macro added (MW)} +% \changes{2.4e}{1996/10/22}{Help text added (DPC)} +% This macro comes into action when undefined label is spotted. The +% action is to raise an error and define |\destdir| to point to the +% current directory. +% \begin{macrocode} +\def\undefined@directory#1{% + \errhelp{docstrip.cfg should specify a target directory for^^J% + #1 using \DeclareDir or \UseTDS.}% + \errmessage{You haven't defined the output directory for `#1'.^^J% + Subsequent files will be written to the current directory}% + \let\destdir\WriteToDir + } +\def\showundef@directory#1{UNDEFINED (label is #1)} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\undefined@TDSdirectory} +% \changes{2.4a}{1996/10/04}{Macro added (MW)} +% This happens when label is undefined while using TDS. The label +% is converted to use proper separators and appended to base +% directory name. +% \begin{macrocode} +\def\undefined@TDSdirectory#1{% + \edef\destdir{% + \basedir\convsep#1/\qStop + }} +\def\showundef@TDSdirectory#1{\basedir\convsep#1/\qStop} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\UseTDS} +% \changes{2.4a}{1996/10/04}{Macro added (MW)} +% \changes{2.4e}{1996/10/22}{\cs{@setwritetodir} added (DPC)} +% Change of behaviour for undefined labels is done simply: +% \begin{macrocode} +\def\UseTDS{% + \@setwritetodir + \let\undefined@directory\undefined@TDSdirectory + \let\showundef@directory\showundef@TDSdirectory + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DeclareDir} +% \changes{2.3e}{1995/09/15}{Macro added} +% \changes{2.4e}{1996/10/22}{\cs{@setwritetodir} added (DPC)} +% This macro remaps some directory name to another. +% \begin{macrocode} +\def\DeclareDir{\@ifnextchar*{\DeclareDirX}{\DeclareDirX\basedir*}} +\def\DeclareDirX#1*#2#3{% + \@setwritetodir + \Name\edef{dir@#2}{#1#3}} +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{Compatibility with older versions} +% +% \begin{macro}{\generateFile} +% Main macro of previous versions of \ds. +% \begin{macrocode} +\def\generateFile#1#2#3{{% + \ifx t#2\askforoverwritetrue + \else\askforoverwritefalse\fi + \generate{\file{#1}{#3}}% + }} +% \end{macrocode} +% \end{macro} +% +% To support command files that were written for the first version +% of \ds{} the commands |\include| and |\processFile| +% are defined here. The use of this interface is not recommended +% as it may be removed in a future release of \ds{}. +% +% \begin{macro}{\include} +% \changes{2.0f}{1991/06/04}{Macro added} To provide the \ds{} program +% with a list of options that should be included in the output the +% command \verb=\include{=\meta{Options}\verb=}= can be used. This +% macro is meant to be used in conjunction with the +% |\processFile| command. +% \begin{macrocode} +\def\include#1{\def\Options{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\processFile} +% \changes{2.0f}{1991/06/04}{Supply \texttt{\bsl generateFile} with +% \texttt{\bsl Options}} +%\DeleteShortVerb\| +% The macro +% \verb=\processFile{=\meta{filename}\verb=}{=\meta{inext}\verb=}{=% +%\unskip\meta{outext}\verb=}{=\meta{t{\fontshape{n}\ttfamily|}f}\verb=}= +% can be used when a single input file is used to produce +% a single output file. The macro is also used in the interactive +% mode of the \ds{} program. +%\MakeShortVerb\| +% +% The arguments \meta{inext} and \meta{outext} denote the +% extensions of the input and output files respectively. The fourth +% argument can be used to specify if an existing file should be +% overwritten without asking. If \meta{t} is specified the program +% will ask for permission before overwriting an existing file. +% +% This macro is defined using the more generic macro |\generateFile|. +% \begin{macrocode} +\def\processFile#1#2#3#4{% + \generateFile{#1.#3}{#4}{\from{#1.#2}{\Options}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\processfile} +% \begin{macro}{\generatefile} +% \changes{2.0m}{1991/04/23}{Now issue a warning when \cs{processfile} +% or \cs{generatefile} are used} +% Early +% versions of \ds{} defined |\processfile| and +% |\generatefile| instead of the commands as they are defined in +% this version. To remain upwards compatible, we still provide +% these commands, but issue a warning when they are used. +% \begin{macrocode} +\def\processfile{\Msg{% + ^^Jplease use \string\processFile\space instead of + \string\processfile!^^J}% + \processFile} +\def\generatefile{\Msg{% + ^^Jplease use \string\generateFile\space instead of + \string\generatefile!^^J}% + \generateFile} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \subsection{Limiting open file streams} +% +% (This section was written by Mark Wooding) +% +% \begin{macro}{\maxfiles} +% \changes{2.4a}{1996/06/06}{Macro added (MDW)} +% Some operating systems with duff libraries or other restrictions +% can't cope with all the files which \ds\ tries to output at once. +% A configuration file can say |\maxfiles{|\meta{number}|}| to +% describe the maximum limit for the environment. +% +% I'll need a counter for this value, so I'd better allocate one. +% +% \begin{macrocode} +\newcount\@maxfiles +% \end{macrocode} +% +% The configuration command |\maxfiles| is just slightly prettier than +% an assignment, for \LaTeX\ people. It also gives me an opportunity +% to check that the limit is vaguely sensible. I need at least 4 +% streams: +% \begin{enumerate} +% \item A batch file. +% \item A sub batch file, which \LaTeX's installation utility uses. +% \item An input stream for reading an unstripped file. +% \item An output stream for writing a stripped file. +% \end{enumerate} +% +% \begin{macrocode} +\def\maxfiles#1{% + \@maxfiles#1\relax + \ifnum\@maxfiles<4 + \errhelp{I'm not a magician. I need at least four^^J% + streams to be able to work properly, but^^J% + you've only let me use \the\@maxfiles.}% + \errmessage{\noexpand\maxfiles limit is too strict.}% + \@maxfiles4 + \fi +} +% \end{macrocode} +% +% \changes{2.4a}{1996/10/03}{No default limit since batchfiles are now +% \cs{input} (MW)} +% Since batchfiles are now |\input|ed there should be no default limit +% here. I'll just use some abstract large number. +% \begin{macrocode} +\maxfiles{1972} % year of my birth (MW) +% \end{macrocode} +% +% \end{macro} +% +% \begin{macro}{\maxoutfiles} +% \changes{2.4a}{1996/06/06}{Macro added (MDW)} +% +% Maybe there's a restriction on just output streams. (Well, there is: +% I know, because \TeX\ only allows 16.) I may as well allow the +% configuration to set this up. +% +% Again, I need a counter. +% +% \begin{macrocode} +\newcount\@maxoutfiles +% \end{macrocode} +% +% And now the macro. I need at least one output stream which I think is +% reasonable. +% +% \begin{macrocode} +\def\maxoutfiles#1{% + \@maxoutfiles=#1\relax + \ifnum\@maxoutfiles<1 + \@maxoutfiles1 + \errhelp{I'm not a magician. I need at least one output^^J% + stream to be able to do anything useful at all.^^J% + Please be reasonable.}% + \errmessage{\noexpand\maxoutfiles limit is insane}% + \fi +} +% \end{macrocode} +% +% The default limit is 16, because that's what \TeX\ says. +% +% \begin{macrocode} +\maxoutfiles{16} +% \end{macrocode} +% +% \end{macro} +% +% \begin{macro}{\checkfilelimit} +% +% This checks the file limit when a new batch file is started. If +% there's fewer than two files left here, we're not going to be able +% to strip any files. The file limit counter is local to the group +% which is set up around |\batchinput|, so that's all pretty cool. +% +% \begin{macrocode} +\def\checkfilelimit{% + \advance\@maxfiles\m@ne + \ifnum\@maxfiles<2 % + \errhelp{There aren't enough streams left to do any unpacking.^^J% + I can't do anything about this, so complain at the^^J% + person who made such a complicated installation.}% + \errmessage{Too few streams left.}% + \end + \fi +} +% \end{macrocode} +% +% \end{macro} +% +% \subsection{Interaction with the user} +% +% \begin{macro}{\strip@meaning} +% Throw away the first part of |\meaning| output. +% \changes{2.4c}{1996/06/11}{Macro added (DPC)} +% \begin{macrocode} +\def\strip@meaning#1>{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\processbatchFile} +% \changes{2.0f}{1991/06/04}{Macro added.} +% \changes{2.3e}{1995/09/25}{Batch file is \cs{input}ed not \cs{read}} +% When \ds{} is run it always tries to use a batch file. +% +% For this purpose it calls the macro |\processbatchFile|. +% +% \changes{2.4a}{1996/06/06} +% {Added check for file limits (MDW)} +% \changes{2.4c}{1996/06/11} +% {Add \cs{jobname} checks (DPC)} +% \changes{2.4d}{1996/06/17} +% {Move \cs{jobname} checks to top level (DPC)} +% The first thing is to check if there are any input streams left. +% \begin{macrocode} +\def\processbatchFile{% + \checkfilelimit + \let\next\relax +% \end{macrocode} +% Now we try to open the batch file for reading. +% \begin{macrocode} + \openin\inputcheck \batchfile\relax + \ifeof\inputcheck +% \end{macrocode} +% If we didn't succeed in opening the file, we assume that it does +% not exist. If we tried the default filename, we silently +% continue; the \ds{} program will switch to interactive mode in +% this case. +% \begin{macrocode} + \ifDefault + \else +% \end{macrocode} +% \changes{2.4d}{1996/10/17}{Missing batchfile an error (DPC)} +% If we failed to open the user-supplied file, something is wrong +% and we warn him about it. This will also result in a switch to +% interactive mode. +% \begin{macrocode} + \errhelp + {A batchfile specified in \batchinput could not be found.}% + \errmessage{^^J% + **************************************************^^J% + * Could not find your \string\batchfile=\batchfile.^^J% + **************************************************}% + \fi + \else +% \end{macrocode} +% When we were successful in opening a file, we again have to check +% whether it was the default file. In that case we tell the user +% we found that file and ask him if he wants to use it. +% \begin{macrocode} + \ifDefault + \Msg{**************************************************^^J% + * Batchfile \DefaultbatchFile\space found Use it? (y/n)?}% + \Ask\answer{% + **************************************************}% + \else +% \end{macrocode} +% When it was the user-supplied file we can safely assume he wants +% to use it so we set |\answer| to \texttt{y}. +% \begin{macrocode} + \let\answer\y + \fi +% \end{macrocode} +% If the macro |\answer| contains a \texttt{y} we can read in the +% batchfile. We do it in an indirect way---after completing |\if|s. +% \begin{macrocode} + \ifx\answer\y + \closein\inputcheck + \def\next{\@@input\batchfile\relax}% + \fi + \fi + \next} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ReportTotals} +% \changes{2.0g}{1991/06/05}{Macro added.} The macro +% |\ReportTotals| can be used to report total statistics for +% all files processed. This code is only included in the program if +% the option \texttt{stats} is included. +% \begin{macrocode} +%<*stats> +\def\ReportTotals{% + \ifnum\NumberOfFiles>\@ne + \Msg{Overall statistics:^^J% + Files \space processed: \the\NumberOfFiles^^J% + Lines \space processed: \the\TotalprocessedLines^^J% + Comments removed: \the\TotalcommentsRemoved^^J% + Comments \space passed: \the\TotalcommentsPassed^^J% + Codelines passed: \the\TotalcodeLinesPassed}% + \fi} +%</stats> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\SetFileNames} +% The macro |\SetFileNames| is used when the program runs in +% interactive mode and the user was asked to supply extensions and +% a list of filenames. +% \begin{macrocode} +\def\SetFileNames{% + \edef\sourceFileName{\MainFileName.\infileext}% + \edef\destFileName{\MainFileName.\outfileext}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\CheckFileNames} +% In interactive mode, the user gets asked for the extensions for +% the input and output files. Also the name or names of the input +% files (without extension) is asked for. Then the names of the +% input and output files are constructed from this information by +% |\SetFileNames|. This assumes that the name of the input file is +% the same as the name of the output file. But we should not write +% to the same file we're reading from so the extensions should +% differ. +% +% The macro |\CheckFileNames| makes sure that the output goes to a +% different file to the one where the input comes from. +% \begin{macrocode} +\def\CheckFileNames{% + \ifx\sourceFileName\destFileName +% \end{macrocode} +% If input and output files are the same we signal an error and stop +% processing. +% \begin{macrocode} + \Msg{^^J% + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J% + ! It is not possible to read from and write to the same file !^^J% + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J}% + \Continuefalse + \else +% \end{macrocode} +% If they are not the same we check if the input file exists by +% trying to open it for reading. +% \begin{macrocode} + \Continuetrue + \immediate\openin\inFile \sourceFileName\relax + \ifeof\inFile +% \end{macrocode} +% If an end of file was found, the file couldn't be opened, so we +% signal an error and stop processing. +% \begin{macrocode} + \Msg{^^J% + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J% + ! Your input file `\sourceFileName' was not found !^^J% + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J}% + \Continuefalse + \else +% \end{macrocode} +% The last check we have to make is if the output file already +% exists. Therefore we try to open it for reading. +% As a precaution we first close the input stream. +% \changes{2.0p}{1992/06/26}{Added \cs{WriteToDir} (FMi).} +% \changes{2.0r}{1992/08/17}{Use \cs{inFile} for reading} +% \changes{2.0r}{1992/08/17}{Moved \cs{closein} statements} +% \begin{macrocode} + \immediate\closein\inFile + \immediate\openin\inFile\destdir \destFileName\relax + \ifeof\inFile +% \end{macrocode} +% If this fails, it didn't exist and all is well. +% \begin{macrocode} + \Continuetrue + \else +% \end{macrocode} +% If opening of the output file for reading succeeded we have to +% ask the user if he wants to overwrite it. We assume he doesn't +% want to overwrite it, so the switch |\ifContinue| is initially +% set to \meta{false}. Only if he answers the question positively +% with `\texttt{y}' or `\texttt{yes}' we set the switch back to +% \meta{true}. +% \changes{2.0p}{1992/06/26}{Changed question about overwriting.} +% \begin{macrocode} + \Continuefalse + \Ask\answer{File \destdir\destFileName\space already + exists + \ifx\empty\destdir somewhere \fi + on the system.^^J% + Overwrite it% + \ifx\empty\destdir\space if necessary\fi + ? [y/n]}% + \ifx\y \answer \Continuetrue \else + \ifx\yes\answer \Continuetrue \else + \fi\fi + \fi +% \end{macrocode} +% All checks have been performed now, so we can close any file that +% was opened just for this purpose. +% \begin{macrocode} + \fi + \fi + \closein\inFile} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\interactive} +% The macro |\interactive| implements the interactive mode of the +% \ds{} program. The macro is implemented using the +% \meta{while} construction. While the switch |\ifMoreFiles| remains +% true, we continue processing. +% \begin{macrocode} +\def\interactive{% + \whileswitch\ifMoreFiles\fi% +% \end{macrocode} +% To keep macro redefinitions local we start a group and ask the +% user some questions about what he wants us to do. +% \begin{macrocode} + {\begingroup + \AskQuestions +% \end{macrocode} +% The names of the files that have to be processed are stored as a +% comma-separated list in the macro |\filelist| by |\AskQuestions|. +% We use a \meta{for} loop to process the files one by one. +% \begin{macrocode} + \forlist\MainFileName:=\filelist + \do +% \end{macrocode} +% First the names of the input and output files are constructed +% and a check is made if all filename information is correct. +% \begin{macrocode} + \SetFileNames + \CheckFileNames + \ifContinue +% \end{macrocode} +% If everything was well, produce output file. +% \changes{2.0q}{1992/07/01}{Preceded filename by \cs{WriteToDir}} +% \begin{macrocode} + \generateFile{\destFileName}{f}% + {\from{\sourceFileName}{\Options}} + \fi% +% \end{macrocode} +% This process is repeated until |\filelist| is exhausted. +% \begin{macrocode} + \od + \endgroup +% \end{macrocode} +% Maybe the user wants more files to be processed, possibly with +% another set of options, so we give him the opportunity. +% \begin{macrocode} + \Ask\answer{More files to process (y/n)?}% + \ifx\y \answer\MoreFilestrue \else + \ifx\yes\answer\MoreFilestrue \else +% \end{macrocode} +% If he didn't want to process any more files, the switch +% |\ifMoreFiles| is set to \meta{false} in order to interrupt the +% \meta{while} loop. +% \begin{macrocode} + \MoreFilesfalse\fi\fi + }} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\AskQuestions} +% \changes{2.0e}{1991/06/01}{Macro added.} +% The macro |\AskQuestions| is called by |\interactive| to get +% some information from the user concerning the files that need +% to be processed. +% \begin{macrocode} +\def\AskQuestions{% + \Msg{^^J% + ****************************************************}% +% \end{macrocode} +% We want to know the extension of the input files, +% \begin{macrocode} + \Ask\infileext{% + * First type the extension of your input file(s): \space *}% + \Msg{****************************************************^^J^^J% + ****************************************************}% +% \end{macrocode} +% the extension of the output files, +% \begin{macrocode} + \Ask\outfileext{% + * Now type the extension of your output file(s) \space: *}% + \Msg{****************************************************^^J^^J% + ****************************************************}% +% \end{macrocode} +% if options are to be included and +% \begin{macrocode} + \Ask\Options{% + * Now type the name(s) of option(s) to include \space\space: *}% + \Msg{****************************************************^^J^^J% + ****************************************************^^J% + * Finally give the list of input file(s) without \space\space*}% +% \end{macrocode} +% the name of the input file or a list of names, separated by commas. +% \begin{macrocode} + \Ask\filelist{% + * extension seperated by commas if necessary % + \space\space\space\space: *}% + \Msg{****************************************************^^J}}% +% \end{macrocode} +% \end{macro} +% +% \subsection{The main program} +% When \TeX\ processes the \ds{} program it displays +% a message about the version of the program and its function +% on the terminal. +% \begin{macrocode} +\Msg{Utility: `docstrip' \fileversion\space <\filedate>^^J% + English documentation \space\space\space <\docdate>}% +\Msg{^^J% + **********************************************************^^J% + * This program converts documented macro-files into fast *^^J% + * loadable files by stripping off (nearly) all comments! *^^J% + **********************************************************^^J}% +% \end{macrocode} +% +% +% \begin{macro}{\WriteToDir} +% Macro |\WriteToDir| is either empty or holds the prefix +% necessary to read a file from the current directory. Under UNIX +% this is |./| but a lot of other systems addopted this concept. +% This macro is a default value for |\destdir|. +% +% The definition of this macro is now delayed until |\@setwritedir| +% is called. +% \changes{2.0p}{1992/06/26}{Macro added (FMi).} +% \changes{2.2a}{1993/12/02}{check texsys file} +% \changes{2.2d}{1994/01/20}{do not read dircheck/texsys file} +% \changes{2.4e}{1996/10/22}{set in \cs{@setwritedir} (DPC)} +% \end{macro} +% +% \begin{macro}{\makepathname} +% \changes{2.3e}{1995/10/24}{Macro added} +% \changes{2.4e}{1996/10/22}{set in \cs{@setwritedir} (DPC)} +% This macro should define |\@pathname| to full path name made by +% combining current value of |\destdir| with its one argument being +% a file name. Its default value defined here is suitable for +% \textsc{unix, ms-dos} and Macintosh, but for some systems it may +% be needed to redefine this in \texttt{docstrip.cfg} file. We +% provide such redefinition for VMS here. +% +% Macro |\dirsep| holds directory separator specific for a +% system. Default value suitable for UNIX and DOS is slash. It +% comes in action when |\usedir| labels are used directly. +% +% The definition of this macro is now delayed until |\@setwritedir| +% is called. +% \end{macro} +% +% \begin{macro}{\@setwritedir} +% \changes{2.4e}{1996/10/22}{macro added (DPC)} +% The following tests try to automatically set |\WriteToDir|, +% |\dirname| and |\makepathname| in Unix, Mac, or VMS style. +% The tests are not run at the top level but held in this macro +% so that a configuration file has a chance to define |\WriteToDir| +% which allows the other two to be set automatically. The tests could +% more simply be run after the configuration file is read, but the +% configuration commands like |\BaseDirectory| need (at least at +% present) to have |\dirsep| correctly defined. It does not define +% any command that is already defined, so by defining these commands +% a configuration file can produce different effects for special needs. +% So this command is called by |BaseDirectory|, |\UseTDS|, +% |\DeclareDir| and finally at the top level after the cfg is run. +% It begins by redefining itself to be a no-op so it effectively is +% only called once. +% \begin{macrocode} +\def\@setwritetodir{% + \let\setwritetodir\relax +% \end{macrocode} +% +% \begin{macrocode} + \ifx\WriteToDir\@undefined + \ifx\@currdir\@undefined + \def\WriteToDir{}% + \else + \let\WriteToDir\@currdir + \fi + \fi +% \end{macrocode} +% +% \begin{macrocode} + \let\destdir\WriteToDir +% \end{macrocode} +% +% VMS Style. +% \begin{macrocode} + \def\tmp{[]}% + \ifx\tmp\WriteToDir + \ifx\dirsep\@undefined + \def\dirsep{.}% + \fi + \ifx\makepathname\@undefined + \def\makepathname##1{% + \edef\@pathname{\ifx\WriteToDir\destdir + \WriteToDir\else[\destdir]\fi##1}}% + \fi + \fi +% \end{macrocode} +% +% Unix and Mac styles. +% \begin{macrocode} + \ifx\dirsep\@undefined + \def\dirsep{/}% + \def\tmp{:}% + \ifx\tmp\WriteToDir + \def\dirsep{:}% + \fi + \fi +% \end{macrocode} +% +% \begin{macrocode} + \ifx\makepathname\@undefined + \def\makepathname##1{% + \edef\@pathname{\destdir\ifx\empty\destdir\else + \ifx\WriteToDir\destdir\else\dirsep\fi\fi##1}}% + \fi} +% \end{macrocode} +% \end{macro} +% +% +% If the user has a |docstrip.cfg| file, use it now. +% \changes{2.4d}{1995/10/17}{Move config file test to outer level (DPC)} +% This macro tries to read \texttt{docstrip.cfg} file. If this +% succeeds executes its first argument, otherwise the second. +% \begin{macrocode} +\immediate\openin\inputcheck=docstrip.cfg\relax +\ifeof\inputcheck + \Msg{% + ********************************************************^^J% + * No Configuration file found, using default settings. *^^J% + ********************************************************^^J}% +\else + \Msg{% + ******************************************^^J% + * Using Configuration file docstrip.cfg. *^^J% + ******************************************^^J}% + \closein\inputcheck + \afterfi{\@@input docstrip.cfg\relax} +\fi +% \end{macrocode} +% +% Now run |\@setwritedir| in case it has not already been run +% by a command in a configuration file. +% \begin{macrocode} +\@setwritetodir +% \end{macrocode} +% +% \begin{macro}{\process@first@batchfile} +% \changes{2.4d}{1996/10/17} +% {Macro added (DPC)} +% Process the batch file, and then terminate cleanly. +% This may be set to |\relax| for `new style' batch files that +% do not start with |\def\batchfile{|\ldots +% \begin{macrocode} +\def\process@first@batchfile{% + \processbatchFile + \ifnum\NumberOfFiles=\z@ + \interactive + \fi + \endbatchfile} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\endbatchfile} +% \changes{2.4d}{1996/10/17} +% {Macro added (DPC)} +% User level command to end batch file processing. +% At the top level, returns totals and then stops \TeX. +% At nested levels just does |\endinput|. +% \begin{macrocode} +\def\endbatchfile{% + \iftopbatchfile +%<*stats> + \ReportTotals +%</stats> + \expandafter\end + \else + \endinput + \fi} +% \end{macrocode} +% \end{macro} +% +% Now we see whether to process a batch file. +% \changes{2.4d}{1996/10/17} +% {Move default batchfile check to outer level (DPC)} +% +% +% \begin{macro}{\@jobname} +% \changes{2.4d}{1996/10/17} +% {Macro added (DPC)} +% Jobname (catcode 12) +% \begin{macrocode} +\edef\@jobname{\lowercase{\def\noexpand\@jobname{\jobname}}}% +\@jobname +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@docstrip} +% \changes{2.4d}{1996/10/17} +% {Macro added (DPC)} +% docstrip (catcode 12) +% \begin{macrocode} +\def\@docstrip{docstrip}% +\edef\@docstrip{\expandafter\strip@meaning\meaning\@docstrip} +% \end{macrocode} +% \end{macro} +% +% First check whether the user has +% defined the control sequence |\batchfile|. If he did, it should +% contain the name of the file to process. +% If he didn't, try the current file, unless that is |docstrip.tex| +% in which case a default name is tried. +% Whether or not the default batch file is used is +% remembered by setting the switch |\ifDefault| to \meta{true} or +% \meta{false}. +% \begin{macrocode} +\Defaultfalse +% \end{macrocode} +% +% \begin{macrocode} +\ifx\undefined\batchfile +% \end{macrocode} +% |\@jobname| is lowercase jobname (catcode 12)\\ +% |\@docstrip| is docstrip (catcode 12) +% \begin{macrocode} + \ifx\@jobname\@docstrip +% \end{macrocode} +% Set the batchfile to the default +% \begin{macrocode} + \let\batchfile\DefaultbatchFile + \Defaulttrue +% \end{macrocode} +% Else don't process a new batchfile, just carry on with past the end +% of this file. In this case processing will move to the initial +% batchfile which \emph{must} then be terminated by |\endbatchfile| or +% \TeX\ will fall to the star prompt. +% \begin{macrocode} + \else + \let\process@first@batchfile\relax + \fi +\fi +\process@first@batchfile +% \end{macrocode} +% +% \begin{macrocode} +%</program> +% \end{macrocode} +% +% \Finale +\endinput diff --git a/Master/texmf-dist/source/latex/base/docstrip.ins b/Master/texmf-dist/source/latex/base/docstrip.ins new file mode 100644 index 00000000000..90239d90df0 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/docstrip.ins @@ -0,0 +1,126 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% +% If the top level file is docstrip.ins, most TeXs set \jobname to +% docstrip which would make docstrip program think it should run +% in interactive mode. So redefine \jobname in this install file. + +\let\jobname\relax +\input docstrip.dtx + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + + + +\declarepostamble\istpost +\endpostamble + +\keepsilent + +% programs and packages + +\usedir{tex/latex/base} + +\generate{\file{docstrip.tex}{\from{docstrip.dtx}{initex,program,stats}} + } + + +\generate{\file{doc.sty}{\from{doc.dtx}{package}} + \file{shortvrb.sty}{\from{doc.dtx}{shortvrb}} + \usepostamble\istpost + \file{gind.ist}{\from{doc.dtx}{gind}} + \file{gglo.ist}{\from{doc.dtx}{gglo}} + } + +\generate{\file{ltxdoc.cls}{\from{ltxdoc.dtx}{class}} + } + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space doc.sty} +\Msg{* \space\space shortvrb.sty} +\Msg{* \space\space docstrip.tex} +\Msg{*} +\Msg{* Also move the following files into a directory searched} +\Msg{* by MakeIndex:} +\Msg{*} +\Msg{* \space\space gind.ist} +\Msg{* \space\space gglo.ist} +\Msg{*} +\Msg{* To produce the documentation run the files ending with} +\Msg{* `.dtx' through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} +} + + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/ec.ins b/Master/texmf-dist/source/latex/base/ec.ins new file mode 100644 index 00000000000..58235d5d6fc --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ec.ins @@ -0,0 +1,130 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +In particular, permission is granted to customize the declarations in +this file to serve the needs of your installation. + +However, NO PERMISSION is granted to distribute a modified version +of this file under its original name. + +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\Msg{*** Generating font defs for Cork encoded + and Text Companion fonts ***} + +\generate{ + \file{t1cmfib.fd}{ + \from{cmfonts.fdd}{fd,T1cmfib,ec}} + \file{t1cmfr.fd}{ + \from{cmfonts.fdd}{fd,T1cmfr,ec}} + \file{t1cmdh.fd}{ + \from{cmfonts.fdd}{fd,T1cmdh,ec}} + \file{t1cmr.fd}{ + \from{cmfonts.fdd}{fd,T1cmr,ec}} + \file{t1cmss.fd}{ + \from{cmfonts.fdd}{fd,T1cmss,ec}} + \file{t1cmtt.fd}{ + \from{cmfonts.fdd}{fd,T1cmtt,tt,ec,nowarn}} + \file{t1cmvtt.fd}{ + \from{cmfonts.fdd}{fd,T1cmvtt,tt,ec}} + \file{ts1cmr.fd}{ + \from{cmfonts.fdd}{fd,TS1cmr,ec}} + \file{ts1cmss.fd}{ + \from{cmfonts.fdd}{fd,TS1cmss,ec}} + \file{ts1cmtt.fd}{ + \from{cmfonts.fdd}{fd,TS1cmtt,ec,tt}} + \file{ts1cmvtt.fd}{ + \from{cmfonts.fdd}{fd,TS1cmvtt,ec,tt}} +} + + +\generate{ + \file{t1lcmss.fd}{ + \from{slifonts.fdd}{lcmss,fd,ec}} + \file{t1lcmtt.fd}{ + \from{slifonts.fdd}{lcmtt,fd,ec}} + } + + + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space All *.fd} +\Msg{*} +\Msg{* To produce the documentation run the files ending with} +\Msg{* `.fdd' through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} +} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/exscale.dtx b/Master/texmf-dist/source/latex/base/exscale.dtx new file mode 100644 index 00000000000..8728a43a87d --- /dev/null +++ b/Master/texmf-dist/source/latex/base/exscale.dtx @@ -0,0 +1,183 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%%% File: exscale.dtx +%% Copyright (C) 1992-1997 Frank Mittelbach and Rainer Sch\"opf, +%% all rights reserved. +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{exscale} +%<fd, >\ProvidesFile{OMXcmex.fd} +%<package,fd> [1997/06/16 v2.1g +%<package> Standard LaTeX package exscale] +%<fd, > exscale package font definitions] +%<*driver> +\documentclass{ltxdoc} +\usepackage{exscale} +\GetFileInfo{exscale.sty} +\begin{document} +\title{The \texttt{exscale} package\thanks + {This file has version number \fileversion, dated \filedate.}\\ + for use with \LaTeX2e} +\author{Frank Mittelbach \and Rainer Sch\"opf} +\date{\filedate} + \maketitle + \DocInput{exscale.dtx} +\end{document} +%</driver> +% \fi +% +% \CheckSum{39} +% +% \changes{v2.1g}{1997/06/16}{Documentation fix.} +% \changes{v2.1d}{1994/05/09}{Added setting \cs{big}... sizes.} +% \changes{v2.1c}{1994/05/08}{Changed to new documentation standards.} +% \changes{v2.1a}{1993/12/12}{Update for \LaTeXe} +% +% \def\MF{\textsf{Metafont}} +% \def\dst{{\normalfont\scshape docstrip}} +% +% +% \section{Introduction} +% +% On popular request, this package implements scaling of the +% math extension font `cmex'. If this package is used the site needs +% scaled versions of the \texttt{cmex10} in the sizes 10.95pt, 12pt, +% 14.4pt , 17.28pt, 20.74pt, and 24.88pt which corresponds to standard +% magsteps using |\magstephalf|, and |\magstep1| through |\magstep5|. +% Additionally `cmex' variants for the sizes 7pt to 9pt are necessary. +% These fonts are part of the AMS font package and can be found on +% many servers. +% +% We don't think that using a scalable `cmex' font improves the +% appearance of the document very much because the linear scaling of +% the font introduces changes to font dimen parameters of the font +% that are used all over the place in \TeX's math placement routines +% and definitely shouldn't be scaled linearly. As a positive result, +% however, symbols from this font will come out in approximately the +% right size when used with a large basis font size. +% +% We therefore strongly recommend the generation of designed fonts for +% the larger sizes and hope that the corresponding \MF{} sources will +% be available in the near future. +% +% +% \section{Usage} +% +% This file can be used either as a package by placing its name +% in the argument of +% |\usepackage|, or by generating from it a |.fd| file which then +% replaces the normally used |.fd| file |OMXcmex.fd|. +% +% For the second solution you should prepare a small \dst{} command +% file containing the following statements: +% \begin{quote} +% |\def\batchfile{|\meta{name-of-your-command-file}|}| \\ +% |\input docstrip.tex| \\ +% |\generateFile{OMXcmex.fd}{t}{\from{exscale.dtx}{fd}}| +% \end{quote} +% and then run this file through \LaTeX. +% This would mean however, that your documents may look different if +% they are printed on another installation whereas when using the +% package file they would come out the same on both sites. +% +% \StopEventually{} +% +% +% \section{Implementation} +% +% +% In case this should produce a font definition file we write +% a message to the transcript file only. +% The explicit spaces are necessary in an +% |.fd| file and the |\string| guards against situations where |`|, +% |<| or |>| is active. +% \changes{v2.1f}{1995/11/27}{Use \cs{ProvidesFile}} +% \begin{macrocode} +%\ProvidesFile{OMXcmex.fd}[]% moved to top of the file +% \end{macrocode} +% +% We now define to which external fonts the font/shape Computer Modern +% Extension Medium Normal. For the sizes 7--10pt we use fonts that are +% designed for the corresponding size and for the higher sizes we use +% scaled versions of the 10pt font since for these sizes no designed +% fonts are easily available. +% \begin{macrocode} +%<*fd|package> +\DeclareFontShape{OMX}{cmex}{m}{n}{% +% \end{macrocode} +% According to Michael Downes `cmex5' and `cmex6' are not +% distributed currently. Therefore we use `cmex7' in those size but +% we omit a warning. +% \begin{macrocode} + <-8>sfixed * cmex7 + <8> cmex8 + <9> cmex9 + <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88>cmex10 + }{} +%</fd|package> +% \end{macrocode} +% +% We also redeclare the symbol font for large symbols. This is +% already done when the base format also uses CM math fonts, but it +% doesn't hurt either. +% \begin{macrocode} +%<*package> +\DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n} +% \end{macrocode} +% +% Finally we redefine the primitive commands |\big|, |\Big|, |\bigg| +% and |\Bigg| to change size with main size changes. To this end we +% need a new dimen register |\big@size|. +% \begin{macrocode} +\newdimen\big@size +% \end{macrocode} +% This dimen is set with every size change to $1.2$ times the height +% of a left parenthesis. +% \changes{v2.1e}{1994/11/06}{Renamed \cs{every@size} to +% \cs{every@math@size}} +% \changes{v2.1e}{1994/11/06}{Update \cs{big@size} globally} +% \begin{macrocode} +\addto@hook\every@math@size{\setbox\z@\vbox{\hbox{$($}\kern\z@}% + \global\big@size 1.2\ht\z@} +% \end{macrocode} +% Now we can define the macros. Note: |\n@space| sets the internal +% variables |\nulldelimiterspace| and |\mathsurropund| to zero length. +% \begin{macrocode} +\def\bBigg@#1#2{% + {\hbox{$\left#2\vcenter to#1\big@size{}\right.\n@space$}}} +\def\big{\bBigg@\@ne} +\def\Big{\bBigg@{1.5}} +\def\bigg{\bBigg@\tw@} +\def\Bigg{\bBigg@{2.5}} +%</package> +% \end{macrocode} +% +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/base/exscale.ins b/Master/texmf-dist/source/latex/base/exscale.ins new file mode 100644 index 00000000000..04ac8b87ec3 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/exscale.ins @@ -0,0 +1,95 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\generateFile{exscale.sty}{t}{% + \from{exscale.dtx}{package}} + + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space exscale.sty} +\Msg{*} +\Msg{* To produce the documentation run the files ending with} +\Msg{* `.dtx' through LaTeX2e.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} +} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/fixltx2e.dtx b/Master/texmf-dist/source/latex/base/fixltx2e.dtx new file mode 100644 index 00000000000..a55e295fcac --- /dev/null +++ b/Master/texmf-dist/source/latex/base/fixltx2e.dtx @@ -0,0 +1,1791 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +% +%<*dtx> + \ProvidesFile{fixltx2e.dtx} +%</dtx> +%<fixltx2e,fix-cm>\NeedsTeXFormat{LaTeX2e} +%<fixltx2e>\ProvidesPackage{fixltx2e} +%<fix-cm>\ProvidesPackage{fix-cm} +%<driver>\ProvidesFile{fixltx2e.drv} +% \fi +% \ProvidesFile{fixltx2e.dtx} + [2004/02/13 v1.1h fixes to LaTeX] +% +% \iffalse +%<*driver> + \documentclass{ltxdoc} + \newcommand\Lopt[1]{\textsf{#1}} + \let\Lpack\Lopt + \providecommand{\file}[1]{\texttt{#1}} + \providecommand{\MF}{\textsf{Metafont}} + \providecommand{\danger}{\marginpar[\hfill\protect\Huge!!]{\protect\Huge!!\hfill}} + \begin{document} + \DocInput{fixltx2e.dtx} + \end{document} +%</driver> +% \fi +% +% \CheckSum{896} +% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% +% +% \let\package\textsf +% +% +% \GetFileInfo{fixltx2e.dtx} +% +% \title{The \Lpack{fixltx2e} and \Lpack{fix-cm} packages\thanks{This file +% has version number \fileversion, last +% revised \filedate.}} +% \author{Frank Mittelbach, David Carlisle, Chris Rowley, Walter +% Schmidt\thanks{Walter wrote \Lpack{fix-cm}}} +% \date{\filedate} +% \maketitle +% +% \begin{abstract} +% These packages provides fixes to \LaTeXe{} which are desirable +% but cannot be integrated into the \LaTeXe{} kernel or the +% font definition files directly as they would produce a version +% incompatible to earlier releases (either in formatting or +% functionality). +% +% By providing these fixes in the form of packages, users can benefit +% from them without the danger that their documents will fail or +% produce unexpected results at other sites since the documents +% contain a clear indication (the |\usepackage| line, preferably +% with a required date) that the fixes are needed. +% \end{abstract} +% +% \tableofcontents +% +% \newpage +% +% \section{Introduction} +% +% In the newsletter \texttt{ltnews07.tex}, which accompanied the +% \LaTeXe{} maintenance release of June 1997, we wrote: +% \begin{quote} +% Many of the problem reports we receive concerning the standard +% classes are not concerned with bugs but are suggesting, more or +% less politely, that the design decisions embodied in them are +% `not optimal' and asking us to modify them. +% +% There are several reasons why we have decided not to make such +% changes to these files. +% \begin{itemize} +% \item However misguided, the current behaviour is clearly what +% was intended when these classes were designed. \item It is not +% good practice to change such aspects of `standard classes' +% because many people will be relying on them. +% \end{itemize} +% +% We have therefore decided not to even consider making such +% modifications, nor to spend time justifying that decision. This +% does not mean that we do not agree that there are many +% deficiencies in the design of these classes, but we have many +% tasks with higher priority than continually explaining why the +% standard classes for \LaTeX{} cannot be changed. +% \end{quote} +% +% Back then we probably should have said that this decision also +% covers changes to the \LaTeX{} kernel and font definitions, +% if the change results in +% noticeable differences in the formatting of documents or otherwise +% produces severe incompatibilities between releases. The important +% point to stress here is that ``people rely on the fact that a +% document formatted at one site produces identical output at a +% different site''. By fixing a certain problem in version +% \meta{date}, people making use of the fix will get incorrectly +% formatted documents if they send them to others who still run on a +% version prior to \meta{date}. +% +% In theory one could get around this by adding a line like +% \begin{quote} +% |\NeedsTeXFormat{latex2e}[|\meta{date}|]| +% \end{quote} +% on top of the document. However, this fails for two reasons. Firstly, +% most people will not be aware that they make use of a feature or fix +% that is only available in their version of \LaTeX{}; and thus do not +% add such a line in their documents. Secondly, even if there is such a +% line the receiving site might not be able to upgrade their \LaTeX{} +% in time to process the document properly (the latter is a sad fact +% of life). +% +% By providing the \Lpack{fixltx2e} and \Lpack{fix-cm} packages +% we hope to help people in this respect since, when they +% are used, a document will contain a clear +% indication that special features/fixes are needed and if the +% receiving site does not have the packages available (or not available +% with the right version) it is far easier to download and install them +% from some archive than to upgrade \LaTeX{} in a rush. +% +% The packages are independent from each other and deal with different +% subjects: +% \Lpack{fixltx2e} provides general changes to the \LaTeX{} kernel, +% while \Lpack{fix-cm} improves the definitions of the Computer Modern +% font families. +% +% We will try to maintain the packages in such a way that they can be used +% with all maintenance releases of \LaTeXe{} so that, if urgently +% needed, people can simply add them to the current directory in case +% they cannot upgrade their \LaTeX{} for whatever reason. +% +% The packages are \textbf{NOT} provided so that people can stop +% upgrading their \LaTeX{} system. They will contain only fixes of a +% certain nature, others will still go into the kernel and extensions +% in form of packages, and support files will still be added to the +% base system at regular intervals. +% +% +% \subsection{Using \Lpack{fixltx2e}} +% +% To use the \Lpack{fixltx2e} package include the line +% \begin{quote} +% |\usepackage{fixltx2e}[|\meta{date}|]| +% \end{quote} +% into the preamble of your document, where \meta{date} is the date of +% the \Lpack{fixltx2e} package that you are using. +% This way your document will produce a warning if processed at a site +% that only has an older version of of this package. +% +% \subsection{Using \Lpack{fix-cm}} +% +% \begin{sloppypar} +% To use the \Lpack{fix-cm} package, +% load \danger it \emph{before} \cmd{\documentclass}, +% and use the command \cmd{\RequirePackage} to do so, rather than the +% normal \cmd{\usepackage}: +% \end{sloppypar} +% \begin{verse} +% |\RequirePackage{fix-cm}|\\ +% |\documentclass| \dots +% \end{verse} +% \textbf{Do not to load any other package before the document class}, +% unless you have a thorough understanding of the \LaTeX{} internals +% and know exactly what you are doing! +% +% +% \section{Fixes added} +% +% This section describes all the fixes/features that have been added +% to the initial release of the package. If applicable the bug report +% info (see \texttt{bugs.txt}) is given. +% +% +% +% +% \subsection{2-col: 1-col fig can come before earlier 2-col fig +% (pr/2346)} +% +%\begin{verbatim} +% >Number: 2346 +% >Category: latex +% >Synopsis: 2-col: 1-col fig can come before earlier 2-col fig +% >Arrival-Date: Wed Dec 18 15:41:07 1996 +% >Originator: w.l.kleb@larc.nasa.gov (bil kleb) +% >Description: +% as documented in lamport's book, p. 198, concerning figure +% placement, "a figure will not be printed before an earlier +% figure, and a table will not be printed before an earlier +% table." however, there is a footnote stating, "However, +% in two-column page style, a single-column figure can come before +% an earlier double-column figure, and vice versa." +% +% this twocolumn behavior is undesireable---at least by me and +% most professional organizations i publish in. ed snyzter developed +% a hack fix for 2.09 several years ago which links the two +% counters, but i have not run across a similar "fix" for 2e... +% \end{verbatim} +% +% Originally fixed in package \Lpack{fix2col} which was merged into +% this package. Documentation and code from this package have been +% merged into this file. +% +% \subsubsection{Notes on the Implementation Strategy} +% +% The standard output routine maintains two lists of floats that have +% been `deferred' for later consideration. One list for single column +% floats, and one for double column floats (which are always +% immediately put onto their deferred list). This mechanism means +% that \LaTeX\ `knows' which type of float is contained in each box +% by the list that it is processing, but having two lists means +% that there is no mechanism for preserving the order between the +% floats in each list. +% +% The solution to this problem consists of two small changes to +% the output routine. +% +% Firstly, abandon the `double column float list' |\@dbldeferlist| +% and change every command where it is used so that instead the +% same |\@deferlist| is used as for single column floats. +% That one change ensures that double and single column floats +% stay in the same sequence, but as \LaTeX\ no longer `knows' +% whether a float is double or single column, it will happily +% insert a double float into a single column, overprinting the +% other column, or the margin. +% +% The second change is to provide an alternative mechanism for +% recording the two column floats. \LaTeX\ already has a compact +% mechanism for recording float information, an integer count register +% assigned to each float records information about the `type' of float +% `figure', `table' and the position information `htp' etc. +% +% The type information is stored in the `high' bits, one bit position +% (above `32') allocated to each float type. The `low' bits store +% information about the allowed positions, one bit each allocated for +% |h t b p|. In the \LaTeX2.09 system, the bit corresponding to `16' +% formed a `boundary' between these two sets of information, and it +% was never actually used by the system. Ed Sznyter's +% \package{fixfloats} package not unreasonably used this position to +% store the double column information, setting the bit for double +% column floats. Then at each point in the output routine at which a +% float is committed to a certain region, an additional check must be +% made to check that the float is (or is not) double column. If it +% spans the wrong number of columns it is deferred rather than being +% added. +% +% Unfortunately the bit `16' is not available in \LaTeXe. It is used +% to encode the extra float position possibility `|!|' that was added +% in that system. It would be possible to use position `32' and to +% move the flags for `table', `figure',\ldots\ up one position, to +% start at 64, but this would mean that in principle one less float +% type would be supported, and more importantly is likely to break +% any other packages that assume anything about the output routine +% internals. So here I instead use another mechanism for flagging +% double column floats: By default all floats have depth 0pt. +% This package arranges that double column ones have depth 1sp. +% This information may then be used in the same manner as in +% the \package{fixfloats} package, to defer any floats that are not of +% the correct column spanning type. +% +% +% +% \subsection{Wrong header for twocolumn (pr/2613)} +% +%\begin{verbatim} +% >Number: 2613 +% >Category: latex +% >Synopsis: wrong headline for twocolumn +% >Arrival-Date: Mon Sep 22 16:41:09 1997 +% >Originator: daniel@cs.uni-bonn.de (Daniel Reischert) +% >Description: +% When setting the document in two columns +% the headline shows the top mark of the second column, +% but it should show the top mark of the first column. +% \end{verbatim} +% +% Originally fixed in package \Lpack{fix2col} which was merged into +% this package. Documentation and code from this package have been +% merged into this file. +% +% \subsubsection{Notes on the Implementation Strategy} +% +% The standard \LaTeX\ twocolumn system works internally by making +% each column a separate `page' that is passed independently to \TeX's +% pagebreaker. (Unlike say the \package{multicol} package, where all +% columns are gathered together and then split into columns later, +% using |\vsplit|.) This means that the primitive \TeX\ marks that are +% normally used for header information, are globally reset after the +% first column. By default \LaTeX\ does nothing about this. +% A good solution is provided by Piet van Oostrum (building on earlier +% work of Joe Pallas) in his \package{fixmarks} package. +% +% After the first column box has been collected the mark information +% for that box is saved, so that any |\firstmark| can be +% `artificially' used to set the page-level marks after the second +% column has been collected. (The second column |\firstmark| is not +% normally required.) Unfortunately \TeX\ does not provide a direct +% way of knowing if any marks are in the page, |\firstmark| always has a +% value from previous pages, even if there is no mark in this page. +% The solution is to make a copy of the box and then |\vsplit| it +% so that any marks show up as |\splitfirstmark|. +% +% The use of |\vsplit| does mean that the output routine will globally +% change the value of |\splitfirstmark| and +% |\splitbotmark|. The \package{fixmarks} package goes to some trouble +% to save and restore these values so that the output routine does +% \emph{not} change the values. This part of \package{fixmarks} is not +% copied here as it is quite costly (having to be run on every page) and +% there is no reason why anyone writing code using |\vsplit| should +% allow the output routine to be triggered before the split marks have +% been accessed. +% +% +% \subsection{\texttt{\textbackslash @} discards spaces when moving +% (pr/3039)} +% +%\begin{verbatim} +% >Number: 3039 +% >Category: latex +% >Synopsis: \@ discards spaces when moving +% >Arrival-Date: Sat May 22 09:01:06 1999 +% >Originator: asnd@triumf.ca (Donald Arseneau) +% >Description: +% The \@ command expands to \spacefactor\@m in auxiliary files, +% which then ignores following spaces when it is reprocessed. +%\end{verbatim} +% +% \subsection{\texttt{\textbackslash setlength} produces error if +% used with registers like \texttt{\textbackslash dimen0} (pr/3066)} +% +%\begin{verbatim} +% >Number: 3066 +% >Category: latex +% >Synopsis: \setlength{\dimen0}{10pt} +% >Arrival-Date: Tue Jul 6 15:01:06 1999 +% >Originator: oberdiek@ruf.uni-freiburg.de (Heiko Oberdiek) +% >Description: +% The current implementation of \setlength causes an error, +% because the length specification isn't terminated properly. +% More safe: +% \def\setlength#1#2{#1=#2\relax} +%\end{verbatim} +% +% \subsection{\texttt{\textbackslash addpenalty} ruins flush-bottom (pr/3073)} +% +%\begin{verbatim} +% >Number: 3073 +% >Category: latex +% >Synopsis: \addpenalty ruins flush-bottom +% >Arrival-Date: Sat Jul 17 05:11:05 1999 +% >Originator: asnd@triumf.ca (Donald Arseneau) +% >Description: +% Just to keep in mind for further development eh? +% A page break at an \addpenalty after \vspace does *not* +% give a flush-bottom page. (The intent of \addpenalty is +% apparently just to preserve the flush bottom by putting +% the breakpoint `above' the skip.) +%\end{verbatim} +% +% +% +% \section{Fixes added for 2003/06/01} +% +% \subsection{\texttt{\textbackslash fnsymbol} should use text symbols +% if possible (pr/3400)} +% +%\begin{verbatim} +% >Number: 3400 +% >Category: latex +% >Synopsis: \fnsymbol should use text symbols if possible +% >Arrival-Date: Fri Jan 04 20:41:00 CET 2002 +% >Originator: was@VR-Web.de ( Walter Schmidt ) +% +% The \fnsymbol command can be used in both text and math +% mode. The symbols produced are, however, always taken from +% the math fonts. As a result, they may not match the text +% fonts, even if the symbols are actually available, for +% instance from the TS1 encoding. Since \fnsymbol is +% primarily used for footnotes in text, this should be fixed, +% IMO. +%\end{verbatim} +% +% +% \subsection{No hyphenation in first word after float environment(pr/3498)} +% +%\begin{verbatim} +% >Number: 3498 +% >Category: latex +% >Synopsis: No hyphenation in first word after float environment +% >Arrival-Date: Thu Jan 30 13:21:00 CET 2003 +% >Originator: h.harders@tu-bs.de (Harald Harders) +% +% If a float environment (figure, table) is written within a paragraph, +% the first word after the environment is not hyphenated. +%\end{verbatim} +% +% +% +% \subsection{Allowing \texttt{\textbackslash emph} to produce small +% caps, etc} +% +% By default |\em| or |\emph| switches to roman in an italic +% context but some designers prefer a switch to small caps in that +% case. This can be achieved by setting |\eminnershape|, e.g., +% +%\begin{verbatim} +%\renewcommand\eminnershape{\scshape} +%\end{verbatim} +% +% +% \subsection{Using EC fonts (T1 encoding) makes my documents look +% bl**dy horrible (from c.t.t.)\\ +% I can't use arbitrary sizes with CM fonts (from c.t.t.)} +% +% No I'm not trying to collect any cites from the news group +% discussion on this topic. In a nutshell, if one adds +%\begin{verbatim} +%\usepackage[T1]{fontenc} +%\end{verbatim} +% to a document that uses the Computer Modern typefaces, +% then not only the T1 encoding is used but the fonts +% used in the document look noticeably different. This is due to the fact +% that the EC fonts have more font series designs, e.g.\ a 14.4\,pt bold +% etc and those get used in the standard \texttt{.fd} files, while +% with Computer Modern (in OT1 encoding) such sizes were scaled +% versions of smaller sizes---with a noticeable different look and +% feel. +% +% So we provide a package \Lpack{fix-cm} to ensure that comparable +% definitions are used. In addition to that, the package +% \Lpack{fix-cm} also enables continuous scaling of the CM fonts. +% This package was written by Walter Schmidt. +% +% +% +%^^A \section{The macro package \textsf{fix-cm} for \LaTeXe} +% +%^^A The documentation in this section was prepared by Walter Schmidt. +% +% +% +% \subsubsection{What \Lpack{fix-cm} does} +% +% ^^A Are you bothered by the T1 and TS1 encoded Computer Modern fonts, +% ^^A which look partially worse than the traditional ones? Would you +% ^^A like to use the CM fonts with arbitrary sizes? If so, the macro +% ^^A package \Lpack{fix-cm} can help you. +% +% Loading the package \Lpack{fix-cm} changes the font definitions of the +% Computer Modern fonts, in order to achieve the following effects: +% \begin{itemize} +% \item +% The appearance of the T1 and TS1 encoded CM fonts (aka `EC') is +% made as similar as possible to the traditional (OT1 encoded) ones. +% Particularly, a number of broken or ugly design sizes are no +% longer used, the look of the bold sans serif typeface at large +% sizes is considerably improved, and mismatches between the text +% fonts and the corresponding math fonts are avoided. As a side +% effect, PostScript and PDF documents may become smaller, because +% fewer fonts need to be embedded. +% \item +% The Computer Modern fonts are made available with arbitrary sizes. +% \item +% Only those design sizes of the fonts will be used, that are +% normally available in Type1 format, too. You need not load the +% extra package \Lpack{cmmib57} for this purpose. +% \end{itemize} +% The package acts on the following font families: +% \begin{itemize} +% \item +% The text font families \file{cmr}, \file{cmss}, \file{cmtt} and +% \file{cmvtt} with OT1, T1 and TS1 encoding. +% \item +% The default math fonts used by \LaTeX, i.e., the font families +% \file{cmm} with encoding OML and \file{cms} with encoding OMS. +% \item +% The symbols used by the package \Lpack{latexsym}, i.e., the font +% family \file{lasy}. +% \end{itemize} +% Note that the package does \emph{not} act on: +% \begin{itemize} +% \item Font families such as CM~Fibonacci, CM~Dunhill etc., +% which are provided for experimental purposes or for fun only. +% \item +% CM text fonts with character sets other than Latin, e.g., +% Cyrillic. Loading of the required font and encoding definitions +% while the fonts are not actually used, would not be a good idea. +% This should be addressed by particular packages or by changing the +% standard FDs of these fonts. +% \item +% Extra math fonts such as the AMS symbol fonts. While +% they match the style of Computer Modern, they are frequently used +% in conjunction with other font families, too. Thus, +% \Lpack{fix-cm} is obviously not the right place to make sure that +% they can be scaled continuously. Ask the maintainers of these +% fonts to provide this feature, which is badly needed! +% \item +% The math extension font \file{cmex}. Whether or not this font +% should be scaled is a question of its own, and there are other +% packages (\Lpack{exscale}, \Lpack{amsmath}, \Lpack{amsfonts}) to +% take care of it. +% \end{itemize} +% +% \subsubsection{How to load the package} +% \begin{sloppypar} +% The package should be loaded \danger \emph{before} \cmd{\documentclass}, +% using the command |\RequirePackage{fix-cm}|, rather than the +% normal \cmd{\usepackage}. +% Rationale: +% If the package is loaded in the preamble, a preceding package or +% even the code of the document class may have used any of the CM +% fonts already. However, the definitions of those fonts, that are +% already in use, cannot be changed any more. +% \end{sloppypar} +% +% \subsubsection{Usage notes} +% In contrast to what you may expect, \Lpack{fix-cm} does \emph{not} +% ensure that line and page breaks stay the same, when you switch an +% existing document from OT1 to T1 encoding. The package does not +% turn off all of the additional design sizes in the EC fonts +% collection: Those, that contribute considerably to the typographical +% quality and do not conflict with the math fonts, +% are---indeed---used. +% +% Be careful when using arbitrary, non-standard font sizes with +% applications that need bitmap fonts: You may end up \danger with +% lots of possibly huge \file{.pk} files. Also, \MF{} chokes +% sometimes on extremely small or large sizes, because of arithmetic +% problems. +% +% \Lpack{fix-cm} supersedes the experimental packages \Lpack{cmsd} and +% \Lpack{fix-ec}, which are no longer distributed. +% +% The packages \Lpack{type1cm} and \Lpack{type1ec} must not be loaded +% additionally; they enable only continuous scaling. +% +% \StopEventually{} +% +% \section{Implementation} +% +% We require at least a somewhat sane version of \LaTeXe{}. Earlier +% ones where really quite different from one another. +% \begin{macrocode} +%<*fixltx2e> +\NeedsTeXFormat{LaTeX2e}[1996/06/01] +% \end{macrocode} +% +% +% +% \subsection{2-col: 1-col fig can come before earlier 2-col fig +% (pr/2346) \\ +% Wrong headline for twocolumn (pr/2613)} +% +% Originally fixed in package \Lpack{fix2col} which was merged into +% this package. Code and documentation are straight copies from that +% package. +% +% \subsubsection{Preserving Marks} +% +% This is just a change to the single command |\@outputdblcol| +% so that it saves mark information for the first column and restores +% it in the second column. +% \begin{macrocode} +\def\@outputdblcol{% + \if@firstcolumn + \global\@firstcolumnfalse +% \end{macrocode} +% Save the left column +% \begin{macrocode} + \global\setbox\@leftcolumn\copy\@outputbox +% \end{macrocode} +% +% Remember the marks from the first column +% \begin{macrocode} + \splitmaxdepth\maxdimen + \vbadness\maxdimen + \setbox\@outputbox\vsplit\@outputbox to\maxdimen +% \end{macrocode} +% +% One minor difference from the current \package{fixmarks}, pass the +% marks through a token register to stop any |#| tokens causing an +% error in a |\def|. +% \begin{macrocode} + \toks@\expandafter{\topmark}% + \xdef\@firstcoltopmark{\the\toks@}% + \toks@\expandafter{\splitfirstmark}% + \xdef\@firstcolfirstmark{\the\toks@}% +% \end{macrocode} +% +% This test does not work if truly empty marks have been inserted, but +% \LaTeX\ marks should always have (at least) two brace groups. +% (Except before the first mark is used, when the marks are empty, +% but that is OK here.) +% \begin{macrocode} + \ifx\@firstcolfirstmark\@empty + \global\let\@setmarks\relax + \else + \gdef\@setmarks{% + \let\firstmark\@firstcolfirstmark + \let\topmark\@firstcoltopmark}% + \fi +% \end{macrocode} +% +% End of change +% \begin{macrocode} + \else + \global\@firstcolumntrue + \setbox\@outputbox\vbox{% + \hb@xt@\textwidth{% + \hb@xt@\columnwidth{\box\@leftcolumn \hss}% + \hfil + \vrule \@width\columnseprule + \hfil + \hb@xt@\columnwidth{\box\@outputbox \hss}}}% + \@combinedblfloats +% \end{macrocode} +% Override current first and top with those of first column if necessary +% \begin{macrocode} + \@setmarks +% \end{macrocode} +% End of change +% \begin{macrocode} + \@outputpage + \begingroup + \@dblfloatplacement + \@startdblcolumn + \@whilesw\if@fcolmade \fi{\@outputpage\@startdblcolumn}% + \endgroup + \fi} +% \end{macrocode} +% +% \subsubsection{Preserving Float Order} +% +% Changes |\@dbldeferlist| to |\@deferlist| are not explicitly noted +% but are flagged by blank comment lines around the changed line. +% +% +% \begin{macrocode} +\def\end@dblfloat{% +\if@twocolumn + \@endfloatbox + \ifnum\@floatpenalty <\z@ + \@largefloatcheck +% \end{macrocode} +% +% Force the depth of two column float boxes. +% \begin{macrocode} + \global\dp\@currbox1sp % +% \end{macrocode} +% +% \changes{v1.1d}{2000/09/24}{FMi: use output routine to +% defer float} +% Next line assumes that first token of |\end@float| is +% |\@endfloatbox| so we gobble that. +% \begin{macrocode} +% \@cons\@deferlist\@currbox + \expandafter\@gobble\end@float +% \end{macrocode} +% |\@Esphack| is then added by |\@endfloat| above. +% \begin{macrocode} + \fi +% \ifnum \@floatpenalty =-\@Mii \@Esphack\fi +\else + \end@float +\fi +} +% \end{macrocode} +% +% Test if the float box has the wrong width. (Actually as noted above +% the test is for a conventional depth setting rather than for the +% width of the float). +% \begin{macrocode} +\def\@testwrongwidth #1{% + \ifdim\dp#1=\f@depth + \else + \global\@testtrue + \fi} +% \end{macrocode} +% +% Normally looking for single column floats, which have zero depth. +% \begin{macrocode} +\let\f@depth\z@ +% \end{macrocode} +% +% but when making two column float area, look for floats with 1sp +% depth. +% \begin{macrocode} +\def\@dblfloatplacement{\global\@dbltopnum\c@dbltopnumber + \global\@dbltoproom \dbltopfraction\@colht + \@textmin \@colht + \advance \@textmin -\@dbltoproom + \@fpmin \dblfloatpagefraction\textheight + \@fptop \@dblfptop + \@fpsep \@dblfpsep + \@fpbot \@dblfpbot +% \end{macrocode} +% +% \begin{macrocode} + \def\f@depth{1sp}} +% \end{macrocode} +% +% All the remaining changes are replacing the double column defer list +% or insering the extra test |\@testwrongwidth|\marg{box} at suitable +% places. That is at plces where a box is taken off the deferlist. +% \begin{macrocode} +\def \@doclearpage {% + \ifvoid\footins + \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa + \setbox\@tempboxa\box\@cclv + \xdef\@deferlist{\@toplist\@botlist\@deferlist}% + \global \let \@toplist \@empty + \global \let \@botlist \@empty + \global \@colroom \@colht + \ifx \@currlist\@empty + \else + \@latexerr{Float(s) lost}\@ehb + \global \let \@currlist \@empty + \fi + \@makefcolumn\@deferlist + \@whilesw\if@fcolmade \fi{\@opcol\@makefcolumn\@deferlist}% + \if@twocolumn + \if@firstcolumn +% \end{macrocode} +% +% \begin{macrocode} + \xdef\@deferlist{\@dbltoplist\@deferlist}% +% \end{macrocode} +% +% \begin{macrocode} + \global \let \@dbltoplist \@empty + \global \@colht \textheight + \begingroup + \@dblfloatplacement +% \end{macrocode} +% +% \begin{macrocode} + \@makefcolumn\@deferlist + \@whilesw\if@fcolmade \fi{\@outputpage + \@makefcolumn\@deferlist}% +% \end{macrocode} +% +% \begin{macrocode} + \endgroup + \else + \vbox{}\clearpage + \fi + \fi +% \end{macrocode} +% the next line is needed to avoid loosing floats in certain +% circumstances a single call to the original |\doclearpage| +% will now no longer output all floats. +% \changes{v1.1d}{2000/09/24}{FMi: ensure \cs{doclearpage} +% is called again until all floats are output.} +% \begin{macrocode} + \ifx\@deferlist\@empty \else\clearpage \fi + \else + \setbox\@cclv\vbox{\box\@cclv\vfil}% + \@makecol\@opcol + \clearpage + \fi +} +% \end{macrocode} +% +% \begin{macrocode} +\def \@startdblcolumn {% + \@tryfcolumn \@deferlist + \if@fcolmade + \else + \begingroup + \let \reserved@b \@deferlist + \global \let \@deferlist \@empty + \let \@elt \@sdblcolelt + \reserved@b + \endgroup + \fi +} +% \end{macrocode} +% +% \begin{macrocode} +\def\@addtonextcol{% + \begingroup + \@insertfalse + \@setfloattypecounts + \ifnum \@fpstype=8 + \else + \ifnum \@fpstype=24 + \else + \@flsettextmin + \@reqcolroom \ht\@currbox + \advance \@reqcolroom \@textmin + \ifdim \@colroom>\@reqcolroom + \@flsetnum \@colnum + \ifnum\@colnum>\z@ + \@bitor\@currtype\@deferlist + \@testwrongwidth\@currbox + \if@test + \else + \@addtotoporbot + \fi + \fi + \fi + \fi + \fi + \if@insert + \else + \@cons\@deferlist\@currbox + \fi + \endgroup +} +% \end{macrocode} +% +% \begin{macrocode} +\def\@addtodblcol{% + \begingroup + \@insertfalse + \@setfloattypecounts + \@getfpsbit \tw@ + \ifodd\@tempcnta + \@flsetnum \@dbltopnum + \ifnum \@dbltopnum>\z@ + \@tempswafalse + \ifdim \@dbltoproom>\ht\@currbox + \@tempswatrue + \else + \ifnum \@fpstype<\sixt@@n + \advance \@dbltoproom \@textmin + \ifdim \@dbltoproom>\ht\@currbox + \@tempswatrue + \fi + \advance \@dbltoproom -\@textmin + \fi + \fi + \if@tempswa + \@bitor \@currtype \@deferlist +% \end{macrocode} +% +% not in fixfloats? +% \begin{macrocode} + \@testwrongwidth\@currbox +% \end{macrocode} +% +% \begin{macrocode} + \if@test + \else + \@tempdima -\ht\@currbox + \advance\@tempdima + -\ifx \@dbltoplist\@empty \dbltextfloatsep \else + \dblfloatsep \fi + \global \advance \@dbltoproom \@tempdima + \global \advance \@colht \@tempdima + \global \advance \@dbltopnum \m@ne + \@cons \@dbltoplist \@currbox + \@inserttrue + \fi + \fi + \fi + \fi + \if@insert + \else + \@cons\@deferlist\@currbox + \fi + \endgroup +} +% \end{macrocode} +% +% \begin{macrocode} +\def \@addtocurcol {% + \@insertfalse + \@setfloattypecounts + \ifnum \@fpstype=8 + \else + \ifnum \@fpstype=24 + \else + \@flsettextmin + \advance \@textmin \@textfloatsheight + \@reqcolroom \@pageht + \ifdim \@textmin>\@reqcolroom + \@reqcolroom \@textmin + \fi + \advance \@reqcolroom \ht\@currbox + \ifdim \@colroom>\@reqcolroom + \@flsetnum \@colnum + \ifnum \@colnum>\z@ + \@bitor\@currtype\@deferlist +% \end{macrocode} +% We need to defer the float also if its width +% doesn't fit. +% \changes{v1.1d}{2000/09/24}{FMi: test for wide float was +% in wrong place} +% \begin{macrocode} + \@testwrongwidth\@currbox +% \end{macrocode} +% +% \begin{macrocode} + \if@test + \else + \@bitor\@currtype\@botlist + \if@test + \@addtobot + \else + \ifodd \count\@currbox + \advance \@reqcolroom \intextsep + \ifdim \@colroom>\@reqcolroom + \global \advance \@colnum \m@ne + \global \advance \@textfloatsheight \ht\@currbox + \global \advance \@textfloatsheight 2\intextsep + \@cons \@midlist \@currbox + \if@nobreak + \nobreak + \@nobreakfalse + \everypar{}% + \else + \addpenalty \interlinepenalty + \fi + \vskip \intextsep + \box\@currbox + \penalty\interlinepenalty + \vskip\intextsep + \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi + \outputpenalty \z@ + \@inserttrue + \fi + \fi + \if@insert + \else + \@addtotoporbot + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \if@insert + \else + \@resethfps + \@cons\@deferlist\@currbox + \fi +} +% \end{macrocode} +% +% \begin{macrocode} +\def\@xtryfc #1{% + \@next\reserved@a\@trylist{}{}% + \@currtype \count #1% + \divide\@currtype\@xxxii + \multiply\@currtype\@xxxii + \@bitor \@currtype \@failedlist + \@testfp #1% +% \end{macrocode} +% +% \begin{macrocode} + \@testwrongwidth #1% +% \end{macrocode} +% +% \begin{macrocode} + \ifdim \ht #1>\@colht + \@testtrue + \fi + \if@test + \@cons\@failedlist #1% + \else + \@ytryfc #1% + \fi} +% \end{macrocode} +% +% \begin{macrocode} +\def\@ztryfc #1{% + \@tempcnta\count #1% + \divide\@tempcnta\@xxxii + \multiply\@tempcnta\@xxxii + \@bitor \@tempcnta {\@failedlist \@flfail}% + \@testfp #1% +% \end{macrocode} +% +% not in fixfloats? +% \begin{macrocode} + \@testwrongwidth #1% +% \end{macrocode} +% +% \begin{macrocode} + \@tempdimb\@tempdima + \advance\@tempdimb\ht #1% + \advance\@tempdimb\@fpsep + \ifdim \@tempdimb >\@colht + \@testtrue + \fi + \if@test + \@cons\@flfail #1% + \else + \@cons\@flsucceed #1% + \@tempdima\@tempdimb + \fi} +% \end{macrocode} +% +% +% +% +% +% +% \subsection{\texttt{\textbackslash @} discards spaces when moving +% (pr3039)} +% +% \begin{macro}{\@} +% Ensure that |\@m| can't eat spaces. Alternative would be to make +% |\@| robust but that takes more space. +% \begin{macrocode} +\def\@{\spacefactor\@m{}} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{\texttt{\textbackslash setlength} produces error if +% used with registers like \texttt{\textbackslash dimen0} (pr/3066)} +% +% \begin{macro}{\setlength} +% Add space after register (|#1|) but only if this is still the +% original definition. When, for example, \Lpack{calc} was already +% loaded this wouldn't be a good idea any more. +% \changes{v1.0c}{2000/09/21}{Don't change if definition was +% modified already} +% \begin{macrocode} +\def\@tempa#1#2{#1#2\relax} +\ifx\setlength\@tempa + \def\setlength#1#2{#1 #2\relax} +\fi +% \end{macrocode} +% \end{macro} +% +% +% \subsection{\texttt{\textbackslash addpenalty} ruins flush-bottom +% (pr/3073)} +% +% \begin{macro}{\addpenalty} +% Fix provided by Donald (though the original fix was not good enough). +% \begin{macrocode} +\def\addpenalty#1{% + \ifvmode + \if@minipage + \else + \if@nobreak + \else + \ifdim\lastskip=\z@ + \penalty#1\relax + \else + \@tempskipb\lastskip + \advance \@tempskipb + \ifdim\prevdepth>\maxdepth\maxdepth\else +% \end{macrocode} +% If |\prevdepth| is -1000pt due to |\nointerlineskip| we better +% not add it! +% \changes{v1.0c}{2000/09/21}{Don't add \cs{prevdepth} if it is a +% senile value!} +% \begin{macrocode} + \ifdim \prevdepth = -\@m\p@ \z@ \else \prevdepth \fi + \fi + \vskip -\@tempskipb + \penalty#1% + \vskip\@tempskipb + \fi + \fi + \fi + \else + \@noitemerr + \fi} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{\texttt{\textbackslash fnsymbol} should use text symbols +% if possible (pr/3400)} +% +% \begin{macrocode} +\DeclareRobustCommand{\@fnsymbol}[1]{% + \ifmmode + \ifcase#1\or *\or\dagger\or \ddagger\or + \mathsection\or \mathparagraph\or \|\or **\or + \dagger\dagger + \or \ddagger\ddagger \else\@ctrerr\fi + \else + \ifcase#1\or \textasteriskcentered\or \textdagger\or + \textdaggerdbl\or \textsection\or \textparagraph\or + \textbardbl\or \textasteriskcentered\textasteriskcentered\or + \textdagger\textdagger\or \textdaggerdbl\textdaggerdbl + \else\@ctrerr\fi + \fi} +% \end{macrocode} +% +% \subsection{No hyphenation in first word after float environment(pr/3498)} +% +% Fix suggested by Donald Arseneau. +% \changes{v1.1g}{2003/09/19}{Fix for \cs{@esphack} (pr/3498)} +% \changes{v1.1h}{2004/02/13}{Fix for \cs{@Esphack} (pr/3498)} +% \begin{macrocode} +\def\@esphack{% + \relax + \ifhmode + \spacefactor\@savsf + \ifdim\@savsk>\z@ + \nobreak \hskip\z@skip % <------ + \ignorespaces + \fi + \fi} +% \end{macrocode} +% +% \begin{macrocode} +\def\@Esphack{% + \relax + \ifhmode + \spacefactor\@savsf + \ifdim\@savsk>\z@ + \nobreak \hskip\z@skip % <------ + \@ignoretrue + \ignorespaces + \fi + \fi} +% \end{macrocode} +% +% +% \subsection{Allowing \texttt{\textbackslash emph} to produce small +% caps, etc} +% +% \changes{v1.1g}{2003/09/19}{Allow \cs{emph} to produce small caps} +% \begin{macrocode} +\DeclareRobustCommand\em + {\@nomath\em \ifdim \fontdimen\@ne\font >\z@ + \eminnershape \else \itshape \fi} +\def\eminnershape{\upshape} +% \end{macrocode} +% +% \begin{macrocode} +%</fixltx2e> +% \end{macrocode} +% +% \subsection{Using EC fonts (T1 encoding) makes my documents look +% bl**dy horrible} +% +% \subsubsection{Preliminaries} +% The \LaTeX{} kernel does not declare the font encoding TS1. +% However, we are going to set up font definitions for this encoding, +% so we have to declare it now. +% \begin{macrocode} +%<*fix-cm> +\input{ts1enc.def} +% \end{macrocode} +% +% In case the package is loaded in the preamble, any of the CM fonts may +% have been used already and cannot be redefined. Yet we try to +% intercept at least the problem that is most likely to occur, i.e., +% a hidden \cmd{\normalfont}. Most of the standard definitions +% are ok, but those for T1 encoding and 10.95\,pt need to be removed: +% \begin{macrocode} +\expandafter \let \csname T1/cmr/m/n/10.95\endcsname \relax +\expandafter \let \csname T1/cmss/m/n/10.95\endcsname \relax +\expandafter \let \csname T1/cmtt/m/n/10.95\endcsname \relax +\expandafter \let \csname T1/cmvtt/m/n/10.95\endcsname \relax +% \end{macrocode} +% +% \Lpack{fix-cm} may still fail, if the EC fonts are preloaded in the +% \LaTeX{} format file. This situation is, however, very unlikely and could occur +% only with a customized format. +% +% The remainder of the package is enclosed in a group, where the catcodes +% are guaranteed to be appropriate for the processing of font definitions. +% \begin{macrocode} +\begingroup +\nfss@catcodes +% \end{macrocode} +% +% \subsubsection{T1 encoding} +% +% \paragraph{CM Roman} +% \begin{macrocode} +\DeclareFontFamily{T1}{cmr}{} +\DeclareFontShape{T1}{cmr}{m}{n}{ + <-6> ecrm0500 + <6-7> ecrm0600 + <7-8> ecrm0700 + <8-9> ecrm0800 + <9-10> ecrm0900 + <10-12> ecrm1000 + <12-17> ecrm1200 + <17-> ecrm1728 + }{} +\DeclareFontShape{T1}{cmr}{m}{sl}{ + <-6> ecsl0500 + <6-7> ecsl0600 + <7-8> ecsl0700 + <8-9> ecsl0800 + <9-10> ecsl0900 + <10-12> ecsl1000 + <12-17> ecsl1200 + <17-> ecsl1728 + }{} +\DeclareFontShape{T1}{cmr}{m}{it}{ + <-8> ecti0700 + <8-9> ecti0800 + <9-10> ecti0900 + <10-12> ecti1000 + <12-17> ecti1200 + <17-> ecti1728 + }{} +\DeclareFontShape{T1}{cmr}{m}{sc}{ + <-6> eccc0500 + <6-7> eccc0600 + <7-8> eccc0700 + <8-9> eccc0800 + <9-10> eccc0900 + <10-12> eccc1000 + <12-17> eccc1200 + <17-> eccc1728 + }{} +\DeclareFontShape{T1}{cmr}{m}{ui}{ + <-8> ecui0700 + <8-9> ecui0800 + <9-10> ecui0900 + <10-12> ecui1000 + <12-17> ecui1200 + <17-> ecui1728 + }{} +\DeclareFontShape{T1}{cmr}{b}{n}{ + <-6> ecrb0500 + <6-7> ecrb0600 + <7-8> ecrb0700 + <8-9> ecrb0800 + <9-10> ecrb0900 + <10-12> ecrb1000 + <12-17> ecrb1200 + <17-> ecrb1728 + }{} +\DeclareFontShape{T1}{cmr}{bx}{n}{ + <-6> ecbx0500 + <6-7> ecbx0600 + <7-8> ecbx0700 + <8-9> ecbx0800 + <9-10> ecbx0900 + <10-12> ecbx1000 + <12-> ecbx1200 + }{} +\DeclareFontShape{T1}{cmr}{bx}{sl}{ + <-6> ecbl0500 + <6-7> ecbl0600 + <7-8> ecbl0700 + <8-9> ecbl0800 + <9-10> ecbl0900 + <10-12> ecbl1000 + <12-> ecbl1200 + }{} +\DeclareFontShape{T1}{cmr}{bx}{it}{ + <-8> ecbi0700 + <8-9> ecbi0800 + <9-10> ecbi0900 + <10-12> ecbi1000 + <12-> ecbi1200 + }{} +\DeclareFontShape{T1}{cmr}{bx}{sc}{ + <-6> ecxc0500 + <6-7> ecxc0600 + <7-8> ecxc0700 + <8-9> ecxc0800 + <9-10> ecxc0900 + <10-12> ecxc1000 + <12-> ecxc1200 + }{} +% +% \end{macrocode} +% +% \paragraph{CM Sans} +% \begin{macrocode} +\DeclareFontFamily{T1}{cmss}{} +\DeclareFontShape{T1}{cmss}{m}{n}{ + <-9> ecss0800 + <9-10> ecss0900 + <10-12> ecss1000 + <12-17> ecss1200 + <17-> ecss1728 + }{} +\DeclareFontShape{T1}{cmss}{m}{sl}{ + <-9> ecsi0800 + <9-10> ecsi0900 + <10-12> ecsi1000 + <12-17> ecsi1200 + <17-> ecsi1728 + }{} +\DeclareFontShape{T1}{cmss}{m}{it} + {<->ssub*cmss/m/sl}{} +\DeclareFontShape{T1}{cmss}{m}{sc} + {<->sub*cmr/m/sc}{} +\DeclareFontShape{T1}{cmss}{sbc}{n}{ + <-> ecssdc10 + }{} +\DeclareFontShape{T1}{cmss}{bx}{n}{ + <-10> ecsx0900 + <10-> ecsx1000 + }{} +\DeclareFontShape{T1}{cmss}{bx}{sl}{ + <-10> ecso0900 + <10-> ecso1000 + }{} +\DeclareFontShape{T1}{cmss}{bx}{it} + {<->ssub*cmss/bx/sl}{} +% \end{macrocode} +% The following substitutions are not provided in the default +% \file{.fd} files. I have included them, so that you can +% easily use the EC fonts with the default bold series being +% \file{b} rather than \file{bx}. +% \begin{macrocode} +\DeclareFontShape{T1}{cmss}{b}{n} + {<->ssub*cmss/bx/n}{} +\DeclareFontShape{T1}{cmss}{b}{sl} + {<->ssub*cmss/bx/sl}{} +\DeclareFontShape{T1}{cmss}{b}{it} + {<->ssub*cmss/bx/sl}{} +% \end{macrocode} +% +% \paragraph{CM Typewriter} +% \begin{macrocode} +\DeclareFontFamily{T1}{cmtt}{\hyphenchar \font\m@ne} +\DeclareFontShape{T1}{cmtt}{m}{n}{ + <-9> ectt0800 + <9-10> ectt0900 + <10-12> ectt1000 + <12-17> ectt1200 + <17-> ectt1728 + }{} +\DeclareFontShape{T1}{cmtt}{m}{it}{ + <-9> ecit0800 + <9-10> ecit0900 + <10-12> ecit1000 + <12-17> ecit1200 + <17-> ecit1728 + }{} +\DeclareFontShape{T1}{cmtt}{m}{sl}{ + <-9> ecst0800 + <9-10> ecst0900 + <10-12> ecst1000 + <12-17> ecst1200 + <17-> ecst1728 + }{} +\DeclareFontShape{T1}{cmtt}{m}{sc}{ + <-9> ectc0800 + <9-10> ectc0900 + <10-12> ectc1000 + <12-17> ectc1200 + <17-> ectc1728 + }{} +\DeclareFontShape{T1}{cmtt}{bx}{n} + {<->sub * cmtt/m/n}{} +\DeclareFontShape{T1}{cmtt}{bx}{it} + {<->sub * cmtt/m/it}{} +\DeclareFontShape{T1}{cmtt}{bx}{sl} + {<->sub * cmtt/m/sl}{} +% \end{macrocode} +% Substitutions not provided in the default \file{.fd} files: +% \begin{macrocode} +\DeclareFontShape{T1}{cmtt}{b}{n} + {<->sub * cmtt/m/n}{} +\DeclareFontShape{T1}{cmtt}{b}{it} + {<->sub * cmtt/m/it}{} +\DeclareFontShape{T1}{cmtt}{b}{sl} + {<->sub * cmtt/m/sl}{} +% \end{macrocode} +% +% \paragraph{CM Typewiter (var.)} +% \begin{macrocode} +\DeclareFontFamily{T1}{cmvtt}{} +\DeclareFontShape{T1}{cmvtt}{m}{n}{ + <-9> ecvt0800 + <9-10> ecvt0900 + <10-12> ecvt1000 + <12-17> ecvt1200 + <17-> ecvt1728 + }{} +\DeclareFontShape{T1}{cmvtt}{m}{it}{ + <-9> ecvi0800 + <9-10> ecvi0900 + <10-12> ecvi1000 + <12-17> ecvi1200 + <17-> ecvi1728 + }{} +% \end{macrocode} +% +% \subsubsection{TS1 encoding} +% +% \paragraph{CM Roman} +% \begin{macrocode} +\DeclareFontFamily{TS1}{cmr}{\hyphenchar\font\m@ne} +\DeclareFontShape{TS1}{cmr}{m}{n}{ + <-6> tcrm0500 + <6-7> tcrm0600 + <7-8> tcrm0700 + <8-9> tcrm0800 + <9-10> tcrm0900 + <10-12> tcrm1000 + <12-17> tcrm1200 + <17-> tcrm1728 + }{} +\DeclareFontShape{TS1}{cmr}{m}{sl}{ + <-6> tcsl0500 + <6-7> tcsl0600 + <7-8> tcsl0700 + <8-9> tcsl0800 + <9-10> tcsl0900 + <10-12> tcsl1000 + <12-17> tcsl1200 + <17-> tcsl1728 + }{} +\DeclareFontShape{TS1}{cmr}{m}{it}{ + <-8> tcti0700 + <8-9> tcti0800 + <9-10> tcti0900 + <10-12> tcti1000 + <12-17> tcti1200 + <17-> tcti1728 + }{} +\DeclareFontShape{TS1}{cmr}{m}{ui}{ + <-8> tcui0700 + <8-9> tcui0800 + <9-10> tcui0900 + <10-12> tcui1000 + <12-17> tcui1200 + <17-> tcui1728 + }{} +\DeclareFontShape{TS1}{cmr}{b}{n}{ + <-6> tcrb0500 + <6-7> tcrb0600 + <7-8> tcrb0700 + <8-9> tcrb0800 + <9-10> tcrb0900 + <10-12> tcrb1000 + <12-17> tcrb1200 + <17-> tcrb1728 + }{} +\DeclareFontShape{TS1}{cmr}{bx}{n}{ + <-6> tcbx0500 + <6-7> tcbx0600 + <7-8> tcbx0700 + <8-9> tcbx0800 + <9-10> tcbx0900 + <10-12> tcbx1000 + <12-> tcbx1200 + }{} +\DeclareFontShape{TS1}{cmr}{bx}{sl}{ + <-6> tcbl0500 + <6-7> tcbl0600 + <7-8> tcbl0700 + <8-9> tcbl0800 + <9-10> tcbl0900 + <10-12> tcbl1000 + <12-> tcbl1200 + }{} +\DeclareFontShape{TS1}{cmr}{bx}{it}{ + <-8> tcbi0700 + <8-9> tcbi0800 + <9-10> tcbi0900 + <10-12> tcbi1000 + <12-> tcbi1200 + }{} +% \end{macrocode} +% +% \paragraph{CM Sans} +% \begin{macrocode} +\DeclareFontFamily{TS1}{cmss}{\hyphenchar\font\m@ne} +\DeclareFontShape{TS1}{cmss}{m}{n}{ + <-9> tcss0800 + <9-10> tcss0900 + <10-12> tcss1000 + <12-17> tcss1200 + <17-> tcss1728 + }{} +\DeclareFontShape{TS1}{cmss}{m}{it} + {<->ssub*cmss/m/sl}{} +\DeclareFontShape{TS1}{cmss}{m}{sl}{ + <-9> tcsi0800 + <9-10> tcsi0900 + <10-12> tcsi1000 + <12-17> tcsi1200 + <17-> tcsi1728 + }{} +\DeclareFontShape{TS1}{cmss}{sbc}{n}{ + <-> tcssdc10 + }{} +\DeclareFontShape{TS1}{cmss}{bx}{n}{ + <-10> tcsx0900 + <10-> tcsx1000 + }{} +\DeclareFontShape{TS1}{cmss}{bx}{sl}{ + <-10> tcso0900 + <10-> tcso1000 + }{} +\DeclareFontShape{TS1}{cmss}{bx}{it} + {<->ssub*cmss/bx/sl}{} +% \end{macrocode} +% Substitutions not provided in the default \file{.fd} files: +% \begin{macrocode} +\DeclareFontShape{TS1}{cmss}{b}{n} + {<->ssub*cmss/bx/n}{} +\DeclareFontShape{TS1}{cmss}{b}{sl} + {<->ssub*cmss/bx/sl}{} +\DeclareFontShape{TS1}{cmss}{b}{it} + {<->ssub*cmss/bx/sl}{} +% \end{macrocode} +% +% \paragraph{CM Typewriter} +% \begin{macrocode} +\DeclareFontFamily{TS1}{cmtt}{\hyphenchar \font\m@ne} +\DeclareFontShape{TS1}{cmtt}{m}{n}{ + <-9> tctt0800 + <9-10> tctt0900 + <10-12> tctt1000 + <12-17> tctt1200 + <17-> tctt1728 + }{} +\DeclareFontShape{TS1}{cmtt}{m}{it}{ + <-9> tcit0800 + <9-10> tcit0900 + <10-12> tcit1000 + <12-17> tcit1200 + <17-> tcit1728 + }{} +\DeclareFontShape{TS1}{cmtt}{m}{sl}{ + <-9> tcst0800 + <9-10> tcst0900 + <10-12> tcst1000 + <12-17> tcst1200 + <17-> tcst1728 + }{} +\DeclareFontShape{TS1}{cmtt}{bx}{n} + {<->sub * cmtt/m/n}{} +\DeclareFontShape{TS1}{cmtt}{bx}{it} + {<->sub * cmtt/m/it}{} +\DeclareFontShape{TS1}{cmtt}{bx}{sl} + {<->sub * cmtt/m/sl}{} +% \end{macrocode} +% Substitutions not provided in the default \file{.fd} files: +% \begin{macrocode} +\DeclareFontShape{TS1}{cmtt}{b}{n} + {<->sub * cmtt/m/n}{} +\DeclareFontShape{TS1}{cmtt}{b}{it} + {<->sub * cmtt/m/it}{} +\DeclareFontShape{TS1}{cmtt}{b}{sl} + {<->sub * cmtt/m/sl}{} +% \end{macrocode} +% +% \paragraph{CM Typewriter (var.)} +% \begin{macrocode} +\DeclareFontFamily{TS1}{cmvtt}{} +\DeclareFontShape{TS1}{cmvtt}{m}{n}{ + <-9> tcvt0800 + <9-10> tcvt0900 + <10-12> tcvt1000 + <12-17> tcvt1200 + <17-> tcvi1728 + }{} +\DeclareFontShape{TS1}{cmvtt}{m}{it}{ + <-9> tcvi0800 + <9-10> tcvi0900 + <10-12> tcvi1000 + <12-17> tcvi1200 + <17-> tcvi1728 + }{} +% \end{macrocode} +% +% \subsubsection{OT1 encoding} +% +% \paragraph{CM Roman} +% \begin{macrocode} +\DeclareFontFamily{OT1}{cmr}{\hyphenchar\font45 } +\DeclareFontShape{OT1}{cmr}{m}{n}{ + <-6> cmr5 + <6-7> cmr6 + <7-8> cmr7 + <8-9> cmr8 + <9-10> cmr9 + <10-12> cmr10 + <12-17> cmr12 + <17-> cmr17 + }{} +\DeclareFontShape{OT1}{cmr}{m}{sl}{ + <-9> cmsl8 + <9-10> cmsl9 + <10-12> cmsl10 + <12-> cmsl12 + }{} +\DeclareFontShape{OT1}{cmr}{m}{it}{ + <-8> cmti7 + <8-9> cmti8 + <9-10> cmti9 + <10-12> cmti10 + <12-> cmti12 + }{} +\DeclareFontShape{OT1}{cmr}{m}{sc}{ + <-> cmcsc10 + }{} +\DeclareFontShape{OT1}{cmr}{m}{ui}{ + <-> cmu10 + }{} +\DeclareFontShape{OT1}{cmr}{b}{n}{ + <-> cmb10 + }{} +\DeclareFontShape{OT1}{cmr}{bx}{n}{ + <-6> cmbx5 + <6-7> cmbx6 + <7-8> cmbx7 + <8-9> cmbx8 + <9-10> cmbx9 + <10-12> cmbx10 + <12-> cmbx12 + }{} +\DeclareFontShape{OT1}{cmr}{bx}{sl}{ + <-> cmbxsl10 + }{} +\DeclareFontShape{OT1}{cmr}{bx}{it}{ + <-> cmbxti10 + }{} +\DeclareFontShape{OT1}{cmr}{bx}{ui} + {<->sub*cmr/m/ui}{} +% \end{macrocode} +% +% \paragraph{CM Sans} +% \begin{macrocode} +\DeclareFontFamily{OT1}{cmss}{\hyphenchar\font45 } +\DeclareFontShape{OT1}{cmss}{m}{n}{ + <-9> cmss8 + <9-10> cmss9 + <10-12> cmss10 + <12-17> cmss12 + <17-> cmss17 + }{} +\DeclareFontShape{OT1}{cmss}{m}{it} + {<->sub*cmss/m/sl}{} +\DeclareFontShape{OT1}{cmss}{m}{sl}{ + <-9> cmssi8 + <9-10> cmssi9 + <10-12> cmssi10 + <12-17> cmssi12 + <17-> cmssi17 + }{} +\DeclareFontShape{OT1}{cmss}{m}{sc} + {<->sub*cmr/m/sc}{} +\DeclareFontShape{OT1}{cmss}{m}{ui} + {<->sub*cmr/m/ui}{} +\DeclareFontShape{OT1}{cmss}{sbc}{n}{ + <-> cmssdc10 + }{} +\DeclareFontShape{OT1}{cmss}{bx}{n}{ + <-> cmssbx10 + }{} +\DeclareFontShape{OT1}{cmss}{bx}{ui} + {<->sub*cmr/bx/ui}{} +% \end{macrocode} +% +% \paragraph{CM Typewriter} +% \begin{macrocode} +\DeclareFontFamily{OT1}{cmtt}{\hyphenchar \font\m@ne} +\DeclareFontShape{OT1}{cmtt}{m}{n}{ + <-9> cmtt8 + <9-10> cmtt9 + <10-12> cmtt10 + <12-> cmtt12 + }{} +\DeclareFontShape{OT1}{cmtt}{m}{it}{ + <-> cmitt10 + }{} +\DeclareFontShape{OT1}{cmtt}{m}{sl}{ + <-> cmsltt10 + }{} +\DeclareFontShape{OT1}{cmtt}{m}{sc}{ + <-> cmtcsc10 + }{} +\DeclareFontShape{OT1}{cmtt}{m}{ui} + {<->ssub*cmtt/m/it}{} +\DeclareFontShape{OT1}{cmtt}{bx}{n} + {<->ssub*cmtt/m/n}{} +\DeclareFontShape{OT1}{cmtt}{bx}{it} + {<->ssub*cmtt/m/it}{} +\DeclareFontShape{OT1}{cmtt}{bx}{ui} + {<->ssub*cmtt/m/it}{} +% \end{macrocode} +% +% \paragraph{CM Typewriter (var.)} +% \begin{macrocode} +\DeclareFontFamily{OT1}{cmvtt}{\hyphenchar\font45 } +\DeclareFontShape{OT1}{cmvtt}{m}{n}{ + <-> cmvtt10 + }{} +\DeclareFontShape{OT1}{cmvtt}{m}{it}{ + <-> cmvtti10 + }{} +% \end{macrocode} +% +% \subsubsection{OML and OMS encoded math fonts} +% \begin{macrocode} +\DeclareFontFamily{OML}{cmm}{\skewchar\font127 } +\DeclareFontShape{OML}{cmm}{m}{it}{ + <-6> cmmi5 + <6-7> cmmi6 + <7-8> cmmi7 + <8-9> cmmi8 + <9-10> cmmi9 + <10-12> cmmi10 + <12-> cmmi12 + }{} +\DeclareFontShape{OML}{cmm}{b}{it}{<-6>cmmib5<6-8>cmmib7<8->cmmib10}{} +\DeclareFontShape{OML}{cmm}{bx}{it} + {<->ssub*cmm/b/it}{} +% \end{macrocode} +% \begin{macrocode} +\DeclareFontFamily{OMS}{cmsy}{\skewchar\font48 } +\DeclareFontShape{OMS}{cmsy}{m}{n}{ + <-6> cmsy5 + <6-7> cmsy6 + <7-8> cmsy7 + <8-9> cmsy8 + <9-10> cmsy9 + <10-> cmsy10 + }{} +\DeclareFontShape{OMS}{cmsy}{b}{n}{<-6>cmbsy5<6-8>cmbsy7<8->cmbsy10}{} +% \end{macrocode} +% +% \subsubsection{\LaTeX{} symbols} +% \begin{macrocode} +\DeclareFontFamily{U}{lasy}{} +\DeclareFontShape{U}{lasy}{m}{n}{ + <-6> lasy5 + <6-7> lasy6 + <7-8> lasy7 + <8-9> lasy8 + <9-10> lasy9 + <10-> lasy10 + }{} +\DeclareFontShape{U}{lasy}{b}{n}{ + <-10> ssub * lasy/m/n + <10-> lasyb10 + }{} +% \end{macrocode} +% \begin{macrocode} +\endgroup +%</fix-cm> +% \end{macrocode} +% +% +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/base/fixltx2e.ins b/Master/texmf-dist/source/latex/base/fixltx2e.ins new file mode 100644 index 00000000000..5249b421a9b --- /dev/null +++ b/Master/texmf-dist/source/latex/base/fixltx2e.ins @@ -0,0 +1,82 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\generateFile{fixltx2e.sty}{t}{% + \from{fixltx2e.dtx}{fixltx2e}} + +\generateFile{fix-cm.sty}{t}{% + \from{fixltx2e.dtx}{fix-cm}} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/fontdef.dtx b/Master/texmf-dist/source/latex/base/fontdef.dtx new file mode 100644 index 00000000000..4d9f5b35cd5 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/fontdef.dtx @@ -0,0 +1,1337 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%%% From File: fontdef.dtx +%<*dtx> + \ProvidesFile{fontdef.dtx} +%</dtx> +%<text, >\ProvidesFile{fonttext.ltx} +%<math, >\ProvidesFile{fontmath.ltx} +%<+cfgtext>\ProvidesFile{fonttext.cfg} +%<+cfgmath>\ProvidesFile{fontmath.cfg} +%<+cfgprel>\ProvidesFile{preload.cfg} +%<driver, >\ProvidesFile{fontdef.drv} +% \fi +% \ProvidesFile{fontdef.dtx} + [2004/02/04 v2.3a LaTeX Kernel +% \iftrue (\else +%<text, >(Text +%<math, >(Math +%<+cfgtext>(Uncustomised text +%<+cfgmath>(Uncustomised math +%<+cfgprel>(Uncustomised preload +% \fi + font setup)] +% +% \CheckSum{1463} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +%\iffalse This is a META comment +% +% File `fontdef.dtx'. +% Copyright (C) 1989-1999 Frank Mittelbach and Rainer Sch\"opf, +% All rights reserved. +% +%\fi +% +% \changes{v2.1a}{1993/12/01}{Update for LaTeX2e} +% \changes{v2.2a}{1994/10/14}{New coding} +% \changes{v2.2i}{1994/12/02}{Commented out \cs{ldots}. ASAJ.} +% \changes{v2.2j}{1995/05/11}{Updates to some plain macros} +% \changes{v2.2l}{1995/10/03}{\cs{@@sqrt} from patch file for /1701} +% \changes{v2.2o}{1996/05/17}{\cs{@@sqrt} removed, at last} +% \changes{v2.2p}{1996/11/20}{lowercase fd and enc.def file names /1044} +% \changes{v2.2x}{1999/01/05}{Need special protection for character +% \texttt{\char62} in \cs{changes} entry.} +% +% \title{The \texttt{fontdef.dtx} file\thanks +% {This file has version number \fileversion, dated \filedate}} +% \author{Frank Mittelbach \and Rainer Sch\"opf} +% +% \def\dst{{\normalfont\scshape docstrip}} +% \setcounter{StandardModuleDepth}{1} +% +% +% \maketitle +% +% \section{Introduction} +% +% This file is used to generate the files \texttt{fonttext.ltx} (text +% font declarations) and \texttt{fontmath.ltx} (math font +% declarations), which are used during the format generation. It +% contains the declaration of the standard text encodings used at the +% site as well as a minimal subset of font shape groups that NFSS will +% look at to ensure that the specified encodings are valid. +% +% The math part contains the setup for math encodings as well as the +% default math symbol declarations that belong to the encoding. +% +% It is possible to change this setup (by using other fonts, or +% defaults) without losing the ability to +% process documents written at other sites. Portability in this sense +% means that a document will compile without errors. It does not mean, +% however, that identical output will be produced. For this it is +% necessary that the distributed setup is used at both installations. +% +% \section{Customization} +% +% You are not allowed to change this source file! If you want to +% change the default encodings and/or the font shape groups preloaded +% you should should create a copy of \texttt{fonttext.ltx} +% under the name \texttt{fonttext.cfg} and change this copy. If +% \LaTeXe{} finds a file of this name it will use it, otherwise it +% uses the standard file which is \texttt{fontdef.ltx}. +% +% If you don't plan to use Computer Modern much or at all, it might +% (!) be a good idea to make your own \texttt{fonttext.cfg}. Look at +% the comments below (docstrip module `text') to see what should +% should go into such a file. +% +% To change the math font setup use a copy of \texttt{fontmath.ltx} +% under the name \texttt{fontmath.cfg} and change this copy. However, +% dealing with this interface is even more a job for an expert than +% changing the text font setup --- in short, we don't encourage either. +% +% \begin{quote} +% \textbf{Warning:} please note that we don't support customised +% \LaTeX{} versions. Thus, before sending in a bug report please try +% your test file with a \LaTeX{} format which is not customised and +% send in the log from that version (unless the problem goes away). +% \end{quote} +% +% Please note: the following standard encodings have to +% be defined in all local variants of \texttt{font....cfg} to guarantee +% that all \LaTeX{} installations behave in the same way. +% \begin{center} +% \begin{tabular}{ll} +% |T1| & Cork \TeX{} text encoding \\ +% |OT1| & old \TeX{} text encoding \\ +% |U| & unknown encoding \\ +% |OML| & old \TeX{} math letters encoding \\ +% |OMS| & old \TeX{} math symbols encoding \\ +% |OMX| & old \TeX{} math extension symbols encoding +% \end{tabular} +% \end{center} +% Notice that some of these encodings are `old' in the sense that we +% hope that they will be superseded soon by encoding standards defined +% by the \TeX{} user community. Therefore this set of default encodings +% may change in the future. +% +% The first candidate is |OT1| which will soon be replaced by |T1|, the +% official \TeX{} text encoding. +% +% \begin{quote}\textbf{Warning:} +% If you add additional encodings to this file there is no guarantee +% any longer that files processable at your installation will also be +% processable at other installations. Thus, if you make use of +% such an encoding in your document, e.g.~if you intend to typeset in +% Cyrillic (|OT2| encoding), you need to specify this encoding in the +% preamble of your document prior to sending it to another +% installation. Once the encoding is specified in that place in your +% document, the document is processable at all \LaTeX{} installations +% (provided they have suitable fonts installed). +% +% For this reason we suggest that you define a short package file that +% sets up an additional encoding used at your site (rather than +% putting the encoding into this file) since this package can easily +% be shipped with your document. +% \end{quote} +% +% +% \StopEventually{} +% +% \section{The \texttt{docstrip} modules} +% +% The following modules are used to direct \texttt{docstrip} in +% generating external files: +% \begin{center} +% \begin{tabular}{ll} +% driver & produce a documentation driver file \\ +% text & produce the file \texttt{fonttext.ltx}\\ +% math & produce the file \texttt{fontmath.ltx}\\ +% cfgtext & produce a dummy \texttt{fonttext.cfg} file\\ +% cfgmath & produce a dummy \texttt{fontmath.cfg} file\\ +% \end{tabular} +% \end{center} +% A typical \texttt{docstrip} command file would then have entries like: +% \begin{verbatim} +%\generateFile{fonttext.ltx}{t}{\from{fontdef.dtx}{text}} +%\end{verbatim} +% +% +% \section{A driver for this document} +% +% The next bit of code contains the documentation driver file for +% \TeX{}, i.e.~the file that will produce the documentation you are +% currently reading. It will be extracted from this file by the +% \dst{} program. +% \begin{macrocode} +%<*driver> +\documentclass{ltxdoc} +\GetFileInfo{fontdef.dtx} +\begin{document} + \DocInput{fontdef.dtx} +\end{document} +%</driver> +% \end{macrocode} +% +% +% +% \section{The \texttt{fonttext.ltx} file} +% +% The identification is done earlier on with a |\ProvidesFile| +% declaration. +% \begin{macrocode} +%<*text> +\typeout{=== Don't modify this file, use a .cfg file instead ===^^J} +% \end{macrocode} +% +% \subsection{Encodings} +% +% This file declares the standard encodings for text and math +% fonts. All others should be declared in packages or in the +% documents directly. +% +% For every text encoding there are normally a number of encoding +% specific commands, e.g.~accents, special characters, etc. (The +% definition for such a command might have to change when the +% encoding is changed, because the character is in a different +% position, or not available at all, or the accent is produced in a +% different way.) This is handled by a general mechanism which is +% described in \texttt{ltoutenc.dtx}. +% +% By convention, text encoding specific declarations, including the +% declaration |\DeclareFontEncoding|, are kept in separate file of +% the form \meta{enc}\texttt{enc.def}, e.g.~\texttt{ot1enc.def}. This +% allows other applications to make use of the declarations as +% well. +% +% Similar to the default encoding, the loading of the encoding +% files for the two major text encodings shouldn't be changed. +% In particular, the \texttt{inputenc} package depends on this. +% \changes{v2.2s}{1997/12/20}{Added documentation} +% +% \changes{v2.1d}{1994/01/05}{Removed nf prefix from file names.} +% \changes{v2.1f}{1994/05/14}{Removed .def files.} +% \changes{v2.1g}{1994/05/1g}{Removed \cs{DeclareFontEncoding} for ot1 +% and t1 and input .def files instead} +% \changes{v2.2c}{1994/10/25}{Added OMSenc.def} +% \changes{v2.2d}{1994/10/31}{Added OMLenc.def ...} +% \changes{v2.2e}{1994/10/31}{... and moved further down} +% \changes{v2.2f}{1994/11/07}{(DPC) Updated to use \cs{ProvidesFile}} +% \changes{v2.2h}{1994/11/16}{(DPC) Removed \cmd\{ and \cmd\}} +% \begin{macrocode} +\input {omlenc.def} +\input {t1enc.def} +\input {ot1enc.def} % <- should come after T1 for speed +\input {omsenc.def} +% \end{macrocode} +% +% We then set set the default text font encoding. This will +% hopefully change some day to |T1|. This setting should \emph{not} +% be changed to produce a portable format. +% \begin{macrocode} +\fontencoding{OT1} +% \end{macrocode} +% +% If different encodings for text fonts are in use one could put +% the common setup into |\DeclareFontEncodingDefaults|. There is +% now a better mechanism so using this interface is discouraged! +% \begin{macrocode} +\DeclareFontEncodingDefaults{}{} +% \end{macrocode} +% +% Then we define the default substitution for every encoding. +% This release of \LaTeXe{} assumes that the ec fonts are +% available. It is possible to change this to point to some other +% font family (e.g., Times with the appropriate encoding if it is +% available) without making documents non-portable. However, in +% such a case documents will produce different page breaks at other +% sites. The substitution defaults can all be changed without +% losing portability as long as there are font shape definitions +% for the selected substitutions. +% \begin{macrocode} +\DeclareFontSubstitution{T1}{cmr}{m}{n} +\DeclareFontSubstitution{OT1}{cmr}{m}{n} +% \end{macrocode} +% +% For every encoding declaration, \LaTeXe{} will try to verify that +% the given substitution information makes sense, i.e.~that it is +% impossible to go into an endless loop if font substitution +% happens. This is done at the moment the |\begin{document}| is +% encountered. \LaTeXe{} will then check that for every encoding the +% substitution defaults form a valid font shape group, which means +% that it will check if there is a |\DeclareFontShape| declaration +% for this combination. We will therefore load the corresponding +% |.fd| files now. If we don't do this they would be loaded at +% verification time (i.e.~at |\begin{document}| which would delay +% processing unnecessarily. +% +% \begin{quote} +% \textbf{Warning:} Please note that this means that you have to +% regenerate the format whenever you change any of these +% \texttt{.fd} files since \LaTeXe{} will not read \texttt{.fd} +% files if it already knows about the encoding/family +% combination. +% \end{quote} +% +% \changes{v2.2m}{1995/11/01}{add \cs{nfss@catcodes} for internal/1932} +% The |\nfss@catcodes| ensures that white space is ignored in any +% definitions made in the fd files. +% \begin{macrocode} +\begingroup +\nfss@catcodes +\input {t1cmr.fd} +\input {ot1cmr.fd} +\endgroup +% \end{macrocode} +% +% We also load some other font definition files which are normally +% needed in a document. This is only done for processing speed and +% you can comment the next two lines out to save some memory. If +% necessary these files are then loaded when your document is +% processed. (Loading |.fd| files is a less drastic step compared +% to preloading fonts because the number of fonts is limited 255 at +% (nearly) every \TeX{} installation, while the amount of main memory +% is not a limiting factor at most installations.) +% +% \begin{macrocode} +\begingroup +\nfss@catcodes +\input {ot1cmss.fd} +\input {ot1cmtt.fd} +\endgroup +% \end{macrocode} +% +% Even with all the precautions it is still possible that NFSS will +% run into problems, for example, when a |.fd| file contains +% corrupted data. To guard against such cases NFSS has a very +% low-level fallback font that is installed with the following line. +% \begin{macrocode} +\DeclareErrorFont{OT1}{cmr}{m}{n}{10} +% \end{macrocode} +% This means, ``if everything else fails use Computer Modern Roman +% normal shape at 10pt in the old text encoding''. +% You can change the font used but the encoding should be the same +% as the one specified with |\fontencoding| above. +% +% +% \subsection{Defaults} +% +% To allow the use of |\rmfamily|, |\sffamily|, etc.\ in documents +% even if non-standard families are used we provide nine macros +% which hold the name of the corresponding families, series, and so +% on. This makes it easy to use other font families (like Times +% Roman, etc.). One simply has to redefine these defaults. +% +% All these hooks have to be defined in this file but you can +% change their meaning (except for |\encodingdefault|) without +% making documents non-portable. +% +% +% \begin{macro}{\rmdefault} +% \begin{macro}{\sfdefault} +% \begin{macro}{\ttdefault} +% The following three definitions set up the meaning for +% |\rmfamily|, |\sffamily|, and |\ttfamily|. +% \begin{macrocode} +\newcommand\rmdefault{cmr} +\newcommand\sfdefault{cmss} +\newcommand\ttdefault{cmtt} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bfdefault} +% \begin{macro}{\mddefault} +% Series changing commands are influenced by the following hooks. +% \begin{macrocode} +\newcommand\bfdefault{bx} +\newcommand\mddefault{m} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\itdefault} +% \begin{macro}{\sldefault} +% \begin{macro}{\scdefault} +% \begin{macro}{\updefault} +% Shape changing commands use the following hooks. +% \begin{macrocode} +\newcommand\itdefault{it} +\newcommand\sldefault{sl} +\newcommand\scdefault{sc} +\newcommand\updefault{n} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\encodingdefault} +% \begin{macro}{\familydefault} +% \begin{macro}{\seriesdefault} +% \begin{macro}{\shapedefault} +% Finally we have the hooks that describe the behaviour of +% the |\normalfont| command. To stay portable, the definition of +% |\encodingdefault| should \emph{not} be changed and should match +% the setting above for |\fontencoding|. All other values can be +% set according to your taste. +% \begin{macrocode} +\newcommand\encodingdefault{OT1} +\newcommand\familydefault{\rmdefault} +\newcommand\seriesdefault{\mddefault} +\newcommand\shapedefault{\updefault} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% This finishes the low-level setup in \texttt{fonttext.ltx}. +% \begin{macrocode} +%</text> +% \end{macrocode} +% +% +% +% +% \section{The \texttt{fontmath.ltx} file} +% +% The identification is done earlier on with a |\ProvidesFile| +% declaration. +% \begin{macrocode} +%<*math> +\typeout{=== Don't modify this file, use a .cfg file instead ===^^J} +% \end{macrocode} +% +% \subsection{The font encodings used} +% +% \begin{macrocode} +\DeclareFontEncoding{OML}{}{} +\DeclareFontEncoding{OMS}{}{} +\DeclareFontEncoding{OMX}{}{} +% \end{macrocode} +% Finally a declaration for |U| encoding which serves for all fonts +% that do not fit standard encodings. For math this sets up +% |\noaccents@| providing for AMS-\LaTeX{}. This macro is used +% therein to handle accented characters if they are not supported +% by the font. In other words, if fonts with |U| encoding are used +% in math, all accents (like from |\breve|) are obtained from some +% other font that has them. +% \begin{macrocode} +\DeclareFontEncoding{U}{}{\noaccents@} +% \end{macrocode} +% The encodings for math are next: +% \begin{macrocode} +\DeclareFontSubstitution{OML}{cmm}{m}{it} +\DeclareFontSubstitution{OMS}{cmsy}{m}{n} +\DeclareFontSubstitution{OMX}{cmex}{m}{n} +\DeclareFontSubstitution{U}{cmr}{m}{n} +% \end{macrocode} +% +% \begin{macrocode} +\begingroup +\nfss@catcodes +\input {omlcmm.fd} +\input {omscmsy.fd} +\input {omxcmex.fd} +\input {ucmr.fd} +\endgroup +% \end{macrocode} +% +% \subsubsection{Symbolfont and Alphabet declarations} +% +% We now define the basic symbol fonts used by \LaTeX{}. +% These four symbol fonts must be defined by this file. +% +% It is possible to make the symbol fonts point to other external +% fonts without losing the ability to process documents written +% at other sites, as long as one defines the same symbol font names +% with the same encodings, e.g.~|operators| with |OT1| etc. +% If other encodings are used documents become non-portable. +% Such a change should therefore be done in a package file. +% +% \changes{v2.1e}{1994/01/19}{Added missing setting for symbols in +% bold version.} +% \begin{macrocode} +\DeclareSymbolFont{operators} {OT1}{cmr} {m}{n} +\DeclareSymbolFont{letters} {OML}{cmm} {m}{it} +\DeclareSymbolFont{symbols} {OMS}{cmsy}{m}{n} +\DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n} +% \end{macrocode} +% +% \begin{macrocode} +\SetSymbolFont{operators}{bold}{OT1}{cmr} {bx}{n} +\SetSymbolFont{letters} {bold}{OML}{cmm} {b}{it} +\SetSymbolFont{symbols} {bold}{OMS}{cmsy}{b}{n} +% \end{macrocode} +% +% Below are the seven math alphabets which are defined by NFSS. +% Again they must be defined by this file. +% However, as before you can change the fonts used without losing +% portability, but you should be careful when changing the encoding +% since that may make documents come out wrong. +% \begin{macrocode} +\DeclareSymbolFontAlphabet{\mathrm} {operators} +\DeclareSymbolFontAlphabet{\mathnormal}{letters} +\DeclareSymbolFontAlphabet{\mathcal} {symbols} +\DeclareMathAlphabet {\mathbf}{OT1}{cmr}{bx}{n} +\DeclareMathAlphabet {\mathsf}{OT1}{cmss}{m}{n} +\DeclareMathAlphabet {\mathit}{OT1}{cmr}{m}{it} +\DeclareMathAlphabet {\mathtt}{OT1}{cmtt}{m}{n} +% \end{macrocode} +% Given the currently available fonts we cannot bold-en |\mathbf| +% and |\mathtt| but in principle one could use `ultra bold' or +% something. The alphabets defined via |\DeclareSymbolFontAlphabet| +% will change automatically in a new math version if the +% corresponding symbol font changes. +% \begin{macrocode} +\SetMathAlphabet\mathsf{bold}{OT1}{cmss}{bx}{n} +\SetMathAlphabet\mathit{bold}{OT1}{cmr}{bx}{it} +% \end{macrocode} +% +% +% \subsection{Math font sizes} +% \changes{v2.2f}{1994/11/07} +% {(DPC) Add \cs{DeclareMathSizes} declarations} +% +% The declarations below declare the text, script and scriptscript +% size to be used for each text font size. +% +% All occurences of sizes longer than a single character are replaced +% with the macro name that holds them, saving a number of +% tokens (but losing a bit of speed, so this may not stay this way). +% \begin{macrocode} + \DeclareMathSizes{5}{5}{5}{5} + \DeclareMathSizes{6}{6}{5}{5} + \DeclareMathSizes{7}{7}{5}{5} + \DeclareMathSizes{8}{8}{6}{5} + \DeclareMathSizes{9}{9}{6}{5} + \DeclareMathSizes{\@xpt}{\@xpt}{7}{5} + \DeclareMathSizes{\@xipt}{\@xipt}{8}{6} + \DeclareMathSizes{\@xiipt}{\@xiipt}{8}{6} + \DeclareMathSizes{\@xivpt}{\@xivpt}{\@xpt}{7} + \DeclareMathSizes{\@xviipt}{\@xviipt}{\@xiipt}{\@xpt} + \DeclareMathSizes{\@xxpt}{\@xxpt}{\@xivpt}{\@xiipt} + \DeclareMathSizes{\@xxvpt}{\@xxvpt}{\@xxpt}{\@xviipt} +% \end{macrocode} +% +% \subsection{The math symbol assignments} +% +% We start by setting up math codes for most of the characters +% typed in directly from the keyboard. Most of them are normally +% already setup up in the same way by Ini\TeX{}. However, we repeat +% them here to have a complete setup which can be exchanged with +% another if desired. +% +% \subsubsection{The letters} +% \begin{macrocode} +\DeclareMathSymbol{a}{\mathalpha}{letters}{`a} +\DeclareMathSymbol{b}{\mathalpha}{letters}{`b} +\DeclareMathSymbol{c}{\mathalpha}{letters}{`c} +\DeclareMathSymbol{d}{\mathalpha}{letters}{`d} +\DeclareMathSymbol{e}{\mathalpha}{letters}{`e} +\DeclareMathSymbol{f}{\mathalpha}{letters}{`f} +\DeclareMathSymbol{g}{\mathalpha}{letters}{`g} +\DeclareMathSymbol{h}{\mathalpha}{letters}{`h} +\DeclareMathSymbol{i}{\mathalpha}{letters}{`i} +\DeclareMathSymbol{j}{\mathalpha}{letters}{`j} +\DeclareMathSymbol{k}{\mathalpha}{letters}{`k} +\DeclareMathSymbol{l}{\mathalpha}{letters}{`l} +\DeclareMathSymbol{m}{\mathalpha}{letters}{`m} +\DeclareMathSymbol{n}{\mathalpha}{letters}{`n} +\DeclareMathSymbol{o}{\mathalpha}{letters}{`o} +\DeclareMathSymbol{p}{\mathalpha}{letters}{`p} +\DeclareMathSymbol{q}{\mathalpha}{letters}{`q} +\DeclareMathSymbol{r}{\mathalpha}{letters}{`r} +\DeclareMathSymbol{s}{\mathalpha}{letters}{`s} +\DeclareMathSymbol{t}{\mathalpha}{letters}{`t} +\DeclareMathSymbol{u}{\mathalpha}{letters}{`u} +\DeclareMathSymbol{v}{\mathalpha}{letters}{`v} +\DeclareMathSymbol{w}{\mathalpha}{letters}{`w} +\DeclareMathSymbol{x}{\mathalpha}{letters}{`x} +\DeclareMathSymbol{y}{\mathalpha}{letters}{`y} +\DeclareMathSymbol{z}{\mathalpha}{letters}{`z} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareMathSymbol{A}{\mathalpha}{letters}{`A} +\DeclareMathSymbol{B}{\mathalpha}{letters}{`B} +\DeclareMathSymbol{C}{\mathalpha}{letters}{`C} +\DeclareMathSymbol{D}{\mathalpha}{letters}{`D} +\DeclareMathSymbol{E}{\mathalpha}{letters}{`E} +\DeclareMathSymbol{F}{\mathalpha}{letters}{`F} +\DeclareMathSymbol{G}{\mathalpha}{letters}{`G} +\DeclareMathSymbol{H}{\mathalpha}{letters}{`H} +\DeclareMathSymbol{I}{\mathalpha}{letters}{`I} +\DeclareMathSymbol{J}{\mathalpha}{letters}{`J} +\DeclareMathSymbol{K}{\mathalpha}{letters}{`K} +\DeclareMathSymbol{L}{\mathalpha}{letters}{`L} +\DeclareMathSymbol{M}{\mathalpha}{letters}{`M} +\DeclareMathSymbol{N}{\mathalpha}{letters}{`N} +\DeclareMathSymbol{O}{\mathalpha}{letters}{`O} +\DeclareMathSymbol{P}{\mathalpha}{letters}{`P} +\DeclareMathSymbol{Q}{\mathalpha}{letters}{`Q} +\DeclareMathSymbol{R}{\mathalpha}{letters}{`R} +\DeclareMathSymbol{S}{\mathalpha}{letters}{`S} +\DeclareMathSymbol{T}{\mathalpha}{letters}{`T} +\DeclareMathSymbol{U}{\mathalpha}{letters}{`U} +\DeclareMathSymbol{V}{\mathalpha}{letters}{`V} +\DeclareMathSymbol{W}{\mathalpha}{letters}{`W} +\DeclareMathSymbol{X}{\mathalpha}{letters}{`X} +\DeclareMathSymbol{Y}{\mathalpha}{letters}{`Y} +\DeclareMathSymbol{Z}{\mathalpha}{letters}{`Z} +% \end{macrocode} +% +% \subsubsection{The digits} +% +% \begin{macrocode} +\DeclareMathSymbol{0}{\mathalpha}{operators}{`0} +\DeclareMathSymbol{1}{\mathalpha}{operators}{`1} +\DeclareMathSymbol{2}{\mathalpha}{operators}{`2} +\DeclareMathSymbol{3}{\mathalpha}{operators}{`3} +\DeclareMathSymbol{4}{\mathalpha}{operators}{`4} +\DeclareMathSymbol{5}{\mathalpha}{operators}{`5} +\DeclareMathSymbol{6}{\mathalpha}{operators}{`6} +\DeclareMathSymbol{7}{\mathalpha}{operators}{`7} +\DeclareMathSymbol{8}{\mathalpha}{operators}{`8} +\DeclareMathSymbol{9}{\mathalpha}{operators}{`9} +% \end{macrocode} +% +% +% \subsubsection{Punctuation, brace, etc. keys} +% +% \begin{macrocode} +\DeclareMathSymbol{!}{\mathclose}{operators}{"21} +\DeclareMathSymbol{*}{\mathbin}{symbols}{"03} % \ast +\DeclareMathSymbol{+}{\mathbin}{operators}{"2B} +\DeclareMathSymbol{,}{\mathpunct}{letters}{"3B} +\DeclareMathSymbol{-}{\mathbin}{symbols}{"00} +\DeclareMathSymbol{.}{\mathord}{letters}{"3A} +\DeclareMathSymbol{:}{\mathrel}{operators}{"3A} +\DeclareMathSymbol{;}{\mathpunct}{operators}{"3B} +\DeclareMathSymbol{=}{\mathrel}{operators}{"3D} +\DeclareMathSymbol{?}{\mathclose}{operators}{"3F} +% \end{macrocode} +% The following symbols are defined as delimiters below +% which automatically defines them as math symbols. +% \begin{macrocode} +%\DeclareMathSymbol{(}{\mathopen}{operators}{"28} +%\DeclareMathSymbol{)}{\mathclose}{operators}{"29} +%\DeclareMathSymbol{/}{\mathord}{letters}{"3D} +%\DeclareMathSymbol{[}{\mathopen}{operators}{"5B} +%\DeclareMathSymbol{]}{\mathclose}{operators}{"5D} +%\DeclareMathSymbol{|}{\mathord}{symbols}{"6A} +%\DeclareMathSymbol{<}{\mathrel}{letters}{"3C} +%\DeclareMathSymbol{>}{\mathrel}{letters}{"3E} +% \end{macrocode} +% +% Should all of the following being activated by default? Probably +% not. +% \begin{macrocode} +%\DeclareMathSymbol{`\{}{\mathopen}{symbols}{"66} +%\DeclareMathSymbol{`\}}{\mathclose}{symbols}{"67} +%\DeclareMathSymbol{`\\}{\mathord}{symbols}{"6E} % \backslash +\mathcode`\ ="8000 % \space +\mathcode`\'="8000 % ^\prime +\mathcode`\_="8000 % \_ +% \end{macrocode} +% +% +% \subsubsection{Delimitercodes for characters} +% \changes{v2.2q}{1997/01/08} +% {Use \cs{DeclareMathDelimiter} to set delimiter codes} +% \changes{v2.2u}{1998/04/15} +% {Use new syntax for \cs{DeclareMathDelimiter}} +% [to be completed] +% +% Finally, Ini\TeX{} sets all |\delcode| values to -1, except +% |\delcode`.=0| +% \begin{macrocode} +\DeclareMathDelimiter{(}{\mathopen} {operators}{"28}{largesymbols}{"00} +\DeclareMathDelimiter{)}{\mathclose}{operators}{"29}{largesymbols}{"01} +\DeclareMathDelimiter{[}{\mathopen} {operators}{"5B}{largesymbols}{"02} +\DeclareMathDelimiter{]}{\mathclose}{operators}{"5D}{largesymbols}{"03} +% \end{macrocode} +% +% The next two are considered to be relations when not used in the context +% of a delimiter! And worse, they do even represent different glyphs when +% being used as delimiter and not as delimiter. This is a user level syntax +% inherited from plain \TeX{}. Therefore we explicitly redefine the math +% symbol definitions for these symbols afterwards. +% \changes{v2.2v}{1998/04/17} +% {Reinsert symbol defs for \texttt{<} and \texttt{\char62} chars.} +% \begin{macrocode} +\DeclareMathDelimiter{<}{\mathopen}{symbols}{"68}{largesymbols}{"0A} +\DeclareMathDelimiter{>}{\mathclose}{symbols}{"69}{largesymbols}{"0B} +\DeclareMathSymbol{<}{\mathrel}{letters}{"3C} +\DeclareMathSymbol{>}{\mathrel}{letters}{"3E} +% \end{macrocode} +% And here is another case where the non-delimiter version produces a +% glyph different from the delimiter version. +% \changes{v2.2w}{1998/04/18} +% {Reinsert symbol def for \texttt{/} char.} +% \begin{macrocode} +\DeclareMathDelimiter{/}{\mathord}{operators}{"2F}{largesymbols}{"0E} +\DeclareMathSymbol{/}{\mathord}{letters}{"3D} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareMathDelimiter{|}{\mathord}{symbols}{"6A}{largesymbols}{"0C} +% \end{macrocode} +% +% \begin{macrocode} +\expandafter\DeclareMathDelimiter\@backslashchar + {\mathord}{symbols}{"6E}{largesymbols}{"0F} +% \end{macrocode} +% N.B. |{| and |}| should NOT get delcodes; +% otherwise parameter grouping fails! +% +% +% \subsection{Symbols accessed via control sequences} +% +% \subsubsection{Greek letters} +% +% \begin{macrocode} +\DeclareMathSymbol{\alpha}{\mathord}{letters}{"0B} +\DeclareMathSymbol{\beta}{\mathord}{letters}{"0C} +\DeclareMathSymbol{\gamma}{\mathord}{letters}{"0D} +\DeclareMathSymbol{\delta}{\mathord}{letters}{"0E} +\DeclareMathSymbol{\epsilon}{\mathord}{letters}{"0F} +\DeclareMathSymbol{\zeta}{\mathord}{letters}{"10} +\DeclareMathSymbol{\eta}{\mathord}{letters}{"11} +\DeclareMathSymbol{\theta}{\mathord}{letters}{"12} +\DeclareMathSymbol{\iota}{\mathord}{letters}{"13} +\DeclareMathSymbol{\kappa}{\mathord}{letters}{"14} +\DeclareMathSymbol{\lambda}{\mathord}{letters}{"15} +\DeclareMathSymbol{\mu}{\mathord}{letters}{"16} +\DeclareMathSymbol{\nu}{\mathord}{letters}{"17} +\DeclareMathSymbol{\xi}{\mathord}{letters}{"18} +\DeclareMathSymbol{\pi}{\mathord}{letters}{"19} +\DeclareMathSymbol{\rho}{\mathord}{letters}{"1A} +\DeclareMathSymbol{\sigma}{\mathord}{letters}{"1B} +\DeclareMathSymbol{\tau}{\mathord}{letters}{"1C} +\DeclareMathSymbol{\upsilon}{\mathord}{letters}{"1D} +\DeclareMathSymbol{\phi}{\mathord}{letters}{"1E} +\DeclareMathSymbol{\chi}{\mathord}{letters}{"1F} +\DeclareMathSymbol{\psi}{\mathord}{letters}{"20} +\DeclareMathSymbol{\omega}{\mathord}{letters}{"21} +\DeclareMathSymbol{\varepsilon}{\mathord}{letters}{"22} +\DeclareMathSymbol{\vartheta}{\mathord}{letters}{"23} +\DeclareMathSymbol{\varpi}{\mathord}{letters}{"24} +\DeclareMathSymbol{\varrho}{\mathord}{letters}{"25} +\DeclareMathSymbol{\varsigma}{\mathord}{letters}{"26} +\DeclareMathSymbol{\varphi}{\mathord}{letters}{"27} +\DeclareMathSymbol{\Gamma}{\mathalpha}{operators}{"00} +\DeclareMathSymbol{\Delta}{\mathalpha}{operators}{"01} +\DeclareMathSymbol{\Theta}{\mathalpha}{operators}{"02} +\DeclareMathSymbol{\Lambda}{\mathalpha}{operators}{"03} +\DeclareMathSymbol{\Xi}{\mathalpha}{operators}{"04} +\DeclareMathSymbol{\Pi}{\mathalpha}{operators}{"05} +\DeclareMathSymbol{\Sigma}{\mathalpha}{operators}{"06} +\DeclareMathSymbol{\Upsilon}{\mathalpha}{operators}{"07} +\DeclareMathSymbol{\Phi}{\mathalpha}{operators}{"08} +\DeclareMathSymbol{\Psi}{\mathalpha}{operators}{"09} +\DeclareMathSymbol{\Omega}{\mathalpha}{operators}{"0A} +% \end{macrocode} +% +% +% \subsubsection{Ordinary symbols} +% +% \begin{macrocode} +\DeclareMathSymbol{\aleph}{\mathord}{symbols}{"40} +\def\hbar{{\mathchar'26\mkern-9muh}} +\DeclareMathSymbol{\imath}{\mathord}{letters}{"7B} +\DeclareMathSymbol{\jmath}{\mathord}{letters}{"7C} +\DeclareMathSymbol{\ell}{\mathord}{letters}{"60} +\DeclareMathSymbol{\wp}{\mathord}{letters}{"7D} +\DeclareMathSymbol{\Re}{\mathord}{symbols}{"3C} +\DeclareMathSymbol{\Im}{\mathord}{symbols}{"3D} +\DeclareMathSymbol{\partial}{\mathord}{letters}{"40} +\DeclareMathSymbol{\infty}{\mathord}{symbols}{"31} +\DeclareMathSymbol{\prime}{\mathord}{symbols}{"30} +\DeclareMathSymbol{\emptyset}{\mathord}{symbols}{"3B} +\DeclareMathSymbol{\nabla}{\mathord}{symbols}{"72} +\def\surd{{\mathchar"1270}} +\DeclareMathSymbol{\top}{\mathord}{symbols}{"3E} +\DeclareMathSymbol{\bot}{\mathord}{symbols}{"3F} +\def\angle{{\vbox{\ialign{$\m@th\scriptstyle##$\crcr + \not\mathrel{\mkern14mu}\crcr + \noalign{\nointerlineskip} + \mkern2.5mu\leaders\hrule \@height.34pt\hfill\mkern2.5mu\crcr}}}} +\DeclareMathSymbol{\triangle}{\mathord}{symbols}{"34} +\DeclareMathSymbol{\forall}{\mathord}{symbols}{"38} +\DeclareMathSymbol{\exists}{\mathord}{symbols}{"39} +\DeclareMathSymbol{\neg}{\mathord}{symbols}{"3A} + \let\lnot=\neg +\DeclareMathSymbol{\flat}{\mathord}{letters}{"5B} +\DeclareMathSymbol{\natural}{\mathord}{letters}{"5C} +\DeclareMathSymbol{\sharp}{\mathord}{letters}{"5D} +\DeclareMathSymbol{\clubsuit}{\mathord}{symbols}{"7C} +\DeclareMathSymbol{\diamondsuit}{\mathord}{symbols}{"7D} +\DeclareMathSymbol{\heartsuit}{\mathord}{symbols}{"7E} +\DeclareMathSymbol{\spadesuit}{\mathord}{symbols}{"7F} +% \end{macrocode} +% +% +% \subsubsection{Large Operators} +% +% \begin{macrocode} +\DeclareMathSymbol{\coprod}{\mathop}{largesymbols}{"60} +\DeclareMathSymbol{\bigvee}{\mathop}{largesymbols}{"57} +\DeclareMathSymbol{\bigwedge}{\mathop}{largesymbols}{"56} +\DeclareMathSymbol{\biguplus}{\mathop}{largesymbols}{"55} +\DeclareMathSymbol{\bigcap}{\mathop}{largesymbols}{"54} +\DeclareMathSymbol{\bigcup}{\mathop}{largesymbols}{"53} +\DeclareMathSymbol{\intop}{\mathop}{largesymbols}{"52} + \def\int{\intop\nolimits} +\DeclareMathSymbol{\prod}{\mathop}{largesymbols}{"51} +\DeclareMathSymbol{\sum}{\mathop}{largesymbols}{"50} +\DeclareMathSymbol{\bigotimes}{\mathop}{largesymbols}{"4E} +\DeclareMathSymbol{\bigoplus}{\mathop}{largesymbols}{"4C} +\DeclareMathSymbol{\bigodot}{\mathop}{largesymbols}{"4A} +\DeclareMathSymbol{\ointop}{\mathop}{largesymbols}{"48} + \def\oint{\ointop\nolimits} +\DeclareMathSymbol{\bigsqcup}{\mathop}{largesymbols}{"46} +\DeclareMathSymbol{\smallint}{\mathop}{symbols}{"73} +% \end{macrocode} +% +% +% \subsubsection{Binary symbols} +% +% \changes{v2.3a}{2004/02/04} +% {Added bigtriangle synonyms for stmaryrd} +% \begin{macrocode} +\DeclareMathSymbol{\triangleleft}{\mathbin}{letters}{"2F} +\DeclareMathSymbol{\triangleright}{\mathbin}{letters}{"2E} +\DeclareMathSymbol{\bigtriangleup}{\mathbin}{symbols}{"34} +\DeclareMathSymbol{\bigtriangledown}{\mathbin}{symbols}{"35} + \let \varbigtriangledown \bigtriangledown + \let \varbigtriangleup \bigtriangleup +% \end{macrocode} +% +% These last two synonyms are needed because the \textsf{stamryrd} +% package redefines them as Operators. +% +% \begin{macrocode} +\DeclareMathSymbol{\wedge}{\mathbin}{symbols}{"5E} + \let\land=\wedge +\DeclareMathSymbol{\vee}{\mathbin}{symbols}{"5F} + \let\lor=\vee +\DeclareMathSymbol{\cap}{\mathbin}{symbols}{"5C} +\DeclareMathSymbol{\cup}{\mathbin}{symbols}{"5B} +\DeclareMathSymbol{\ddagger}{\mathbin}{symbols}{"7A} +\DeclareMathSymbol{\dagger}{\mathbin}{symbols}{"79} +\DeclareMathSymbol{\sqcap}{\mathbin}{symbols}{"75} +\DeclareMathSymbol{\sqcup}{\mathbin}{symbols}{"74} +\DeclareMathSymbol{\uplus}{\mathbin}{symbols}{"5D} +\DeclareMathSymbol{\amalg}{\mathbin}{symbols}{"71} +\DeclareMathSymbol{\diamond}{\mathbin}{symbols}{"05} +\DeclareMathSymbol{\bullet}{\mathbin}{symbols}{"0F} +\DeclareMathSymbol{\wr}{\mathbin}{symbols}{"6F} +\DeclareMathSymbol{\div}{\mathbin}{symbols}{"04} +\DeclareMathSymbol{\odot}{\mathbin}{symbols}{"0C} +\DeclareMathSymbol{\oslash}{\mathbin}{symbols}{"0B} +\DeclareMathSymbol{\otimes}{\mathbin}{symbols}{"0A} +\DeclareMathSymbol{\ominus}{\mathbin}{symbols}{"09} +\DeclareMathSymbol{\oplus}{\mathbin}{symbols}{"08} +\DeclareMathSymbol{\mp}{\mathbin}{symbols}{"07} +\DeclareMathSymbol{\pm}{\mathbin}{symbols}{"06} +\DeclareMathSymbol{\circ}{\mathbin}{symbols}{"0E} +\DeclareMathSymbol{\bigcirc}{\mathbin}{symbols}{"0D} +\DeclareMathSymbol{\setminus}{\mathbin}{symbols}{"6E} +\DeclareMathSymbol{\cdot}{\mathbin}{symbols}{"01} +\DeclareMathSymbol{\ast}{\mathbin}{symbols}{"03} +\DeclareMathSymbol{\times}{\mathbin}{symbols}{"02} +\DeclareMathSymbol{\star}{\mathbin}{letters}{"3F} +% \end{macrocode} +% +% +% \subsubsection{Relations} +% +% \begin{macrocode} +\DeclareMathSymbol{\propto}{\mathrel}{symbols}{"2F} +\DeclareMathSymbol{\sqsubseteq}{\mathrel}{symbols}{"76} +\DeclareMathSymbol{\sqsupseteq}{\mathrel}{symbols}{"77} +\DeclareMathSymbol{\parallel}{\mathrel}{symbols}{"6B} +\DeclareMathSymbol{\mid}{\mathrel}{symbols}{"6A} +\DeclareMathSymbol{\dashv}{\mathrel}{symbols}{"61} +\DeclareMathSymbol{\vdash}{\mathrel}{symbols}{"60} +\DeclareMathSymbol{\nearrow}{\mathrel}{symbols}{"25} +\DeclareMathSymbol{\searrow}{\mathrel}{symbols}{"26} +\DeclareMathSymbol{\nwarrow}{\mathrel}{symbols}{"2D} +\DeclareMathSymbol{\swarrow}{\mathrel}{symbols}{"2E} +\DeclareMathSymbol{\Leftrightarrow}{\mathrel}{symbols}{"2C} +\DeclareMathSymbol{\Leftarrow}{\mathrel}{symbols}{"28} +\DeclareMathSymbol{\Rightarrow}{\mathrel}{symbols}{"29} +\def\neq{\not=} \let\ne=\neq +\DeclareMathSymbol{\leq}{\mathrel}{symbols}{"14} + \let\le=\leq +\DeclareMathSymbol{\geq}{\mathrel}{symbols}{"15} + \let\ge=\geq +\DeclareMathSymbol{\succ}{\mathrel}{symbols}{"1F} +\DeclareMathSymbol{\prec}{\mathrel}{symbols}{"1E} +\DeclareMathSymbol{\approx}{\mathrel}{symbols}{"19} +\DeclareMathSymbol{\succeq}{\mathrel}{symbols}{"17} +\DeclareMathSymbol{\preceq}{\mathrel}{symbols}{"16} +\DeclareMathSymbol{\supset}{\mathrel}{symbols}{"1B} +\DeclareMathSymbol{\subset}{\mathrel}{symbols}{"1A} +\DeclareMathSymbol{\supseteq}{\mathrel}{symbols}{"13} +\DeclareMathSymbol{\subseteq}{\mathrel}{symbols}{"12} +\DeclareMathSymbol{\in}{\mathrel}{symbols}{"32} +\DeclareMathSymbol{\ni}{\mathrel}{symbols}{"33} + \let\owns=\ni +\DeclareMathSymbol{\gg}{\mathrel}{symbols}{"1D} +\DeclareMathSymbol{\ll}{\mathrel}{symbols}{"1C} +\DeclareMathSymbol{\not}{\mathrel}{symbols}{"36} +\DeclareMathSymbol{\leftrightarrow}{\mathrel}{symbols}{"24} +\DeclareMathSymbol{\leftarrow}{\mathrel}{symbols}{"20} + \let\gets=\leftarrow +\DeclareMathSymbol{\rightarrow}{\mathrel}{symbols}{"21} + \let\to=\rightarrow +\DeclareMathSymbol{\mapstochar}{\mathrel}{symbols}{"37} + \def\mapsto{\mapstochar\rightarrow} +\DeclareMathSymbol{\sim}{\mathrel}{symbols}{"18} +\DeclareMathSymbol{\simeq}{\mathrel}{symbols}{"27} +\DeclareMathSymbol{\perp}{\mathrel}{symbols}{"3F} +\DeclareMathSymbol{\equiv}{\mathrel}{symbols}{"11} +\DeclareMathSymbol{\asymp}{\mathrel}{symbols}{"10} +\DeclareMathSymbol{\smile}{\mathrel}{letters}{"5E} +\DeclareMathSymbol{\frown}{\mathrel}{letters}{"5F} +\DeclareMathSymbol{\leftharpoonup}{\mathrel}{letters}{"28} +\DeclareMathSymbol{\leftharpoondown}{\mathrel}{letters}{"29} +\DeclareMathSymbol{\rightharpoonup}{\mathrel}{letters}{"2A} +\DeclareMathSymbol{\rightharpoondown}{\mathrel}{letters}{"2B} +% \end{macrocode} +% +% Here cometh much profligate robustification of math constructs. +% Warning: some of these commands may become non-robust if an +% AMS package is loaded. +% +% Further potential problems: some math font packages may make +% unfortunate assumptions about some of these definitions that are +% not true of the robust versions we need. +% \changes{v2.3}{2004/02/02} +% {Many things from here on made robust} +% \begin{macrocode} +\DeclareRobustCommand + \cong{\mathrel{\mathpalette\@vereq\sim}} % congruence sign +\def\@vereq#1#2{\lower.5\p@\vbox{\lineskiplimit\maxdimen\lineskip-.5\p@ + \ialign{$\m@th#1\hfil##\hfil$\crcr#2\crcr=\crcr}}} +\DeclareRobustCommand + \notin{\mathrel{\m@th\mathpalette\c@ncel\in}} +\def\c@ncel#1#2{\m@th\ooalign{$\hfil#1\mkern1mu/\hfil$\crcr$#1#2$}} +\DeclareRobustCommand + \rightleftharpoons{\mathrel{\mathpalette\rlh@{}}} +\def\rlh@#1{\vcenter{\m@th\hbox{\ooalign{\raise2pt + \hbox{$#1\rightharpoonup$}\crcr + $#1\leftharpoondown$}}}} +\DeclareRobustCommand + \doteq{\buildrel\textstyle.\over=} +% \end{macrocode} +% +% \subsubsection{Arrows} +% +% \begin{macrocode} +\DeclareRobustCommand + \joinrel{\mathrel{\mkern-3mu}} +\DeclareRobustCommand + \relbar{\mathrel{\smash-}} % \smash, because - + % has the same height as + +% \end{macrocode} +% In contrast to \texttt{plain.tex} |\Relbar| got braces around the +% equal sign to guard against it being ``math active'' expanding to +% |\futurelet...|. This might be the case when packages are +% implementing shorthands for math, e.g. |=>| meaning |\Rightarrow| +% etc. It would actually be better not to use |=| in such +% definitions but instead define something like |\mathequalsign| +% and use this. However we can't do this now as it would break +% other math layouts where characters are in different places +% (since those wouldn't know about the need for a new command name). +% \changes{v2.2z}{2001/06/04}{Guard against math active equal sign in +% \cs{Relbar} (pr/3333)} +% \begin{macrocode} +\DeclareRobustCommand + \Relbar{\mathrel{=}} +\DeclareMathSymbol{\lhook}{\mathrel}{letters}{"2C} + \def\hookrightarrow{\lhook\joinrel\rightarrow} +\DeclareMathSymbol{\rhook}{\mathrel}{letters}{"2D} + \def\hookleftarrow{\leftarrow\joinrel\rhook} +\DeclareRobustCommand + \bowtie{\mathrel\triangleright\joinrel\mathrel\triangleleft} +% \end{macrocode} +% +% \changes{v2.2z}{2001/06/04}{Guard against math active equal and pipe +% sign in \cs{models} (pr/3333)} +% \begin{macrocode} +\DeclareRobustCommand + \models{\mathrel{|}\joinrel\Relbar} +\DeclareRobustCommand + \Longrightarrow{\Relbar\joinrel\Rightarrow} +% \end{macrocode} +% +% LaTeX Change: |\longrightarrow| and |\longleftarrow| redefined to make +% then robust. +% \begin{macrocode} +\DeclareRobustCommand\longrightarrow + {\relbar\joinrel\rightarrow} +\DeclareRobustCommand\longleftarrow + {\leftarrow\joinrel\relbar} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareRobustCommand + \Longleftarrow{\Leftarrow\joinrel\Relbar} +\DeclareRobustCommand + \longmapsto{\mapstochar\longrightarrow} +\DeclareRobustCommand + \longleftrightarrow{\leftarrow\joinrel\rightarrow} +\DeclareRobustCommand + \Longleftrightarrow{\Leftarrow\joinrel\Rightarrow} +\DeclareRobustCommand + \iff{\;\Longleftrightarrow\;} +% \end{macrocode} +% +% +% \subsubsection{Punctuation symbols} +% +% \begin{macrocode} +\DeclareMathSymbol{\ldotp}{\mathpunct}{letters}{"3A} +\DeclareMathSymbol{\cdotp}{\mathpunct}{symbols}{"01} +\DeclareMathSymbol{\colon}{\mathpunct}{operators}{"3A} +% \end{macrocode} +% +% +% This is commented out, since |\ldots| is now defined in ltoutenc.dtx. +% \begin{macrocode} +%\def\@ldots{\mathinner{\ldotp\ldotp\ldotp}} +%\DeclareRobustCommand\ldots +% {\relax\ifmmode\@ldots\else\mbox{$\m@th\@ldots\,$}\fi} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareRobustCommand + \cdots{\mathinner{\cdotp\cdotp\cdotp}} +\DeclareRobustCommand + \vdots{\vbox{\baselineskip4\p@ \lineskiplimit\z@ + \kern6\p@\hbox{.}\hbox{.}\hbox{.}}} +\DeclareRobustCommand + \ddots{\mathinner{\mkern1mu\raise7\p@ + \vbox{\kern7\p@\hbox{.}}\mkern2mu + \raise4\p@\hbox{.}\mkern2mu\raise\p@\hbox{.}\mkern1mu}} +% \end{macrocode} +% +% +% \subsubsection{Math accents} +% +% \begin{macrocode} +\DeclareMathAccent{\acute}{\mathalpha}{operators}{"13} +\DeclareMathAccent{\grave}{\mathalpha}{operators}{"12} +\DeclareMathAccent{\ddot}{\mathalpha}{operators}{"7F} +\DeclareMathAccent{\tilde}{\mathalpha}{operators}{"7E} +\DeclareMathAccent{\bar}{\mathalpha}{operators}{"16} +\DeclareMathAccent{\breve}{\mathalpha}{operators}{"15} +\DeclareMathAccent{\check}{\mathalpha}{operators}{"14} +\DeclareMathAccent{\hat}{\mathalpha}{operators}{"5E} +\DeclareMathAccent{\vec}{\mathord}{letters}{"7E} +\DeclareMathAccent{\dot}{\mathalpha}{operators}{"5F} +\DeclareMathAccent{\widetilde}{\mathord}{largesymbols}{"65} +\DeclareMathAccent{\widehat}{\mathord}{largesymbols}{"62} +% \end{macrocode} +% For some reason plain \TeX{} never bothered to provide +% a ring accent in math (although it is available in the fonts), +% but since we got a request for it here we go: +% \changes{v2.2t}{1998/04/11}{Added \cs{mathring} accent (pr2785)} +% \begin{macrocode} +\DeclareMathAccent{\mathring}{\mathalpha}{operators}{"17} +% \end{macrocode} +% +% +% \subsubsection{Radicals} +% +% \changes{v2.2o}{1996/05/17}{\cs{@@sqrt} removed, at last} +% \begin{macrocode} +\DeclareMathRadical{\sqrtsign}{symbols}{"70}{largesymbols}{"70} +% \end{macrocode} +% +% +% \subsubsection{Over and under something, etc} +% +% \begin{macrocode} +\def\overrightarrow#1{\vbox{\m@th\ialign{##\crcr + \rightarrowfill\crcr\noalign{\kern-\p@\nointerlineskip} + $\hfil\displaystyle{#1}\hfil$\crcr}}} +\def\overleftarrow#1{\vbox{\m@th\ialign{##\crcr + \leftarrowfill\crcr\noalign{\kern-\p@\nointerlineskip}% + $\hfil\displaystyle{#1}\hfil$\crcr}}} +\def\overbrace#1{\mathop{\vbox{\m@th\ialign{##\crcr\noalign{\kern3\p@}% + \downbracefill\crcr\noalign{\kern3\p@\nointerlineskip}% + $\hfil\displaystyle{#1}\hfil$\crcr}}}\limits} +\def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr + $\hfil\displaystyle{#1}\hfil$\crcr + \noalign{\kern3\p@\nointerlineskip}% + \upbracefill\crcr\noalign{\kern3\p@}}}}\limits} +% \end{macrocode} +% (quite a waste of tokens, IMHO --- Frank) +% \begin{macrocode} +\def\skew#1#2#3{{\muskip\z@#1mu\divide\muskip\z@\tw@ \mkern\muskip\z@ + #2{\mkern-\muskip\z@{#3}\mkern\muskip\z@}\mkern-\muskip\z@}{}} +% \end{macrocode} +% +% \changes{v2.2n}{1995/11/21}{Incorporate changed figures, +% as in plain.tex} +% \begin{macrocode} +\def\rightarrowfill{$\m@th\smash-\mkern-7mu% + \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill + \mkern-7mu\mathord\rightarrow$} +\def\leftarrowfill{$\m@th\mathord\leftarrow\mkern-7mu% + \cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill + \mkern-7mu\smash-$} +\DeclareMathSymbol{\braceld}{\mathord}{largesymbols}{"7A} +\DeclareMathSymbol{\bracerd}{\mathord}{largesymbols}{"7B} +\DeclareMathSymbol{\bracelu}{\mathord}{largesymbols}{"7C} +\DeclareMathSymbol{\braceru}{\mathord}{largesymbols}{"7D} +\def\downbracefill{$\m@th \setbox\z@\hbox{$\braceld$}% + \braceld\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\braceru + \bracelu\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\bracerd$} +\def\upbracefill{$\m@th \setbox\z@\hbox{$\braceld$}% + \bracelu\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\bracerd + \braceld\leaders\vrule \@height\ht\z@ \@depth\z@\hfill\braceru$} +% \end{macrocode} +% +% \subsubsection{Delimiters} +% +% \begin{macrocode} +\DeclareMathDelimiter{\lmoustache} % top from (, bottom from ) + {\mathopen}{largesymbols}{"7A}{largesymbols}{"40} +\DeclareMathDelimiter{\rmoustache} % top from ), bottom from ( + {\mathclose}{largesymbols}{"7B}{largesymbols}{"41} +\DeclareMathDelimiter{\arrowvert} % arrow without arrowheads + {\mathord}{symbols}{"6A}{largesymbols}{"3C} +\DeclareMathDelimiter{\Arrowvert} % double arrow without arrowheads + {\mathord}{symbols}{"6B}{largesymbols}{"3D} +\DeclareMathDelimiter{\Vert} + {\mathord}{symbols}{"6B}{largesymbols}{"0D} +\let\|=\Vert +\DeclareMathDelimiter{\vert} + {\mathord}{symbols}{"6A}{largesymbols}{"0C} +\DeclareMathDelimiter{\uparrow} + {\mathrel}{symbols}{"22}{largesymbols}{"78} +\DeclareMathDelimiter{\downarrow} + {\mathrel}{symbols}{"23}{largesymbols}{"79} +\DeclareMathDelimiter{\updownarrow} + {\mathrel}{symbols}{"6C}{largesymbols}{"3F} +\DeclareMathDelimiter{\Uparrow} + {\mathrel}{symbols}{"2A}{largesymbols}{"7E} +\DeclareMathDelimiter{\Downarrow} + {\mathrel}{symbols}{"2B}{largesymbols}{"7F} +\DeclareMathDelimiter{\Updownarrow} + {\mathrel}{symbols}{"6D}{largesymbols}{"77} +\DeclareMathDelimiter{\backslash} % for double coset G\backslash H + {\mathord}{symbols}{"6E}{largesymbols}{"0F} +\DeclareMathDelimiter{\rangle} + {\mathclose}{symbols}{"69}{largesymbols}{"0B} +\DeclareMathDelimiter{\langle} + {\mathopen}{symbols}{"68}{largesymbols}{"0A} +\DeclareMathDelimiter{\rbrace} + {\mathclose}{symbols}{"67}{largesymbols}{"09} +\DeclareMathDelimiter{\lbrace} + {\mathopen}{symbols}{"66}{largesymbols}{"08} +\DeclareMathDelimiter{\rceil} + {\mathclose}{symbols}{"65}{largesymbols}{"07} +\DeclareMathDelimiter{\lceil} + {\mathopen}{symbols}{"64}{largesymbols}{"06} +\DeclareMathDelimiter{\rfloor} + {\mathclose}{symbols}{"63}{largesymbols}{"05} +\DeclareMathDelimiter{\lfloor} + {\mathopen}{symbols}{"62}{largesymbols}{"04} +% \end{macrocode} +% +% \begin{macro}{\lgroup} +% \begin{macro}{\rgroup} +% \begin{macro}{\bracevert} +% There are three plain \TeX{} delimiters which are not fully +% supported by NFSS, since they partly point into a bold cmr font. +% Allocating a full symbol font, just to have three delimiters +% seems a bit too much given the limited space available. For this +% reason only the extensible sizes are supported. If this is not +% desired one can use, without losing portability, define |\mathbf| +% and |\mathtt| as font symbol alphabet (setting up +% \texttt{cmr/bx/n} and \texttt{cmtt/m/n} as symbol fonts first) +% and modify the delimiter declarations to point with their +% small variant to those symbol fonts. (This is done in +% \texttt{oldlfont.dtx} so look there for examples.) +% \begin{macrocode} +\DeclareMathDelimiter{\lgroup} % extensible ( with sharper tips + {\mathopen}{largesymbols}{"3A}{largesymbols}{"3A} +\DeclareMathDelimiter{\rgroup} % extensible ) with sharper tips + {\mathclose}{largesymbols}{"3B}{largesymbols}{"3B} +\DeclareMathDelimiter{\bracevert} % the vertical bar that extends braces + {\mathord}{largesymbols}{"3E}{largesymbols}{"3E} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Math versions of text commands} +% +% \changes{v2.2k}{1995/06/05}{Moved math commands from ltoutenc.dtx.} +% +% The |\mathunderscore| here is really a text definition, so it has +% been put back into |ltoutenc.dtx| (by Chris, 30/04/97) and should +% be removed from here. +% +% These symbols are the math versions of text commands such as |\P|, +% |\$|, etc. +% \begin{macro}{\mathparagraph} +% \changes{v2.2q}{1997/01/08} +% {Define using \cs{DeclareMathSymbol}} +% \begin{macro}{\mathsection} +% \begin{macro}{\mathdollar} +% \begin{macro}{\mathsterling} +% \begin{macro}{\mathunderscore} +% These math symbols are not in plain \TeX. +% \begin{macrocode} +\DeclareMathSymbol{\mathparagraph}{\mathord}{symbols}{"7B} +\DeclareMathSymbol{\mathsection}{\mathord}{symbols}{"78} +\DeclareMathSymbol{\mathdollar}{\mathord}{operators}{"24} +% \end{macrocode} +% +% \begin{macrocode} +\def\mathsterling{\mathit{\mathchar"7024}} +\def\mathunderscore{\kern.06em\vbox{\hrule\@width.3em}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\mathellipsis} +% This is plain \TeX's |\ldots|. +% \begin{macrocode} +\def\mathellipsis{\mathinner{\ldotp\ldotp\ldotp}}% +% \end{macrocode} +% \end{macro} +% +% \subsection{Other special functions and parameters} +% +% \subsubsection{Biggggg} +% +% \begin{macrocode} +\def\big#1{{\hbox{$\left#1\vbox to8.5\p@{}\right.\n@space$}}} +\def\Big#1{{\hbox{$\left#1\vbox to11.5\p@{}\right.\n@space$}}} +\def\bigg#1{{\hbox{$\left#1\vbox to14.5\p@{}\right.\n@space$}}} +\def\Bigg#1{{\hbox{$\left#1\vbox to17.5\p@{}\right.\n@space$}}} +\def\n@space{\nulldelimiterspace\z@ \m@th} +% \end{macrocode} +% +% +% +% \subsubsection{The log-like functions} +% +% \begin{macro}{\operator@font} +% The |\operator@font| determines the symbol font used for log-like +% functions. +% \begin{macrocode} +\def\operator@font{\mathgroup\symoperators} +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{Parameters} +% +% \begin{macrocode} +\thinmuskip=3mu +\medmuskip=4mu plus 2mu minus 4mu +\thickmuskip=5mu plus 5mu +% \end{macrocode} +% +% +% This finishes the low-level setup in \texttt{fontmath.ltx}. +% \begin{macrocode} +%</math> +% \end{macrocode} +% +% +% \section{Default cfg files} +% +% We provide default \texttt{cfg} files here to ensure that +% on installations that search large file trees we do not pick up +% some strange customisation files from somewhere. +% \changes{v2.2y}{2001/06/02}{Provide default cfg files (pr/3264)} +% \begin{macrocode} +%<*cfgtext|cfgmath|cfgprel> +%% +%% +%% +%% Load the standard setup: +%% +%<+cfgtext>\input{fonttext.ltx} +%<+cfgmath>\input{fontmath.ltx} +%<+cfgprel>\input{preload.ltx} +%% +%% Small changes could go here; see documentation in cfgguide.tex for +%% allowed modifications. +%% +%% In particular it is not allowed to misuse this configuration file +%% to modify internal LaTeX commands! +%% +%% If you use this file as the basis for configuration please change +%% the \ProvidesFile lines to clearly identify your modification, e.g., +%% +%<+cfgtext>%% \ProvidesFile{fonttext.cfg}[2001/06/01 +%<+cfgmath>%% \ProvidesFile{fonttext.cfg}[2001/06/01 +%<+cfgprel>%% \ProvidesFile{preload.cfg}[2001/06/01 +%% Customised local font setup] +%% +%% +%</cfgtext|cfgmath|cfgprel> +% \end{macrocode} +% +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/base/format.ins b/Master/texmf-dist/source/latex/base/format.ins new file mode 100644 index 00000000000..8d05e13d3af --- /dev/null +++ b/Master/texmf-dist/source/latex/base/format.ins @@ -0,0 +1,207 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% +\input docstrip +\keepsilent + +\declarepreamble\mainpreamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\declarepreamble\cfgpreamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +Details of how to use a configuration file to modify this part of +the system are in the document `cfgguide.tex'. + + +\endpreamble + + +\usepreamble\mainpreamble +\usedir{tex/latex/base} + +\generate{% + \file{latex.ltx}{% + \from{ltdirchk.dtx}{initex,2ekernel,dircheck} + \from{ltplain.dtx}{2ekernel} + \from{ltvers.dtx}{2ekernel} + \from{ltdefns.dtx}{2ekernel} + \from{ltalloc.dtx}{2ekernel} + \from{ltcntrl.dtx}{2ekernel} + \from{lterror.dtx}{2ekernel} + \from{ltpar.dtx}{2ekernel} + \from{ltspace.dtx}{2ekernel} + \from{ltlogos.dtx}{2ekernel} + \from{ltfiles.dtx}{2ekernel} + \from{ltoutenc.dtx}{2ekernel} + \from{ltcounts.dtx}{2ekernel} + \from{ltlength.dtx}{2ekernel} + \from{ltfssbas.dtx}{2ekernel} + \from{ltfsstrc.dtx}{2ekernel} + \from{ltfsscmp.dtx}{compat,2ekernel} + \from{ltfssdcl.dtx}{compat,2ekernel} + \from{ltfssini.dtx}{compat} + \from{ltfntcmd.dtx}{2ekernel} + \from{ltpageno.dtx}{2ekernel} + \from{ltxref.dtx}{2ekernel} + \from{ltmiscen.dtx}{2ekernel} + \from{ltmath.dtx}{2ekernel} + \from{ltlists.dtx}{2ekernel} + \from{ltboxes.dtx}{2ekernel} + \from{lttab.dtx}{2ekernel} + \from{ltpictur.dtx}{2ekernel} + \from{ltthm.dtx}{2ekernel} + \from{ltsect.dtx}{2ekernel} + \from{ltfloat.dtx}{2ekernel} + \from{ltidxglo.dtx}{2ekernel} + \from{ltbibl.dtx}{2ekernel} + \from{ltpage.dtx}{2ekernel} + \from{ltoutput.dtx}{2ekernel} + \from{ltclass.dtx}{2ekernel} + \from{ltfinal.dtx}{2ekernel}} + \file{tracefnt.sty}{% + \from{ltfsstrc.dtx}{package,trace}} + \file{flafter.sty}{% + \from{ltoutput.dtx}{flafter}} +%%% generate general option files modifying the kernel behavior + \file{fleqn.clo}{% + \from{ltmath.dtx}{fleqn}} + \file{leqno.clo}{% + \from{ltmath.dtx}{leqno}} + } + + + + +% \generateFile{fltrace.sty}{t}{% %%% not yet finished +% \from{ltoutput.dtx}{fltrace,trace} +% } + + +\generateFile{oldlfont.sty}{t}{% + \from{oldlfont.dtx}{package} +} + +\generateFile{newlfont.sty}{t}{% + \from{newlfont.dtx}{package} +} + + +%%%%%%%%%%%%%%%%% CUSTOMISABLE FILES + +\usedir{tex/latex/base} + +\usepreamble\cfgpreamble + +\generateFile{hyphen.ltx}{t}{% + \from{lthyphen.dtx}{default} +} + + +\generate{ + \file{fonttext.ltx}{ + \from{fontdef.dtx}{text}} + \file{fontmath.ltx}{ + \from{fontdef.dtx}{math}} + \file{fonttext.cfg}{ + \from{fontdef.dtx}{cfgtext}} + \file{fontmath.cfg}{ + \from{fontdef.dtx}{cfgmath}} + \file{preload.cfg}{ + \from{fontdef.dtx}{cfgprel}} + } + +\generateFile{preload.ltx}{t}{% + \from{preload.dtx}{preload,cm,xpt,tex}} + +\endbatchfile + + + diff --git a/Master/texmf-dist/source/latex/base/graphpap.dtx b/Master/texmf-dist/source/latex/base/graphpap.dtx new file mode 100644 index 00000000000..e16442017dc --- /dev/null +++ b/Master/texmf-dist/source/latex/base/graphpap.dtx @@ -0,0 +1,189 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%% +%% File `graphpap.dtx'. +%% Copyright (C) 1994 by Leslie Lamport +%% all rights reserved. +%% +% +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{graphpap} +%<package> [1994/08/09 v1.0c Standard LaTeX graphpap package (LL)] +% +%<*driver> +\documentclass{ltxdoc} +\usepackage{graphpap} +\GetFileInfo{graphpap.sty} +\begin{document} +\title{The \textsf{graphpap} package\thanks{This file + has version number \fileversion, last + revised \filedate.}} +\author{Leslie Lamport} +\date{\filedate} + \maketitle + \DocInput{graphpap.dtx} +\end{document} +%</driver> +% \fi +% +% \CheckSum{114} +% +% \changes{v1.0b}{1994/04/28}{(DPC) convert to doc format} +% +% +% |\graphpaper|\oarg{N}\parg{X,Y}\parg{DX,DY} +% Makes a grid with left-hand corner at \parg{X,Y}, extending +% \parg{DX,DY} units in the X and Y directions, where the lines are +% \emph{N} units apart. Every fifth line is thick and is numbered. +% The default value of \emph{N} is 10. +% The arguments must all be integers. +% +% \StopEventually +% +% First, we define three counters. The first two are defined +% as raw TeX counters since multiplication and division must be +% performed in them. +% +% \changes{v1.0b}{1994/04/28}{(DPC) Remove allocations.} +% \begin{macrocode} +%<*package> +% \newcount\@gridx% now (\@tempcnta) +% \newcount\@gridy% now (\@tempcntb) +% \newcounter{@grid} +\let\c@@grid\count@ +% \end{macrocode} +% +% Next we define the following commands to draw vertical and horizontal +% grids. The ``nonum'' commands just draw the grids; the other commands +% also print numbers. All the arguments must be integers. +% +% VERTICAL GRIDS +% +% |\@vgrid|\parg{xpos,ypos}\marg{xincrement}^^A +% \marg{number-of-lines}\marg{length-of-lines}\\ +% |\@nonumvgrid|\parg{xpos,ypos}\marg{xincrement}^^A +% \marg{number-of-lines} \marg{length-of-lines} +% +% HORIZONTAL GRIDS +% +% |\@hgrid|\parg{xpos,ypos}\marg{yincrement}^^A +% \marg{number-of-lines}\marg{length-of-lines}\\ +% |\@nonumhgrid| same as |\@hgrid| but no numbers drawn +% +% \begin{macrocode} +\def\@vgrid(#1,#2)#3#4#5{% + \setcounter{@grid}{#1}% + \multiput(#1,#2)(#3,0){#4}{\line(0,1){#5}}% + \multiput(#1,#2)(#3,0){#4}{\@vgridnumber{#3}}} +% \end{macrocode} +% +% \begin{macrocode} +\def\@vgridnumber#1{% + \makebox(0,0)[t]{% + \shortstack{\rule{0pt}{10pt}\\\arabic{@grid}}}% + \addtocounter{@grid}{#1}} +% \end{macrocode} +% +% \begin{macrocode} +\def\@nonumvgrid(#1,#2)#3#4#5{% + \multiput(#1,#2)(#3,0){#4}{\line(0,1){#5}}} +% \end{macrocode} +% +% \begin{macrocode} +\def\@hgrid(#1,#2)#3#4#5{% + \setcounter{@grid}{#2}% + \multiput(#1,#2)(0,#3){#4}{\line(1,0){#5}}% + \multiput(#1,#2)(0,#3){#4}{\@hgridnumber{#3}}} +% \end{macrocode} +% +% \begin{macrocode} +\def\@hgridnumber#1{% + \makebox(0,0)[r]{\arabic{@grid}\hspace{10pt}}% + \addtocounter{@grid}{#1}} +% \end{macrocode} +% +% \begin{macrocode} +\def\@nonumhgrid(#1,#2)#3#4#5{% + \multiput(#1,#2)(0,#3){#4}{\line(1,0){#5}}} +% \end{macrocode} +% +% Finally, |\graphpaper| is defined in a straightforward way in terms of +% the commands above. +% +% \begin{macro}{\graphpaper} +% \changes{v1.0c}{1994/08/09}{(DPC) add \cs{leavevmode}} +% \begin{macrocode} +\newcommand\graphpaper[1][10]{\leavevmode\@grid{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@grid} +% +% \changes{v1.0b}{1994/04/28} +% {(DPC) convert ignore spaces between arguments} +% \begin{macrocode} +\def\@grid#1(#2,#3)#4{\@grid@i{#1}{#2}{#3}(} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@grid@i} +% +% \changes{v1.0b}{1994/04/28} +% {(DPC) macro introduced} +% \begin{macrocode} +\def\@grid@i#1#2#3(#4,#5){% + \@tempcnta=#4\relax + \divide\@tempcnta#1\relax + \advance\@tempcnta1\relax + {\thinlines\@nonumvgrid(#2,#3){#1}{\@tempcnta}{#5} + \@tempcnta#4\relax + \divide\@tempcnta5\relax + \divide\@tempcnta#1\relax + \advance\@tempcnta1\relax + \@tempcntb5\relax + \multiply\@tempcntb#1\relax + \thicklines\@vgrid(#2,#3){\@tempcntb}{\@tempcnta}{#5} + \@tempcnta#5\relax + \divide\@tempcnta #1\relax + \advance\@tempcnta1\relax + \thinlines\@nonumhgrid(#2,#3){#1}{\@tempcnta}{#4} + \@tempcnta#5\relax + \divide\@tempcnta5\relax + \divide\@tempcnta#1\relax + \advance\@tempcnta1\relax + \thicklines\@hgrid(#2,#3){\@tempcntb}{\@tempcnta}{#4}}% + \ignorespaces} +%</package> +% \end{macrocode} +% \end{macro} +% +% \Finale +% + diff --git a/Master/texmf-dist/source/latex/base/graphpap.ins b/Master/texmf-dist/source/latex/base/graphpap.ins new file mode 100644 index 00000000000..93a347633e8 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/graphpap.ins @@ -0,0 +1,78 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\generateFile{graphpap.sty}{t}{\from{graphpap.dtx}{package}} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/ifthen.dtx b/Master/texmf-dist/source/latex/base/ifthen.dtx new file mode 100644 index 00000000000..18c24bd6631 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ifthen.dtx @@ -0,0 +1,527 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%% +%% File `ifthen.dtx'. +%% Copyright (C) 1991 by Leslie Lamport +%% Copyright (C) 1994-2001 LaTeX3 project, David Carlisle +%% all rights reserved. +%% +% +%<*dtx> + \ProvidesFile{ifthen.dtx} +%</dtx> +%<package>\NeedsTeXFormat{LaTeX2e}[1994/12/01] +%<package>\ProvidesPackage{ifthen} +%<driver>\ProvidesFile{ifthen.drv} +% \fi +% \ProvidesFile{ifthen.dtx} + [2001/05/26 v1.1c Standard LaTeX ifthen package (DPC)] +% +% \iffalse +%<*driver> +\documentclass{ltxdoc} +\begin{document} +\DocInput{ifthen.dtx} +\end{document} +%</driver> +% \fi +% +% \GetFileInfo{ifthen.dtx} +% +% \title{The \textsf{ifthen} package\thanks{This file +% has version number \fileversion, last +% revised \filedate.}} +% \author{David Carlisle} +% \date{\filedate} +% \author{David Carlisle} +% \maketitle +% +% \CheckSum{306} +% +% +% \begin{abstract} +% This file implements an |\ifthenelse| command for \LaTeXe. +% The algorithm used is compatible with that used in the \LaTeX~2.09 +% |ifthen| style option. It has been recoded, making the resulting +% definitions somewhat more compact and efficient. +% \end{abstract} +% +% \changes{v1.0a}{1993/10/15}{New implementation} +% \changes{v1.0b}{1993/12/17}{Upgrade to LaTeX2e} +% \changes{v1.0e}{1994/02/11}{Improve documentation} +% \changes{v1.0f}{1994/03/02}{Remove need for dtx file} +% \changes{v1.0g}{1994/03/14}{Modify for the new ltxdoc.cls} +% \changes{v1.0k}{1995/04/25}{Fix `driver' docstrip guards.} +% \changes{v1.0n}{1997/11/03}{Documentation fix.} +% \changes{v1.0o}{1998/08/17}{Documentation fix.} +% +% \section{Introduction} +% +% \DescribeMacro{\ifthenelse} +% |\ifthenelse{|^^A +% \meta{test}|}{|\meta{then clause}|}{|\meta{else clause}|}| +% +% Evaluates \meta{test} as a boolean function, and then executes +% either \meta{then clause} or \meta{else clause}. +% +% \meta{test} is a boolean expression using the infix connectives, +% |\and|, |\or|, the unary |\not| and parentheses |\( \)|. +% +% As an alternative notation |\AND|, |\OR| and |\NOT| can be +% used. This is safer since it can't be misinterpreted +% when appearing inside a \TeX-conditional in which |\or| has a +% different meaning. +% +% The atomic propositions are:\\ +% \meta{number} |<| \meta{number} \\ +% \meta{number} |=| \meta{number} \\ +% \meta{number} |>| \meta{number} \\ +% |\isodd{| \meta{number} |}|\\ +% |\isundefined{| \meta{command name} |}|\\ +% |\equal{|\meta{string}|}{|\meta{string}|}|\\ +% |\lengthtest{|\meta{dimen}|<|\meta{dimen}|}|\\ +% |\lengthtest{|\meta{dimen}|=|\meta{dimen}|}|\\ +% |\lengthtest{|\meta{dimen}|>|\meta{dimen}|}|\\ +% |\boolean{|\meta{name}|}| +% +% The \meta{string}s tested by |\equal| may be any sequence of commands +% that expand to a list of tokens. If these expansions are equal, then +% the proposition is true. +% +% |\isodd| is true if the \meta{number} is odd, and false otherwise +% (even if the argument is not a number). +% +% |\isundefined{\cmd}| is true if |\cmd| is not defined. +% +% |\boolean{xyz}| returns the truth value contained in the primitive +% \TeX\ |\if|, |\ifxyz|. This is usually used with boolean flags +% created with |\newboolean| and |\provideboolean| described below. +% It can also be used with the names of |\newif| created tokens, and +% primitive \TeX\ |\if| constructs, for example |\boolean{true}| +% (|\iftrue|), |\boolean{mmode}| (|\ifmmode|) etc. +% +% +% The commands:\\ +% |\newboolean|\marg{name}\DescribeMacro{\newboolean}\ and\ +% |\provideboolean|\marg{name}\DescribeMacro{\provideboolean}\ +% are provided so the user can easily create new boolean flags. +% As for |\newcommand|, |\newboolean| generates an error if the +% command name is not new. |\provideboolean| silently does nothing in +% that case. +% +% The boolean flags may be set with:\\ +% |\setboolean|\marg{name}\marg{value}\DescribeMacro{\setboolean}\\ +% \meta{value} may be either |true| or |false| (any CaSe). +% +% Note that there is no precedence between |\and| and |\or|. +% The proposition is evaluated in a left right manner. |\not| only +% applies to the immediately following proposition. (This is consistent +% with Lamport's |ifthen.sty|.) In this style, though the test is +% `lazily' evaluated, so for instance if the first proposition in an +% |\or| is true, the second one is skipped. (On the second pass---the +% first pass in an |\edef| expands clauses in all propositions.) +% +% Apart from the addition of the extra atomic propositions |\isodd|, +% |\boolean|, |\lengthtest| and |\isundefined|, +% the only known incompatibility is that +% in this package the expression|\not\not|\meta{P} is equivalent to +% \meta{P}. +% However in the original style it was equivalent to |\not|\meta{P}. +% This is intentional (bug fix:-). +% +% \DescribeMacro{\whiledo} +% The command |\whiledo| is also defined (copied directly from +% the \LaTeX2.09 definition). +% +% |\whiledo{|\meta{test}|}{|\meta{while clause}|}| +% +% With \meta{test} as above, repeatedly executes \meta{while clause} +% while the test remains true. +% +% \StopEventually{} +% +% \section{The Implementation} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% \begin{macro}{\TE@throw} +% In order to support the syntax of |ifthen.sty|, which allows access +% to the primitive \TeX\ syntax for a numeric test, rather than a |{}| +% delimited argument form, it is most convenient to work `within' an +% |\ifnum|. |\ift@throw| `throws' you out of the current |\ifnum| so +% that you can (eg) start an |\ifdim| for the length tests. +% \begin{macrocode} +\def\TE@throw{\@ne=\@ne\noexpand\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\boolean} +% A non-standard extension to |ifthen|, supporting boolean was +% previously available, this is a simpler implementation. +% \begin{macrocode} +\def\boolean#1#2{% + \TE@throw\expandafter\noexpand\csname if#1\endcsname#2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\TE@length} +% Testing lengths. |#1| is the test. The extra argument gobbles spaces. +% \begin{macrocode} +\def\TE@length#1#2{\TE@throw\noexpand\ifdim#1#2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\TE@odd} +% \begin{macro}{\TE@@odd} +% Testing odd/even. This is true if |#1| is an odd number, and false +% otherwise (even if |#1| is not a number at all). +% +% It is hard to make this completely reliable. Here I have erred on the +% side of safety. This should not generate a \TeX\ error if given any +% robust commands as its argument. However it returns true on any +% argument that \emph{starts} with an odd number |11xx| which is bad, +% and it can not deal with \TeX's count registers, although \LaTeX\ +% counters work (via |\value|). +% \changes{v1.0b}{1993/12/17}{Improve \cs{isodd}.} +% \changes{v1.0c}{1994/01/20}{Improve \cs{isodd} again.} +% \begin{macrocode} +\def\TE@odd#1#2{% + \TE@throw\noexpand\TE@@odd#1\noexpand\@nil\noexpand\ifodd\count@#2} +% \end{macrocode} +% +% |\TE@@odd| is not expanded on the first pass. +% \begin{macrocode} +\def\TE@@odd#1#2\@nil{% + \@defaultunits + \count@\if-#1-0\else0\expandafter#1\fi#2\relax\@nnil} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\TE@repl} +% |\TE@repl| replaces the single token |#1| by |#2|. (Not within |{}| +% groups.) It is used to replace |\or| by |\TE@or| without the need to +% redefine |\or|. Earlier versions just |\let\or\TE@or| but this has a +% bad effect on the expansion of commands which use the primitive +% |\or| internally, eg |\alph|, and so caused surprising results if +% these commands were used inside |\equal|. +% \changes{v1.0h}{1994/05/14}{macro added} +% \begin{macrocode} +\def\TE@repl#1#2{% + \long\def\@tempc##1#1##2{% + \def\@tempa{##2}\def\@tempb{\@tempc}% + \ifx\@tempa\@tempb + \toks@\expandafter{\the\toks@##1}% + \expandafter\@gobble + \else + \toks@\expandafter{\the\toks@##1#2}% + \expandafter\@tempc + \fi + ##2}% + \expandafter\toks@\expandafter{\expandafter}% + \expandafter\@tempc\the\toks@#1\@tempc} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\ifthenelse} +% The remaining macros in this file are derived from the ones in +% |ifthen.sty| but recoded and simplified. The main simplification is +% that the original style (and the |\boolean| extensions) expressed +% logical values always in terms of |\ifnum|. As |\fi| is `untyped' this +% is not necessary, so for example the length tests can return values +% via |\ifdim|, the trailing |\fi| will not complain, even though it was +% `expecting' an |\ifnum|. Also the system of passing information via +% macros expanding to |T| or |F| has been completely replaced by a +% simpler system using |\iftrue|, which furthermore allows lazy +% evaluation on the second pass. +% \begin{macrocode} +\long\def\ifthenelse#1{% +% \end{macrocode} +% \changes{v1.0h}{1994/05/14}{Use \cs{TE@repl}} +% \begin{macrocode} + \toks@{#1}% + \TE@repl\or\TE@or + \TE@repl\and\TE@and + \TE@repl\not\TE@neg +% \end{macrocode} +% +% \changes{v1.1c}{2001/05/25}{Added \cs{AND}, \cs{OR} and \cs{NOT} as +% boolean operators as alternative to the lower case versions +% (pr/3297)} +% Support alternate names for the boolean operators (strictly +% speaking only |\OR| would be necessary). +% \begin{macrocode} + \TE@repl\OR\TE@or + \TE@repl\AND\TE@and + \TE@repl\NOT\TE@neg +% \end{macrocode} +% The original |ifthen.sty| processed everything inside a box +% assignment, to catch any extra spaces before they appeared in the +% output. Instead I have added extra arguments to the commands so they +% each remove any following space. +% +% Set up the user level names |\not| etc. +% \changes{v1.0c}{1994/01/20}{Modify \cs{protect} and \cs{value}} +% \changes{v1.0j}{1994/11/15}{Modify \cs{protect} add \cs{@setref}} +% \changes{v1.0l}{1996/03/22} +% {Use \cs{begingroup} not \cs{bgroup} for latex/2105} +% \changes{v1.1a}{1999/01/07}{\cs{isundefined} added for /2824} +% \begin{macrocode} + \begingroup + \let\protect\@unexpandable@protect + \def\@setref##1##2##3{% + \ifx##1\relax\z@\else\expandafter##2##1\fi}% + \def\value##1{\the\csname c@##1\endcsname}% + \let\equal\TE@equal \let\(\TE@lparen \let\)\TE@rparen + \let\isodd\TE@odd \let\lengthtest\TE@length + \let\isundefined\TE@undef +% \end{macrocode} +% For the first pass, in a group, make various tokens non-expandable. +% +% It is unfortunate that in order to remain compatible with |ifthen| +% syntax, it is necessary to have a two pass system. The first pass +% inside an |\edef| `exposes' the |\if|\ldots\ |\fi| tokens, so the +% corect clauses may be skipped on the second pass. This means that the +% whole |\ifthenelse| command does not work by expansion, and so +% possibly has only limited usefulness for macro code writers. +% The main problem with the |ifthen:| syntax is that (unique for \LaTeX) +% it does not uses a brace delimited argument form, and exposes the +% primitive \TeX\ syntax for \meta{number}. Pretty much the only way of +% parsing |1 > 2 \or 2 < 1| is to actually evaluate the primitive +% |\ifnum|s. A syntax such as:\\% +% |\or{\numtest{1<2}}{\lengthtest{1pt<1in}}|\\ +% could easily be evaluated in a one pass way, operating directly via +% expansion, and leaving no extra tokens in the token stream. +% +% Still, on with the code\ldots\ make |\@tempa| and |\@tempb| tokens +% non-expandable on the first pass. +% \changes{v1.0l}{1996/03/22} +% {Use \cs{begingroup} not \{ for latex/2105} +% \begin{macrocode} + \begingroup + \let\@tempa\relax\let\@tempb\relax + \xdef\@gtempa{\expandafter\TE@eval\the\toks@\TE@endeval}% + \endgroup +% \end{macrocode} +% Now outside the group, execute |\@gtempa| which causes all the +% |\if|s etc., to be evaluated, the final truth value is contained in +% the |\newif| token |\ifTE@val|. Finally this is tested and either the +% first or second following argument is chosen accordingly. +% \changes{v1.0d}{1994/01/24} +% {Use \cs{@firstoftwo} not \cs{@leftmark}.} +% \begin{macrocode} + \@gtempa + \expandafter\endgroup\ifTE@val + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\TE@eval} +% Initialise a term. (Expanded on the first pass). +% \begin{macrocode} +\def\TE@eval{\noexpand\TE@negatefalse\noexpand\iftrue\noexpand\ifnum} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifTE@val} +% \begin{macro}{\ifTE@negate} +% Two |\newif|s the first holds the current truth value of the +% expression. The second is a temporary flag which is true if we need to +% negate the current proposition. +% \begin{macrocode} +\newif\ifTE@val +\newif\ifTE@negate +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\TE@endeval} +% Finalise a term. (Expanded on the first pass). +% \begin{macrocode} +\def\TE@endeval{\relax + \noexpand\TE@setvaltrue\noexpand + \else + \noexpand\TE@setvalfalse\noexpand + \fi + \noexpand\TE@negatefalse\noexpand + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\TE@setvaltrue} +% \begin{macro}{\TE@setvalfalse} +% Set the |\ifTE@val| to true or false depending on the value of the +% current proposition, and the negate flag. (Not expanded on the first +% pass.) +% \begin{macrocode} +\def\TE@setvaltrue{% + \ifTE@negate\TE@valfalse\else\TE@valtrue\fi} +\def\TE@setvalfalse{\let\ifTE@val\ifTE@negate} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\TE@or} +% The internal version of |\or|. Ends the current term. +% If true skip the remaining terms. +% \begin{macrocode} +\def\TE@or{\TE@endeval\noexpand\ifTE@val\noexpand\else\noexpand\ifnum} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\TE@and} +% The internal version of |\and|. If false skip the remaining terms. +% \begin{macrocode} +\def\TE@and{\TE@endeval\noexpand\ifTE@val\noexpand\ifnum} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\TE@neg} +% \begin{macro}{\TE@negswitch} +% |\not|. Throw the current context, set a negate flag, then restart +% the |\ifnum|. |\TE@negswitch| is not expanded on the first pass. +% \begin{macrocode} +\def\TE@neg{\TE@throw\noexpand\TE@negswitch\noexpand\ifnum} +\def\TE@negswitch{\ifTE@negate\TE@negatefalse\else\TE@negatetrue\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\TE@lparen} +% |\(|. Throw the current context, then restart a term inside a group. +% \begin{macrocode} +\def\TE@lparen#1{\TE@throw\begingroup\TE@eval#1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\TE@rparen} +% |\)| end the current term, and the local group started by |\(|, but +% pass on the boolean value in |\if\@val T|. The |\noexpand| stops the +% |\expandafter| from expanding on the first pass. +% \begin{macrocode} +\def\TE@rparen#1{% + \TE@endeval + \noexpand\expandafter\endgroup\noexpand\ifTE@val#1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\TE@equal} +% |\equal| greatly simplified from the original. |\def| may be used +% rather than |\edef| as the whole thing is expanded anyway in the +% first pass. The boolean can be directly encoded with the |\ifx|, +% there is no need to start an equivalent |\ifnum|. +% \changes{v1.0h}{1994/05/14}{make long} +% \begin{macrocode} +\long\def\TE@equal#1#2#3{\TE@throw + \def\@tempa{#1}\def\@tempb{#2}% + \noexpand\ifx\@tempa\@tempb#3} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\setboolean} +% |\setboolean| takes |true| or |false|, as |#2|, and sets |#1| +% accordingly. +% \changes{v1.0i}{1994/05/27}{New style error commands} +% \begin{macrocode} +\def\setboolean#1#2{% + \lowercase{\def\@tempa{#2}}% + \@ifundefined{@tempswa\@tempa}% + {\PackageError{ifthen}% + {You can only set a boolean to `true' or `false'}\@ehc}% + {\@ifundefined{#1\@tempa}% + {\PackageError{ifthen}{Boolean #1 undefined}\@ehc}% + {\csname#1\@tempa\endcsname}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\newboolean} +% \changes{v1.0m}{1996/08/02}{Add \cs{@ifdefinable} test for latex/2220} +% Define a new `boolean'. +% \begin{macrocode} +\def\newboolean#1{% + \expandafter\@ifdefinable\csname if#1\endcsname{% + \expandafter\newif\csname if#1\endcsname}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\provideboolean} +% \changes{v1.0m}{1996/08/02}{Macro added for latex/2220} +% Define a new `boolean' if it is not already defined. +% \begin{macrocode} +\def\provideboolean#1{% + \@ifundefined{if#1}{% + \expandafter\newif\csname if#1\endcsname}\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\whiledo} +% |\whiledo| copied directly from the original.\\ +% |\whiledo{|\meta{test}|}{|\meta{body}|}|\\ +% repeatedly evaluates \meta{body} until \meta{test} is true. +% \begin{macrocode} +\long\def\whiledo#1#2{% + \ifthenelse{#1}% + {\@whiledotrue + \@whilesw\if@whiledo\fi + {#2% + \ifthenelse{#1}\@whiledotrue\@whiledofalse}}% + {}% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\TE@undef} +% \changes{v1.1a}{1999/01/07}{Macro added for /2824} +% test if csname is defined. |\ifx| test. +% \begin{macrocode} +\def\TE@undef#1#2{% + \TE@throw\noexpand\ifx\noexpand\@undefined\noexpand#1#2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@whiledo} +% Internal switch for |\whiledo|. +% \begin{macrocode} +\newif\if@whiledo +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</package> +% \end{macrocode} +% +% \Finale +\endinput diff --git a/Master/texmf-dist/source/latex/base/ifthen.ins b/Master/texmf-dist/source/latex/base/ifthen.ins new file mode 100644 index 00000000000..22d40efbb6c --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ifthen.ins @@ -0,0 +1,78 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\generateFile{ifthen.sty}{t}{\from{ifthen.dtx}{package}} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/inputenc.dtx b/Master/texmf-dist/source/latex/base/inputenc.dtx new file mode 100644 index 00000000000..2ebd81f6288 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/inputenc.dtx @@ -0,0 +1,2745 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%<*driver> +\documentclass{ltxdoc} +\usepackage[ascii]{inputenc} +\GetFileInfo{inputenc.sty} +\title{\filename} +\date{\fileversion\space\filedate} + \author{% + Alan Jeffrey\and + Frank Mittelbach} + +\begin{document} +\maketitle + \setlength\hfuzz{20pt} + \DocInput{inputenc.dtx} +\end{document} +%</driver> +% \fi +% +% \CheckSum{3415} +% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \changes{v0.01}{1994/03/09}{Created file.} +% \changes{v0.02}{1994/07/14}{Replaced \cs{Dh} by \cs{DH} and \cs{Th} +% by \cs{TH}.} +% \changes{v0.02}{1994/07/14}{Added \cs{ensuremath} to some math +% commands.} +% \changes{v0.02}{1994/07/14}{Added \cs{inputencoding}.} +% \changes{v0.03}{1994/09/04}{Added \cs{DeclareInputComposite} and the +% \cs{ProvidesCommand}s to the encoding files.} +% \changes{v0.03}{1994/09/04}{Removed the definition of the accent slots +% in Latin-1.} +% \changes{v0.04}{1994/10/20}{Replaced \cs{DeclareInputCharacter} by +% \cs{DeclareInputText} and \cs{DeclareInputMath}.} +% \changes{v0.04}{1994/10/20}{Removed \cs{DeclareInputComposite}.} +% \changes{v0.04}{1994/10/20}{Made many Latin-1 characters math-only.} +% \changes{v0.05}{1994/10/27}{Updated for the new version of ltoutenc.} +% \changes{v0.06}{1994/11/21}{Added \cs{textregistered}.} +% \changes{v0.06}{1994/11/21}{Added slot hex A0 to Latin-1.} +% \changes{v0.07}{1994/11/22}{Fixed typo A1 rather than A0.} +% \changes{v0.07}{1994/11/28}{Fixed where docstrip option had moved a +% line.} +% \changes{v0.09}{1994/12/10}{Added `beta test' message.} +% \changes{v0.09}{1994/12/10}{Made letters active and undefined by +% default, rather than illegal.} +% +% \changes{v0.9b}{1995/05/23}{Added Mac encoding, applemac.def} +% \changes{v0.9d}{1995/06/06}{Added cp437} +% \changes{v0.9f}{1995/09/21}{Added Next encoding, next.def} +% \changes{v0.9h}{1995/10/22}{Added Windows 3.1 ANSI encoding, +% ansinew.def} +% \changes{v0.9i}{1995/11/02}{Wrapped long lines} +% \changes{v0.9i}{1995/11/02}{Changed internal name \cs{a} to +% \cs{@tabacckludge} to protect against redefinition by malicious +% users.} +% \changes{v0.9j}{1995/11/14}{Remove \cs{endinput} so docstrip reaches +% ansinew encoding} +% \changes{v0.9k}{1995/11/29}{Replaced uses of \cs{textsterling} with +% \cs{pounds}.} +% \changes{v0.9m}{1995/12/04}{Added German version} +% \changes{v0.9m}{1995/12/04}{Replaced \cs{textasciitilde} by +% \cs{nobreakspace}.} +% \changes{v0.9m}{1995/12/04}{Made bullet and periodcentered text +% glyphs rather than math glyphs.} +% \changes{v0.9m}{1995/12/04}{Added \cs{@tabacckludge} hacks.} +% \changes{v0.9o}{1996/02/14} +% {Cedilla (\cs{c}\cs{ }) rather than (\cs{c}\{\}) latex/2077, +% finished on 1996/10/28} +% \changes{v0.9o}{1996/02/14} +% {0F0 corrected in cp850 latex/2080} +% \changes{v0.9o}{1996/02/14} +% {0B2 corrected in latin2 latex/2079} +% \changes{v0.9r}{1996/05/10}{Added cp852.def} +% \changes{v0.9t}{1996/10/28}{Added cp865.def} +% \changes{v0.9t}{1996/10/28} +% {Changed \cs{aa} and \cs{AA} to \cs{r} a and \cs{r} A} +% \changes{v0.9u}{1996/10/29}{Added more to cp865.def} +% \changes{v0.9y}{1997/04/30}{Added latin5.def (provided by +% H. Turgut Uyar: uyar@cs.itu.edu.tr)} +% \changes{v0.9z}{1997/05/10}{Added latin3.def (provided by +% J\"org Knappen and modified by Chris Rowley)} +% \changes{v0.91}{1997/08/19}{Put +% \cs{makeatletter}\ldots\cs{makeatother} around all .def files.} +% \changes{v0.92}{1997/09/08}{Added decmulti.def +% provided by M.Y. Chartoire. pr/2599} +% \changes{v0.93}{1997/11/23}{\cs{textperthousand} not +% \cs{textpermill}. pr/2673} +% \changes{v0.94}{1997/12/17}{Made degree a text glyph} +% \changes{v0.94}{1997/12/17}{Added to and tidied documentation} +% \changes{v0.94}{1997/12/17}{Ogonek: changed +% \cs{k}\{\} to \cs{k}\cs{ }} +% \changes{v0.94}{1997/12/17}{NOTE: for consistency, when available +% the robust text-or-math internal form is always used -- +% THIS MAY CHANGE} +% \changes{v0.95}{1997/12/20}{Updated documentation} +% \changes{v0.97}{1998/03/05}{Spanish ords changed to text chars, pr/2579} +% +% +% \section{Introduction} +% +% This package allows the user to specify an input encoding (for +% example, ASCII, ISO Latin-1 or Macintosh) by saying: +% \begin{quote} +% |\usepackage[|\emph{encoding name}|]{inputenc}| +% \end{quote} +% The encoding can also be selected in the document with: +% \begin{quote} +% |\inputencoding{|\emph{encoding name}|}| +% \end{quote} +% Originally this command was only to be used in vertical mode (with +% the idea that it should be only within a document when +% using text from several documents to build up a composite work such +% as a volume of journal articles. However, usages in certain +% languages suggested that it might be preferable to allow changing +% the input encoding at any time, which is what is possible now +% (though that is quite computing resource intensive). +% +% The encodings provided by this package are: +% \begin{itemize} +% \item |ascii| ASCII encoding for the range 32--127. +% \item |latin1| ISO Latin-1 encoding. +% \item |latin2| ISO Latin-2 encoding. +% \item |latin3| ISO Latin-3 encoding. +% \item |latin4| ISO Latin-4 encoding. +% \item |latin5| ISO Latin-5 encoding. +% \item |latin9| ISO Latin-9 encoding. +% \item |latin10| ISO Latin-10 encoding. +% \item |decmulti| DEC Multinational Character Set encoding. +% \item |cp850| IBM 850 code page. +% \item |cp852| IBM 852 code page. +% \item |cp858| IBM 858 code page (this is 850 with euro symbol). +% \item |cp437| IBM 437 code page. +% \item |cp437de| IBM 437 code page (German version). +% \item |cp865| IBM 865 code page. +% \item |applemac| Macintosh encoding. +% \item |macce| Macintosh Central European codepage. +% \item |next| Next encoding. +% \item |cp1250| Windows 1250 (central and eastern Europe) code page. +% \item |cp1252| Windows 1252 (Western Europe) code page. +% \item |cp1257| Windows 1257 (Baltic) code page. +% \item |ansinew| Windows 3.1 ANSI encoding, extension of Latin-1 +% (synonym\footnote{It is now generated using the guards +% \texttt{cp1252,ansinew} the latter only used for the provides +% file line.} for |cp1252|). +% \end{itemize} +% Each encoding has an associated |.def| file, for example +% |latin1.def| which defines the behaviour of each input character, +% using the commands: +% \begin{quote} +% |\DeclareInputText{|\emph{slot}|}{|\emph{text}|}| \\ +% |\DeclareInputMath{|\emph{slot}|}{|\emph{math}|}| +% \end{quote} +% This defines the input character \emph{slot} to be the +% \emph{text} material or \emph{math} material respectively. +% For example, |latin1.def| defines slots |"D6| (\AE) +% and |"B5| ($\mu$) by saying: +%\begin{verbatim} +% \DeclareInputText{214}{\AE} +% \DeclareInputMath{181}{\mu} +%\end{verbatim} +% Note that the \emph{commands} should be robust, and should not be +% dependent on the output encoding. The same \emph{slot} should not +% have both a text and a math declaration for it. (This restriction +% may be removed in future releases of inputenc). +% +% The |.def| file may also define +% commands using the declarations:\\ +% |\providecommand| or |\ProvideTextCommandDefault|. +% For example: +%\begin{verbatim} +% \ProvideTextCommandDefault{\textonequarter}{\ensuremath{\frac14}} +% \DeclareInputText{188}{\textonequarter} +%\end{verbatim} +% The use of the `provide' forms here will ensure that a +% better definition will not be over-written; their use is +% recommended since, in general, the best definition depends on the +% fonts available. +% +% See the documentation in |fntguide.tex| and |ltoutenc.dtx| for +% details of how to declare text commands. +% +% \StopEventually{} +% +% \section{Announcing the files} +% +% We announce the files: +% \begin{macrocode} +%<package>\NeedsTeXFormat{LaTeX2e}[1995/12/01] +%<package>\ProvidesPackage{inputenc} +%<ascii> \ProvidesFile{ascii.def} +%<latin1> \ProvidesFile{latin1.def} +%<latin2> \ProvidesFile{latin2.def} +%<latin3> \ProvidesFile{latin3.def} +%<latin4> \ProvidesFile{latin4.def} +%<latin5> \ProvidesFile{latin5.def} +%<latin9> \ProvidesFile{latin9.def} +%<latin10> \ProvidesFile{latin10.def} +%<decmulti> \ProvidesFile{decmulti.def} +%<cp850> \ProvidesFile{cp850.def} +%<cp852> \ProvidesFile{cp852.def} +%<cp858> \ProvidesFile{cp858.def} +%<cp437> \ProvidesFile{cp437.def} +%<cp437de> \ProvidesFile{cp437de.def} +%<cp865> \ProvidesFile{cp865.def} +%<applemac> \ProvidesFile{applemac.def} +%<applemacce> \ProvidesFile{macce.def} +%<next> \ProvidesFile{next.def} +%<ansinew> \ProvidesFile{ansinew.def} +%<cp1252&!ansinew> \ProvidesFile{cp1252.def} +%<cp1250> \ProvidesFile{cp1250.def} + [2004/02/05 v1.0d Input encoding file] +%<cp850>%% +%<cp850>%% If you need a euro symbol, try cp858 instead. +%<cp850>%% +% \end{macrocode} +% +% Now we insert a |\makeatletter| at the beginning of all .def files. +% \begin{macrocode} +%<-package>\makeatletter +% \end{macrocode} +% +% \section{The package} +% +% \changes{v0.99c}{2002/11/11}{Added cp858 (pr/3464)} +% +% \changes{v0.04}{1994/10/20}{Improved coding of \cs{DeclareInputText} +% and changed name from \cs{DeclareInputCharacter}.} +% +% \changes{v0.9g}{1995/10/19}{Replaced \cs{'} \cs{`} \cs{!=} by +% \cs{a'} \cs{a`} \cs{a!=} in order to get correct accents in +% a tabbing environment.} +% +% \changes{v0.9w}{1996/11/23}{Correct documentation +% of \cs{@tabacckludge}} +% +% \changes{v0.9x}{1997/03/21}{Use decimal rather than hex +% to avoid active character problems. latex/2451.} +% +% Before we start with the code, an important comment is in order: +% as you may or may not know, the |tabbing| environment changes the +% definition of the commands |\'|, |\`|, and |\=|. Outside such an +% environment these commands produce the corresponding accents, inside +% they are used for special text positioning, and the accents can be +% accessed using |\a'|, |\a`|, and |\a=|. Therefore we \emph{must} use +% the latter instead of the former in the second argument to +% |\DeclareInputText|, e.g. (from |latin1.def|): +% \begin{verbatim} +% \DeclareInputText{224}{\@tabacckludge`a} +%\end{verbatim} +% The command |\@tabacckludge| is defined (in |ltoutenc.dtx|) in such +% a way that |\@tabacckludge'| will expand to the internal form of |\'|. +% Thus it is |\'| that is carried around \emph{internally} (the +% same applies to the other two accent commands). +% +% \begin{macro}{\DeclareInputText} +% \begin{macro}{\DeclareInputMath} +% \begin{macro}{\IeC} +% These commands declare the expansion of an active character. The +% math declaration is the usual trick with |\uppercase|. +% The text declaration is sneakier, since in text space matters. +% We look to see if the definition ends in a macro, by checking +% whether it's |\meaning| ends in a space. If it does, then we +% add an irrelevant |\IeC| and braces around the definition, in +% order to avoid any space after the active char being gobbled up +% once the text is written out to an auxiliary file. +% +% The definition should contain only robust commands (and, for +% correct ligatures and kerning, they must be defined via the +% interfaces in the fontenc package). +% +% \changes{v0.9b}{1995/05/23}{Added hackery with \cs{IeC} in order to +% avoid space being gobbled.} +% +% \begin{macrocode} +%<*package> +\def\DeclareInputMath#1{% + \@inpenc@test + \bgroup + \uccode`\~#1% + \uppercase{% + \egroup + \def~% + }% +} +% \end{macrocode} +% \changes{v1.0a}{2003/01/17}{Now coding according to suggestion by David (pr/2004)} +% \changes{v1.0b}{2003/12/29}{but better do it properly} +% \changes{v1.0?}{2004/01/19}{or even correctly} +% \begin{macrocode} +\def\DeclareInputText#1#2{% + \def\reserved@a##1 ${}% + \def\reserved@b{#2}% + \ifcat_\expandafter\reserved@a\meaning\reserved@b$ $_% + \DeclareInputMath{#1}{#2}% + \else + \DeclareInputMath{#1}{\IeC{#2}}% + \fi +} +% \end{macrocode} +% The definition of |\IeC| was modified not to insert a |\protect| +% unless it is needed, this means it works in |\hyphenation| +% commands, and other such delicate places. It was then further +% changed to never insert a |\protect| as one is never needed; this +% makes it work in even more places. +% +% This still needs some attention. +% +% \changes{v0.9m}{1995/12/12}{Modified \cs{IeC} in order to +% work in \cs{hyphenation} latex/2004.} +% +% \changes{v0.94}{1997/12/17}{Changed non-typeset case from +% \cs{protect} to \cs{noexpand}: temporary fix.} +% +% \begin{macrocode} +\def\IeC{% + \ifx\protect\@typeset@protect + \expandafter\@firstofone + \else + \noexpand\IeC + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\inputencoding} +% \changes{v0.9q}{1996/05/09} +% {Allow characters below 32 for latex/2071} +% \changes{v0.9q}{1996/05/09} +% {Check the def file was reasonable for latex/2136} +% \changes{v0.94}{1997/12/17}{Changed to work only in outer vmode, see +% latex/2608} +% \changes{v0.94}{1997/12/17}{Warning message reworded and line +% number added, also for latex/2608} +% \changes{v0.95}{1997/12/20}{Changed to work in any vmode, for David} +% +% This sets the encoding to be |#1|. It first sets all the +% characters 128--255 to be active (and sets their initial +% definition to be |\@inpenc@undefined|). +% It now also does this for some `low' codes below 32, but +% misses out Null, control-I, control-J, control-L and control-M. +% +% It then inputs |#1.def|. But it first sets up a test that +% produces a warning message if no suitable definitions get read. +% +% \begin{macrocode} +\def\inputencoding#1{% + \gdef\@inpenc@test{\global\let\@inpenc@test\relax}% +% \end{macrocode} +% Keyboard characters which don't get a definition will be mapped to +% |\@inpenc@undefined| which gets a definition producing an error +% message indicating in which input encoding the current keyboard +% character is undefined: +% \changes{v0.98}{1998/07/04}{Give better error message if key used +% is undefined (pr/2845)} +% \changes{v0.993}{2000/01/24}{Fix error message for undefined chars +% (pr/3158)} +% \begin{macrocode} + \edef\@inpenc@undefined{\noexpand\@inpenc@undefined@{#1}}% +% \end{macrocode} +% The |\edef| in the above definition is essential as |#1| may be +% |\CurrentOption| in which case a later use would return incorrect +% information (at best nothing). +% +% Now we make all potential input characters active. +% \changes{v0.994}{2000/01/27}{Allow change also in horizontal mode +% (pr/2888)} +% \begin{macrocode} + \@inpenc@loop\^^A\^^H% + \@inpenc@loop\^^K\^^K% + \@inpenc@loop\^^N\^^_% + \@inpenc@loop\^^?\^^ff% +% \end{macrocode} +% +% To be able to process the input encoding file in horizontal mode +% we need to ensure that we don't get any stray spaces into the +% horizontal mode or else we end up with extra space in the +% paragraph. +% \changes{v0.998}{2001/05/25}{suppress all spaces for horizontal mode +% (pr/3273)} +% \begin{macrocode} + \advance\endlinechar\@M + \xdef\saved@space@catcode{\the\catcode`\ }% + \input{#1.def}% + \advance\endlinechar-\@M + \catcode`\ \saved@space@catcode\relax +% \end{macrocode} +% +% If there have been no |\DeclareInputText| or |\DeclareInputMath| +% commands read then something is amiss. +% \begin{macrocode} + \ifx\@inpenc@test\relax\else + \PackageWarning{inputenc}% + {No characters defined\MessageBreak + by input encoding change to `#1'\MessageBreak}% + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@inpenc@undefined@} +% This command will assigned to any active character unless it +% get a proper definition by the encoding. The argument is the +% current encoding name. +% \changes{v0.993}{2000/01/24}{Fix error message for undefined chars +% (pr/3158)} +% \begin{macrocode} +\def\@inpenc@undefined@#1{\PackageError{inputenc}% + {Keyboard character used is undefined\MessageBreak + in inputencoding `#1'}% + {You need to provide a definition with + \noexpand\DeclareInputText\MessageBreak or + \noexpand\DeclareInputMath before using this key.}}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@inpenc@loop} +% \changes{v0.9q}{1996/05/09} +% {Macro added} +% \changes{v0.9v}{1996/11/07} +% {Exit from the top of loop fixed for latex/2257} +% Make characters |#1| to |#2| inclusive active and undefined. +% \begin{macrocode} +\def\@inpenc@loop#1#2{% + \@tempcnta`#1\relax + \loop + \catcode\@tempcnta\active + \bgroup + \uccode`\~\@tempcnta + \uppercase{% + \egroup + \let~\@inpenc@undefined + }% + \ifnum\@tempcnta<`#2\relax + \advance\@tempcnta\@ne + \repeat} +% \end{macrocode} +% \end{macro} +% +% +% Then for each option, we input that encoding file. +% \begin{macrocode} +\DeclareOption*{\inputencoding{\CurrentOption}} +\ProcessOptions +%</package> +% \end{macrocode} +% +% +% \section{Default definitions for characters} +% +% Some input characters map to internal functions which are not in +% either the |T1| or |OT1| font encoding. For this reason default +% definitions are provided in the encoding file: these will be +% used unless some other output encoding is used which supports +% those glyphs. In some cases this default definition has to be +% simply an error message. +% +% Note that this works reasonably well only because the encoding +% files for both |OT1| and |T1| are loaded in the standard LaTeX +% format. +% +% \changes{v0.9a}{1995/04/23}{Default settings moved to own section} +% +% \changes{v0.9b}{1995/05/23}{Corrected ordmasc and ordfem which had +% been switched by mistake.} +% +% \changes{v0.9k}{1995/11/29}{Moved \cs{textregistered} and +% \cs{texttrademark} to the kernel.} +% \changes{v0.9k}{1995/11/29}{Added default commands for Next input +% encoding.} +% +% \changes{v0.9m}{1995/12/04}{Added \cs{ensuremath} to definitions of +% the fraction glyphs.} +% +% \changes{v0.9t}{1996/10/28} +% {Added \cs{textblacksquare}} +% \changes{v0.9u}{1996/10/29} +% {Corrected code for \cs{textblacksquare}} +% +% \changes{v0.9u}{1996/10/29} +% {Added cp865 and corrected cp850, cp852 and cp437 guards} +% \changes{v0.94}{1997/12/17}{Removed entries that were solely in +% next.def} +% \changes{v0.995}{2000/05/22}{Added latin2 option for textdegree +% (pr/3207) CAR} +% +% The name |\textblacksquare| is derived from the AMS symbol name since +% Adobe seem not to want this symbol. The default definition, as a +% rule, makes no claim to being a good design. +% +% Some entries are repeated in case guards must all be on one line. +% \begin{macrocode} +%<*latin1|decmulti|latin2|latin3|latin4|latin5|latin9|applemacce|latin10> +\ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}} +%</latin1|decmulti|latin2|latin3|latin4|latin5|latin9|applemacce|latin10> +%<*cp850|cp858|cp852|cp865|cp437|cp437de|applemac|cp1252|cp1250|cp1257|next> +\ProvideTextCommandDefault{\textdegree}{\ensuremath{{^\circ}}} +%</cp850|cp858|cp852|cp865|cp437|cp437de|applemac|cp1252|cp1250|cp1257|next> +%<*latin1|decmulti|latin3|latin5|cp850|cp858|cp852|cp1252|next> +\ProvideTextCommandDefault{\textonehalf}{\ensuremath{\frac12}} +%</latin1|decmulti|latin3|latin5|cp850|cp858|cp852|cp1252|next> +%<*latin1|decmulti|latin5|cp850|cp858|cp852|cp1252|next> +\ProvideTextCommandDefault{\textonequarter}{\ensuremath{\frac14}} +%</latin1|decmulti|latin5|cp850|cp858|cp852|cp1252|next> +%<*latin1|latin5|cp850|cp858|cp852|cp1252|next> +\ProvideTextCommandDefault{\textthreequarters}{\ensuremath{\frac34}} +%</latin1|latin5|cp850|cp858|cp852|cp1252|next> +%<*applemac|cp850|cp858|cp865|cp437|cp437de|cp1252|next> +\ProvideTextCommandDefault{\textflorin}{\textit{f}} +%</applemac|cp850|cp858|cp865|cp437|cp437de|cp1252|next> +%<*cp865|cp437|cp437de> +\ProvideTextCommandDefault{\textpeseta}{Pt} +%</cp865|cp437|cp437de> +%<*cp850|cp858|cp852|cp865|cp437|cp437de> +\ProvideTextCommandDefault{\textblacksquare} +{\vrule \@width .3em \@height .4em \@depth -.1em\relax} +%</cp850|cp858|cp852|cp865|cp437|cp437de> +% \end{macrocode} +% +% \changes{v0.9k}{1995/11/29}{Added error messages for unavailable +% characters.} +% +% Some commands can't be faked, so we have them generate an error +% message. +% \begin{macrocode} +%<*latin1|decmulti|latin5|latin9|cp850|cp858|cp865|cp437|cp437de> +\ProvideTextCommandDefault{\textcent} + {\TextSymbolUnavailable\textcent} +\ProvideTextCommandDefault{\textyen} + {\TextSymbolUnavailable\textyen} +%</latin1|decmulti|latin5|latin9|cp850|cp858|cp865|cp437|cp437de> +%<*applemac|cp1252|next> +\ProvideTextCommandDefault{\textcent} + {\TextSymbolUnavailable\textcent} +\ProvideTextCommandDefault{\textyen} + {\TextSymbolUnavailable\textyen} +%</applemac|cp1252|next> +%<*latin9|cp1252|latin10> +\ProvideTextCommandDefault{\texteuro} + {\TextSymbolUnavailable\texteuro} +%</latin9|cp1252|latin10> +%<*latin1|decmulti|latin2|latin3|latin4|latin5|cp850|cp858|cp852|cp865> +\ProvideTextCommandDefault{\textcurrency} + {\TextSymbolUnavailable\textcurrency} +%</latin1|decmulti|latin2|latin3|latin4|latin5|cp850|cp858|cp852|cp865> +%<*applemac|cp1252|cp1250|cp1257|next> +\ProvideTextCommandDefault{\textcurrency} + {\TextSymbolUnavailable\textcurrency} +%</applemac|cp1252|cp1250|cp1257|next> +%<*latin1|latin5|cp850|cp858|cp852|cp1252|cp1250> +\ProvideTextCommandDefault{\textbrokenbar} + {\TextSymbolUnavailable\textbrokenbar} +%</latin1|latin5|cp850|cp858|cp852|cp1252|cp1250> +%<*latin3> +\ProvideTextCommandDefault{\textmalteseH} + {\TextSymbolUnavailable\textmalteseH} +\ProvideTextCommandDefault{\textmalteseh} + {\TextSymbolUnavailable\textmalteseh} +%</latin3> +%<*latin4> +\ProvideTextCommandDefault{\textkra} + {\TextSymbolUnavailable\textkra} +\ProvideTextCommandDefault{\textTstroke} + {\TextSymbolUnavailable\textTstroke} +\ProvideTextCommandDefault{\texttstroke} + {\TextSymbolUnavailable\texttstroke} +%</latin4> +%<*next> +\ProvideTextCommandDefault{\textquotesingle} + {\TextSymbolUnavailable\textquotesingle} +\ProvideTextCommandDefault{\capitalogonek} + {\TextSymbolUnavailable\capitalogonek} +%</next> +%<*cp1250|cp1252|applemac|next> +\ProvideTextCommandDefault{\textperthousand} + {\TextSymbolUnavailable\textperthousand} +%</cp1250|cp1252|applemac|next> +%<*applemacce> +\ProvideTextCommandDefault{\textdiv} + {\TextSymbolUnavailable\textdiv} +%</applemacce> +% \end{macrocode} +% +% \changes{v0.9l}{1995/12/01}{Removed extraneous braces from the +% `superior' glyphs.} +% \changes{v0.97}{1998/03/05}{Removed ords: +% changed to text chars, pr/2579} +% +% Characters that are supposed to be used only in math will be defined +% by |\providecommand| because \LaTeXe{} assumes that the font +% encoding for math fonts is static. +% +% \begin{macrocode} +%<*latin1|decmulti|latin5|latin9|cp850|cp858|cp1252|next> +\providecommand{\mathonesuperior}{{^1}} +%</latin1|decmulti|latin5|latin9|cp850|cp858|cp1252|next> +%<*latin1|decmulti|latin3|latin5|latin9|cp850|cp858|cp1252|next> +\providecommand{\maththreesuperior}{{^3}} +%</latin1|decmulti|latin3|latin5|latin9|cp850|cp858|cp1252|next> +%<*latin1|decmulti|latin3|latin5|latin9|cp850|cp858|cp865|cp437|cp437de> +\providecommand{\mathtwosuperior}{{^2}} +%</latin1|decmulti|latin3|latin5|latin9|cp850|cp858|cp865|cp437|cp437de> +%<*cp1252|next> +\providecommand{\mathtwosuperior}{{^2}} +%</cp1252|next> +%<*cp865|cp437|cp437de> +\providecommand{\mathnsuperior}{{^n}} +%</cp865|cp437|cp437de> +% \end{macrocode} +% +% \section{The ASCII encoding} +% +% The ASCII encoding only allows characters in the range 32--127, so +% we only need to provide an empty |.def| file. +% +% \changes{v0.94}{1997/12/17}{Merged latin1 with ansinew/cp1252} +% +% \section{The ISO Latin-2 encoding} +% +% The ISO Latin-2 encoding file defines the characters +% in the ISO 8859-2 encoding. It was contributed by +% Petr Sojka (\texttt{sojka@muni.cz}) with small technical +% updates by Frank Mittelbach. +% +% \changes{v0.9e}{1995/08/31}{Redeclared "AD to be soft hyphen.} +% \changes{v0.91}{1997/08/19}{Replaced \cs{dh}/\cs{DH} by +% \cs{dj}/\cs{DJ}.} +% \changes{v0.94}{1997/12/17}{Changed 176 to \cs{textdegree}} +% +% \begin{macrocode} +%<*latin2> +\DeclareInputText{160}{\nobreakspace} +\DeclareInputText{176}{\textdegree} +\DeclareInputText{161}{\k A} +\DeclareInputText{177}{\k a} +\DeclareInputText{162}{\u{}} +\DeclareInputText{178}{\k\ } +\DeclareInputText{163}{\L} +\DeclareInputText{179}{\l} +\DeclareInputText{164}{\textcurrency} +\DeclareInputText{180}{\@tabacckludge'{}} +\DeclareInputText{165}{\v L} +\DeclareInputText{181}{\v l} +\DeclareInputText{166}{\@tabacckludge'S} +\DeclareInputText{182}{\@tabacckludge's} +\DeclareInputText{167}{\S} +\DeclareInputText{183}{\v{}} +\DeclareInputText{168}{\"{}} +\DeclareInputText{184}{\c\ } +\DeclareInputText{169}{\v S} +\DeclareInputText{185}{\v s} +\DeclareInputText{170}{\c S} +\DeclareInputText{186}{\c s} +\DeclareInputText{171}{\v T} +\DeclareInputText{187}{\v t} +\DeclareInputText{172}{\@tabacckludge'Z} +\DeclareInputText{188}{\@tabacckludge'z} +\DeclareInputText{173}{\-} +\DeclareInputText{189}{\H{}} +\DeclareInputText{174}{\v Z} +\DeclareInputText{190}{\v z} +\DeclareInputText{175}{\.Z} +\DeclareInputText{191}{\.z} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{192}{\@tabacckludge'R} +\DeclareInputText{208}{\DJ} +\DeclareInputText{193}{\@tabacckludge'A} +\DeclareInputText{209}{\@tabacckludge'N} +\DeclareInputText{194}{\^A} +\DeclareInputText{210}{\v N} +\DeclareInputText{195}{\u A} +\DeclareInputText{211}{\@tabacckludge'O} +\DeclareInputText{196}{\"A} +\DeclareInputText{212}{\^O} +\DeclareInputText{197}{\@tabacckludge'L} +\DeclareInputText{213}{\H O} +\DeclareInputText{198}{\@tabacckludge'C} +\DeclareInputText{214}{\"O} +\DeclareInputText{199}{\c C} +\DeclareInputMath{215}{\times} +\DeclareInputText{200}{\v C} +\DeclareInputText{216}{\v R} +\DeclareInputText{201}{\@tabacckludge'E} +\DeclareInputText{217}{\r U} +\DeclareInputText{202}{\k E} +\DeclareInputText{218}{\@tabacckludge'U} +\DeclareInputText{203}{\"E} +\DeclareInputText{219}{\H U} +\DeclareInputText{204}{\v E} +\DeclareInputText{220}{\"U} +\DeclareInputText{205}{\@tabacckludge'I} +\DeclareInputText{221}{\@tabacckludge'Y} +\DeclareInputText{206}{\^I} +\DeclareInputText{222}{\c T} +\DeclareInputText{207}{\v D} +\DeclareInputText{223}{\ss} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{224}{\@tabacckludge'r} +\DeclareInputText{240}{\dj} +\DeclareInputText{225}{\@tabacckludge'a} +\DeclareInputText{241}{\@tabacckludge'n} +\DeclareInputText{226}{\^a} +\DeclareInputText{242}{\v n} +\DeclareInputText{227}{\u a} +\DeclareInputText{243}{\@tabacckludge'o} +\DeclareInputText{228}{\"a} +\DeclareInputText{244}{\^o} +\DeclareInputText{229}{\@tabacckludge'l} +\DeclareInputText{245}{\H o} +\DeclareInputText{230}{\@tabacckludge'c} +\DeclareInputText{246}{\"o} +\DeclareInputText{231}{\c c} +\DeclareInputMath{247}{\div} +\DeclareInputText{232}{\v c} +\DeclareInputText{248}{\v r} +\DeclareInputText{233}{\@tabacckludge'e} +\DeclareInputText{249}{\r u} +\DeclareInputText{234}{\k e} +\DeclareInputText{250}{\@tabacckludge'u} +\DeclareInputText{235}{\"e} +\DeclareInputText{251}{\H u} +\DeclareInputText{236}{\v e} +\DeclareInputText{252}{\"u} +\DeclareInputText{237}{\@tabacckludge'\i} +\DeclareInputText{253}{\@tabacckludge'y} +\DeclareInputText{238}{\^\i} +\DeclareInputText{254}{\c t} +\DeclareInputText{239}{\v d} +\DeclareInputText{255}{\.{}} +%</latin2> +% \end{macrocode} +% +% \section{The ISO Latin-3 encoding} +% +% The ISO Latin-3 encoding file defines the characters +% in the ISO 8859-3 encoding. It was contributed by +% by J\"org Knappen (\texttt{joerg.knappen@uni-mainz.de}) and +% adapted by Chris Rowley. +% +% It can be used for general purpose applications in +% typical office environments in the following languages: +% Afrikaans, Catalan, English, Esperanto, French, Gallician, German, +% Italian, Maltese, and Turkish. +% +% \begin{macrocode} +%<*latin3> +\DeclareInputText{160}{\nobreakspace} +\DeclareInputText{176}{\textdegree} +\DeclareInputText{161}{\textmalteseH} +\DeclareInputText{177}{\textmalteseh} +\DeclareInputText{162}{\u{}} +\DeclareInputMath{178}{\mathtwosuperior} +\DeclareInputText{163}{\pounds} +\DeclareInputMath{179}{\maththreesuperior} +\DeclareInputText{164}{\textcurrency} +\DeclareInputText{180}{\@tabacckludge'{}} +% \DeclareInputText{165}{\notdef} +\DeclareInputMath{181}{\mu} +\DeclareInputText{166}{\^H} +% NOT: \DeclareInputText{182}{h\llap{\^{}}} % \^h would be too tall +\DeclareInputText{182}{\^h} +\DeclareInputText{167}{\S} +\DeclareInputText{183}{\textperiodcentered} +\DeclareInputText{168}{\"{}} +\DeclareInputText{184}{\c\ } +\DeclareInputText{169}{\.I} +\DeclareInputText{185}{\i} +\DeclareInputText{170}{\c S} +\DeclareInputText{186}{\c s} +\DeclareInputText{171}{\u G} +\DeclareInputText{187}{\u g} +\DeclareInputText{172}{\^J} +\DeclareInputText{188}{\^\j} +\DeclareInputText{173}{\-} +\DeclareInputText{189}{\textonehalf} +% \DeclareInputText{174}{\notdef} +% \DeclareInputText{190}{\notdef} +\DeclareInputText{175}{\.Z} +\DeclareInputText{191}{\.z} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{192}{\@tabacckludge`A} +% \DeclareInputText{208}{\notdef} +\DeclareInputText{193}{\@tabacckludge'A} +\DeclareInputText{209}{\~N} +\DeclareInputText{194}{\^A} +\DeclareInputText{210}{\@tabacckludge`O} +% \DeclareInputText{195}{\notdef} +\DeclareInputText{211}{\@tabacckludge'O} +\DeclareInputText{196}{\"A} +\DeclareInputText{212}{\^O} +\DeclareInputText{197}{\.C} +\DeclareInputText{213}{\.G} +\DeclareInputText{198}{\^C} +\DeclareInputText{214}{\"O} +\DeclareInputText{199}{\c C} +\DeclareInputMath{215}{\times} +\DeclareInputText{200}{\@tabacckludge`E} +\DeclareInputText{216}{\^G} +\DeclareInputText{201}{\@tabacckludge'E} +\DeclareInputText{217}{\@tabacckludge`U} +\DeclareInputText{202}{\^E} +\DeclareInputText{218}{\@tabacckludge'U} +\DeclareInputText{203}{\"E} +\DeclareInputText{219}{\^U} +\DeclareInputText{204}{\@tabacckludge`I} +\DeclareInputText{220}{\"U} +\DeclareInputText{205}{\@tabacckludge'I} +\DeclareInputText{221}{\u U} +\DeclareInputText{206}{\^I} +\DeclareInputText{222}{\^S} +\DeclareInputText{207}{\"I} +\DeclareInputText{223}{\ss} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{224}{\@tabacckludge`a} +% \DeclareInputText{240}{\notdef} +\DeclareInputText{225}{\@tabacckludge'a} +\DeclareInputText{241}{\~n} +\DeclareInputText{226}{\^a} +\DeclareInputText{242}{\@tabacckludge`o} +% \DeclareInputText{227}{\notdef} +\DeclareInputText{243}{\@tabacckludge'o} +\DeclareInputText{228}{\"a} +\DeclareInputText{244}{\^o} +\DeclareInputText{229}{\.c} +\DeclareInputText{245}{\.g} +\DeclareInputText{230}{\^c} +\DeclareInputText{246}{\"o} +\DeclareInputText{231}{\c c} +\DeclareInputMath{247}{\div} +\DeclareInputText{232}{\@tabacckludge`e} +\DeclareInputText{248}{\^g} +\DeclareInputText{233}{\@tabacckludge'e} +\DeclareInputText{249}{\@tabacckludge`u} +\DeclareInputText{234}{\^e} +\DeclareInputText{250}{\@tabacckludge'u} +\DeclareInputText{235}{\"e} +\DeclareInputText{251}{\^u} +\DeclareInputText{236}{\@tabacckludge`\i} +\DeclareInputText{252}{\"u} +\DeclareInputText{237}{\@tabacckludge'\i} +\DeclareInputText{253}{\u u} +\DeclareInputText{238}{\^\i} +\DeclareInputText{254}{\^s} +\DeclareInputText{239}{\"\i} +\DeclareInputText{255}{\.{}} +%</latin3> +% \end{macrocode} +% +% \section{The ISO Latin-4 encoding} +% +% The ISO Latin-4 encoding file defines the characters in the ISO +% 8859-4 encoding. It was contributed by Hana Skoumalov\'a +% (\texttt{hana.skoumalova@ff.cuni.cz}). +% +% It was created for Estonian, Latvian, Lithuanian, Finnish, Lappish, +% Swedish, Norvegian, Danish, Icelandic and Greenlandic Inuit. Some +% alphabets, however, are incomplete (Greenlandic, Icelandic and Lappish). +% Some glyphs are not available in the fonts. For example, the +% Greenlandic character `kra' is not available at all; +% the Latvian and Lithuanian characters not +% contained in other encodings are constructed from components and +% they do not look good. +% +% \changes{v0.999}{2001/06/04}{Added \cs{textkra}, \cs{texttstroke} and +% \cs{textTstroke} (pr/3336)} +% \begin{macrocode} +%<*latin4> +\DeclareInputText{160}{\nobreakspace} +\DeclareInputText{161}{\k A} +\DeclareInputText{162}{\textkra}%% Greenlandic Inuit +\DeclareInputText{163}{\c R} +\DeclareInputText{164}{\textcurrency} +\DeclareInputText{165}{\~I} +\DeclareInputText{166}{\c L} +\DeclareInputText{167}{\S} +\DeclareInputText{168}{\"\ } +\DeclareInputText{169}{\v S} +\DeclareInputText{170}{\@tabacckludge=E} +\DeclareInputText{171}{\c G} +\DeclareInputText{172}{\textTstroke}%% Northern Sami +\DeclareInputText{173}{\-} +\DeclareInputText{174}{\v Z} +\DeclareInputText{175}{\@tabacckludge={}} +\DeclareInputText{176}{\textdegree} +\DeclareInputText{177}{\k a} +\DeclareInputText{178}{\k\ } +\DeclareInputText{179}{\c r} +\DeclareInputText{180}{\@tabacckludge'{}} +\DeclareInputText{181}{\~\i} +\DeclareInputText{182}{\c l} +\DeclareInputText{183}{\v\ } +\DeclareInputText{184}{\c\ } +\DeclareInputText{185}{\v s} +\DeclareInputText{186}{\@tabacckludge=e} +\DeclareInputText{187}{\c g} +\DeclareInputText{188}{\texttstroke}%% Northern Sami +\DeclareInputText{189}{\NG} +\DeclareInputText{190}{\v z} +\DeclareInputText{191}{\ng} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{192}{\@tabacckludge=A} +\DeclareInputText{193}{\@tabacckludge'A} +\DeclareInputText{194}{\^A} +\DeclareInputText{195}{\~A} +\DeclareInputText{196}{\"A} +\DeclareInputText{197}{\r A} +\DeclareInputText{198}{\AE} +\DeclareInputText{199}{\k I} +\DeclareInputText{200}{\v C} +\DeclareInputText{201}{\@tabacckludge'E} +\DeclareInputText{202}{\k E} +\DeclareInputText{203}{\"E} +\DeclareInputText{204}{\.{E}} +\DeclareInputText{205}{\@tabacckludge'I} +\DeclareInputText{206}{\^I} +\DeclareInputText{207}{\@tabacckludge=I} +\DeclareInputText{208}{\DJ} +\DeclareInputText{209}{\c N} +\DeclareInputText{210}{\@tabacckludge=O} +\DeclareInputText{211}{\c K} +\DeclareInputText{212}{\^O} +\DeclareInputText{213}{\~O} +\DeclareInputText{214}{\"O} +\DeclareInputMath{215}{\times} +\DeclareInputText{216}{\O} +\DeclareInputText{217}{\k U} +\DeclareInputText{218}{\@tabacckludge'U} +\DeclareInputText{219}{\^U} +\DeclareInputText{220}{\"U} +\DeclareInputText{221}{\~U} +\DeclareInputText{222}{\@tabacckludge=U} +\DeclareInputText{223}{\ss} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{224}{\@tabacckludge=a} +\DeclareInputText{225}{\@tabacckludge'a} +\DeclareInputText{226}{\^a} +\DeclareInputText{227}{\~a} +\DeclareInputText{228}{\"a} +\DeclareInputText{229}{\r a} +\DeclareInputText{230}{\ae} +\DeclareInputText{231}{\k i} +\DeclareInputText{232}{\v c} +\DeclareInputText{233}{\@tabacckludge'e} +\DeclareInputText{234}{\k e} +\DeclareInputText{235}{\"e} +\DeclareInputText{236}{\.{e}} +\DeclareInputText{237}{\@tabacckludge'\i} +\DeclareInputText{238}{\^\i} +\DeclareInputText{239}{\@tabacckludge=\i} +\DeclareInputText{240}{\dj} +\DeclareInputText{241}{\c n} +\DeclareInputText{242}{\@tabacckludge=o} +\DeclareInputText{243}{\c k} +\DeclareInputText{244}{\^o} +\DeclareInputText{245}{\~o} +\DeclareInputText{246}{\"o} +\DeclareInputMath{247}{\div} +\DeclareInputText{248}{\o} +\DeclareInputText{249}{\k u} +\DeclareInputText{250}{\@tabacckludge'u} +\DeclareInputText{251}{\^u} +\DeclareInputText{252}{\"u} +\DeclareInputText{253}{\~u} +\DeclareInputText{254}{\@tabacckludge=u} +\DeclareInputText{255}{\.\ } +%</latin4> +% \end{macrocode} +% +% \section{The ISO Latin-5 encoding} +% +% \changes{v0.991}{1999/08/23}{Corrected description for Latin-5.} +% The ISO Latin-5 encoding file defines the characters +% in the ISO 8859-9 encoding, which describes Latin Alphabet No. 5. +% It was contributed by H.~Turgut Uyar (\texttt{uyar@cs.itu.edu.tr}); +% it is used for Turkish. +% +% \begin{macrocode} +%<*latin5> +\DeclareInputText{160}{\nobreakspace} +\DeclareInputText{176}{\textdegree} +\DeclareInputText{161}{\textexclamdown} +\DeclareInputMath{177}{\pm} +\DeclareInputText{162}{\textcent} +\DeclareInputMath{178}{\mathtwosuperior} +\DeclareInputText{163}{\pounds} +\DeclareInputMath{179}{\maththreesuperior} +\DeclareInputText{164}{\textcurrency} +\DeclareInputText{180}{\@tabacckludge'{}} +\DeclareInputText{165}{\textyen} +\DeclareInputMath{181}{\mu} +\DeclareInputText{166}{\textbrokenbar} +\DeclareInputText{182}{\P} +\DeclareInputText{167}{\S} +\DeclareInputText{183}{\textperiodcentered} +\DeclareInputText{168}{\"{}} +\DeclareInputText{184}{\c\ } +\DeclareInputText{169}{\copyright} +\DeclareInputMath{185}{\mathonesuperior} +\DeclareInputText{170}{\textordfeminine} +\DeclareInputText{186}{\textordmasculine} +\DeclareInputText{171}{\guillemotleft} +\DeclareInputText{187}{\guillemotright} +\DeclareInputMath{172}{\lnot} +\DeclareInputText{188}{\textonequarter} +\DeclareInputText{173}{\-} +\DeclareInputText{189}{\textonehalf} +\DeclareInputText{174}{\textregistered} +\DeclareInputText{190}{\textthreequarters} +\DeclareInputText{175}{\@tabacckludge={}} +\DeclareInputText{191}{\textquestiondown} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{192}{\@tabacckludge`A} +\DeclareInputText{208}{\u G} +\DeclareInputText{193}{\@tabacckludge'A} +\DeclareInputText{209}{\~N} +\DeclareInputText{194}{\^A} +\DeclareInputText{210}{\@tabacckludge`O} +\DeclareInputText{195}{\~A} +\DeclareInputText{211}{\@tabacckludge'O} +\DeclareInputText{196}{\"A} +\DeclareInputText{212}{\^O} +\DeclareInputText{197}{\r A} +\DeclareInputText{213}{\~O} +\DeclareInputText{198}{\AE} +\DeclareInputText{214}{\"O} +\DeclareInputText{199}{\c C} +\DeclareInputMath{215}{\times} +\DeclareInputText{200}{\@tabacckludge`E} +\DeclareInputText{216}{\O} +\DeclareInputText{201}{\@tabacckludge'E} +\DeclareInputText{217}{\@tabacckludge`U} +\DeclareInputText{202}{\^E} +\DeclareInputText{218}{\@tabacckludge'U} +\DeclareInputText{203}{\"E} +\DeclareInputText{219}{\^U} +\DeclareInputText{204}{\@tabacckludge`I} +\DeclareInputText{220}{\"U} +\DeclareInputText{205}{\@tabacckludge'I} +\DeclareInputText{221}{\.I} +\DeclareInputText{206}{\^I} +\DeclareInputText{222}{\c S} +\DeclareInputText{207}{\"I} +\DeclareInputText{223}{\ss} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{224}{\@tabacckludge`a} +\DeclareInputText{240}{\u g} +\DeclareInputText{225}{\@tabacckludge'a} +\DeclareInputText{241}{\~n} +\DeclareInputText{226}{\^a} +\DeclareInputText{242}{\@tabacckludge`o} +\DeclareInputText{227}{\~a} +\DeclareInputText{243}{\@tabacckludge'o} +\DeclareInputText{228}{\"a} +\DeclareInputText{244}{\^o} +\DeclareInputText{229}{\r a} +\DeclareInputText{245}{\~o} +\DeclareInputText{230}{\ae} +\DeclareInputText{246}{\"o} +\DeclareInputText{231}{\c c} +\DeclareInputMath{247}{\div} +\DeclareInputText{232}{\@tabacckludge`e} +\DeclareInputText{248}{\o} +\DeclareInputText{233}{\@tabacckludge'e} +\DeclareInputText{249}{\@tabacckludge`u} +\DeclareInputText{234}{\^e} +\DeclareInputText{250}{\@tabacckludge'u} +\DeclareInputText{235}{\"e} +\DeclareInputText{251}{\^u} +\DeclareInputText{236}{\@tabacckludge`\i} +\DeclareInputText{252}{\"u} +\DeclareInputText{237}{\@tabacckludge'\i} +\DeclareInputText{253}{\i } +\DeclareInputText{238}{\^\i} +\DeclareInputText{254}{\c s} +\DeclareInputText{239}{\"\i} +\DeclareInputText{255}{\"y} +%</latin5> +% \end{macrocode} +% +% \section{DEC Multinational Character Set} +% +% The DECMultinational character set, used by the OpenVMS operating +% system, is slightly different from the ISO Latin 1 character set. +% +% Reference: Digital Equipment Corporation VT330/VT340 Programmer +% Reference Manual, Volume 1: Text Programming, page 22. +% +% This encoding was provided by M.Y. Chartoire IPNL-IN2P3 \\ +% \texttt{m.chartoire@ipnl.in2p3.fr} +% +% \begin{macrocode} +%<*decmulti> +\DeclareInputText{176}{\textdegree} +\DeclareInputText{161}{\textexclamdown} +\DeclareInputMath{177}{\pm} +\DeclareInputText{162}{\textcent} +\DeclareInputMath{178}{\mathtwosuperior} +\DeclareInputText{163}{\pounds} +\DeclareInputMath{179}{\maththreesuperior} +\DeclareInputText{165}{\textyen} +\DeclareInputMath{181}{\mu} +\DeclareInputText{182}{\P} +\DeclareInputText{167}{\S} +\DeclareInputText{183}{\textperiodcentered} +\DeclareInputText{168}{\textcurrency} +\DeclareInputText{169}{\copyright} +\DeclareInputMath{185}{\mathonesuperior} +\DeclareInputText{170}{\textordfeminine} +\DeclareInputText{186}{\textordmasculine} +\DeclareInputText{171}{\guillemotleft} +\DeclareInputText{187}{\guillemotright} +\DeclareInputText{188}{\textonequarter} +\DeclareInputText{189}{\textonehalf} +\DeclareInputText{191}{\textquestiondown} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{192}{\@tabacckludge`A} +\DeclareInputText{193}{\@tabacckludge'A} +\DeclareInputText{209}{\~N} +\DeclareInputText{194}{\^A} +\DeclareInputText{210}{\@tabacckludge`O} +\DeclareInputText{195}{\~A} +\DeclareInputText{211}{\@tabacckludge'O} +\DeclareInputText{196}{\"A} +\DeclareInputText{212}{\^O} +\DeclareInputText{197}{\r A} +\DeclareInputText{213}{\~O} +\DeclareInputText{198}{\AE} +\DeclareInputText{214}{\"O} +\DeclareInputText{199}{\c C} +\DeclareInputText{215}{\OE} +\DeclareInputText{200}{\@tabacckludge`E} +\DeclareInputText{216}{\O} +\DeclareInputText{201}{\@tabacckludge'E} +\DeclareInputText{217}{\@tabacckludge`U} +\DeclareInputText{202}{\^E} +\DeclareInputText{218}{\@tabacckludge'U} +\DeclareInputText{203}{\"E} +\DeclareInputText{219}{\^U} +\DeclareInputText{204}{\@tabacckludge`I} +\DeclareInputText{220}{\"U} +\DeclareInputText{205}{\@tabacckludge'I} +\DeclareInputText{221}{\"Y} +\DeclareInputText{206}{\^I} +\DeclareInputText{207}{\"I} +\DeclareInputText{223}{\ss} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{224}{\@tabacckludge`a} +\DeclareInputText{225}{\@tabacckludge'a} +\DeclareInputText{241}{\~n} +\DeclareInputText{226}{\^a} +\DeclareInputText{242}{\@tabacckludge`o} +\DeclareInputText{227}{\~a} +\DeclareInputText{243}{\@tabacckludge'o} +\DeclareInputText{228}{\"a} +\DeclareInputText{244}{\^o} +\DeclareInputText{229}{\r a} +\DeclareInputText{245}{\~o} +\DeclareInputText{230}{\ae} +\DeclareInputText{246}{\"o} +\DeclareInputText{231}{\c c} +\DeclareInputText{247}{\oe} +\DeclareInputText{232}{\@tabacckludge`e} +\DeclareInputText{248}{\o} +\DeclareInputText{233}{\@tabacckludge'e} +\DeclareInputText{249}{\@tabacckludge`u} +\DeclareInputText{234}{\^e} +\DeclareInputText{250}{\@tabacckludge'u} +\DeclareInputText{235}{\"e} +\DeclareInputText{251}{\^u} +\DeclareInputText{236}{\@tabacckludge`\i} +\DeclareInputText{252}{\"u} +\DeclareInputText{237}{\@tabacckludge'\i} +\DeclareInputText{253}{\"y} +\DeclareInputText{238}{\^\i} +\DeclareInputText{239}{\"\i} +%</decmulti> +% \end{macrocode} +% +% +% \section{The IBM code pages 850 and 858} +% +% This input encoding was contributed by +% Timo Knuutila (\texttt{knuutila@\linebreak[0]cs.utu.fi}), +% and edited by Christian Bartels +% (\texttt{ii140ba@\linebreak[0]vm1.rz.rwth-aachen.de}). +% +% The DOS graphics `letters' and a few +% other positions are ignored (left undefined). +% +% The 858 code page is identical to the 850 except that +% +% \changes{v0.9d}{1995/06/06}{Made changes to cp850 suggested by +% Christian Bartels} +% \changes{v0.9s}{1995/08/31} +% {Swapped ordfeminine and masculine. /2203} +% +% \begin{macrocode} +%<*cp850|cp858> +\DeclareInputText{128}{\c C} +\DeclareInputText{144}{\@tabacckludge'E} +\DeclareInputText{129}{\"u} +\DeclareInputText{145}{\ae} +\DeclareInputText{130}{\@tabacckludge'e} +\DeclareInputText{146}{\AE} +\DeclareInputText{131}{\^a} +\DeclareInputText{147}{\^o} +\DeclareInputText{132}{\"a} +\DeclareInputText{148}{\"o} +\DeclareInputText{133}{\@tabacckludge`a} +\DeclareInputText{149}{\@tabacckludge`o} +\DeclareInputText{134}{\r a} +\DeclareInputText{150}{\^u} +\DeclareInputText{135}{\c c} +\DeclareInputText{151}{\@tabacckludge`u} +\DeclareInputText{136}{\^e} +\DeclareInputText{152}{\"y} +\DeclareInputText{137}{\"e} +\DeclareInputText{153}{\"O} +\DeclareInputText{138}{\@tabacckludge`e} +\DeclareInputText{154}{\"U} +\DeclareInputText{139}{\"\i} +\DeclareInputText{155}{\o} +\DeclareInputText{140}{\^\i} +\DeclareInputText{156}{\pounds} +\DeclareInputText{141}{\@tabacckludge`\i} +\DeclareInputText{157}{\O} +\DeclareInputText{142}{\"A} +\DeclareInputMath{158}{\times} +\DeclareInputText{143}{\r A} +\DeclareInputText{159}{\textflorin} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{160}{\@tabacckludge'a} +\DeclareInputText{161}{\@tabacckludge'\i} +\DeclareInputText{162}{\@tabacckludge'o} +\DeclareInputText{163}{\@tabacckludge'u} +\DeclareInputText{164}{\~n} %% "B0-"B4: DG +\DeclareInputText{165}{\~N} +\DeclareInputText{181}{\@tabacckludge'A} +\DeclareInputText{166}{\textordfeminine} +\DeclareInputText{182}{\^A} +\DeclareInputText{167}{\textordmasculine} +\DeclareInputText{183}{\@tabacckludge`A} +\DeclareInputText{168}{\textquestiondown} +\DeclareInputText{184}{\copyright} +\DeclareInputText{169}{\textregistered} +\DeclareInputMath{170}{\lnot} +\DeclareInputText{171}{\textonehalf} +\DeclareInputText{172}{\textonequarter} %% "B9-"BC: DG +\DeclareInputText{173}{\textexclamdown} +\DeclareInputText{189}{\textcent} +\DeclareInputText{174}{\guillemotleft} +\DeclareInputText{190}{\textyen} +\DeclareInputText{175}{\guillemotright} +% \end{macrocode} +% +% \begin{macrocode} +% "BF-"C5: DG +\DeclareInputText{208}{\dh} +\DeclareInputText{209}{\DH} +\DeclareInputText{210}{\^E} +\DeclareInputText{211}{\"E} +\DeclareInputText{212}{\@tabacckludge`E} +% \end{macrocode} +% Here is the only point in which the two code pages differ! +% \begin{macrocode} +%<-cp858>\DeclareInputText{213}{\i} +%<-cp850>\DeclareInputText{213}{\texteuro} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{198}{\~a} +\DeclareInputText{214}{\@tabacckludge'I} +\DeclareInputText{199}{\~A} +\DeclareInputText{215}{\^I} +\DeclareInputText{216}{\"I} +% "C8-"CE: DG +% "D9-"DC: DG +\DeclareInputText{221}{\textbrokenbar} +\DeclareInputText{222}{\@tabacckludge`I} +\DeclareInputText{207}{\textcurrency} %% "DF: DG +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{224}{\@tabacckludge'O} +\DeclareInputText{240}{\textendash} +\DeclareInputText{225}{\ss} +\DeclareInputMath{241}{\pm} +\DeclareInputText{226}{\^O} +% "F2: DG (not double underline, or equals?) +\DeclareInputText{227}{\@tabacckludge`O} +\DeclareInputText{243}{\textthreequarters} +\DeclareInputText{228}{\~o} +\DeclareInputText{244}{\P} +\DeclareInputText{229}{\~O} +\DeclareInputText{245}{\S} +\DeclareInputMath{230}{\mu} +\DeclareInputMath{246}{\div} +\DeclareInputText{231}{\th} +\DeclareInputText{247}{\c\ } +\DeclareInputText{232}{\TH} +\DeclareInputText{248}{\textdegree} +\DeclareInputText{233}{\@tabacckludge'U} +\DeclareInputText{249}{\"{}} +\DeclareInputText{234}{\^U} +\DeclareInputText{250}{\textperiodcentered} +\DeclareInputText{235}{\@tabacckludge`U} +\DeclareInputMath{251}{\mathonesuperior} +\DeclareInputText{236}{\@tabacckludge'y} +\DeclareInputMath{252}{\maththreesuperior} +\DeclareInputText{237}{\@tabacckludge'Y} +\DeclareInputMath{253}{\mathtwosuperior} +\DeclareInputText{238}{\@tabacckludge={}} +\DeclareInputText{254}{\textblacksquare} % right name? +\DeclareInputText{239}{\@tabacckludge'{}} +\DeclareInputText{255}{\nobreakspace} +%</cp850|cp858> +% \end{macrocode} +% +% \section{The IBM code page 852} +% +% This input encoding was contributed by +% Petr Sojka (\texttt{sojka@\linebreak[0]Muni.cz}). +% +% \changes{v0.9t}{1996/10/28}{Added extra \cs{nobreakspace}: OK?} +% \changes{v0.9z}{1997/05/10}{Corrected typo in slot 213} +% \changes{v0.91}{1997/08/19}{Replaced \cs{dh}/\cs{DH} by +% \cs{dj}/\cs{DJ}.} +% \changes{v0.99}{1999/04/14}{Changed 212, see pr/2992} +% +% \begin{macrocode} +%<*cp852> +\DeclareInputText{128}{\c C} +\DeclareInputText{144}{\@tabacckludge'E} +\DeclareInputText{129}{\"u} +\DeclareInputText{145}{\@tabacckludge'L} +\DeclareInputText{130}{\@tabacckludge'e} +\DeclareInputText{146}{\@tabacckludge'l} +\DeclareInputText{131}{\^a} +\DeclareInputText{147}{\^o} +\DeclareInputText{132}{\"a} +\DeclareInputText{148}{\"o} +\DeclareInputText{133}{\r u} +\DeclareInputText{149}{\v L} +\DeclareInputText{134}{\@tabacckludge'c} +\DeclareInputText{150}{\v l} +\DeclareInputText{135}{\c c} +\DeclareInputText{151}{\@tabacckludge'S} +\DeclareInputText{136}{\l} +\DeclareInputText{152}{\@tabacckludge's} +\DeclareInputText{137}{\"e} +\DeclareInputText{153}{\"O} +\DeclareInputText{138}{\H O} +\DeclareInputText{154}{\"U} +\DeclareInputText{139}{\H o} +\DeclareInputText{155}{\v T} +\DeclareInputText{140}{\^\i} +\DeclareInputText{156}{\v t} +\DeclareInputText{141}{\@tabacckludge'Z} +\DeclareInputText{157}{\L} +\DeclareInputText{142}{\"A} +\DeclareInputMath{158}{\times} +\DeclareInputText{143}{\@tabacckludge'C} +\DeclareInputText{159}{\v c} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{160}{\@tabacckludge'a} +\DeclareInputText{161}{\@tabacckludge'\i} +\DeclareInputText{162}{\@tabacckludge'o} +\DeclareInputText{163}{\@tabacckludge'u} +\DeclareInputText{164}{\k A} +\DeclareInputText{165}{\k a} +\DeclareInputText{166}{\v Z} +\DeclareInputText{167}{\v z} +\DeclareInputText{168}{\k E} +\DeclareInputText{169}{\k e} +\DeclareInputText{170}{\nobreakspace} % or empty?? +\DeclareInputText{171}{\@tabacckludge'z} +\DeclareInputText{172}{\v C} +\DeclareInputText{173}{\c s} +\DeclareInputText{174}{\guillemotleft} +\DeclareInputText{175}{\guillemotright} +\DeclareInputText{181}{\@tabacckludge'A} +\DeclareInputText{182}{\^A} +\DeclareInputText{183}{\v E} +\DeclareInputText{184}{\c S} +\DeclareInputText{189}{\.Z} +\DeclareInputText{190}{\.z} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{198}{\u A} +\DeclareInputText{199}{\u a} +\DeclareInputText{207}{\textcurrency} +\DeclareInputText{208}{\dj} +\DeclareInputText{209}{\DJ} +\DeclareInputText{210}{\v D} +\DeclareInputText{211}{\"E} +\DeclareInputText{212}{\v d} % d caron +\DeclareInputText{213}{\v N} +\DeclareInputText{214}{\@tabacckludge'I} +\DeclareInputText{215}{\^I} +\DeclareInputText{216}{\v e} +\DeclareInputText{221}{\c T} +\DeclareInputText{222}{\r U} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{224}{\@tabacckludge'O} +\DeclareInputText{240}{\textendash} +\DeclareInputText{225}{\ss} +\DeclareInputText{241}{\H{}} +\DeclareInputText{226}{\^O} +\DeclareInputText{242}{\k\ } +\DeclareInputText{227}{\@tabacckludge'N} +\DeclareInputText{243}{\v{}} +\DeclareInputText{228}{\@tabacckludge'n} +\DeclareInputText{244}{\u{}} +\DeclareInputText{229}{\v n} +\DeclareInputText{245}{\S} +\DeclareInputText{230}{\v S} +\DeclareInputMath{246}{\div} +\DeclareInputText{231}{\v s} +\DeclareInputText{247}{\c\ } +\DeclareInputText{232}{\@tabacckludge'R} +\DeclareInputText{248}{\textdegree} +\DeclareInputText{233}{\@tabacckludge'U} +\DeclareInputText{249}{\"{}} +\DeclareInputText{234}{\@tabacckludge'r} +\DeclareInputText{250}{\.{}} +\DeclareInputText{235}{\H U} +\DeclareInputText{251}{\H u} +\DeclareInputText{236}{\@tabacckludge'y} +\DeclareInputText{252}{\v R} +\DeclareInputText{237}{\@tabacckludge'Y} +\DeclareInputText{253}{\v r} +\DeclareInputText{238}{\c t} +\DeclareInputText{254}{\textblacksquare} % right name? +\DeclareInputText{239}{\@tabacckludge'{}} +\DeclareInputText{255}{\nobreakspace} +%</cp852> +% \end{macrocode} +% +% \section{The IBM code pages 437 and 865} +% +% This input encoding is based on work by\\ +% Volker Kunert +% (\texttt{volker@\linebreak[0]numsun1.mathematik.uni-halle.de})\\ +% and \texttt{bontus@\linebreak[0]al6000.physik.uni-siegen.de}.\\ +% The changes for cp865 are based on work by S\o ren Sandmann +% (\texttt{sandmann@\linebreak[0]daimi.aau.dk}), with thanks to +% them all. +% +% The DOS graphics `letters' and a few +% other positions are ignored (left undefined). +% +% Unfortunately, in cp437 there is no agreement as to whether slot E1 +% should be `$\beta$' or `\ss', so we provide two variants, +% one (cp437) with `$\beta$' and one (cp437de) with `\ss'. +% +% \changes{v0.9e}{1995/08/31}{Added a 0 to all character codes} +% +% \changes{v0.9m}{1995/12/04}{Made uumlaut and pounds text characters} +% \changes{v0.9t}{1996/10/28}{Added \cs{textflorin} and \cs{textpeseta}} +% \changes{v0.9t}{1996/10/28}{Removed \cs{textbrokenbar}} +% \changes{v0.9t}{1996/10/28}{Removed \cs{textendash}} +% \changes{v0.9t}{1996/10/28}{Changed \cs{Theta} to \cs{Phi}} +% \changes{v0.9t}{1996/10/28}{Changed \cs{Pi} to \cs{pi}, perhaps} +% \changes{v0.9t}{1996/10/28}{Changed \cs{emptyset} to \cs{phi}} +% \changes{v0.9t}{1996/10/28}{Changed \cs{maththreesuperior} to +% \cs{mathnsuperior}} +% \changes{v0.94}{1997/12/17}{Changed 158 to \cs{DeclareInputText}} +% +% \begin{macrocode} +%<*cp437|cp437de|cp865> +\DeclareInputText{128}{{\c C}} +\DeclareInputText{129}{\"u} +\DeclareInputText{130}{\@tabacckludge'e} +\DeclareInputText{131}{\^a} +\DeclareInputText{132}{\"a} +\DeclareInputText{133}{\@tabacckludge`a} +\DeclareInputText{134}{\r a} +\DeclareInputText{135}{{\c c}} +\DeclareInputText{136}{\^e} +\DeclareInputText{137}{\"e} +\DeclareInputText{138}{\@tabacckludge`e} +\DeclareInputText{139}{\"\i} +\DeclareInputText{140}{\^\i} +\DeclareInputText{141}{\@tabacckludge`\i} +\DeclareInputText{142}{\"A} +\DeclareInputText{143}{\r A} +\DeclareInputText{144}{\@tabacckludge'E} +\DeclareInputText{145}{\ae} +\DeclareInputText{146}{\AE} +\DeclareInputText{147}{\^o} +\DeclareInputText{148}{\"o} +\DeclareInputText{149}{\@tabacckludge`o} +\DeclareInputText{150}{\^u} +\DeclareInputText{151}{\@tabacckludge`u} +\DeclareInputText{152}{\"y} +\DeclareInputText{153}{\"O} +\DeclareInputText{154}{\"U} +%</cp437|cp437de|cp865> +%<*cp437|cp437de> +\DeclareInputText{155}{\textcent} +\DeclareInputText{156}{\pounds} +\DeclareInputText{157}{\textyen} +%</cp437|cp437de> +%<*cp865> +\DeclareInputText{155}{\o} +\DeclareInputText{156}{\pounds} +\DeclareInputText{157}{\O} +%</cp865> +%<*cp437|cp437de|cp865> +\DeclareInputText{158}{\textpeseta} % Pt +\DeclareInputText{159}{\textflorin} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{160}{\@tabacckludge'a} % 160 +\DeclareInputText{161}{\@tabacckludge'\i} +\DeclareInputText{162}{\@tabacckludge'o} +\DeclareInputText{163}{\@tabacckludge'u} +\DeclareInputText{164}{\~n} +\DeclareInputText{165}{\~N} +\DeclareInputText{166}{\textordfeminine} +\DeclareInputText{167}{\textordmasculine} +\DeclareInputText{168}{\textquestiondown} +%\DeclareInputText{169}{} % left upper corner +\DeclareInputMath{170}{\lnot} +\DeclareInputText{171}{\textonehalf} +\DeclareInputText{172}{\textonequarter} +\DeclareInputText{173}{\textexclamdown} +\DeclareInputText{174}{\guillemotleft} +%<cp437|cp437de>\DeclareInputText{175}{\guillemotright} +%<cp865>\DeclareInputText{175}{\textcurrency} +%\DeclareInputText{176}{\textlightgraybox} +%\DeclareInputText{177}{\textgraybox} +%\DeclareInputText{178}{\textdarkgraybox} +%\DeclareInputMath{179}{} % vertical bar +%\DeclareInputText{180}{} % vertical bar with branch to left +%\DeclareInputText{181}{} % vertical bar with double branch to left +%\DeclareInputText{182}{} % double bar with single branch to left +%\DeclareInputText{183}{} % graphic +%\DeclareInputText{184}{} % graphic +%\DeclareInputMath{185}{} % vertical double bar with branch to left +%\DeclareInputMath{186}{} % vertical double bar +%\DeclareInputText{187}{} % double upper right corner +%\DeclareInputMath{188}{} % double lower right corner +%\DeclareInputText{189}{} % graphic +%\DeclareInputText{190}{} % graphic +%\DeclareInputMath{191}{\ensuremath{\rceil}} +% \end{macrocode} +% +% \begin{macrocode} +%\DeclareInputMath{192}{\ensuremath{\lfloor}} +%\DeclareInputText{193}{} % dash with branch up +%\DeclareInputText{194}{} % dash with branch down +%\DeclareInputText{195}{} % vertical bar with branch to right +%\DeclareInputText{196}{} % horizontal bar, not endash +%\DeclareInputText{197}{} % vertical bar crossed with dash +%\DeclareInputText{198}{} % graphic +%\DeclareInputText{199}{} % graphic +%\DeclareInputText{200}{} % double lower left corner +%\DeclareInputText{201}{} % double upper left corner +%\DeclareInputText{202}{} % double dash with branch up +%\DeclareInputText{203}{} % double dash with branch down +%\DeclareInputText{204}{} % double bar with branch right +%\DeclareInputText{205}{=} % double dash +%\DeclareInputText{206}{} % double bar crossing double dash +%\DeclareInputText{207}{} % graphic +%\DeclareInputMath{208}{} +%\DeclareInputText{209}{} +%\DeclareInputText{210}{} +%\DeclareInputText{211}{} +%\DeclareInputText{212}{} +%\DeclareInputText{213}{} +%\DeclareInputText{214}{} +%\DeclareInputText{215}{} +%\DeclareInputText{216}{} +%\DeclareInputMath{217}{\ensuremath{\rfloor}} % lower right corner +%\DeclareInputMath{218}{\ensuremath{\lceil}} % upper left corner +%\DeclareInputText{219}{} % black box +%\DeclareInputText{220}{} % lower half of black box +%\DeclareInputText{221}{} % left bar +%\DeclareInputText{222}{} % right bar +%\DeclareInputText{223}{} % upper half of black box +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputMath{224}{\alpha} +%</cp437|cp437de|cp865> +%<cp437|cp865>\DeclareInputMath{225}{\beta} +%<cp437de>\DeclareInputText{225}{\ss} +%<*cp437|cp437de|cp865> +\DeclareInputMath{226}{\Gamma} +\DeclareInputMath{227}{\pi} +\DeclareInputMath{228}{\Sigma} +\DeclareInputMath{229}{\sigma} +\DeclareInputMath{230}{\mu} +\DeclareInputMath{231}{\gamma} +\DeclareInputMath{232}{\Phi} +\DeclareInputMath{233}{\theta} +\DeclareInputMath{234}{\Omega} +\DeclareInputMath{235}{\delta} +\DeclareInputMath{236}{\infty} +\DeclareInputMath{237}{\phi} +\DeclareInputMath{238}{\varepsilon} +\DeclareInputMath{239}{\cap} +\DeclareInputMath{240}{\equiv} +\DeclareInputMath{241}{\pm} +\DeclareInputMath{242}{\ge} +\DeclareInputMath{243}{\le} +%\DeclareInputMath{244}{} % upper part of integral sign +%\DeclareInputMath{245}{} % lower part of integral sign +\DeclareInputMath{246}{\div} +\DeclareInputMath{247}{\approx} +\DeclareInputText{248}{\textdegree} +\DeclareInputText{249}{\textperiodcentered} +\DeclareInputText{250}{\textbullet} +\DeclareInputMath{251}{\surd} +\DeclareInputMath{252}{\mathnsuperior} +\DeclareInputMath{253}{\mathtwosuperior} +\DeclareInputText{254}{\textblacksquare} % right name? +\DeclareInputText{255}{\nobreakspace} +%</cp437|cp437de|cp865> +% \end{macrocode} +% +% \section{The Macintosh encodings} +% +% This input encoding was contributed by +% Constantin Kahn (\texttt{kahn@\linebreak[0]math.toronto.edu}), +% with minor modifications by Alan Jeffrey. +% +% \changes{v0.09c}{1995/05/30}{Made mac encoding `active german quote +% safe', and added the correct docstrip magic.} +% +% \begin{macrocode} +%<*applemac> +\DeclareInputText{128}{\"A} +\DeclareInputText{129}{\r A} +\DeclareInputText{130}{\c C} +\DeclareInputText{131}{\@tabacckludge'E} +\DeclareInputText{132}{\~N} +\DeclareInputText{133}{\"O} +\DeclareInputText{134}{\"U} +\DeclareInputText{135}{\@tabacckludge'a} +\DeclareInputText{136}{\@tabacckludge`a} +\DeclareInputText{137}{\^a} +\DeclareInputText{138}{\"a} +\DeclareInputText{139}{\~a} +\DeclareInputText{140}{\r a} +\DeclareInputText{141}{\c c} +\DeclareInputText{142}{\@tabacckludge'e} +\DeclareInputText{143}{\@tabacckludge`e} +\DeclareInputText{144}{\^e} +\DeclareInputText{145}{\"e} +\DeclareInputText{146}{\@tabacckludge'\i} +\DeclareInputText{147}{\@tabacckludge`\i} +\DeclareInputText{148}{\^\i} +\DeclareInputText{149}{\"\i} +\DeclareInputText{150}{\~n} +\DeclareInputText{151}{\@tabacckludge'o} +\DeclareInputText{152}{\@tabacckludge`o} +\DeclareInputText{153}{\^o} +\DeclareInputText{154}{\"o} +\DeclareInputText{155}{\~o} +\DeclareInputText{156}{\@tabacckludge'u} +\DeclareInputText{157}{\@tabacckludge`u} +\DeclareInputText{158}{\^u} +\DeclareInputText{159}{\"u} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{160}{\dag} +\DeclareInputText{161}{\textdegree} +\DeclareInputText{162}{\textcent} +\DeclareInputText{163}{\pounds} +\DeclareInputText{164}{\S} +\DeclareInputText{165}{\textbullet} +\DeclareInputText{166}{\P} +\DeclareInputText{167}{\ss} +\DeclareInputText{168}{\textregistered} +\DeclareInputText{169}{\copyright} +\DeclareInputText{170}{\texttrademark} +\DeclareInputText{171}{\@tabacckludge'{}} +\DeclareInputText{172}{\"{}} +\DeclareInputMath{173}{\neq} +\DeclareInputText{174}{\AE} +\DeclareInputText{175}{\O} +\DeclareInputMath{176}{\infty} +\DeclareInputMath{177}{\pm} +\DeclareInputMath{178}{\leq} +\DeclareInputMath{179}{\geq} +\DeclareInputText{180}{\textyen} +\DeclareInputMath{181}{\mu} +\DeclareInputMath{182}{\partial} +\DeclareInputMath{183}{\Sigma} +\DeclareInputMath{184}{\Pi} +\DeclareInputMath{185}{\pi} +\DeclareInputMath{186}{\int} +\DeclareInputText{187}{\textordfeminine} +\DeclareInputText{188}{\textordmasculine} +\DeclareInputMath{189}{\Omega} +\DeclareInputText{190}{\ae} +\DeclareInputText{191}{\o} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{192}{\textquestiondown} +\DeclareInputText{193}{\textexclamdown} +\DeclareInputMath{194}{\lnot} +\DeclareInputMath{195}{\surd} +\DeclareInputText{196}{\textflorin} +\DeclareInputMath{197}{\approx} +\DeclareInputMath{198}{\Delta} +\DeclareInputText{199}{\guillemotleft} +\DeclareInputText{200}{\guillemotright} +\DeclareInputText{201}{\dots} +\DeclareInputText{202}{\nobreakspace} +\DeclareInputText{203}{\@tabacckludge`A} +\DeclareInputText{204}{\~A} +\DeclareInputText{205}{\~O} +\DeclareInputText{206}{\OE} +\DeclareInputText{207}{\oe} +\DeclareInputText{208}{\textendash} +\DeclareInputText{209}{\textemdash} +\DeclareInputText{210}{\textquotedblleft} +\DeclareInputText{211}{\textquotedblright} +\DeclareInputText{212}{\textquoteleft} +\DeclareInputText{213}{\textquoteright} +\DeclareInputMath{214}{\div} +\DeclareInputMath{215}{\diamond} +\DeclareInputText{216}{\"y} +\DeclareInputText{217}{\"Y} +\DeclareInputMath{218}{/} +\DeclareInputText{219}{\textcurrency} +\DeclareInputText{220}{\guilsinglleft} +\DeclareInputText{221}{\guilsinglright} +\DeclareInputText{222}{fi} +\DeclareInputText{223}{fl} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{224}{\ddag} +\DeclareInputText{225}{\textperiodcentered} +\DeclareInputText{226}{\quotesinglbase} +\DeclareInputText{227}{\quotedblbase} +\DeclareInputText{228}{\textperthousand} +\DeclareInputText{229}{\^A} +\DeclareInputText{230}{\^E} +\DeclareInputText{231}{\@tabacckludge'A} +\DeclareInputText{232}{\"E} +\DeclareInputText{233}{\@tabacckludge`E} +\DeclareInputText{234}{\@tabacckludge'I} +\DeclareInputText{235}{\^I} +\DeclareInputText{236}{\"I} +\DeclareInputText{237}{\@tabacckludge`I} +\DeclareInputText{238}{\@tabacckludge'O} +\DeclareInputText{239}{\^O} +\DeclareInputText{240}{\textapplelogo} +\DeclareInputText{241}{\@tabacckludge`O} +\DeclareInputText{242}{\@tabacckludge'U} +\DeclareInputText{243}{\^U} +\DeclareInputText{244}{\@tabacckludge`U} +\DeclareInputText{245}{\i} +\DeclareInputText{246}{\^{}} +\DeclareInputText{247}{\~{}} +\DeclareInputText{248}{\@tabacckludge={}} +\DeclareInputText{249}{\u{}} +\DeclareInputText{250}{\.{}} +\DeclareInputText{251}{\r{}} +\DeclareInputText{252}{\c\ } +\DeclareInputText{253}{\H{}} +\DeclareInputText{254}{\k\ } +\DeclareInputText{255}{\v{}} +%</applemac> +% \end{macrocode} +% +% This input encoding for the Apple Central European Codepage was +% contributed by Radek Tryc and Marcin Wolinski +% \verb=<wolinski@mimuw.edu.pl>=. +% +% \changes{v0.99b}{2002/06/16}{Added macce encoding (pr/3433)} +% \changes{v1.0d}{2004/02/05}{Reordered code} +% \begin{macrocode} +%<*applemacce> +\DeclareInputText{128}{\"A} +\DeclareInputText{131}{\@tabacckludge'E} +\DeclareInputText{132}{\k A} +\DeclareInputText{133}{\"O} +\DeclareInputText{134}{\"U} +\DeclareInputText{136}{\k a} +\DeclareInputText{137}{\v C} +\DeclareInputText{138}{\" a} +\DeclareInputText{139}{\v c} +\DeclareInputText{140}{\@tabacckludge'C} +\DeclareInputText{141}{\@tabacckludge'c} +\DeclareInputText{143}{\@tabacckludge'Z} +\DeclareInputText{144}{\@tabacckludge'z} +\DeclareInputText{151}{\@tabacckludge'o} +\DeclareInputText{159}{\"u} +\DeclareInputText{154}{\"o} +\DeclareInputText{133}{\"O} +\DeclareInputText{134}{\"U} +\DeclareInputText{153}{\^o} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{160}{\textdagger} +\DeclareInputText{161}{\textdegree} +\DeclareInputText{162}{\k E} +\DeclareInputText{163}{\pounds} +\DeclareInputText{164}{\textsection} +\DeclareInputText{165}{\textbullet} +\DeclareInputText{166}{\textparagraph} +\DeclareInputText{167}{\SS} +\DeclareInputText{168}{\textregistered} +\DeclareInputText{171}{\k e} +\DeclareInputText{193}{\@tabacckludge'N} +\DeclareInputText{169}{\textcopyright} +\DeclareInputText{184}{\l} +\DeclareInputText{196}{\@tabacckludge'n} +\DeclareInputText{199}{\guillemotleft} +\DeclareInputText{200}{\guillemotright} +\DeclareInputText{201}{\textellipsis} +\DeclareInputText{202}{\nobreakspace} +\DeclareInputText{208}{\textendash} +\DeclareInputText{209}{\textemdash} +\DeclareInputText{210}{\textquotedbleft} +\DeclareInputText{211}{\textquotedblright} +\DeclareInputText{212}{\textquoteleft} +\DeclareInputText{213}{\textquoteright} +\DeclareInputText{214}{\textdiv} +\DeclareInputText{220}{\guilsinglleft} +\DeclareInputText{221}{\guilsinglright} +\DeclareInputText{222}{\v r} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{226}{\quotesinglbase} +\DeclareInputText{227}{\quotedblbase} +\DeclareInputText{229}{\@tabacckludge'S} +\DeclareInputText{230}{\@tabacckludge's} +\DeclareInputText{238}{\@tabacckludge'O} +\DeclareInputText{239}{\^O} +\DeclareInputText{251}{\.Z} +\DeclareInputText{252}{\L} +\DeclareInputText{253}{\.z} +%</applemacce> +% \end{macrocode} +% +% \section{The Next encoding} +% +% This input encoding is based on work by Stefan Ried +% (\texttt{stef@\linebreak[0]theo-phys.uni-essen.de} and Holger Uhr +% (\texttt{huhr@\linebreak[0]uni-paderborn.de}). +% +% Further extended by +% Jens Heise (\texttt{heisbeee@calvados.zrz.TU-Berlin.DE}). +% +% \changes{v0.9k}{1995/11/29}{Tidied up this encoding.} +% +% \changes{v0.9m}{1995/12/04}{Made fraction a math character.} +% \changes{v0.9n}{1995/12/10}{Made fraction a text character.} +% +% \changes{v0.94}{1997/12/17}{Changed \cs{textellipsis} to \cs{dots} +% for consistency.} +% \changes{v0.94}{1997/12/17}{Changed \cs{textquotesinglbase} to +% \cs{quotesinglbase}: this may be temporary.} +% \changes{v0.94}{1997/12/17}{Changed \cs{textquotedblbase} to +% \cs{quotedblbase}: this may be temporary.} +% \changes{v0.96}{1998/03/02}{Fixed typo in slot 159.} +% \changes{v0.997}{2000/12/02}{Added all missing chars. (pr/3281)} +% +% \begin{macrocode} +%<*next> +\DeclareInputText{128}{\nobreakspace} +\DeclareInputText{129}{\@tabacckludge`A} +\DeclareInputText{130}{\@tabacckludge'A} +\DeclareInputText{131}{\^A} +\DeclareInputText{132}{\~A} +\DeclareInputText{133}{\"A} +\DeclareInputText{134}{\r A} +\DeclareInputText{135}{\c C} +\DeclareInputText{136}{\@tabacckludge`E} +\DeclareInputText{137}{\@tabacckludge'E} +\DeclareInputText{138}{\^E} +\DeclareInputText{139}{\"E} +\DeclareInputText{140}{\@tabacckludge`I} +\DeclareInputText{141}{\@tabacckludge'I} +\DeclareInputText{142}{\^I} +\DeclareInputText{143}{\"I} +\DeclareInputText{144}{\DH} +\DeclareInputText{145}{\~N} +\DeclareInputText{146}{\@tabacckludge`O} +\DeclareInputText{147}{\@tabacckludge'O} +\DeclareInputText{148}{\^O} +\DeclareInputText{149}{\~O} +\DeclareInputText{150}{\"O} +\DeclareInputText{151}{\@tabacckludge`U} +\DeclareInputText{152}{\@tabacckludge'U} +\DeclareInputText{153}{\^U} +\DeclareInputText{154}{\"U} +\DeclareInputText{155}{\@tabacckludge'Y} +\DeclareInputText{156}{\TH} +\DeclareInputMath{157}{\mu} +\DeclareInputMath{158}{\times} +\DeclareInputMath{159}{\div} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{160}{\copyright} +\DeclareInputText{161}{\textexclamdown} +\DeclareInputText{162}{\textcent} +\DeclareInputText{163}{\pounds} +\DeclareInputMath{164}{/} +\DeclareInputText{165}{\textyen} +\DeclareInputText{166}{\textflorin} +\DeclareInputText{167}{\S} +\DeclareInputText{168}{\textcurrency} +\DeclareInputText{169}{\textquotesingle} +\DeclareInputText{170}{\textquotedblleft} +\DeclareInputText{171}{\guillemotleft} +\DeclareInputText{172}{\guilsinglleft} +\DeclareInputText{173}{\guilsinglright} +\DeclareInputText{174}{fi} +\DeclareInputText{175}{fl} +\DeclareInputText{176}{\textregistered} +\DeclareInputText{177}{\textendash} +\DeclareInputText{178}{\dag} +\DeclareInputText{179}{\ddag} +\DeclareInputText{180}{\textperiodcentered} +\DeclareInputText{181}{\textbar} +\DeclareInputText{182}{\P} +\DeclareInputText{183}{\textbullet} +\DeclareInputText{184}{\quotesinglbase} +\DeclareInputText{185}{\quotedblbase} +\DeclareInputText{186}{\textquotedblright} +\DeclareInputText{187}{\guillemotright} +\DeclareInputText{188}{\dots} +\DeclareInputText{189}{\textperthousand} +\DeclareInputMath{190}{\lnot} +\DeclareInputText{191}{\textquestiondown} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputMath{192}{\mathonesuperior} +\DeclareInputText{193}{\@tabacckludge`{}} +\DeclareInputText{194}{\@tabacckludge'{}} +\DeclareInputText{195}{\^{}} +\DeclareInputText{196}{\~{}} +\DeclareInputText{197}{\@tabacckludge={}} +\DeclareInputText{198}{\u{}} +\DeclareInputText{199}{\.{}} +\DeclareInputText{200}{\"{}} +\DeclareInputMath{201}{\mathtwosuperior} +\DeclareInputText{202}{\textdegree} +\DeclareInputText{203}{\c\ } +\DeclareInputMath{204}{\maththreesuperior} +\DeclareInputText{205}{\H{}} +\DeclareInputText{206}{\capitalogonek{}} +\DeclareInputText{207}{\v{}} +\DeclareInputText{208}{\textemdash} +\DeclareInputMath{209}{\pm} +\DeclareInputText{210}{\textonequarter} +\DeclareInputText{211}{\textonehalf} +\DeclareInputText{212}{\textthreequarters} +\DeclareInputText{213}{\@tabacckludge`a} +\DeclareInputText{214}{\@tabacckludge'a} +\DeclareInputText{215}{\^a} +\DeclareInputText{216}{\~a} +\DeclareInputText{217}{\"a} +\DeclareInputText{218}{\r a} +\DeclareInputText{219}{\c c} +\DeclareInputText{220}{\@tabacckludge`e} +\DeclareInputText{221}{\@tabacckludge'e} +\DeclareInputText{222}{\^e} +\DeclareInputText{223}{\"e} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{224}{\@tabacckludge`\i} +\DeclareInputText{225}{\AE} +\DeclareInputText{226}{\@tabacckludge'\i} +\DeclareInputText{227}{\textordfeminine} +\DeclareInputText{228}{\^\i} +\DeclareInputText{229}{\"\i} +\DeclareInputMath{230}{\eth} +\DeclareInputText{231}{\~n} +\DeclareInputText{232}{\L} +\DeclareInputText{233}{\O} +\DeclareInputText{234}{\OE} +\DeclareInputText{235}{\textordmasculine} +\DeclareInputText{236}{\@tabacckludge`o} +\DeclareInputText{237}{\@tabacckludge'o} +\DeclareInputText{238}{\^o} +\DeclareInputText{239}{\~o} +\DeclareInputText{240}{\"o} +\DeclareInputText{241}{\ae} +\DeclareInputText{242}{\@tabacckludge`u} +\DeclareInputText{243}{\@tabacckludge'u} +\DeclareInputText{244}{\^u} +\DeclareInputText{245}{\i} +\DeclareInputText{246}{\"u} +\DeclareInputText{247}{\@tabacckludge'y} +\DeclareInputText{248}{\l} +\DeclareInputText{249}{\o} +\DeclareInputText{250}{\oe} +\DeclareInputText{251}{\ss} +\DeclareInputText{252}{\th} +\DeclareInputText{253}{\"y} +\DeclareInputText{254}{} +\DeclareInputText{255}{} +%</next> +% \end{macrocode} +% +% +% +% \changes{v0.9a}{1995/04/23}{\cs{textonequarter} and friends should +% be declared with \cs{DeclareInputText}} +% \section{The MS Windows ANSI encoding cp1252,\\ +% and the ISO Latin-1 and Latin-9 encodings} +% +% The MS Windows ANSI, cp 1252, input encoding was contributed by +% Berthold K.P. Horn (\texttt{bkph@\linebreak[0]ai.mit.edu}). +% +% It has two very different names so the same code produces two files. +% These encoding files both define the characters in the +% MS Windows 3.1 ANSI encoding (Western Europe), also known as code +% page 1252, which is based on ISO Latin-1 but has important additions +% in the 128--159 range. +% +% Designed for: +% Danish, Dutch, English, Finnish, French, German, Icelandic, +% Italian, Norwegian, Portuguese, Spanish, and Swedish. +% +% Note: Windows ANSI --- like Macintosh standard roman encoding --- +% has quotesingle at 39, and grave at 96 --- which is here +% ignored. +% +% The ISO Latin-1 encoding file defines only the restricted range of +% characters available in the ISO~8859-1 encoding. +% +% The ISO~Latin-9 encoding file defines the characters in the +% ISO~8859-15 encoding. It was contributed by Karsten Tinnefeld +% (\texttt{karsten@tinnefeld.com}). +% It differs only a small amount from ISO~Latin-1 and is a +% replacement for it that contains a few characters that are needed for +% French and Finnish. Further, a slot for the Euro currency sign has +% been added and this could be the killer argument for many 8-bit +% texts to be written in Latin-9 in the future. +% +% According to a Linux manpage, ISO~Latin-9 supports Albanian, Basque, +% Breton, Catalan, Danish, Dutch, +% English, Estonian, Faroese, Finnish, French, Frisian, Galician, German, +% Greenlandic, Icelandic, Irish Gaelic, Italian, Latin, Luxemburgish, +% Norwegian, Portuguese, Rhaeto-Romanic, Scottish Gaelic, Spanish and +% Swedish. +% +% The characters added in |latin9.def| are (in \LaTeX{} notation): +% \begin{verbatim} +% \texteuro, \v S \v s \v Z \v z \OE \oe \" Y +% \end{verbatim} +% They displace the following characters from |latin1.def|: +% \begin{verbatim} +% \textcurrency \textbrokenbar \"{} \'{} \c{} +% \textonequarter \textonehalf \textthreequarters +% \end{verbatim} +% +% \changes{v0.9e}{1995/08/31}{Redeclared "AD to be soft hyphen.} +% \changes{v0.9e}{1995/08/31}{Swapped ordfeminine and ordmasculine.} +% +% \changes{v0.9p}{1996/04/11}{ansinew 09f is \"Y not \"y, latex/2119} +% +% \changes{v0.91}{1997/08/19}{Exchanged codes for +% \cs{textendash} and \cs{textemdash}.} +% +% \changes{v0.94}{1997/12/17}{Added cp1252 and merged latin1} +% \changes{v0.94}{1997/12/17}{Changed \cs{ldots} to \cs{dots}, this +% should be undetectable since \cs{ldots} is not robust.} +% +% \changes{v0.99a}{2001/07/10}{Added latin9 (from Karsten Tinnefeld)} +% \changes{v0.99b}{2002/06/16}{Added code points 142,158 for cp1252 (pr/3441)} +% \changes{v0.99b}{2002/07/08}{Added code 128 (texteuro) for cp1252 (pr/3423)} +% +% \begin{macrocode} +%<*cp1252> +\DeclareInputText{128}{\texteuro} +\DeclareInputText{130}{\quotesinglbase} +\DeclareInputText{131}{\textflorin} +\DeclareInputText{132}{\quotedblbase} +\DeclareInputText{133}{\dots} +\DeclareInputText{134}{\dag} +\DeclareInputText{135}{\ddag} +\DeclareInputText{136}{\^{}} +\DeclareInputText{137}{\textperthousand} +\DeclareInputText{138}{\v S} +\DeclareInputText{139}{\guilsinglleft} +\DeclareInputText{140}{\OE} +\DeclareInputText{142}{\v Z} +\DeclareInputText{145}{\textquoteleft} +\DeclareInputText{146}{\textquoteright} +\DeclareInputText{147}{\textquotedblleft} +\DeclareInputText{148}{\textquotedblright} +\DeclareInputText{149}{\textbullet} +\DeclareInputText{150}{\textendash} +\DeclareInputText{151}{\textemdash} +\DeclareInputText{152}{\~{}} +\DeclareInputText{153}{\texttrademark} +\DeclareInputText{154}{\v s} +\DeclareInputText{155}{\guilsinglright} +\DeclareInputText{156}{\oe} +\DeclareInputText{158}{\v z} +\DeclareInputText{159}{\"Y} +%</cp1252> +% \end{macrocode} +% +% This (somewhat confused) table is now even more disordered: first +% we deal with those few characters that are different in latin9, +% then with the rest. +% +% \begin{macrocode} +%<*cp1252|latin1> +\DeclareInputText{164}{\textcurrency} +\DeclareInputText{166}{\textbrokenbar} +\DeclareInputText{168}{\"{}} +\DeclareInputText{180}{\@tabacckludge'{}} +\DeclareInputText{184}{\c\ } +\DeclareInputText{188}{\textonequarter} +\DeclareInputText{189}{\textonehalf} +\DeclareInputText{190}{\textthreequarters} +%</cp1252|latin1> +% \end{macrocode} +% +% \begin{macrocode} +%<*latin9> +\DeclareInputText{164}{\texteuro} +\DeclareInputText{166}{\v S} +\DeclareInputText{168}{\v s} +\DeclareInputText{180}{\v Z} +\DeclareInputText{184}{\v z} +\DeclareInputText{188}{\OE} +\DeclareInputText{189}{\oe} +\DeclareInputText{190}{\"Y} +%</latin9> +% \end{macrocode} +% +% \begin{macrocode} +%<*cp1252|latin1|latin9> +\DeclareInputText{160}{\nobreakspace} +\DeclareInputText{176}{\textdegree} +\DeclareInputText{161}{\textexclamdown} +\DeclareInputMath{177}{\pm} +\DeclareInputText{162}{\textcent} +\DeclareInputMath{178}{\mathtwosuperior} +\DeclareInputText{163}{\pounds} +\DeclareInputMath{179}{\maththreesuperior} +\DeclareInputText{165}{\textyen} +\DeclareInputMath{181}{\mu} +\DeclareInputText{182}{\P} +\DeclareInputText{167}{\S} +\DeclareInputText{183}{\textperiodcentered} +\DeclareInputText{169}{\copyright} +\DeclareInputMath{185}{\mathonesuperior} +\DeclareInputText{170}{\textordfeminine} +\DeclareInputText{186}{\textordmasculine} +\DeclareInputText{171}{\guillemotleft} +\DeclareInputText{187}{\guillemotright} +\DeclareInputMath{172}{\lnot} +\DeclareInputText{173}{\-} +\DeclareInputText{174}{\textregistered} +\DeclareInputText{175}{\@tabacckludge={}} +\DeclareInputText{191}{\textquestiondown} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{192}{\@tabacckludge`A} +\DeclareInputText{208}{\DH} +\DeclareInputText{193}{\@tabacckludge'A} +\DeclareInputText{209}{\~N} +\DeclareInputText{194}{\^A} +\DeclareInputText{210}{\@tabacckludge`O} +\DeclareInputText{195}{\~A} +\DeclareInputText{211}{\@tabacckludge'O} +\DeclareInputText{196}{\"A} +\DeclareInputText{212}{\^O} +\DeclareInputText{197}{\r A} +\DeclareInputText{213}{\~O} +\DeclareInputText{198}{\AE} +\DeclareInputText{214}{\"O} +\DeclareInputText{199}{\c C} +\DeclareInputMath{215}{\times} +\DeclareInputText{200}{\@tabacckludge`E} +\DeclareInputText{216}{\O} +\DeclareInputText{201}{\@tabacckludge'E} +\DeclareInputText{217}{\@tabacckludge`U} +\DeclareInputText{202}{\^E} +\DeclareInputText{218}{\@tabacckludge'U} +\DeclareInputText{203}{\"E} +\DeclareInputText{219}{\^U} +\DeclareInputText{204}{\@tabacckludge`I} +\DeclareInputText{220}{\"U} +\DeclareInputText{205}{\@tabacckludge'I} +\DeclareInputText{221}{\@tabacckludge'Y} +\DeclareInputText{206}{\^I} +\DeclareInputText{222}{\TH} +\DeclareInputText{207}{\"I} +\DeclareInputText{223}{\ss} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{224}{\@tabacckludge`a} +\DeclareInputText{240}{\dh} +\DeclareInputText{225}{\@tabacckludge'a} +\DeclareInputText{241}{\~n} +\DeclareInputText{226}{\^a} +\DeclareInputText{242}{\@tabacckludge`o} +\DeclareInputText{227}{\~a} +\DeclareInputText{243}{\@tabacckludge'o} +\DeclareInputText{228}{\"a} +\DeclareInputText{244}{\^o} +\DeclareInputText{229}{\r a} +\DeclareInputText{245}{\~o} +\DeclareInputText{230}{\ae} +\DeclareInputText{246}{\"o} +\DeclareInputText{231}{\c c} +\DeclareInputMath{247}{\div} +\DeclareInputText{232}{\@tabacckludge`e} +\DeclareInputText{248}{\o} +\DeclareInputText{233}{\@tabacckludge'e} +\DeclareInputText{249}{\@tabacckludge`u} +\DeclareInputText{234}{\^e} +\DeclareInputText{250}{\@tabacckludge'u} +\DeclareInputText{235}{\"e} +\DeclareInputText{251}{\^u} +\DeclareInputText{236}{\@tabacckludge`\i} +\DeclareInputText{252}{\"u} +\DeclareInputText{237}{\@tabacckludge'\i} +\DeclareInputText{253}{\@tabacckludge'y} +\DeclareInputText{238}{\^\i} +\DeclareInputText{254}{\th} +\DeclareInputText{239}{\"\i} +\DeclareInputText{255}{\"y} +%</cp1252|latin1|latin9> +% \end{macrocode} +% +% +%\section{The ISO 8859-16 (Latin10) encoding} +% +% \changes{v1.0c}{2004/02/04}{Added ISO 8859-16 Latin10 (pr/3568)} +% +% This set of coded graphic characters is intended for use in data and +% text processing applications and also for information interchange. The +% set contains graphic characters used for general purpose applications in +% typical office environments in at least the following languages: +% Albanian, Croatian, English, Finnish, French, German, Hungarian, Irish +% Gaelic (new orthography), Italian, Latin, Polish, Romanian, and +% Slovenian. This set of coded graphic characters may be regarded as a +% version of an 8-bit code according to ISO/IEC 2022 or ISO/IEC 4873 at +% level 1. [ISO 8859-16:2001(E), p. 1] +% +% ISO 8859-16 was primarily designed for single-byte encoding the Romanian +% language. The UTF-8 charset is the preferred and in today's MIME software +% more widely implemented encoding suitable for Romanian. +% +% Data for the \LaTeX{} support was mainly provided by Ionel Ciob\^{i}c\u{a} +% with additions and corrections taken from\\ +% \texttt{http://www.unicode.org/Public/MAPPINGS/ISO8859/8859-16.TXT}. +% \begin{macrocode} +%<*latin10> +% \end{macrocode} +% The ``comma below'' accent is provided here in a crude (better +% than nothing) version. +% \begin{macrocode} +\ProvideTextCommandDefault\textcommabelow[1] + {\hmode@bgroup\ooalign{\null#1\crcr\hidewidth + \raise-.31ex\hbox{\check@mathfonts +% \end{macrocode} +% Use |\sf@size| instead of |\ssf@size| if the comma looks too small: +% \begin{macrocode} + \fontsize\ssf@size\z@ + \math@fontsfalse\selectfont,}\hidewidth}\egroup} +% \end{macrocode} +% +% \begin{macrocode} +\ProvideTextCommandDefault\textpm{\ensuremath\pm} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{160}{\nobreakspace} +\DeclareInputText{161}{\k A} +\DeclareInputText{162}{\k a} +\DeclareInputText{163}{\L} +\DeclareInputText{164}{\texteuro} +\DeclareInputText{165}{\quotedblbase} +\DeclareInputText{166}{\v S} +\DeclareInputText{167}{\S} +\DeclareInputText{168}{\v s} +\DeclareInputText{169}{\textcopyright} +\DeclareInputText{170}{\textcommabelow S} +\DeclareInputText{171}{\guillemotleft} +\DeclareInputText{172}{\@tabacckludge'Z} +\DeclareInputText{173}{\-} +\DeclareInputText{174}{\@tabacckludge'z} +\DeclareInputText{175}{\.Z} +\DeclareInputText{176}{\textdegree} +\DeclareInputText{177}{\textpm} +\DeclareInputText{178}{\v C} +\DeclareInputText{179}{\l} +\DeclareInputText{180}{\v Z} +\DeclareInputText{181}{\textquotedblright} +\DeclareInputText{182}{\P} +\DeclareInputText{183}{\textperiodcentered} +\DeclareInputText{184}{\v z} +\DeclareInputText{185}{\v c} +\DeclareInputText{186}{\textcommabelow s} +\DeclareInputText{187}{\guillemotright} +\DeclareInputText{188}{\OE} +\DeclareInputText{189}{\oe} +\DeclareInputText{190}{\"Y} +\DeclareInputText{191}{\.z} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{192}{\@tabacckludge`A} +\DeclareInputText{193}{\@tabacckludge'A} +\DeclareInputText{194}{\^A} +\DeclareInputText{195}{\u A} +\DeclareInputText{196}{\"A} +\DeclareInputText{197}{\@tabacckludge'C} +\DeclareInputText{198}{\AE} +\DeclareInputText{199}{\c C} +\DeclareInputText{200}{\@tabacckludge`E} +\DeclareInputText{201}{\@tabacckludge'E} +\DeclareInputText{202}{\^E} +\DeclareInputText{203}{\"E} +\DeclareInputText{204}{\@tabacckludge`I} +\DeclareInputText{205}{\@tabacckludge'I} +\DeclareInputText{206}{\^I} +\DeclareInputText{207}{\"I} +\DeclareInputText{208}{\DJ} +\DeclareInputText{209}{\@tabacckludge'N} +\DeclareInputText{210}{\@tabacckludge`O} +\DeclareInputText{211}{\@tabacckludge'O} +\DeclareInputText{212}{\^O} +\DeclareInputText{213}{\H O} +\DeclareInputText{214}{\"O} +\DeclareInputText{215}{\@tabacckludge'S} +\DeclareInputText{216}{\H U} +\DeclareInputText{217}{\@tabacckludge`U} +\DeclareInputText{218}{\@tabacckludge'U} +\DeclareInputText{219}{\^U} +\DeclareInputText{220}{\"U} +\DeclareInputText{221}{\k E} +\DeclareInputText{222}{\textcommabelow T} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{223}{\ss} +\DeclareInputText{224}{\@tabacckludge`a} +\DeclareInputText{225}{\@tabacckludge'a} +\DeclareInputText{226}{\^a} +\DeclareInputText{227}{\u a} +\DeclareInputText{228}{\"a} +\DeclareInputText{229}{\@tabacckludge'c} +\DeclareInputText{230}{\ae} +\DeclareInputText{231}{\c c} +\DeclareInputText{232}{\@tabacckludge`e} +\DeclareInputText{233}{\@tabacckludge'e} +\DeclareInputText{234}{\^e} +\DeclareInputText{235}{\"e} +\DeclareInputText{236}{\@tabacckludge`\i} +\DeclareInputText{237}{\@tabacckludge'\i} +\DeclareInputText{238}{\^\i} +\DeclareInputText{239}{\"\i} +\DeclareInputText{240}{\dj} +\DeclareInputText{241}{\@tabacckludge'n} +\DeclareInputText{242}{\@tabacckludge`o} +\DeclareInputText{243}{\@tabacckludge'o} +\DeclareInputText{244}{\^o} +\DeclareInputText{245}{\H o} +\DeclareInputText{246}{\"o} +\DeclareInputText{247}{\@tabacckludge's} +\DeclareInputText{248}{\H u} +\DeclareInputText{249}{\@tabacckludge`u} +\DeclareInputText{250}{\@tabacckludge'u} +\DeclareInputText{251}{\^u} +\DeclareInputText{252}{\"u} +\DeclareInputText{253}{\k e} +\DeclareInputText{254}{\textcommabelow t} +\DeclareInputText{255}{\"y} +%</latin10> +% \end{macrocode} +% +%\section{The MS Windows encoding cp1250} +% +% This is an MS Windows encoding for Central and Eastern Europe, +% known as Code Page 1250; it was provided by Marcin Woli\'nski +% \texttt{wolinski@melkor.mimuw.edu.pl} and edited by Chris Rowley +% (see v0.94 below) to make it consistent with other files. +% +% \changes{v0.94}{1997/12/17}{Changed \cs{textellipsis} to \cs{dots} +% for consistency.} +% \changes{v0.94}{1997/12/17}{Changed \cs{textdagger} to \cs{dag} +% for consistency.} +% \changes{v0.94}{1997/12/17}{Changed \cs{textdagger} to \cs{dag} +% for consistency.} +% \changes{v0.94}{1997/12/17}{Changed \cs{textparagraph} to \cs{P} +% for consistency.} +% \changes{v0.94}{1997/12/17}{Changed \cs{textsection} to \cs{S} +% for consistency.} +% \changes{v0.99b}{2002/07/28}{Added code 128 (texteuro) for cp1250} +% \begin{macrocode} +%<*cp1250> +\DeclareInputText{128}{\texteuro} +%\DeclareInputText{129}{} % n/u +\DeclareInputText{130}{\quotesinglbase} +%\DeclareInputText{131}{} % n/u +\DeclareInputText{132}{\quotedblbase} +\DeclareInputText{133}{\dots} +\DeclareInputText{134}{\dag} +\DeclareInputText{135}{\ddag} +%\DeclareInputText{136}{} % n/u +\DeclareInputText{137}{\textperthousand} +\DeclareInputText{138}{\v S} +\DeclareInputText{139}{\guilsinglleft} +\DeclareInputText{140}{\@tabacckludge'S} +\DeclareInputText{141}{\v T} +\DeclareInputText{142}{\v Z} +\DeclareInputText{143}{\@tabacckludge'Z} +%\DeclareInputText{144}{} % n/u +\DeclareInputText{145}{\textquoteleft} +\DeclareInputText{146}{\textquoteright} +\DeclareInputText{147}{\textquotedblleft} +\DeclareInputText{148}{\textquotedblright} +\DeclareInputText{149}{\textbullet} +\DeclareInputText{150}{\textendash} +\DeclareInputText{151}{\textemdash} +%\DeclareInputText{152}{} % n/u +\DeclareInputText{153}{\texttrademark} +\DeclareInputText{154}{\v s} +\DeclareInputText{155}{\guilsinglright} +\DeclareInputText{156}{\@tabacckludge's} +\DeclareInputText{157}{\v t} % t caron (t') ? +\DeclareInputText{158}{\v z} +\DeclareInputText{159}{\@tabacckludge'z} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{160}{\nobreakspace} +\DeclareInputText{161}{\v{}} +\DeclareInputText{162}{\u{}} +\DeclareInputText{163}{\L} +\DeclareInputText{164}{\textcurrency} +\DeclareInputText{165}{\k A} +\DeclareInputText{166}{\textbrokenbar} +\DeclareInputText{167}{\S} +\DeclareInputText{168}{\"{}} +\DeclareInputText{169}{\copyright} +\DeclareInputText{170}{\c S} +\DeclareInputText{171}{\guillemotleft} +\DeclareInputMath{172}{\lnot} +\DeclareInputText{173}{\-}% soft hyphen +\DeclareInputText{174}{\textregistered} +\DeclareInputText{175}{\.Z} +\DeclareInputText{176}{\textdegree} +\DeclareInputMath{177}{\pm}% plus-minus +\DeclareInputText{178}{\k\ } +\DeclareInputText{179}{\l} +\DeclareInputText{180}{\@tabacckludge'{}} +\DeclareInputMath{181}{\mu}% micro sign +\DeclareInputText{182}{\P} +\DeclareInputText{183}{\textperiodcentered} +\DeclareInputText{184}{\c\ } +\DeclareInputText{185}{\k a} +\DeclareInputText{186}{\c s} +\DeclareInputText{187}{\guillemotright} +\DeclareInputText{188}{\v L}% L caron (L') ? +\DeclareInputText{189}{\H{}} +\DeclareInputText{190}{\v l}% l caron (l') ? +\DeclareInputText{191}{\. z} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{192}{\@tabacckludge'R} +\DeclareInputText{193}{\@tabacckludge'A} +\DeclareInputText{194}{\^A} +\DeclareInputText{195}{\u A} +\DeclareInputText{196}{\"A} +\DeclareInputText{197}{\@tabacckludge'L} +\DeclareInputText{198}{\@tabacckludge'C} +\DeclareInputText{199}{\c C} +\DeclareInputText{200}{\v C} +\DeclareInputText{201}{\@tabacckludge'E} +\DeclareInputText{202}{\k E} +\DeclareInputText{203}{\"E} +\DeclareInputText{204}{\v E} +\DeclareInputText{205}{\@tabacckludge'I} +\DeclareInputText{206}{\^I} +\DeclareInputText{207}{\v D} +\DeclareInputText{208}{\DJ} % D stroke +\DeclareInputText{209}{\@tabacckludge'N} +\DeclareInputText{210}{\v N} +\DeclareInputText{211}{\@tabacckludge'O} +\DeclareInputText{212}{\^O} +\DeclareInputText{213}{\H O} +\DeclareInputText{214}{\"O} +\DeclareInputMath{215}{\times} +\DeclareInputText{216}{\v R} +\DeclareInputText{217}{\r U} +\DeclareInputText{218}{\@tabacckludge'U} +\DeclareInputText{219}{\H U} +\DeclareInputText{220}{\" U} +\DeclareInputText{221}{\@tabacckludge'Y} +\DeclareInputText{222}{\c T} +\DeclareInputText{223}{\ss} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{224}{\@tabacckludge'r} +\DeclareInputText{225}{\@tabacckludge'a} +\DeclareInputText{226}{\^a} +\DeclareInputText{227}{\u a} +\DeclareInputText{228}{\" a} +\DeclareInputText{229}{\@tabacckludge'l} +\DeclareInputText{230}{\@tabacckludge'c} +\DeclareInputText{231}{\c c} +\DeclareInputText{232}{\v c} +\DeclareInputText{233}{\@tabacckludge'e} +\DeclareInputText{234}{\k e} +\DeclareInputText{235}{\"e} +\DeclareInputText{236}{\v e} +\DeclareInputText{237}{\@tabacckludge'\i} +\DeclareInputText{238}{\^\i} +\DeclareInputText{239}{\v d} % d caron (d') ? +\DeclareInputText{240}{\dj} % d stroke +\DeclareInputText{241}{\@tabacckludge'n} +\DeclareInputText{242}{\v n} +\DeclareInputText{243}{\@tabacckludge'o} +\DeclareInputText{244}{\^o} +\DeclareInputText{245}{\H o} +\DeclareInputText{246}{\"o} +\DeclareInputMath{247}{\div} +\DeclareInputText{248}{\v r} +\DeclareInputText{249}{\r u} +\DeclareInputText{250}{\@tabacckludge'u} +\DeclareInputText{251}{\H u} +\DeclareInputText{252}{\"u} +\DeclareInputText{253}{\@tabacckludge'y} +\DeclareInputText{254}{\c t} +\DeclareInputText{255}{\.{}} +%</cp1250> +% \end{macrocode} +% +% +%\section{The MS Windows encoding cp1257} +% +% This is an MS Windows encoding for Baltic languages, +% known as Code Page 1257; it was provided on the web at +% \texttt{http://nad.datapro.lv/LaTeX} and edited by Frank +% to make it consistent with other files. +% +% \begin{macrocode} +%<*cp1257> +\DeclareInputText{160}{\nobreakspace} +\DeclareInputText{161}{\k A} +\DeclareInputText{163}{\c R} +\DeclareInputText{164}{\textcurrency} +\DeclareInputText{165}{\~I} +\DeclareInputText{166}{\c L} +\DeclareInputText{167}{\S} +\DeclareInputText{168}{\"\ } +\DeclareInputText{169}{\v S} +\DeclareInputText{170}{\@tabacckludge=E} +\DeclareInputText{171}{\c G} +\DeclareInputText{173}{\-} +\DeclareInputText{174}{\v Z} +\DeclareInputText{175}{\@tabacckludge={}} +\DeclareInputText{176}{\textdegree} +\DeclareInputText{177}{\k a} +\DeclareInputText{178}{\k\ } +\DeclareInputText{179}{\c r} +\DeclareInputText{180}{\@tabacckludge'{}} +\DeclareInputText{181}{\~\i} +\DeclareInputText{182}{\c l} +\DeclareInputText{183}{\v\ } +\DeclareInputText{184}{\c\ } +\DeclareInputText{185}{\v s} +\DeclareInputText{186}{\@tabacckludge=e} +\DeclareInputText{187}{\c g} +\DeclareInputText{189}{\NG} +\DeclareInputText{190}{\v z} +\DeclareInputText{191}{\ng} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{192}{\@tabacckludge=A} +\DeclareInputText{193}{\@tabacckludge'A} +\DeclareInputText{194}{\=A} +\DeclareInputText{195}{\~A} +\DeclareInputText{196}{\"A} +\DeclareInputText{197}{\r A} +\DeclareInputText{198}{\AE} +\DeclareInputText{199}{\=E} +\DeclareInputText{200}{\v C} +\DeclareInputText{201}{\@tabacckludge'E} +\DeclareInputText{202}{\k E} +\DeclareInputText{203}{\"E} +\DeclareInputText{204}{\c G} +\DeclareInputText{205}{\c K} +\DeclareInputText{206}{\@tabacckludge=I} +\DeclareInputText{207}{\c L} +\DeclareInputText{208}{\v S} +\DeclareInputText{209}{\c N} +\DeclareInputText{210}{\c N} +\DeclareInputText{211}{\c N} +\DeclareInputText{212}{\^O} +\DeclareInputText{213}{\~O} +\DeclareInputText{214}{\"O} +\DeclareInputMath{215}{\times} +\DeclareInputText{216}{\O} +\DeclareInputText{217}{\k U} +\DeclareInputText{218}{\@tabacckludge'U} +\DeclareInputText{219}{\@tabacckludge=U} +\DeclareInputText{220}{\"U} +\DeclareInputText{221}{\~U} +\DeclareInputText{222}{\v Z} +\DeclareInputText{223}{\ss} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareInputText{224}{\@tabacckludge=a} +\DeclareInputText{225}{\@tabacckludge'a} +\DeclareInputText{226}{\@tabacckludge=a} +\DeclareInputText{227}{\~a} +\DeclareInputText{228}{\"a} +\DeclareInputText{229}{\r a} +\DeclareInputText{230}{\ae} +\DeclareInputText{231}{\@tabacckludge=e} +\DeclareInputText{232}{\v c} +\DeclareInputText{233}{\@tabacckludge'e} +\DeclareInputText{234}{\k e} +\DeclareInputText{235}{\"e} +\DeclareInputText{236}{\k g} +\DeclareInputText{237}{\c k} +\DeclareInputText{238}{\@tabacckludge=\i} +\DeclareInputText{239}{\k l} +\DeclareInputText{240}{\v s} +\DeclareInputText{241}{\c n} +\DeclareInputText{242}{\k n} +\DeclareInputText{243}{\c k} +\DeclareInputText{244}{\^o} +\DeclareInputText{245}{\~o} +\DeclareInputText{246}{\"o} +\DeclareInputMath{247}{\div} +\DeclareInputText{248}{\o} +\DeclareInputText{249}{\k u} +\DeclareInputText{250}{\@tabacckludge'u} +\DeclareInputText{251}{\@tabacckludge=u} +\DeclareInputText{252}{\"u} +\DeclareInputText{253}{\~u} +\DeclareInputText{254}{\v z} +\DeclareInputText{255}{\.\ } +%</cp1257> +% \end{macrocode} +% +% +% Finally, we reset the category code of the at sign at the end of all +% .def files. +% \begin{macrocode} +%<-package>\makeatother +% \end{macrocode} +% +% \DeleteShortVerb{\|} +% \Finale +\endinput diff --git a/Master/texmf-dist/source/latex/base/inputenc.ins b/Master/texmf-dist/source/latex/base/inputenc.ins new file mode 100644 index 00000000000..245b96995f4 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/inputenc.ins @@ -0,0 +1,169 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\Msg{*** Generating input encoding files ***} + +\generate{ + \file{inputenc.sty}{ + \from{inputenc.dtx}{package}} + \file{latin1.def}{ + \from{inputenc.dtx}{latin1}} + \file{latin2.def}{ + \from{inputenc.dtx}{latin2}} + \file{latin3.def}{ + \from{inputenc.dtx}{latin3}} + \file{latin4.def}{ + \from{inputenc.dtx}{latin4}} + \file{latin5.def}{ + \from{inputenc.dtx}{latin5}} + \file{latin9.def}{ + \from{inputenc.dtx}{latin9}} + \file{latin10.def}{ + \from{inputenc.dtx}{latin10}} + } + + + + \generate{ + \file{cp850.def}{ + \from{inputenc.dtx}{cp850}} + \file{cp852.def}{ + \from{inputenc.dtx}{cp852}} + \file{cp858.def}{ + \from{inputenc.dtx}{cp858}} + \file{cp865.def}{ + \from{inputenc.dtx}{cp865}} + \file{cp437.def}{ + \from{inputenc.dtx}{cp437}} + \file{cp437de.def}{ + \from{inputenc.dtx}{cp437de}} + \file{decmulti.def}{ + \from{inputenc.dtx}{decmulti}} + } + + \generate{ + \file{ascii.def}{ + \from{inputenc.dtx}{ascii}} + \file{applemac.def}{ + \from{inputenc.dtx}{applemac}} + \file{macce.def}{ + \from{inputenc.dtx}{applemacce}} + \file{next.def}{ + \from{inputenc.dtx}{next}} + \file{ansinew.def}{% synonym for cp1252 + \from{inputenc.dtx}{cp1252,ansinew}} + \file{cp1250.def}{ + \from{inputenc.dtx}{cp1250}} + \file{cp1252.def}{ + \from{inputenc.dtx}{cp1252}} + \file{cp1257.def}{ + \from{inputenc.dtx}{cp1257}} + } + +\Msg{*** Generating utf8 input encoding files ***} + +\generate{\file{utf8.def}{\from{utf8ienc.dtx}{utf8}} + \file{utf8-test.tex}{\from{utf8ienc.dtx}{test}} + \file{lcyenc.dfu}{\from{utf8ienc.dtx}{lcy}} + \file{ly1enc.dfu}{\from{utf8ienc.dtx}{ly1}} + \file{omsenc.dfu}{\from{utf8ienc.dtx}{oms}} + \file{ot1enc.dfu}{\from{utf8ienc.dtx}{ot1}} + \file{ot2enc.dfu}{\from{utf8ienc.dtx}{ot2}} + \file{t1enc.dfu}{\from{utf8ienc.dtx}{t1}} + \file{t2aenc.dfu}{\from{utf8ienc.dtx}{t2a}} + \file{t2benc.dfu}{\from{utf8ienc.dtx}{t2b}} + \file{t2cenc.dfu}{\from{utf8ienc.dtx}{t2c}} + \file{ts1enc.dfu}{\from{utf8ienc.dtx}{ts1}} + \file{x2enc.dfu}{\from{utf8ienc.dtx}{x2}} + \file{utf8enc.dfu}{\from{utf8ienc.dtx}{all}} + \file{utf8test.tex}{\from{utf8ienc.dtx}{test}} + } + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space *.def *.dfu *.sty } +\Msg{*} +\Msg{* To produce the documentation run inputenc.dtx and } +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} +} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/latex209.dtx b/Master/texmf-dist/source/latex/base/latex209.dtx new file mode 100644 index 00000000000..323a275dfa3 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/latex209.dtx @@ -0,0 +1,1147 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \title{Compatibility mode for \LaTeXe{} emulating \LaTeX~2.09} +% \author{Alan Jeffrey and Frank Mittelbach} +% \date{1995/12/27} +% +% \CheckSum{717} +% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \changes{v0.01}{1993/12/11}{Created the file, including: +% setting the compatibility flag, +% inputting oldlfont.sty, +% setting the default encoding to be OT1, and +% inputting the latex209.rc file} +% \changes{v0.02}{1993/12/12}{Changed the package filename to +% latex209.sty, and added the provides-package command.} +% \changes{v0.03}{1993/12/16}{Added an empty mark, replaced +% provides-package with provides-file, added the compatibility hook.} +% \changes{v0.04}{1993/12/16}{Moved oldlfont.sty out of the +% compatibility hook and back into latex209.cmp. Redefined +% newfontswitch to ignore redefinitions. Set the LaTeX 2e commands +% to be errors.} +% \changes{v0.05}{1993/12/17} +% {Removed the \cs{mark}, since it is now in the kernel.} +% \changes{v0.06}{1993/12/18}{Replaced the redefinition of +% \cs{@newfontswitch} to a redefinition of \cs{@renewfontswitch}. +% Added \cs{sloppy.}} +% \changes{v0.07}{1993/12/18}{Fixed a bug with \cs{@missingfileerror}.} +% \changes{v0.08}{1993/12/18}{Added the obsolete .sty files.} +% \changes{v0.09}{1993/12/20}{Removed art10.sty and friends.} +% \changes{v0.10}{1994/01/14}{Replaced latex209.rc by latex209.cfg.} +% \changes{v0.11}{1994/01/21}{Replaced latex209.cmp by latex209.def. +% Moved half of oldlfont.dtx to here. Split the package dst option +% into head and tail.} +% \changes{v0.12}{1994/01/24} +% {Added \cs{normalshape} and \cs{mediumseries}, and +% declared the `oldlfont' option to stop oldlfont.sty from being +% loaded.} +% \changes{v0.13}{1994/01/31}{removed setting of \cs{normalsize}. FMi} +% \changes{v0.14}{1994/02/07}{Added it back again.} +% \changes{v0.15}{1994/02/10}{Renamed \cs{@compatibility} to +% \cs{@documentclasshook}. Added the check for whether +% \cs{normalsize} or \cs{@normalsize} needs defined.} +% \changes{v0.16}{1994/02/11}{Replaced the allocation of temporary +% dimens for \cs{footheight}, \cs{@maxsep} and \cs{@dblmaxsep} +% by real dimen variables.} +% \changes{v0.17}{1994/03/02}{Moved the documentation to the front, so +% this file can be processed directly without a driver file. +% Added \cs{@ptscale}, \cs{@halfmag}, \cs{@magscale}, and set the +% default font to be CMR at 10pt.} +% \changes{v0.18}{1994/03/11}{Restored the old definition of \cs{verb}. +% Set the catcodes of the non-alphanumerics.} +% \changes{v0.19}{1994/04/05}{Switched off more 2e features: \cs{lrbox}, +% \cs{width}, \cs{height}, \cs{depth} in box dimensions, and the new +% optional arguments to \cs{parbox}, \cs{minipage} and +% \cs{newcommand}. The code was provided by DPC. Fixed a misplaced +% </head!>. Made the \cs{ProvidesPackage} and \cs{ProvidesClass} +% warnings log messages. Removed \cs{filedate}.} +% \changes{v0.20}{1994/04/20} +% {Restored the 2.09 definition of \cs{@noligs}.} +% \changes{v0.21}{1994/04/24} +% {Restored the 2.09 definition of \cs{@lquote}.} +% \changes{v0.22}{1994/05/02}{Added \cs{@latex@e@command}.} +% \changes{v0.23}{1994/05/11}{Added bezier.sty.} +% \changes{v0.24}{1994/05/14}{Removed \cs{@@@} and switched the box +% commands back on, for use in packages.} +% \changes{v0.24}{1994/05/14}{Changed the 2e command error help.} +% \changes{v0.24}{1994/05/14}{Removed date from announcement of +% 2.09 mode.} +% \changes{v0.25}{1994/05/14}{Added the newlfont option, and rewrote the +% oldlfont option.} +% \changes{v0.26}{1994/05/15}{Added the margid and nomargid options.} +% \changes{v0.27}{1994/05/16}{Fixed a bug with the margid option.} +% \changes{v0.28}{1994/05/16}{Fixed a bug with \cs{mediumseries}.} +% \changes{v0.29}{1994/05/17}{Fixed a bug with \cs{newlfont}.} +% \changes{v0.29}{1994/05/17}{Removed extra spaces from the missing +% file error.} +% \changes{v0.29}{1994/05/17}{Made the bezier package use \cs{iffalse} +% to comment itself out, rather than \%\%, which caused it to +% appear in every 2.09 file.} +% \changes{v0.30}{1994/05/18}{Added \cs{@finalstrut}.} +% \changes{v0.31}{1994/05/20}{New definition of \cs{@finalstrut}.} +% \changes{v0.31}{1994/05/20}{Added the t1enc package.} +% \changes{v0.32}{1994/05/20}{Added SLiTeX.} +% \changes{v0.33}{1994/06/01}{Fixed bug with SLiTeX.} +% \changes{v0.34}{1994/08/22}{Replaced l2euser by usrguide.} +% \changes{v0.34}{1994/08/22}{Added a default definition for \cs{+}.} +% \changes{v0.35}{1994/09/23} +% {Added spaces to the old font scale commands.} +% \changes{v0.36}{1994/10/17}{Added an empty \cs{mark} back again.} +% \changes{v0.37}{1994/10/20}{Corrected a typo.} +% \changes{v0.38}{1994/11/16}{Removed \cs{LaTeXe} from this list} +% \changes{v0.39}{1994/11/28}{Added old behaviour of floats and space.} +% \changes{v0.40}{1995/05/05}{Make \cs{verb} use \cs{tt} font in +% math mode.} +% \changes{v0.49}{1995/10/26}{Added code for fleqn.sty, leqno.sty, +% openbib.sty.} +% \changes{v0.50}{1995/12/08}{Switched of \cs{@inmathwarn}.} +% +% \maketitle +% +% \section{Introduction} +% +% The file |latex209.def| is read in by \LaTeXe{} whenever it finds a +% |\documentstyle| rather than |\documentclass| command at the +% beginning of the file. This indicates a \LaTeX~2.09 document, which +% should be processed in {\em compatibility mode}. +% +% Any document which compiled under \LaTeX~2.09 should compile under +% compatibility mode, unless it uses low-level commands such as +% |\tenrm|. +% +% \section{The docstrip modules} +% +% The following modules are used in the implementation to direct +% docstrip in generating the external files: +% \begin{center} +% \begin{tabular}{ll} +% driver & produce a documentation driver file \\ +% head & produce the beginning of |latex209.def| \\ +% tail & produce the end of |latex209.def| \\ +% article & produce |article.sty| \\ +% book & produce |book.sty| \\ +% report & produce |report.sty| \\ +% slides & produce |slides.sty| \\ +% letter & produce |letter.sty| \\ +% bezier & produce |bezier.sty| \\ +% fleqn & produce |fleqn.sty| \\ +% leqno & produce |leqno.sty| \\ +% openbib & produce |openbib.sty| +% \end{tabular} +% \end{center} +% Between the |head| and |tail| of |latex209.def|, the code for +% |oldlfont.sty| is included, so \LaTeX~2.09 documents will +% automatically be run simulating the OFSS. +% \changes{v0.09}{1993/12/20}{Removed artN.sty, bkN.sty and repN.sty.} +% \changes{v0.11}{1994/01/21}{Split package into head and tail.} +% \changes{v0.23}{1994/05/11}{Added bezier option.} +% +% \StopEventually{} +% +% \section{Driver} +% +% This section contains the driver for this documentation. +% \begin{macrocode} +%<*driver> +\documentclass{ltxdoc} +\DisableCrossrefs +% \OnlyDescription +\begin{document} + \DocInput{latex209.dtx} +\end{document} +%</driver> +% \end{macrocode} +% +% \section{Beginning of latex209.def} +% +% \changes{v0.11}{1994/01/21}{oldlfont.dtx is now also used to generate +% latex209.dtx.} +% +% This section describes the beginning of the file |latex209.def|. +% \begin{macrocode} +%<*head> +% \end{macrocode} +% +% \subsection{Identification} +% +% This file needs to be run with \LaTeXe. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +% \end{macrocode} +% Describe the file. +% \begin{macrocode} +\ProvidesFile{latex209.def}[1998/05/13 v0.52 Standard LaTeX file] +% \end{macrocode} +% \changes{v0.24}{1994/05/14}{Removed date.} +% \changes{v0.40}{1995/03/21} +% {(DPC) Do not execute this file twice latex/1460} +% Announce compatibility mode to the user. +% \changes{v0.52}{1998/05/13}{Added experimental +% long typeout to possibly avoid prs like 2807} +% \begin{macrocode} +\if@compatibility + \expandafter\endinput +\else + \typeout{^^J\space +\@spaces\@spaces\space Entering LaTeX 2.09 COMPATIBILITY MODE^^J\space + *************************************************************^^J\space + \space\space\space!!WARNING!!\space + \space\space\space!!WARNING!!\space + \space\space\space!!WARNING!!\space + \space\space\space!!WARNING!!\space\space\space ^^J\space + ^^J\space + This mode attempts to provide an emulation of the LaTeX 2.09^^J\space + author environment so that OLD documents can be successfully^^J\space + processed. It should NOT be used for NEW documents!^^J\space + ^^J\space + New documents should use Standard LaTeX conventions and start^^J\space + with the \string\documentclass\space command.^^J\space + ^^J\space + Compatibility mode is UNLIKELY TO WORK with LaTeX 2.09 style^^J\space + files that change any internal macros, especially not with^^J\space + those that change the FONT SELECTION or OUTPUT ROUTINES.^^J\space +^^J\space + Therefore such style files MUST BE UPDATED to use^^J\space +\@spaces\@spaces\space Current Standard LaTeX: LaTeX2e.^^J\space + If you suspect that you may be using such a style file, which^^J\space + is probably very, very old by now, then you should attempt to^^J\space + get it updated by sending a copy of this error message to the^^J\space + author of that file.^^J\space + *************************************************************^^J} + \fi +% \end{macrocode} +% +% \subsection{Compatibility flag} +% +% \begin{macro}{\@compatibilitytrue} +% \LaTeXe{} has a flag |\if@compatibility| which can be used by +% document classes or packages to determine whether they are running +% in compatibility mode or not. This flag is set true by this file. +% \begin{macrocode} +\@compatibilitytrue +% \end{macrocode} +% \end{macro} +% +% \subsection{Removing features} +% +% \changes{v0.22}{1994/05/02}{Added \cs{latex@e@command}.} +% \changes{v0.36}{1994/10/17}{Redid switching off commands.} +% \changes{v0.38}{1994/11/16}{Removed \cs{LaTeXe} from this list} +% +% \begin{macro}{\usepackage} +% \begin{macro}{\listfiles} +% \begin{macro}{\ensuremath} +% \begin{macro}{\lrbox} +% \begin{macro}{\newcommand} +% These \LaTeXe{} commands are switched off in compatibility mode. +% This is done by saving the old definition, and redefining the +% command to call |\@latex@e@error| before executing the old version. +% \begin{macrocode} +\def\@tempa#1#2{% + \expandafter\let\csname @@\string#1\endcsname#1% + \edef#1{% + \noexpand\@latex@e@error{\noexpand#2}% + \expandafter\noexpand\csname @@\string#1\endcsname + }% +} +\@tempa\usepackage\usepackage +\@tempa\listfiles\listfiles +\@tempa\ensuremath\ensuremath +\@tempa\lrbox{\begin{lrbox}}% +\@tempa\@xargdef{\newcommand{cmd}[args][def]}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \changes{v0.22}{1994/05/02} +% {Added \cs{if@latex@e@errors} and \cs{@@@}.} +% \changes{v0.24} +% {1994/05/14}{Removed \cs{if@latex@e@errors} and \cs{@@@}.} +% \changes{v0.24}{1994/05/14}{Changed the error help.} +% \changes{v0.36}{1994/10/17}{Initialized \cs{@latex@e@error} to do +% nothing, and switched it on at the begin document.} +% +% \begin{macro}{\@latex@e@error} +% \begin{macro}{\@latex@e@error@} +% This error is produced if a user uses a \LaTeXe{} command in +% compatibility mode. This is to encourage users to move over to +% using |\documentclass| as quickly as possible. During the preamble +% the error does nothing (so that packages can use \LaTeXe{} commands) +% but it is redefined to be an error message at |\begin{document}|. +% \begin{macrocode} +\let\@latex@e@error\@gobble +\def\@latex@e@error@#1{% + \@latexerr{% + LaTeX2e command \string#1\space in LaTeX 2.09 document% + }{% + This is a LaTeX 2.09 document, but it contains + \string#1.^^J% + If you want to use the new features of LaTeX2e, + your document^^J% + should begin with \string\documentclass\space + rather than \string\documentstyle + }% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \changes{v0.36}{1994/10/17} +% {Allow 2e commands to be redefined once with \cs{newcommand}.} +% \changes{v0.40}{1995/03/21}{ +% (DPC) Add \cs{r} to the list of 2e commands latex/1424} +% +% \begin{macro}{\@ifdefinable} +% \begin{macro}{\@old@ifdefinable} +% \begin{macro}{\@@ifdefinable} +% \begin{macro}{\@latex@e@commands} +% We trap the |\@notdefinable| error message to check to see if the +% command is a \LaTeXe{} command, in which case we allow the +% definition to happen. We keep a list of commands which are +% allowed to be redefined this way in |\@latex@e@commands|, and +% remove an entry each time it is defined. +% \begin{macrocode} +\let\@old@ifdefinable\@ifdefinable +\long\def\@ifdefinable#1{% + \def\@tempa##1#1##2#1##3#1##4\@tempa{% + \def\@latex@e@commands{##1##2}% + ##3% ##3 will either be \iftrue or \iffalse + \expandafter\@firstofone + \else + \expandafter\@old@ifdefinable\expandafter#1% + \fi + }% + \expandafter\@tempa\@latex@e@commands#1\iftrue#1\iffalse#1\@tempa% +} +\let\@@ifdefinable\@ifdefinable +\def\@latex@e@commands{% + \usepackage\listfiles\ensuremath\LaTeXe\lrbox + \th\dh\ng\dj\TH\DH\NG\DJ\k\r\SS + \guillemotleft\guillemotright\guilsinglleft + \guilsinglright\quotedblbase\quotesinglbase +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@begin@tempboxa} +% \changes{v0.22}{1994/05/02}{Commented out the redefinition of +% \cs{@begin@tempboxa}.} +% If we were to switch off the new |\width|, |\height| and |\depth| +% commands, this is how to do it. This isn't done, since these +% commands may be used in packages. +% \begin{verbatim} +%\long\def\@begin@tempboxa#1#2{% +% \begingroup +% \setbox\@tempboxa#1{{#2}}} +% \end{verbatim} +% \end{macro} +% +% \subsection{Document class hook} +% +% \begin{macro}{\@documentclasshook} +% \changes{v0.15}{1994/02/10}{Renamed from \cs{@compatibility} to +% \cs{@documentclasshook}. Added the check for \cs{@normalsize} and +% \cs{normalsize} being defined.} +% \changes{v0.22}{1994/05/02}{Moved switching off commands into the +% document class hook.} +% \changes{v0.24}{1994/05/14}{Switched the box commands back on, for use +% in packages.} +% \changes{v0.36}{1994/10/17}{Changed the way the 2e command error is +% activated.} +% \changes{v0.51}{1996/05/24}{(DPC) Reimplemented for /2153.} +% This macro is called by each use of |\documentclass|. We define +% it to define |\@normalsize| and |\normalsize| if necessary, +% to input each unused option as a package, and to switch off the new +% \LaTeXe{} commands. However, we leave on the commands +% |\settoheight|, |\settowidth| and the new options to |\parbox| and +% |\minipage|, since these are likely to be used in packages. +% +% The intention of the strange |\normalsize| tests below is that after +% the |\documentstyle| command has completed, if neither |\normalsize| +% nor |\@normalsize| was defined by the main style or one of its +% `substyles' or `options', then |\@normalsize| will be undefined and +% |\normalsize| will generate an error saying it hasn't been defined. +% +% If the style defined either |\normalsize| or \@|normalsize| then +% these two commands will be |\let| equal to each other, with the +% definition given by the style file. +% +% If the style defines both |\normalsize| and |\@normalsize| then +% those two definitions are kept. +% \begin{macrocode} +\def\@documentclasshook{% + \RequirePackage\@unusedoptionlist + \let\@unusedoptionlist\@empty + \def\@tempa{\@normalsize}% + \ifx\normalsize\@tempa + \let\normalsize\@normalsize + \fi + \ifx\@normalsize\@undefined + \let\@normalsize\normalsize + \fi + \ifx\normalsize\@undefined + \let\normalsize\original@normalsize + \fi + \let\@latex@e@error\@latex@e@error@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\original@normalsize} +% \changes{v0.51}{1996/05/24}{(DPC) Macro added /2153.} +% Save the original definition of |\normalsize| (which generates an +% error) +% \begin{macrocode} +\let\original@normalsize\normalsize +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\normalsize} +% \changes{v0.14}{1994/02/07}{Added \cs{normalsize}.} +% Some styles don't define |\normalsize|, just |\@normalsize|. +% \begin{macrocode} +\def\normalsize{\@normalsize} +% \end{macrocode} +% \end{macro} +% +% \subsection{Compatibility with \LaTeX~2.09 document styles} +% +% \begin{macro}{\@missingfileerror} +% If a |.cls| file is missing, we look to see if there is +% a file of the same name with a |.sty| extension. +% \changes{v0.06}{1993/12/18}{Corrected a typo +% \cs{@saved@missingfileerror} +% should have been \cs{saved@missingfileerror}.} +% \changes{v0.07}{1993/12/18}{Corrected a typo, I'd forgotten to pass +% the arguments of \cs{@missingfileerror} on to +% \cs{saved@missingfileerror}.} +% \changes{v0.29}{1994/05/17}{Removed extraneous spaces.} +% \begin{macrocode} +\@ifundefined{saved@missingfileerror}{ + \let\saved@missingfileerror=\@missingfileerror +}{} +\def\@missingfileerror#1#2{% + \ifx#2\@clsextension + \InputIfFileExists{#1.\@pkgextension}{% + \wlog{Compatibility mode: loading #1.\@pkgextension + \space rather than #1.#2.}% + }{% + \saved@missingfileerror{#1}{#2}% + }% + \else + \saved@missingfileerror{#1}{#2}% + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@obsoletefile} +% For compatibility with the document styles which |\input| the +% standard \LaTeX~2.09 document styles, we distribute +% files called |article.sty|, |book.sty|, |report.sty|, +% |slides.sty| and |letter.sty|. These use the command +% |\@obsoletefile|, which the \LaTeXe{} kernel defines to produce a +% warning message. We redefine it to just produce a message in the +% log file, and to pass any options from the old filename to the +% new filename. +% \changes{v0.08}{1993/12/19}{Added this command.} +% \changes{v0.10}{1994/01/14}{Added the option-passing.} +% \begin{macrocode} +\def\@obsoletefile#1#2{% + \expandafter\let\csname opt@#1\expandafter\endcsname + \csname opt@\@currname.\@currext\endcsname + \wlog{Compatibility mode: inputting `#1' + instead of obsolete `#2'.}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\footheight} +% \begin{macro}{\@maxsep} +% \begin{macro}{\@dblmaxsep} +% \LaTeX~2.09 supported these parameters, so for compatibility with +% old document styles we allocate them. +% \changes{v0.16}{1994/02/11}{Replaced the allocation of temporary +% dimens for \cs{footheight}, \cs{@maxsep} and \cs{@dblmaxsep} by +% real dimen variables.} +% \begin{macrocode} +\newdimen\footheight +\newdimen\@maxsep +\newdimen\@dblmaxsep +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \changes{v0.36}{1994/10/17}{Added an empty \cs{mark}.} +% \changes{v0.37} +% {1994/10/20}{Corrected a type with the empty \cs{mark}.} +% +% \begin{macro}{\mark} +% \LaTeX~2.09 initialized an empty mark. Who knows, someone may have +% relied on it: +% \begin{macrocode} +\mark{{}{}} +% \end{macrocode} +% \end{macro} +% +% \subsection{Layout} +% +% \begin{macro}{\sloppy} +% \changes{v0.06}{1993/12/18}{Added \cs{sloppy}} +% There is a new version of |\sloppy| in \LaTeXe, so we restore the +% old one. +% \begin{macrocode} +\def\sloppy{\tolerance \@M \hfuzz .5\p@ \vfuzz .5\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@finalstrut} +% \changes{v0.30}{1994/05/18}{Added \cs{@finalstrut}.} +% \changes{v0.31}{1994/05/20}{New definition of \cs{@finalstrut}.} +% The strut which is used in a footnote has changed. This restores +% the old definition. +% \begin{macrocode} +\def\@finalstrut#1{\unskip\strut} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@marginparreset} +% \begin{macro}{\@floatboxreset} +% \changes{v0.39}{1994/11/28}{Added old behaviour of floats and space.} +% \changes{v0.45}{1995/05/25}{(CAR) Changed method of restoring +% old behaviour of floats and space.} +% Restore the old spacing around floats. +% \begin{macrocode} +\let \@marginparreset \@empty +\let \@floatboxreset \@empty +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\proclaim} +% \changes{v0.41}{1995/04/24} +% {Move here from ltplain.dtx} +% From plain \TeX. +% \begin{macrocode} +\outer\def\proclaim #1. #2\par{% + \medbreak + \noindent{\bfseries#1.\enspace}{\slshape#2\par}% + \ifdim\lastskip<\medskipamount + \removelastskip\penalty55\medskip + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hang} +% \begin{macro}{\textindent} +% \changes{v0.42}{1995/04/27} +% {Move here from ltplain.dtx} +% From plain \TeX. +% \begin{macrocode} +\def\hang{\hangindent\parindent} +\def\textindent#1{\indent\llap{#1\enspace}\ignorespaces} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\ttraggedright} +% \changes{v0.41}{1995/04/24} +% {Move here from ltplain.dtx} +% \begin{macrocode} +\def\ttraggedright{\reset@font\ttfamily\rightskip\z@ plus2em\relax} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@footnotemark} +% \changes{v0.43}{1995/05/12} +% {macro added} +% \LaTeXe\ version has |\nobreak| to allow hyphenation. +% \begin{macrocode} +\def\@footnotemark{% + \leavevmode + \ifhmode\edef\@x@sf{\the\spacefactor}\fi + \@makefnmark + \ifhmode\spacefactor\@x@sf\fi + \relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@textsuperscript} +% \changes{v0.48}{1995/07/07} +% {macro added for latex/1722} +% Fudge this command to remove the text font command which +% is always the first thing in the argument. This is needed +% as in compatibility mode footnotes are processed in math mode, +% but the standard classes call |\@textsuperscript| in the definition +% of |\thanks|. +% \begin{macrocode} +\def\@textsuperscript#1{$\m@th^{\@gobble#1}$} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\@makefnmark} +% \changes{v0.44}{1995/05/20}{macro added} +% \LaTeXe\ version uses |\textsuperscript| rather than +% math mode. +% \begin{macrocode} +\def\@makefnmark{\hbox{$^{\@thefnmark}\m@th$}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\thempfootnote} +% \changes{v0.44}{1995/05/20}{macro added} +% \LaTeXe\ version has an additional |\itshape| which would not +% work (and would not make sense) in math mode. +% \begin{macrocode} +\def\thempfootnote{\@alph\c@mpfootnote} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@fnsymbol} +% \changes{v0.46}{1995/06/30}{macro added} +% \LaTeX\ version uses |\ensuremath| which does not work in +% compatibility mode. +% \begin{macrocode} +\def\@fnsymbol#1{\ifcase#1\or *\or \dagger\or \ddagger\or + \mathchar "278\or \mathchar "27B\or \|\or **\or \dagger\dagger + \or \ddagger\ddagger \else\@ctrerr\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@inmathwarn} +% \changes{v0.50}{1995/12/08}{Switched off \cs{@inmathwarn}} +% \LaTeX\ (1995/12/01) checks for text commands being used in math +% mode. We switch this off in compatibility mode. +% \begin{macrocode} +\let\@inmathwarn\@gobble +% \end{macrocode} +% \end{macro} +% +% \subsection{Verbatim} +% +% \changes{v0.18}{1994/03/11}{Added the changes to \cs{verb}} +% \changes{v0.40}{1995/05/05}{Make \cs{verb} use \cs{tt} font in +% math mode.} +% \begin{macro}{\verb} +% \begin{macro}{\@sverb} +% We restore the old definition of |\verb|, but using +% |\verbatim@font| rather than |\tt|. The use of |\bgroup| and +% |\egroup| allows us to prefix it with |\hbox| in math mode. +% \begin{macrocode} +\def\verb{% + \relax\ifmmode\hbox\fi\bgroup + \@noligs + \verbatim@font + \let\do\@makeother \dospecials + \@ifstar{\@sverb}{\@verb}% +} +\def\@sverb#1{% + \def\@tempa ##1#1{\leavevmode\null##1\egroup}% + \@tempa +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\verbatim@nolig@list} +% \changes{v0.20}{1994/04/20}{Added the redefinition of +% \cs{verbatim@nolig@list}.} +% The only ligatures which should be switched off in 2.09 mode are +% the Spanish punctuation. +% \begin{macrocode} +\def\verbatim@nolig@list{\do\`} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@lquote} +% \changes{v0.21}{1994/04/24}{Added the definition of \cs{@lquote}.} +% We restore the old definition of |\@lquote| in case any packages +% use it. +% \begin{macrocode} +\def\@lquote{\leavevmode{\kern\z@}`} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Character codes} +% +% \changes{v0.18}{1994/03/11}{Added the catcode changes} +% +% By default, \LaTeXe{} makes the input charactes 0--8, 11, 14--31 and +% 128--255 illegal. In compatibility mode, we restore their old +% meanings. +% \begin{macrocode} +\catcode0=9 +\@tempcnta=1 +\loop\ifnum\@tempcnta<32 + \catcode\@tempcnta=12 + \advance\@tempcnta by 1 +\repeat% +\catcode`\^^I=10\relax% +\catcode`\^^L=13\relax% +\catcode`\^^M=5\relax% +\catcode127=15 +\@tempcnta=128 +\loop\ifnum\@tempcnta<256 + \catcode\@tempcnta=12 + \advance\@tempcnta by 1 +\repeat +% \end{macrocode} +% +% \subsection{Miscellaneous commands} +% +% \begin{macro}{\SLiTeX} +% The \textsc{Sli\TeX} logo. +% \begin{macrocode} +\DeclareRobustCommand{\SLiTeX}{{% + \normalfont S\kern -.06em + {\scshape l\kern -.035emi}\kern -.06em + \TeX}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\+} +% The |\+| command should be defined, so that it can be used in +% |\renewcommand|. +% \begin{macrocode} +\let\+\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@cla} +% \begin{macro}{\@clb} +% \changes{v0.47}{1995/09/25} +% {(DPC) Declare old \cs{cline} registers} +% \begin{macro}{\mscount} +% \LaTeX2.09 (and early versions of \LaTeXe) used these count registers +% in the definition of |\cline| and |\multispan|. +% Declare them here in case they were used for any other purposes. +% \begin{macrocode} +\newcount\@cla +\newcount\@clb +\newcount\mscount +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@imakepicbox} +% \changes{v0.48}{1995/10/16} +% {(DPC) emulate old behaviour of picture mode makebox} +% picture mode version +% \begin{macrocode} +\long\def\@imakepicbox(#1,#2)[#3]#4{% + \vbox to#2\unitlength + {\let\mb@b\vss \let\mb@l\hss\let\mb@r\hss + \let\mb@t\vss + \@tfor\reserved@a :=#3\do{% + \if s\reserved@a + \let\mb@l\relax\let\mb@r\relax + \else + \expandafter\let\csname mb@\reserved@a\endcsname\relax + \fi}% + \mb@t + \hb@xt@ #1\unitlength{\mb@l #4\mb@r}% + \mb@b +% \end{macrocode} +% This kern ensures that a |b| option aligns on the bottom of the +% text rather than the baseline. this is the documented behaviour in +% the \LaTeX Book. The kern is removed in compatibility mode. +% +% Remove kern for bug compatibility with 2.09. +% \begin{macrocode} +% \kern\z@ + }} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\supereject} +% \begin{macrocode} +\def\supereject{\par\penalty-\@MM} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\nofiles} +% \changes{v0.51}{1996/05/24}{(DPC) Old definition, without \cs{write} +% added to \cs{protected@write}, for latex/2146} +% This old version might change the vertical spacing when it is used. +% Some old document might depend on that changed spacing so\ldots +% \begin{macrocode} +\def\nofiles{% + \@fileswfalse + \typeout{No auxiliary output files.^^J}% + \long\def\protected@write##1##2##3{}% + \let\makeindex\relax + \let\makeglossary\relax} +% \end{macrocode} +% \end{macro} +% +% \subsection{Packages and classes} +% +% \begin{macro}{\ProvidesPackage} +% \begin{macro}{\ProvidesClass} +% We redefine |\ProvidesPackage| and |\ProvidesClass| to produce a +% log message rather than a warning if they find an unexpected +% file. +% \begin{macrocode} +\def\ProvidesPackage#1{% + \xdef\@gtempa{#1}% + \ifx\@gtempa\@currname\else + \wlog{Compatibility mode: \@cls@pkg\space`\@currname' requested, + but `#1' provided.}% + \fi + \@ifnextchar[\@pr@videpackage{\@pr@videpackage[]}}%] +\let\ProvidesClass=\ProvidesPackage +% \end{macrocode} +% \end{macro} +% \end{macro} +% That ends the head of |latex209.def|. +% \begin{macrocode} +%</head> +% \end{macrocode} +% +% \section{Middle of latex209.def} +% +% At this point, the code for |oldlfont.sty| is read in by the +% installation script. +% +% \section{End of latex209.def} +% +% This section describes the end of |latex209.def|. +% \begin{macrocode} +%<*tail> +% \end{macrocode} +% +% \subsection{Font commands} +% +% \changes{v0.12}{1994/01/24}{Added the oldlfont option.} +% \changes{v0.25}{1994/05/14}{Added the newlfont option, rewrote the +% oldlfont option to change math grouping.} +% \changes{v0.26}{1994/05/15}{Added the margid and nomargid options.} +% \changes{v0.27}{1994/05/16}{Replaced \# by \#\# in margid.} +% \changes{v0.28}{1994/05/17}{Replaced \cs{input} newlfont.sty by +% \cs{OptionNotUsed} in \cs{ds@newlfont}.} +% +% \begin{macro}{\ds@oldlfont} +% \begin{macro}{\ds@newlfont} +% \begin{macro}{\ds@margid} +% \begin{macro}{\ds@nomargid} +% We declare |oldlfont|, |newlfont|, |margid| and |nomargid| +% options to mimic the \LaTeX~2.09 NFSS1 options. +% \begin{macrocode} +\def\ds@oldlfont{% + \@no@font@optfalse + \let\math@bgroup\@empty + \let\math@egroup\@empty + \let\@@math@bgroup\math@bgroup + \let\@@math@egroup\math@egroup +} +\def\ds@newlfont{% + \@no@font@optfalse + \OptionNotUsed +} +\def\ds@margid{% + \@no@font@optfalse + \let\math@bgroup\bgroup + \def\math@egroup##1{##1\egroup}% + \let \@@math@bgroup \math@bgroup + \let \@@math@egroup \math@egroup +} +\let\ds@nomargid\ds@oldlfont +\@onlypreamble\ds@oldfont +\@onlypreamble\ds@newfont +\@onlypreamble\ds@margid +\@onlypreamble\ds@nomargid +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\encodingdefault} +% The default encoding for old documents is OT1 rather than T1. +% \begin{macrocode} +\renewcommand{\encodingdefault}{OT1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\cmex/m/n/10} +% Just in case a document style relies on |\cmex/m/n/10| to exist +% (which may have been hard-wired to |\fam3|) we load the font. +% \begin{macrocode} +\expandafter\font\csname cmex/m/n/10\endcsname=cmex10 +% \end{macrocode} +% \end{macro} +% +% +% \changes{v0.12}{1994/01/24} +% {Added \cs{normalshape} and \cs{mediumseries}.} +% \changes{v0.28}{1994/05/16}{\cs{mediumseries} was using +% \cs{fontshape} rather than \cs{fontseries}.} +% +% \begin{macro}{\normalshape} +% \begin{macro}{\mediumseries} +% These commands were used in older versions of NFSS. +% \begin{macrocode} +\def\normalshape{\fontshape\shapedefault\selectfont} +\def\mediumseries{\fontseries\seriesdefault\selectfont} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\DeclareOldFontCommand} +% We redefine |\DeclareOldFontCommand| to do nothing. This means +% that any new document classes will have their redefinitions of +% |\rm|, |\bf| etc.~ignored. +% \changes{v0.06}{1993/12/18}{Replaced \cs{@newfontswitch} by +% \cs{@renewfontswitch}.} +% \changes{v0.11}{1994/01/21}{Removed \cs{RequirePackage}{oldlfont}.} +% \changes{v0.19}{1994/04/05}{Replaced \cs{@renewfontswitch} by +% \cs{DeclareOldFontCommand}.} +% \begin{macrocode} +\def \DeclareOldFontCommand #1#2#3{% + \wlog{Compatibility mode: definition + of \string#1\space ignored.}% +} +% \end{macrocode} +% \end{macro} +% +% \changes{v0.17} +% {1994/03/02}{Added \cs{@halfmag}, \cs{@magscale} and \cs{@ptscale}} +% \changes{v0.35} +% {1994/09/23}{Added spaces to the old font scale commands.} +% +% \begin{macro}{\@halfmag} +% \begin{macro}{\@magscale} +% \begin{macro}{\@ptscale} +% Some font-specifying commands from \LaTeX~2.09. +% \begin{macrocode} +\def\@halfmag{ scaled \magstephalf} +\def\@magscale#1{ scaled \magstep#1 } +\def\@ptscale#1{ scaled #100 } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\font} +% The current font is set to be CMR 10pt, to match \LaTeX~2.09. +% \begin{macrocode} +\fontencoding{OT1} \fontfamily{cmr} +\fontsize{10}{12} \fontseries{m} \fontshape{n} +\selectfont +% \end{macrocode} +% \end{macro} +% +% \changes{v0.11}{1994/01/21}{Added the rest of this subsection, which +% used to be in oldlfont.dtx.} +% +% \begin{macro}{\load} +% The |\load| command is no longer needed, it is therefore +% defined to do nothing. +% \begin{macrocode} +\let\load\@gobbletwo +% \end{macrocode} +% \end{macro} +% +% Here are three delimiters which have be partly disabled by +% NFSS2 (the small variants) since the corresponding fonts are +% normally not preloaded as math symbol fonts. +% \begin{macrocode} +\DeclareMathDelimiter{\lgroup} % extensible ( with sharper tips + {\mathopen}{bold}{"28}{largesymbols}{"3A} +\DeclareMathDelimiter{\rgroup} % extensible ) with sharper tips + {\mathclose}{bold}{"29}{largesymbols}{"3B} +\DeclareMathDelimiter{\bracevert} % the vertical bar that extends braces + {\mathord}{typewriter}{"7C}{largesymbols}{"3E} +% \end{macrocode} +% +% In old documents we might find some usages of |\bffam| etc. Thus +% we add the following code: +% \begin{macrocode} +\let\bffam\symbold +\let\sffam\symsans +\let\itfam\symitalic +\let\ttfam\symtypewriter +\let\scfam\symsmallcaps +\let\slfam\symslanted +\let\rmfam\symoperators +% \end{macrocode} +% +% Below are the |\..pt| commands with hopefully the same +% functionality as in the old \texttt{lfonts.tex}. Notice that the +% |\baselineskip| parameter wasn't set by these commands so that +% using them now shouldn't set this either. Thus we go low-level. +% This means that the commands are now fragile but I think they +% have been fragile before. +% \begin{macrocode} +\newcommand\vpt {\edef\f@size{\@vpt}\rm} +\newcommand\vipt {\edef\f@size{\@vipt}\rm} +\newcommand\viipt {\edef\f@size{\@viipt}\rm} +\newcommand\viiipt{\edef\f@size{\@viiipt}\rm} +\newcommand\ixpt {\edef\f@size{\@ixpt}\rm} +\newcommand\xpt {\edef\f@size{\@xpt}\rm} +\newcommand\xipt {\edef\f@size{\@xipt}\rm} +\newcommand\xiipt {\edef\f@size{\@xiipt}\rm} +\newcommand\xivpt {\edef\f@size{\@xivpt}\rm} +\newcommand\xviipt{\edef\f@size{\@xviipt}\rm} +\newcommand\xxpt {\edef\f@size{\@xxpt}\rm} +\newcommand\xxvpt {\edef\f@size{\@xxvpt}\rm} +% \end{macrocode} +% +% \subsection{User customization} +% +% For sites which customized their version of \LaTeX~2.09, we provide +% a file |latex209.cfg|, which is loaded every time we enter +% compatibility mode. If the file doesn't exist, we don't do +% anything. +% \begin{macrocode} +\InputIfFileExists{latex209.cfg}{}{} +% \end{macrocode} +% That ends the file |latex209.def|. +% \begin{macrocode} +%</tail> +% \end{macrocode} +% +% \section{Obsolete style files} +% +% \changes{v0.08}{1993/12/19}{Added this section.} +% \changes{v0.09}{1993/12/20}{Removed artN.sty, bkN.sty and repN.sty.} +% \changes{v0.23}{1994/05/11}{Added bezier.sty.} +% \changes{v0.31}{1994/05/20}{Added t1enc.sty.} +% +% For each of the standard \LaTeX~2.09 document styles, we produce a +% file which points to the appropriate \LaTeXe{} document class file. +% This means that any styles which say |\input article.sty| should +% still work. +% +% \begin{macrocode} +%<*article|book|report|letter|slides> +\NeedsTeXFormat{LaTeX2e} +%</article|book|report|letter|slides> +%<*article> +\@obsoletefile{article.cls}{article.sty} +\LoadClass{article} +%</article> +%<*book> +\@obsoletefile{book.cls}{book.sty} +\LoadClass{book} +%</book> +%<*report> +\@obsoletefile{report.cls}{report.sty} +\LoadClass{report} +%</report> +%<*letter> +\@obsoletefile{letter.cls}{letter.sty} +\LoadClass{letter} +%</letter> +%<*slides> +\@obsoletefile{slides.cls}{slides.sty} +\LoadClass{slides} +%</slides> +% \end{macrocode} +% We also produce empty |fleqn.sty| and |leqno.sty| files in case +% anyone has |\input| one of them. +% \begin{macrocode} +%<*fleqn> +\@obsoletefile{fleqn.clo}{fleqn.sty} +\input{fleqn.clo} +%</fleqn> +%<*leqno> +\@obsoletefile{leqno.clo}{leqno.sty} +\input{leqno.clo} +%</leqno> +% \end{macrocode} +% We also produce an empty |openbib.sty| in case anyone has |\input| +% |openbib.sty|. The |openbib| class option is now part of the kernel. +% \begin{macrocode} +%<*openbib> +\iffalse + +The openbib option is now part of LaTeX thus this package is no +longer necessary. It is only retained for upward compatibility. +See the 2nd edition of the LaTeX book, or the file usrguide.tex +which comes with the LaTeX distribution, for more details. + +\fi +%</openbib> +% \end{macrocode} +% We also produce an empty |bezier.sty| in case anyone has |\input| +% |bezier.sty|. The |\bezier| command is now part of the kernel. +% \begin{macrocode} +%<*bezier> +\iffalse + +The \bezier command is now part of LaTeX thus this package is no +longer necessary. It is only retained for upward compatibility. +Also, please note that LaTeX now offers an extended bezier command +which automatically calculates the number of points needed for the +plot. See the 2nd edition of the LaTeX book, or the file +usrguide.tex which comes with the LaTeX distribution, for more +details. + +\fi +%</bezier> +% \end{macrocode} +% We also produce a |t1enc| package, for compatibility with the +% Companion. This has been replaced by the |fontenc| package. +% \begin{macrocode} +%<*t1enc> +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{t1enc}[1994/06/01 Standard LaTeX package] +\renewcommand{\encodingdefault}{T1} +\fontencoding{T1}\selectfont +%</t1enc> +% \end{macrocode} +% \DeleteShortVerb{\|} +% \Finale +\endinput diff --git a/Master/texmf-dist/source/latex/base/latex209.ins b/Master/texmf-dist/source/latex/base/latex209.ins new file mode 100644 index 00000000000..74801ea7029 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/latex209.ins @@ -0,0 +1,121 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\Msg{*** Generating compatibility mode files ***} + +\generate{ + \usedir{tex/latex/base} + \file{latex209.def}{ + \from{latex209.dtx}{head} + \from{oldlfont.dtx}{latex209} + \from{latex209.dtx}{tail}} + \file{article.sty}{ + \from{latex209.dtx}{article}} + \file{book.sty}{ + \from{latex209.dtx}{book}} + \file{report.sty}{ + \from{latex209.dtx}{report}} + \file{letter.sty}{ + \from{latex209.dtx}{letter}} + \file{slides.sty}{ + \from{latex209.dtx}{slides}} + \file{fleqn.sty}{ + \from{latex209.dtx}{fleqn}} + \file{leqno.sty}{ + \from{latex209.dtx}{leqno}} + \file{openbib.sty}{ + \from{latex209.dtx}{openbib}} + \file{bezier.sty}{ + \from{latex209.dtx}{bezier}} + \file{t1enc.sty}{ + \from{latex209.dtx}{t1enc}} + } + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space latex209.def *.sty } +\Msg{*} +\Msg{* To produce the documentation run the files ending with} +\Msg{* `.drv' through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} +} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/latexbug.el b/Master/texmf-dist/source/latex/base/latexbug.el new file mode 100644 index 00000000000..492f0d18f67 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/latexbug.el @@ -0,0 +1,502 @@ +;;; latexbug.el +;;; +;;; Version 0: `test of concept' +;;; Don't look to closely at my lisp coding style... +;;; +;;; David Carlisle +;;; Version 0.1 1994/11/23 +;;; Version 0.2 1994/12/12 +;;; Version 0.3 1995/03/17 +;;; Version 0.4 1995/09/21 +;;; Version 0.5 1995/10/17 +;;; Version 0.6 1997/07/16 +;;; Version 0.7 1997/12/17 +;;; Version 0.8 1999/01/07 +;;; +;;; +;;; LOADING +;;;;;;;;;;; +;;; +;;; To use this code, place the file in a directory searched by lisp +;;; Add +;;; +;;; (autoload 'report-latex-bug "latexbug" +;;; "LaTeX bug report generator" t) +;;; +;;; to your .emacs file (without the ;;;). +;;; +;;; Then if the impossible happens and you discover a bug in LaTeX, +;;; or wish to suggest a change to LaTeX, type +;;; M-x report-latex-bug +;;; +;;; and follow the instructions. +;;; +;;; A file latexbug.cfg can be used to customise +;;; latexbug.tex as described in the comments in latexbug.tex. +;;; or you can customise in your .emacs, as shown below. +;;; +;;; CUSTOMISATION +;;;;;;;;;;;;;;;;;; +;;; +;;; The following variables may be set in your .emacs to customise this +;;; file. +;;; +;;; (setq ltxbug-name "David Carlisle") ; your name +;;; (setq ltxbug-address "dpc@,,,") ; your email address +;;; If these two are not set here, or in the latexbug.cfg +;;; file. emacs will prompt for the values. The prompt +;;; will suggest default values based on standard emacs variables +;;; user-full-name and user-mail-address. +;;; +;;; (setq ltxbug-mail-headers "...") ; additional mail headers. +;;; For example (setq ltxbug-mail-headers "FCC: ~/Mail/sent") +;;; To log outgoing mail in a `sent' file. +;;; +;;; (setq ltxbug-latex-command "...") ; latex command +;;; Set this if LaTeX is not called latex, eg it may be latex2e. +;;; +;;; +;;; Perhaps I should have based this on gnat's send-pr.el but it seemed +;;; easier to write it from scratch to work in latexbug.tex at the +;;; required points. +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(require 'sendmail) + +(defvar ltxbug-latex-command "latex" + "Command name for Standard LaTeX (LaTeX2e)") + +(defvar ltxbug-directory nil +"Directory in which to run LaTeX, should end with slash. +Default, nil, means inherit directory from current buffer.") + +(defvar user-full-name nil); just needed on ancient emacs +(defvar ltxbug-name nil +"Your name. +If this is nil, will be prompted if not set in latexbug.cfg.") + +(defvar user-mail-address nil); just needed on ancient emacs +(defvar ltxbug-address nil +"Your email-address. +If this is nil, will be prompted if not set in latexbug.cfg.") + +(defvar ltxbug-mail-headers "" +"Extra mail headers that will be added to the mail message. +This is in addition to `To' and `Subject'.") + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defvar ltxbug-categories +'(("latex") ("tools") ("graphics") + ("mfnfss") ("psnfss") ("amslatex") ("babel") ("expl3") ("cyrillic")) +"Valid GNATS categories") + + +(defun report-latex-bug () +"LaTeX bug report generator" + (interactive) +;; +;; Locally turn off transient mark mode. + (let ((transient-mark-mode nil) + (current-default-directory default-directory)) +;; +;; First produce one large window for the main message +;; and a smaller help window below. + (delete-other-windows) +;; (setq ltxbug-msg (switch-to-buffer "*latex-bugs*")); not emacs18 + (switch-to-buffer + (setq ltxbug-msg (get-buffer-create "*latex-bugs*"))) + (erase-buffer) + (setq default-directory + (or ltxbug-directory current-default-directory)) + (setq major-mode 'ltxbug) + (setq mode-name "LaTeX Bug Report") + (use-local-map ltxbug-map) + (message "Running latex on latexbug.tex ....") + (split-window-vertically +;; -13 ;; old emacs's can't do this + (- (window-height) 13)) + (switch-to-buffer-other-window + (setq ltxbug-help (get-buffer-create "latexbugs help"))) +;; +;; Initially fill the message buffer with the output from running +;; latexbug.tex. + (erase-buffer) +;; +;; Use shell-command not start-process here so shell variables are +;; initialised before calling LaTeX. +;; Hope that is enough \\ to keep all the different shells happy... +;; {} replaced by \\{\\} in version 0.4 (fix for latex/1675) +;; Use \@@input (v0.5) + (shell-command (concat + ltxbug-latex-command + " \\\\nonstopmode\\\\makeatletter\ + \\\\def\\\\batch\\{\\}\\\\@@input latexbug ") t) + (switch-to-buffer-other-window ltxbug-msg) + (goto-char (point-min)) +;; +;; Change header to mention this latexbug.el file. + (if (re-search-forward "!" (point-max) t) + (ltxbug-error) +;; else + (ltxbug-do-report)))) + + + +(defun ltxbug-do-report () + (erase-buffer) +;; +;; Grab the template produced by latexbug.tex + (insert-file "latexbug.msg") +;; +;; Change header to mention this latexbug.el file. + (goto-char (point-min)) + (re-search-forward "\\(by latexbug.\\)\\(tex\\)" (point-max) t) + (replace-match "\\1el") +;; +;; Grab email address into mail field. + (re-search-forward "Re.*email to \\(.*\\)[^Z]*=$" (point-max) t) +;; +;; Put the synopsis template into the Subject field. +;; Add the delimiter used by the mail-send function. + (goto-char (point-min)) + (let ((temp + (concat "To: " + (buffer-substring (match-beginning 1) (match-end 1)) " +Subject: < SYNOPSIS > +" + ltxbug-mail-headers + (if (not (equal "" ltxbug-mail-headers)) " +") + "--text follows this line-- +" ))) +;; +;; Remove the rest of the banner from latexbug.tex + (goto-char (point-min)) + (delete-region (match-beginning 0) (match-end 0)) +;; +;; insert the mail headers + (insert temp)) +;; +;; +;; Get the required category using minibuffer completion. + (set-buffer ltxbug-help) + (erase-buffer) + (insert " +Several categories of files are supported, +corresponding to directories in the standard LaTeX distribution: + + latex: The `base' format, and standard classes only (base). + tools: Packages supported by the LaTeX3 project team (tools). + graphics: The color and graphics packages (graphics). + mfnfss: Packages for using some MetaFont fonts (mfnfss). + psnfss: Packages for using PostScript fonts LaTeX (psnfss). + amslatex: AMS supported Classes and Packages (amsfonts and amslatex). + babel: Packages supporting many different languages (babel). + expl3: Experimental packages for TeX programmers (expl3). + cyrillic: Packages for using Cyrillic fonts (cyrillic). +") + (let* ((completion-ignore-case t) + (cat (completing-read "Which Category ? " + ltxbug-categories nil t ))) + (set-buffer "*latex-bugs*") + (ltxbug-replace "< CATEGORY >" (if (equal cat "") "latex" cat))) +;; +;; Get the synopsis, make sure it is non empty, and not too long. + (set-buffer ltxbug-help) + (erase-buffer) + (insert " + Please enter a One line Synopsis of the report. + This should be < 50 characters. + + This text will be used as the mail header on all + subsequent correspondence. Please use informative strings. + For example: \\mathit generates error in foobar environmenent + rather than just `LaTeX Bug' or similar strings. +") + (set-buffer ltxbug-msg) + (let ((syn (read-from-minibuffer "Synopsis ? " ))) + (while (or (equal syn "") (> (length syn) 50)) + (setq syn + (read-from-minibuffer "Synopsis (0 < length < 50) ? " syn))) + (set-buffer "*latex-bugs*") + (ltxbug-replace "< SYNOPSIS >" syn)) +;; +;; If latexbug.cfg has not already defined the name +;; grab it from minibuffer + (goto-char (point-min)) + (if (re-search-forward "< ENTER YOUR NAME >" (point-max) t) + (if ltxbug-name + (ltxbug-replace "< ENTER YOUR NAME >" ltxbug-name) +;; else + (set-buffer ltxbug-help) + (erase-buffer) + (insert " + Please enter Your Name +") + (set-buffer ltxbug-msg) + (let ((temp (read-from-minibuffer "Your Name ? " user-full-name))) + (set-buffer "*latex-bugs*") + (ltxbug-replace "< ENTER YOUR NAME >" temp)))) +;; +;; If latexbug.cfg has not already defined the email address +;; grab it from minibuffer + (goto-char (point-min)) + (if (re-search-forward "< ENTER YOUR EMAIL ADDRESS >" (point-max) t) + (if ltxbug-address + (ltxbug-replace "< ENTER YOUR EMAIL ADDRESS >" ltxbug-address) +;; else + (set-buffer ltxbug-help) + (erase-buffer) + (insert " + Please enter Your email address. +") + (set-buffer ltxbug-msg) + (let ((temp (read-from-minibuffer "Your email address ? " + user-mail-address))) + (set-buffer "*latex-bugs*") + (ltxbug-replace "< ENTER YOUR EMAIL ADDRESS >" temp)))) +;; +;; Grab file name. +;; If this is empty, suggest changing the >Class + (set-buffer ltxbug-help) + (erase-buffer) + (insert " +A bug report should be accompanied by a test file +and a the log that the test generates. + +If a test file is not appropriate for this report +Just hit <return> + +Otherwise please specify the file to include. +") + (set-buffer ltxbug-msg) + (let ((temp (read-file-name "Test file ? " nil "" t))) + (if (equal temp "") + (progn + (ltxbug-update-field + "Class" + '(("sw-bug")("doc-bug")("change-request")) + " +You have not offered a test file. + +Perhaps that this is not a bug report. +The default class for messages is sw-bug. + +Possible classes of messages are: + sw-bug: Message reporting a Bug in the software. + doc-bug: Message reporting an error in the documentation. + change-request: Message requesting a change to some LaTeX feature.") + (re-search-forward ">How-to-repeat") + (delete-region (match-beginning 0) (point-max))) +;; else + (set-buffer ltxbug-msg) + (ltxbug-replace " < TEST FILE HERE " "") + (insert-file temp) + (let ((lines 0)) + (while (re-search-forward "\n" (mark) t) + (setq lines (+ lines 1))) + (if (> lines 60) + (progn + (set-buffer ltxbug-help) + (erase-buffer) + (insert +(format "%s%d%s" " +!!!! +Your test file is " lines " lines long!!! + +Test files should be as short as possible, while still showing +the behaviour. Please try to keep the file below 60 lines. +")) + (set-buffer ltxbug-msg)))) + (let* ((log1 + (concat + (substring temp 0 (string-match "\\.[^\\.]*$" temp)) + ".log")) + (log (read-file-name "Log file ? " "" log1 t log1))) + (if (equal log "") + (message "WHY NO LOG ???") + (ltxbug-replace " < LOG FROM TEST FILE HERE >" "") + (insert-file log))))) +;; +;; Prompt for the message text. + (set-buffer ltxbug-help) + (erase-buffer) + (insert " +Complete your bug report by giving the full descripition +below the `Description of bug:' header. + +There are other database fields you may wish to add, +type C-c C-f to change or add an additional field. + +Once the report is complete, type C-c C-c to send the message. + +A saved copy of the report will be in the file +latexbug.msg. +") + (switch-to-buffer ltxbug-msg) + (ltxbug-replace " < ENTER BUG REPORT HERE >" "") + (auto-fill-mode 1) + (setq fill-column 72)) + + +(defun ltxbug-error () + (set-buffer ltxbug-help) + (erase-buffer) + (insert " +LaTeX did not succesfully produce a bug report template.")) + +(defun ltxbug-save-and-send () + (interactive) + (write-file "latexbug.msg") + (mail-send-and-exit nil)) + + +(defun ltxbug-replace (a b) + "Replace the regexp a by the string b everywhere in the current buffer" + (goto-char (point-min)) + (while (re-search-forward a (point-max) t) + (replace-match b t t))) + +(defvar ltxbug-map (make-sparse-keymap) + "Local keymap used in LaTeX bug buffer.") + +(define-key ltxbug-map "\C-c\C-c" 'ltxbug-save-and-send) +(define-key ltxbug-map "\C-c\C-f" 'ltxbug-oneline-field) + + +(defun ltxbug-update-field (field values help) +"Update FIELD using completion list VALUES and help text HELP. + First entry in VALUES is the default." + (interactive) + (set-buffer ltxbug-help) + (erase-buffer) + (insert help) + (goto-char (point-min)) + (set-buffer ltxbug-msg) + (goto-char (point-min)) + (let ((temp "")) + (if (re-search-forward + (concat"\n>" field ":\\( *\\)\\(.*\\)$") (point-max) t) +;; if field already there + (progn + (setq temp (buffer-substring (match-beginning 2) (match-end 2))) + (delete-region (match-beginning 1) (match-end 2))) +;; else + (re-search-forward ">Category:.*$") + (insert (concat "\n>" field ":"))) + (insert " ") + (let ((temp2 + (completing-read (concat field " ? ") values nil t temp))) + (insert (if (equal temp2 "") + (car(car values)) temp2))))) + + +(defun ltxbug-responsible () + (interactive) + (ltxbug-update-field + "Responsible" +;; Alphabetical order, which makes Alan the default... + '(("alan")("chris")("david")("frank")("johannes") + ("michael")("rainer")) +" + You may set the >Responsible field to a particular person. + **Do not do this unless you have very good reason.** + We may not appreciate having jobs allocated to us in this way:-) + The possible values are: + alan (Alan Jeffrey) + chris (Chris Rowley) + david (David Carlisle) + frank (Frank Mittelbach) + johannes (Johannes Braams) + michael (Michael Downes) + rainer (Rainer Schoepf) +")) + +(defun ltxbug-confidential () + (interactive) + (ltxbug-update-field + "Confidential" + '(("no")("yes")) +" + You may set the >Confidential field to yes. + + The report database is publicly searchable. + See bugs.txt for details. + Reports marked Confidential will not be made public. + Possible values: + no The default. Report may be made public. + yes Report should only be seen by LaTeX maintainers. +")) + + +(defun ltxbug-priority () + (interactive) + (ltxbug-update-field + "Priority" + '(("low")("medium")("high")) +" + Change the priority of the report from `high' + Possible values: + low + medium + high +")) + +(defun ltxbug-severity () + (interactive) + (ltxbug-update-field + "Severity" + '(("non-critical")("serious")("critical")) +" + Classify the severity of the problem.' + Possible values: + non-critical + serious + critical +")) + +(defun ltxbug-class () + (interactive) + (ltxbug-update-field + "Class" + '(("sw-bug")("doc-bug")("change-request")) +" + Classify the type of report. + Possible values: + sw-bug: Message reporting a bug in the software. + doc-bug: Message reporting an error in the documentation. + change-request: Message requesting a change to some LaTeX feature. +")) + +(defun ltxbug-window-setup () + (interactive) + (delete-other-windows) + (split-window-vertically -13) + (switch-to-buffer-other-window ltxbug-help)) + +(defun ltxbug-oneline-field () + (interactive) + (ltxbug-window-setup) + (erase-buffer) + (insert " + You may wish to add or alter the following fields: + Class Class of this report. + Confidential Confidential (or not). + Responsible Assign to a member of the LaTeX maintenance team + Severity Severity of the bug. + Priority Priority of the report. +") + (set-buffer ltxbug-msg) + (let* ((completion-ignore-case t) + (field (completing-read "Which field ? " + '(("Class")("Confidential")("Priority")("Severity") + ("Responsible")) + nil t))) + (cond + ((equal field "Class") (ltxbug-class)) + ((equal field "Confidential") (ltxbug-confidential)) + ((equal field "Responsible") (ltxbug-responsible)) + ((equal field "Severity") (ltxbug-severity)) + ((equal field "Priority") (ltxbug-priority))))) diff --git a/Master/texmf-dist/source/latex/base/latexsym.dtx b/Master/texmf-dist/source/latex/base/latexsym.dtx new file mode 100644 index 00000000000..4072447c3b4 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/latexsym.dtx @@ -0,0 +1,218 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \CheckSum{82} +% +% \iffalse % this is a METACOMMENT ! +% +% File `latexsym.dtx'. +% Copyright 1994-1998 by Frank Mittelbach. All rights reserved. +% +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{latexsym} +%<fd>\ProvidesFile{ulasy.fd} +%<-driver> [1998/08/17 v2.2e +%<package> Standard LaTeX package (lasy symbols)] +%<fd> LaTeX symbol font definitions] +% +%<*driver> +\documentclass{ltxdoc} +\usepackage{latexsym} +\GetFileInfo{latexsym.sty} +\providecommand\dst{\expandafter{\normalfont\scshape docstrip}} +\title{The \LaTeX{} symbol fonts for use with + \LaTeXe.\thanks{This file has version + number \fileversion, dated \filedate.}} +\date{\filedate} +\author{Frank Mittelbach} +\begin{document} +\maketitle + \DocInput{latexsym.dtx} +\end{document} +%</driver> +% \fi +% +% \changes{v2.2e}{1998/08/17}{Documentation fixes.} +% +% \section{Introduction} +% +% This file defines the package |latexsym| which makes the few +% additional characters available that come from the |lasy| fonts +% (\LaTeX's symbol fonts). These fonts are not automatically +% included in the NFSS2/\LaTeXe{} since they take up important +% space and aren't necessary if one makes use of the packages +% \texttt{amsfonts} or \texttt{amssymb}. +% +% The commands defined by the \texttt{latexsym} package are: +% \begin{quote}\raggedright +% |\mho|~$\mho$ \quad +% |\Join|~$\Join$ \quad +% |\Box|~$\Box$ \quad +% |\Diamond|~$\Diamond$ \quad +% |\leadsto|~$\leadsto$ \quad +% |\sqsubset|~$\sqsubset$ \quad +% |\sqsupset|~$\sqsupset$ \quad +% |\lhd|~$\lhd$ \quad +% |\unlhd|~$\unlhd$ \quad +% |\rhd|~$\rhd$ \quad +% |\unrhd|~$\unrhd$ +% \end{quote} +% +% \StopEventually{} +% +% \section{The \dst{} modules} +% +% The following modules are used in the implementation to direct +% \dst{} in generating the external files: +% \begin{center} +% \begin{tabular}{ll} +% driver & produce a documentation driver file \\ +% package & produce a package file \\ +% fd & produce a font definition file +% \end{tabular} +% \end{center} +% +% +% \section{The Implementation} +% +% The individual files generated from this code are identified at the +% very top of this file by a couple of lines looking like this: +% \begin{verbatim} +% %<fd>\ProvidesFile{Ulasy.fd} +% %<-driver> [????/??/?? v2.2? +% %<package> Standard LaTeX package (lasy symbols)] +% %<fd> LaTeX symbol font definitions] +%\end{verbatim} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% \begin{macro}{\symlasy} +% +% It is possible to detect whether or not the \LaTeX{} symbols are +% already defined by checking for the math group number with the +% name |\symlasy|. +% +% In that case we exit but write a message to the transcript file. +% \begin{macrocode} +\ifx\symlasy\undefined \else + \wlog{Package latexsym: nothing to set up^^J}% + \endinput \fi +% \end{macrocode} +% Otherwise we define the new symbol font. +% \begin{macrocode} + \DeclareSymbolFont{lasy}{U}{lasy}{m}{n} + \SetSymbolFont{lasy}{bold}{U}{lasy}{b}{n} +% \end{macrocode} +% \end{macro} +% +% +% Because the lasy symbols are made an error in the format we have +% to undefine them before we can set them anew with +% |\DeclareMathSymbol|. +% \begin{macrocode} + \let\mho\undefined \let\sqsupset\undefined + \let\Join\undefined \let\lhd\undefined + \let\Box\undefined \let\unlhd\undefined + \let\Diamond\undefined \let\rhd\undefined + \let\leadsto\undefined \let\unrhd\undefined + \let\sqsubset\undefined +% \end{macrocode} +% \changes{v2.2a}{1995/03/18}{\cs{lhd} and friends should be bin ops.} +% \begin{macrocode} + \DeclareMathSymbol\mho {\mathord}{lasy}{"30} + \DeclareMathSymbol\Join {\mathrel}{lasy}{"31} + \DeclareMathSymbol\Box {\mathord}{lasy}{"32} + \DeclareMathSymbol\Diamond {\mathord}{lasy}{"33} + \DeclareMathSymbol\leadsto {\mathrel}{lasy}{"3B} + \DeclareMathSymbol\sqsubset{\mathrel}{lasy}{"3C} + \DeclareMathSymbol\sqsupset{\mathrel}{lasy}{"3D} + \DeclareMathSymbol\lhd {\mathbin}{lasy}{"01} + \DeclareMathSymbol\unlhd {\mathbin}{lasy}{"02} + \DeclareMathSymbol\rhd {\mathbin}{lasy}{"03} + \DeclareMathSymbol\unrhd {\mathbin}{lasy}{"04} +% \end{macrocode} +% To save some space we can remove the definition of |\not@base| +% since it isn't any longer needed. (We use |\@undefined| so that +% gives an error and not a recursive definition +% if it is still used somewhere.) +% \changes{v2.2b}{1995/07/03}{Free space for \cs{not@base}} +% \begin{macrocode} + \let\not@base\@undefined +%</package> +% \end{macrocode} +% +% \subsection{\LaTeX{} symbols fonts} +% +% \changes{v2.2d}{1996/11/20}{lowercase ulasy.fd /1044} +% The rest of this file defines the the font shape declarations +% that have to go into the corresponding |.fd| file. +% +% \begin{macrocode} +%<*fd> +\DeclareFontFamily{U}{lasy}{} +\DeclareFontShape{U}{lasy}{m}{n}{ <5> <6> <7> <8> <9> gen * lasy + <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88>lasy10 }{} +% \end{macrocode} +% Since there are no bold lasy symbols below 10pt we silently +% substitute them by the medium ones to avoid terminal warnings if +% |\boldmath| is selected. +% \begin{macrocode} +\DeclareFontShape{U}{lasy}{b}{n}{ <-10> ssub * lasy/m/n + <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88>lasyb10 }{} +%</fd> +% \end{macrocode} +% +% The next line goes into all files and in addition prevents \dst{} +% from adding any further code from the main source file (such as a +% character table). +% \begin{macrocode} +\endinput +% \end{macrocode} +% +% \DeleteShortVerb{\|} +% \Finale +% +% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} diff --git a/Master/texmf-dist/source/latex/base/latexsym.ins b/Master/texmf-dist/source/latex/base/latexsym.ins new file mode 100644 index 00000000000..671202d7a7e --- /dev/null +++ b/Master/texmf-dist/source/latex/base/latexsym.ins @@ -0,0 +1,141 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\declarepreamble\fdpreamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +In particular, permission is granted to customize the declarations in +this file to serve the needs of your installation. + +However, NO PERMISSION is granted to distribute a modified version +of this file under its original name. + +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\generate{ + \file{latexsym.sty}{% + \from{latexsym.dtx}{package}} + \usepreamble\fdpreamble + \file{ulasy.fd}{ + \from{latexsym.dtx}{fd}} + } + + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space latexsym.sty} +\Msg{* \space\space *.fd} +\Msg{*} +\Msg{* To produce the documentation run the files ending with} +\Msg{* `.dtx' through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} +} + +\endbatchfile + + + + + diff --git a/Master/texmf-dist/source/latex/base/letter.dtx b/Master/texmf-dist/source/latex/base/letter.dtx new file mode 100644 index 00000000000..89e8579ecb3 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/letter.dtx @@ -0,0 +1,1918 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \CheckSum{980} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \iffalse +% \section{Identification} +% +% +% This document class can only be used with \LaTeXe, so we make +% sure that an appropriate message is displayed when another \TeX{} +% format is used. +% \begin{macrocode} +%<+letter>\NeedsTeXFormat{LaTeX2e}[1996/06/01] +% \end{macrocode} +% +% Announce the Class name and its version. +% \begin{macrocode} +%<+letter>\ProvidesClass{letter} +%<*driver> + \ProvidesFile{letter.drv} +%</driver> + [1999/04/29 v1.2z +%<+letter> Standard LaTeX document class] +% \end{macrocode} +% +% \section{The documentation driver file} +% +% We have our own document class to format the \LaTeXe{} +% documentation. +% \fi +% \changes{v1.0}{1993/12/07}{Use class ltxdoc document class} +% \iffalse +% \begin{macrocode} +%<*driver> +] +\documentclass{ltxdoc} +% \end{macrocode} +% +% We don't want everything to appear in the index. +% \begin{macrocode} +\DoNotIndex{\@Alph,\@alph,\@arabic,\@badmath} +\DoNotIndex{\@centercr} +\DoNotIndex{\@empty,\@ignoretrue} +\DoNotIndex{\@ixpt} +\DoNotIndex{\@M,\@minus,\@ne,\@plus} +\DoNotIndex{\\,\addtolength} +\DoNotIndex{\advance} +\DoNotIndex{\ast,\begin,\begingroup,\bfseries,\bgroup,\box} +\DoNotIndex{\bullet} +\DoNotIndex{\cdot,\cr,\day,\DeclareOption} +\DoNotIndex{\def,\DocInput,\documentclass} +\DoNotIndex{\DoNotIndex,\egroup,\ifx,\else,\fi,\endtrivlist} +\DoNotIndex{\EnableCrossrefs,\end,\end@dblfloat,\end@float,\endgroup} +\DoNotIndex{\endlist,\everycr,\ExecuteOptions} +\DoNotIndex{\filedate,\filename,\fileversion} +\DoNotIndex{\global,\halign,\hangindent,\hbox,\hfil,\hfill,\hrule} +\DoNotIndex{\hsize,\hskip,\hspace,\hss,\ifcase,\or,\fi} +\DoNotIndex{\ifvmode,\fi,\ifnum,\fi,\input} +\DoNotIndex{\kern,\leavevmode,\let,\leftmark} +\DoNotIndex{\list,\llap,\long,\m@ne,\m@th,\mark} +\DoNotIndex{\month,\newcommand,\newcounter,\newenvironment} +\DoNotIndex{\NeedsTeXFormat,\newdimen} +\DoNotIndex{\newpage,\nobreak,\noindent,\number} +\DoNotIndex{\p@} +\DoNotIndex{\pagestyle,\par} +\DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions} +\DoNotIndex{\protect,\ProvidesClass,\raggedbottom,\raggedright} +\DoNotIndex{\refstepcounter,\relax,\renewcommand,\reset@font} +\DoNotIndex{\rightmargin,\rlap,\rmfamily} +\DoNotIndex{\setbox,\setcounter,\setlength} +\DoNotIndex{\skip,\slshape,\space} +\DoNotIndex{\trivlist,\typeout,\tw@} +\DoNotIndex{\vskip,\vspace,\year,\z@} +% +\CodelineNumbered +\CodelineIndex +\EnableCrossrefs +\RecordChanges +% \end{macrocode} +% We use so many \file{docstrip} modules that we set the +% \texttt{StandardModuleDepth} counter to 1. +% \begin{macrocode} +\setcounter{StandardModuleDepth}{1} +% \end{macrocode} +% The following command retrieves the date and version information +% from the file. +% \begin{macrocode} +\GetFileInfo{letter.drv} +% \end{macrocode} +% Some commonly used abbreviations +% \begin{macrocode} +\newcommand*{\Lopt}[1]{\textsf {#1}} +\newcommand*{\file}[1]{\texttt {#1}} +\newcommand*{\Lcount}[1]{\textsl {\small#1}} +\newcommand*{\pstyle}[1]{\textsl {#1}} +% \end{macrocode} +% We also want the full details. +% \begin{macrocode} +\begin{document} +\DocInput{letter.dtx} +\PrintIndex +% ^^A\PrintChanges +\end{document} +%</driver> +% \end{macrocode} +% \fi +% +% \changes{v1.1}{1993/12/18}{Changes to make it work with +% compatibility mode.} +% \changes{v1.1a}{1993/12/19}{Removed float parms} +% +% \changes{v1.1c}{1994/01/17}{Moved definition of \cs{@textop} to +% initialization section, to counteract setting of \cs{@texttop} in +% \cs{raggedbottom}.} +% +% \changes{v1.1d}{1994/01/20}{Corrected margins: Now computed from +% \cs{paperwidth} and \cs{textwidth}, so that the text is +% horizontally centered.} +% \changes{v1.1e}{1994/02/03}{Corrected checksum} +% +% \changes{v1.2a}{1994/02/12}{Removed onecolumn and twocolumn options.} +% \changes{v1.2a}{1994/02/12}{Changed label producing commands in .aux +% file.} +% +% \changes{v1.2b}{1994/02/28}{Moved driver further up.} +% +% \changes{v1.2c}{1994/03/08}{Always write .aux file.} +% \changes{v1.2f}{1994/04/29}{Use LaTeX instead of LaTeX2e in messages} +% \changes{v1.2f}{1994/04/29}{Removed \cs{typeout} message} +% \changes{v1.2g}{1994/05/01}{Removed the use of \cs{fileversion} +% c.s.} +% \changes{v1.2j}{1994/06/01}{Corrected driver code.} +% \changes{v1.2k}{1994/06/17}{Various documentation enhancements} +% \changes{v1.2p}{1994/12/11}{Use \cs{newcommand*} to define +% user-level commands that take an argument} +% \changes{v1.2q}{1995/05/17}{cleaned up \cs{changes entries}} +% \changes{v1.2q}{1995/05/18}{replaced \cs{hbox to} by \cs{hb@xt@}} +% \changes{v1.2r}{1995/05/23}{removed a superfluous brace} +% +% \iffalse +% Copyright (C) 1994 LaTeX3 project, Frank Mittelbach +% and Rainer Sch\"opf, all rights reserved. +% \fi +% +% \author{Leslie Lamport and Frank Mittelbach and Rainer Sch\"opf} +% +% \title{Standard Letter Document Class for \LaTeX{} version 2e} +% +% +% \maketitle +% \tableofcontents +% +% \StopEventually +% +% +% \section{Initial Code} +% +% In this part we define a few commands that are used later on. +% +% \begin{macro}{\@ptsize} +% This control sequence is used to store the second digit of the +% pointsize we are typesetting in. So, normally, it's value is one +% of 0, 1 or 2. +% \begin{macrocode} +%<*letter> +\newcommand\@ptsize{} +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{Setting Paper Sizes} +% +% The variables |\paperwidth| and |\paperheight| should reflect the +% physical paper size after trimming. For desk printer output this +% is usually the real paper size since there is no post-processing. +% \changes{v1.0a}{1993/12/14}{Corrected typo, A4 is not 279 mm high} +% \begin{macrocode} +\DeclareOption{a4paper} + {\setlength\paperheight {297mm}% + \setlength\paperwidth {210mm}} +\DeclareOption{a5paper} + {\setlength\paperheight {210mm}% + \setlength\paperwidth {148mm}} +\DeclareOption{b5paper} + {\setlength\paperheight {250mm}% + \setlength\paperwidth {176mm}} +\DeclareOption{letterpaper} + {\setlength\paperheight {11in}% + \setlength\paperwidth {8.5in}} +\DeclareOption{legalpaper} + {\setlength\paperheight {14in}% + \setlength\paperwidth {8.5in}} +\DeclareOption{executivepaper} + {\setlength\paperheight {10.5in}% + \setlength\paperwidth {7.25in}} +% \end{macrocode} +% +% \changes{v1.2o}{1994/08/26}{Added the option \textsf{landscape}} +% The option \Lopt{landscape} switches the values of |\paperheight| +% and |\paperwidth|, assuming the dimensions were given for portrait +% paper. +% \begin{macrocode} +\DeclareOption{landscape} + {\setlength\@tempdima {\paperheight}% + \setlength\paperheight {\paperwidth}% + \setlength\paperwidth {\@tempdima}} +% \end{macrocode} +% +% \subsection{Choosing the type size} +% +% The type size options are handled by defining |\@ptsize| to +% contain the last digit of the size in question and branching on +% |\ifcase| statements. This is done for historical reasons to stay +% compatible with other packages that use the |\@ptsize| variable +% to select special actions. It makes the declarations of size +% options less than 10pt difficult, although one can probably use +% \texttt{9} and \texttt{8} assuming that a class wont define both +% \Lopt{8pt} and \Lopt{18pt} options. +% +% \begin{macrocode} +\DeclareOption{10pt}{\renewcommand\@ptsize{0}} +\DeclareOption{11pt}{\renewcommand\@ptsize{1}} +\DeclareOption{12pt}{\renewcommand\@ptsize{2}} +% \end{macrocode} +% +% +% \subsection{Two-side or one-side printing} +% +% Two-sided printing was not supported in the \LaTeX~2.09 version +% of this document class. +% \changes{v1.2e}{1994/04/28}{Added oneside option and twoside option +% in native mode} +% \begin{macrocode} +\if@compatibility + \DeclareOption{twoside}{\@latexerr{No `twoside' layout for letters}% + \@eha} +\else + \DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue} +\fi +% \end{macrocode} +% +% +% \begin{macrocode} +\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse} +% \end{macrocode} +% +% \subsection{Draft option} +% +% If the user requests \Lopt{draft} we show any overfull boxes. +% We could probably add some more interesting stuff to this option. +% \begin{macrocode} +\DeclareOption{draft}{\setlength\overfullrule{5pt}} +\DeclareOption{final}{\setlength\overfullrule{0pt}} +% \end{macrocode} +% +% +% \subsection{Equation numbering on the left} +% +% The option \Lopt{leqno} can be used to get the equation numbers +% on the left side of the equation. +% \changes{v1.1c}{1994/01/17}{Option leqno now read from +% \file{leqno.clo}.} +% \begin{macrocode} +\DeclareOption{leqno}{\input{leqno.clo}} +% \end{macrocode} +% +% \subsection{Flush left displays} +% +% The option \Lopt{fleqn} redefines the displayed math environments +% in such a way that they come out flush left, with an indentation +% of |\mathindent| from the prevailing left margin. +% \changes{v1.1}{1993/12/18}{Corrected typo in \cs{renewcommand}, +% doubled hash marks.} +% \changes{v1.1c}{1994/01/17}{Option fleqn now read from +% \file{fleqn.clo}.} +% \begin{macrocode} +\DeclareOption{fleqn}{\input{fleqn.clo}} +% \end{macrocode} +% +% +% \section{Executing Options} +% +% Here we execute the default options to initialize certain +% variables. +% \changes{v1.2e}{1994/04/28}{Added execution of `oneside' option} +% \begin{macrocode} +\ExecuteOptions{letterpaper,10pt,oneside,onecolumn,final} +% \end{macrocode} +% +% The |\ProcessOptions| command causes the execution of the code +% for every option \Lopt{foo} which is declared and for which the +% user typed the \Lopt{foo} option in his |\documentclass| command. +% For every option \Lopt{bar} he typed, which is not declared, the +% option is assumed to be a global option. All options will be +% passed as document options to any |\usepackage| command in the +% document preamble. +% \begin{macrocode} +\ProcessOptions +% \end{macrocode} +% Now that all the options have been executed we can load the +% chosen class option file that contains all size dependant code. +% \begin{macrocode} +\input{size1\@ptsize.clo} +% \end{macrocode} +% +% +% \section{Loading Packages} +% +% The standard class files do not load additional packages. +% +% +% \section{Document Layout} +% \label{sec:maincode} +% +% In this section we are finally dealing with the nasty typographical +% details. +% +% \subsection{Paragraphing} +% +% \begin{macro}{\lineskip} +% \begin{macro}{\normallineskip} +% These parameters control \TeX's behavior when two lines tend to +% come too close together. +% \begin{macrocode} +\setlength\lineskip{1\p@} +\setlength\normallineskip{1\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\baselinestretch} +% This is used as a multiplier for |\baselineskip|. The default is +% to {\em not\/} stretch the baselines. +% \begin{macrocode} +\renewcommand\baselinestretch{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\parskip} +% \begin{macro}{\parindent} +% |\parskip| gives extra vertical space between paragraphs and +% |\parindent| is the width of the paragraph indentation. +% Letters are typeset without paragraph indentation. +% \begin{macrocode} +\setlength\parskip{0.7em} +\setlength\parindent{0\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@lowpenalty} +% \begin{macro}{\@medpenalty} +% \begin{macro}{\@highpenalty} +% The commands |\nopagebreak| and |\nolinebreak| put in penalties +% to discourage these breaks at the point they are put in. +% They use |\@lowpenalty|, |\@medpenalty| or |\@highpenalty|, +% dependant on their argument. +% \begin{macrocode} +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\clubpenalty} +% \begin{macro}{\widowpenalty} +% These penalties are used to discourage club and widow lines. +% Because we use their default values we only show them here, +% commented out. +% \begin{macrocode} +% \clubpenalty 150 +% \widowpenalty 150 +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\displaywidowpenalty} +% \begin{macro}{\predisplaypenalty} +% \begin{macro}{\postdisplaypenalty} +% Discourage (but not so much) widows in front of a math display +% and forbid breaking directly in front of a display. Allow break +% after a display without a penalty. Again the default values are +% used, therefore we only show them here. +% \begin{macrocode} +% \displaywidowpenalty 50 +% \predisplaypenalty 10000 +% \postdisplaypenalty 0 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\interlinepenalty} +% Allow the breaking of a page in the middle of a paragraph. +% \begin{macrocode} +% \interlinepenalty 0 +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\brokenpenalty} +% We allow the breaking of a page after a hyphenated line. +% \begin{macrocode} +% \brokenpenalty 0 +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Page Layout} +% +% All margin dimensions are measured from a point one inch from the +% top and lefthand side of the page. +% +% \subsubsection{Vertical spacing} +% +% \begin{macro}{\headheight} +% \begin{macro}{\headsep} +% The |\headheight| is the height of the box that will contain the +% running head. The |\headsep| is the distance between the bottom +% of the running head and the top of the text. |\topskip| is the +% |\baselineskip| for the first line on a page, its value depends +% on the size option that was specified. Therefore it is +% initialized in one of the \file{size1x.clo} files. +% \begin{macrocode} +\setlength\headheight{12\p@} +\setlength\headsep {45\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\footskip} +% The distance from the baseline of the box which contains the +% running footer to the baseline of last line of text is controlled +% by the |\footskip|. +% Bottom of page: +% \begin{macrocode} +\setlength\footskip{25\p@} +% \end{macrocode} +% \end{macro} +% +% \changes{v1.2n}{1994/07/13}{Setting of \cs{maxdepth} and +% \cs{@maxdepth} already happens in the size.. files, removed +% here} +% +% \subsubsection{The dimension of text} +% +% \begin{macro}{\textwidth} +% When we are in compatibility mode we have to make sure that the +% dimensions of the printed area are not different from what the +% user was used to see. +% +% \changes{v1.2n}{1994/07/13}{Setting \cs{textwidth} to a fixed value +% should only happen in compatibility mode} +% \begin{macrocode} +\if@compatibility + \setlength\textwidth{365\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\textheight} +% Now that we have computed the width of the text, we have to take +% care of the height. The |\textheight| is the height of text +% (including footnotes and figures, excluding running head and +% foot). +% \changes{v1.2n}{1994/07/13}{Setting \cs{textheight} to a fixed value +% should only happen in compatibility mode} +% \begin{macrocode} + \setlength\textheight{505\p@} +\fi +% \end{macrocode} +% In native mode we use the dimensions as they were computed by one +% of the \Lopt{xxpt} options, together with one of the +% \Lopt{..paper} options. +% \end{macro} +% +% \subsubsection{Margins} +% +% \begin{macro}{\oddsidemargin} +% \begin{macro}{\evensidemargin} +% \begin{macro}{\marginparwidth} +% \changes{v1.1d}{1994/01/20}{Corrected margins: Now computed from +% \cs{paperwidth} and \cs{textwidth}.} The values of +% |\oddsidemargin| and |\evensidemargin| are computed from those of +% |\paperwidth| and |\textwidth|. +% \changes{v1.2n}{1994/07/13}{Added fixed values for these parameters +% in compatibillity mode} +% \begin{macrocode} +\if@compatibility + \setlength\oddsidemargin{53pt} + \setlength\evensidemargin{53pt} + \setlength\marginparwidth{90pt} +\else + \setlength\@tempdima{\paperwidth} + \addtolength\@tempdima{-2in} + \addtolength\@tempdima{-\textwidth} + \setlength\oddsidemargin {.5\@tempdima} + \setlength\evensidemargin {\oddsidemargin} + \setlength\marginparwidth {90\p@} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\marginparsep} +% \begin{macro}{\marginparpush} +% The horizontal space between the main text and marginal notes is +% determined by |\marginparsep|, the minimum vertical separation +% between two marginal notes is controlled by |\marginparpush|. +% \begin{macrocode} +\setlength\marginparsep {11\p@} +\setlength\marginparpush{5\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\topmargin} +% The |\topmargin| is the distance between the top of `the +% printable area' --which is 1 inch below the top of the paper-- +% and the top of the box which contains the running head. +% +% It can now be computed from the values set above. +% \begin{macrocode} +\setlength\topmargin{27pt} +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{Footnotes} +% +% \begin{macro}{\footnotesep} +% |\footnotesep| is the height of the strut placed at the beginning +% of every footnote. It equals the height of a normal +% |\footnotesize| strut in this +% class, thus no extra space occurs between footnotes. +% \begin{macrocode} +\setlength\footnotesep{12\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\footins} +% |\skip\footins| is the space between the last line of the main +% text and the top of the first footnote. +% \begin{macrocode} +\setlength{\skip\footins}{10\p@ \@plus 2\p@ \@minus 4\p@} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Page Styles} +% +% The page style \pstyle{foo} is defined by defining the command +% |\ps@foo|. This command should make only local definitions. +% There should be no stray spaces in the definition, since they +% could lead to mysterious extra spaces in the output (well, that's +% something that should be always avoided). +% +% \begin{macro}{\@evenhead} +% \begin{macro}{\@oddhead} +% \begin{macro}{\@evenfoot} +% \begin{macro}{\@oddfoot} +% The |\ps@...| command defines the macros |\@oddhead|, +% |\@oddfoot|, |\@evenhead|, and |\@evenfoot| to define the running +% heads and feet---e.g., |\@oddhead| is the macro to produce the +% contents of the heading box for odd-numbered pages. It is called +% inside an |\hbox| of width |\textwidth|. +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Marking conventions} +% +% To make headings determined by the sectioning commands, the page +% style defines the commands |\chaptermark|, |\sectionmark|, +% \ldots, where |\chaptermark{|\meta{text}|}| is called by +% |\chapter| to set a mark, and so on. +% +% The |\...mark| commands and the |\...head| macros are defined +% with the help of the following macros. (All the |\...mark| +% commands should be initialized to no-ops.) +% +% \LaTeX{} extends \TeX's |\mark| facility by producing two kinds +% of marks, a `left' and a `right' mark, using the following +% commands: +% \begin{flushleft} +% |\markboth{|\meta{left}|}{|\meta{right}|}|: Adds both marks. +% +% |\markright{|\meta{right}|}|: Adds a `right' mark. +% +% |\leftmark|: Used in the |\@oddhead|, |\@oddfoot|, |\@evenhead| +% or |\@evenfoot| macros, it gets the current `left' +% mark. |\leftmark| works like \TeX's |\botmark| +% command. +% +% |\rightmark|: Used in the |\@oddhead|, |\@oddfoot|, |\@evenhead| +% or |\@evenfoot| macros, it gets the current +% `right' mark. |\rightmark| works like \TeX's +% |\firstmark| command. +% \end{flushleft} +% +% The marking commands work reasonably well for right marks +% `numbered within' left marks--e.g., the left mark is changed by a +% |\chapter| command and the right mark is changed by a |\section| +% command. However, it does produce somewhat anomalous results if +% two |\markboth|'s occur on the same page. +% +% +% Commands like |\tableofcontents| that should set the marks in some +% page styles use a |\@mkboth| command, which is |\let| by the +% pagestyle command (|\ps@...|) to |\markboth| for setting the +% heading or to |\@gobbletwo| to do nothing. +% +% +% \subsubsection{Defining the page styles} +% \label{sec:pagestyle} +% +% The pagestyles \pstyle{empty} and \pstyle{plain} are defined in +% the \LaTeX{} kernel (\file{ltpage.dtx}), but these definitions +% are changed to a simpler version for this document class. +% +% \begin{macro}{\ps@headings} +% The definition of the page style \pstyle{headings} has to be +% different for two sided printing than it is for one sided +% printing. +% +% \changes{v1.2e}{1994/04/28}{Added twoside support} +% \begin{macrocode} +\if@twoside + \def\ps@headings{% +% \end{macrocode} +% The running feet are empty in this page style. +% \begin{macrocode} + \let\@oddfoot\@empty\let\@evenfoot\@empty +% \end{macrocode} +% The running head contains some information about this letter. The +% head is the same for even and odd pages. +% \changes{v1.2i}{1994/05/12}{Made running heads the same on odd and +% even pages} +% \changes{v1.2k}{1994/06/17}{Added a missing brace} +% \begin{macrocode} + \def\@oddhead{\slshape\headtoname{} \ignorespaces\toname + \hfil \@date + \hfil \pagename{} \thepage}% + \let\@evenhead\@oddhead} +% \end{macrocode} +% For one sided printing we don't need to define |\@evenhead| so +% the definition is somewhat simpler. +% \begin{macrocode} +\else + \def\ps@headings{% + \let\@oddfoot\@empty + \def\@oddhead{\slshape\headtoname{} \ignorespaces\toname + \hfil \@date + \hfil \pagename{} \thepage}} +\fi +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\ps@empty} +% The definition of the page style \pstyle{empty} is simple: +% No running head or foot at all. +% \changes{v1.2e}{1994/04/28}{Also make even feet and head empty} +% \begin{macrocode} +\def\ps@empty{% + \let\@oddfoot\@empty\let\@oddhead\@empty + \let\@evenfoot\@empty\let\@evenhead\@empty} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ps@firstpage} +% The page style \pstyle{firstpage} puts the telephone number +% in the proper place for the letterhead. It should be adapted +% to site conventions. The size of the number is determined +% depending on the main size. +% \begin{macrocode} +\def\ps@firstpage{% + \let\@oddhead\@empty + \def\@oddfoot{\raisebox{-45\p@}[\z@]{% + \hb@xt@\textwidth{\hspace*{100\p@}% + \ifcase \@ptsize\relax + \normalsize + \or + \small + \or + \footnotesize + \fi + \fromlocation \hfill \telephonenum}}\hss}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ps@plain} +% The definition of the page style \pstyle{plain} is again simple. +% \changes{v1.2e}{1994/04/28}{Added definition of \cs{@evenfoot} +% because of twoside option} +% \changes{v1.2s}{1995/05/25}{replace \cs{rmfamily} with +% \cs{normalfont} (PR 1578)} +% \begin{macrocode} +\def\ps@plain{% + \let\@oddhead\@empty + \def\@oddfoot{\normalfont\hfil\thepage\hfil}% + \def\@evenfoot{\normalfont\hfil\thepage\hfil}} +% \end{macrocode} +% \end{macro} +% +% +% +% \section{Document Markup} +% +% \subsection{Global Declarations} +% +% \begin{macro}{\name} +% \begin{macro}{\signature} +% \begin{macro}{\address} +% \begin{macro}{\location} +% \begin{macro}{\telephone} +% The following declarations, shown with examples, give information +% about the sender: +% \begin{itemize} +% \item |\name{Dr. L. User}| : to be used for the return address on +% the envelope. +% \begin{macrocode} +\newcommand*{\name}[1]{\def\fromname{#1}} +% \end{macrocode} +% \item |\signature{Larry User}| : goes after the closing. +% \begin{macrocode} +\newcommand*{\signature}[1]{\def\fromsig{#1}} +% \end{macrocode} +% \item |\address{3245 Foo St.\\Gnu York}| : used as the return +% address in the +% letter and on the envelope. If not declared, then an +% institutional standard address is used. +% \begin{macrocode} +\newcommand*{\address}[1]{\def\fromaddress{#1}} +% \end{macrocode} +% \item |\location{Room 374}| : Acts as modifier to the standard +% institutional address. +% \begin{macrocode} +\newcommand*{\location}[1]{\def\fromlocation{#1}} +% \end{macrocode} +% \item |\telephone{(415)123-4567}| : Just in case some style puts it +% on the letter. +% \changes{v1.2m}{1994/06/23}{Removed typo (\#[] instead of [1])} +% \begin{macrocode} +\newcommand*{\telephone}[1]{\def\telephonenum{#1}} +% \end{macrocode} +% \end{itemize} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\fromname} +% \begin{macro}{\fromsig} +% \begin{macro}{\fromaddress} +% \begin{macro}{\fromlocation} +% \begin{macro}{\telephonenum} +% We make sure that the internal control sequences that are used to +% store the information exist and are empty. +% \begin{macrocode} +\name{} +\signature{} +\address{} +\location{} +\telephone{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\makelabels} +% The |\makelabels| declaration causes mailing labels to be made. +% \begin{macrocode} +\newcommand*{\makelabels}{% +% \end{macrocode} +% At the beginning of the document, we need to activate the +% |\@mlabel| and |\@startlabels| commands, as well as write +% |\@startlabels| to the |.aux| file. +% \begin{macrocode} + \AtBeginDocument{% + \let\@startlabels\startlabels + \let\@mlabel\mlabel + \if@filesw + \immediate\write\@mainaux{\string\@startlabels}\fi}% +% \end{macrocode} +% At the end of the document we need to write |\clearpage| to the +% |.aux| file. +% \begin{macrocode} + \AtEndDocument{% + \if@filesw\immediate\write\@mainaux{\string\clearpage}\fi}} +% \end{macrocode} +% |\makelabels| is allowed only before the |\begin{document}| +% command. +% \begin{macrocode} +\@onlypreamble\makelabels +% \end{macrocode} +% \end{macro} +% +% \subsection{The generic letter commands} +% +% \begin{environment}{letter} +% The letter environment creates a new letter, starting from page +% $1$, with footnotes starting from $1$ as well. +% (The first page is unnumbered.) It has a single argument, which +% is the addressee and his address, as in +%\begin{verbatim} +% \begin{letter}{Sam Jones \\ +% Institute for Retarded Study\\ +% Princeton, N.J.} +%\end{verbatim} +% Local declarations, such as |\address|, can follow the +% |\begin{letter}|. +% \changes{v1.2e}{1994/04/28}{When printing twosided a new letter +% shouldn't start on the back of the previous one. Added insertion +% of a blank page when necessary.} +% \changes{v1.2z}{1999/04/29}{Reset footnote counter to 0, (PR 2957).} +% \begin{macrocode} +\newenvironment{letter}[1] + {\newpage + \if@twoside \ifodd\c@page + \else\thispagestyle{empty}\null\newpage\fi + \fi + \c@page \@ne + \c@footnote \z@ + \interlinepenalty=200 % smaller than the TeXbook value +% \end{macrocode} +% The |\leavevmode| and |\ignorespaces| commands are there for +% protecting against an empty argument. +% \begin{macrocode} + \@processto{\leavevmode\ignorespaces #1}} +% \end{macrocode} +% The end of the environment possibly writes the address +% information on the \file{.aux} file. +% \changes{v1.2p}{1994/12/11}{No longer redefine \cs{protect} but use +% one of the available settings} +% \begin{macrocode} + {\stopletter\@@par\pagebreak\@@par + \if@filesw + \begingroup + \let\\=\relax + \let\protect\@unexpandable@protect + \immediate\write\@auxout{% + \string\@mlabel{\returnaddress}{\toname\\\toaddress}}% + \endgroup + \fi} +% \end{macrocode} +% \end{environment} +% +% +% \begin{macro}{\@processto} +% \begin{macro}{\@xproc} +% \begin{macro}{\@yproc} +% |\@processto| gets the |\toname| and |\toaddress| from the letter +% environment's macro argument. |\@xproc| and |\@yproc| are auxiliary +% macros. +% \begin{macrocode} +\long\def\@processto#1{% + \@xproc #1\\@@@% + \ifx\toaddress\@empty + \else + \@yproc #1@@@% + \fi} +% \end{macrocode} +% +% \begin{macrocode} +\long\def\@xproc #1\\#2@@@{\def\toname{#1}\def\toaddress{#2}} +% \end{macrocode} +% +% \begin{macrocode} +\long\def\@yproc #1\\#2@@@{\def\toaddress{#2}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \subsubsection{Page breaking control} +% +% \begin{macro}{\stopbreaks} +% When the command |\stopbreaks| is issued no page breaks should +% occur until |\startbreaks| is called. +% \begin{macrocode} +\newcommand*{\stopbreaks}{% + \interlinepenalty\@M + \def\par{\@@par\nobreak}% + \let\\\@nobreakcr + \let\vspace\@nobreakvspace} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\nobreakvspace} +% \changes{v1.2t}{1996/01/20}{Made robust pr/2049} +% \begin{macro}{\@nobreakvspacex} +% \begin{macro}{\@nobreakcr} +% These are needed by |\stopbreaks| +% \begin{macrocode} +\DeclareRobustCommand\@nobreakvspace + {\@ifstar\@nobreakvspacex\@nobreakvspacex} +% \end{macrocode} +% +% \begin{macrocode} +\def\@nobreakvspacex#1{% + \ifvmode + \nobreak\vskip #1\relax + \else + \@bsphack\vadjust{\nobreak\vskip #1}\@esphack + \fi} +% \end{macrocode} +% +% \changes{v1.2w}{1997/01/07} +% {Simplify definition, for ltspace 1.2u. /2341} +% \begin{macrocode} +\def\@nobreakcr{\@ifstar{\@normalcr*}{\@normalcr*}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\startbreaks} +% This cancels the effect of |\stopbreaks|. +% \begin{macrocode} +\newcommand*{\startbreaks}{% + \let\\\@normalcr + \interlinepenalty 200% + \def\par{\@@par\penalty 200\relax}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\longindentation} +% The size of the indent to use before the closing of the letter. +% \begin{macrocode} +\newdimen\longindentation +\longindentation=.5\textwidth +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\indentedwidth} +% The width of the closing of the letter. +% \begin{macrocode} +\newdimen\indentedwidth +\indentedwidth=\textwidth +\advance\indentedwidth -\longindentation +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\opening} +% Text is begun with the |\opening| command, whose argument +% generates the salutation, as in +%\begin{verbatim} +% \opening{Dear Henry,} +%\end{verbatim} +% This should produce everything up to and including the +% `Dear Henry,' and a |\par| command that follows. +% Since there's a |\vfil| at the bottom of every page, +% it can add vertical fill to position a short letter. +% It should use the following commands: +% \begin{itemize} +% \item |\toname| : name part of `to' address. +% Will be one line long. +% \item |\toaddress| : address part of `to' address. +% The lines separated by |\\|. +% \item |\fromname| : name of sender. +% \item |\fromaddress| : argument of current |\address| +% declaration-- null if none. Should use standard institutional +% address if null. +% \item |\fromlocation| : argument of current |\location| +% declaration--null if none. +% \item |\telephonenum| : argument of current |\telephone| +% declaration--null if none. +% \end{itemize} +% \begin{macrocode} +\newcommand*{\opening}[1]{\ifx\@empty\fromaddress + \thispagestyle{firstpage}% + {\raggedleft\@date\par}% + \else % home address + \thispagestyle{empty}% +% \end{macrocode} +% \changes{v1.2y}{1998/05/10}{Avoid space at right of tabular +% (pr2794)} +% \begin{macrocode} + {\raggedleft\begin{tabular}{l@{}}\ignorespaces + \fromaddress \\*[2\parskip]% + \@date \end{tabular}\par}% + \fi + \vspace{2\parskip}% + {\raggedright \toname \\ \toaddress \par}% + \vspace{2\parskip}% + #1\par\nobreak} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\closing} +% The body of the letter follows, ended by a |\closing| command, +% as in +%\begin{verbatim} +% \closing{Yours truly,} +%\end{verbatim} +% This command generates the closing matter, and the signature. +% An obvious thing to do is to use a |\parbox| for the closing +% and the signature. Should use the following: +% \begin{itemize} +% \item |\fromsig| : argument of current |\signature| declaration +% or, if null, the |\fromname|. +% \item |\stopbreaks| : a macro that inhibits page breaking. +% \end{itemize} +% \begin{macrocode} +\newcommand{\closing}[1]{\par\nobreak\vspace{\parskip}% + \stopbreaks + \noindent + \ifx\@empty\fromaddress\else + \hspace*{\longindentation}\fi + \parbox{\indentedwidth}{\raggedright + \ignorespaces #1\\[6\medskipamount]% + \ifx\@empty\fromsig + \fromname + \else \fromsig \fi\strut}% + \par} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\smallskipamount} +% \begin{macro}{\mdeskipamount} +% \begin{macro}{\bigskipamount} +% Of these three, only |\medskipmount| is actually used above. +% \begin{macrocode} +%\smallskipamount=.5\parskip +\medskipamount=\parskip +%\bigskipamount=2\parskip +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cc} +% \begin{macro}{\encl} +% \begin{macro}{\ps} +% After the |\closing| you can put arbitrary stuff, which is typeset +% with zero |\parindent| and no page breaking. Commands designed +% for use after the closing are: +% \begin{verbatim} +% \cc{Tinker\\Evers\\Chance} +%\end{verbatim} +% which produces:\\ +% \begin{tabular}{ll} +% cc: & Tinker\\ +% & Evers\\ +% & Chance +% \end{tabular}\\ +% Note the obvious use of |\parbox|. +% \changes{v1.2s}{1995/05/25}{replace \cs{reset@font} with +% \cs{normalfont}; remove \cs{rm}} +% \begin{macrocode} +\newcommand*{\cc}[1]{% + \par\noindent + \parbox[t]{\textwidth}{% + \@hangfrom{\normalfont\ccname: }% + \ignorespaces #1\strut}\par} +% \end{macrocode} +%\begin{verbatim} +% \encl{Foo(2)\\Bar} +%\end{verbatim} +% which produces:\\ +% \begin{tabular}{ll} +% encl: & Foo(2)\\ +% & Bar +% \end{tabular} +% \begin{macrocode} +\newcommand*{\encl}[1]{% + \par\noindent + \parbox[t]{\textwidth}{% + \@hangfrom{\normalfont\enclname: }% + \ignorespaces #1\strut}\par} +% \end{macrocode} +% +% The only thing |\ps| needs to do is call |\startbreaks|, +% which allows page breaking again. +% \begin{macrocode} +\newcommand*{\ps}{\par\startbreaks} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\stopletter} +% The |\stopletter| command is called by |\endletter| to do the +% following: +% \begin{itemize} +% \item Add any desired fill or other material at the end of the +% letter. +% \item Define |\returnaddress| to be the return address for the +% mailing label. +% More precisely, it is the first argument of the |\mlabel| +% command described below. It should be defined to null if the +% return address doesn't appear on the labels. Any command, +% other than |\\|, that should not be expanded until the |\mlabel| +% command is actually executed must be preceded by |\protect|. +% Whenever possible, |\protect| commands in the definition of +% |\returnaddress|---it's much more efficient that way. In +% particular, when the standard return address is used, you +% should define |\returnaddress| to something like +% |\protect\standardreturnaddress|. +% \end{itemize} +% \begin{macrocode} +\newcommand*{\stopletter}{} +% \end{macrocode} +% \end{macro} +% +% \subsection{Customizing the labels} +% +% Commands for generating the labels are put on the \file{.aux} file, +% which is read in and processed by the |\end{document}| command. +% You have to define the following two commands: +% \begin{itemize} +% \item |\startlabels| : Should reset the page layout parameters if +% necessary. +% \item |\mlabel|\marg{return address}\marg{to adress} : Command to +% generate a single label. +% \end{itemize} +% +% +% +% \begin{macro}{\returnaddress} +% The return address for the mailing labels can be stored in this +% macro. +% \begin{macrocode} +\newcommand*{\returnaddress}{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\labelcount} +% A register to count the labels +% \begin{macrocode} +\newcount\labelcount +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\startlabels} +% The following |\startlabels| command sets things up for +% producing labels in two columns of five 2" $\times$ 4-1/4" +% labels each, suitable for reproducing onto Avery brand number +% 5352 address labels. +% \changes{v1.2q}{1995/03/14}{changed value of \cs{columnsep} by 1pt} +% \begin{macrocode} +\newcommand*{\startlabels}{\labelcount\z@ + \pagestyle{empty}% + \let\@texttop\relax + \topmargin -50\p@ + \headsep \z@ + \oddsidemargin -35\p@ + \evensidemargin -35\p@ + \textheight 10in + \@colht\textheight \@colroom\textheight \vsize\textheight + \textwidth 550\p@ + \columnsep 26\p@ + \ifcase \@ptsize\relax + \normalsize + \or + \small + \or + \footnotesize + \fi + \baselineskip \z@ + \lineskip \z@ + \boxmaxdepth \z@ + \parindent \z@ + \twocolumn\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@startlabels} +% |\@startlabels| is the command name that is written to the |.aux| +% file. It is a no-op at first, and defined to be the same as +% |\startlabels| in the |\begin{document}| hook. +% \begin{macrocode} +\let\@startlabels=\relax +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\mlabel} +% This command prints an address label; it is used when the user +% specified |\makelabels| in the preamble of his document. The +% command |\mlabel| takes two arguments; the second argument is +% supposed to be the address; the first argument can be used to +% print a return address. In this document class we ignore the +% first argument. Also the labels are supposed to be 2~inch high +% and 3.6~inch wide. When your address labels have a different you +% will have to define your own |\mlabel| command. +% \changes{v1.2p}{1994/12/11}{Redefined \cs{mlabel} to not use the +% \cs{setbox} primitive} +% \changes{v1.2q}{1995/03/14}{changed width of the labels slightly to +% prevent \LaTeX\ stuffing two on each line} +% \begin{macrocode} +\newcommand*{\mlabel}[2]{% + \parbox[b][2in][c]{262\p@}{\strut\ignorespaces #2}% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@mlabel} +% The macro |\@mlabel| is written to the \file{.aux} file instead +% of |\mlabel|. This allows us to make it a no-op by default, +% and then activate it in the |\begin{document}| hook. +% \begin{macrocode} +\let\@mlabel=\@gobbletwo +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Lists} +% +% \subsubsection{General List Parameters} +% +% The following commands are used to set the default values for the +% list environment's parameters. See the \LaTeX{} manual for an +% explanation of the meanings of the parameters. Defaults for the +% list environment are set as follows. First, |\rightmargin|, +% |\listparindent| and |\itemindent| are set to 0pt. Then, for a +% \texttt{K}th level list, the command |\@listK| is called, where +% `\texttt{K}' denotes `\texttt{i}', `\texttt{ii}', ... , +% `\texttt{vi}'. (I.e., |\@listiii| is called for a third-level +% list.) By convention, |\@listK| should set |\leftmargin| to +% |\leftmarginK|. +% +% \begin{macro}{\leftmargin} +% \begin{macro}{\leftmargini} +% \begin{macro}{\leftmarginii} +% \begin{macro}{\leftmarginiii} +% \begin{macro}{\leftmarginiv} +% \begin{macro}{\leftmarginv} +% \begin{macro}{\leftmarginvi} +% For efficiency, level-one list's values are defined at top level, and +% |\@listi| is defined to set only |\leftmargin|. +% \begin{macrocode} +\setlength\leftmargini {2.5em} +% \end{macrocode} +% The following three are calculated so that they are larger than +% the sum of |\labelsep| and the width of the default labels (which +% are `(m)', `vii.' and `M.'). +% \begin{macrocode} +\setlength\leftmarginii {2.2em} +\setlength\leftmarginiii {1.87em} +\setlength\leftmarginiv {1.7em} +\setlength\leftmarginv {1em} +\setlength\leftmarginvi {1em} +% \end{macrocode} +% Here we set the top level leftmargin. +% \begin{macrocode} +\setlength\leftmargin {\leftmargini} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\labelsep} +% \begin{macro}{\labelwidth} +% |\labelsep| is the distance between the label and the text of an +% item; |\labelwidth| is the width of the label. +% \begin{macrocode} +\setlength \labelsep {5\p@} +\setlength \labelwidth{\leftmargini} +\addtolength\labelwidth{-\labelsep} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\partopsep} +% When the user leaves a blank line before the environment an extra +% vertical space of |\partopsep| is inserted, in addition to +% |\parskip| and |\topsep|. +% \begin{macrocode} +\setlength\partopsep{0\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@beginparpenalty} +% \begin{macro}{\@endparpenalty} +% These penalties are inserted before and after a list or paragraph +% environment. They are set to a bonus value to encourage page +% breaking at these points. +% \begin{macro}{\@itempenalty} +% This penalty is inserted between list items. +% \begin{macrocode} +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@listI} +% \begin{macro}{\@listi} +% |\@listI| defines top level and |\@listi| values of +% |\leftmargin|, |\parsep|, |\topsep|, and |\itemsep| +% +% \begin{macrocode} +\def\@listI{\setlength\leftmargin{\leftmargini}% + \setlength\parsep {0\p@}% + \setlength\topsep {.4em}% + \setlength\itemsep{.4em}} +\let\@listi\@listI +% \end{macrocode} +% We have to initialize these parameters. +% \begin{macrocode} +\@listi +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@listii} +% \begin{macro}{\@listiii} +% \begin{macro}{\@listiv} +% \begin{macro}{\@listv} +% \begin{macro}{\@listvi} +% Here are the same macros for the higher level lists. +% \begin{macrocode} +\def\@listii {\setlength \leftmargin{\leftmarginii}% + \setlength \labelwidth{\leftmarginii}% + \addtolength\labelwidth{-\labelsep}} +\def\@listiii{\setlength \leftmargin{\leftmarginiii}% + \setlength \labelwidth{\leftmarginiii}% + \addtolength\labelwidth{-\labelsep}% + \setlength \topsep {.2em}% + \setlength \itemsep {\topsep}} +\def\@listiv {\setlength \leftmargin{\leftmarginiv}% + \setlength \labelwidth{\leftmarginiv}% + \addtolength\labelwidth{-\labelsep}} +\def\@listv {\setlength \leftmargin{\leftmarginv}% + \setlength \labelwidth{\leftmarginv}% + \addtolength\labelwidth{-\labelsep}} +\def\@listvi {\setlength \leftmargin{\leftmarginvi}% + \setlength \labelwidth{\leftmarginvi}% + \addtolength\labelwidth{-\labelsep}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Enumerate} +% +% The enumerate environment uses four counters: \Lcount{enumi}, +% \Lcount{enumii}, \Lcount{enumiii} and \Lcount{enumiv}, where +% \Lcount{enumN} controls the numbering of the Nth level +% enumeration. +% +% \begin{macro}{\theenumi} +% \begin{macro}{\theenumii} +% \begin{macro}{\theenumiii} +% \begin{macro}{\theenumiv} +% The counters are already defined in the \LaTeX{} kernel +% (\file{ltlists.dtx}), but their representation is changed here. +% +% \begin{macrocode} +\renewcommand\theenumi{\@arabic\c@enumi} +\renewcommand\theenumii{\@alph\c@enumii} +\renewcommand\theenumiii{\@roman\c@enumiii} +\renewcommand\theenumiv{\@Alph\c@enumiv} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\labelenumi} +% \begin{macro}{\labelenumii} +% \begin{macro}{\labelenumiii} +% \begin{macro}{\labelenumiv} +% The commands |\labelenumi| ... |\labelenumiv| generate the label +% for each item. +% \begin{macrocode} +\newcommand\labelenumi{\theenumi.} +\newcommand\labelenumii{(\theenumii)} +\newcommand\labelenumiii{\theenumiii.} +\newcommand\labelenumiv{\theenumiv.} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\p@enumii} +% \begin{macro}{\p@enumiii} +% \begin{macro}{\p@enumiv} +% The expansion of |\p@enumN||\theenumN| defines the output of a +% |\ref| command when referencing an item of the Nth level of an +% enumerated list. +% \begin{macrocode} +\renewcommand\p@enumii{\theenumi} +\renewcommand\p@enumiii{\theenumi(\theenumii)} +\renewcommand\p@enumiv{\p@enumiii\theenumiii} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Itemize} +% +% \begin{macro}{\labelitemi} +% \begin{macro}{\labelitemii} +% \changes{v1.2h}{1994/05/06}{Inserted \cs{normalfont}} +% \changes{v1.2u}{1996/08/25}{replaced -{}- with \cs{textendash}} +% \begin{macro}{\labelitemiii} +% \begin{macro}{\labelitemiv} +% Itemization is controlled by |\labelitemi|, +% |\labelitemii|, |\labelitemiii|, and |\labelitemiv|, which define +% the labels of the various itemization levels: the symbols used are +% bullet, bold en-dash, asterisk and centered dot. +% +% \changes{v1.2n}{1994/07/11}{renamed \cs{labelitemiiii} to +% \cs{labelitemiii}} +% \changes{v1.2x}{1997/04/16}{Changed to \cs{textbullet}, +% \cs{textasteriskcentered} and \cs{textperiodcentered}} +% \begin{macrocode} +\newcommand\labelitemi{\textbullet} +\newcommand\labelitemii{\normalfont\bfseries \textendash} +\newcommand\labelitemiii{\textasteriskcentered} +\newcommand\labelitemiv{\textperiodcentered} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Description} +% +% \begin{environment}{description} +% The description environment is defined here -- while the itemize +% and enumerate environments are defined in the \LaTeX{} kernel +% (\file{ltlists.dtx}). +% +% \begin{macrocode} +\newenvironment{description} + {\list{}{\labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\descriptionlabel} +% To change the formatting of the label, you must redefine +% |\descriptionlabel|. +% +% \changes{v1.2q}{1995/03/14}{made command short} +% \begin{macrocode} +\newcommand*{\descriptionlabel}[1]{\hspace\labelsep + \normalfont\bfseries #1} +% \end{macrocode} +% \end{macro} +% +% \subsection{Defining new environments} +% +% \subsubsection{Verse} +% +% \begin{environment}{verse} +% The verse environment is defined by making clever use of the +% list environment's parameters. The user types |\\| to end a line. +% This is implemented by |\let|'ing |\\| equal |\@centercr|. +% +% \begin{macrocode} +\newenvironment{verse} + {\let\\=\@centercr + \list{}{\setlength\itemsep{\z@}% + \setlength\itemindent{-15\p@}% + \setlength\listparindent{\itemindent}% + \setlength\rightmargin{\leftmargin}% + \addtolength\leftmargin{15\p@}}% + \item[]} + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Quotation} +% +% \begin{environment}{quotation} +% The quotation environment is also defined by making clever use of +% the list environment's parameters. The lines in the environment +% are set smaller than |\textwidth|. The first line of a paragraph +% inside this environment is indented. +% +% \begin{macrocode} +\newenvironment{quotation} + {\list{}{\setlength\listparindent{1.5em}% + \setlength\itemindent{\listparindent}% + \setlength\rightmargin{\leftmargin}}% + \item[]} + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Quote} +% +% \begin{environment}{quote} +% The quote environment is like the quotation environment except +% that paragraphs are not indented. +% +% \begin{macrocode} +\newenvironment{quote} + {\list{}{\setlength\rightmargin{\leftmargin}}% + \item[]} + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{Theorem} +% +% This document class does not define it's own theorem environments, +% the defaults, supplied by the \LaTeX{} kernel (\file{ltthm.dtx}) +% are available. +% +% +% \subsection{Setting parameters for existing environments} +% +% \subsubsection{Array and tabular} +% +% \begin{macro}{\arraycolsep} +% The columns in an array environment are separated by +% 2|\arraycolsep|. +% \begin{macrocode} +\setlength\arraycolsep{5\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tabcolsep} +% The columns in an tabular environment are separated by +% 2|\tabcolsep|. +% \begin{macrocode} +\setlength\tabcolsep{6\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\arrayrulewidth} +% The width of vertical rules in the array and tabular environments +% is given by |\arrayrulewidth|. +% \begin{macrocode} +\setlength\arrayrulewidth{.4\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\doublerulesep} +% The space between adjacent rules in the array and tabular +% environments is given by |\doublerulesep|. +% \begin{macrocode} +\setlength\doublerulesep{2\p@} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Tabbing} +% +% \begin{macro}{\tabbingsep} +% This controls the space that the |\'| command puts in. (See +% \LaTeX{} manual for an explanation.) +% \begin{macrocode} +\setlength\tabbingsep{\labelsep} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Minipage} +% +% \begin{macro}{\@minipagerestore} +% The macro |\@minipagerestore| is called upon entry to a minipage +% environment to set up things that are to be handled differently +% inside a minipage environment. In the current styles, it does +% nothing. +% \end{macro} +% +% \begin{macro}{\@mpfootins} +% Minipages have their own footnotes; |\skip||\@mpfootins| plays +% same r\^ole for footnotes in a minipage as |\skip||\footins| does +% for ordinary footnotes. +% +% \begin{macrocode} +\skip\@mpfootins = \skip\footins +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Framed boxes} +% +% \begin{macro}{\fboxsep} +% The space left by |\fbox| and |\framebox| between the box and the +% text in it. +% \begin{macro}{\fboxrule} +% The width of the rules in the box made by |\fbox| and |\framebox|. +% \begin{macrocode} +\setlength\fboxsep{3\p@} +\setlength\fboxrule{.4\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{Equation and eqnarray} +% +% \begin{macro}{\theequation} +% The equation counter will be typeset using arabic numbers. +% \begin{macrocode} +\renewcommand\theequation{\@arabic\c@equation} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\jot} +% |\jot| is the extra space added between lines of an eqnarray +% environment. The default value is used. +% \begin{macrocode} +% \setlength\jot{3pt} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@eqnnum} +% The macro |\@eqnnum| defines how equation numbers are to appear in +% equations. Again the default is used. +% +% \begin{macrocode} +% \def\@eqnnum{(\theequation)} +% \end{macrocode} +% \end{macro} +% +% \subsection{Font changing} +% +% Here we supply the declarative font changing commands that were +% common in \LaTeX\ version 2.09 and earlier. These commands work +% in text mode \emph{and} in math mode. They are provided for +% compatibility, but one should start using the |\text...| and +% |\math...| commands instead. These commands are redefined using +% |\@renewfontswitch|, a command with three arguments: the user +% command to be defined; \LaTeX\ commands to execute in text mode +% and \LaTeX\ commands to execute in math mode. +% +% \begin{macro}{\rm} +% \begin{macro}{\tt} +% \begin{macro}{\sf} +% The commands to change the family. +% \changes{v1.0a}{1993/12/14}{Added compatibility mode support.} +% \changes{v1.1}{1993/12/18}{Changed \cs{@newfontswitch} to +% \cs{@renewfontswitch}, removed switch.} +% \changes{v1.2d}{1994/04/14}{\cs{@renewfontswitch} has become +% \cs{DeclareOldFontCommand}} +% \begin{macrocode} +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bf} +% The command to change to the bold series. One should use +% |\mdseries| to explicitly switch back to medium series. +% \changes{v1.0a}{1993/12/14}{Added compatibility mode support.} +% \changes{v1.1}{1993/12/18}{Changed \cs{@newfontswitch} to +% \cs{@renewfontswitch}, removed switch.} +% \begin{macrocode} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\sl} +% \begin{macro}{\it} +% \begin{macro}{\sc} +% +% And the commands to change the shape of the font. The slanted and +% small caps shapes are not available by default as math alphabets, +% so those changes do nothing in math mode. One should use +% |\upshape| to explicitly change back to the upright shape. +% \changes{v1.0a}{1993/12/14}{Added compatibility mode support.} +% \changes{v1.1}{1993/12/18}{Changed \cs{@newfontswitch} to +% \cs{@renewfontswitch}, removed switch.} +% \changes{v1.1b}{1993/12/20}{Added forgotten re.} +% \begin{macrocode} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\relax} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\relax} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cal} +% \changes{v1.0a}{1993/12/14}{Macro added} +% \begin{macro}{\mit} +% \changes{v1.0a}{1993/12/14}{Macro added} +% +% The commands |\cal| and |\mit| should only be used in math mode, +% outside math mode they have no effect. Currently the New Font +% Selection Scheme defines these commands to generate warning +% messages. Therefore we have to define them `by hand'. +% \changes{v1.2p}{1994/12/11}{Now define \cs{cal} and \cs{mit} using +% \cs{DeclareRobustCommand*}} +% \begin{macrocode} +\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}} +\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Footnotes} +% +% \begin{macro}{\footnoterule} +% Usually, footnotes are separated from the main body of the text +% by a small rule. This rule is drawn by the macro |\footnoterule|. +% We have to make sure that the rule takes no vertical space (see +% \file{plain.tex}) so we compensate for the natural height of the +% rule of 0.4pt by adding the right amount of vertical skip. +% +% To prevent the rule from colliding with the footnote we first add +% a little negative vertical skip, then we put the rule and make +% sure we end up at the same point where we begun this operation. +% \begin{macrocode} +\renewcommand\footnoterule{% + \kern-\p@ + \hrule \@width .4\columnwidth + \kern .6\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@footnote} +% A counter for footnotes. +% \begin{macrocode} +% \newcounter{footnote} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makefntext} +% \changes{v1.2c}{1994/03/08}{Always call \cs{@makefnmark}.} +% The footnote mechanism of \LaTeX{} calls the macro |\@makefntext| +% to produce the actual footnote. The macro gets the text of the +% footnote as its argument and should use |\@makefnmark| to produce +% the mark of the footnote. The macro |\@makefntext| is called when +% effectively inside a |\parbox| of width |\columnwidth| (i.e., +% with |\hsize| = |\columnwidth|). +% +% An example of what can be achieved is given by the following piece +% of \TeX\ code. +% \begin{verbatim} +% \long\def\@makefntext#1{% +% \@setpar{\@@par +% \@tempdima = \hsize +% \advance\@tempdima-10pt +% \parshape \@ne 10pt \@tempdima}% +% \par +% \parindent 1em\noindent +% \hb@xt@\z@{\hss\@makefnmark}#1} +% \end{verbatim} +% The effect of this definition is that all lines of the footnote +% are indented by 10pt, while the first line of a new paragraph is +% indented by 1em. To change these dimensions, just substitute the +% desired value for `10pt' (in both places) or `1em'. The mark is +% flush right against the footnote. +% +% In this document class we use a simpler macro, in which the +% footnote text is set like an ordinary text paragraph, with no +% indentation except on the first line of a paragraph, and the +% first line of the footnote. Thus, all the macro must do is set +% |\parindent| to the appropriate value for succeeding paragraphs +% and put the proper indentation before the mark. +% +% \begin{macrocode} +\long\def\@makefntext#1{% + \noindent + \hangindent 5\p@ + \hb@xt@5\p@{\hss\@makefnmark}#1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makefnmark} +% The footnote markers that are printed in the text to point to the +% footnotes should be produced by the macro |\@makefnmark|. We use +% the default definition for it. +% \begin{macrocode} +%\def\@makefnmark{\hbox{$^{\@thefnmark}\m@th$}} +% \end{macrocode} +% \end{macro} +% +% \subsection{Words} +% +% \begin{macro}{\ccname} +% \begin{macro}{\enclname} +% \begin{macro}{\pagename} +% \begin{macro}{\headtoname} +% This document class is for documents prepared in the English +% language. To prepare a version for another language, various +% English words must be replaced. All the English words that +% require replacement are defined below in command names. +% \begin{macrocode} +\newcommand*{\ccname}{cc} +\newcommand*{\enclname}{encl} +\newcommand*{\pagename}{Page} +\newcommand*{\headtoname}{To} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Date} +% +% \begin{macro}{\today} +% This macro uses the \TeX\ primitives |\month|, |\day| and |\year| +% to provide the date of the \LaTeX-run. +% \begin{macrocode} +\newcommand*{\today}{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} +% \end{macrocode} +% \end{macro} +% +% \subsection{Two column mode} +% +% \begin{macro}{\columnsep} +% This gives the distance between two columns in two column mode. +% \begin{macrocode} +\setlength\columnsep{10\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\columnseprule} +% This gives the width of the rule between two columns in two +% column mode. We have no visible rule. +% \begin{macrocode} +\setlength\columnseprule{0\p@} +% \end{macrocode} +% \end{macro} +% +% \subsection{The page style} +% We have \pstyle{plain} pages in this document class by +% default. We use arabic page numbers. +% \begin{macrocode} +\pagestyle{plain} +\pagenumbering{arabic} +% \end{macrocode} +% +% \subsection{Single or double sided printing} +% +% We don't try to make each page as long as all the others. +% \begin{macrocode} +\raggedbottom +% \end{macrocode} +% +% \begin{macro}{\@texttop} +% The document class letter sets |\@texttop| to |\vskip| 0pt +% \texttt{plus} .00006fil on the first page of a letter, which +% centers a short letter on the page. This fil value may have to be +% changed for other letterheads. This setting has to be done after +% |\raggedbottom| is executed, since the latter sets |\@texttop| to +% |\relax|. +% \begin{macrocode} +\def\@texttop{\ifnum\c@page=1\vskip \z@ plus.00006fil\relax\fi} +% \end{macrocode} +% \end{macro} +% +% We always start in one column mode. +% \begin{macrocode} +\onecolumn +%</letter> +% \end{macrocode} +% +% +% +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/base/letter.ins b/Master/texmf-dist/source/latex/base/letter.ins new file mode 100644 index 00000000000..c85d5ebdf77 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/letter.ins @@ -0,0 +1,101 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\Msg{*** Generating letter class file ***} + +\generateFile{letter.cls}{t}{ + \from{letter.dtx}{letter}} + + + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space letter.cls} +\Msg{*} +\Msg{* To produce the documentation run the file `letter.dtx'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} +} + +\endbatchfile + + + diff --git a/Master/texmf-dist/source/latex/base/ltalloc.dtx b/Master/texmf-dist/source/latex/base/ltalloc.dtx new file mode 100644 index 00000000000..62082152aa8 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltalloc.dtx @@ -0,0 +1,176 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltalloc.dtx +%<*driver> +% \fi +\ProvidesFile{ltalloc.dtx} + [1996/07/26 v1.1c LaTeX Kernel (allocation)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltalloc.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{33} +% +% \changes{v1.1a}{1994/05/16}{(ASAJ) Split from ltinit.dtx.} +% \changes{v1.1b}{1995/10/25}{General doc improvements} +% +% \section{Counters} +% +% This section deals with counter and other variable allocation. +% +% \StopEventually{} +% +% \begin{macrocode} +%<*2ekernel> +% \end{macrocode} +% +% The following are from plain \TeX: +% \begin{description} +% \item[\cs{z@}] A zero dimen or number. It's more efficient to write +% |\parindent\z@| than |\parindent 0pt|. +% \item[\cs{@ne}] The number 1. +% \item[\cs{m@ne}] The number $-1$. +% \item[\cs{tw@}] The number 2. +% \item[\cs{sixt@@n }] The number 16. +% \item[\cs{@m}] The number 1000. +% \item[\cs{@MM}] The number 20000. +% \end{description} +% +% \begin{macro}{\@xxxii} +% The constant $32$. +% \begin{macrocode} +\chardef\@xxxii=32 +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@Mi} +% \begin{macro}{\@Mii} +% \begin{macro}{\@Miii} +% \begin{macro}{\@miv} +% Constants $1001$--$1004$. +% \begin{macrocode} +\mathchardef\@Mi=10001 +\mathchardef\@Mii=10002 +\mathchardef\@Miii=10003 +\mathchardef\@Miv=10004 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \changes{v1.0d}{1994/03/28} +% {Redefinition of `new' allocations removed.} +% +% \begin{macro}{\@tempcnta} +% \begin{macro}{\@tempcntb} +% Scratch count registers used by \LaTeX\ kernel commands. +% \begin{macrocode} +\newcount\@tempcnta +\newcount\@tempcntb +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\if@tempswa} +% General boolean switch used by \LaTeX\ kernel commands. +% \begin{macrocode} +\newif\if@tempswa +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@tempdima} +% \begin{macro}{\@tempdimb} +% \begin{macro}{\@tempdimc} +% Scratch dimen registers used by \LaTeX\ kernel commands. +% \begin{macrocode} +\newdimen\@tempdima +\newdimen\@tempdimb +\newdimen\@tempdimc +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@tempboxa} +% Scratch box register used by \LaTeX\ kernel commands. +% \begin{macrocode} +\newbox\@tempboxa +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@tempskipa} +% \begin{macro}{\@tempskipb} +% Scratch skip registers used by \LaTeX\ kernel commands. +% \begin{macrocode} +\newskip\@tempskipa +\newskip\@tempskipb +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@temptokena} +% Scratch token register used by \LaTeX\ kernel commands. +% \begin{macrocode} +\newtoks\@temptokena +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@flushglue} +% Glue used for |\right|- \& |\leftskip| = 0pt plus 1fil +% \begin{macrocode} +\newskip\@flushglue \@flushglue = 0pt plus 1fil +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel> +% \end{macrocode} +% +% \Finale +\endinput diff --git a/Master/texmf-dist/source/latex/base/ltbibl.dtx b/Master/texmf-dist/source/latex/base/ltbibl.dtx new file mode 100644 index 00000000000..d4957026a72 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltbibl.dtx @@ -0,0 +1,407 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%%% From File: ltbibl.dtx +% +%<*driver> +% \fi +\ProvidesFile{ltbibl.dtx} + [2004/02/15 v1.1q LaTeX Kernel (Bibliography)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltbibl.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} + +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{174} +% +% \section{Bibliography Generation} +% +% A bibliography is created by the |thebibliography| environment, which +% generates a title such as ``References'', and a list of entries. +% The BIB\TeX{} program will create a file containing such an +% environment, which will be read in by the |\bibliography| command. +% With BIB\TeX, the following commands will be used. +% +% \DescribeMacro{\bibliography} +% |\bibliography|\marg{file1,file2, \ldots ,filen} : specifies +% the bibdata files. Writes a |\bibdata| entry on the |.aux| file +% and tries to read in |mainfile.bbl|. +% +% \DescribeMacro{\bibliographystyle} +% |\bibliographystyle|\marg{style} : +% Writes a |\bibstyle| entry on the |.aux| file. +% +% \DescribeEnv{thebibliography} +% The |thebibliography| environment is a list environment. To save the +% use of an extra counter, it should use |enumiv| as the item +% counter. +% Instead of using |\item|, items in the bibliography are produced by +% the following commands:\\ +% |\bibitem|\marg{name} : Produces a numbered entry cited as +% \meta{name}.\\ +% |\bibitem|\oarg{label}\marg{name} : Produces an entry labeled by +% \meta{Label} and cited by \meta{name}. +% +% The former is used for bibliographies with citations like [1], [2], +% etc.; +% the latter is used for citations like [Knuth82]. +% +% The document class must define the thebibliography environment. This +% environment has a single argument, which is the widest bibliography +% label-- e.g., if the [Knuth67] is the widest entry, then this +% argument will be Knuth67. The |\thebibliography| command must begin +% a list environment, which the |\endthebibliography| command ends. +% +% \DescribeMacro{\cite} +% Entries are cited by the command |\cite|\marg{name}. +% +% \DescribeMacro{\nocite} +% |\nocite|\marg{citations} +% puts information on the |.aux| file that causes +% \BibTeX{} to include the \marg{citations} list in the bibliography, +% but puts nothing in the text. +% +% |\nocite{*}| is special: it tells \BibTeX{} to put the whole of a +% collection of references into the bibiography. +% +% \StopEventually{} +% +% +% \changes{v1.0a}{1994/03/31}{Initial version of ltidxbib.dtx, +% split from ltherest.dtx} +% \changes{v1.1a}{1994/05/19}{Initial version of ltbibl.dtx, +% split from ltidxbib.dtx} +% \changes{v1.1b}{1994/05/21}{Use new warning commands} +% \changes{v1.1c}{1994/11/10}{Fix \cs{nocite\{*\}}} +% +% \begin{macrocode} +%<*2ekernel> +\message{bibliography,} +% \end{macrocode} +% +% +% \begin{oldcomments} +% PARAMETERS +% +% \@cite : A macro such that \@cite{LABEL1,LABEL2}{NOTE} +% produces the output for a \cite[NOTE]{FOO1,FOO2} command, +% where entry FOOi is defined by \bibitem[LABELi]{FOOi}. +% The switch @tempswa is true if the optional NOTE argument +% is present. +% The default definition is : +% \@cite{LABELS}{NOTE} == +% BEGIN [LABELS +% IF @tempswa = T THEN , NOTE FI +% ] +% END +% +% \@biblabel : A macro to produce the label in the bibliography +% entry. For \bibitem[LABEL]{NAME}, the label is +% generated by \@biblabel{LABEL}. It has the default +% definition \@biblabel{LABEL} -> [LABEL]. +% CONVENTION +% +% \b@FOO : The name or number of the reference created by \cite{FOO} +% E.g., if \cite{FOO} -> [17] , then \b@FOO -> 17. +% +% \end{oldcomments} +% +% \begin{macro}{\bibitem} +% \changes{v1.1g}{1995/05/08}{Removed unnecessary braces} +% \begin{macrocode} +\def\bibitem{\@ifnextchar[\@lbibitem\@bibitem} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@lbibitem} +% \changes{LaTeX2.09}{1992/02/26}{Added \cs{hfill} to restore +% left-alignment of bibliography labels in alpha style} +% \begin{macrocode} +\def\@lbibitem[#1]#2{\item[\@biblabel{#1}\hfill]\if@filesw + {\let\protect\noexpand + \immediate + \write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@bibitem} +% \changes{LaTeX2.09}{1991/11/13}{Changed counter enumi to enumiv, +% as it says in the comment above} +% \changes{LaTeX2.09}{1992/01/10}{Changed \cs{c@enumiv} to \cs{value} +% of \cs{@listctr}} +% \begin{macrocode} +\def\@bibitem#1{\item\if@filesw \immediate\write\@auxout + {\string\bibcite{#1}{\the\value{\@listctr}}}\fi\ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bibcite} +% \changes{v1.1f}{1995/04/24} +% {Make \cs{@onlypreamble} /1388.} +% \changes{v1.1h}{1995/06/19} +% {Call \cs{@newl@bel} so repeated keys produce better warning.} +% \changes{v1.1i}{1995/07/14} +% {Remove \cs{@onlypreamble} so still defined in new \cs{enddocument}} +% \begin{macrocode} +\def\bibcite{\@newl@bel b} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\citation} +% \begin{macrocode} +\let\citation\@gobble +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\cite} +% \changes{v1.1j}{1995/10/16}{(DPC) Make robust} +% \begin{macrocode} +\DeclareRobustCommand\cite{% + \@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@citex} +% |\penalty\@m| added to definition of |\@citex| to allow a line +% break after the `,' in citations like [Jones80,Smith77] +% (Added 23 Oct 86) +% +% space added after the `,' (21 Nov 87) +% +% \changes{LaTeX2.09}{1991/10/25} +% {added \cs{reset@font}, suggested by Bernd Raichle.} +% \changes{LaTeX2.09}{1991/11/06} +% {added code to remove a leading blank} +% \changes{LaTeX2.09}{1992/08/14} +% {added missing argument braces around \cs{hbox}, +% found by Ed Sznyter} +% \changes{LaTeX2.09}{1992/08/17} +% {simplified code for removing leading blanks in +% citation key (proposed by Frank Jensen and +% Kresten Krab Thorup)} +% \changes{LaTeX2.09}{1993/08/06} +% {Moved writing to .aux file in loop over citation keys +% so that leading blanks are removed there as well.} +% \changes{v1.0c}{1994/05/05}{Set switch for warning and end of run.} +% \changes{v1.1e}{1995/04/24} +% {Add \cs{mbox} to undefined case: latex/1239.} +% \changes{v1.1g}{1995/05/08}{Use \cs{@firstofone}} +% \changes{v1.1k}{1995/10/20}{Removed refundefined flag} +% \changes{v1.1l}{1995/12/07}{Restored name of \cs{G@refundefinedtrue}} +% \changes{v1.1m}{1997/04/24}{\cs{\@empty} to avoid primitive +% error on empty cite keys. latex/2432} +% \changes{v1.1n}{2002/12/13}{Added \cs{leavevmode} in case citation +% is at start of paragraph (pr/3486)} +% \begin{macrocode} +\def\@citex[#1]#2{\leavevmode + \let\@citea\@empty + \@cite{\@for\@citeb:=#2\do + {\@citea\def\@citea{,\penalty\@m\ }% + \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}% + \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi +% \end{macrocode} +% Using |\hbox| instead of |\mbox| is fine because of the +% |\leavevmode| above. In fact the use of a box around the citation +% contents is more than questionable in my view (FMi), but within +% 2e I have to keep that for compatibility reasons as it would +% probably change too many existing documents. Its main reason is +% to avoid hyphenation of labels such as [FOOB89] into [FOO- B89] +% so in certain styles it makes sense; but, for example, in author +% year citations it becomes more than questionable. +% +% So Chris added yet another hook here, as suggested by, at least, +% Donald Arsenau. Note that this one is inside the first argument +% of the |\@cite| hook. +% This decouples the top-level typesetting of the citation from +% the details of the other business conducted here. All this really +% needs a complete rethink to get the right modularity. +% +% \changes{v1.1q}{2004/02/15}{Changed to use a hook with default +% value \cs{hbox}} +% \begin{macrocode} + \@ifundefined{b@\@citeb}{\hbox{\reset@font\bfseries ?}% + \G@refundefinedtrue + \@latex@warning + {Citation `\@citeb' on page \thepage \space undefined}}% + {\@cite@ofmt{\csname b@\@citeb\endcsname}}}}{#1}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\bibdata} +% \begin{macro}{\bibstyle} +% \begin{macrocode} +\let\bibdata=\@gobble +\let\bibstyle=\@gobble +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\bibliography} +% \changes{LaTeX2e}{1994/01/18} +% {Use \cs{@input@} so include files are listed.} +% \begin{macrocode} +\def\bibliography#1{% + \if@filesw + \immediate\write\@auxout{\string\bibdata{#1}}% + \fi + \@input@{\jobname.bbl}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bibliographystyle} +% \changes{v1.1d}{1994/12/09}{(DPC) Allow use in preamble.} +% \begin{macrocode} +\def\bibliographystyle#1{% + \ifx\@begindocumenthook\@undefined\else + \expandafter\AtBeginDocument + \fi + {\if@filesw + \immediate\write\@auxout{\string\bibstyle{#1}}% + \fi}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\nocite} +% (Added 14 Jun 85) +% \changes{v1.1c}{1994/11/10}{Fix \cs{nocite\{*\}}} +% +% This puts information on the |.aux| file that causes +% \BibTeX{} to include the citation list in the bibliography, +% but puts nothing in the text. +% +% RmS 93/08/06: Made loop for |\nocite| like that for |\@citex|, +% to get rid of leading spaces. +% \changes{v1.0b}{1994/05/03}{Make \cs{nocite} issue a warning +% for an undefined citation key.} +% \changes{v1.0c}{1994/05/05}{Do not write page number in +% \cs{nocite} warning message.} +% \changes{v1.0c}{1994/05/05}{Set switch for warning and end of run.} +% \changes{v1.1g}{1995/05/08}{Use \cs{@firstofone}} +% \changes{v1.1k}{1995/10/20}{Removed refundefined flag} +% \begin{macrocode} +\def\nocite#1{\@bsphack +% \end{macrocode} +% With the implementation designed already in \LaTeX\,2.09 the +% |\nocite| command will not work before |\begin{document}| since +% it tries to write to the |.aux| file which is not open before +% that point. As a result the ``reference'' will appear on the +% terminal and nothing else will happen. +% +% This would be easy to fix, but then a document using the fix will +% silently fail on an older release of \LaTeX{}, missing all +% citations done with |\nocite|. Thus we do only generate an error +% message and leave the fix for a \LaTeXe{} successor. +% +% \changes{v1.1o}{2003/05/18}{Check if we are after \cs{document}} +% \changes{v1.1p}{2004/01/04}{Changed error message} +% \begin{macrocode} + \ifx\@onlypreamble\document +% \end{macrocode} +% Since we are after |\begin{document}| we can do the citations: +% \begin{macrocode} + \@for\@citeb:=#1\do{% + \edef\@citeb{\expandafter\@firstofone\@citeb}% + \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi + \@ifundefined{b@\@citeb}{\G@refundefinedtrue + \@latex@warning{Citation `\@citeb' undefined}}{}}% + \else +% \end{macrocode} +% But before |\begin{document}| we raise an error message: +% \begin{macrocode} + \@latex@error{Cannot be used in preamble}\@eha +% \end{macrocode} +% Without the compatibility problems we could fix the problem as follows: +% \begin{macrocode} + % \AtBeginDocument{\nocite{#1}} + \fi + \@esphack} +% \end{macrocode} +% Since |\nocite{*}| should not produce a warning about undefined +% citation keys (seee PR 557), we need to set the control sequence +% `|\b@*|' to something other than |\relax|. As a result |\cite{*}| +% will not warn either (but that never worked with \BibTeX{} in the +% first place). +% \begin{macrocode} +\expandafter\let\csname b@*\endcsname\@empty +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Default definitions} +% +% This hook determines the `relative formatting' of the two logical +% parts of a citation with comment. +% \begin{macro}{\@cite} +% \begin{macrocode} +\def\@cite#1#2{[{#1\if@tempswa , #2\fi}]} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@cite@ofmt} +% \changes{v1.1q}{2004/02/15}{Added hook with default value \cs{hbox}} +% This is, in general, a command that appears to have one argument +% whose value is, in the kernel, a single cs whose name is the +% expansion of |b@\@citeb|; the expansion of this cs will +% typically be some hmode material that produces the detailed +% typeset form of just the citations themselves. +% \begin{macrocode} +\let\@cite@ofmt\hbox +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@biblabel} +% \changes{LaTeX2.09}{1992/01/14}{removed \cs{hfill}} +% \begin{macrocode} +\def\@biblabel#1{[#1]} +%</2ekernel> +% \end{macrocode} +% \end{macro} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltboxes.dtx b/Master/texmf-dist/source/latex/base/ltboxes.dtx new file mode 100644 index 00000000000..b838ef47684 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltboxes.dtx @@ -0,0 +1,1174 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltboxes.dtx +% +%<*driver> +% \fi +\ProvidesFile{ltboxes.dtx} + [1999/04/27 v1.1f LaTeX Kernel (Box Commands)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltboxes.dtx} +\title{\filename} +\date{\filedate} +\author{David Carlisle\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley} +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{757} +% +% \changes{v1.1e}{1998/08/17}{(RmS) Minor Documentation fixes.} +% \section{\LaTeX\ Box commands} +% +% +% \DescribeMacro\makebox +% |\makebox[|\meta{wid}|][|\meta{pos}|]{|\meta{obj}|}|\\ +% Puts \meta{obj} in an |\hbox| of width \meta{wid}, positioned by +% \meta{pos}. +% +% The possible \meta{pos} are:\\ +% \begin{tabular}{ll} +% |s| stretched,\\ +% |l| flushleft,\\ +% |r| flushright,\\ +% |c| (default) centred. +% \end{tabular} +% +% If \meta{wid} is missing, then \meta{pos} is also missing and +% \meta{obj} is put in an |\hbox| of its natural width. +% +% |\makebox(|\meta{x}|,|\meta{y}|)[|\meta{pos}|]{|\meta{obj}|}|\\ +% Puts \meta{obj} in an |\hbox| of width $x * |\unitlength|$ +% and height $y * |\unitlength|$. +% \meta{pos} arguments are +% |s|, |l|, |r| or |c| (default) for stretched, flushleft, flushright +% or centred, and |t| or |b| +% for top, bottom -- or combinations like |tr| or |rb|. +% Default for horizontal and vertical are centered. +% Note that in this picture mode version of |\makebox| a [b] aligns on +% the \emph{bottom} of the text as documented. If you want to align on +% the \emph{baseline} use +% |\makebox( , )[b]{\raisebox{0pt}[\height][0pt]{xyz}}}| +% or |\makebox( , )[b]{\smash{xyz}}| +% +% \DescribeMacro\mbox +% |\mbox{|\meta{obj}|}| The same as |\makebox{|\meta{obj}|}|, but is +% more efficient as no checking for optional arguments is done. +% +% \DescribeMacro\newsavebox +% |\newsavebox{\cmd}| : If |\cmd| is undefined, then defines it +% to be a \TeX\ box register. +% +% \DescribeMacro\savebox +% |\savebox{\cmd}| ... : |\cmd| is defined to be a \TeX\ box register, +% and the '...' are any |\makebox| arguments. It is +% like |\makebox|, except it doesn't produce text but +% saves the value in |\box| |\cmd|. +% +% \DescribeMacro\sbox +% |\sbox{|\meta{cmd}|}{|\meta{obj}|}| is an efficient abbreviation for\\ +% |\savebox{|\meta{cmd}|}{|\meta{obj}|}|. +% +% \DescribeEnv{lrbox} +% |\begin{lrbox}{|\meta{cmd}|}|\meta{text}|\end{lrbox}| is equivalent +% to\\ +% |\sbox{|\meta{cmd}|}{|\meta{text}|}|\\ +% except that any white space at the beginning and end of \meta{text} +% is ignored. +% +% \DescribeMacro\framebox +% |\framebox| ... : like |\makebox|, except it puts a `frame' around +% the box. The frame is made of lines of thickness +% |\fboxrule|, separated by space |\fboxsep| from the +% text -- except for |\framebox(X,Y)| ... , where the +% thickness of the lines is as for the picture environment, +% and there is no separation added. +% +% \DescribeMacro\fbox +% |\fbox{|\meta{obj}|}| is an abbreviation for +% |\framebox{|\meta{obj}|}|. +% +% \DescribeMacro\parbox +% |\parbox[|\meta{pos}|][|\meta{height}|][|\meta{inner-pos}|]{|^^A +% \meta{width}|}{|\meta{text}|}| : +% Makes a box with |\hsize| \meta{width}, positioned by \meta{pos} as +% follows: +% c : |\vcenter| (placed in |$...$| if not in math mode) +% b : |\vbox| +% t : |\vtop| +% default value is c. +% Sets |\hsize| := \meta{width} and calls |\@parboxrestore|, which +% does the following: +% Restores the original definitions of: +% +% \begin{tabular}{l} +% |\par|\\ +% |\\|\\ +% |\-|\\ +% |\'|\\ +% | \`|\\ +% |\=| +% \end{tabular} +% +% Resets the following parameters: +% +% \begin{tabular}{l@{\quad=\quad}ll} +% |\parindent| & 0pt \\ +% |\parskip| & 0pt & added 20 Jan 87\\ +% |\linewidth| & |\hsize|\\ +% |\@totalleftmargin| & 0pt\\ +% |\leftskip| & 0pt\\ +% |\rightskip| & 0pt\\ +% |\@rightskip| & 0pt\\ +% |\parfillskip| & 0pt plus 1fil\\ +% |\lineskip| & |\normallineskip|\\ +% |\baselineskip| & |\normalbaselineskip| +% \end{tabular} +% +% Calls |\sloppy| +% +% Note: |\@arrayparboxrestore| same as |\@parboxrestore| +% but it doesn't restore |\\|. +% +% \DescribeEnv{minipage} +% |minipage| : Similar to |\parbox|, except it also +% makes this look like a page by setting +% +% |\textwidth| == |\columnwidth| == box width +% +% changes footnotes by redefining:\\% +% |\@mpfn| == mpfootnote \\ +% |\thempfn| == |\thempfootnote|\\ +% |\@footnotetext| == |\@mpfootnotetext| +% +% resets the following list environment parameters:\\ +% |\@listdepth| == |\@mplistdepth|\\ +% where |\@mplistdepth| is initialized to zero, +% +% and executes |\@minipagerestore| to allow the document +% style to reset any other parameters it desires. +% It sets |@minipage| true, and resets |\everypar| to set +% it false. This switch keeps |\addvspace| from putting space +% at the top of a minipage. +% +% Change added 24 May 89: |\minipage| sets |@minipage| globally; +% |\endminipage| resets it false. +% +% +% \DescribeMacro\rule +% |\rule[|\meta{raised}|]{|\meta{width}|}{|\meta{height}|}| : +% Makes a $\meta{width}*\meta{height}$ rule, raised \meta{raised}. +% +% \DescribeMacro\underline +% |\underline{|\meta{text}|}| : Makes an underlined hbox with +% \meta{text} in it. +% +% \DescribeMacro\raisebox +% |\raisebox{|\meta{distance}|}[|\meta{height}|][|\meta{depth}^^A +% |]{|\meta{box}|}| :\\ +% Raises \meta{box} up by \meta{distance} length (down if +% \meta{distance} negative). Makes \TeX\ think that the new box extends +% \meta{height} above the line and \meta{depth} below, for a total +% vertical length of \meta{height}+\meta{depth}. Default values of +% \meta{height} \& \meta{depth} = actual height and depth of box in new +% position. +% +% \StopEventually{} +% +% \changes{v0.1e}{1994/03/02}{Remove need for drv file} +% \changes{v0.1e}{1994/03/02}{Add 2ekernel module} +% \changes{v1.0a}{1994/03/07}{Unify format with other Kernel files} +% \changes{v1.0f}{1994/05/11} +% {Superfluous braces removed from several commands} +% \changes{v1.0j}{1994/10/18} +% {stuff from ltpatch done} +% \changes{v1.0p}{1994/11/09} +% {more colour changes\ldots} +% \changes{v1.0q}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% \changes{v1.0t}{1995/05/07}{Use \cs{hb@xt@}} +% \changes{v1.0w}{1995/10/16}{Clarify makebox description} +% \begin{macrocode} +%<*2ekernel> +\message{boxes,} +% \end{macrocode} +% +% \begin{macro}{\makebox} +% \changes{v0.1a}{1993/12/03} +% {modified} +% |\makebox| User level command just looks for optional |[| or |(|. +% \begin{macrocode} +\def\makebox{% + \leavevmode + \@ifnextchar(%) + \@makepicbox + {\@ifnextchar[\@makebox\mbox}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\mbox} +% \changes{v0.1a}{1993/12/03} +% {extra group} +% \changes{v1.0j}{1994/10/18} +% {\cs{long} added} +% The basic horizontal box command for \LaTeX. +% \begin{macrocode} +\long\def\mbox#1{\leavevmode\hbox{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makebox} +% \changes{v0.1a}{1993/12/03} +% {default changed from x to c} +% Look for a possible second optional argument (defaults to |c|). +% \begin{macrocode} +\def\@makebox[#1]{% + \@ifnextchar [{\@imakebox[#1]}{\@imakebox[#1][c]}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@begin@tempboxa} +% \changes{v0.1a}{1993/12/03} +% {macro added} +% \changes{v0.1b}{1993/12/08} +% {Extra braces for color support +% (braces removed from other macros)} +% \changes{v1.0f}{1994/05/11} +% {Use new \cs{color@setgroup} concept.} +% Helper macro for supporting |\height|, |\width| etc. Grab |#1| into +% |\@tempboxa| and measure it. +% \begin{macrocode} +\long\def\@begin@tempboxa#1#2{% + \begingroup + \setbox\@tempboxa#1{\color@begingroup#2\color@endgroup}% + \def\width{\wd\@tempboxa}% + \def\height{\ht\@tempboxa}% + \def\depth{\dp\@tempboxa}% + \let\totalheight\@ovri + \totalheight\height + \advance\totalheight\depth} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@end@tempboxa} +% \changes{v0.1a}{1993/12/03} +% {macro added} +% End the group started by |\@begin@tempboxa|, so that the scope of +% |\height| only includes the `length' argument to the user-command. +% \begin{macrocode} +\let\@end@tempboxa\endgroup +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bm@c} +% \begin{macro}{\bm@l} +% \begin{macro}{\bm@r} +% \begin{macro}{\bm@s} +% \begin{macro}{\bm@t} +% \begin{macro}{\bm@b} +% \changes{v0.1a}{1993/12/03} +% {macros added} +% Set up spacing. +% \begin{macrocode} +\def\bm@c{\hss\unhbox\@tempboxa\hss} +\def\bm@l{\unhbox\@tempboxa\hss}\let\bm@t\bm@l +\def\bm@r{\hss\unhbox\@tempboxa}\let\bm@b\bm@r +\def\bm@s{\unhbox\@tempboxa} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@imakebox} +% \changes{v0.1a}{1993/12/03} +% {macro modified} +% Internal form of |\makebox|. +% \begin{macrocode} +\long\def\@imakebox[#1][#2]#3{% + \@begin@tempboxa\hbox{#3}% + \setlength\@tempdima{#1}% support calc + \hb@xt@\@tempdima{\csname bm@#2\endcsname}% + \@end@tempboxa} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makepicbox} +% \changes{v0.1a}{1993/12/03} +% {macro modified} +% Picture mode form of |\makebox|. +% \begin{macrocode} +\def\@makepicbox(#1,#2){% + \@ifnextchar[{\@imakepicbox(#1,#2)}{\@imakepicbox(#1,#2)[]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@imakepicbox} +% picture mode version +% \begin{macrocode} +\long\def\@imakepicbox(#1,#2)[#3]#4{% + \vbox to#2\unitlength + {\let\mb@b\vss \let\mb@l\hss\let\mb@r\hss + \let\mb@t\vss + \@tfor\reserved@a :=#3\do{% + \if s\reserved@a + \let\mb@l\relax\let\mb@r\relax + \else + \expandafter\let\csname mb@\reserved@a\endcsname\relax + \fi}% + \mb@t + \hb@xt@ #1\unitlength{\mb@l #4\mb@r}% + \mb@b +% \end{macrocode} +% This kern ensures that a |b| option aligns on the bottom of the +% text rather than the baseline. this is the documented behaviour in +% the \LaTeX Book. The kern is removed in compatibility mode. +% \begin{macrocode} + \kern\z@}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\set@color} +% \changes{v0.1a}{1993/12/03} +% {macro added} +% \changes{v0.1a}{1993/12/03} +% {color support} +% This macro is initialy a no-op, but the colour package will redefine +% it to insert a |\special|. +% \begin{macrocode} +\let\set@color\relax +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\color@begingroup} +% \changes{v1.0b}{1994/03/14} +% {macro added for colour support} +% \begin{macro}{\color@endgroup} +% \changes{v1.0b}{1994/03/14} +% {macro added for colour support} +% \begin{macro}{\color@setgroup} +% \changes{v1.0f}{1994/05/11} +% {macro added for colour support} +% \begin{macro}{\normalcolor} +% \changes{v1.0g}{1994/05/12} +% {macro added for colour support} +% \begin{macro}{\color@hbox} +% \changes{v1.0n}{1994/11/05} +% {macro added for colour support} +% \begin{macro}{\color@vbox} +% \changes{v1.0r}{1994/11/18} +% {macro added for colour support} +% \begin{macro}{\color@endbox} +% \changes{v1.0n}{1994/11/05} +% {macro added for colour support} +% These macros are initialy a no-op, but the colour package will +% redefine them to be |\begingroup|, |\endgroup|, +% |\begingroup\set@color|,\\ |\hbox\bgroup\color@begingroup|, +% |\color@endgroup\egroup|. +% and \meta{set to main document colour} respectively. +% \begin{macrocode} +\let\color@begingroup\relax +\let\color@endgroup\relax +\let\color@setgroup\relax +\let\normalcolor\relax +\let\color@hbox\relax +\let\color@vbox\relax +\let\color@endbox\relax +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\newsavebox} +% \changes{v0.1a}{1993/12/03} +% {Pass the whole of arg 1 to \cs{@ifdefinable}} +% Allocate a new `savebox'. +% \begin{macrocode} +\def\newsavebox#1{\@ifdefinable{#1}{\newbox#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\savebox} +% Save |#1| in a box register. +% \begin{macrocode} +\def\savebox#1{% + \@ifnextchar(%) + {\@savepicbox#1}{\@ifnextchar[{\@savebox#1}{\sbox#1}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\sbox} +% \changes{v0.1a}{1993/12/03} +% {extra group} +% \changes{v0.1a}{1993/12/03} +% {color support} +% \changes{v1.0b}{1994/03/14} +% {Use \cs{color@setgroup}} +% \changes{v1.0j}{1994/10/18} +% {\cs{long} added} +% Save |#1| in a box register. +% \begin{macrocode} +\long\def\sbox#1#2{\setbox#1\hbox{% + \color@setgroup#2\color@endgroup}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@savebox} +% \changes{v0.1a}{1993/12/03} +% {default c not x} +% Look for second optional argument. +% \begin{macrocode} +\def\@savebox#1[#2]{% + \@ifnextchar [{\@isavebox#1[#2]}{\@isavebox#1[#2][c]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@isavebox} +% \changes{v0.1a}{1993/12/03} +% {extra group} +% \changes{v0.1a}{1993/12/03} +% {color support} +% \changes{v1.0b}{1994/03/14} +% {Use \cs{color@setgroup}} +% \changes{v1.0d}{1994/04/15} +% {Added missing precent character.} +% \changes{v1.0v}{1995/07/20} +% {Use \cs{sbox}} +% \begin{macrocode} +\long\def\@isavebox#1[#2][#3]#4{% + \sbox#1{\@imakebox[#2][#3]{#4}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@savepicbox} +% Picture mode version of |\savebox|. +% \begin{macrocode} +\def\@savepicbox#1(#2,#3){% + \@ifnextchar[%] + {\@isavepicbox#1(#2,#3)}{\@isavepicbox#1(#2,#3)[]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@isavepicbox} +% \changes{v0.1a}{1993/12/03} +% {extra group} +% \changes{v1.0b}{1994/03/14} +% {Use \cs{color@setgroup}} +% \changes{v1.0l}{1994/10/25} +% {missing percent (moved from ltpatch)} +% \changes{v1.0v}{1995/07/20} +% {Use \cs{sbox}} +% Picture mode version of |\savebox|. +% \begin{macrocode} +\long\def\@isavepicbox#1(#2,#3)[#4]#5{% + \sbox#1{\@imakepicbox(#2,#3)[#4]{#5}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\lrbox} +% \changes{v0.1a}{1993/12/03} +% {macro added} +% \changes{v0.1a}{1993/12/03} +% {color support} +% \changes{v0.1b}{1993/12/08} +% {move \cs{@endpefalse} out of the inner group} +% \changes{v1.0b}{1994/03/14} +% {Use \cs{color@setgroup}} +% |lrbox|: the new environment form of |\sbox|. Use |\aftergroup| tricks +% to enable a \emph{local} assignment to be made to the box, in a way +% that it still has an effect \emph{outside} the |lrbox| environment. +% \begin{macrocode} +\def\lrbox#1{% + \edef\reserved@a{% + \endgroup + \setbox#1\hbox{% + \begingroup\aftergroup}% + \def\noexpand\@currenvir{\@currenvir}% + \def\noexpand\@currenvline{\on@line}}% + \reserved@a + \@endpefalse + \color@setgroup + \ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\endlrbox} +% \changes{v0.1a}{1993/12/03} +% {macro added} +% End the |lrbox| environment. +% \begin{macrocode} +\def\endlrbox{\unskip\color@endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\usebox} +% unchanged +% \begin{macrocode} +\def\usebox#1{\leavevmode\copy #1\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\frame} +% +% The following definition of |\frame| was written by Pavel Curtis +% (Extra space removed 14 Jan 88) +% RmS 92/08/24: Replaced occurence of |\@halfwidth| by |\@wholewidth| +% \begin{macrocode} +\long\def\frame#1{% + \leavevmode + \hbox{% + \hskip-\@wholewidth + \vbox{% + \vskip-\@wholewidth + \hrule \@height\@wholewidth + \hbox{% + \vrule\@width\@wholewidth + #1% + \vrule\@width\@wholewidth}% + \hrule\@height\@wholewidth + \vskip-\@wholewidth}% + \hskip-\@wholewidth}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fboxrule} +% \begin{macro}{\fboxsep} +% user level parameters, +% \begin{macrocode} +\newdimen\fboxrule +\newdimen\fboxsep +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\fbox} +% Abbreviated framed box command. +% \changes{v0.1a}{1993/12/03} +% {extra group} +% \changes{v1.0g}{1994/05/12} +% {New definition, merged with \cs{framebox}} +% \changes{v1.0i}{1994/06/01} +% {New version, using \cs{@frameb@x}} +% \changes{v1.0j}{1994/10/18} +% {\cs{long} added} +% \changes{v1.0k}{1994/10/24} +% {Inner braces added (to fix latex/1061)} +% \changes{v1.0s}{1995/04/27} +% {Move \cs{leavevmode} for graphics/1512} +% \begin{macrocode} +\long\def\fbox#1{% + \leavevmode + \setbox\@tempboxa\hbox{% + \color@begingroup + \kern\fboxsep{#1}\kern\fboxsep + \color@endgroup}% + \@frameb@x\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\framebox} +% Framed version of |\makebox|. +% \changes{v1.0g}{1994/05/12} +% {Merged \cs{fbox} and \cs{framebox}} +% \changes{v1.0i}{1994/06/01} +% {New version, so \cs{width} is correct in \cs{framebox}} +% \begin{macrocode} +\def\framebox{% + \@ifnextchar(%) + \@framepicbox{\@ifnextchar[\@framebox\fbox}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@framebox} +% Deal with optional arguments. +% \begin{macrocode} +\def\@framebox[#1]{% + \@ifnextchar[%] + {\@iframebox[#1]}% + {\@iframebox[#1][c]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@iframebox} +% The handling the optional arguments. +% \changes{v1.0i}{1994/06/01} +% {New version, so \cs{width} is correct in \cs{framebox}} +% \changes{v1.0j}{1994/10/18} +% {\cs{leavevmode} moved to \cs{@frameb@x}} +% \changes{v1.0s}{1995/04/27} +% {Move \cs{leavevmode} for graphics/1512} +% In order to set the whole box, including the frame to the +% specified dimension, we first determine that dimension +% from the natural size of the text, |#3|. +% calculated width. +% \begin{macrocode} +\long\def\@iframebox[#1][#2]#3{% + \leavevmode + \@begin@tempboxa\hbox{#3}% + \setlength\@tempdima{#1}% + \setbox\@tempboxa\hb@xt@\@tempdima + {\kern\fboxsep\csname bm@#2\endcsname\kern\fboxsep}% + \@frameb@x{\kern-\fboxrule}% + \@end@tempboxa} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@frameb@x} +% Common part of |\framebox| and |\fbox|. |#1| is a negative kern +% in the |\framebox| case so that the vertical rules do not add to the +% width of the box. +% \changes{v1.0i}{1994/06/01} +% {Macro added.} +% \changes{v1.0j}{1994/10/18} +% {\cs{leavevmode} added} +% \changes{v1.0s}{1995/04/27} +% {Move \cs{leavevmode} for graphics/1512} +% \begin{macrocode} +\def\@frameb@x#1{% + \@tempdima\fboxrule + \advance\@tempdima\fboxsep + \advance\@tempdima\dp\@tempboxa + \hbox{% + \lower\@tempdima\hbox{% + \vbox{% + \hrule\@height\fboxrule + \hbox{% + \vrule\@width\fboxrule + #1% + \vbox{% + \vskip\fboxsep + \box\@tempboxa + \vskip\fboxsep}% + #1% + \vrule\@width\fboxrule}% + \hrule\@height\fboxrule}% + }% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@framepicbox} +% Picture mode version. +% \begin{macrocode} +\def\@framepicbox(#1,#2){% + \@ifnextchar[{\@iframepicbox(#1,#2)}{\@iframepicbox(#1,#2)[]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@iframepicbox} +% Picture mode version. +% \begin{macrocode} +\long\def\@iframepicbox(#1,#2)[#3]#4{% + \frame{\@imakepicbox(#1,#2)[#3]{#4}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\parbox} +% \changes{v0.1a}{1993/12/03} +% {Redefined to support extra optional arguments} +% \changes{v0.1d}{1993/12/15} +% {Changed default from `c' to `s'} +% The main vertical-box command for \LaTeX. +% \begin{macrocode} +\def\parbox{% + \@ifnextchar[%] + \@iparbox + {\@iiiparbox c\relax[s]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@iparbox} +% \changes{v0.1d}{1993/12/15} +% {Changed default from `c' to `s'} +% Optional argument handling. +% \begin{macrocode} +\def\@iparbox[#1]{% + \@ifnextchar[%] + {\@iiparbox{#1}}% + {\@iiiparbox{#1}\relax[s]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@iiparbox} +% Optional argument handling. +% \begin{macrocode} +\def\@iiparbox#1[#2]{% + \@ifnextchar[%] + {\@iiiparbox{#1}{#2}}% + {\@iiiparbox{#1}{#2}[#1]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@iiiparbox} +% \begin{macro}{\@parboxto} +% \changes{v1.0j}{1994/10/18} +% {Macro added to remove misuse of \cs{@empty}} +% \changes{v0.1b}{1993/12/08} +% {\cs{endgraf} added due to extra group in \cs{@begin@tempboxa}} +% \changes{v1.0y}{1996/06/10} +% {(DPC) Changed \cs{endgraf} to \cs{@@par}} +% \changes{v1.1f}{1999/04/27} +% {(CAR) Changed \cs{@empty} to \cs{relax} as flag for natural +% width: pr/2975} +% The internal version of |\parbox|. +% \begin{macrocode} +\let\@parboxto\@empty +\long\def\@iiiparbox#1#2[#3]#4#5{% + \leavevmode + \@pboxswfalse + \setlength\@tempdima{#4}% + \@begin@tempboxa\vbox{\hsize\@tempdima\@parboxrestore#5\@@par}% + \ifx\relax#2\else + \setlength\@tempdimb{#2}% + \def\@parboxto{to\@tempdimb}% + \fi + \if#1b\vbox + \else\if #1t\vtop + \else\ifmmode\vcenter + \else\@pboxswtrue $\vcenter + \fi\fi\fi + \@parboxto{\let\hss\vss\let\unhbox\unvbox + \csname bm@#3\endcsname}% + \if@pboxsw \m@th$\fi + \@end@tempboxa} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \changes{v1.0c}{1994/04/12} +% {Remove \cs{@acci}, now defined in ltplain.dtx} +% \changes{v1.0c}{1994/04/12} +% {Remove \cs{@dischyph}, now defined in ltinit.dtx} +% +% \begin{macro}{\@arrayparboxrestore} +% Restore various paragraph parameters. +% +% The rational for allowing two normally global flags to be set +% locally here was stated originally by +% Donald Arsenau and extended by Chris Rowley. +% It is because these flags are only set globally to +% true by section commands, and these should never appear within +% boxes or, indeed, in any group; and they are only ever +% set globally to false when they are definitely true. +% +% If anyone is unhappy with this argument then both flags should be +% treated as in |\set@nobreak|; otherwise this command will be +% redundant. +% \changes{v1.1a}{1996/10/24}{Added local settings of flags: dangerous!!} +% \begin{macrocode} +\def\@arrayparboxrestore{% + \let\if@nobreak\iffalse + \let\if@noskipsec\iffalse + \let\par\@@par + \let\-\@dischyph +% \end{macrocode} +% Redefined accents to allow changes in font encoding +% \changes{v1.0h}{1994/05/13} +% {New accent system, use \cs{let} not \cs{def}} +% \begin{macrocode} + \let\'\@acci\let\`\@accii\let\=\@acciii + \parindent\z@ \parskip\z@skip + \everypar{}% + \linewidth\hsize + \@totalleftmargin\z@ + \leftskip\z@skip \rightskip\z@skip \@rightskip\z@skip + \parfillskip\@flushglue \lineskip\normallineskip + \baselineskip\normalbaselineskip + \sloppy} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\parboxrestore} +% Restore various paragraph parameters, and also |\\|. +% \begin{macrocode} +\def\@parboxrestore{\@arrayparboxrestore\let\\\@normalcr} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@minipage} +% Switch that is true at the start of a minipage. +% \changes{v1.0z}{1996/07/26}{put \cs{global} into definition} +% \begin{macrocode} +\def\@minipagefalse{\global\let\if@minipage\iffalse} +\def\@minipagetrue {\global\let\if@minipage\iftrue} +\@minipagefalse +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\minipage} +% \changes{v0.1a}{1993/12/03} +% {Redefined to support extra optional arguments} +% \changes{v0.1d}{1993/12/15} +% {extra space removed.} +% \changes{v0.1d}{1993/12/15} +% {Changed default from `c' to `s'} +% Essentially an environment form of |\parbox|. +% \begin{macrocode} +\def\minipage{% + \@ifnextchar[%] + \@iminipage + {\@iiiminipage c\relax[s]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@iminipage} +% \changes{v0.1d}{1993/12/15} +% {Changed default from `c' to `s'} +% Optional argument handling. +% \begin{macrocode} +\def\@iminipage[#1]{% + \@ifnextchar[%] + {\@iiminipage{#1}}% + {\@iiiminipage{#1}\relax[s]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@iiminipage} +% Optional argument handling. +% \begin{macrocode} +\def\@iiminipage#1[#2]{% + \@ifnextchar[%] + {\@iiiminipage{#1}{#2}}% + {\@iiiminipage{#1}{#2}[#1]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@iiiminipage} +% \changes{v1.0e}{1994/04/21} +% {Extra \cs{bgroup} for colour} +% \changes{v1.0f}{1994/05/11} +% {Use new \cs{color@setgroup} concept.} +% Internal form of |minipage|. +% \changes{v1.1a}{1996/10/24}{Use it or lose it (@setminpage): Frank +% will want to lose it} +% \begin{macrocode} +\def\@iiiminipage#1#2[#3]#4{% + \leavevmode + \@pboxswfalse + \setlength\@tempdima{#4}% + \def\@mpargs{{#1}{#2}[#3]{#4}}% + \setbox\@tempboxa\vbox\bgroup + \color@begingroup + \hsize\@tempdima + \textwidth\hsize \columnwidth\hsize + \@parboxrestore + \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}\c@mpfootnote\z@ + \let\@footnotetext\@mpfootnotetext + \let\@listdepth\@mplistdepth \@mplistdepth\z@ + \@minipagerestore + \@setminipage} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@minipagerestore} +% Hook so that other styles can reset other commands in a minipage. +% \begin{macrocode} + \let\@minipagerestore=\relax +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\endminipage} +% \changes{LaTeX209}{1992/08/14} +% {(RmS) replaced \cs{vskip}-\cs{lastskip} by \cs{unskip} +% (proposed by FMi)} +% \changes{v1.0e}{1994/04/21} +% {Extra \cs{egroup} for colour} +% \changes{v1.0f}{1994/05/11} +% {Use new \cs{color@setgroup} concept.} +% \changes{v1.0n}{1994/11/05} +% {Colour resetting for footnotes moved to here: as for main +% page.} +% \begin{macrocode} +\def\endminipage{% + \par + \unskip + \ifvoid\@mpfootins\else + \vskip\skip\@mpfootins + \normalcolor + \footnoterule + \unvbox\@mpfootins + \fi + \@minipagefalse %% added 24 May 89 + \color@endgroup + \egroup + \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@mplistdepth} +% \begin{macro}{\@mpfootins} +% Versions of |\@listdepth| and |\footins| local to minipage. +% \begin{macrocode} +\newcount\@mplistdepth +\newinsert\@mpfootins +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@mpfootnotetext} +% Minipage version of |\@footnotetext|. +% +% Final |\strut| added 27 Mar 89, on suggestion by Don Hosek +% \changes{LaTeX2.09}{1991/09/29}{(RmS) added \cs{reset@font}} +% \changes{LaTeX2.09}{1992/11/26}{(RmS) added protection for \cs{edef}} +% \changes{v0.1a}{1994/03/07}{Extra group for colour} +% \changes{v1.0e}{1994/04/21} +% {Extra \cs{endgraf} for colour} +% \changes{v1.0f}{1994/05/11} +% {Use new \cs{color@setgroup} concept.} +% \changes{v1.0f}{1994/05/11} +% {Use new \cs{normalcolor} and \cs{@finalstrut}.} +% \changes{v1.0m}{1994/11/04} +% {Added \cs{protected@edef}. ASAJ.} +% \changes{v1.0n}{1994/11/05} +% {Colour resetting for footnotes moved to endminipage: as for main +% page.} +% \changes{v1.0o}{1994/11/05} +% {Colour groups restored here.} +% \begin{macrocode} +\long\def\@mpfootnotetext#1{% + \global\setbox\@mpfootins\vbox{% + \unvbox\@mpfootins + \reset@font\footnotesize + \hsize\columnwidth + \@parboxrestore + \protected@edef\@currentlabel + {\csname p@mpfootnote\endcsname\@thefnmark}% + \color@begingroup + \@makefntext{% + \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}% + \color@endgroup}} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\newif\if@pboxsw +% \end{macrocode} +% +% \begin{macro}{\rule} +% Draw a rule of the specified size. +% \begin{macrocode} +\def\rule{\@ifnextchar[\@rule{\@rule[\z@]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@rule} +% Internal form of |\rule|. +% \changes{v1.1c}{1998/06/04}{Support calc-expressions} +% \begin{macrocode} + \def\@rule[#1]#2#3{% + \leavevmode + \hbox{% + \setlength\@tempdima{#1}% + \setlength\@tempdimb{#2}% + \setlength\@tempdimc{#3}% + \advance\@tempdimc\@tempdima + \vrule\@width\@tempdimb\@height\@tempdimc\@depth-\@tempdima}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@underline} +% Saved primitive |\underline|. +% \begin{macrocode} +\let\@@underline\underline +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\underline} +% \LaTeX\ version works outside math. +% \task{???}{why the second `relax in `underline ?} +% \begin{macrocode} +\def\underline#1{% + \relax + \ifmmode\@@underline{#1}% + \else $\@@underline{\hbox{#1}}\m@th$\relax\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\raisebox} +% \changes{v0.1a}{1993/12/03} +% {redefined to support \cs{height}} +% \changes{v1.0s}{1995/04/27} +% {Move \cs{leavevmode} for graphics/1512} +% Raise a box, and change its vertical dimensions. +% \begin{macrocode} +\def\raisebox#1{% + \leavevmode + \@ifnextchar[{\@rsbox{#1}}{\@irsbox{#1}[]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@rsbox} +% Optional argument handling. +% \begin{macrocode} +\def\@rsbox#1[#2]{% + \@ifnextchar[{\@iirsbox{#1}[#2]}{\@irsbox{#1}[#2]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@argrsbox} +% \changes{v0.1a}{1993/12/03} +% {macro removed} +% ... +% \end{macro} +% +% \begin{macro}{\@irsbox} +% \changes{v0.1a}{1993/12/03} +% {redefined to support \cs{height}} +% \changes{v0.1b}{1993/12/08} +% {fix typo} +% \changes{v0.1c}{1993/12/09} +% {fix another typo} +% \changes{v0.1f}{1994/03/03} +% {Replaced a missing \cs{else}} +% \changes{v1.0s}{1995/04/27} +% {Move \cs{leavevmode} for graphics/1512} +% \changes{v1.0u}{1995/05/17} +% {Removed surplus braces} +% Internal version of |\raisebox| (less than two optional args). +% \begin{macrocode} +\long\def\@irsbox#1[#2]#3{% + \@begin@tempboxa\hbox{#3}% + \setlength\@tempdima{#1}% + \ifx\\#2\\\else\setlength\@tempdimb{#2}\fi + \setbox\@tempboxa\hbox{\raise\@tempdima\box\@tempboxa}% + \ifx\\#2\\\else\ht\@tempboxa\@tempdimb\fi + \box\@tempboxa + \@end@tempboxa} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@iirsbox} +% \changes{v0.1a}{1993/12/03} +% {redefined to support \cs{height}} +% \changes{v1.0s}{1995/04/27} +% {Move \cs{leavevmode} for graphics/1512} +% Internal version of |\raisebox| (two optional args). +% \begin{macrocode} +\long\def\@iirsbox#1[#2][#3]#4{% + \@begin@tempboxa\hbox{#4}% + \setlength\@tempdima{#1}% + \setlength\@tempdimb{#2}% + \setlength\dimen@{#3}% + \setbox\@tempboxa\hbox{\raise\@tempdima\box\@tempboxa}% + \ht\@tempboxa\@tempdimb + \dp\@tempboxa\dimen@ + \box\@tempboxa + \@end@tempboxa} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@finalstrut} +% This macro adds a special strut the \emph{depth} of the box given as +% |#1|, and height and width 0pt. It is used for ensuring that the +% last line of a paragraph has the correct depth in `p' columns of +% tables and in footnotes. In vertical mode nothing is done, as adding +% the strut (as done in 2.09) would start a new paragraph. It would be +% possible to inspect |\prevdepth| to check the depth of the +% just-completed paragraph, but we do not do that here. +% \changes{v1.0g}{1994/05/12} +% {macro added} +% Actually we do even less now, skip the vmode test as it broke tabular +% `p' columns. +% \changes{v1.0p}{1994/11/09} +% {Revert \cs{finalstrut} to 2.09 equivalent (from ltpatch)}. +% \changes{v1.0x}{1995/10/31} +% {Add \cs{nobreak} in horiz mode to allow hyphenation. +% internal/1931} +% +% The |\nobreak| was added (1995/10/31) to allow hyphenation of the +% final word of the paragraph. +% \begin{macrocode} +\def\@finalstrut#1{% + \unskip\ifhmode\nobreak\fi\vrule\@width\z@\@height\z@\@depth\dp#1} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Some low-level constructs} +% +% The following commands are basically inherited from plain \TeX. +% +% \begin{macro}{\leftline} +% \begin{macro}{\rightline} +% \begin{macro}{\centerline} +% \begin{macro}{\@@line} +% These macros place text on a full line either centred or left or +% right adjusted. +% \begin{macrocode} +\def\@@line{\hb@xt@\hsize} +\def\leftline#1{\@@line{#1\hss}} +\def\rightline#1{\@@line{\hss#1}} +\def\centerline#1{\@@line{\hss#1\hss}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\rlap} +% \begin{macro}{\llap} +% These macros place text to the left or right of the current +% reference point without taking up space. +% \end{macro} +% \begin{macrocode} +\def\rlap#1{\hb@xt@\z@{#1\hss}} +\def\llap#1{\hb@xt@\z@{\hss#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel> +% \end{macrocode} +% +% \Finale +\endinput +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltclass.dtx b/Master/texmf-dist/source/latex/base/ltclass.dtx new file mode 100644 index 00000000000..6b4c5a20626 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltclass.dtx @@ -0,0 +1,1694 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltclass.dtx +% +%<*driver> +% \fi +\ProvidesFile{ltclass.dtx} + [2004/01/28 v1.1g LaTeX Kernel (Class & Package Interface)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltclass.dtx} +\begin{document} +\title{The main structure of documents} +\author{Frank Mittelbach\and Chris Rowley\and Alan Jeffrey\and + David Carlisle} +\date{\filedate} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \iffalse +% (C) Copyright Frank Mittelbach, Chris Rowley, +% Alan Jeffrey and David Carlisle 1993-1998. +% All rights reserved. +% \fi +% +% \CheckSum{1194} +% +% \changes{v1.0f}{1994/05/22}{Use new warning and error commands} +% \changes{v1.0l}{1994/11/17}{\cs{@tempa} to \cs{reserved@a}} +% \changes{v1.0z}{1998/03/21}{Added to documentation of filecontents} +% \changes{v1.1c}{1998/08/17}{(RmS) Minor documentation fixes.} +% +% \section{Introduction} +% +% This file implements the following declarations, which replace +% |\documentstyle| in \LaTeXe\ documents. +% +% Note that old documents containing |\documentstyle| will be run using +% a compatibility option---thus keeping everyone happy, we hope! +% +% The overall idea is that there are two types of `style files': +% `class files' which define elements and provide a default formatting +% for them; and `packages' which provide extra functionality. One +% difference between \LaTeXe\ and \LaTeX2.09 is that \LaTeXe\ packages +% may have options. Note that options to classes packages may be +% implemented such that they input files, but these file names are not +% necessarily directly related to the option name. +% +% \section{User interface} +% +% |\documentclass[|\meta{main-option-list}|]{|^^A +% \meta{class}|}[|\meta{version}|]| +% +% There must be exactly one such declaration, and it must come first. +% The \meta{main-option-list} is a list of options which can modify the +% formatting of elements which are defined in the \meta{class} file +% as well as in all following |\usepackage| declarations (see below). +% The \meta{version} is a version number, beginning with a date in the +% format |YYYY/MM/DD|. If an older version of the class is found, a +% warning is issued. +% +% \bigskip +% +% |\documentstyle[|\meta{main-option-list}|]{|^^A +% \meta{class}|}[|\meta{version}|]| +% +% The |\documentstyle| declaration is kept in order to maintain upward +% compatibility with \LaTeX2.09 documents. It is similar to +% |\documentclass|, but it causes all options in +% \meta{main-option-list} that the \meta{class} does not use to be +% passed to |\RequirePackage| after the options have been processed. +% This maintains compatibility with the 2.09 behaviour. Also a flag is +% set to indicate that the document is to be processed in \LaTeX2.09 +% compatibility mode. As far as most packages are concerned, this +% only affects the warnings and errors \LaTeX\ generates. This flag +% does affect the definition of font commands, and |\sloppy|. +% +% \bigskip +% +% |\usepackage[|\meta{package-option-list}|]{|^^A +% \meta{package-list}|}[|\meta{version}|]| +% +% There can be any number of these declarations. All packages in +% \meta{package-list} are called with the same options. +% +% Each \meta{package} file defines new elements (or modifies those +% defined in the \meta{class}), and thus extends the range of documents +% which can be processed. +% The \meta{package-option-list} is a list of options which can modify +% the formatting of elements defined in the \meta{package} file. +% The \meta{version} is a version number, beginning with a date in the +% format |YYYY/MM/DD|. If an older version of the package is found, a +% warning is issued. +% +% Each package is loaded only once. If the same package is requested +% more than once, nothing happens, unless the package has been requested +% with options that were not given the first time it was loaded, in +% which case an error is produced. +% +% As well as processing the options given in the +% \meta{package-option-list}, each package processes the +% \meta{main-option-list}. This means that options that affect all +% of the packages can be given globally, rather than repeated for every +% package. +% +% Note that class files have the extension |.cls|, packages have the +% extension |.sty|. +% +% \DescribeEnv{filecontents} +% The environment |filecontents| is intended for passing the contents +% of packages, options, or other files along with a document in a +% single file. +% It has one argument, which is the name of the file to create. If that +% file already exists (maybe only in the current directory if the OS +% supports a notion of a `current directory' or `default directory') +% then nothing happens +% (except for an information message) and the body of the environment +% is bypassed. Otherwise, the body of the environment is written +% verbatim to the file name given as the first argument, together with +% some comments about how it was produced. +% +% The environment is allowed only before |\documentclass| to ensure +% that all packages or options necessary for this particular run are +% present when needed. The begin and end tags should each be on a +% line by itself. There is also a star-form; this does not write +% extra comments into the file. +% +% \subsection{Option processing} +% +% When the options are processed, they are divided into two types: {\em +% local\/} and {\em global}: +% \begin{itemize} +% +% \item For a class, the options in the |\documentclass| command are +% local. +% +% \item For a package, the options in the |\usepackage| command are +% local, and the options in the |\documentclass| command are global. +% +% \end{itemize} +% The options for |\documentclass| and |\usepackage| +% are processed in the following way: +% \begin{enumerate} +% +% \item The local and global options that have been declared +% (using |\DeclareOption| as described below) are processed +% first. +% +% In the case of |\ProcessOptions|, they are processed in the order +% that they were declared in the class or package. +% +% In the case of |\ProcessOptions*|, they are processed in the order +% that they appear in the option-lists. First the global options, and +% then the local ones. +% +% \item Any remaining local options are dealt with using the default +% option (declared using the |\DeclareOption*| declaration described +% below). For document classes, this usually does nothing, but +% records the option on a list of unused options. +% For packages, this usually produces an error. +% +% \end{enumerate} +% Finally, when |\begin{document}| is reached, if there are any global +% options which have not been used by either the class or any package, +% the system will produce a warning. +% +% +% \section{Class and Package interface} +% +% \subsection{Class name and version} +% +% \DescribeMacro\ProvidesClass +% A class can identify itself with the +% |\ProvidesClass{|\meta{name}|}[|\meta{version}|]| command. The +% \meta{version} should begin with a date in the format |YYYY/MM/DD|. +% +% \subsection{Package name and version} +% +% \DescribeMacro\ProvidesPackage +% A package can identify itself with the +% |\ProvidesPackage|\marg{name}\oarg{version} command. The +% \meta{version} should begin with a date in the format |YYYY/MM/DD|. +% +% \subsection{Requiring other packages} +% +% \DescribeMacro\RequirePackage +% Packages or classes can load other packages using\\ +% |\RequirePackage|\oarg{options}\marg{name}\oarg{version}.\\ +% If the package has already been loaded, then nothing happens unless +% the requested options are not a subset of the options with which it +% was loaded, in which case an error is called. +% +% \DescribeMacro\LoadClass +% Similar to |\RequirePackage|, but for classes, may not be used in +% package files. +% +% \DescribeMacro\PassOptionsToPackage +% Packages can pass options to other packages using:\\ +% |\PassOptionsToPackage{|\meta{options}|}{|\meta{package}|}|.\\ +% \DescribeMacro\PassOptionsToClass +% This adds the \meta{options} to the options list of any future +% |\RequirePackage| or |\usepackage| command. For example: +% \begin{verbatim} +% \PassOptionsToPackage{foo,bar}{fred} +% \RequirePackage[baz]{fred}\end{verbatim} +% is the same as: +% \begin{verbatim} +% \RequirePackage[foo,bar,baz]{fred}\end{verbatim} +% +% \DescribeMacro\LoadClassWithOptions +% |\LoadClassWithOptions|\marg{name}\oarg{version}:\\ +% This is similar to +% |\LoadClass|, but it always calls class \meta{name} with +% exactly the same option list that is being used by the current class, +% rather than an option explicitly supplied or passed on by +% |\PassOptionsToClass|. +% \DescribeMacro\RequirePackageWithOptions +% |\RequirePackageWithOptions| is the analogous command for packages. +% +% This is mainly intended to allow one class to simply build on another, +% for example: +%\begin{verbatim} +% \LoadClassWithOptions{article} +%\end{verbatim} +% +% This should be contrasted with the slightly different construction +%\begin{verbatim} +% \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} +% \ProcessOptions +% \LoadClass{article} +%\end{verbatim} +% +% As used here, the effects are more or less the same, but the +% version using |\LoadClassWithOptions| is slightly quicker +% (and less to type). +% If, however, the class declares options of its own then +% the two constructions are different; compare, for example: +%\begin{verbatim} +% \DeclareOption{landscape}{...} +% \ProcessOptions +% \LoadClassWithOptions{article} +%\end{verbatim} +% with: +%\begin{verbatim} +% \DeclareOption{landscape}{...} +% \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} +% \ProcessOptions +% \LoadClass{article} +%\end{verbatim} +% In the first case, the \textsf{article} class will be called with +% option |landscape| precisely when the current class is called with +% this option; but in the second example it will +% not as in that case \textsf{article} is only passed options by the +% default option handler, which is not used for |landscape| as that +% option is explicitly declared. +% +% \DescribeMacro\@ifpackageloaded +% To find out if a package has already been loaded, use\\ +% \DescribeMacro\@ifclassloaded +% |\@ifpackageloaded{|\meta{package}|}{|\meta{true}|}{|\meta{false}|}|. +% +% \DescribeMacro\@ifpackagelater +% To find out if a package has already been loaded with a version more +% recent than \meta{version}, use +% \DescribeMacro\@ifclasslater +% |\@ifpackagelater{|\meta{package}|}{|\meta{version}|}{|^^A +% \meta{true}|}{|\meta{false}|}|. +% +% \DescribeMacro\@ifpackagewith +% To find out if a package has already been loaded with at least the +% options \meta{options}, use +% \DescribeMacro\@ifclasswith +% |\@ifpackagewith{|\meta{package}|}{|\meta{options}|}{|^^A +% \meta{true}|}{|\meta{false}|}|. +% +% There exists one package that can't be tested with the above +% commands: the \texttt{fontenc} package pretends that it was never +% loaded to allow for repeated reloading with different options (see +% \texttt{ltoutenc.dtx} for details). +% +% +% \subsection{Declaring new options} +% +% Options for classes and packages are built using the same macros. +% +% \DescribeMacro\DeclareOption To define a builtin option, use +% |\DeclareOption{|\meta{name}|}{|\meta{code}|}|. +% +% \DescribeMacro{\DeclareOption*} To define the default action to +% perform for local options which have not been declared, use +% |\DeclareOption*{|\meta{code}|}|. +% +% {\em Note\/}: there should be no use of\\ +% |\RequirePackage|, |\DeclareOption|, |\DeclareOption*| or +% |\ProcessOptions|\\ +% inside |\DeclareOption| or |\DeclareOption*|. +% +% Possible uses for |\DeclareOption*| include: +% +% |\DeclareOption*{}|\\ +% Do nothing. Silently accept unknown options. (This suppresses the +% usual warnings.) +% +% |\DeclareOption*{\@unkownoptionerror}|\\ +% Complain about unknown local options. (The initial setting for +% package files.) +% +% |\DeclareOption*{\PassOptionsToPackage{\CurrentOption}|^^A +% |{|\meta{pkg-name}|}|\\ +% Handle the the current option by passing it on to the package +% \meta{pkg-name}, which will presumably be loaded via +% |\RequirePackage| later in the file. This is useful for building +% `extension' packages, that perhaps handle a couple of new options, +% but then pass everything else on to an existing package. +% +% |\DeclareOption*{\InputIfFileExists{xx-\CurrentOption.yyy}%|\\ +% | {}%|\\ +% | {\OptionNotUsed}}|\\ +% Handle the option foo by loading the file |xx-foo.yyy| if it +% exists, otherwise do nothing, but declare that the option was not +% used. +% Actually the |\OptionNotUsed| declaration is only needed if this is +% being used in class files, but does no harm in package files. +% +% +% \subsection{Safe Input Macros} +% \DescribeMacro{\InputIfFileExists} +% |\InputIfFileExists{|\meta{file}|}{|\meta{then}|}{|\meta{else}|}|\\ +% Inputs \meta{file} if it exists. Immediately before the input, +% \meta{then} is executed. Otherwise \meta{else} is executed. +% +% \DescribeMacro{\IfFileExists} +% As above, but does not input the file. +% +% One thing you might like to put in the \meta{else} clause is +% +% \DescribeMacro{\@missingfileerror} +% This starts an interactive request for a filename, supplying default +% extensions. Just hitting return causes the whole input to be skipped +% and entering |x| quits the current run, +% +% \DescribeMacro{\input} +% This has been redefined from the \LaTeX2.09 definition, in terms of +% the new commands |\InputIfFileExists| and |\@missingfileerror|. +% +% +% \DescribeMacro{\listfiles} Giving this declaration in the preamble +% causes a list of all files input via the `safe input' commands to be +% listed at the end. Any strings specified in the optional argument to +% |\ProvidesPackage| are listed alongside the file name. So files in +% standard (and other non-standard) distributions can put informative +% strings in this argument. +% +% \StopEventually{} +% +% \section{Implementation} +% +% \begin{macrocode} +%<*2ekernel> +% \end{macrocode} +% +% +% \changes{v0.2g}{1993/11/23} +% {Various macros now moved to latex.tex.} +% \changes{v0.2g}{1993/11/23} +% {Warnings and errors now directly coded.} +% \changes{v0.2h}{1993/11/28} +% {Primitive filenames now terminated by space not \cs{relax}.} +% \changes{v0.2h}{1993/11/28} +% {Directory syntax checing moved to dircheck.dtx} +% \changes{v0.2h}{1993/11/28} +% {Assorted commands now in the kernel removed.} +% \changes{v0.2i}{1993/12/03} +% {\cs{@onlypreamble}: Many commands declared.} +% \changes{v0.2i}{1993/12/03} +% {Removed obsolete \cs{@documentclass}} +% \changes{v0.2o}{1993/12/13} +% {Removed setting \cs{errorcontextlines}\ (now in latex.tex)} +% \changes{v0.2p}{1993/12/15} +% {Removed extra `.'s from \cs{@@warning}s} +% \changes{v0.2s}{1994/01/17} +% {Added many more \cs{@onlypreamble} commands} +% \changes{v0.2s}{1994/01/17} +% {Wrapped long lines to column 72} +% \changes{v0.3a}{1994/03/02} +% {Remove need for driver file} +% \changes{v0.3b}{1994/03/08} +% {Modify driver code into `new style'} +% \changes{v0.3c}{1994/03/12} +% {Change name from docclass to ltclass} +% \changes{v0.3h}{1994/04/25} +% {Removed spurious extra `.'s at the end of error messages} +% \changes{v1.0a}{1994/04/29} +% {Change version number to 1 (no other change)} +% \changes{v1.0k}{1994/11/03} +% {Move \cs{@missingfileerror} to ltfiles} +% +% \begin{macro}{\if@compatibility} +% The flag for compatibilty mode. +% \begin{macrocode} +\newif\if@compatibility +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@documentclasshook} +% The hook called after the first |\documentclass| command. By +% default this checks to see if |\@normalsize| is undefined, and if +% so, sets it to |\normalsize|. +% \changes{v0.2q}{1993/12/17} +% {Macro added} +% \changes{v0.2z}{1994/02/10} +% {Changed the name from \cs{@compatibility} to +% \cs{@documentclasshook}, and added the check for whether +% \cs{@normalsize} has been defined. ASAJ.} +% \begin{macrocode} +\def\@documentclasshook{% + \ifx\@normalsize\@undefined + \let\@normalsize\normalsize + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@declaredoptions} +% This list is automatically built by |\DeclareOption|. +% It is the list of options (separated by commas) declared in +% the class or package file and it defines the order in which the +% the corresponding |\ds@|\meta{option} commands are executed. +% All local \meta{option}s which are not declared will be processed +% in the order defined by the optional argument of |\documentclass| +% or |\usepackage|. +% \begin{macrocode} +\let\@declaredoptions\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@classoptionslist} +% List of options of the main class. +% \changes{v1.0u}{1996/07/26}{made only preamble} +% \begin{macrocode} +\let\@classoptionslist\relax +\@onlypreamble\@classoptionslist +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@unusedoptionlist} +% \changes{v1.0u}{1996/07/26}{made only preamble} +% List of options of the main class that haven't been declared or +% loaded as class option files. +% \begin{macrocode} +\let\@unusedoptionlist\@empty +\@onlypreamble\@unusedoptionlist +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\CurrentOption} +% Name of current package or option. +% \changes{v0.2c}{1993/11/17} +% {Name changed from \cs{@curroption}} +% \begin{macrocode} +\let\CurrentOption\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@currname} +% Name of current package or option. +% \begin{macrocode} +\let\@currname\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@currext} +% The current file extension. +% \changes{v0.2a}{1993/11/14}{Name changed from \cs{@currextension}} +% \begin{macrocode} +\global\let\@currext=\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@clsextension} +% \begin{macro}{\@pkgextension} +% The two possible values of |\@currext|. +% \begin{macrocode} +\def\@clsextension{cls} +\def\@pkgextension{sty} +\@onlypreamble\@clsextension +\@onlypreamble\@pkgextension +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@pushfilename} +% \begin{macro}{\@popfilename} +% \begin{macro}{\@currnamestack} +% Commands to push and pop the file name and extension. \\ +% |#1| current name. \\ +% |#2| current extension. \\ +% |#3| current catcode of |@|. \\ +% |#4| Rest of the stack. +% \begin{macrocode} +\def\@pushfilename{% + \xdef\@currnamestack{% + {\@currname}% + {\@currext}% + {\the\catcode`\@}% + \@currnamestack}} +\@onlypreamble\@pushfilename +% \end{macrocode} +% +% \begin{macrocode} +\def\@popfilename{\expandafter\@p@pfilename\@currnamestack\@nil} +\@onlypreamble\@popfilename +% \end{macrocode} +% +% \begin{macrocode} +\def\@p@pfilename#1#2#3#4\@nil{% + \gdef\@currname{#1}% + \gdef\@currext{#2}% + \catcode`\@#3\relax + \gdef\@currnamestack{#4}} +\@onlypreamble\@p@pfilename +% \end{macrocode} +% +% \begin{macrocode} +\gdef\@currnamestack{} +\@onlypreamble\@currnamestack +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@ptionlist} +% Returns the option list of the file. +% \begin{macrocode} +\def\@ptionlist#1{% + \@ifundefined{opt@#1}\@empty{\csname opt@#1\endcsname}} +\@onlypreamble\@ptionlist +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ifpackageloaded} +% \begin{macro}{\@ifclassloaded} +% |\@ifpackageloaded{|\meta{name}|}| +% Checks to see whether a file has been loaded. +% \changes{v0.2t}{1994/01/18} +% {Fix typo \cs{@pkgetension}} +% \begin{macrocode} +\def\@ifpackageloaded{\@ifl@aded\@pkgextension} +\def\@ifclassloaded{\@ifl@aded\@clsextension} +\@onlypreamble\@ifpackageloaded +\@onlypreamble\@ifclassloaded +% \end{macrocode} +% +% \begin{macrocode} +\def\@ifl@aded#1#2{% + \expandafter\ifx\csname ver@#2.#1\endcsname\relax + \expandafter\@secondoftwo + \else + \expandafter\@firstoftwo + \fi} +\@onlypreamble\@ifl@aded +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@ifpackagelater} +% \begin{macro}{\@ifclasslater} +% |\@ifpackagelater{|\meta{name}|}{YYYY/MM/DD}| +% Checks that the package loaded is more recent than the given date. +% \begin{macrocode} +\def\@ifpackagelater{\@ifl@ter\@pkgextension} +\def\@ifclasslater{\@ifl@ter\@clsextension} +\@onlypreamble\@ifpackagelater +\@onlypreamble\@ifclasslater +% \end{macrocode} +% +% \begin{macrocode} +\def\@ifl@ter#1#2{% + \expandafter\@ifl@t@r + \csname ver@#2.#1\endcsname} +\@onlypreamble\@ifl@ter +% \end{macrocode} +% +% This internal macro is also used in |\NeedsTeXFormat|. +% \changes{v0.2f}{1993/11/22} +% {Added //00 so parsing never produces a runaway argument.} +% \begin{macrocode} +\def\@ifl@t@r#1#2{% + \ifnum\expandafter\@parse@version#1//00\@nil<% + \expandafter\@parse@version#2//00\@nil + \expandafter\@secondoftwo + \else + \expandafter\@firstoftwo + \fi} +\@onlypreamble\@ifl@t@r +% \end{macrocode} +% +% \begin{macrocode} +\def\@parse@version#1/#2/#3#4#5\@nil{#1#2#3#4 } +\@onlypreamble\@parse@version +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@ifpackagewith} +% \begin{macro}{\@ifclasswith} +% |\@ifpackagewith{|\meta{name}|}{|\meta{option-list}|}| +% Checks that \meta{option-list} is a subset of the options +% \textbf{with} which \meta{name} was loaded. +% \begin{macrocode} +\def\@ifpackagewith{\@if@ptions\@pkgextension} +\def\@ifclasswith{\@if@ptions\@clsextension} +\@onlypreamble\@ifpackagewith +\@onlypreamble\@ifclasswith +% \end{macrocode} +% +% \begin{macrocode} +\def\@if@ptions#1#2{% + \@expandtwoargs\@if@pti@ns{\@ptionlist{#2.#1}}} +\@onlypreamble\@if@ptions +% \end{macrocode} +% +% Probably shouldnt use |\CurrentOption| here\ldots (changed to +% |\reserved@b|.) +% \changes{v0.2y}{1994/02/07} +% {Add extra ,s so `two' is not matched with `twocolumn'} +% \begin{macrocode} +\def\@if@pti@ns#1#2{% + \let\reserved@a\@firstoftwo + \@for\reserved@b:=#2\do{% + \expandafter\in@\expandafter{\expandafter,\reserved@b,}{,#1,}% + \ifin@\else\let\reserved@a\@secondoftwo\fi}% + \reserved@a} +\@onlypreamble\@if@pti@ns +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\ProvidesPackage} +% Checks that the current filename is correct, and defines +% |\ver@filename|. +% \changes{v0.3c}{1994/03/12} +% {Add \cs{wlog}} +% \changes{v0.3c}{1994/03/12} +% {use \cs{@gtempa}} +% \begin{macrocode} +\def\ProvidesPackage#1{% + \xdef\@gtempa{#1}% + \ifx\@gtempa\@currname\else + \@latex@warning@no@line{You have requested + \@cls@pkg\space`\@currname',\MessageBreak + but the \@cls@pkg\space provides `#1'}% + \fi + \@ifnextchar[\@pr@videpackage{\@pr@videpackage[]}}%] +\@onlypreamble\ProvidesPackage +% \end{macrocode} +% +% \begin{macrocode} +\def\@pr@videpackage[#1]{% + \expandafter\xdef\csname ver@\@currname.\@currext\endcsname{#1}% + \ifx\@currext\@clsextension + \typeout{Document Class: \@gtempa\space#1}% + \else + \wlog{Package: \@gtempa\space#1}% + \fi} +\@onlypreamble\@pr@videpackage +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ProvidesClass} +% Like |\ProvidesPackage|, but for classes. +% \begin{macrocode} +\let\ProvidesClass\ProvidesPackage +\@onlypreamble\ProvidesClass +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ProvidesFile} +% Like |\ProvidesPackage|, but for arbitrary files. Do not apply +% |\@onlypreamble| to these, as we may want to label files input +% during the document. +% \changes{v0.2l}{1993/12/07} +% {Macro added} +% \changes{v0.3c}{1994/03/12} +% {Add \cs{wlog}} +% \changes{v0.3g}{1994/04/11} +% {Protect against weird catcodes.} +% \begin{macro}{\@providesfile} +% \changes{v1.0r}{1995/10/17} +% {Delay definition of \cs{ProvidesFile} till ltfinal} +% \changes{v1.1a}{1998/03/21} +% {Allow \&. Internal/2702} +% \changes{v1.1d}{2001/05/25}{Explicitly set catcode of +% \cs{endlinechar} to 10 (pr/3334)} +% \changes{v1.1e}{2001/06/04}{But only if it is a char (pr/3334)} +% \changes{v1.1f}{2001/08/26}{Readded setting of space char (pr/3353)} +% \begin{macrocode} +\def\ProvidesFile#1{% + \begingroup + \catcode`\ 10 % + \ifnum \endlinechar<256 % + \ifnum \endlinechar>\m@ne + \catcode\endlinechar 10 % + \fi + \fi + \@makeother\/% + \@makeother\&% +% \end{macrocode} +% \changes{v1.1g}{2004/01/28}{Use kernel version of +% \cs{@ifnextchar} (pr/3501)} +% \begin{macrocode} + \kernel@ifnextchar[{\@providesfile{#1}}{\@providesfile{#1}[]}} +% \end{macrocode} +% +% During initex a special version of |\@providesfile| is used. +% The real definition is installed right at the end, in |ltfinal.dtx|. +%\begin{verbatim} +%\def\@providesfile#1[#2]{% +% \wlog{File: #1 #2}% +% \expandafter\xdef\csname ver@#1\endcsname{#2}% +% \endgroup} +% \end{macrocode} +%\end{verbatim} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\PassOptionsToPackage} +% \begin{macro}{\PassOptionsToClass} +% If the package has been loaded, we check that it was first loaded with +% the options. Otherwise we add the option list to that of the package. +% \begin{macrocode} +\def\@pass@ptions#1#2#3{% + \expandafter\xdef\csname opt@#3.#1\endcsname{% + \@ifundefined{opt@#3.#1}\@empty + {\csname opt@#3.#1\endcsname,}% + \zap@space#2 \@empty}} +\@onlypreamble\@pass@ptions +% \end{macrocode} +% +% \begin{macrocode} +\def\PassOptionsToPackage{\@pass@ptions\@pkgextension} +\def\PassOptionsToClass{\@pass@ptions\@clsextension} +\@onlypreamble\PassOptionsToPackage +\@onlypreamble\PassOptionsToClass +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\DeclareOption} +% \begin{macro}{\DeclareOption*} +% Adds an option as a |\ds@| command, or the default |\default@ds| +% command. +% \changes{v0.2c}{1993/11/17} +% {Error checking added} +% \changes{v1.0m}{1995/04/21} +% {Made long /1498} +% \changes{v1.0n}{1995/05/12} +% {Use \cs{toks@} to remove need to double hash /1557} +% \begin{macrocode} +\def\DeclareOption{% + \let\@fileswith@pti@ns\@badrequireerror + \@ifstar\@defdefault@ds\@declareoption} +\long\def\@declareoption#1#2{% + \xdef\@declaredoptions{\@declaredoptions,#1}% + \toks@{#2}% + \expandafter\edef\csname ds@#1\endcsname{\the\toks@}} +\long\def\@defdefault@ds#1{% + \toks@{#1}% + \edef\default@ds{\the\toks@}} +\@onlypreamble\DeclareOption +\@onlypreamble\@declareoption +\@onlypreamble\@defdefault@ds +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\OptionNotUsed} +% If we are in a class file, add |\CurrentOption| to the list of +% unused options. Otherwise, in a package file do nothing. +% \begin{macrocode} +\def\OptionNotUsed{% + \ifx\@currext\@clsextension + \xdef\@unusedoptionlist{% + \ifx\@unusedoptionlist\@empty\else\@unusedoptionlist,\fi + \CurrentOption}% + \fi} +\@onlypreamble\OptionNotUsed +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\default@ds} +% The default default option code. +% Set by |\@onefilewithoptions| to either |\OptionNotUsed| for +% classes, or |\@unknownoptionerror| for packages. This may be reset +% in either case with |\DeclareOption*|. +% \begin{macrocode} +% \let\default@ds\OptionNotUsed +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ProcessOptions} +% \begin{macro}{\ProcessOptions*} +% |\ProcessOptions| calls |\ds@option| for each known package option, +% then calls |\default@ds| for each option on the local options list. +% Finally resets all the declared options to |\relax|. The empty option +% does nothing, this has to be reset on the off chance it's set to +% |\relax| if an empty element gets into the |\@declaredoptions| list. +% +% The star form is similar but executes options given in the order +% specified in the document, not the order they are declared in the +% file. In the case of packages, global options are executed before +% local ones. +% \changes{v0.2a}{1993/11/14} +% {Stop adding the global option list inside class files.} +% \changes{v0.2a}{1993/11/14} +% {Optimise `empty option' code.} +% \changes{v0.2b}{1993/11/15} +% {Star form added.} +% \changes{v0.2c}{1993/11/17} +% {restoring \cs{@fileswith@pti@ns} added.} +% \begin{macrocode} +\def\ProcessOptions{% + \let\ds@\@empty + \edef\@curroptions{\@ptionlist{\@currname.\@currext}}% + \@ifstar\@xprocess@ptions\@process@ptions} +\@onlypreamble\ProcessOptions +% \end{macrocode} +% +% \changes{v0.2y}{1994/02/07} +% {Add extra ,s so `two' is not matched with `twocolumn'} +% \begin{macrocode} +\def\@process@ptions{% + \@for\CurrentOption:=\@declaredoptions\do{% + \ifx\CurrentOption\@empty\else + \@expandtwoargs\in@{,\CurrentOption,}{% + ,\ifx\@currext\@clsextension\else\@classoptionslist,\fi + \@curroptions,}% + \ifin@ + \@use@ption + \expandafter\let\csname ds@\CurrentOption\endcsname\@empty + \fi + \fi}% + \@process@pti@ns} +\@onlypreamble\@process@ptions +% \end{macrocode} +% +% \changes{v0.2y}{1994/02/07} +% {Add extra ,s so `two' is not matched with `twocolumn'} +% \begin{macrocode} +\def\@xprocess@ptions{% + \ifx\@currext\@clsextension\else + \@for\CurrentOption:=\@classoptionslist\do{% + \ifx\CurrentOption\@empty\else + \@expandtwoargs\in@{,\CurrentOption,}{,\@declaredoptions,}% + \ifin@ + \@use@ption + \expandafter\let\csname ds@\CurrentOption\endcsname\@empty + \fi + \fi}% + \fi + \@process@pti@ns} +\@onlypreamble\@xprocess@ptions +% \end{macrocode} +% +% The common part of |\ProcessOptions| and |\ProcessOptions*|. +% \begin{macrocode} +\def\@process@pti@ns{% + \@for\CurrentOption:=\@curroptions\do{% + \@ifundefined{ds@\CurrentOption}% + {\@use@ption + \default@ds}% +% \end{macrocode} +% There should not be any non-empty definition of |\CurrentOption| at +% this point, as all the declared options were executed earlier. This is +% for compatibility with 2.09 styles which use |\def\ds@|\ldots\ +% directly, and so have options which do not appear in +% |\@declaredoptions|. +% \begin{macrocode} + \@use@ption}% +% \end{macrocode} +% Clear all the definitions for option code. First set all the declared +% options to |\relax|, then reset the `default' and `empty' options. and +% the lst of declared options. +% \begin{macrocode} + \@for\CurrentOption:=\@declaredoptions\do{% + \expandafter\let\csname ds@\CurrentOption\endcsname\relax}% +% \end{macrocode} +% \changes{v1.0r}{1995/10/17} +% {Reset \cs{CurrentOption} for graphics/1873} +% \begin{macrocode} + \let\CurrentOption\@empty + \let\@fileswith@pti@ns\@@fileswith@pti@ns + \AtEndOfPackage{\let\@unprocessedoptions\relax}} +\@onlypreamble\@process@pti@ns +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@options} +% |\@options| is a synonym for |\ProcessOptions*| for upward +% compatibility with \LaTeX2.09 style files. +% \begin{macrocode} +\def\@options{\ProcessOptions*} +\@onlypreamble\@options +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@use@ption} +% Execute the code for the current option. +% \changes{v0.2g}{1993/11/23} +% {Name changed from \cs{@executeoption}} +% \changes{v1.0e}{1994/05/17} +% {Execute option after removing from list, not before} +% \begin{macrocode} +\def\@use@ption{% + \@expandtwoargs\@removeelement\CurrentOption + \@unusedoptionlist\@unusedoptionlist + \csname ds@\CurrentOption\endcsname} +\@onlypreamble\@use@ption +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ExecuteOptions} +% |\ExecuteOptions{|\meta{option-list}|}| executes the code declared +% for each option. +% \changes{v0.2d}{1993/11/18} +% {Use \cs{CurrentOption} not \cs{reserved@a}} +% \changes{v0.2k}{1993/12/06} +% {Preserve \cs{CurrentOption}.} +% \begin{macrocode} +\def\ExecuteOptions#1{% + \def\reserved@a##1\@nil{% + \@for\CurrentOption:=#1\do{\csname ds@\CurrentOption\endcsname}% + \edef\CurrentOption{##1}}% + \expandafter\reserved@a\CurrentOption\@nil} +\@onlypreamble\ExecuteOptions +% \end{macrocode} +% \end{macro} +% +% The top-level commands, which just set some parameters then call +% the internal command, |\@fileswithoptions|. +% \begin{macro}{\documentclass} +% \changes{v1.0q}{1995/06/19} +% {Dont redefine \cs{usepackage} in compat mode for /1634} +% The main new-style class declaration. +% \begin{macrocode} +\def\documentclass{% + \let\documentclass\@twoclasseserror + \if@compatibility\else\let\usepackage\RequirePackage\fi + \@fileswithoptions\@clsextension} +\@onlypreamble\documentclass +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\documentstyle} +% 2.09 style class `style' declaration. +% \changes{v0.2a}{1993/11/14} +% {Added \cs{RequirePackage} \cs{@unusedoptionlist} stuff.} +% \changes{v0.2b}{1993/11/15} +% {Modified to match \cs{ProcessOption*}} +% \changes{v0.2d}{1993/11/18} +% {Modified \cs{RequirePackage} stuff.} +% \changes{v0.2n}{1993/12/09} +% {input 209 compatibility file.} +% \changes{v0.2o}{1993/12/13} +% {compatibility file now latex209.sty.} +% \changes{v0.2q}{1993/12/17} +% {Match Alan's new code.} +% \changes{v0.2u}{1994/01/21} +% {compatibility file now latex209.def.} +% \begin{macrocode} +\def\documentstyle{% + \makeatletter\input{latex209.def}\makeatother + \documentclass} +\@onlypreamble\documentstyle +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\RequirePackage} +% Load package if not already loaded. +% \begin{macrocode} +\def\RequirePackage{% + \@fileswithoptions\@pkgextension} +\@onlypreamble\RequirePackage +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\LoadClass} +% Load class. +% \begin{macrocode} +\def\LoadClass{% + \ifx\@currext\@pkgextension + \@latex@error + {\noexpand\LoadClass in package file}% + {You may only use \noexpand\LoadClass in a class file.}% + \fi + \@fileswithoptions\@clsextension} +\@onlypreamble\LoadClass +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@loadwithoptions} +% \changes{v1.0t}{1995/11/14}{macro added} +% Pass the current option list on to a class or package. +% |#1| is |\@|\emph{cls-or-pkg}|extension|, +% |#2| is |\RequirePackage| or |\LoadClass|, +% |#3| is the class or package to be loaded. +% \begin{macrocode} +\def\@loadwithoptions#1#2#3{% + \expandafter\let\csname opt@#3.#1\expandafter\endcsname + \csname opt@\@currname.\@currext\endcsname + #2{#3}} +\@onlypreamble\@loadwithoptions +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\LoadClassWithOptions} +% \changes{v1.0t}{1995/11/14}{macro added} +% Load class `|#1|' with the current option list. +% \begin{macrocode} +\def\LoadClassWithOptions{% + \@loadwithoptions\@clsextension\LoadClass} +\@onlypreamble\LoadClassWithOptions +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\RequirePackageWithOptions} +% \changes{v1.0t}{1995/11/14}{macro added} +% \changes{v1.0v}{1996/10/04}{Reset \cs{@unprocessedoptions} for /2269} +% Load package `|#1|' with the current option list. +% \begin{macrocode} +\def\RequirePackageWithOptions{% + \AtEndOfPackage{\let\@unprocessedoptions\relax}% + \@loadwithoptions\@pkgextension\RequirePackage} +\@onlypreamble\RequirePackageWithOptions +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\usepackage} +% To begin with, |\usepackage| produces an error. This is reset by +% |\documentclass|. +% \changes{v0.2o}{1993/12/13} +% {Fixed error handling} +% \changes{v1.0h}{1994/05/23}{Remove argument if possible} +% \begin{macrocode} +\def\usepackage#1#{% + \@latex@error + {\noexpand \usepackage before \string\documentclass}% + {\noexpand \usepackage may only appear in the document + preamble, i.e.,\MessageBreak + between \noexpand\documentclass and + \string\begin{document}.}% + \@gobble} +\@onlypreamble\usepackage +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\NeedsTeXFormat} +% Check that the document is running on the correct system. +% \changes{v0.2a}{1993/11/14} +% {made more robust for alternative syntax for other formats.} +% \changes{v0.2c}{1993/11/17} +% {Name changed from \cs{NeedsFormat}} +% \changes{v0.2d}{1993/11/18} +% {\cs{fmtname} \cs{fmtversion} not \cs{@}\ldots} +% \begin{macrocode} +\def\NeedsTeXFormat#1{% + \def\reserved@a{#1}% + \ifx\reserved@a\fmtname + \expandafter\@needsformat + \else + \@latex@error{This file needs format `\reserved@a'% + \MessageBreak but this is `\fmtname'}{% + The current input file will not be processed + further,\MessageBreak + because it was written for some other flavor of + TeX.\MessageBreak\@ehd}% +% \end{macrocode} +% If the file is not meant to be processed by \LaTeXe{} we stop +% inputting it, but we do not end the run. We just end inputting +% the current file. +% \changes{v1.0h}{1994/05/23} +% {Don't stop completely when format is wrong} +% \begin{macrocode} + \endinput \fi} +\@onlypreamble\NeedsTeXFormat +% \end{macrocode} +% +% \begin{macrocode} +\def\@needsformat{% + \@ifnextchar[%] + \@needsf@rmat + {}} +\@onlypreamble\@needsformat +% \end{macrocode} +% +% \changes{v1.0b}{1994/05/04} +% {Changed wording of the warning} +% \begin{macrocode} +\def\@needsf@rmat[#1]{% + \@ifl@t@r\fmtversion{#1}{}% + {\@latex@warning@no@line + {You have requested release `#1' of LaTeX,\MessageBreak + but only release `\fmtversion' is available}}} +\@onlypreamble\@needsf@rmat +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\zap@space} +% |\zap@space foo|\meta{space}|\@empty| removes all spaces from |foo| +% that are not protected by |{ }| groups. +% \begin{macrocode} +\def\zap@space#1 #2{% + #1% + \ifx#2\@empty\else\expandafter\zap@space\fi + #2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@fileswithoptions} +% The common part of |\documentclass| and |\usepackage|. +% \begin{macrocode} +\def\@fileswithoptions#1{% + \@ifnextchar[%] + {\@fileswith@ptions#1}% + {\@fileswith@ptions#1[]}} +\@onlypreamble\@fileswithoptions +% \end{macrocode} +% +% \changes{v0.2f}{1993/11/22} +% {Made the default [] not [\cs{@unknownversion}]} +% \begin{macrocode} +\def\@fileswith@ptions#1[#2]#3{% + \@ifnextchar[%] + {\@fileswith@pti@ns#1[#2]#3}% + {\@fileswith@pti@ns#1[#2]#3[]}} +\@onlypreamble\@fileswith@ptions +% \end{macrocode} +% Then we do some work. +% +% First of all, we define the global variables. +% Then we look to see if the file has already been loaded. +% If it has, we check that it was first loaded with at least the current +% options. +% If it has not, we add the current options to the package options, +% set the default version to be |0000/00/00|, and load the file if we +% can find it. +% Then we check the version number. +% +% Finally, we restore the old file name, reset the default option, +% and we set the catcode of |@|. +% +% For classes, we can immediately process the file. For other types, +% |#2| could be a comma separated list, so loop through, processing +% each one separately. +% \changes{v0.2q}{1993/12/17} +% {Add \cs{@compatibility} hook} +% \changes{v0.2s}{1994/01/17} +% {Modify to reduce parameter stack usage} +% \changes{v0.2y}{1994/02/07} +% {Run \cs{@compatibility} on the first class to start +% (not the first to finish) } +% \changes{v0.2z}{1994/02/10} +% {Renamed \cs{@compatibility} to \cs{@documentclasshook}. +% ASAJ.} +% \begin{macrocode} +\def\@fileswith@pti@ns#1[#2]#3[#4]{% + \ifx#1\@clsextension + \ifx\@classoptionslist\relax + \xdef\@classoptionslist{\zap@space#2 \@empty}% + \def\reserved@a{% + \@onefilewithoptions#3[#2][#4]#1% + \@documentclasshook}% + \else + \def\reserved@a{% + \@onefilewithoptions#3[#2][#4]#1}% + \fi + \else +% \end{macrocode} +% build up a list of calls to |\@onefilewithoptions| +% (one for each package) without thrashing the parameter stack. +% \begin{macrocode} + \def\reserved@b##1,{% + \ifx\@nil##1\relax\else + \ifx\relax##1\relax\else + \noexpand\@onefilewithoptions##1[#2][#4]\noexpand\@pkgextension + \fi + \expandafter\reserved@b + \fi}% + \edef\reserved@a{\zap@space#3 \@empty}% + \edef\reserved@a{\expandafter\reserved@b\reserved@a,\@nil,}% + \fi + \reserved@a} +\@onlypreamble\@fileswith@pti@ns +% \end{macrocode} +% +% Have the main argument as |#1|, so we only need one |\expandafter| +% above. +% \changes{v0.2a}{1993/11/14} +% {Moved reseting of \cs{default@ds}, \cs{ds@} and +% \cs{@declaredoptions} here, from the end of +% \cs{ProcessOptions}.} +% \changes{v0.2f}{1993/11/22} +% {Made the initial version [] not [\cs{@unknownversion}]} +% \changes{v0.2m}{1993/12/07} +% {Reset \cs{CurrentOption}} +% \begin{macrocode} +\def\@onefilewithoptions#1[#2][#3]#4{% + \@pushfilename + \xdef\@currname{#1}% + \global\let\@currext#4% + \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty + \let\CurrentOption\@empty + \@reset@ptions + \makeatletter +% \end{macrocode} +% Grab everything in a macro, so the parameter stack is popped before +% any processing begins. +% \changes{v0.2s}{1994/01/17} +% {Modify to reduce parameter stack usage} +% \changes{v1.1b}{1998/05/07} +% {Modify help message for latex/2805} +% \begin{macrocode} + \def\reserved@a{% + \@ifl@aded\@currext{#1}% + {\@if@ptions\@currext{#1}{#2}{}% + {\@latex@error + {Option clash for \@cls@pkg\space #1}% + {The package #1 has already been loaded + with options:\MessageBreak + \space\space[\@ptionlist{#1.\@currext}]\MessageBreak + There has now been an attempt to load it + with options\MessageBreak + \space\space[#2]\MessageBreak + Adding the global options:\MessageBreak + \space\space + \@ptionlist{#1.\@currext},#2\MessageBreak + to your \noexpand\documentclass declaration may fix this.% + \MessageBreak + Try typing \space <return> \space to proceed.}}}% + {\@pass@ptions\@currext{#2}{#1}% +% \end{macrocode} +% \changes{v0.3c}{1994/03/12} +% {Do not use \cs{@pr@videpackage} to avoid typeout} +% \begin{macrocode} + \global\expandafter + \let\csname ver@\@currname.\@currext\endcsname\@empty + \InputIfFileExists + {\@currname.\@currext}% + {}% + {\@missingfileerror\@currname\@currext}% +% \end{macrocode} +% |\@unprocessedoptions| will generate an error for each specified +% option in a package unless a |\ProcessOptions| has appeared in the +% package file. +% \changes{v0.2v}{1994/01/29} +% {All options raise error if no \cs{ProcessOptions} appears} +% \changes{v0.2x}{1994/02/02} +% {Only run the hook and options check if the file was loaded.} +% \begin{macrocode} + \let\@unprocessedoptions\@@unprocessedoptions + \csname\@currname.\@currext-h@@k\endcsname + \expandafter\let\csname\@currname.\@currext-h@@k\endcsname + \@undefined + \@unprocessedoptions} +% \end{macrocode} +% +% \begin{macrocode} + \@ifl@ter\@currext{#1}{#3}{}% + {\@latex@warning@no@line + {You have requested,\on@line, + version\MessageBreak + `#3' of \@cls@pkg\space #1,\MessageBreak + but only version\MessageBreak + `\csname ver@#1.\@currext\endcsname'\MessageBreak + is available}}% +% \end{macrocode} +% \changes{v0.2c}{1993/11/17} +% {Added trap for two \cs{LoadClass} commands.} +% \begin{macrocode} + \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi + \@popfilename + \@reset@ptions}% + \reserved@a} +\@onlypreamble\@onefilewithoptions +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@fileswith@pti@ns} +% Save the definition (for error checking). +% \changes{v0.2c}{1993/11/17} +% {Macro added} +% \begin{macrocode} +\let\@@fileswith@pti@ns\@fileswith@pti@ns +\@onlypreamble\@@fileswith@pti@ns +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@reset@ptions} +% Reset the default option, and clear lists of declared options. +% \changes{v0.2a}{1993/11/14}{macro added} +% \begin{macrocode} +\def\@reset@ptions{% + \global\ifx\@currext\@clsextension + \let\default@ds\OptionNotUsed + \else + \let\default@ds\@unknownoptionerror + \fi + \global\let\ds@\@empty + \global\let\@declaredoptions\@empty} +\@onlypreamble\@reset@ptions +% \end{macrocode} +% \end{macro} +% +% \subsection{Hooks} +% +% Allow code do be saved to be executed at specific later times. +% +% Save things in macros, I considered using toks registers, (and +% |\addto@hook| from the NFSS code, that would require stacking the +% contents in the case of required packages, so just generate a new +% macro for each package. +% \begin{macro}{\@begindocumenthook} +% \changes{v1.0s}{1995/10/20} +% {Make setting conditional, for autoload version} +% \begin{macro}{\@enddocumenthook} +% Stuff to appear at the begining or end of the document. +% \begin{macrocode} +\ifx\@begindocumenthook\@undefined + \let\@begindocumenthook\@empty +\fi +\let\@enddocumenthook\@empty +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\g@addto@macro} +% Globally add to the end of a macro. +% \changes{v0.2a}{1993/11/14}{Made global} +% \changes{v0.2w}{1994/01/31} +% {Use toks register to avoid `hash' problems} +% \changes{v1.0o}{1995/05/17} +% {Make long for latex/1522} +% \changes{v1.0w}{1996/12/17} +% {Use \cs{begingroup} to save making a mathord} +% \changes{v1.0x}{1997/02/05} +% {missing percent /2402} +% \begin{macrocode} +\long\def\g@addto@macro#1#2{% + \begingroup + \toks@\expandafter{#1#2}% + \xdef#1{\the\toks@}% + \endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\AtEndOfPackage} +% \begin{macro}{\AtEndOfClass} +% \begin{macro}{\AtBeginDocument} +% \begin{macro}{\AtEndDocument} +% The access functions. +% \changes{v0.2a}{1993/11/14} +% {Included extension in the generated macro name for package +% and class hooks.} +% \begin{macrocode} +\def\AtEndOfPackage{% + \expandafter\g@addto@macro\csname\@currname.\@currext-h@@k\endcsname} +\let\AtEndOfClass\AtEndOfPackage +\@onlypreamble\AtEndOfPackage +\@onlypreamble\AtEndOfClass +% \end{macrocode} +% +% \begin{macrocode} +\def\AtBeginDocument{\g@addto@macro\@begindocumenthook} +\def\AtEndDocument{\g@addto@macro\@enddocumenthook} +\@onlypreamble\AtBeginDocument +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@cls@pkg} +% The current file type. +% \changes{v0.2i}{1993/12/03} +% {Name changed to avoid clash with output routine.} +% \begin{macrocode} +\def\@cls@pkg{% + \ifx\@currext\@clsextension + document class% + \else + package% + \fi} +\@onlypreamble\@cls@pkg +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@unknownoptionerror} +% Bad option. +% \begin{macrocode} +\def\@unknownoptionerror{% + \@latex@error + {Unknown option `\CurrentOption' for \@cls@pkg\space`\@currname'}% + {The option `\CurrentOption' was not declared in + \@cls@pkg\space`\@currname', perhaps you\MessageBreak + misspelled its name. + Try typing \space <return> + \space to proceed.}} +\@onlypreamble\@unknownoptionerror +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@unprocessedoptions} +% Declare an error for each option, unless a |\ProcessOptions| occured. +% \changes{v0.2v}{1994/01/29} +% {Macro added.} +% \changes{v1.0t}{1995/11/14}{Allow empty option} +% \begin{macrocode} +\def\@@unprocessedoptions{% + \ifx\@currext\@pkgextension + \edef\@curroptions{\@ptionlist{\@currname.\@currext}}% + \@for\CurrentOption:=\@curroptions\do{% + \ifx\CurrentOption\@empty\else\@unknownoptionerror\fi}% + \fi} +\@onlypreamble\@unprocessedoptions +\@onlypreamble\@@unprocessedoptions +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@badrequireerror} +% |\RequirePackage| or |\LoadClass| occurs in the options section. +% \changes{v0.2c}{1993/11/17} +% {Macro added} +% \begin{macrocode} +\def\@badrequireerror#1[#2]#3[#4]{% + \@latex@error + {\noexpand\RequirePackage or \noexpand\LoadClass + in Options Section}% + {The \@cls@pkg\space `\@currname' is defective.\MessageBreak + It attempts to load `#3' in the options section, i.e.,\MessageBreak + between \noexpand\DeclareOption and \string\ProcessOptions.}} +\@onlypreamble\@badrequireerror +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@twoloadclasserror} +% Two |\LoadClass| in a class. +% \changes{v0.2c}{1993/11/17} +% {Macro added} +% \begin{macrocode} +\def\@twoloadclasserror{% + \@latex@error + {Two \noexpand\LoadClass commands}% + {You may only use one \noexpand\LoadClass in a class file}} +\@onlypreamble\@twoloadclasserror +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@twoclasseserror} +% Two |\documentclass| or |\documentstyle|. +% \changes{v0.2h}{1993/11/28} +% {Macro added} +% \begin{macrocode} +\def\@twoclasseserror#1#{% + \@latex@error + {Two \noexpand\documentclass or \noexpand\documentstyle commands}% + {The document may only declare one class.}\@gobble} +\@onlypreamble\@twoclasseserror +% \end{macrocode} +% \end{macro} +% +% \subsection{Providing shipment} +% +% \begin{macro}{\two@digits} +% Prefix a number less than 10 with `0'. +% \begin{macrocode} +\def\two@digits#1{\ifnum#1<10 0\fi\number#1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\filecontents} +% \begin{macro}{\endfilecontents} +% This environment implements inline files. +% The star-form does not write extra comments into the file. +% +% \changes{v0.2h}{1993/11/28} +% {Don't globally allocate a write stream (always use 15)} +% \changes{v0.2r}{1993/12/19}{Different message when ignoring a file} +% \changes{v0.3g}{1994/04/11} +% {Add star form, +% dont write \cs{endinput} at the end of the file.} +% \changes{v1.0c}{1994/05/11} +% {Add checks for form feed and tab} +% \changes{v1.0m}{1995/04/21} +% {Close input check stream: latex/1487} +% \changes{v1.0p}{1995/05/25}{Delete \cs{filec@ntents} after preamble} +% \begin{macrocode} +\begingroup% +\catcode`\*=11 % +\catcode`\^^M\active% +\catcode`\^^L\active\let^^L\relax% +\catcode`\^^I\active% +% \end{macrocode} +% +% \begin{macrocode} +\gdef\filecontents{\@tempswatrue\filec@ntents}% +\gdef\filecontents*{\@tempswafalse\filec@ntents}% +% \end{macrocode} +% +% \begin{macrocode} +\gdef\filec@ntents#1{% + \openin\@inputcheck#1 % + \ifeof\@inputcheck% + \@latex@warning@no@line% + {Writing file `\@currdir#1'}% +% \end{macrocode} +% +% \changes{v1.0y}{1997/10/10} +% {\cs{reserved@c} not \cs{verbatim@out} to save a csname} +% \begin{macrocode} + \chardef\reserved@c15 % + \ch@ck7\reserved@c\write% + \immediate\openout\reserved@c#1\relax% + \else% +% \end{macrocode} +% +% \changes{v1.0y}{1997/10/10} +% {Use \cs{@gobbletwo}} +% \begin{macrocode} + \closein\@inputcheck% + \@latex@warning@no@line% + {File `#1' already exists on the system.\MessageBreak% + Not generating it from this source}% + \let\write\@gobbletwo% + \let\closeout\@gobble% + \fi% + \if@tempswa% +% \end{macrocode} +% +% \changes{v1.0y}{1997/10/10} +% {\cs{@currenvir} in banner} +% \begin{macrocode} + \immediate\write\reserved@c{% + \@percentchar\@percentchar\space% + \expandafter\@gobble\string\LaTeX2e file `#1'^^J% + \@percentchar\@percentchar\space generated by the % + `\@currenvir' \expandafter\@gobblefour\string\newenvironment^^J% + \@percentchar\@percentchar\space from source `\jobname' on % + \number\year/\two@digits\month/\two@digits\day.^^J% + \@percentchar\@percentchar}% + \fi% + \let\do\@makeother\dospecials% +% \end{macrocode} +% +% \changes{v1.0y}{1997/10/10} +% {Check for text before or after \cs{end} environment. latex/2636} +% \begin{macrocode} + \edef\E{\@backslashchar end\string{\@currenvir\string}}% + \edef\reserved@b{% + \def\noexpand\reserved@b% + ####1\E####2\E####3\relax}% + \reserved@b{% + \ifx\relax##3\relax% +% \end{macrocode} +% There was no |\end{filecontents}| +% \begin{macrocode} + \immediate\write\reserved@c{##1}% + \else% +% \end{macrocode} +% There was a |\end{filecontents}|, so stop this time. +% \begin{macrocode} + \edef^^M{\noexpand\end{\@currenvir}}% + \ifx\relax##1\relax% + \else% +% \end{macrocode} +% Text before the |\end|, write it with a warning. +% \begin{macrocode} + \@latex@warning{Writing text `##1' before % + \string\end{\@currenvir}\MessageBreak as last line of #1}% + \immediate\write\reserved@c{##1}% + \fi% + \ifx\relax##2\relax% + \else% +% \end{macrocode} +% Text after the |\end|, ignore it with a warning. +% \begin{macrocode} + \@latex@warning{% + Ignoring text `##2' after \string\end{\@currenvir}}% + \fi% + \fi% + ^^M}% +% \end{macrocode} +% +% \begin{macrocode} + \catcode`\^^L\active% + \let\L\@undefined% + \def^^L{\@ifundefined L^^J^^J^^J}% + \catcode`\^^I\active% + \let\I\@undefined% + \def^^I{\@ifundefined I\space\space}% + \catcode`\^^M\active% + \edef^^M##1^^M{% + \noexpand\reserved@b##1\E\E\relax}}% +\endgroup% +% \end{macrocode} +% +% \begin{macrocode} +\begingroup +\catcode`|=\catcode`\% +\catcode`\%=12 +\catcode`\*=11 +\gdef\@percentchar{%} +\gdef\endfilecontents{| + \immediate\closeout\reserved@c + \def\T##1##2##3{| + \ifx##1\@undefined\else + \@latex@warning@no@line{##2 has been converted to Blank ##3e}| + \fi}| + \T\L{Form Feed}{Lin}| + \T\I{Tab}{Spac}| + \immediate\write\@unused{}} +\global\let\endfilecontents*\endfilecontents +\@onlypreamble\filecontents +\@onlypreamble\endfilecontents +\@onlypreamble\filecontents* +\@onlypreamble\endfilecontents* +\endgroup +\@onlypreamble\filec@ntents +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \changes{v0.2f}{1993/11/22} +% {\cs{@unknownversion} removed} +% \changes{v1.0j}{1994/10/18} +% {Move \cs{listfiles} to ltfiles.dtx} +% +% \begin{macrocode} +%</2ekernel> +% \end{macrocode} +% +% \section{After Preamble} +% Finally we declare a package that allows all the commands declared +% above to be |\@onlypreamble| to be used after |\begin{document}|. +% \changes{v0.3f}{1994/03/16} +% {Add pkgindoc package} +% \changes{v1.1a}{1998/03/21} +% {Correct to new onlypreamble command list} +% \begin{macrocode} +%<*afterpreamble> +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{pkgindoc} + [1994/10/20 v1.1 Package Interface in Document (DPC)] +\def\reserved@a#1\do\@classoptionslist#2\do\filec@ntents#3\relax{% + \gdef\@preamblecmds{#1#3}} +\expandafter\reserved@a\@preamblecmds\relax +%</afterpreamble> +% \end{macrocode} +% +% \Finale diff --git a/Master/texmf-dist/source/latex/base/ltcntrl.dtx b/Master/texmf-dist/source/latex/base/ltcntrl.dtx new file mode 100644 index 00000000000..304609d4523 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltcntrl.dtx @@ -0,0 +1,323 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltcntrl.dtx +%<*driver> +% \fi +\ProvidesFile{ltcntrl.dtx} + [1995/08/16 v1.0g LaTeX Kernel (program control)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltcntrl.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{175} +% +% \changes{v1.0a}{1994/05/16}{(ASAJ) Split from ltinit.dtx.} +% \changes{v1.0b}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% \changes{v1.0c}{1994/11/28} +% {Documentation improvements} +% +% \section{Program control structure} +% +% This section defines a number of control structure macros, such as +% while-loops and for-loops. +% +% \StopEventually{} +% +% \begin{oldcomments} +% \begin{macrocode} +%<*2ekernel> +\message{control,} +% \end{macrocode} +% +% \@whilenum TEST \do {BODY} +% \@whiledim TEST \do {BODY} : These implement the loop +% while TEST do BODY od +% where TEST is a TeX \ifnum or \ifdim test, respectively. +% They are optimized for the normal case of TEST initially false. +% +% \@whilesw SWITCH \fi {BODY} : Implements the loop +% while SWITCH do BODY od +% Optimized for normal case of SWITCH initially false. +% +% \@for NAME := LIST \do {BODY} : Assumes that LIST expands to A1,A2, +% ... ,An . +% Executes BODY n times, with NAME = Ai on the i-th iteration. +% Optimized for the normal case of n = 1. Works for n=0. +% +% \@tfor NAME := LIST \do {BODY} +% if, before expansion, LIST = T1 ... Tn where each Ti is a +% token or {...}, then executes BODY n times, with NAME = Ti +% on the i-th iteration. Works for n=0. +% +% NOTES: 1. These macros use no \@temp sequences. +% 2. These macros do not work if the body contains anything that +% looks syntactically to TeX like an improperly balanced \if +% \else \fi. +% +% \@whilenum TEST \do {BODY} == +% BEGIN +% if TEST +% then BODY +% \@iwhilenum{TEST \relax BODY} +% END +% +% \@iwhilenum {TEST BODY} == +% BEGIN +% if TEST +% then BODY +% \@nextwhile = def(\@iwhilenum) +% else \@nextwhile = def(\@whilenoop) +% fi +% \@nextwhile {TEST BODY} +% END +% +% \@whilesw SWITCH \fi {BODY} == +% BEGIN +% if SWITCH +% then BODY +% \@iwhilesw {SWITCH BODY}\fi +% fi +% END +% +% \@iwhilesw {SWITCH BODY} \fi == +% BEGIN +% if SWITCH +% then BODY +% \@nextwhile = def(\@iwhilesw) +% else \@nextwhile = def(\@whileswnoop) +% fi +% \@nextwhile {SWITCH BODY} \fi +% END +% +% \end{oldcomments} +% +% \begin{macro}{\@whilenoop} +% \begin{macro}{\@whilenum} +% \begin{macro}{\@iwhilenum} +% \changes{v1.0f}{1995/07/09}{Reimplemented using Kabelschacht method} +% \changes{v1.0g}{1995/08/16}{Removed \cs{@whilenoop}} +% \changes{v1.0g}{1995/08/16}{Made defs long} +% \begin{macrocode} +\long\def\@whilenum#1\do #2{\ifnum #1\relax #2\relax\@iwhilenum{#1\relax + #2\relax}\fi} +\long\def\@iwhilenum#1{\ifnum #1\expandafter\@iwhilenum + \else\expandafter\@gobble\fi{#1}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@whiledim} +% \begin{macro}{\@iwhiledim} +% \changes{v1.0f}{1995/07/09}{Reimplemented using Kabelschacht method} +% \changes{v1.0g}{1995/08/16}{Removed \cs{@whilenoop}} +% \changes{v1.0g}{1995/08/16}{Made defs long} +% \begin{macrocode} +\long\def\@whiledim#1\do #2{\ifdim #1\relax#2\@iwhiledim{#1\relax#2}\fi} +\long\def\@iwhiledim#1{\ifdim #1\expandafter\@iwhiledim + \else\expandafter\@gobble\fi{#1}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@whileswnoop} +% \begin{macro}{\@whilesw} +% \begin{macro}{\@iwhilesw} +% \changes{v1.0f}{1995/07/09}{Reimplemented using Kabelschacht method} +% \changes{v1.0g}{1995/08/16}{Removed \cs{@whileswnoop}} +% \begin{macrocode} +\long\def\@whilesw#1\fi#2{#1#2\@iwhilesw{#1#2}\fi\fi} +\long\def\@iwhilesw#1\fi{#1\expandafter\@iwhilesw + \else\@gobbletwo\fi{#1}\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{oldcomments} +% +% \@for NAME := LIST \do {BODY} == +% BEGIN \@forloop expand(LIST),\@nil,\@nil \@@ NAME {BODY} END +% +% \@forloop CAR, CARCDR, CDRCDR \@@ NAME {BODY} == +% BEGIN +% NAME = CAR +% if def(NAME) = def(\@nnil) +% else BODY; +% NAME = CARCDR +% if def(NAME) = def(\@nnil) +% else BODY +% \@iforloop CDRCDR \@@ NAME \do {BODY} +% fi +% fi +% END +% +% \@iforloop CAR, CDR \@@ NAME {BODY} = +% NAME = CAR +% if def(NAME) = def(\@nnil) +% then \@nextwhile = def(\@fornoop) +% else BODY ; +% \@nextwhile = def(\@iforloop) +% fi +% \@nextwhile name cdr {body} +% +% \@tfor NAME := LIST \do {BODY} +% = \@tforloop LIST \@nil \@@ NAME {BODY} +% +% \@tforloop car cdr \@@ name {body} = +% name = car +% if def(name) = def(\@nnil) +% then \@nextwhile == \@fornoop +% else body ; +% \@nextwhile == \@forloop +% fi +% \@nextwhile name cdr {body} +% \end{oldcomments} +% +% \begin{macro}{\@nnil} +% \begin{macrocode} +\def\@nnil{\@nil} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@empty} +% \begin{macrocode} +\def\@empty{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@fornoop} +% \changes{v1.0g}{1995/08/16}{Made defs long} +% \begin{macrocode} +\def\@fornoop#1\@@#2#3{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@for} +% \changes{v1.0d}{1995/04/24} +% {Dont expand second argument with \cs{edef}: /1317 (DPC)} +% \begin{macrocode} +\long\def\@for#1:=#2\do#3{% + \expandafter\def\expandafter\@fortmp\expandafter{#2}% + \ifx\@fortmp\@empty \else + \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@forloop} +% \changes{v1.0g}{1995/08/16}{Made defs long} +% \begin{macrocode} +\long\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else + #5\def#4{#2}\ifx #4\@nnil \else#5\@iforloop #3\@@#4{#5}\fi\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@iforloop} +% \changes{v1.0f}{1995/07/09}{Reimplemented using Kabelschacht method} +% \changes{v1.0g}{1995/08/16}{Made defs long} +% \begin{macrocode} +\long\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil + \expandafter\@fornoop \else + #4\relax\expandafter\@iforloop\fi#2\@@#3{#4}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@tfor} +% \changes{LaTeX209}{1991/10/17} +% {(Rms) \cs{xdef} replaced by \cs{def} +% (See FMi's array.doc)} +% \changes{v1.0c}{1994/03/13} +% {(DPC) Add \cs{@tf@r} so a single group is +% correctly treated.} +% \changes{v1.0f}{1995/07/09}{Reimplemented using Kabelschacht method} +% \changes{v1.0g}{1995/08/16}{Made defs long} +% \begin{macrocode} +\def\@tfor#1:={\@tf@r#1 } +\long\def\@tf@r#1#2\do#3{\def\@fortmp{#2}\ifx\@fortmp\space\else + \@tforloop#2\@nil\@nil\@@#1{#3}\fi} +\long\def\@tforloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil + \expandafter\@fornoop \else + #4\relax\expandafter\@tforloop\fi#2\@@#3{#4}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@break@tfor} +% Break out of a |\@tfor| loop. This should be called \emph{inside} +% the scope of an |\if|. See |\@iffileonpath| for an example. +% \changes{v1.0l}{1994/05/02}{Macro added (from ltfiles.dtx)} +% \changes{v1.0g}{1995/08/16}{Made long} +% \begin{macrocode} +\long\def\@break@tfor#1\@@#2#3{\fi\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@removeelement} +% Removes an element from a comma-separated list and puts it into +% a control sequence, called as +% |\@removeelement{|\meta{element}|}{|\meta{list}|}{|\meta{cs}|}|. +% \begin{macrocode} +\def\@removeelement#1#2#3{% + \def\reserved@a##1,#1,##2\reserved@a{##1,##2\reserved@b}% + \def\reserved@b##1,\reserved@b##2\reserved@b{% + \ifx,##1\@empty\else##1\fi}% + \edef#3{% + \expandafter\reserved@b\reserved@a,#2,\reserved@b,#1,\reserved@a}} +% \end{macrocode} +% \end{macro} +% +% +% \changes{v1.0e}{1995/04/29}{Removed unused defs for +% \cs{@setprotect} and \cs{@resetprotect}} +% \changes{v1.0e}{1995/04/29}{Moved init of \cs{protect} +% to ltdefns.dtx} +% \begin{macrocode} +%</2ekernel> +% \end{macrocode} +% +%\Finale +\endinput diff --git a/Master/texmf-dist/source/latex/base/ltcounts.dtx b/Master/texmf-dist/source/latex/base/ltcounts.dtx new file mode 100644 index 00000000000..23acbc10dee --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltcounts.dtx @@ -0,0 +1,434 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltcounts.dtx +% +%<*driver> +% \fi +\ProvidesFile{ltcounts.dtx} + [1998/05/16 v1.1g LaTeX Kernel (Counters)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltcounts.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} + +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{256} +% +% \changes{v1.0c}{1994/03/29} +% {Create file from parts of ltmiscen and ltherest.} +% \changes{v1.1a}{1994/05/19}{Extracted file from ltcntlen.} +% \changes{v1.1d}{1996/04/23}{Documentation improvements} +% +% \section{Counters and Lengths} +% Commands for defining and using counters. This file defines: +% +% \DescribeMacro{\newcounter} +% To define a new counter. +% +% \DescribeMacro{\setcounter} +% To set the value of counters. +% +% \DescribeMacro{\addtocounter} +% Increase the counter |#1| by the number |#2|. +% +% \DescribeMacro{\stepcounter} +% Increase a counter by one. +% +% \DescribeMacro{\refstepcounter} +% Increase a counter by one, also setting the value used by |\label|. +% +% +% \DescribeMacro{\value} +% For accessing the value of the counter as a \TeX\ number (as opposed +% to |\the|\meta{counter} which expands to the \emph{printed} +% representation of \meta{counter}) +% +% \DescribeMacro\arabic +% |\arabic|\marg{counter}: 1, 2, 3, \ldots +% +% \DescribeMacro\roman +% |\roman|\marg{counter}: i, ii, iii, \ldots +% +% \DescribeMacro\Roman +% |\Roman|\marg{counter}: I, II, III, \ldots +% +% \DescribeMacro\alph +% |\alph|\marg{counter}: a, b, c, \ldots +% +% \DescribeMacro\Alph +% |\Alph|\marg{counter}: A, B, C, \ldots +% +% \DescribeMacro\fnsymbol +% |\fnsymbol|\marg{counter}: $*$, $\dagger$, $\ddagger$, \ldots +% +% +% \StopEventually{} +% +% \begin{macrocode} +%<*2ekernel> +% \end{macrocode} +% +% \subsection{Environment Counter Macros} +% +% An environment foo has an associated counter defined by the +% following control sequences: +% +% \begin{tabular}{lp{.75\textwidth}} +% |\c@foo| & Contains the counter's numerical value. +% It is defined by |\newcount\foocounter|.\\ +% |\thefoo| & Macro that expands to the printed value of |\foocounter|. +% For example, if sections are numbered within chapters, +% and section headings look like +% +% Section II-3. The Nature of Counters +% +% then |\thesection| might be defined by:\newline +% |\def\thesection|\newline\hspace*{2em} +% |{\@Roman{\c@chapter}-\@arabic{\c@section}}|\\ +% +% |\p@foo| & Macro that expands to a printed `reference prefix' of +% counter foo. Any |\ref| to a value created by counter +% foo will produce the expansion of |\p@foo\thefoo| when +% the |\label| command is executed. See file \texttt{ltxref.dtx} +% for an extension of this mechanism.\\ +% |\cl@foo| & List of counters to be reset when foo stepped. +% Has format +% |\@elt{countera}\@elt{counterb}\@elt{counterc}|. +% \end{tabular} +% +% \textbf{NOTE:}\\ +% |\thefoo| and |\p@foo| \emph{must} be defined in such a way that +% |\edef\bar{\thefoo}| or |\edef\bar{\p@foo}| +% defines |\bar| so that it will evaluate to the counter value at the +% time of the |\edef|, even after |\foocounter| and any other counters +% have been changed. This will happen if you use the standard commands +% |\@arabic|, |\@Roman|, etc. +% +% +% The following commands are used to define and modify counters. +% +% |\refstepcounter|\marg{foo}\\ +% Same as |\stepcounter|, but it also defines +% |\@currentreference| so that a subsequent +% |\label|\marg{bar} command causes |\ref|\marg{bar} to +% generate the current value of counter \meta{foo}. +% +% |\@definecounter|\marg{foo}\\ +% Initializes counter \marg{foo} (with empty reset list), defines +% |\p@foo| and |\thefoo| to be null. Also adds \meta{foo} +% to |\cl@@ckpt| -- +% the reset list of a dummy counter |@ckpt| used for taking +% checkpoints for the |\include| system. +% +% |\@addtoreset|\marg{foo}\marg{bar} : +% Adds counter \meta{foo} to the list of counters +% |\cl@bar| to be reset when counter \meta{bar} is stepped. +% +% +% \begin{macro}{\setcounter} +% \changes{v1.0d}{1994/04/09} +% {\cs{@nocnterr} now has counter name argument} +% \changes{v1.0e}{1994/04/17} +% {Use \cs{@nocounterr} instead of \cs{@nocnterr}} +% |\setcounter|\marg{foo}\marg{val} : +% Globally sets |\foocounter| equal to \meta{val}. +% \begin{macrocode} +\def\setcounter#1#2{% + \@ifundefined{c@#1}% + {\@nocounterr{#1}}% + {\global\csname c@#1\endcsname#2\relax}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\addtocounter} +% \changes{v1.0d}{1994/04/09} +% {\cs{@nocnterr} now has counter name argument} +% \changes{v1.0e}{1994/04/17} +% {Use \cs{@nocounterr} instead of \cs{@nocnterr}} +% |\addtocounter|\marg{foo}\marg{val} +% Globally increments |\foocounter| by \meta{val}. +% \begin{macrocode} +\def\addtocounter#1#2{% + \@ifundefined{c@#1}% + {\@nocounterr{#1}}% + {\global\advance\csname c@#1\endcsname #2\relax}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\newcounter} +% |\newcounter|\marg{newctr}\oarg{oldctr} +% Defines \meta{newctr} to be a counter, which is reset when counter +% \meta{oldctr} is stepped. If \meta{newctr} already defined +% produces +% `|c@newctr already defined|' error. +% \begin{macrocode} +\def\newcounter#1{% + \expandafter\@ifdefinable \csname c@#1\endcsname + {\@definecounter{#1}}% + \@ifnextchar[{\@newctr{#1}}{}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\value} +% |\value|\marg{ctr} +% produces the value of counter \meta{ctr}, for use with +% a |\setcounter| or |\addtocounter| command. +% \begin{macrocode} +\def\value#1{\csname c@#1\endcsname} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@newctr} +% \changes{v1.0d}{1994/04/09} +% {\cs{@nocnterr} now has counter name argument} +% \changes{v1.0e}{1994/04/17} +% {Use \cs{@nocounterr} instead of \cs{@nocnterr}} +% \begin{macrocode} +\def\@newctr#1[#2]{% + \@ifundefined{c@#2}{\@nocounterr{#2}}{\@addtoreset{#1}{#2}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\stepcounter} +% \changes{LaTeX209}{1992/11/23}{Replaced \{\} in \cs{stepcounter} by +% \cs{begingroup} \cs{endgroup} to avoid adding an empty ord in +% math mode} +% \changes{v1.0d}{1994/04/09} +% {Use \cs{addtocounter} to have name checked} +% |\stepcounter|{foo} +% Globally increments counter |\c@FOO| +% and resets all subsidiary counters. +% \begin{macrocode} +\def\stepcounter#1{% + \addtocounter{#1}\@ne + \begingroup + \let\@elt\@stpelt + \csname cl@#1\endcsname + \endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@stpelt} +% \begin{macrocode} +\def\@stpelt#1{\global\csname c@#1\endcsname \z@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\cl@@ckpt} +% \begin{macrocode} +\def\cl@@ckpt{\@elt{page}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@definecounter} +% \changes{v1.1b}{1995/05/20}{Streamlined code} +% \changes{v1.1c}{1995/05/20}{And do it right} +% +% \begin{macrocode} +\def\@definecounter#1{\expandafter\newcount\csname c@#1\endcsname + \setcounter{#1}\z@ + \global\expandafter\let\csname cl@#1\endcsname\@empty + \@addtoreset{#1}{@ckpt}% + \global\expandafter\let\csname p@#1\endcsname\@empty + \expandafter + \gdef\csname the#1\expandafter\endcsname\expandafter + {\expandafter\@arabic\csname c@#1\endcsname}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@addtoreset} +% \begin{macrocode} +\def\@addtoreset#1#2{\expandafter\@cons\csname cl@#2\endcsname {{#1}}} +% \end{macrocode} +% \end{macro} +% +% +% Numbering commands for definitions of |\theCOUNTER| and |\list| +% arguments. +% +% All commands can now be used in text and math mode. +% +% \begin{macro}{\arabic} +% Representation of\meta{counter} as arabic numerals. +% Changed 29 Apr 86 to make it print the obvious thing +% it COUNTER not positive. +% \begin{macrocode} +\def\arabic#1{\expandafter\@arabic\csname c@#1\endcsname} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\roman} +% Representation of \meta{counter} as lower-case +% Roman numerals. +% \begin{macrocode} +\def\roman#1{\expandafter\@roman\csname c@#1\endcsname} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Roman} +% Representation of \meta{counter} as upper-case +% Roman numerals. +% \begin{macrocode} +\def\Roman#1{\expandafter\@Roman\csname c@#1\endcsname} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\alph} +% Representation of \meta{counter} as a lower-case +% letter: 1 = a, 2 = b, etc. +% \begin{macrocode} +\def\alph#1{\expandafter\@alph\csname c@#1\endcsname} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Alph} +% Representation of \meta{counter} as an upper-case +% letter: 1 = A, 2 = B, etc. +% \begin{macrocode} +\def\Alph#1{\expandafter\@Alph\csname c@#1\endcsname} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fnsymbol} +% \changes{v1.1b}{1995/05/20}{Streamlined code} +% \changes{v1.1e}{1997/03/21} +% {Use \cs{mathsection} and \cs{mathparagraph}. latex/2445} +% +% Representation of \meta{COUNTER} as a footnote +% symbol: 1 = $*$, 2 = $\dagger$, etc. +% \begin{macrocode} +\def\fnsymbol#1{\expandafter\@fnsymbol\csname c@#1\endcsname} +% \end{macrocode} +% \end{macro} +% +% \changes{v1.0f}{1994/05/13}{Removed \cs{@ialph}} +% \changes{v1.0f}{1994/05/13}{Removed \cs{@Ialph}} +% +% \begin{macro}{\@arabic} +% |\@arabic\FOOcounter| +% Representation of |\FOOcounter| as arabic numerals. +% \begin{macrocode} +\def\@arabic#1{\number #1} %% changed 29 Apr 86 +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@roman} +% |\@roman\FOOcounter| +% Representation of |\FOOcounter| as lower-case +% Roman numerals. +% \begin{macrocode} +\def\@roman#1{\romannumeral #1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@Roman} +% |\@Roman\FOOcounter| +% Representation of |\FOOcounter| as upper-case +% Roman numerals. + +% \changes{v1.1f}{1997/10/06}{Change \cs{@Roman} to be fully +% expandable, so that the result is written properly to files.} +% \begin{macrocode} +\def\@Roman#1{\expandafter\@slowromancap\romannumeral #1@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@slowromancap} +% \changes{v1.1f}{1997/10/06}{Macro added.} +% Fully expandable macro to change a roman number to uppercase. +% \begin{macrocode} +\def\@slowromancap#1{\ifx @#1% then terminate + \else + \if i#1I\else\if v#1V\else\if x#1X\else\if l#1L\else\if + c#1C\else\if d#1D\else \if m#1M\else#1\fi\fi\fi\fi\fi\fi\fi + \expandafter\@slowromancap + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@alph} +% |\@alph\FOOcounter| +% Representation of |\FOOcounter| as a lower-case +% letter: 1 = a, 2 = b, etc. +% \begin{macrocode} +\def\@alph#1{% + \ifcase#1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or + k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or + y\or z\else\@ctrerr\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@Alph} +% |\@Alph\FOOcounter| +% Representation of |\FOOcounter| as an upper-case +% letter: 1 = A, 2 = B, etc. +% \begin{macrocode} +\def\@Alph#1{% + \ifcase#1\or A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or + K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or + Y\or Z\else\@ctrerr\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@fnsymbol} +% \changes{v1.1b}{1995/05/20}{Allowing both text and math} +% Typesetting old fashioned footnote symbols. +% This can be done both in text or math mode now. +% \begin{macrocode} +\def\@fnsymbol#1{\ensuremath{\ifcase#1\or *\or \dagger\or \ddagger\or + \mathsection\or \mathparagraph\or \|\or **\or \dagger\dagger + \or \ddagger\ddagger \else\@ctrerr\fi}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macrocode} +%</2ekernel> +% \end{macrocode} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltdefns.dtx b/Master/texmf-dist/source/latex/base/ltdefns.dtx new file mode 100644 index 00000000000..f3ef0b05149 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltdefns.dtx @@ -0,0 +1,1455 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltdefns.dtx +%<*driver> +% \fi +\ProvidesFile{ltdefns.dtx} + [2004/02/20 v1.3g LaTeX Kernel (definition commands)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltdefns.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{746} +% +% \changes{v1.0n}{1994/05/10}{(ASAJ) Added +% \cs{DeclareProtectedCommand}.} +% \changes{v1.0p}{1994/05/12}{(ASAJ) Fixed a bug with \cs{relax} +% which was +% using \cs{@gobble} before defining it.} +% \changes{v1.0q}{1994/05/13}{(ASAJ) Renamed +% \cs{DeclareProtectedCommand} to +% \cs{DeclareRobustCommand}. Removed \cs{@if@short@command}.} +% \changes{v1.0q}{1994/05/13}{(ASAJ) Replaces \cs{space} by `~' in +% \cs{csname}.} +% \changes{v1.0r}{1994/05/13}{(ASAJ) Added logging message to +% \cs{DeclareProtectedCommand}.} +% \changes{v1.0s}{1994/05/13}{(ASAJ) Added \cs{@backslashchar}.} +% \changes{v1.0s}{1994/05/13}{(ASAJ) Coded \cs{@ifdefinable} more +% efficiently.} +% \changes{v1.1a}{1994/05/16}{(ASAJ) Split from ltinit.dtx.} +% \changes{v1.1b}{1994/05/17}{(ASAJ) Removed warnings and logging to +% lterror.dtx.} +% \changes{v1.1b}{1994/05/17}{(ASAJ) Added definitions for protect.} +% \changes{v1.1c}{1994/05/17}{(ASAJ) Redid definitions for protect.} +% \changes{v1.1d}{1994/05/19}{(RmS) Added definitions for +% \cs{@namedef} and \cs{@nameuse} again.} +% \changes{v1.1e}{1994/05/20}{Changed command name from +% \cs{@checkcommand} to \cs{CheckCommand}.} +% \changes{v1.1f}{1994/05/22}{Use new warning and error cmds} +% \changes{v1.2a}{1994/10/18}{Add star-forms for all commands} +% \changes{v1.2a}{1994/10/18}{Add extra test for \cs{endgraf}} +% \changes{v1.2b}{1994/10/25}{Documentation improvements} +% \changes{v1.2c}{1994/10/30}{(CAR)\cs{@onelevel@sanitize} added} +% \changes{v1.2f}{1994/10/30}{(DPC)\cs{newwrite}'s moved to ltfiles} +% \changes{v1.0g}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% \changes{v1.0p}{1995/07/13}{Updates to documentation} +% +% \section{Definitions} +% +% This section contains commands used in defining other macros. +% +% \StopEventually{} +% +% \begin{macrocode} +%<*2ekernel> +% \end{macrocode} +% +% \subsection{Initex initialisations} +% +% \task{???}{This section needs extension} +% +% \begin{macro}{\two@digits} +% \changes{LaTeX2e}{1993/11/23}{Macro added} +% Prefix a number less than 10 with `0'. +% \begin{macrocode} +\def\two@digits#1{\ifnum#1<10 0\fi\number#1} +% \end{macrocode} +% \end{macro} +% +% \changes{v1.2e}{1994/11/04}{Added \cs{set@display@protect} to +% \cs{typeout}. ASAJ.} +% +% \begin{macro}{\typeout} +% Display something on the terminal. +% \begin{macrocode} +\def\typeout#1{\begingroup\set@display@protect + \immediate\write\@unused{#1}\endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\newlinechar} +% A char to be used as new-line in output to files. +% \begin{macrocode} +\newlinechar`\^^J +% \end{macrocode} +% \end{macro} +% +% \subsection{Saved versions of \TeX{} primitives} +% +% The TeX primitive |\foo| is saved as |\@@foo|. +% The following primitives are handled in this way: +% \begin{macro}{\@@par} +% \begin{macrocode} +\let\@@par=\par +%\let\@@input=\input %%% moved earlier +%\let\@@end=\end %%% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@hyph} +% \begin{macro}{\-} +% \changes{1.2x}{1995/12/13}{Documentation changed.} +% The following comment was added when these commands were first set +% up, 19 April 1986: +% the |\-| command is redefined to allow it to work in the |\ttfamily| +% type style, where automatic hyphenation is suppressed by setting +% |\hyphenchar| to~$-1$. The original primitive \TeX{} definition is +% saved as |\@@hyph| just in case anyone needs it. +% +% There is a need for a robust command for a discretionary hyphen +% since its exact representation depends on the glyphs available in +% the current font. For example, with suitable fonts and the +% \texttt{T1} font encoding it is possible to use hanging hyphens. +% +% A suitable robust definition that allows for many possible types of +% font and encoding may be as follows: +% \begin{verbatim} +% \DeclareRobustCommand {\-}{% +% \discretionary {% +% \char \ifnum\hyphenchar\font<\z@ +% \defaulthyphenchar +% \else +% \hyphenchar\font +% \fi +% }{}{}% +% } +% \end{verbatim} +% +% The redefinition (via |\let|) of |\-| within tabbing also makes the +% use of a robust command advisable since then any redefinition +% of |\-| via |\DeclareRobustCommand| will not cause a conflict. +% +% Therefore, macro writers should be hereby warned that +% these internals will probably change! It is likely that a future +% release of \LaTeX{} will make |\-| effectively an encoding specific +% text command. +% +% \begin{macrocode} +\let\@@hyph=\- % Save original primitive definition +\def\-{\discretionary{-}{}{}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@dischyph} +% \changes{v1.0g}{1994/04/12} +% {Define \cs{@dischyph}, was previously in ltboxes.dtx} +% \begin{macrocode} +\let\@dischyph=\- +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@italiccorr} +% Save the original italic correction. +% \changes{v1.0a}{1994/03/07}{Macro added} +% \begin{macrocode} +\let\@@italiccorr=\/ +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@height} +% \begin{macro}{\@depth} +% \begin{macro}{\@width} +% \begin{macro}{\@minus} +% \changes{LaTeX2e}{1993/11/22}{Macro added} +% \begin{macro}{\@plus} +% \changes{LaTeX2e}{1993/11/22}{Macro added} +% +% The following definitions save token space. E.g., using +% |\@height| instead of height saves 5 tokens at the cost in time +% of one macro expansion. +% \begin{macrocode} +\def\@height{height} \def\@depth{depth} \def\@width{width} +\def\@minus{minus} +\def\@plus{plus} +% \end{macrocode} +% \begin{macro}{\hb@xt@} +% \changes{v1.2k}{1995/05/07}{Macro added} +% The next one is another 100 tokens worth. +% \begin{macrocode} +\def\hb@xt@{\hbox to} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +\message{hacks,} +% \end{macrocode} +% +% \subsection{Command definitions} +% +% This section defines the following commands: +% +% \DescribeMacro +% {\@namedef}\marg{NAME}\\ Expands to |\def\|\marg{NAME}, +% except name can contain any characters. +% +% \DescribeMacro +% {\@nameuse}\marg{NAME}\\ +% Expands to |\|\marg{NAME}. +% +% \DescribeMacro +% {\@ifnextchar} X\marg{YES}\marg{NO}\\ +% Expands to \meta{YES} if next character is an `X', +% and to \meta{NO} otherwise. +% (Uses |\reserved@a|--|\reserved@c|.) +% NOTE: GOBBLES ANY SPACE FOLLOWING IT. +% +% \DescribeMacro +% {\@ifstar}\marg{YES}\marg{NO}\\ +% Gobbles following spaces and then tests if next the +% character is a '*'. If it is, then it gobbles the +% `*' and expands to \meta{YES}, otherwise it expands to \meta{NO}. +% +% \DescribeMacro +% {\@dblarg}\marg{CMD}\marg{ARG}\\ +% Expands to |\|\marg{CMD}\oarg{ARG}\marg{ARG}. Use +% |\@dblarg\CS| when |\CS| takes arguments |[ARG1]{ARG2}|, +% where default is| ARG1| = |ARG2|. +% +% \DescribeMacro +% {\@ifundefined}\marg{NAME}\marg{YES}\marg{NO}\\ +% : If \cs{NAME} is undefined then it executes \meta{YES}, +% otherwise it executes \meta{NO}. More precisely, +% true if \cs{NAME} either undefined or = |\relax|. +% +% \DescribeMacro +% {\@ifdefinable}|\NAME|\marg{YES} +% Executes \meta{YES} if the user is allowed to define |\NAME|, +% otherwise it gives an error. The user can define |\NAME| +% if |\@ifundefined{NAME}| is true, '|NAME|' $\neq$ '|relax|' +% and the first three letters of '|NAME|' are not +% '|end|', and if |\endNAME| is not defined. +% +% \DescribeMacro +% \newcommand|*|\marg{\cs{FOO}}\oarg{i}\marg{TEXT}\\ +% User command to define |\FOO| to be a macro with +% i arguments (i = 0 if missing) having the definition +% \meta{TEXT}. Produces an error if |\FOO| already +% defined. +% +% Normally the command is defined to be |\long| (ie it may +% take multiple paragraphs in its argument). In the +% star-form, the command is not defined as |\long| and a +% blank line in any argument to the command would generate +% an error. +% +% \DescribeMacro +% \renewcommand|*|\marg{\cs{FOO}}\oarg{i}\marg{TEXT}\\ +% Same as |\newcommand|, except it checks if |\FOO| already defined. +% +% \DescribeMacro +% \newenvironment|*|\marg{FOO}\oarg{i}\marg{DEF1}\marg{DEF2}\\ +% equivalent to:\\ +% |\newcommand{\FOO}[i]{DEF1}| |\def{\endFOO}{DEF2}|\\ +% (or the appropriate star forms). +% +% \DescribeMacro +% \renewenvironment\\ Obvious companion to |\newenvironment|. +% +% \DescribeMacro +% \@cons : See description of |\output| routine. +% +% \DescribeMacro{\@car} +% |\@car T1 T2 ... Tn\@nil| == |T1| (unexpanded) +% +% \DescribeMacro{\@cdr} +% |\@cdr T1 T2 ... Tn\@ni|l == |T2 ... Tn| (unexpanded) +% +% \DescribeMacro +% \typeout\marg{message}\\ Produces a warning message on the terminal. +% +% \DescribeMacro +% \typein\marg{message}\\ +% Types message, asks the user to type in a command, then +% executes it +% +% \DescribeMacro +% \typein\oarg{\cs{CS}}\marg{MSG}\\ +% Same as above, except defines |\CS| to be the input +% instead of executing it. +% +% \changes{LaTeX209}{1992/03/18} +% {(RMS) changed input channel from 0 to \cs{@inputcheck} to avoid +% conflicts with other channels allocated by \cs{newread}} +% +% \begin{macro}{\typein} +% +% \changes{v1.2k}{1995/05/08}{Use \cs{@firstofone}} +% \changes{v1.2l}{1995/05/08}{Remove unnecessary braces} +% \changes{v1.2l}{1995/05/08}{Replace \cs{def} by \cs{let}} +% \changes{v1.2m}{1995/05/24}{(DPC) New implementation} +% \changes{v1.2u}{1995/10/16}{(DPC) Use \cs{@testopt} /1911} +% \begin{macrocode} +\def\typein{% + \let\@typein\relax + \@testopt\@xtypein\@typein} +% \end{macrocode} +% +% \changes{v1.2r}{1995/10/03} +% {Add missing \cs{@typein} for /1710 (from patch file)} +% \begin{macrocode} +\def\@xtypein[#1]#2{% + \typeout{#2}% + \advance\endlinechar\@M + \read\@inputcheck to#1% + \advance\endlinechar-\@M + \@typein} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@namedef} +% \begin{macrocode} +\def\@namedef#1{\expandafter\def\csname #1\endcsname} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@nameuse} +% \begin{macrocode} +\def\@nameuse#1{\csname #1\endcsname} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@cons} +% \begin{macrocode} +\def\@cons#1#2{\begingroup\let\@elt\relax\xdef#1{#1\@elt #2}\endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@car} +% \begin{macro}{\@cdr} +% \begin{macrocode} +\def\@car#1#2\@nil{#1} +\def\@cdr#1#2\@nil{#2} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@carcube} +% |\@carcube T1 ... Tn\@nil| = |T1| |T2| |T3| , $n > 3$ +% \begin{macrocode} +\def\@carcube#1#2#3#4\@nil{#1#2#3} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\@onlypreamble} +% \begin{macro}{\@preamblecmds} +% This macro adds its argument to the list of commands stored in +% |\@preamblecmds| to be +% disabled after |\begin{document}|. These commands are redefined +% to generate |\@notprerr| at this point. +% \begin{macrocode} +\def\@preamblecmds{} +\def\@onlypreamble#1{% + \expandafter\gdef\expandafter\@preamblecmds\expandafter{% + \@preamblecmds\do#1}} +\@onlypreamble\@onlypreamble +\@onlypreamble\@preamblecmds +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@star@or@long} +% \changes{v1.2a}{1994/10/18}{macro added} +% Look ahead for a |*|. If present reset |\l@ngrel@x| so that +% the next definition, |#1|, will be non-long. +% \begin{macrocode} +\def\@star@or@long#1{% + \@ifstar + {\let\l@ngrel@x\relax#1}% + {\let\l@ngrel@x\long#1}} +% \end{macrocode} +% \end{macro} +% + +% \begin{macro}{\l@ngrel@x} +% This is either |\relax| or |\long| depending on whether the |*|-form +% of a definition command is being executed. +% \begin{macrocode} +\let\l@ngrel@x\relax +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\newcommand} +% \changes{LaTeX2e}{1993/11/23}{Macro reimplemented and extended} +% User level |\newcommand|.% +% \begin{macrocode} +\def\newcommand{\@star@or@long\new@command} +% \end{macrocode} +% +% \begin{macro}{\new@command} +% \changes{v1.2u}{1995/10/16}{(DPC) Use \cs{@testopt} /1911} +% \begin{macrocode} +\def\new@command#1{% + \@testopt{\@newcommand#1}0} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@newcommand} +% \changes{LaTeX2e}{1993/11/23}{Macro added} +% \begin{macro}{\@argdef} +% \changes{LaTeX2e}{1993/11/23}{Macro added} +% \begin{macro}{\@xargdef} +% \changes{LaTeX2e}{1993/11/23}{Macro interface changed} +% \changes{v1.1g}{2004/01/23}{Use kernel version of +% \cs{@ifnextchar} (pr/3501)} +% Handling arguments for |\newcommand|. +% \begin{macrocode} +\def\@newcommand#1[#2]{% + \kernel@ifnextchar [{\@xargdef#1[#2]}% + {\@argdef#1[#2]}} +% \end{macrocode} +% Define |#1| if it is definable. +% +% Both here and in |\@xargdef| the replacement text is absorbed as +% an argument because this removes any space-token that may appear +% after the optional argument(s). +% \begin{macrocode} +\long\def\@argdef#1[#2]#3{% + \@ifdefinable #1{\@yargdef#1\@ne{#2}{#3}}} +% \end{macrocode} +% +% \changes{v1.2q}{1995/10/02} +% {New implementation, using \cs{@test@opt}} +% Handle the second optional argument. +% \begin{macrocode} +\long\def\@xargdef#1[#2][#3]#4{% + \@ifdefinable#1{% +% \end{macrocode} +% Define the actual command to be:\\ +% |\def\foo{\@protected@testopt\foo\\foo{default}}|\\ +% where |\\foo| is a csname generated from applying |\csname| and +% |\string| to |\foo|, ie the actual name contains a backslash and +% therefore can't clash easily with exisiting command names. +% ``Default'' is the contents of the second optional argument of +% |(re)newcommand|. +% +% The |\aut@global| command below is only used in the autoload +% format. If it is |\global| then a global definition will be made. +% \changes{v1.2q}{1995/10/02} +% {Add \cs{aut@global} in autoload version} +% \changes{v1.2z2}{1998/03/04} +% {Unnecessary \cs{expandafter} removed: pr/2758} +% \begin{macrocode} +%<autoload>\aut@global + \expandafter\def\expandafter#1\expandafter{% + \expandafter + \@protected@testopt + \expandafter + #1% + \csname\string#1\endcsname + {#3}}% +% \end{macrocode} +% Now we define the internal macro ie |\\foo| which is supposed to +% pick up all arguments (optional and mandatory). +% \begin{macrocode} + \expandafter\@yargdef + \csname\string#1\endcsname + \tw@ + {#2}% + {#4}}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@testopt} +% \changes{v1.2q}{1995/10/02} +% {Macro added} +% \changes{v1.3a}{1999/01/07} +% {made long and brace optional arg. latex/2896} +% This macro encapsulates the most common call to |\@ifnextchar|, saving +% several tokens each time it is used in the definition of a command +% with an optional argument. +% |#1| The code to execute in the case that there is a |[| need not be +% a single token but can be any sequence of commands that `expects' to +% be followed by |[|. If this command were only used in |\newcommand| +% definitions then |#1| would be a single token and the braces could +% be omitted from |{#1}| in the definition below, saving a bit of +% memory. +% \changes{v1.1g}{2004/01/23}{Use kernel version of +% \cs{@ifnextchar} (pr/3501)} +% \begin{macrocode} +\long\def\@testopt#1#2{% + \kernel@ifnextchar[{#1}{#1[{#2}]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@protected@testopt} +% \changes{v1.2q}{1995/10/02} +% {Macro added} +% Robust version of |\@testopt|. The extra argument (|#1|) must be a +% single token. If protection is needed the call expands to |\protect| +% applied to this token, and the 2nd and 3rd arguments are +% discarded (by |\@x@protect|). Otherwise |\@testopt| is called on +% the 2nd and 3rd arguments. +% +% This method of making commands robust avoids the need for using up +% two csnames per command, the price is the extra expansion time +% for the |\ifx| test. +% \begin{macrocode} +\def\@protected@testopt#1{%% + \ifx\protect\@typeset@protect + \expandafter\@testopt + \else + \@x@protect#1% + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@yargdef} +% \begin{macro}{\@yargd@f} +% \changes{v1.3f}{1999/04/29}{New macro added} +% +% \changes{LaTeX2e}{1993/11/23}{Macro interface changed} +% \changes{LaTeX2e}{1993/11/23}{Avoid \cs{@?@?} token} +% \changes{v1.0b}{1994/03/12}{Name changed from \cs{XXX@argdef}} +% \changes{v1.3c}{1999/01/18}{New implementation DPC /2942} +% \changes{v1.3d}{1999/02/09}{catch bad argument forms by re-inserting \#3} +% \changes{v1.3f}{1999/04/29}{Full expansion and conversion needed +% for digit in new version, see pr/3013} +% +% These generate a primitive argument specification, from a +% \LaTeX\ |[|\meta{digit}|]| form; in fact \meta{digit} can be +% anything such that |\number|~\meta{digit} is single digit. +% +% Reorganised slightly so that |\renewcommand{\reserved@a}[1]{foo}| +% works. I am not sure this is worth it, as a following +% |\newcommand| would over-write the definition of |\reserved@a|. +% +% Recall that \LaTeX2.09 goes into an infinite loop with +% |\renewcommand[1]{\@tempa}{foo}| (DPC 6 October 93). +% +% Reorganised again (DPC 1999). Rather than make a loop to +% construct the argument spec by counting, just extract the +% required argument spec by using a delimited argument (delimited +% by the digit). This is faster and uses less tokens. The coding +% is slightly odd to preserve the old interface (using |#2| = +% |\tw@| as the flag to surround the first argument with |[]|. But +% the new method did not allow for the number of arguments |#3| not +% being given as an explicit digit; hence (further expansion of +% this argument and use of) |\number| was added later in 1999. +% +% It is not clear why these are still |\long|. +% +% \begin{macrocode} +\long \def \@yargdef #1#2#3{% + \ifx#2\tw@ + \def\reserved@b##11{[####1]}% + \else + \let\reserved@b\@gobble + \fi + \expandafter + \@yargd@f \expandafter{\number #3}#1% +} +% \end{macrocode} +% +% The |\aut@global| command below is only used in the autoload +% format. If it is |\global| then a global definition will be made. +% \changes{v1.2q}{1995/10/02} +% {Add \cs{aut@global} in autoload version} +% \begin{macrocode} +\long \def \@yargd@f#1#2{% + \def \reserved@a ##1#1##2##{% +%<autoload>\aut@global + \expandafter\def\expandafter#2\reserved@b ##1#1% + }% + \l@ngrel@x \reserved@a 0##1##2##3##4##5##6##7##8##9###1% +} +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@reargdef} +% \changes{LaTeX2e}{1993/12/20} +% {Kept old version of \cs{@reargdef}, for array.sty} +% \changes{v1.0b}{1994/03/12}{New defn, in terms of \cs{@yargdef}} +% \changes{v1.2y}{1996/07/26}{third arg picked up by \cs{@yargdef}} +% \begin{macrocode} +\long\def\@reargdef#1[#2]{% + \@yargdef#1\@ne{#2}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\renewcommand} +% Check the command name is already used. If not give an error +% message. Then temporarily +% disable |\@ifdefinable| then call |\newcommand|. (Previous +% version |\let#1=\relax| but this does not work too well if |#1| +% is |\@temp|\emph{a--e}.) +% \changes{LaTeX2e}{1993/11/23}{Macro reimplemented and extended} +% \changes{v1.1f}{1994/05/2}{Removed surplus \cs{space} in error} +% \begin{macrocode} +\def\renewcommand{\@star@or@long\renew@command} +% \end{macrocode} +% +% \begin{macro}{\renew@command} +% \changes{v1.2y}{1996/07/26}{use \cs{relax} in place of empty arg} +% \changes{v1.2y}{1996/07/26}{use \cs{noexpand} instead of \cs{string}} +% \changes{v1.2z1}{1997/10/21}{Use \cs{begingroup}/\cs{endgroup} rather +% than braces for grouping, to avoid generating empty math atom.} +% \begin{macrocode} +\def\renew@command#1{% + \begingroup \escapechar\m@ne\xdef\@gtempa{{\string#1}}\endgroup + \expandafter\@ifundefined\@gtempa + {\@latex@error{\noexpand#1undefined}\@ehc}% + \relax + \let\@ifdefinable\@rc@ifdefinable + \new@command#1} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \changes{v1.0n}{1994/05/10}{Removed braces around \cs{@ifundefined} +% argument. ASAJ.} +% \changes{v1.0s}{1994/05/13}{Coded more efficiently, thanks to FMi.} +% +% \begin{macro}{\@ifdefinable} +% \begin{macro}{\@@ifdefinable} +% \begin{macro}{\@rc@ifdefinable} +% Test is user is allowed to define a command. +% \begin{macrocode} +\long\def\@ifdefinable #1#2{% + \edef\reserved@a{\expandafter\@gobble\string #1}% + \@ifundefined\reserved@a + {\edef\reserved@b{\expandafter\@carcube \reserved@a xxx\@nil}% + \ifx \reserved@b\@qend \@notdefinable\else + \ifx \reserved@a\@qrelax \@notdefinable\else + #2% + \fi + \fi}% + \@notdefinable} +% \end{macrocode} +% Saved definition of |\@ifdefinable|. +% \begin{macrocode} +\let\@@ifdefinable\@ifdefinable +% \end{macrocode} +% Version of |\@ifdefinable| for use with |\renewcommand|. Does +% not do the check this time, but restores the normal definition. +% \begin{macrocode} +\long\def\@rc@ifdefinable#1#2{% + \let\@ifdefinable\@@ifdefinable + #2} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\newenvironment} +% Define a new user environment. +% |#1| is the environment name. |#2#| Grabs all the tokens up to +% the first |{|. These will be any optional arguments. They are not +% parsed at this point, but are just passed to |\@newenv| which +% will eventually call |\newcommand|. Any optional arguments will +% then be parsed by |\newcommand| as it defines the command that +% executes the `begin code' of the environment. +% +% This |#2#| trick removed with version 1.2i as it fails if a |{| +% occurs in the optional argument. Now use |\@ifnextchar| directly. +% \begin{macrocode} +\def\newenvironment{\@star@or@long\new@environment} +% \end{macrocode} +% +% \begin{macro}{\new@environment} +% \changes{v1.2i}{1995/04/25}{Parse arguments slowly but safely /1507} +% \changes{v1.2u}{1995/10/16}{(DPC) Use \cs{@testopt} /1911} +% \begin{macrocode} +\def\new@environment#1{% + \@testopt{\@newenva#1}0} +% \end{macrocode} +% +% \begin{macro}{\@newenva} +% \changes{v1.1g}{2004/01/23}{Use kernel version of +% \cs{@ifnextchar} (pr/3501)} +% \begin{macrocode} +\def\@newenva#1[#2]{% + \kernel@ifnextchar [{\@newenvb#1[#2]}{\@newenv{#1}{[#2]}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@newenvb} +% \changes{v1.3a}{1999/01/07} +% {made long and brace optional arg. latex/2896} +% \begin{macrocode} +\def\@newenvb#1[#2][#3]{\@newenv{#1}{[#2][{#3}]}} +% \end{macrocode} +% \end{macro} +% +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\renewenvironment} +% Redefine an environment. +% For |\renewenvironment| disable |\@ifdefinable| and then call +% |\newenvironment|. It is OK to |\let| the argument to |\relax| +% here as there should not be a |@temp|\ldots\ environment. +% \changes{LaTeX2e}{1993/11/23}{Macro reimplemented and extended} +% \changes{v1.1f}{1994/05/2}{Removed surplus \cs{space} in error} +% \begin{macrocode} +\def\renewenvironment{\@star@or@long\renew@environment} +% \end{macrocode} +% +% \begin{macro}{\renew@environment} +% \changes{v1.2a}{1994/10/18}{reset end command} +% \changes{v1.2y}{1996/07/26}{use \cs{relax} in place of empty arg} +% \begin{macrocode} +\def\renew@environment#1{% + \@ifundefined{#1}% + {\@latex@error{Environment #1 undefined}\@ehc + }\relax + \expandafter\let\csname#1\endcsname\relax +% \end{macrocode} +% \changes{v1.2q}{1995/10/02} +% {Add \cs{aut@global} in autoload version} +% \begin{macrocode} +%<autoload>\aut@global + \expandafter\let\csname end#1\endcsname\relax + \new@environment{#1}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@newenv} +% \changes{LaTeX2e}{1993/11/23}{Macro interface changed} +% \changes{v1.2h}{1994/11/24}{Added test for \cs{endgraf}} +% The internal version of |\newenvironment|. +% +% Call |\newcommand| to define the \meta{begin-code} for the +% environment. |\def| is used for the \meta{end-code} as it does +% not take arguments. (but may contain |\par|s) +% +% Make sure that an attempt to define a `graf' or `group' environment +% fails. +% \begin{macrocode} +\long\def\@newenv#1#2#3#4{% + \@ifundefined{#1}% + {\expandafter\let\csname#1\expandafter\endcsname + \csname end#1\endcsname}% + \relax + \expandafter\new@command + \csname #1\endcsname#2{#3}% +% \end{macrocode} +% \changes{v1.2q}{1995/10/02} +% {Add \cs{aut@global} in autoload version} +% \begin{macrocode} +%<autoload>\aut@global + \l@ngrel@x\expandafter\def\csname end#1\endcsname{#4}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\newif} +% \changes{v1.1l}{1995/05/24}{(DPC) New implementation} +% \changes{v1.2q}{1995/10/02} +% {Add \cs{aut@global} in autoload version} +% And here's a different sort of allocation: +% For example, +% |\newif\iffoo| creates |\footrue|, |\foofalse| to go with |\iffoo|. +% \begin{macrocode} +\def\newif#1{% + \count@\escapechar \escapechar\m@ne +%<autoload>\aut@global + \let#1\iffalse + \@if#1\iftrue + \@if#1\iffalse + \escapechar\count@} +% \end{macrocode} +% +% \begin{macro}{\@if} +% \changes{v1.2q}{1995/10/02} +% {Add \cs{aut@global} in autoload version} +% \begin{macrocode} +\def\@if#1#2{% +%<autoload>\aut@global + \expandafter\def\csname\expandafter\@gobbletwo\string#1% + \expandafter\@gobbletwo\string#2\endcsname + {\let#1#2}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\providecommand} +% |\providecommand| takes the same arguments as |\newcommand|, but +% discards them if |#1| is already defined, Otherwise it just acts like +% |\newcommand|. This implementation currently leaves any discarded +% definition in |\reserved@a| (and possibly |\\reserved@a|) this +% wastes a bit of space, but it will be reclaimed as soon as these +% scratch macros are redefined. +% +% \changes{LaTeX2e}{1993/11/22}{Macro added} +% \begin{macrocode} +\def\providecommand{\@star@or@long\provide@command} +% \end{macrocode} +% +% \begin{macro}{\provide@command} +% \changes{v1.2z}{1997/09/09}{Use \cs{begingroup} to avoid generating +% math ords if used in math mode. pr/2573} +% \begin{macrocode} +\def\provide@command#1{% + \begingroup + \escapechar\m@ne\xdef\@gtempa{{\string#1}}% + \endgroup + \expandafter\@ifundefined\@gtempa + {\def\reserved@a{\new@command#1}}% + {\def\reserved@a{\renew@command\reserved@a}}% + \reserved@a}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\CheckCommand} +% \changes{LaTeX2e}{1993/11/22}{Macro added} +% \changes{v1.1e}{1994/05/20}{Changed name from \cs{@checkcommand} to +% \cs{CheckCommand}.} +% |\CheckCommand| takes the same arguments as |\newcommand|. If +% the command already exists, with the same definition, then +% nothing happens, otherwise a warning is issued. Useful for +% checking the current state befor a macro package starts +% redefining things. Currently two macros are considered to have +% the same definition if they are the same except for different +% default arguments. That is, if the old definition was: +% |\newcommand\xxx[2][a]{(#1)(#2)}| then +% |\CheckCommand\xxx[2][b]{(#1)(#2)}| would \emph{not} generate a +% warning, but, for instance |\CheckCommand\xxx[2]{(#1)(#2)}| +% would. +% \begin{macrocode} +\def\CheckCommand{\@star@or@long\check@command} +% \end{macrocode} +% |\CheckCommand| is only available in the preamble part of the +% document. +% \begin{macrocode} +\@onlypreamble\CheckCommand +% \end{macrocode} +% +% \begin{macro}{\check@command} +% \begin{macrocode} +\def\check@command#1#2#{\@check@c#1{#2}} +\@onlypreamble\check@command +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@check@c} +% \changes{v1.2i}{1995/04/25}{Make \cs{long} for latex/1346} +% |\CheckCommand| itself just grabs all the arguments we need, +% without actually looking for |[| optional argument forms. Now +% define |\reserved@a|. If |\\reserved@a| is then defined, compare it +% with the ``|\#1|' otherwise compare |\reserved@a| with |#1|. +% \begin{macrocode} +\long\def\@check@c#1#2#3{% + \expandafter\let\csname\string\reserved@a\endcsname\relax + \renew@command\reserved@a#2{#3}% + \@ifundefined{\string\reserved@a}% + {\@check@eq#1\reserved@a}% + {\expandafter\@check@eq + \csname\string#1\expandafter\endcsname + \csname\string\reserved@a\endcsname}} +\@onlypreamble\@check@c +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@check@eq} +% Complain if |#1| and |#2| are not |\ifx| equal. +% \begin{macrocode} +\def\@check@eq#1#2{% + \ifx#1#2\else + \@latex@warning@no@line + {Command \noexpand#1 has + changed.\MessageBreak + Check if current package is valid}% + \fi} +\@onlypreamble\@check@eq +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@gobble} +% \begin{macro}{\@gobbletwo} +% \begin{macro}{\@gobblefour} +% \changes{v1.2n}{1995/05/26}{(CAR) Added \cs{long}s} +% The |\@gobble| macro is used to get rid of its argument. +% \begin{macrocode} +\long\def \@gobble #1{} +\long\def \@gobbletwo #1#2{} +\long\def \@gobblefour #1#2#3#4{} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@firstofone} +% \begin{macro}{\@firstoftwo} +% \begin{macro}{\@secondoftwo} +% Some argument-grabbers. +% \begin{macrocode} +\long\def\@firstofone#1{#1} +\long\def\@firstoftwo#1#2{#1} +\long\def\@secondoftwo#1#2{#2} +% \end{macrocode} +% \begin{macro}{\@iden} +% |\@iden| is another name for |\@firstofone| for +% compatibility reasons. +% \begin{macrocode} +\let\@iden\@firstofone +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@thirdofthree} +% Another grabber now used in the encoding specific +% section. +% \changes{v1.2z3}{1998/03/20}{Macro added} +% \begin{macrocode} +\long\def\@thirdofthree#1#2#3{#3} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@expandtwoargs} +% A macro to totally expand two arguments to another macro +% \begin{macrocode} +\def\@expandtwoargs#1#2#3{% +\edef\reserved@a{\noexpand#1{#2}{#3}}\reserved@a} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@backslashchar} +% A category code 12 backslash. +% \begin{macrocode} +\edef\@backslashchar{\expandafter\@gobble\string\\} +% \end{macrocode} +% \end{macro} +% +% \changes{v1.0n}{1994/05/10}{Added \cs{DeclareProtectedCommand}} +% \changes{v1.0p}{1994/05/12}{Fixed a bug with \cs{relax } which was +% using \cs{@gobble} before defining it.} +% \changes{v1.0q}{1994/05/13}{Renamed \cs{DeclareProtectedCommand} to +% \cs{DeclareRobustCommand}. Removed \cs{@if@short@command}. +% Moved to after the definition of \cs{@gobble}.} +% \changes{v1.0r}{1994/05/13}{Added logging message to +% \cs{DeclareProtectedCommand}.} +% +% \subsection{Robust commands and protect} +% +% \changes{v1.1b}{1994/05/17}{Added the discussion of protected +% commands, defined the values that \cs{protect} should have.} +% \changes{v1.1c}{1994/05/18}{Redid the discussion and definitions, in +% line with the proposed new setting of \cs{protect} in the output +% routine.} +% +% Fragile and robust commands are one of the thornier issues in +% \LaTeX's commands. Whilst typesetting documents, \LaTeX{} makes use +% of many of \TeX's features, such as arithmetic, defining macros, and +% setting variables. However, there are (at least) three different +% ocassions when these commands are not safe. These are called +% `moving arguments' by \LaTeX, and consist of: +% \begin{itemize} +% \item writing information to a file, such as indexes or tables of +% contents. +% \item writing information to the screen. +% \item inside an |\edef|, |\message|, |\mark|, or other command which +% evaluates its argument fully. +% \end{itemize} +% The method \LaTeX{} uses for making fragile commands robust is to +% precede them with |\protect|. This can have one of five possible +% values: +% \begin{itemize} +% \item |\relax|, for normal typesetting. So |\protect\foo| will +% execute |\foo|. +% \item |\string|, for writing to the screen. So |\protect\foo| will +% write |\foo|. +% \item |\noexpand|, for writing to a file. So |\protect\foo| will +% write |\foo| followed by a space. +% \item |\@unexpandable@protect|, for writing a moving argument to a +% file. So |\protect\foo| will write |\protect\foo| followed by a +% space. This value is also used inside |\edef|s, |\mark|s and +% other commands which evaluate their arguments fully. +% \item |\@unexpandable@noexpand|, for performing a deferred write +% inside an |\edef|. So |\protect\foo| will write |\foo| followed +% by a space. If you want |\protect\foo| to be written, you should +% use |\@unexpandable@protect|. (Removed as never used). +% \end{itemize} +% +% \changes{1.1b}{1994/05/17} +% {(ASAJ) Added the \cs{@protect@...} commands.} +% \changes{1.1c}{1994/05/18} +% {(ASAJ) Renamed the commands, and removed +% one which is no longer needed.} +% +% \begin{macro}{\@unexpandable@protect} +% \begin{macro}{\@unexpandable@noexpand} +% \changes{1.2w}{1995/12/05}{Removed as never used. internal/1733} +% These commands are used for setting |\protect| inside |\edef|s. +% \begin{macrocode} +\def\@unexpandable@protect{\noexpand\protect\noexpand} +%\def\@unexpandable@noexpand{\noexpand\noexpand\noexpand} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \changes{v1.2e}{1994/11/04}{Rewrote protected short commands +% using \cs{x@protect}. ASAJ.} +% +% \begin{macro}{\DeclareRobustCommand} +% \begin{macro}{\declare@robustcommand} +% This is a package-writers command, which has the same syntax as +% |\newcommand|, but which declares a protected command. It does +% this by having\\ +% |\DeclareRobustCommand\foo|\\ +% define |\foo| to be +% |\protect\foo<space>|,\\ +% and then use |\newcommand\foo<space>|.\\ +% Since the internal command is |\foo<space>|, when it is written +% to an auxiliary file, it will appear as |\foo|. +% +% We have to be a +% bit cleverer if we're defining a short command, such as |\_|, in +% order to make sure that the auxiliary file does not include a +% space after the command, since |\_ a| and |\_a| aren't the same. +% In this case we define |\_| to be: +%\begin{verbatim} +% \x@protect\_\protect\_<space> +%\end{verbatim} +% which expands to: +%\begin{verbatim} +% \ifx\protect\@typeset@protect\else +% \@x@protect@\_ +% \fi +% \protect\_<space> +%\end{verbatim} +% Then if |\protect| is |\@typeset@protect| (normally |\relax|) +% then we just perform |\_<space>|, and otherwise +% |\@x@protect@| gobbles everything up and expands to +% |\protect\_|. +% +% \emph{Note}: setting |\protect| to any value other than |\relax| +% whilst in `typesetting' mode will cause commands to go into an +% infinite loop! In particular, setting |\relax| to |\@empty| will +% cause |\_| to loop forever. It will also break lots of other +% things, such as protected |\ifmmode|s inside |\halign|s. If you +% really really have to do such a thing, then please set +% |\@typeset@protect| to be |\@empty| as well. (This is what the +% code for |\patterns| does, for example.) +% +% More fun with |\expandafter| and |\csname|. +% \begin{macrocode} +\def\DeclareRobustCommand{\@star@or@long\declare@robustcommand} +% \end{macrocode} +% +% \begin{macrocode} +\def\declare@robustcommand#1{% + \ifx#1\@undefined\else\ifx#1\relax\else + \@latex@info{Redefining \string#1}% + \fi\fi + \edef\reserved@a{\string#1}% + \def\reserved@b{#1}% + \edef\reserved@b{\expandafter\strip@prefix\meaning\reserved@b}% +% \end{macrocode} +% \changes{v1.2s}{1995/10/06} +% {Add \cs{aut@global} in autoload version} +% \begin{macrocode} +%<autoload>\aut@global + \edef#1{% + \ifx\reserved@a\reserved@b + \noexpand\x@protect + \noexpand#1% + \fi + \noexpand\protect + \expandafter\noexpand\csname + \expandafter\@gobble\string#1 \endcsname + }% + \let\@ifdefinable\@rc@ifdefinable + \expandafter\new@command\csname + \expandafter\@gobble\string#1 \endcsname +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@x@protect} +% \begin{macro}{\x@protect} +% +% \begin{macrocode} +\def\x@protect#1{% + \ifx\protect\@typeset@protect\else + \@x@protect#1% + \fi +} +\def\@x@protect#1\fi#2#3{% + \fi\protect#1% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@typeset@protect} +% +% \begin{macrocode} +\let\@typeset@protect\relax +% \end{macrocode} +% \end{macro} +% +% \changes{v1.2e}{1994/11/04}{Added commands for setting and restoring +% \cs{protect}. ASAJ.} +% +% \begin{macro}{\set@display@protect} +% \begin{macro}{\set@typeset@protect} +% These macros set |\protect| appropriately for typesetting or +% displaying. +% \changes{v1.2o}{1995/07/03}{Use \cs{@typeset@protect} for init} +% \begin{macrocode} +\def\set@display@protect{\let\protect\string} +\def\set@typeset@protect{\let\protect\@typeset@protect} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\protected@edef} +% \begin{macro}{\protected@xdef} +% \begin{macro}{\unrestored@protected@xdef} +% \begin{macro}{\restore@protect} +% The commands |\protected@edef| and |\protected@xdef| perform +% `safe' |\edef|s and |\xdef|s, saving and restoring |\protect| +% appropriately. For cases where restoring |\protect| doesn't +% matter, there's an `unsafe' |\unrestored@protected@xdef|, useful +% if you know what you're doing! +% \begin{macrocode} +\def\protected@edef{% + \let\@@protect\protect + \let\protect\@unexpandable@protect + \afterassignment\restore@protect + \edef +} +\def\protected@xdef{% + \let\@@protect\protect + \let\protect\@unexpandable@protect + \afterassignment\restore@protect + \xdef +} +\def\unrestored@protected@xdef{% + \let\protect\@unexpandable@protect + \xdef +} +\def\restore@protect{\let\protect\@@protect} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\protect} +% The normal meaning of |\protect| +% \changes{v1.2j}{1995/04/29}{Init \cs{protect} here} +% \begin{macrocode} +\set@typeset@protect +% \end{macrocode} +% \end{macro} +% +% \subsection{Internal defining commands} +% +% These commands are used internally to define other \LaTeX{} +% commands. +% \begin{macro}{\@ifundefined} +% \changes{LaTeX2e}{1993/11/23}{Redefined to remove a trailing \cs{fi}} +% Check if first arg is undefined or \cs{relax} and execute second or +% third arg depending, +% \begin{macrocode} +\def\@ifundefined#1{% + \expandafter\ifx\csname#1\endcsname\relax + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@qend} +% \begin{macro}{\@qrelax} +% The following define |\@qend| and |\@qrelax| to be the strings +% `|end|' and `|relax|' with the characters |\catcode|d 12. +% \begin{macrocode} +\edef\@qend{\expandafter\@cdr\string\end\@nil} +\edef\@qrelax{\expandafter\@cdr\string\relax\@nil} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@ifnextchar} +% \changes{LaTeX209}{1992/08/24} +% {(Rms) \cs{@ifnextchar} didn't work if its +% first argument was an equal sign.} +% \changes{v1.2q}{1995/10/02} +% {Use \cs{@let@token} } +% \changes{v1.3a}{1999/01/07} +% {made long} +% \changes{v1.3b}{1999/01/07} +% {extra \cs{long}. latex/2902} +% \changes{v1.3e}{1999/03/01} +% {remove extra \cs{long}. internal/2967} +% |\@ifnextchar| peeks at the following character and compares it +% with its first argument. If both are the same it executes its +% second argument, otherwise its third. +% \begin{macrocode} +\long\def\@ifnextchar#1#2#3{% + \let\reserved@d=#1% + \def\reserved@a{#2}% + \def\reserved@b{#3}% + \futurelet\@let@token\@ifnch} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\kernel@ifnextchar} +% \changes{v1.3g}{2004/01/23}{Added macro (pr/3501)} +% This macro is the kernel version of |\@ifnextchar| which is used +% in a couple of places to prevent the AMS variant from being used +% since in some places this produced chaos (for example +% if an \texttt{fd} file +% is loaded in a random place then the optional argument to +% |\ProvidesFile| could get printed there instead of being written +% only in the log file. This happened +% when there was a space or a newline between the mandatory and +% optional arguments! It should really be fixed in the +% \texttt{amsmath} package one day, but\ldots +% +% Note that there may be other places in the kernel where this version +% should be used rather than the original, but variable, version. +% +% \begin{macrocode} +\let\kernel@ifnextchar\@ifnextchar +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@ifnch} +% |\@ifnch| is a tricky macro to skip any space tokens that may +% appear before the character in question. If it encounters a space +% token, it calls \@xifnch. +% \changes{v1.2q}{1995/10/02} +% {Use \cs{@let@token} for internal/924, save \cs{reserved@e}} +% \begin{macrocode} +\def\@ifnch{% + \ifx\@let@token\@sptoken + \let\reserved@c\@xifnch + \else + \ifx\@let@token\reserved@d + \let\reserved@c\reserved@a + \else + \let\reserved@c\reserved@b + \fi + \fi + \reserved@c} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@sptoken} +% The following code makes |\@sptoken| a space token. It is +% important here that the control sequence |\:| consists of +% a non-letter only, so that the following whitespace is +% significant. Together with the fact that the equal sign +% in a |\let| may be followed by only one optional space +% the desired effect is achieved. +% NOTE: the following hacking must precede the definition of |\:| +% as math medium space. +% \begin{macrocode} +\def\:{\let\@sptoken= } \: % this makes \@sptoken a space token +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xifnch} +% In the following definition of |\@xifnch|, |\:| is again used +% to get a space token as delimiter into the definition. +% \begin{macrocode} +\def\:{\@xifnch} \expandafter\def\: {\futurelet\@let@token\@ifnch} +% \end{macrocode} +% \end{macro} + +% \changes{v1.0n}{1994/05/10}{Added \cs{makeatletter} and +% \cs{makeatother} ASAJ.} +% +% \begin{macro}{\makeatletter} +% \begin{macro}{\makeatother} +% Make internal control sequences accessible or inaccessible. +% \begin{macrocode} +\def\makeatletter{\catcode`\@11\relax} +\def\makeatother{\catcode`\@12\relax} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@ifstar} +% \changes{v1.2u}{1995/10/16}{(DPC) New implementation, for /1910} +% The new implementation below avoids passing the \meta{true code} +% Through one more |\def| than the \meta{false code}, which previously +% meant that |#| had to be written as |####| in one argument, but |##| +% in the other. The |*| is gobbled by |\@firstoftwo|. +% \begin{macrocode} +\def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@dblarg} +% \begin{macro}{\@xdblarg} +% \changes{v1.1g}{2004/01/23}{Use kernel version of +% \cs{@ifnextchar} (pr/3501)} +% \begin{macrocode} +\long\def\@dblarg#1{\kernel@ifnextchar[{#1}{\@xdblarg{#1}}} +\long\def\@xdblarg#1#2{#1[{#2}]{#2}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@sanitize} +% The command |\@sanitize| changes the catcode of all special characters +% except for braces to `other'. It can be used for commands like +% |\index| that want to write their arguments verbatim. Needless to +% say, this command should only be executed within a group, or chaos +% will ensue. +% +% \begin{macrocode} +\def\@sanitize{\@makeother\ \@makeother\\\@makeother\$\@makeother\&% +\@makeother\#\@makeother\^\@makeother\_\@makeother\%\@makeother\~} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@onelevel@sanitize} +% \changes{v1.2c}{1994/10/30}{Macro added} +% +% This makes the whole ``meaning'' of |#1| (its one-level +% expansion) into catcode 12 tokens: it could be used in +% |\DeclareRobustCommand|. +% +% If it is to be used on default float specifiers, this should be +% done when they are defined. +% \begin{macrocode} +\def \@onelevel@sanitize #1{% + \edef #1{\expandafter\strip@prefix + \meaning #1}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel> +% \end{macrocode} +% +% \subsection{Commands for Autoloading} +% +% \begin{macrocode} +%<*autoload> +% \end{macrocode} +% +% \begin{macro}{\aut@global} +% \changes{v1.2q}{1995/10/02} +% {Macro added} +% This command is only defined in the `autoload' format. It is +% normally |\relax| but may be set to |\global|, in which case +% |\newif| and the commands based on |\newcommand| will all make +% global definitions. +% \begin{macrocode} +\let\aut@global\relax +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@autoload} +% \changes{v1.2q}{1995/10/02} +% {Macro added} +% \changes{v1.2t}{1995/10/09} +% {Use \cs{@@input} not \cs{input} to save string space and +% stops autoload files appearing in \cs{listfiles}} +% \changes{v1.2v}{1995/10/24}{ignore end-of-line} +% This macro is only defined in the `autoload' format. It inputs a +% package `|auto#1.sty|' within a local group, and with normalised +% catcodes. |\aut@global| is set to |\global| so that |\newif| +% |\newcommand| and related commands make global definitions. +% \begin{macrocode} +\def\@autoload#1{% + \begingroup + \makeatletter + \let\aut@global\global + \nfss@catcodes + \catcode`\ =10 + \let\@latex@e@error\@gobble + \@@input auto#1.sty\relax + \endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</autoload> +% \end{macrocode} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltdirchk.dtx b/Master/texmf-dist/source/latex/base/ltdirchk.dtx new file mode 100644 index 00000000000..ce899b0d361 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltdirchk.dtx @@ -0,0 +1,911 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \ProvidesFile{ltdirchk.dtx} +% [2001/06/04 v1.0y LaTeX Kernel (System Dependent Parts)] +% +% \iffalse +%%% From File: ltdirchk.dtx +% +%<*unstripped> +\ifx\documentclass\undefined\let\next\relax\else\def\next{% +%</unstripped> +%<*driver> +% \fi +\ProvidesFile{ltdirchk.dtx} + [2001/06/04 v1.0y LaTeX Kernel (System Dependent Parts)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltdirchk.dtx} +\title{\filename\thanks{% + this document also includes the source for + texsys.cfg and ltxcheck.tex}} +\author{David Carlisle} +\date{\filedate} +\begin{document} + \maketitle + \DocInput{\filename} +\end{document} +%</driver> +%<*unstripped> +}\fi\next +%</unstripped> +% \fi +% +% \changes{v0.2j}{1994/02/25} +% {Remove need for drv file} +% \changes{v0.2k}{1994/03/01} +% {Add unstripped module, +% so that dircheck.dtx may be used with initex} +% \changes{v1.0a}{1994/03/08} +% {Reorganise driver module into `new style'} +% \changes{v1.0b}{1994/03/12} +% {Change name from dircheck.dtx} +% \changes{v1.0b}{1994/03/12} +% {Minor edits to the typeouts in ltxcheck} +% \changes{v1.0d}{1994/03/28} +% {Improve documentation} +% \changes{v1.0i}{1994/11/03} +% {Generate an error if latex.ltx not used with clean initex} +% \changes{v1.0j}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% \changes{v1.0r}{1996/06/13} +% {documentation improvements mainly from internal/2174} +% \changes{v1.0v}{1997/06/16} +% {documentation improvements mainly from internal/2520} +% \changes{v1.0w}{1998/08/17}{(RmS) Documentation improvements.} +% +% \CheckSum{595} +% +% \section{\LaTeX\ System Dependent Initialisations} +% +% \changes{v0.2g}{1994/01/21} +% {Improve documentation, reorganise docstrip module} +% +% This file implements the semi-automatic determination of various +% system dependent parts of the initialisation. The actual definitions +% may be placed in a file |texsys.cfg|. Thus for operating systems for +% which the tests here do not result in acceptable settings, a `hand +% written' |texsys.cfg| may be produced. +% +% The macros that must be defined are: +% +% \DescribeMacro{\@currdir} +% |\@currdir|\meta{filename}\meta{space} should expand to a form of the +% filename that uniquely refers to the `current directory' if this is +% possible. (The expansion should also end with a space.) on UNIX, +% this is |\def\@currdir{./}|. For more exotic operating systems you may +% want to make |\@currdir| a macro with arguments delimited by |.| +% and/or \meta{space}. If the operating system has no concept of +% directory structure, this macro should be defined to be empty. +% +% +% \DescribeMacro{\input@path} +% If the primitive |\openin| searches the same directories as the +% primitive |\input|, then it is possible to tell (using |\ifeof|) +% whether a file exists before trying to input it. For systems like +% this, |\input@path| should be left undefined. +% +% If |\openin| does not `follow' |\input| then |\input@path| must be +% defined to be a list of directories to search for input files. The +% format for each directory is as for |\@currdir|, normally just a +% prefix is required, but it may be a macro with space-delimited +% argument. That is, if \meta{dir} is an entry in the input path, +% \TeX\ will try to load the expansion of +% \meta{dir}\meta{filename}\meta{space} +% +% So either \meta{dir} should be defined as a macro with argument +% delimited by space, or it should just expand to a directory name, +% including the final directory separator, so that it may be +% concatenated with the \meta{filename}. This means that for UNIX-like +% syntax, each \meta{dir} should end with a slash, |/|. +% +% |\input@path| should expand to a list of such directories, each in a +% |{}| group. +% +% \DescribeMacro{\filename@parse} +% After a call of the form: |\filename@parse{|\meta{filename}|}|, the +% three macros |\filename@area|,|\filename@base|,|\filename@ext| should +% be defined to be the `area' (or directory), basename and +% extension respectively. If there was no extension specified in +% \meta{filename}, |\filename@ext| should be |\let| to |\relax| (so this +% case may be tested with |\@ifundefined{filename@ext}| and, perhaps a +% default extension substituted). +% +% Normally one would not need to define this macro in |texsys.cfg| as +% the automatic tests can supply parsers that work with UNIX and VMS and +% Macintosh syntax, as well as a basic parser that will cover many other +% cases. However some operating systems may need a `hand produced' +% parser in which case it should be defined in this file. +% +% The UNIX parser also works for most MSDOS \TeX\ versions. +% Currently if the UNIX, VMS or Macintosh parser is not used, +% |\filename@parse| is defined to always return an empty area, and to +% split the argument into basename and extension at the first `|.|' +% that occurs in the name. +% Parsers for other formats may be defined in |texsys.cfg|, +% in which case they will be used in preference to the default +% definitions. +% +% \DescribeMacro{\@TeXversion} +% \changes{v1.0f}{1994/05/23}{Document \cs{@TeXversion}} +% |\@TeXversion| is now set automatically by the initialisation tests +% in this file. You should not need to set it in |texsys.cfg|, however +% the following documentation is left for information. \LaTeX\ does +% not set this variable exactly, the automatic tests set it to:\\ +% |2| for any version, $v$, $v < 3.0$\\ +% |3| for any version, $v$, $3.0 \leq v \leq 3.14$\\ +% \meta{undefined} otherwise.\\ +% However these values are accurate enough for \LaTeX\ to take +% appropriate action for these old \TeX{}s. +% +% If your \TeX\ is older than version 3.141, then you should define +% |\@TeXversion| (using |\def|) to be the version number. If you do not +% do this\footnote +% {Actually if your \TeX\ is really old, version~2, \LaTeX\ can +% detect this, and sets \cs{@TeXversion} to~2 if it is not set in +% the \texttt{cfg} file.} +%, \LaTeX\ will not work around a bug in old \TeX\ versions, and +% so error messages will appear in a very strange format, with |^^J| +% appearing instead of line breaks: +% \begingroup\catcode`\==\active \def=#1#2{}\hfuzz\maxdimen +%\begin{verbatim} +%! LaTeX Error: \rubbish undefined.^^J^^JSee the LaTeX manual or LaTeX= +% Companion +% for explanation.^^JType H <return> for immediate help. +% ... +% +%l.3 \renewcommand{\rubbish} +% {} +%? +%\end{verbatim} +% \endgroup\noindent +% However if you put |\def\@TeXversion{3.14}| in \texttt{texsys.cfg} +% the following format will be used: +%\begin{verbatim} +%! LaTeX Error: \rubbish undefined. +% +%See the LaTeX manual or LaTeX Companion for explanation. +%Type H <return> for immediate help. +%! . +% ... +% +%l.3 \renewcommand{\rubbish} +% {} +%? +%\end{verbatim} +% Note that this has an extra line |! .| which does not appear in +% error messages that use the default settings with a current version of +% \TeX, but this should not cause any confusion we hope. +% +% \StopEventually{} +% +% \section{Initialisation} +% As this file is read at a very early stage, some definitions that +% are normally considered to be part of the format must be made here. +% +% \subsection{INITEX} +% \changes{v0.2i}{1994/01/25} +% {Protect against looping on \cs{@@input} and \cs{@@end}.} +% \begin{macrocode} +%<*dircheck> +%<*initex> +%<initex>\ifnum\catcode`\{=1 +%<initex> \errmessage +%<initex> {LaTeX must be made using an initex with no format preloaded} +%<initex>\fi +\catcode`\{=1 +\catcode`\}=2 +\catcode`\#=6 +\catcode`\^=7 +\chardef\active=13 +\catcode`\@=11 +\countdef\count@=255 +\let\bgroup={ \let\egroup=} +\ifx\@@input\@undefined\let\@@input\input\fi +\ifx\@@end\@undefined\let\@@end\end\fi +\chardef\@inputcheck0 +\chardef\sixt@@n=16 +\newlinechar`\^^J +\def\typeout{\immediate\write17} +\def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\_\do\%\do\~} +\def\@makeother#1{\catcode`#1=12\relax} +\def\space{ } +\def\@tempswafalse{\let\if@tempswa\iffalse} +\def\@tempswatrue{\let\if@tempswa\iftrue} +\let\if@tempswa\iffalse +\def\loop#1\repeat{\def\iterate{#1\relax\expandafter\iterate\fi}% + \iterate \let\iterate\relax} +\let\repeat\fi +%</initex> +% \end{macrocode} +% +% \subsection{Some bits of 2e} +% \begin{macrocode} +%<*2ekernel> +\def\two@digits#1{\ifnum#1<10 0\fi\number#1} +\long\def\@firstoftwo#1#2{#1} +\long\def\@secondoftwo#1#2{#2} +% \end{macrocode} +% \changes{v1.0e}{1994/05/11} +% {Add \cs{ProvidesFile} as used in fd files.} +% \changes{v1.0l}{1995/10/17} +% {Modify initex version of \cs{ProvidesFile}} +% \changes{v1.0n}{1995/11/01} +% {Initialise \cs{@addtofilelist} to \cs{@gobble}} +% This is a special version of |\ProvidesFile| for initex use. +% \changes{v1.0x}{2001/05/25}{Explicitly set catcode of +% \cs{endlinechar} to 10 (pr/3334)} +% \changes{v1.0y}{2001/06/04}{But only if it is a char (pr/3334)} +% \begin{macrocode} +\def\ProvidesFile#1{% + \begingroup + \catcode`\ 10 % + \ifnum \endlinechar<256 % + \ifnum \endlinechar>\m@ne + \catcode\endlinechar 10 % + \fi + \fi + \@makeother\/% + \@ifnextchar[{\@providesfile{#1}}{\@providesfile{#1}[]}} +\def\@providesfile#1[#2]{% + \wlog{File: #1 #2}% + \@addtofilelist{ #2}% + \endgroup} +\long\def\@addtofilelist#1{} +% \end{macrocode} +% +% \begin{macrocode} +\def\@empty{} +\catcode`\%=12 +\def\@percentchar{%} +\catcode`\%=14 +\let\@currdir\@undefined +\let\input@path\@undefined +\let\filename@parse\@undefined +% \end{macrocode} +% \begin{macro}{\strip@prefix} +% \changes{v0.2a}{1993/12/13} +% {modified, name changed from \cs{stripmeaning}.} +% \changes{v0.2e}{1994/01/19} +% {name changed from \cs{strip@meaning}, to match NFSS.} +% \begin{macrocode} +\def\strip@prefix#1>{} +%</2ekernel> +% \end{macrocode} +% \end{macro} +% +% \section{texsys.cfg} +% As mentioned above, any site specific definitions required to describe +% the filename handling must be entered into a file |texsys.cfg|. If +% |texsys.cfg| can not be located by |\openin|, we write a default +% version out. The default version only contains comments, so we do not +% actually input the file in that case. The automatic tests later will, +% hopefully, correctly define the required macros. +% +% The tricky code below checks to see if |texsys.cfg| exists. If it does +% not, all the text in this file between START and END is copied +% verbatim to a new file |texsys,cfg|. If |texsys.cfg| is found, then it +% is simply input. This is only done when this file is being used +% unstripped. +% \begin{macrocode} +%<*docstrip> +\openin15=texsys.cfg +\ifeof15 +\typeout{** Writing a default texsys.cfg} +\immediate\openout15=texsys.cfg +\begingroup +\catcode`\^^M\active% +\let^^M\par% +\def\reserved@a#1^^M{% + \def\reserved@b{#1}% + \ifx\reserved@b\reserved@c\endgroup\else% + \immediate\write15{#1}% + \expandafter\reserved@a\fi}% +\def\reserved@d#1START^^M{\let\do\@makeother\dospecials\reserved@a}% +\catcode`\%=12 +\def\reserved@c{%END} +\reserved@d +% \end{macrocode} +%START +% \subsection{texsys.cfg} +% +% This file contains the site specific definitions of the four macros\\ +% |\@currdir|, |\input@path|, |\filename@parse| and |\@TeXversion|. +% +% As distributed it only contains comments, however this `empty' +% file will work on many systems because of the automatic tests built +% into |ltdirchk.dtx|. You \emph{are} allowed to edit this file to add +% definitions of these macros appropriate to your system. +% +% +% The macros that must be defined are: +% +% \DescribeMacro{\@currdir} +% |\@currdir|\meta{filename}\meta{space} should expand to a form of the +% filename that uniquely refers to the `current directory' if this is +% possible. (The expansion should also end with a space.) on UNIX, +% this is |\def\@currdir{./}|. For more exotic operating systems you may +% want to make |\@currdir| a macro with arguments delimited by |.| +% and/or \meta{space}. If the operating system has no concept of +% directory structure, this macro should be defined to be empty. +% +% +% \DescribeMacro{\input@path} +% If the primitive |\openin| searches the same directories as the +% primitive |\input|, then it is possible to tell (using |\ifeof|) +% whether a file exists before trying to input it. For systems like +% this, |\input@path| should be left undefined. +% +% If |\openin| does not `follow' |\input| then |\input@path| must be +% defined to be a list of directories to search for input files. The +% format for each directory is as for |\@currdir|, normally just a +% prefix is required, but it may be a macro with space-delimited +% argument. That is, if \meta{dir} is an entry in the input path, +% \TeX will try to load the expansion of +% +% \meta{dir}\meta{filename}\meta{space} +% +% So either \meta{dir} should be defined as a macro with argument +% delimited by space, or it should just expand to a directory name, +% including the final directory separator, so that it may be +% concatenated with the \meta{filename}. This means that for UNIX-like +% syntax, each \meta{dir} should end with a slash, |/|. One exception to +% this rule is that the input path should \emph{always} contain the +% empty directory |{}| as this will allow `full pathnames' to be used, +% and the `current directory' to be searched. +% +% |\input@path| should expand to a list of such directories, each in a +% |{}| group. +% +% +% \DescribeMacro{\filename@parse} +% After a call of the form: |\filename@parse{|\meta{filename}|}|, the +% three macros |\filename@area|,|\filename@base|,|\filename@ext| should +% be defined to be the `area' (or directory), basename and +% extension respectively. If there was no extension specified in +% \meta{filename}, |\filename@ext| should be |\let| to |\relax| (so this +% case may be tested with |\@ifundefined{filename@ext}| and, perhaps a +% default extension substituted). +% +% Normally one would not need to define this macro in |texsys.cfg| as +% the automatic tests can supply parsers that work with UNIX and VMS +% syntax, as well as a basic parser that willcover many other cases. +% However some operating systems may need a `hand produced' parser +% in which case it should be defined in this file. +% +% The UNIX parser also works for most MSDOS \TeX\ versions. +% Currently if the UNIX or VMS parser is not used, |\filename@parse| is +% defined to always return an empty area, and to split the argument into +% basename and extension at the first `|.|' that occurs in the name. +% Parsers for other formats may be defined in |texsys.cfg|, +% in which case they will be used in preference to the default +% definitions. +% +% +% \DescribeMacro{\@TeXversion} +% You should not need to set this macro in |texsys.cfg|. \LaTeX\ +% tests to set this automatically. See the comments in the opening +% section of \texttt{ltdirchk.dtx}. +% +% +% The following sections give examples of definitions which might +% work on various systems. These are currently mainly untested as I only +% have access to a few systems, all of which do not need this file as +% the automatic tests work. All the code is commented out. +% +% \subsection{UNIX (web2c)} +% This implementation does make |\openin| and |\input| look in the same +% places. Acceptable settings are made by |ltdirchk.dtx|, and so this +% file may be empty. The definitions below are therefore just for +% information. +% \begin{macrocode} +%\def\@currdir{./} +%\let\input@path\@undefined +% \end{macrocode} +% +% \subsection{UNIX (other)} +% Apparently some commercial UNIX implementations have different paths +% for |\openin| and |\input|. For these one could use definitions like +% the following (with whatever directories are used at your site): +% note that the directory names should end with |/|. +% \begin{macrocode} +% \def\@currdir{./} +% \def\input@path{% +% {/usr/local/lib/tex/inputs/distrib/}% +% {/usr/local/lib/tex/inputs/contrib/}% +% {/usr/local/lib/tex/inputs/local/}% +% } +% \end{macrocode} +% +% \subsection{MSDOS (emtex)} +% This implementation does make |\openin| and |\input| look in the same +% places. Acceptable settings are made by |ltdirchk.dtx|, and so this +% file may be empty. The definitions below are therefore just for +% information. +% \begin{macrocode} +% \def\@currdir{./} +% \let\input@path\@undefined +% \end{macrocode} +% +% \subsection{MSDOS (other)} +% Some PC implementations have different paths +% for |\openin| and |\input|. For these one could use definitions like +% the following (with whatever directories are used at your site): +% note that the directory names should end with |/|. +% This assumes the implementation uses UNIX style |/| as the directory +% separator. +% \begin{macrocode} +% \def\@currdir{./} +% \def\input@path{% +% {c:/tex/inputs/distrib/}% +% {c:/tex/inputs/contrib/}% +% {c:/tex/inputs/local/}% +% } +% \end{macrocode} +% +% \subsection{VMS (DECUS \TeX, PD VMS 3.6)} +% This implementation does make |\openin| and |\input| look in the same +% places. Acceptable settings are made by |ltdirchk.dtx|, and so this +% file may be empty. The definitions below are therefore just for +% information. +% \begin{macrocode} +% \def\@currdir{[]} +% \let\input@path\@undefined +% \end{macrocode} +% +% \subsection{VMS (???)} +% Some VMS implementations have different paths +% for |\openin| and |\input|. For these one could use definitions like +% the following: +% \begin{macrocode} +% \def\@currdir{[]} +% \def\input@path{% +% {tex_inputs:}% +% {SOMEDISK:[SOME.TEX.DIRECTORY]}% +% } +% \end{macrocode} +% +% \subsection{MACINTOSH (OzTeX 1.6)} +% This implementation does make |\openin| and |\input| look in the same +% places. Acceptable settings are made by |ltdirchk.dtx|, and so this +% file may be empty. The definitions below are therefore just for +% information. +% \begin{macrocode} +% \def\@currdir{:} +% \let\input@path\@undefined +% \end{macrocode} +% +% \subsection{MACINTOSH (other)} +% Some Macintosh implementations have different paths +% for |\openin| and |\input|. For these one could use definitions like +% the following (with whatever folders are used on your machine): +% note that the directory names should end with |:|, and they should +% contain {\em no\/} spaces. +% \begin{macrocode} +% \def\@currdir{:} +% \def\input@path{% +% {Hard-Disk:Applications:TeX:TeX-inputs:}% +% {Hard-Disk:Applications:TeX:My-inputs:}% +% } +% \end{macrocode} +% +% \subsection{FAKE EXAMPLE} +% This example is for an operating system that has filenames of the +% form |<area>name| For maximum compatability with macro sets, +% you want |name.ext| to be mapped to |<ext>name|. +% and |<area>name.ext| to be mapped to |<area.ext>name|. +% |\input| does this mapping automatically, but |\openin| does not, and +% does not look in the same places as |\input|. +% |<>name| is the desired `current directory' syntax. +% +% the following code would possibly work: +% \begin{macrocode} +% \def\@dir#1#2 {% +% \@d@r{#1}#2..\@nil} +% \def\@d@r#1#2.#3.#4\@nil{% +% <\ifx\@dir#1\@dir\else#1\ifx\@dir#3\@dir\else.\fi\fi#3>#2 } +% +% \def\@currdir{\@dir{}} +% \def\input@path{% +% {\@dir{area.one}}% +% {\@dir{area.two}}% +% } +% \end{macrocode} +%END +% \begin{macrocode} +\immediate\closeout15 +% \end{macrocode} +% If |texsys.cfg| did exist, then input it. +% \begin{macrocode} +\else +\typeout{** Using the existing texsys.cfg} +\closein15 +\input texsys.cfg +\fi +%</docstrip> +% \end{macrocode} +% +% If the stripped version of this file is being used (in latex2e.ltx) +% then texsys.cfg should be there, so just input it. +% \begin{macrocode} +%<dircheck>\input texsys.cfg +% \end{macrocode} +% +% \changes{v0.2f}{1994/01/20} +% {\cs{@copytexsys} and the texsys.new file removed} +% +% \section{Setting \texttt{\cs{@currdir}}} +% +% \begin{macro}{\@currdir} +% \begin{macro}{\IfFileExists} +% \changes{v0.2e}{1994/01/19} +% {name changed from \cs{test}} +% This is a local definition of |\IfFileExists|. It tries to relocate +% |texsxys.aux|. If it succeeds, then the |\@currdir| syntax has been +% determined. If all the tests fail then |\@currdir| will be set to +% |\@empty|, and |ltxcheck| will warn of this when it checks the format. +% \begin{macrocode} +\begingroup +\count@\time +\divide\count@ 60 +\count2=-\count@ +\multiply\count2 60 +\advance\count2 \time +% \end{macrocode} +% +% \begin{macro}{\today} +% The current date and time stamp. +% \changes{v0.2g}{1994/01/21} +% {Name changed from \cs{stamp}, to save memory} +% \begin{macrocode} +\edef\today{% + \the\year/\two@digits{\the\month}/\two@digits{\the\day}:% + \two@digits{\the\count@}:\two@digits{\the\count2}} +% \end{macrocode} +% \end{macro} +% +% Create a file |texsys.aux| (hopefully in the current directory), +% then try to locate it again. +% \begin{macrocode} +\immediate\openout15=texsys.aux +\immediate\write15{\today^^J} +\immediate\closeout15 % +% \end{macrocode} +% +% |#1| is the file to try, |#2| is what to do on success, |#3| on +% failure. +% \begin{macrocode} +\def\IfFileExists#1#2#3{% + \openin\@inputcheck#1 % + \ifeof\@inputcheck + #3\relax + \else + \read\@inputcheck to \reserved@a + \ifx\reserved@a\today + \typeout{#1 found}#2\relax + \else + \typeout{BAD: old file \reserved@a (should be \today)}% + #3\relax + \fi + \fi + \closein\@inputcheck} +% \end{macrocode} +% +% \begin{macrocode} +\endlinechar=-1 +% \end{macrocode} +% +% If |\@currdir| has not been pre-defined in |texsys.cfg| then test for +% UNIX, VMS and Oz-\TeX-Mac. syntax. +% \changes{v0.2h}{1994/01/24} +% {Stop testing once texsys.aux has been found} +% \begin{macrocode} +\ifx\@currdir\@undefined + \IfFileExists{./texsys.aux}{\gdef\@currdir{./}}% + {\IfFileExists{[]texsys.aux}{\gdef\@currdir{[]}}% + {\IfFileExists{:texsys.aux}{\gdef\@currdir{:}}{}}} +% \end{macrocode} +% If it is still undefined at this point, all the above tests failed. +% Earlier versions interactively prompted for a definition at this +% point, but it seems impossible to reliably obtain information from +% users at this point in the installation. This version of the file +% produces a format with no user-interaction. Later if the format is not +% suitable for the system, |texsys.cfg| may be edited and the format +% re-made. +% \changes{v0.2a}{1993/12/13} +% {Removed interactive prompting for current directory syntax} +% \changes{v0.2f}{1994/01/20} +% {\cs{@copytexsys} removed} +% \changes{v1.0u}{1996/12/06} +% {*** removed from various messages for GNU Make. +% internal/2338} +% \begin{macrocode} + \ifx\@currdir\@undefined + \global\let\@currdir\@empty + \typeout{^^J^^J% + !! No syntax for the current directory could be found^^J% + }% + \fi +% \end{macrocode} +% Otherwise |\@currdir| was defined in |texsys.cfg|. In this case check +% that the syntax specified works on this system. (In case a complete +% \LaTeX\ system has been copied from one system to another.) If the +% test fails, give up. The installer should remove or correct the +% offending |texsys.cfg| and try again. +% \begin{macrocode} +\else + \IfFileExists{\@currdir texsys.aux}{}{% + \edef\reserved@a{\errhelp{% + texsys.cfg specifies the current directory syntax to be^^J% + \meaning\@currdir^^J% + but this does not work on this system.^^J% + Remove texsys.cfg and restart.}}\reserved@a + \errmessage{Bad texsys.cfg file: \noexpand\@currdir}\@@end} +% \end{macrocode} +% The version of |\@currdir| in |texsys.cfg| looks OK. +% \begin{macrocode} +\fi +% \end{macrocode} +% \changes{v0.2d}{1994/01/14} +% {Close the texsys.aux output stream} +% \begin{macrocode} +\immediate\closeout15 % +\endgroup +% \end{macrocode} +% +% \begin{macrocode} +\typeout{^^J^^J% + \noexpand\@currdir set to: + \expandafter\strip@prefix\meaning\@currdir.^^J% + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \changes{v0.2a}{1993/12/13} +% {on the `docstrip' pass, do not check openin path} +% +% Stop here if the file is being used unstripped. +% \begin{macrocode} +%<*docstrip> +\relax\endinput +%</docstrip> +% \end{macrocode} +% +% \section{Setting \texttt{\cs{input@path}}} +% +% Earlier versions of this file attempted to automatically test whether +% |\input@path| was required, and interactively prompt for a path if +% necessary. This was not found to be very reliable The first-time +% installer of \LaTeXe\ can not be expected to have enough information +% to supply the correct information to the prompts. Now the interaction +% is omitted. After the format is made the installer can attempt to run +% the test document |ltxcheck.tex| through \LaTeXe. This will check, +% amongst other things, whether |texsys.cfg| will need to be edited and +% the format remade. +% +% \begin{macro}{\input@path} +% Now set up the |\input@path|. +% +% |\input@path| should either be undefined, or a list of directories as +% described in the introduction. +% \changes{v0.2e}{1994/01/19} +% {No longer check that an empty group is in the path} +% \begin{macrocode} + \typeout{^^J% + Assuming \noexpand\openin and \noexpand\input^^J% + \ifx\input@path\@undefined +% \end{macrocode} +% |\input@path| has not been pre-defined. +% \begin{macrocode} + have the same search path.^^J% + \else +% \end{macrocode} +% |\input@path| has been defined in |texsys.cfg|. +% \begin{macrocode} + have different search paths.^^J% + LaTeX will use the path specified by \noexpand\input@path:^^J% + \fi + } +% \end{macrocode} +% \end{macro} +% +% \section{Filename Parsing} +% +% \begin{macro}{\filename@parse} +% Split a filename into its components. +% \changes{v0.2g}{1994/01/21} +% {Minor changes, and add Mac version (:)} +% \begin{macrocode} +\ifx\filename@parse\@undefined + \def\reserved@a{./}\ifx\@currdir\reserved@a +% \end{macrocode} +% |\filename@parse| was not specified in |texsys.cfg|, but |\@currdir| +% looks like UNIX\ldots +% \begin{macrocode} + \typeout{^^JDefining UNIX/DOS style filename parser.^^J} + \def\filename@parse#1{% + \let\filename@area\@empty + \expandafter\filename@path#1/\\} +% \end{macrocode} +% +% Search for the last |/|. +% \begin{macrocode} + \def\filename@path#1/#2\\{% + \ifx\\#2\\% + \def\reserved@a{\filename@simple#1.\\}% + \else + \edef\filename@area{\filename@area#1/}% + \def\reserved@a{\filename@path#2\\}% + \fi + \reserved@a} +% \end{macrocode} +% +% \begin{macrocode} + \else\def\reserved@a{[]}\ifx\@currdir\reserved@a +% \end{macrocode} +% |\filename@parse| was not specified in |texsys.cfg|, but |\@currdir| +% looks like VMS\ldots +% \begin{macrocode} + \typeout{^^JDefining VMS style filename parser.^^J} + \def\filename@parse#1{% + \let\filename@area\@empty + \expandafter\filename@path#1]\\} +% \end{macrocode} +% +% Search for the last |]|. +% \begin{macrocode} + \def\filename@path#1]#2\\{% + \ifx\\#2\\% + \def\reserved@a{\filename@simple#1.\\}% + \else + \edef\filename@area{\filename@area#1]}% + \def\reserved@a{\filename@path#2\\}% + \fi + \reserved@a} +% \end{macrocode} +% +% \begin{macrocode} + \else\def\reserved@a{:}\ifx\@currdir\reserved@a +% \end{macrocode} +% |\filename@parse| was not specified in |texsys.cfg|, but |\@currdir| +% looks like Macintosh\ldots +% \begin{macrocode} + \typeout{^^JDefining Mac style filename parser.^^J} + \def\filename@parse#1{% + \let\filename@area\@empty + \expandafter\filename@path#1:\\} +% \end{macrocode} +% +% Search for the last |:|. +% \changes{v1.0g}{1994/05/25} +% {Mac parser had " typo for :} +% \begin{macrocode} + \def\filename@path#1:#2\\{% + \ifx\\#2\\% + \def\reserved@a{\filename@simple#1.\\}% + \else + \edef\filename@area{\filename@area#1:}% + \def\reserved@a{\filename@path#2\\}% + \fi + \reserved@a} +% \end{macrocode} +% +% \begin{macrocode} + \else +% \end{macrocode} +% |\filename@parse| was not specified in |texsys.cfg|. +% So just make a simple parser that always sets |\filename@area| to +% empty. +% \begin{macrocode} + \typeout{^^JDefining generic filename parser.^^J} + \def\filename@parse#1{% + \let\filename@area\@empty + \expandafter\filename@simple#1.\\} + \fi\fi\fi +% \end{macrocode} +% +% |\filename@simple| is used by all three versions. +% Finally we can split off the extension. +% \begin{macrocode} + \def\filename@simple#1.#2\\{% + \ifx\\#2\\% + \let\filename@ext\relax + \else + \edef\filename@ext{\filename@dot#2\\}% + \fi + \edef\filename@base{#1}} +% \end{macrocode} +% +% Remove a final dot, added earlier. +% \begin{macrocode} + \def\filename@dot#1.\\{#1} +% \end{macrocode} +% +% \begin{macrocode} +\else +% \end{macrocode} +% Otherwise, |\filename@parse| was specified in |texsys.cfg|. +% \begin{macrocode} + \typeout{^^J^^J% + \noexpand\filename@parse was defined in texsys.cfg:^^J% + \expandafter\strip@prefix\meaning\filename@parse.^^J% + } +\fi +% \end{macrocode} +% \end{macro} +% +% \section{\TeX\ Versions} +% +% \begin{macro}{\@TeXversion} +% \TeX\ versions older than than 3.141 require |\@TeXversion| to be +% set. This can be determined automatically due to a trick suggested +% by Bernd Raichle. (Actually this will not always get the correct +% version number, eg \TeX3.14 would be detected as \TeX3, but \LaTeX\ +% only needs to take account of \TeX's older than 3, or between 3 and +% 3.14. +% \changes{v1.0h}{1994/10/11} +% {Check for TeX3.14} +% \begin{macrocode} +\ifx\@TeXversion\@undefined + \ifx\@undefined\inputlineno + \def\@TeXversion{2} + \else + {\catcode`\^^J=\active + \def\reserved@a#1#2\@@{\if#1\string^3\fi} + \edef\reserved@a{\expandafter\reserved@a\string^^J\@@} + \ifx\reserved@a\@empty\else\gdef\@TeXversion{3}\fi} + \fi +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</dircheck> +% \end{macrocode} +% +% \section{ltxcheck.tex} +% After the format has been made, and article.cls moved with the +% other files to the `standard input directory' as specified in +% |install.txt|, the format may be checked by running the file +% |ltxcheck.tex|. +% \changes{v0.2f}{1994/01/20} +% {Modify all of ltxcheck} +% \changes{v1.0h}{1994/10/11} +% {Modify all of ltxcheck again} +% \changes{v1.0t}{1996/09/25} +% {Move ltxcheck to separate file} +% +% +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/lterror.dtx b/Master/texmf-dist/source/latex/base/lterror.dtx new file mode 100644 index 00000000000..98d3304df45 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/lterror.dtx @@ -0,0 +1,821 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: lterror.dtx +%<def>\ProvidesFile{autoerr.sty} +%<def> [1995/11/28 v1.2l LaTeX error autoload file] +%<*driver> +% \fi +\ProvidesFile{lterror.dtx} + [1998/05/28 v1.2n LaTeX Kernel (errors)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{lterror.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{442} +% +% \changes{v1.1a}{1994/05/16}{(ASAJ) Split from ltinit.dtx.} +% \changes{v1.1a}{1994/05/16}{(ASAJ) Completely new error interface.} +% \changes{v1.1b}{1994/05/17}{(ASAJ) Moved error stuff from +% ltdefns.dtx.} +% \changes{v1.1c}{1994/05/20}{(ASAJ) Added \cs{@latex@info@no@line}.} +% \changes{v1.1c}{1994/05/20}{(ASAJ) Added missing full stops.} +% \changes{v1.1c}{1994/05/20}{(ASAJ) Fixed a bug with +% \cs{@inmatherr}.} +% \changes{v1.1d}{1994/05/21}{(ASAJ) Made the error commands robust.} +% \changes{v1.1e}{1994/05/22}{(ASAJ) Replaced bgroup by begingroup in +% error messages, to stop extra mathords creeping into math mode.} +% \changes{v1.2a}{1994/05/22}{(ASAJ) Replaced \cs{@generic@message} and +% \cs{@generic@error} by \cs{GenericError}, \cs{GenericWarning} and +% \cs{GenericInfo}.} +% \changes{v1.2a}{1994/05/22}{(ASAJ) Made \cs{GenericError}, +% \cs{GenericWarning} and \cs{GenericInfo} robust.} +% \changes{v1.2a}{1994/05/22}{(ASAJ) Replaced \cmd\\ and tilde by +% \cs{MessageBreak} and \cs{space}.} +% \changes{v1.2a}{1994/05/22}{(ASAJ) Replaces \cs{string} by +% \cs{protect} in some messages.} +% \changes{v1.2f}{1994/05/24}{(DPC) wrap long lines} +% \changes{v1.2h}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% \changes{v1.2i}{1995/09/01} +% {Add autoload support} +% \changes{v1.2j}{1995/10/09} +% {Modify autoload support} +% +% \section{Error handling} +% +% This section defines \LaTeX's error commands. +% +% \StopEventually{} +% +% +% The `2ekernel' code ensures that a |\usepackage{autoerr}| is +% essentially ignored if a `full' format is being used that has +% the error messages already in the format. +% \begin{macrocode} +%<2ekernel>\expandafter\let\csname ver@autoerr.sty\endcsname\fmtversion +% \end{macrocode} +% +% \begin{macrocode} +%<*2ekernel|autoload> +% \end{macrocode} +% +% \subsection{General commands} +% +% \begin{macro}{\MessageBreak} +% This command prints a new-line inside a message, followed by a +% continuation line begun with |\@msg@continuation|. Normally it is +% defined to be |\relax|, but inside messages, it is let to +% |\@message@break|. +% \begin{macrocode} +\let\MessageBreak\relax +% \end{macrocode} +% \end{macro} +% +% \changes{v1.2g}{1994/11/04}{Added \cs{set@display@protect} to +% \cs{Generic*} commands. ASAJ.} +% +% \begin{macro}{\GenericInfo} +% This takes two arguments: a continuation and a message, and sends +% the result to the log file. +% \begin{macrocode} +\DeclareRobustCommand{\GenericInfo}[2]{% + \begingroup + \def\MessageBreak{^^J#1}% + \set@display@protect + \immediate\write\m@ne{#2\on@line.}% + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\GenericWarning} +% This takes two arguments: a continuation and a message, and sends +% the result to the screen. +% \begin{macrocode} +\DeclareRobustCommand{\GenericWarning}[2]{% + \begingroup + \def\MessageBreak{^^J#1}% + \set@display@protect + \immediate\write\@unused{^^J#2\on@line.^^J}% + \endgroup +} +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\GenericError} +% This macro takes four arguments: a continuation, +% an error message, where to go for further information, and the help +% information. It displays the error message, and sets the error help +% (the result of typing |h| to the prompt), and does a horrible hack +% to turn the last context line (which by default is the only context +% line) into just three dots. This could be made more efficient. +% \changes{v1.2d}{1994/05/22} +% {(DPC) New version using long command name.} +% \changes{v1.2d}{1994/05/22} +% {(DPC) Alternative version added for old TeXs} +% \begin{macrocode} +%<autoload>\def\GenericError{\@autoerr\GenericError} +%<*2ekernel|def> +\bgroup +\lccode`\@=`\ % +\lccode`\~=`\ % +\lccode`\}=`\ % +\lccode`\{=`\ % +\lccode`\T=`\T% +\lccode`\H=`\H% +\catcode`\ =11\relax% +\lowercase{% +\egroup% +% \end{macrocode} +% +% Unfortunately \TeX\ versions older than 3.141 have a bug which means +% that |^^J| does not force a linebreak in |\message| and |\errmessage| +% commands. So for these old \TeX's we use |\typeout| to produce the +% message, and then have an empty |\errmessage| command. This causes an +% extra line of the form +%\begin{verbatim} +%! . +%\end{verbatim} +% To appear on the terminal, but if you do not like it, you can always +% upgrade your \TeX! In order for your format to use this version, you +% must define the macro |\@TeXversion| to be the version number, e.g., +% 3.14 of the underlying \TeX. See the comments in +% \texttt{ltdircheck.dtx}. +% \begin{macrocode} +\dimen@\ifx\@TeXversion\@undefined4\else\@TeXversion\fi\p@% +\ifdim\dimen@>3.14\p@% +% \end{macrocode} +% +% First the `standard case'. +% \begin{macrocode} +\DeclareRobustCommand{\GenericError}[4]{% +\begingroup% +\immediate\write\@unused{}% +\def\MessageBreak{^^J}% +\set@display@protect% +\edef% +% %<-------------------do not delete this space!------------------->% +\@err@ % +{{#4}}% +\errhelp +% %<-------------------do not delete this space!------------------->% +\@err@ % +\let +% %<-------------------do not delete this space!------------------->% +\@err@ % +\@empty +\def\MessageBreak{^^J#1}% +\def~{\errmessage{% +#2.^^J^^J% +#3^^J% +Type H <return> for immediate help% +% %<-------------------do not delete this space!------------------->% +\@err@ % +}}% +~% +\endgroup}% +% \end{macrocode} +% +% \begin{macrocode} +\else% +% \end{macrocode} +% +% Secondly the version for old \TeX's. +% \begin{macrocode} +\DeclareRobustCommand{\GenericError}[4]{% +\begingroup% +\immediate\write\@unused{}% +\def\MessageBreak{^^J}% +\set@display@protect% +\edef% +% %<-------------------do not delete this space!------------------->% +\@err@ % +{{#4}}% +\errhelp +% %<-------------------do not delete this space!------------------->% +\@err@ % +\let +% %<-------------------do not delete this space!------------------->% +\@err@ % +\errmessage +\def\MessageBreak{^^J#1}% +\def~{\typeout{! % +#2.^^J^^J% +#3^^J% +Type H <return> for immediate help.}% +% %<-------------------do not delete this space!------------------->% +\@err@ % +{}}% +~% +\endgroup}% +% \end{macrocode} +% +% \begin{macrocode} +\fi}% +%</2ekernel|def> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\PackageError} +% \begin{macro}{\PackageWarning} +% \begin{macro}{\PackageWarningNoLine} +% \begin{macro}{\PackageInfo} +% \begin{macro}{\ClassError} +% \begin{macro}{\ClassWarning} +% \begin{macro}{\ClassWarningNoLine} +% \begin{macro}{\ClassInfo} +% These commands are intended for use by package and class writers, to +% give information to authors. The syntax is: +% \begin{quote} +% |\PackageError{|\meta{package}|}{|^^A +% \meta{error}|}{|\meta{help}|}| \\ +% |\PackageWarning{|\meta{package}|}{|\meta{warning}|}| \\ +% |\PackageWarningNoLine{|\meta{package}|}{|\meta{warning}|}| \\ +% |\PackageInfo{|\meta{package}|}{|\meta{info}|}| +% \end{quote} +% and similarly for classes. The |Error| commands print the +% \meta{error} message, and present the interactive prompt; if the +% author types |h|, then the \meta{help} information is displayed. +% The |Warning| commands produce a warning but do not present the +% interactive prompt. The |WarningNoLine| commands do the same, +% but don't print the input line number. The |Info| commands write +% the message to the +% |log| file. Within the messages, the command +% |\MessageBreak| can be used to +% break a line, |\protect| can be used to protect command names, +% and |\space| is a space, for example: +% \begin{verbatim} +% \newcommand{\foo}{FOO} +% \PackageWarning{ethel}{% +% Your hovercraft is full of eels,\MessageBreak +% and \protect\foo\space is \foo} +% \end{verbatim} +% produces: +% \begin{verbatim} +% Package ethel warning: Your hovercraft is full of eels, +% (ethel) and \foo is FOO on input line 54. +% \end{verbatim} +% +% \begin{macrocode} +%<autoload>\def\PackageError{\@autoerr\PackageError} +%<*2ekernel|def> +\gdef\PackageError#1#2#3{% + \GenericError{% + (#1)\@spaces\@spaces\@spaces\@spaces + }{% + Package #1 Error: #2% + }{% + See the #1 package documentation for explanation.% + }{#3}% +} +%</2ekernel|def> +% \end{macrocode} +% +% \begin{macrocode} +%<*2ekernel|autoload> +\def\PackageWarning#1#2{% + \GenericWarning{% + (#1)\@spaces\@spaces\@spaces\@spaces + }{% + Package #1 Warning: #2% + }% +} +\def\PackageWarningNoLine#1#2{% + \PackageWarning{#1}{#2\@gobble}% +} +\def\PackageInfo#1#2{% + \GenericInfo{% + (#1) \@spaces\@spaces\@spaces + }{% + Package #1 Info: #2% + }% +} +%</2ekernel|autoload> +% \end{macrocode} +% +% \changes{v1.2l}{1995/11/28} +% {Typo in autoload code /1985} +% \begin{macrocode} +%<autoload>\def\ClassError{\@autoerr\ClassError} +%<*2ekernel|def> +\gdef\ClassError#1#2#3{% + \GenericError{% + (#1) \space\@spaces\@spaces\@spaces + }{% + Class #1 Error: #2% + }{% + See the #1 class documentation for explanation.% + }{#3}% +} +%</2ekernel|def> +% \end{macrocode} +% +% \begin{macrocode} +%<*2ekernel|autoload> +\def\ClassWarning#1#2{% + \GenericWarning{% + (#1) \space\@spaces\@spaces\@spaces + }{% + Class #1 Warning: #2% + }% +} +\def\ClassWarningNoLine#1#2{% + \ClassWarning{#1}{#2\@gobble}% +} +\def\ClassInfo#1#2{% + \GenericInfo{% + (#1) \space\space\@spaces\@spaces + }{% + Class #1 Info: #2% + }% +} +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@latex@error} +% \begin{macro}{\@latex@warning} +% \begin{macro}{\@latex@warning@no@line} +% \begin{macro}{\@latex@info} +% \begin{macro}{\@latex@info@no@line} +% \changes{v1.2e}{1994/05/24}{Macro added} +% Errors and other info, for use in the \LaTeX{} core. +% \begin{macrocode} +%<autoload>\def\@latex@error{\@autoerr\@latex@error} +%<*2ekernel|def> +\gdef\@latex@error#1#2{% + \GenericError{% + \space\space\space\@spaces\@spaces\@spaces + }{% + LaTeX Error: #1% + }{% + See the LaTeX manual or LaTeX Companion for explanation.% + }{#2}% +} +%</2ekernel|def> +% \end{macrocode} +% +% \begin{macrocode} +%<*2ekernel|autoload> +\def\@latex@warning#1{% + \GenericWarning{% + \space\space\space\@spaces\@spaces\@spaces + }{% + LaTeX Warning: #1% + }% +} +% \end{macrocode} +% +% \begin{macrocode} +\def\@latex@warning@no@line#1{% + \@latex@warning{#1\@gobble}} +% \end{macrocode} +% +% \begin{macrocode} +\def\@latex@info#1{% + \GenericInfo{% + \@spaces\@spaces\@spaces + }{% + LaTeX Info: #1% + }% +} +% \end{macrocode} +% +% \begin{macrocode} +\def\@latex@info@no@line#1{% + \@latex@info{#1\@gobble}} +% \end{macrocode} +% +% |\@font@warning| and |\@font@info| are defined later since they +% have to be redefined by the \texttt{tracefnt} package. +%\begin{verbatim} +%\def\@font@warning#1{% +% \GenericWarning{% +% {(font)\@spaces\@spaces}% +% {Font Warning: #1}% +% } +%\def\@font@info#1{% +% \GenericInfo{% +% (font)\space\@spaces +% }{% +% Font Info: #1% +% }% +% } +%\end{verbatim} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\c@errorcontextlines} +% \changes{LaTeX2e}{1993/11/22}{Macro added} +% |\errorcontextlines| as a \LaTeX\ counter, so that it may be be +% manipulated with |\setcounter| (once it is defined :-) +% \begin{macrocode} +\let\c@errorcontextlines\errorcontextlines +\c@errorcontextlines=-1 +% \end{macrocode} +% \end{macro} +% +% \changes{v1.0d}{1994/03/28} +% {Remove test for \cs{inputlineno} undefined.} +% \begin{macro}{\on@line} +% The message ` on input line~$n$', if possible. +% \begin{macrocode} +\ifnum\inputlineno=\m@ne + \let\on@line\@empty +\else + \def\on@line{ on input line \the\inputlineno} +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@warning} +% \begin{macro}{\@@warning} +% \begin{macro}{\@latexerr} +% Older \LaTeX{} messages. For the moment, these +% |\let| to the new message commands. They may be changed later, +% once only obsolete packages and classes contain them. +% \changes{v1.0b}{1993/12/03}{Set \cs{c@errorcontextlines} to -1} +% \changes{v1.0e}{1993/04/09}{Mention The Companion} +% \changes{v1.0f}{1993/04/11}{Remove setting of errorcontextlines} +% \changes{v1.0k}{1994/05/01}{(CAR) Added draft \cs{@latexinfo}.} +% \changes{v1.0n}{1994/05/10}{(ASAJ) Added extra blank lines to +% \cs{@latexerr}.} +% \changes{v1.0o}{1994/05/11} +% {(ASAJ) Removed one of the extra blank lines to \cs{@latexerr}.} +% \begin{macrocode} +\let\@warning\@latex@warning +\let\@@warning\@latex@warning@no@line +%</2ekernel|autoload> +\global\let\@latexerr\@latex@error +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@spaces} +% Four spaces. +% \begin{macrocode} +%<*2ekernel|autoload> +\def\@spaces{\space\space\space\space} +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% \subsection{Specific errors} +% +% \begin{macro}{\@eha} +% \begin{macro}{\@ehb} +% \begin{macro}{\@ehc} +% \begin{macro}{\@ehd} +% The more common error help messages. +% \begin{macrocode} +%<*2ekernel|def> +\gdef\@eha{% + Your command was ignored.\MessageBreak + Type \space I <command> <return> \space to replace it % + with another command,\MessageBreak + or \space <return> \space to continue without it.} +\gdef\@ehb{% + You've lost some text. \space \@ehc} +\gdef\@ehc{% + Try typing \space <return> % + \space to proceed.\MessageBreak + If that doesn't work, type \space X <return> \space to quit.} +\gdef\@ehd{% + You're in trouble here. \space\@ehc} +%</2ekernel|def> +% \end{macrocode} +% As |\latex@error| triggers the autoload, these definitions +% should not be needed in the autoload format, but just to be safe\ldots +% \begin{macrocode} +%<*autoload> +\let\@eha\@empty\let\@ehb\@empty\let\@ehc\@empty\let\@ehd\@empty +%</autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% Here are most of the error message-generating commands of \LaTeX. +% \begin{macro}{\@autoerr} +% Make this autoload command robust, as it may be read in at +% unpredicatble times. +% \begin{macrocode} +%<autoload>\def\@autoerr{\protect\@autoload{err}\protect} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@notdefinable} +% Error message generated in |\@ifdefinable| from calls +% to one of the commands |\newcommand|, |\newlength| or |\newtheorem| +% specifying an already-defined command name or one that begins +% |\end...|. +% \changes{v1.2n}{1998/05/28}{Added message re `end...' pr/1555} +% \begin{macrocode} +\gdef\@notdefinable{% +%<!autoload> \@latex@error{% +%<!autoload> Command \@backslashchar\reserved@a\space +%<!autoload> already defined.\MessageBreak +%<!autoload> Or name \@backslashchar\@qend... illegal, +%<!autoload> see p.192 of the manual}\@eha} +%<autoload> \@autoerr\@notdefinable} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@nolnerr} +% Generated by |\newline| and |\\| when called in vertical mode. +% \begin{macrocode} +\gdef\@nolnerr{% +%<!autoload> \@latex@error{There's no line here to end}\@eha} +%<autoload> \@autoerr\@nolnerr} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@nocounterr} +% \changes{v1.0h}{1994/04/17}{New name for error message, +% old error message (without arg) kept} +% Generated by |\setcounter|, |\addtocounter| or +% |\newcounter| if applied to an undefined counter \meta{cnt}. +% +% \begin{macro}{\@nocnterr} +% Obsolete error message generated in \LaTeX2.09 by +% |\setcounter|, |\addtocounter| or |\newcounter| +% for undefined counter. +% DO NOT use for \LaTeXe\ it MIGHT vanish! +% Use |\@nocounterr|\marg{cnt} instead. +% \begin{macrocode} +\gdef\@nocounterr#1{% +%<!autoload> \@latex@error{No counter '#1' defined}\@eha} +%<autoload> \@autoerr\@nocounterr} +\gdef\@nocnterr{\@nocounterr?} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@ctrerr} +% Called when trying to print the value of a counter +% numbered by letters that's greater than 26. +% \begin{macrocode} +\gdef\@ctrerr{% +%<!autoload> \@latex@error{Counter too large}\@ehb} +%<autoload> \@autoerr\@ctrerr} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@nodocument} +% Error produced if paragraphs are typeset in the preamble. +% \changes{v1.2m}{1996/11/04}{Always define \cs{@nodocument} +% in kernel, so that it can be cleared by \cs{document}.} +% \begin{macrocode} +%<!def>\gdef\@nodocument{% +%<!def> \@latex@error{Missing \protect\begin{document}}\@ehd} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@badend} +% Called by |\end| that doesn't match its |\begin|. +% RmS 1992/08/24: added code to |\@badend| to display position of +% non-matching |\begin|. +% FMi 1993/01/14: missing space added. +% \begin{macrocode} +\gdef\@badend#1{% +%<!autoload> \@latex@error{\protect\begin{\@currenvir}\@currenvline +%<!autoload> \space ended by \protect\end{#1}}\@eha} +%<autoload> \@autoerr\@badend} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@badmath} +% Called by |\[|, |\]|, |\(| or |\)| when used in wrong mode. +% \begin{macrocode} +\gdef\@badmath{% +%<!autoload> \@latex@error{Bad math environment delimiter}\@eha} +%<autoload> \@autoerr\@badmath} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@toodeep} +% Called by a list environment nested more than six levels +% deep, or an enumerate or itemize nested more than four levels. +% \begin{macrocode} +\gdef\@toodeep{% +%<!autoload> \@latex@error{Too deeply nested}\@ehd} +%<autoload> \@autoerr\@toodeep} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@badpoptabs} +% Called by |\endtabbing| when not enough |\poptabs| have +% occurred, or by |\poptabs| when too many have occurred. +% \begin{macrocode} +\gdef\@badpoptabs{% +%<!autoload> \@latex@error{\protect\pushtabs\space and \protect\poptabs +%<!autoload> \space don't match}\@ehd} +%<autoload> \@autoerr\@badpoptabs} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@badtab} +% Called by |\>|, |\+| , |\-| or |\<| when stepping to an undefined tab. +% \begin{macrocode} +\gdef\@badtab{% +%<!autoload> \@latex@error{Undefined tab position}\@ehd} +%<autoload> \@autoerr\@badtab} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@preamerr} +% \changes{v1.2k}{1995/10/24} +% {Modify autoload support} +% This error is special: it appears in places where we normally have +% to |\protect| expansions. However, to prevent a protection of +% the error message itself (which would result in the message +% getting printed not issued on the terminal) we need to locally +% reset |\protect| to |\relax|. +% \begin{macrocode} +\gdef\@preamerr#1{% + \begingroup + \let\protect\relax +%<*!autoload> + \@latex@error{\ifcase #1 Illegal character\or + Missing @-exp\or Missing p-arg\fi\space + in array arg}\@ehd +%</!autoload> +%<autoload> \@autoerr\@preamerr{#1}% + \endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@badlinearg} +% Occurs in |\line| and |\vector| command when a bad slope +% argument is encountered. +% \begin{macrocode} +\gdef\@badlinearg{% +%<!autoload> \@latex@error{% +%<!autoload> Bad \protect\line\space or \protect\vector +%<!autoload> \space argument}\@ehb} +%<autoload> \@autoerr\@badlinearg} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@parmoderr} +% Occurs in a float environment or a |\marginpar| when +% encountered in inner vertical mode. +% \begin{macrocode} +\gdef\@parmoderr{% +%<!autoload> \@latex@error{Not in outer par mode}\@ehb} +%<autoload> \@autoerr\@parmoderr} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@fltovf} +% Occurs in float environment or |\marginpar| when there +% are no more free boxes for storing floats. +% \begin{macrocode} +\gdef\@fltovf{% +%<!autoload> \@latex@error{Too many unprocessed floats}\@ehb} +%<autoload> \@autoerr\@fltovf} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@latexbug} +% Occurs in output routine. This is bad news. +% \begin{macrocode} +\gdef\@latexbug{% +%<!autoload> \@latex@error{This may be a LaTeX bug}{Call for help}} +%<autoload> \@autoerr\@latexbug} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@badcrerr} +% This error was removed and replaced by |\@nolnerr|. +% \changes{v1.0m}{1994/05/04}{Error message removed} +% \begin{macrocode} +%\def\@badcrerr {\@latex@error{Bad use of \protect\\}\@ehc} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@noitemerr} +% |\addvspace| or |\addpenalty| was called when not in +% vmode. Probably caused by a missing |\item|. +% \begin{macrocode} +\gdef\@noitemerr{% +%<!autoload> \@latex@error{Something's wrong--perhaps a missing % +%<!autoload> \protect\item}\@ehc} +%<autoload> \@autoerr\@noitemerr} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@notprerr} +% A command that can be used only in the preamble +% appears after the command |\begin{document}|. +% \begin{macrocode} +\gdef\@notprerr{% +%<!autoload> \@latex@error{Can be used only in preamble}\@eha} +%<autoload> \@autoerr\@notprerr} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@inmatherr} +% \changes{v1.0j}{1994/04/28}{Macro added} +% \changes{v1.1c}{1994/04/28}{Replaced \cs{noexpand} with \cs{protect}.} +% Issued by commands that don't work correctly within math (like +% |\item|). There is no real error recovery happening, e.g., the +% user might get additional errors afterwards. +% \begin{macrocode} +\gdef\@inmatherr#1{% + \relax + \ifmmode +%<!autoload> \@latex@error{Command \protect#1 invalid in math mode}\@ehc +%<autoload> \@autoerr\@inmatherr#1% + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@invalidchar} +% \changes{LaTeX2.09}{1993/09/19} +% {(RmS) Error message for invalid input characters.} +% \changes{v1.0d}{1994/03/28} +% {(DPC) Comment out (use catcode15 instead)} +% An error for use with invalid characters. This is commented +% out, since we decided to use chatcode 15 instead. +% \begin{macrocode} +%\def\@invalidchar{\@latex@error{Invalid character in input}\@ehc} +% \end{macrocode} +% \end{macro} +% +% As well as the above error commands some error messages are directly +% coded to save space. The Messages alrerady present in \LaTeX2.09 +% included: +% +% |Environment --- undefined|\\ +% Issued by |\begin| for undefined environment. +% +% |tab overflow|\\ +% Occurs in |\= when| maximum number of tabs exceeded. +% +% |\< in mid line|\\ +% Occurs in |\<| when it appears in middle of line. +% +% |Float(s) lost|\\ +% In output routine, caused by a float environment or +% |\marginpar| occurring in inner vertical mode. +% +%\Finale +\endinput diff --git a/Master/texmf-dist/source/latex/base/ltfiles.dtx b/Master/texmf-dist/source/latex/base/ltfiles.dtx new file mode 100644 index 00000000000..4df0e8dc266 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltfiles.dtx @@ -0,0 +1,862 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltfiles.dtx +%<*driver> +% \fi +\ProvidesFile{ltfiles.dtx} + [1997/10/06 v1.1l LaTeX Kernel (File Handling)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltfiles.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} + +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{572} +% +% \changes{v1.0h}{1994/05/21}{Use new error commands} +% \changes{v1.0n}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% \changes{v1.0u}{1995/07/13}{Updates to docu} +% +% \section{File Handling} +% +% The following user commands are defined in this part: +% +% \DescribeMacro{\document} (ie |\begin{document}|)\\ +% Reads in the .AUX files and |\catcode|'s |@| to 12. +% +% \DescribeMacro{\nofiles}\\ +% Suppresses all file output by setting |\@filesw| false. +% +% \DescribeMacro{\includeonly}\marg{NAME1, ... ,NAMEn}\\ +% Causes only parts NAME1, ... ,NAMEn to be read by +% their |\include| commands. Works by setting \@partsw true +% and setting |\@partlist| to NAME1, ... ,NAMEn. +% +% \DescribeMacro{\include}\marg{NAME}\\ +% Does an |\input| NAME unless |\@partsw| is true and +% NAME is not in |\@partlist|. If |\@filesw| is true, then +% it directs .AUX output to NAME.AUX, including a +% checkpoint at the end. +% +% \DescribeMacro{\input}\marg{NAME}\\ +% The same as TeX's |\input|, except it allows optional +% braces around the file name. In \LaTeXe, it also avoids +% the primitive `missing file' error, if the file can not be +% found. +% +% \DescribeMacro{\IfFileExists}\marg{NAME}\marg{then}\marg{else}\\ +% If the file exists on the system, execute \emph{then} otherwise +% execute \emph{else}. +% +% \DescribeMacro{\InputIfFileExists}\marg{NAME}\marg{then}\marg{else}\\ +% If the file exists on the system, execute \emph{then} and input +% \emph{NAME} otherwise execute \emph{else}. +% +% \StopEventually{} +% +% \changes{v1.0a}{1994/03/07}{Initial version, split from latex.dtx} +% \changes{v1.0a}{1994/03/07}{Long lines wrapped to 72 columns} +% +% \begin{oldcomments} +% +% \begin{macrocode} +%<*2ekernel|autoload> +\message{files,} +% \end{macrocode} +% +% VARIABLES, SWITCHES AND INTERNAL COMMANDS: +% \@mainaux : Output file number for main .AUX file. +% \@partaux : Output file number for current part's .AUX file. +% \@auxout : Either \@mainout or \@partout, depending on +% which .AUX file output goes to. +% \@input{foo} : If file foo exists, then \input's it, +% otherwise types a warning message. +% @filesw : Switch -- set false if no .AUX, .TOC, .IDX etc +% files are to be written +% @partsw : Set true by a \includeonly command. +% \@partlist : Set to the argument of the \includeonly command. +% +% \cp@FOO : The checkpoint for \include'd file FOO.TEX, written +% by \@writeckpt at the end of file FOO.AUX +% +% +% \includeonly{FILELIST} == +% BEGIN +% \@partsw := T +% \@partlist := FILELIST +% END +% +% \include{FILE} == +% BEGIN +% \clearpage +% if \@filesw = T +% then \immediate\write\@mainaux{\string\@input{FILE.AUX}} +% fi +% if \@partsw = T +% then \@tempswa := F +% \reserved@b == FILE +% for \reserved@a := \@partlist +% do if eval(\reserved@a) = eval(\reserved@b) +% then \@tempswa := T fi +% od +% fi +% +% if \@tempswa = T +% then \@auxout := \@partaux +% if \@filesw = T +% then \immediate\openout\@partaux{FILE.AUX} +% \immediate\write\@partaux{\relax} +% fi +% \@input{FILE.TEX} +% \clearpage +% \@writeckpt{FILE} +% if @filesw then \closeout \@partaux fi +% \@auxout := \@mainaux +% else \cp@FILE +% fi +% END +% +% \@writeckpt{FILE} == +% BEGIN +% if \@filesw = T +% \immediate\write on file \@partaux: +% \@setckpt{FILE}{ %% } +% for \reserved@a := \cl@@ckpt +% do \immediate\write on file \@partaux: +% \global\string\setcounter +% {eval(\reserved@a)}{eval(\c@eval(\reserved@a))} +% od %% { +% \immediate\write on file \@partaux: } +% fi +% END +% +% \@setckpt{FILE}{LIST} == +% BEGIN +% G \cp@FILE := LIST +% END +% +% INITIALIZATION +% \@tempswa := T +% +% \end{oldcomments} +% +% +% \task{???}{Do we use @unused or mainaux?} +% \begin{macro}{\@inputcheck} +% \begin{macro}{\@unused} +% Allocate read stream for testing and output stream. +% \changes{v1.0l}{1994/11/07} +% {move here from ltdefns, remove duplicate \cs{@mainaux}} +% \begin{macrocode} +\newread\@inputcheck +\newwrite\@unused +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@mainaux} +% \begin{macro}{\@partaux} +% \begin{macrocode} +\newwrite\@mainaux +\newwrite\@partaux +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\if@filesw} +% \begin{macro}{\if@partsw} +% \begin{macrocode} +\newif\if@filesw \@fileswtrue +\newif\if@partsw \@partswfalse +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@clubpenalty} +% This stores the current normal (non-infinite) value of +% \cs{clubpenalty}; it should therefore be reset whenever the +% normal value is changed (as in the bibliography in the standard +% styles). +% \changes{v1.1h}{1996/10/05}{Added setting its value} +% \begin{macrocode} +\newcount\@clubpenalty +\@clubpenalty \clubpenalty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\document} +% \changes{v0.9e}{1993/12/09}{Hook added} +% Cancel the |\begingroup| from |\begin| +% \begin{macrocode} +\def\document{\endgroup +% \end{macrocode} +% If some options on |\documentclass| haven't been used by any +% package we will now give a warning since this is most certainly a +% misspelling. +% \begin{macrocode} + \ifx\@unusedoptionlist\@empty\else + \@latex@warning@no@line{Unused global option(s):^^J% + \@spaces[\@unusedoptionlist]}% + \fi + \@colht\textheight + \@colroom\textheight \vsize\textheight + \columnwidth\textwidth + \@clubpenalty\clubpenalty + \if@twocolumn + \advance\columnwidth -\columnsep + \divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue + \fi + \hsize\columnwidth \linewidth\hsize + \begingroup\@floatplacement\@dblfloatplacement + \makeatletter\let\@writefile\@gobbletwo +% \end{macrocode} +% \changes{v1.1a}{1995/10/24} +% {Removed multiplelabels switch} +% \begin{macrocode} + \global \let \@multiplelabels \relax + \@input{\jobname.aux}% + \endgroup + \if@filesw + \immediate\openout\@mainaux\jobname.aux + \immediate\write\@mainaux{\relax}% + \fi +% \end{macrocode} +% +% Dateline 1991/03/26: FMi added |\process@table| to support NFSS; +% This will also work with old lfonts if no other style defines +% |\process@table|. The following line forces the initialization of +% the math fonts. +% \begin{macrocode} + \process@table + \let\glb@currsize\@empty %% Force math initialization. +% \end{macrocode} +% \changes{v0.9t}{1994/01/31} +% {set \cs{@normalsize} or \cs{normalsize} if necessary} +% \changes{v1.0d}{1994/03/28} +% {(DPC) remove \cs{@normalsize check}} +% \changes{v1.0d}{1994/03/28} +% {(DPC) Use \cs{normalsize} not \cs{@normalsize}} +% \changes{v1.0g}{1994/05/13}{Added execution of \cs{every@size}} +% \changes{v1.0m}{1994/11/07}{Renamed \cs{every@size} to +% \cs{every@math@size}.} +% \changes{v1.0q}{1995/04/25} +% {Removed execution of \cs{every@size} latex/1407} +% \begin{macrocode} + \normalsize + \everypar{}% +% \end{macrocode} +% +% So that punctuation in headings is not disturbed by verbatim +% or other local changes to the space factor codes, save the document +% default here. This will be locally reset by the output routine. +% For special cases a class may want to define |\normalsfcodes| +% directly, in case that definition will be used. +% (This is an old bug, problem existed in \LaTeX2.0x and plain \TeX.) +% \changes{v1.1k}{1997/04/14} +% {Set the document space factor defaults. latex/2404} +% \begin{macrocode} + \ifx\normalsfcodes\@empty + \ifnum\sfcode`\.=\@m + \let\normalsfcodes\frenchspacing + \else + \let\normalsfcodes\nonfrenchspacing + \fi + \fi +% \end{macrocode} +% Way back in 1991 (08/26) FMi \& RmS set the |\@noskipsec| switch +% to true in the preamble and to false here. +% This was done to trap lists and related text in the preamble but it +% does not catch everything; hence Change 1.1g was introduced. +% \begin{macrocode} + \@noskipsecfalse +% \end{macrocode} +% \changes{v1.1a}{1995/10/24} +% {Removed refundefined switch} +% \begin{macrocode} + \let \@refundefined \relax +% \end{macrocode} +% Just before disabling the preamble commands we execute the begin +% document hook which contains any code contributed by +% |\AtBeginDocument|. Also disable the gathering of the file list, +% if no |\listfiles| has been issued. |\AtBeginDocument| is redefined +% at this point so that and such commands that get into the hook do +% not chase their tail\ldots +% \changes{v1.1e}{1996/04/24} +% {(DPC) Reset \cs{AtBeginDocument} eg for latex/1297} +% \begin{macrocode} + \let\AtBeginDocument\@firstofone + \@begindocumenthook +% \end{macrocode} +% Most of the following assignments will be done globally in case +% the user adds something like |\begin{multicols}| to the document +% hook, i.e. starts are group in |\begin{document}|. +% \changes{v1.0r}{1995/04/27} +% {Added \cs{global} to support groups in hook} +% \changes{v1.0c}{1994/03/16} +% {(DPC) directly add file list settings} +% \changes{v1.0v}{1995/08/16}{set \cs{topskip} globally} +% \changes{v1.0v}{1995/08/16}{set \cs{@maxdepth}} +% +% \changes{v1.0s}{1995/05/25} +% {Added check for \cs{topskip} zero} +% \changes{v1.0t}{1995/05/25} +% {Corrected typo} +% Since a value of exactly 0pt for \cs{topskip} causes +% \cs{twocolumn[]} to misbehave, we add this check, hoping +% that it will not cause any problems elsewhere. +% \begin{macrocode} + \ifdim\topskip<1sp\global\topskip 1sp\relax\fi + \global\@maxdepth\maxdepth + \global\let\@begindocumenthook\@undefined + \ifx\@listfiles\@undefined + \global\let\@filelist\relax + \global\let\@addtofilelist\@gobble + \fi +% \end{macrocode} +% At the very end we disable all preamble commands. This has to +% happen after the begin document hooks was executed so that this +% hook can still use such commands. +% \changes{v0.9o}{1994/01/15} +% {move \cs{@preamblecmds} after document hook} +% \changes{v1.0v}{1995/08/16}{set \cs{do} globally} +% \begin{macrocode} + \gdef\do##1{\global\let ##1\@notprerr}% + \@preamblecmds +% \end{macrocode} +% The next line saves tokens and also allows |\@nodocument| to be +% used directly to trap preamble errors. +% \changes{v1.1g}{1996/09/29}{Added disabling of \cs{@nodocument}} +% \begin{macrocode} + \global\let \@nodocument \relax +% \end{macrocode} +% The next line is a pure safety measure in case a do list is ever +% expanded at the wrong place. In addition it will save a few +% tokens to get rid of the above definition. +% \begin{macrocode} + \global\let\do\noexpand +% \end{macrocode} +% \changes{v1.1c}{1995/12/05}{\cs{ignorespaces} added for latex/1933} +% Use of |\AtBeginDocument| hook might mean that we are already in +% horizontal mode, so ignore the space after |\begin{document}|. +% \begin{macrocode} + \ignorespaces} +% \end{macrocode} +% +% \begin{macrocode} +\@onlypreamble\document +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\normalsfcodes} +% \changes{v1.1k}{1997/04/14} +% {Macro added (from patch file) latex/2404} +% The setting of |\@empty| is just a flag. This command may be defined +% in a class or package file. If it is still |\@empty| at +% |\begin{document}| it will be defined to be |\frenchspacing| or +% |\nonfrenchspacing|, depending on which of those appears to be in +% effect at that point. +% \begin{macrocode} +\let\normalsfcodes\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\nofiles} +% \changes{v1.0k}{1994/11/04} +% {Added setting of \cs{protected@write}, +% \cs{makeindex} and \cs{makeglossary} to \cs{nofiles}. ASAJ.} +% \changes{v1.0o}{1994/11/30} +% {There is no \cs{@gobblethree}\ldots} +% \changes{v1.0t}{1995/05/25} +% {(CAR) added \cs{long}} +% \changes{v1.1f}{1996/05/17} +% {added \cs{write} to \cs{protected@write} for latex/2146} +% Set |\@fileswfalse| which suppresses the places where \LaTeX\ makes +% |\immediate| writes. The |\makeindex| and |\makeglossary| are +% disabled. |\protected@write| is redefined not to write to the file +% specified, but rather to write a blank line to the log file. This +% ensures that a \meta{whatsit} node is still created, and so spacing +% is not affected by the |\nofiles| command; to ensure this more +% generally, the |\if@nobreak| test is needed. +% \changes{v1.1i}{1996/11/05} +% {Standard \cs{if@nobreak} test added} +% \begin{macrocode} +\def\nofiles{% + \@fileswfalse + \typeout{No auxiliary output files.^^J}% + \long\def\protected@write##1##2##3% + {\write\m@ne{}\if@nobreak\ifvmode\nobreak\fi\fi}% + \let\makeindex\relax + \let\makeglossary\relax} +\@onlypreamble\nofiles +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\protected@write} +% This takes three arguments: an output stream, some initialization +% code, and some text to write. It then writes this, with +% appropriate handling of |\protect| and |\thepage|. +% \changes{v1.0k}{1994/11/04}{Macro added ASAJ.} +% \changes{v1.0t}{1995/05/25} +% {(CAR) added \cs{long}} +% \begin{macrocode} +\long\def \protected@write#1#2#3{% + \begingroup + \let\thepage\relax + #2% + \let\protect\@unexpandable@protect + \edef\reserved@a{\write#1{#3}}% + \reserved@a + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\let\@auxout=\@mainaux +% \end{macrocode} +% +% +% \begin{macro}{\includeonly} +% \changes{v1.0p}{1995/04/22}{Allow blanks in argument} +% \begin{macrocode} +\def\includeonly#1{% + \@partswtrue + \edef\@partlist{\zap@space#1 \@empty}} +\@onlypreamble\includeonly +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\include} +% \changes{v0.9p}{1994/01/18} +% {Use \cs{@input@} so include files are listed.} +% In the definition of |\include|, |\def\reserved@b| changed to +% |\edef\reserved@b| to be consistent with the |\edef| in +% |\includeonly|. +% (Suggested by Rainer Sch\"opf \& Frank Mittelbach. +% Change made 20 Jul 88.) +% +% Changed definition of |\include| to allow space at end of file name +% --- otherwise, typing |\include{foo }| would cause \LaTeX\ to +% overwrite |foo.tex|. Change made 24 May 89, suggested by Rainer +% Sch\"opf and Frank Mittelbach +% +% Made |\include| check for being used inside an |\include|'d file, as +% this will not work and cause surprising results. +% \begin{macrocode} +\def\include#1{\relax + \ifnum\@auxout=\@partaux + \@latex@error{\string\include\space cannot be nested}\@eha + \else \@include#1 \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@include} +% \begin{macrocode} +\def\@include#1 {% + \clearpage + \if@filesw + \immediate\write\@mainaux{\string\@input{#1.aux}}% + \fi + \@tempswatrue + \if@partsw + \@tempswafalse + \edef\reserved@b{#1}% + \@for\reserved@a:=\@partlist\do + {\ifx\reserved@a\reserved@b\@tempswatrue\fi}% + \fi + \if@tempswa + \let\@auxout\@partaux + \if@filesw + \immediate\openout\@partaux #1.aux + \immediate\write\@partaux{\relax}% + \fi + \@input@{#1.tex}% + \clearpage + \@writeckpt{#1}% + \if@filesw + \immediate\closeout\@partaux + \fi + \else +% \end{macrocode} +% If the file is not included, reset |\deadcycles|, so that a long +% list of non-included files does not generate an `Output loop' +% error. +% \changes{v1.1j}{1997/01/08}{reset \cs{deadcycles} latex/2365} +% \begin{macrocode} + \deadcycles\z@ + \@nameuse{cp@#1}% + \fi + \let\@auxout\@mainaux} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@writeckpt} +% \begin{macrocode} +\def\@writeckpt#1{% + \if@filesw + \immediate\write\@partaux{\string\@setckpt{#1}\@charlb}% + {\let\@elt\@wckptelt \cl@@ckpt}% + \immediate\write\@partaux{\@charrb}% + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@wckptelt} +% \begin{macrocode} +\def\@wckptelt#1{% + \immediate\write\@partaux{% + \string\setcounter{#1}{\the\@nameuse{c@#1}}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@setckpt} +% RmS 93/08/31: introduced |\@setckpt| +% \begin{macrocode} +\def\@setckpt#1{\global\@namedef{cp@#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@charlb} +% \begin{macro}{\@charrb} +% The following defines |\@charlb| and |\@charrb| to be |{| and |}|, +% respectively with |\catcode| 11. +% \begin{macrocode} +{\catcode`[=1 \catcode`]=2 +\catcode`{=11 \catcode`}=11 +\gdef\@charlb[{] +\gdef\@charrb[}] +]% }brace matching +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \subsection{Safe Input Macros} +% +% \begin{macro}{\IfFileExists} +% \changes{v0.9b}{1993/12/04}{Macro added} +% \changes{v0.9p}{1994/01/18}{New Definition} +% \changes{v1.0t}{1995/05/25} +% {(CAR) added \cs{long}} +% +% \begin{macrocode} +\long\def \IfFileExists#1#2#3{% + \openin\@inputcheck#1 % + \ifeof\@inputcheck + \ifx\input@path\@undefined + \def\reserved@a{#3}% + \else + \def\reserved@a{\@iffileonpath{#1}{#2}{#3}}% + \fi + \else + \closein\@inputcheck + \edef\@filef@und{#1 }% + \def\reserved@a{#2}% + \fi + \reserved@a} +% \end{macrocode} +% +% \begin{macro}{\@iffileonpath} +% If the file is not found by |\openin|, and |\input@path| is defined, +% look in all the directories specified in |\input@path|. +% \changes{v0.9p}{1994/01/18}{Macro added} +% \changes{v1.0f}{1994/05/02} +% {\cs{@break@loop} renamed to \cs{@break@tfor}} +% \changes{v1.0t}{1995/05/25} +% {(CAR) added \cs{long}} +% \changes{v1.1d}{1996/01/10} +% {Change argument handling to not require doubled hash. latex/2024} +% \begin{macrocode} +\long\def\@iffileonpath#1{% + \let\reserved@a\@secondoftwo + \expandafter\@tfor\expandafter\reserved@b\expandafter + :\expandafter=\input@path\do{% + \openin\@inputcheck\reserved@b#1 % + \ifeof\@inputcheck\else + \edef\@filef@und{\reserved@b#1 }% + \let\reserved@a\@firstoftwo% + \closein\@inputcheck + \@break@tfor + \fi}% + \reserved@a} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\InputIfFileExists} +% \changes{v0.9b} +% {1993/12/04}{Macro added} +% \changes{v0.9p} +% {1994/01/18}{New Definition} +% \changes{v0.3b}{1994/03/13} +% {Use new cmd \cs{@addtofilelist}} +% Now define |\InputIfFileExists| to input |#1| if it seems to exist. +% Immediately prior to the input, |#2| is executed. +% If the file |#1| does not exist, execute `|#3|'. +% \changes{v1.0t}{1995/05/25} +% {(CAR) added \cs{long}} +% \begin{macrocode} +\long\def \InputIfFileExists#1#2{% + \IfFileExists{#1}% + {#2\@addtofilelist{#1}\@@input \@filef@und}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\input} +% Input a file: if the argument is given in braces use safe input +% macros, otherwise use \TeX's primitive |\input| command (which is +% called |\@@input| in \LaTeX). +% \changes{v0.9b}{1993/12/04}{Macro reimplemented} +% \begin{macrocode} +\def\input{\@ifnextchar\bgroup\@iinput\@@input} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@iinput} +% Define |\@iinput| (i.e., |\input|) in terms of +% |\InputIfIfileExists|. +% \changes{v0.9b}{1993/12/04}{Macro reimplemented} +% \begin{macrocode} +\def\@iinput#1{% + \InputIfFileExists{#1}{}% + {\filename@parse{#1}% + \edef\reserved@a{\noexpand\@missingfileerror + {\filename@area\filename@base}% + {\ifx\filename@ext\relax tex\else\filename@ext\fi}}% + \reserved@a}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@input} +% \changes{v0.9b}{1993/12/04}{Macro reimplemented} +% \changes{v0.9p}{1994/01/18}% +% {do not use a different definition for \cs{input@path}} +% Define |\@input| in terms of |\IfIfileExists|. +% So this is a `safe input' command, but the files input are not +% listed by |\listfiles|. +% +% We don't want |.aux|, |.toc| files etc be listed by |\listfiles|. +% However, something like |.bbl| probably should be listed and thus +% should be implemented not by |\@input|. +% \begin{macrocode} +\def\@input#1{% + \IfFileExists{#1}{\@@input\@filef@und}{\typeout{No file #1.}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@input@} +% \changes{v0.9p}{1994/01/18}{Macro added} +% \task{???}{share code with `@input ?} +% Version of |\@input| that does add the file to |\@filelist|. +% \begin{macrocode} +\def\@input@#1{\InputIfFileExists{#1}{}{\typeout{No file #1.}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@missingfileerror} +% This `error' command avoids \TeX's primitive missing file loop. +% +% Missing file error. Prompt for a new filename, offering a default +% extension. +% \changes{LaTeX2e}{1993/11/21} +% {Stop infinite looping on \cs{@er@ext}} +% \changes{LaTeX2e}{1993/11/28} +% {Use filename parser from dircheck} +% \changes{LaTeX2e}{1994/03/15} +% {Quit on x or X just like a real error} +% \changes{LaTeX2e}{1994/05/26} +% {Modify message format} +% \changes{v1.0j}{1994/11/03} +% {Move here from ltclass} +% \changes{v1.0w}{1995/10/06} +% {Autoload error} +% \begin{macrocode} +%<autoload>\def\@missingfileerror{\@autoerr\@missingfileerror} +%</2ekernel|autoload> +%<*2ekernel|autoerr> +\gdef\@missingfileerror#1#2{% + \typeout{^^J! LaTeX Error: File `#1.#2' not found.^^J^^J% + Type X to quit or <RETURN> to proceed,^^J% + or enter new name. (Default extension: #2)^^J}% + \message{Enter file name: }% + {\endlinechar\m@ne + \global\read\m@ne to\@gtempa}% + \ifx\@gtempa\@empty + \else + \def\reserved@a{x}\ifx\reserved@a\@gtempa\batchmode\@@end\fi + \def\reserved@a{X}\ifx\reserved@a\@gtempa\batchmode\@@end\fi + \filename@parse\@gtempa + \edef\filename@ext{% + \ifx\filename@ext\relax#2\else\filename@ext\fi}% + \edef\reserved@a{% + \noexpand\InputIfFileExists + {\filename@area\filename@base.\filename@ext}% + {}% + {\noexpand\@missingfileerror + {\filename@area\filename@base}{\filename@ext}}}% + \reserved@a + \fi} +%</2ekernel|autoerr> +%<*2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@obsoletefile} +% For compatibility with \LaTeX~2.09 document styles, we distribute +% files called |article.sty|, |book.sty|, |report.sty|, +% |slides.sty| and |letter.sty|. These use the command +% |\@obsoletefile|, which produces a warning message. +% \changes{v0.9m}{1993/12/20}{Added this command, removed +% @oldfilewarning} +% \changes{v1.0f}{1994/05/02}{Make \cs{@onlypreamble}} +% \begin{macrocode} +\def\@obsoletefile#1#2{% + \@latex@warning@no@line{inputting `#1' instead of obsolete `#2'}} +\@onlypreamble\@obsoletefile +% \end{macrocode} +% +% \subsection{Listing files} +% +% \begin{macro}{\@filelist} +% A list of files input so far. The initial value of |\@gobble| eats +% the comma before the first file name. +% \begin{macrocode} +\let\@filelist\@gobble +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@addtofilelist} +% Add to the list of files input so far. +% \changes{LaTeX2e}{1994/03/13} +% {Macro added} +% \changes{LaTeX2e}{1995/10/01} +% {Macro added} +% This `real' definition is only used for `cfg' files during initex. +% An initial definition of |\@gobble| has already been set. +% \begin{macrocode} +%\def\@addtofilelist#1{\xdef\@filelist{\@filelist,#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\listfiles} +% A preamble command to cause |\end{document}| to list files input +% from the main file. +% \changes{LaTeX2e}{1993/11/22} +% {Removed checking for \cs{@unknownversion}} +% \changes{LaTeX2e}{1994/01/17} +% {New Version, adds `.tex' if needed, and lines up columns} +% \changes{LaTeX2e}{1994/05/13} +% {Stop \cs{listfiles} being run twice} +% \changes{v1.0i}{1994/10/18} +% {code moved here from ltclass} +% \begin{macrocode} +\def\listfiles{% + \let\listfiles\relax + \def\@listfiles##1##2##3##4##5##6##7##8##9\@@{% + \def\reserved@d{\\}% + \@tfor\reserved@c:=##1##2##3##4##5##6##7##8\do{% + \ifx\reserved@c\reserved@d + \edef\filename@area{ \filename@area}% + \fi}}% +% \end{macrocode} +% +% \changes{v1.0o}{1994/11/30} +% {Use \cs{@dofilelist}} +% \begin{macrocode} + \def\@dofilelist{% + \typeout{^^J *File List*}% + \@for\@currname:=\@filelist\do{% + \filename@parse\@currname + \edef\reserved@a{% + \filename@base.% + \ifx\filename@ext\relax tex\else\filename@ext\fi}% + \expandafter\let\expandafter\reserved@b + \csname ver@\reserved@a\endcsname + \expandafter\expandafter\expandafter\@listfiles\expandafter + \filename@area\filename@base\\\\\\\\\\\\\\\\\\\@@ + \typeout{% + \filename@area\reserved@a + \ifx\reserved@b\relax\else\@spaces\reserved@b\fi}}% + \typeout{ ***********^^J}}} +% \end{macrocode} +% +% \changes{LaTeX2e}{1994/03/13} +% {Reset \cs{@addtofilelist} at begin document} +% \changes{LaTeX2e}{1994/03/16} +% {Move this code directly into \cs{document}} +% The |\@filelist| will be de-activated if |\listfiles| does not +% appear in the preamble. |\begin{document}| contains code equivalent +% to the following: +%\begin{verbatim} +% \AtBeginDocument{% +% \ifx\@listfiles\@undefined +% \let\@filelist\relax +% \let\@addtofilelist\@gobble +% \fi} +%\end{verbatim} +% \begin{macrocode} +\@onlypreamble\listfiles +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@dofilelist} +% \changes{v1.0o}{1994/11/30} +% {Macro added} +% \begin{macrocode} +\let\@dofilelist\relax +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltfinal.dtx b/Master/texmf-dist/source/latex/base/ltfinal.dtx new file mode 100644 index 00000000000..3512b42a309 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltfinal.dtx @@ -0,0 +1,631 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltfinal.dtx +% +%<*driver> +% \fi +\ProvidesFile{ltfinal.dtx} + [2003/10/13 v1.1e LaTeX Kernel (Final Settings)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltfinal.dtx} +\title{\filename} +\date{\filedate} +\author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} +\begin{document} +\maketitle + \DocInput{ltfinal.dtx} +\end{document} +%</driver> +% \fi +% +% \CheckSum{472} +% +% \section{Final settings} +% This section contains the final settings for \LaTeX. It initialises +% some debugging and typesetting parameters, sets the default +% |\catcode|s and uc/lc codes, and inputs the hyphenation file. +% +% \StopEventually{} +% +% \changes{v0.1a}{1994/03/07}{Initial version, split from latex.dtx} +% \changes{v0.1a}{1994/03/07}{Remove oldcomments environment} +% \changes{v0.1c}{1994/04/21}{Added comments, set the catcodes of +% 128--255.} +% \changes{v0.1d}{1994/04/23}{Check that \cs{font@submax} is still zero} +% \changes{v0.1e}{1994/05/02}{Set all the catcodes} +% \changes{v0.1f}{1994/05/03}{Set the catcode of control-J to be +% `other', for use in messages.} +% \changes{v0.1g}{1994/05/05}{Added empty errhelp.} +% \changes{v0.1h}{1994/05/13}{Added package ot1enc, and defined +% \cs{@acci}, \cs{@accii} and \cs{@acciii}.} +% \changes{v0.1j}{1994/05/18}{Corrected the lccode for d-bar.} +% \changes{v0.1k}{1994/05/19}{Removed \cs{makeat...}} +% \changes{v1.0n}{1994/05/31}{Renamed lthyphen.* to lthyphen.*.} +% \changes{v1.0o}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% \changes{v1.0p}{1994/12/01} +% {Renamed lthyphen.* to hyphen.*.} +% \changes{v1.0r}{1995/06/05} +% {Added \cs{MakeUppercase} and \cs{MakeLowercase}.} +% \changes{v1.0s}{1995/06/06} +% {Made \cs{MakeUppercase} and \cs{MakeLowercase} brace their +% argument.} +% +% \subsection{Debugging} +% +% By default, \LaTeX{} shows statistics: +% \begin{macrocode} +%<*2ekernel> +\tracingstats1 +% \end{macrocode} +% +% \subsection{Typesetting parameters} +% +% \begin{macro}{\@lowpenalty} +% \begin{macro}{\@medpenalty} +% \begin{macro}{\@highpenalty} +% These are penalties used internally. +% \begin{macrocode} +\newcount\@lowpenalty +\newcount\@medpenalty +\newcount\@highpenalty +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% The default values of the picture and |\fbox| parameters: +% \begin{macrocode} +\unitlength = 1pt +\fboxsep = 3pt +\fboxrule = .4pt +% \end{macrocode} +% The saved value of \TeX's |\maxdepth|: +% \begin{macrocode} +\@maxdepth = \maxdepth +% \end{macrocode} +% |\vsize| initialized because a |\clearpage| with |\vsize < \topskip| +% causes trouble. +% |\@colroom| and |\@colht| also initialized because |\vsize| may be +% set to them if a |\clearpage| is done before the |\begin{document}| +% +% \begin{macrocode} +\vsize = 1000pt +\@colroom = \vsize +\@colht = \vsize +% \end{macrocode} +% Initialise |\textheight| |\textwidth| and page style, to avoid +% internal errors if they are not set by the class. +% \changes{v0.1b}{1994/04/18} +% {Initialise \cs{textheight}, \cs{textwidth} and page style} +% \begin{macrocode} +\textheight=.5\maxdimen +\textwidth=\textheight +\ps@empty +% \end{macrocode} +% +% \subsection{Lccodes for hyphenation} +% +% \changes{v1.1b}{1998/05/20}{Set up lccodes before loading +% hyphenation files: pr/2639} +% We set things up so that hypehnation files can assume that the +% default (T1) lccodes are in use (at present this also sets up the +% uccodes). +% We temporarily define |\reserved@a| to apply |\reserved@c| to +% all the numbers in the range of its arguments. +% \begin{macrocode} +\def\reserved@a#1#2{% + \@tempcnta#1\relax + \@tempcntb#2\relax + \reserved@b +} +\def\reserved@b{% + \ifnum\@tempcnta>\@tempcntb\else + \reserved@c\@tempcnta + \advance\@tempcnta\@ne + \expandafter\reserved@b + \fi +} +% \end{macrocode} +% Depending on the \TeX{} version, we might not be allowed to do +% this for non-ASCII characters. +% \changes{v1.0n}{1994/06/09}{For \TeX2, do not set codes for higher +% half of character table.} +% \begin{macrocode} +\def\reserved@c#1{% + \count@=#1\advance\count@ by -"20 + \uccode#1=\count@ + \lccode#1=#1 +} +\reserved@a{`\a}{`\z} +\ifnum\inputlineno=\m@ne\else + \reserved@a{"A0}{"BC} + \reserved@a{"E0}{"FF} +\fi +% \end{macrocode} +% The upper case characters need their |\uccode| and |\lccode| values +% set, and their |\sfcode| set to 999. +% \begin{macrocode} +\def\reserved@c#1{% + \count@=#1\advance\count@ by "20 + \uccode#1=#1 + \lccode#1=\count@ + \sfcode#1=999 +} +\reserved@a{`\A}{`\Z} +\ifnum\inputlineno=\m@ne\else + \reserved@a{"80}{"9C} + \reserved@a{"C0}{"DF} +\fi +% \end{macrocode} +% Well, it would be nice if that were correct, but unfortunately, the +% Cork encoding contains some odd slots whose uccode or lccode isn't +% quite what you'd expect. +% \begin{macrocode} +\uccode`\^^Y=`\I % dotless i +\lccode`\^^Y=`\^^Y % dotless i +\uccode`\^^Z=`\J % dotless j, ae in OT1 +\lccode`\^^Z=`\^^Z % dotless j, ae in OT1 +\ifnum\inputlineno=\m@ne\else + \lccode`\^^9d=`\i % dotted I + \uccode`\^^9d=`\^^9d % dotted I + \lccode`\^^9e=`\^^9e % d-bar + \uccode`\^^9e=`\^^d0 % d-bar +\fi +% \end{macrocode} +% Finally here is one that helps hyphenation in the OT1 encoding. +% \changes{v1.0z}{1996/10/31} +% {Added extra \cs{lcode}, hoping it does no harm in T1 (pr/1969)} +% \begin{macrocode} +\lccode`\^^[=`\^^[ % oe in OT1 +% \end{macrocode} +% +% And we also set the |\lccode| of |\-| and |\textcompwordmark| so +% that they do not prevent hyphenation in the remainder of the word +% (as suggested by Lars Helstr\"om). +% \changes{v1.1e}{2003/10/13} +% {Added extra \cs{lccode} for \cs{-} and \cs{textcompwordmark}} +% \begin{macrocode} +\lccode`\- =`\- % default hyphen char +\lccode 127=127 % alternate hyphen char +\lccode 23 =23 % textcompwordmark in T1 +% \end{macrocode} +% +% \subsection{Hyphenation} +% +% \changes{v0.1a}{1994/03/07}{move code here from lhyphen.dtx} +% \changes{v0.1a}{1994/03/07} +% {use \cs{InputIfFileExists} not \cs{IfFileExists}} +% \changes{v1.0x}{1995/11/01} +% {(DPC) Switch meaning of \cs{@addtofilelist} for cfg files}% +% The following code will be compiled into the format file. It checks +% for the existance of \texttt{hyphen.cfg} in inputs that file if +% found. Otherwise it inputs \texttt{hyphen.ltx}. Note that these +% are loaded in \emph{before} the |\catcode|s are set, so local +% hyphenation files can use 8-bit input. +% +% We try to load the customized hyphenation description file. +% \begin{macrocode} +\InputIfFileExists{hyphen.cfg} + {\typeout{===========================================^^J% + Local configuration file hyphen.cfg used^^J% + ===========================================}% + \def\@addtofilelist##1{\xdef\@filelist{\@filelist,##1}}% + } + {\input{hyphen.ltx}} +\let\@addtofilelist\@gobble +% \end{macrocode} +% +% +% +% \subsection{Font loading} +% Fonts loaded during the formatting process might already have +% changed the |\font@submax| from |0pt| to something higher. +% If so, we put out a bold warning. +% \changes{v0.1l}{1994/05/20}{Use new font warning commands} +% \begin{macrocode} +% \changes{v1.1c}{2000/08/23}{Fix typo in warning} +\ifdim \font@submax >\z@ + \@font@warning{Size substitutions with differences\MessageBreak + up to \font@submax\space have occurred.\MessageBreak + \MessageBreak + Please check the transcript file + carefully\MessageBreak + and redo the format generation if necessary! + \@gobbletwo}% + \errhelp{Only stopped, to give you time to + read the above message.} + \errmessage{} +% \end{macrocode} +% We reset the macro. Otherwise every user will get a warning on +% every job. +% \begin{macrocode} +\def\font@submax{0pt} +\fi +% \end{macrocode} +% +% \subsection{Input encoding} +% +% We temporarily define |\reserved@a| to apply |\reserved@c| to all the +% numbers in the range of its arguments. +% \begin{macrocode} +\def\reserved@a#1#2{% + \@tempcnta#1\relax + \@tempcntb#2\relax + \reserved@b +} +\def\reserved@b{% + \ifnum\@tempcnta>\@tempcntb\else + \reserved@c\@tempcnta + \advance\@tempcnta\@ne + \expandafter\reserved@b + \fi +} +% \end{macrocode} +% \changes{v0.1e}{1994/05/02}{Added setting the special catcodes.} +% \changes{v0.1f}{1994/05/02}{Set the catcode of control-J.} +% Set the special catcodes (although some of these are useless, since an +% error will have occurred if the catcodes have changed). Note that +% |^^J| has catcode `other' for use in warning messages. +% \begin{macrocode} +\catcode`\ =10 +\catcode`\#=6 +\catcode`\$=3 +\catcode`\%=14 +\catcode`\&=4 +\catcode`\\=0 +\catcode`\^=7 +\catcode`\_=8 +\catcode`\{=1 +\catcode`\}=2 +\catcode`\~=13 +\catcode`\@=11 +\catcode`\^^I=10 +\catcode`\^^J=12 +\catcode`\^^L=13 +\catcode`\^^M=5 +% \end{macrocode} +% \changes{v0.1e}{1994/05/02}{Added setting the `other' catcodes.} +% Set the `other' catcodes. +% \begin{macrocode} +\def\reserved@c#1{\catcode#1=12\relax} +\reserved@c{`\!} +\reserved@c{`\"} +\reserved@a{`\'}{`\?} +\reserved@c{`\[} +\reserved@c{`\]} +\reserved@c{`\`} +\reserved@c{`\|} +% \end{macrocode} +% \changes{v0.1e}{1994/05/02}{Added setting the `letter' catcodes.} +% Set the `letter' catcodes. +% \begin{macrocode} +\def\reserved@c#1{\catcode#1=11\relax} +\reserved@a{`\A}{`\Z} +\reserved@a{`\a}{`\z} +% \end{macrocode} +% \changes{v0.1e}{1994/05/02}{Made slot 127 illegal} +% \changes{v1.0n}{1994/11/18} +% {re-allow slots 127--255} +% All the characters in the range 0--31 and 127--255 are illegal, +% \emph{except} tab (|^^I|), nl (|^^J|), ff (|^^L|) and cr (|^^M|). +% +% Now allow 8-bit characters, although their use in this way is +% strongly discouraged. See |inputenc.dtx| for a supported mechanism +% for 8-bit input. +% \begin{macrocode} +\def\reserved@c#1{\catcode#1=15\relax} +\reserved@a{0}{`\^^H} +\reserved@c{`\^^K} +\reserved@a{`\^^N}{31} +%\ifnum\inputlineno=\m@ne + \catcode"7F=15 +%\else +% \reserved@a{"7F}{"FF} +%\fi +% \end{macrocode} +% +% \subsection{Lccodes and uccodes} +% +% \changes{v1.1b}{1998/05/20}{Set up uc/lccodes after loading +% hyphenation files: pr/2639} +% We now again set up the default (T1) uc/lccodes. +% The lower case characters need their |\uccode| and |\lccode| values +% set. Some of this is a repeat of the set-up before loading +% hyphenation files. +% Depending on the \TeX{} version, we might not be allowed to do +% this for non-ASCII characters. +% \changes{v1.0n}{1994/06/09}{For \TeX2, do not set codes for higher +% half of character table.} +% \begin{macrocode} +\def\reserved@c#1{% + \count@=#1\advance\count@ by -"20 + \uccode#1=\count@ + \lccode#1=#1 +} +\reserved@a{`\a}{`\z} +\ifnum\inputlineno=\m@ne\else + \reserved@a{"A0}{"BC} + \reserved@a{"E0}{"FF} +\fi +% \end{macrocode} +% The upper case characters need their |\uccode| and |\lccode| values +% set, and their |\sfcode| set to 999. +% \begin{macrocode} +\def\reserved@c#1{% + \count@=#1\advance\count@ by "20 + \uccode#1=#1 + \lccode#1=\count@ + \sfcode#1=999 +} +\reserved@a{`\A}{`\Z} +\ifnum\inputlineno=\m@ne\else + \reserved@a{"80}{"9C} + \reserved@a{"C0}{"DF} +\fi +% \end{macrocode} +% Well, it would be nice if that were correct, but unfortunately, the +% Cork encoding contains some odd slots whose uccode or lccode isn't +% quite what you'd expect. +% \begin{macrocode} +\uccode`\^^Y=`\I % dotless i +\lccode`\^^Y=`\^^Y % dotless i +\uccode`\^^Z=`\J % dotless j, ae in OT1 +\lccode`\^^Z=`\^^Z % dotless j, ae in OT1 +\ifnum\inputlineno=\m@ne\else + \lccode`\^^9d=`\i % dotted I + \uccode`\^^9d=`\^^9d % dotted I + \lccode`\^^9e=`\^^9e % d-bar + \uccode`\^^9e=`\^^d0 % d-bar +\fi +% \end{macrocode} +% Finally here is one that helps hyphenation in the OT1 encoding. +% \changes{v1.0z}{1996/10/31} +% {Added extra \cs{lcode}, hoping it does no harm in T1 (pr/1969)} +% \begin{macrocode} +\lccode`\^^[=`\^^[ % oe in OT1 +% \end{macrocode} +% +% \begin{macro}{\MakeUppercase} +% \begin{macro}{\MakeUppercase} +% \begin{macro}{\@uclclist} +% +% \changes{v1.1a}{1997/10/20}{Removed \cs{aa} and \cs{AA} from +% \cs{@uclclist} as these are macros.} +% +% And whilst we're doing things with uc/lc tables, here are two +% commands to upper- and lower-case a string. +% +% \emph{Note} that this implementation is subject to change! At +% the moment we're not providing any way to extend the list of +% uc/lc commands, since finding a good interface is difficult. +% These commands have some nasty features, such as uppercasing +% mathematics, environment names, labels, etc. A much better +% long-term solution is to use all-caps fonts, but these aren't +% generally available. +% \begin{macrocode} +\DeclareRobustCommand{\MakeUppercase}[1]{{% + \def\i{I}\def\j{J}% + \def\reserved@a##1##2{\let##1##2\reserved@a}% + \expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}% + \protected@edef\reserved@a{\uppercase{#1}}% + \reserved@a + }} +\DeclareRobustCommand{\MakeLowercase}[1]{{% + \def\reserved@a##1##2{\let##2##1\reserved@a}% + \expandafter\reserved@a\@uclclist\reserved@b{\reserved@b\@gobble}% + \protected@edef\reserved@a{\lowercase{#1}}% + \reserved@a + }} +\def\@uclclist{\oe\OE\o\O\ae\AE + \dh\DH\dj\DJ\l\L\ng\NG\ss\SS\th\TH} +% \end{macrocode} +% The above code works, but has the nasty side-effect that if you +% say something like: +%\begin{verbatim} +% \markboth{\MakeUppercase\contentsname} +% {\MakeUppercase\contentsname} +%\end{verbatim} +% then the uppercasing is only done to the first letter of the +% contents name, since the mark expands out to: +%\begin{verbatim} +% \mark{\protect\MakeUppercase Table of Contents} +% {\protect\MakeUppercase Table of Contents} +%\end{verbatim} +% In order to get round this, we redefine |\MakeUppercase| and +% |\MakeLowercase| to grab their argument and brace it. This is a +% very low-level hack, and is \emph{not} recommended practice! +% This is an instance of a general problem that makes it unsafe to +% grab arguments unbraced, and probably needs a more general +% solution. For the moment though, this hack will do: +% \begin{macrocode} +\protected@edef\MakeUppercase#1{\MakeUppercase{#1}} +\protected@edef\MakeLowercase#1{\MakeLowercase{#1}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \changes{v1.0h}{1994/05/13}{Added output enc stuff} +% \changes{v1.0i}{1994/05/16}{moved output enc stuff to lfonts} +% +% \changes{v0.1a}{1994/03/07}{Add code from the old dump.dtx} +% +% \subsection{Applying Patch files} +% Between major releases, small patches will be distributed in +% files |ltpatch.ltx| which must be added at this point. +% \changes{v1.0m}{1994/06/08}{Add patch file system} +% \begin{macrocode} +\IfFileExists{ltpatch.ltx} + {\typeout{=================================^^J% + Applying patch file ltpatch.ltx^^J% + =================================} + \def\fmtversion@topatch{unknown} + \input{ltpatch.ltx} + \ifx\fmtversion\fmtversion@topatch + \ifx\patch@level\@undefined + \typeout{^^J^^J^^J% + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J% + !! Patch file `ltpatch.ltx' not suitable for this^^J% + !! version of LaTeX.^^J^^J% + !! Please check if initex found an old patch file:^^J% + !! --- if so, rename it or delete it, and redo the^^J% + !! initex run.^^J% + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J}% + \batchmode \@@end + \else +% \end{macrocode} +% \changes{v1.0q}{1995/04/21} +% {Allow initial patch level 0} +% \changes{v1.0t}{1995/06/13} +% {Add patch level string more carefully} +% The code below adds the `patch level' string to the first |\typeout| +% in the startup banner. +% \begin{macrocode} + \def\fmtversion@topatch{0}% + \ifx\fmtversion@topatch\patch@level\else + \def\reserved@a\typeout##1##2\reserved@a{% + \typeout{##1 patch level \patch@level}##2} + \everyjob\expandafter\expandafter\expandafter{% + \expandafter\reserved@a\the\everyjob\reserved@a} + \let\reserved@a\relax + \the\everyjob + \fi + \fi + \else + \typeout{^^J^^J^^J% + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J% + !! Patch file `ltpatch.ltx' (for version <\fmtversion@topatch>)^^J% + !! is not suitable for version <\fmtversion> of LaTeX.^^J^^J% + !! Please check if initex found an old patch file:^^J% + !! --- if so, rename it or delete it, and redo the^^J% + !! initex run.^^J% + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J}% + \batchmode \@@end + \fi + \let\fmtversion@topatch\relax + }{} +% \end{macrocode} +% +% \subsection{Freeing Memory} +% +% \begin{macro}{\reserved@a} +% \begin{macro}{\reserved@b} +% \changes{v1.0v}{1995/10/17}{reset here after the \cs{input} above} +% And just to make sure nobody relies on those definitions of +% |\reserved@b| and friends. +% These macros are reserved for use in the kernel. \emph{Do not use +% them as general scratch macros}. +% \begin{macrocode} +\let\reserved@a\@filelist +\let\reserved@b=\@undefined +\let\reserved@c=\@undefined +\let\reserved@d=\@undefined +\let\reserved@e=\@undefined +\let\reserved@f=\@undefined +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\toks} +% \changes{v1.0y}{1996/07/10} +% {Free up memory from scratch registers /2213} +% \begin{macrocode} +\toks0{} +\toks2{} +\toks4{} +\toks6{} +\toks8{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\errhelp} +% \changes{v0.1g}{1994/05/05}{Set error help empty.} +% \changes{v1.1d}{2000/09/01}{Set error help empty at very end +% (pr/449 done correctly).} +% Empty the error help message, which may have some rubbish: +% \begin{macrocode} +\errhelp{} +% \end{macrocode} +% \end{macro} +% +% \subsection{Initialise file list} +% +% \begin{macro}{\@providesfile} +% \changes{v1.0v}{1995/10/17}{reset macro} +% Initialise for use in the document. During initex a modified version +% has been used which leaves debugging information for |latexbug.tex|. +% \begin{macrocode} +\def\@providesfile#1[#2]{% + \wlog{File: #1 #2}% + \expandafter\xdef\csname ver@#1\endcsname{#2}% + \endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@filelist} +% \changes{v1.0w}{1995/10/19}{Move after \cs{reserved@a} setting:-)} +% \begin{macro}{\@addtofilelist} +% Reset |\@filelist| so files input while making the format are not +% listed. The list built up so far may take up a lot of memory and so +% it is moved to |\reserved@a| where it will be overwritten as soon +% as almost any \LaTeX\ command is issued in a class file. +% However the |latexbug.tex| program will be able to access this +% information and insert it into a bug report. +% \begin{macrocode} +\let\@filelist\@gobble +\def\@addtofilelist#1{\xdef\@filelist{\@filelist,#1}}% +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Dumping the format} +% Finally we make |@| into a letter, ensure the format will +% be in the `normal' error mode, and dump everything into the +% format file. +% \changes{v1.0t}{1995/06/13} +% {Call \cs{errorstopmode}} +% \begin{macrocode} +\makeatother +\errorstopmode +\dump +%</2ekernel> +% \end{macrocode} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltfloat.dtx b/Master/texmf-dist/source/latex/base/ltfloat.dtx new file mode 100644 index 00000000000..d10264e56fd --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltfloat.dtx @@ -0,0 +1,1314 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%%% From File: ltfloat.dtx +% +%<*driver> +% \fi +\ProvidesFile{ltfloat.dtx}[2002/10/01 v1.1v LaTeX Kernel (Floats)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltfloat.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} + +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{636} +% +% \section{Floats} +% +% The different types of floats are identified by a \meta{type} name, +% which is the name of the counter for that kind of float. For +% example, figures are of type `figure' and tables are of type `table'. +% Each \meta{type} has associated a positive \meta{type number}, which +% is a power of two. E.g.,\\ +% figures might be have type number~1, tables type number~2, programs +% type number~4, etc. +% +% The locations where a float can go are specified by a +% \meta{placement specifier}, which is a list of the possible +% locations, each denoted by a letter as follows: +% \begin{center} +% \begin{tabular}{l@{ : }l@{ --- }l} +% h & here & at the current location in the text.\\ +% t & top & at the top of a text page.\\ +% b & bottom & at the bottom of a text page.\\ +% p & page & on a separate float page +% \end{tabular} +% \end{center} +% In addition, in conjunction with these, you can use `!' which means +% that the current values of the float positioning parameters are +% ignored for this float. (Has no effect on `p', float page +% positioning.) +% For example, `pht' specifies that the float can appear in any of +% three locations: page, here or top. +% +% \StopEventually{} +% +% +% \changes{v1.0a}{1994/03/04}{Initial version, split from latex.dtx} +% \changes{v1.0b}{1994/03/28}{Split further from ltherest.dtx} +% \changes{v1.0e}{1994/04/25}{Changed warning messages} +% \changes{v1.0e}{1994/04/25}{Removed obsolete tracing code} +% \changes{v1.0f}{1994/05/03} +% {(CAR) Added \cs{@largefloatcheck}} +% \changes{v1.0f}{1994/05/03}{Removed unnecessary braces from +% arguments of \cs{@ifnextchar}} +% \changes{v1.0i}{1994/05/22}{Use new warning commands} +% \changes{v1.1e}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% \changes{v1.1g}{1994/12/10}{Some temps reinserted temporarily} +% \changes{v1.1n}{1995/11/28}{documentation fixes} +% \changes{v1.1s}{1997/06/16}{documentation fixes} +% +% \subsection{Floating Environments} +% \begin{macrocode} +%<*2ekernel> +\message{floats,} +% \end{macrocode} +% \begin{oldcomments} +% +% Where floats may appear on a page, and how many may appear there +% are specified by the following float placement parameters. The +% numbers are named like counters so the user can set them with +% the ordinary counter-setting commands. +% +% \c@topnumber : Number of floats allowed at the top of a column. +% \topfraction : Fraction of column that can be devoted to floats. +% \c@dbltopnumber, \dbltopfraction +% : Same as above, but for double-column floats. +% \c@bottomnumber, \bottomfraction +% : Same as above for bottom of page. +% \c@totalnumber : Number of floats allowed in a single column, +% including in-text floats. +% \textfraction :Minimum fraction of column that must contain text. +% \floatpagefraction: Minimum fraction of page that must be taken +% up by float page. +% \dblfloatpagefraction +% : Same as above, for double-column floats. +% +% The document style must define the following. +% +% \fps@TYPE : The default placement specifier for floats of type +% TYPE. +% +% \ftype@TYPE : The type number for floats of type TYPE. +% +% \ext@TYPE : The file extension indicating the file on which the +% contents list for float type TYPE is stored. +% For example, \ext@figure = 'lof'. +% +% \fnum@TYPE : A macro to generate the figure number for a caption. +% For example, \fnum@TYPE == Figure \thefigure. +% +% \@makecaption{NUM}{TEXT} : +% A macro to make a caption, with NUM the value +% produced by \fnum@... and TEXT the text of the caption. +% It can assume it's in a \parbox of the appropriate width. +% +% \@float{TYPE}[PLACEMENT] : This macro begins a float environment for a +% single-column float of type TYPE with PLACEMENT as the placement +% specifier. The default value of PLACEMENT is defined by +% \fps@TYPE. The environment is ended by \end@float. +% E.g., \figure == \@float{figure}, \endfigure == \end@float. +% +% \@float{TYPE}[PLACEMENT] == +% BEGIN +% if hmode then \@bsphack +% \@floatpenalty := -10002 +% else \@floatpenalty := -10003 +% fi +% \@captype ==L TYPE +% \@dblflset +% \@fps ==L PLACEMENT +% \@onelevel@sanitize \@fps +% add default PLACEMENT if at most ! in PLACEMENT == \@fpsadddefault +% if inner +% then LaTeX Error: 'Not in outer paragraph mode.' +% \@floatpenalty := 0 +% else if \@freelist nonempty +% then \@currbox :=L head of \@freelist +% \@freelist :=G tail of \@freelist +% \count\@currbox :=G 32*\ftype@TYPE + +% bits determined by PLACEMENT +% else \@floatpenalty := 0 +% LaTeX Error: 'Too many unprocessed floats' +% fi +% fi +% \@currbox :=G \color@vbox +% \normalcolor +% \vbox{ +% %% 15 Dec 87 -- +% %% removed \boxmaxdepth :=L 0pt +% %% that made box 0 depth because it screwed +% %% things up. Instead, added \vskip0pt at end +% \hsize = \columnwidth +% \@parboxrestore +% \@floatboxreset +% END +% +% \caption == +% BEGIN +% \refstepcounter{\@captype} +% \@dblarg{\@caption{\@captype}} +% END +% +% In following definition, \par moved from after \addcontentsline to +% before \addcontentsline because the \write could cause +% an extra blank line to be added to the paragraph above the +% caption. (Change made 12 Jun 87) +% +% \@caption{TYPE}[STEXT]{TEXT} == +% BEGIN +% \par +% \addcontentsline{\ext@TYPE}{TYPE}{\numberline{\theTYPE}{STEXT}} +% \begingroup +% \@parboxrestore +% \@normalsize +% \@makecaption{\fnum@TYPE}{TEXT} +% \par +% \endgroup +% END +% +% +% \@dblfloat{TYPE}[PLACEMENT] : Macro to begin a float environment for +% a double-column float of type TYPE with PLACEMENT as the placement +% specifier. The default value of PLACEMENT is 'tp' +% The environment is ended by \end@dblfloat. +% E.g., \figure* == \@dblfloat{figure}, +% \endfigure* == \end@dblfloat. +% +% \@dblfloat{TYPE}[PLACEMENT] == +% Identical to \@float{TYPE}[PLACEMENT] except \hsize and \linewidth +% are set to \textwidth. +% \end{oldcomments} +% +% \begin{macro}{\@floatpenalty} +% \begin{macrocode} +\newcount\@floatpenalty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\caption} +% +% This is set to be an error message outside a float since no +% captype is defined there; this may need to be changed by some +% classes. +% \changes{v1.1u}{1999/04/19} +% {Made caption an error oustside a float: latex/2815} +% \begin{macrocode} +\def\caption{% + \ifx\@captype\@undefined + \@latex@error{\noexpand\caption outside float}\@ehd + \expandafter\@gobble + \else + \refstepcounter\@captype + \expandafter\@firstofone + \fi + {\@dblarg{\@caption\@captype}}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@caption} +% \changes{v1.0b}{1994/03/28} +% {Use \cs{normalsize} not \cs{@normalsize}} +% \changes{v1.1r}{1996/12/06} +% {Call \cs{@setminpage} if needed. latex/2318} +% \begin{macrocode} +\long\def\@caption#1[#2]#3{% + \par + \addcontentsline{\csname ext@#1\endcsname}{#1}% + {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}% + \begingroup +% \end{macrocode} +% +% The paragraph setting parameters are normalised at this point, however +% |\@parboxrestore| resets |\everypar| which is not correct in this +% context so |\@setminipage| is called if needed. +% +% The float mechanism, like minipage, sets the flag |@minipage| true +% before executing the user-supplied text. Many \LaTeX\ constructs +% test for this flag and do not add vertical space when it is true. +% The intention is that this emulates \TeX's `top of page' behaviour. +% The flag must be set false at the start of the first paragraph. This +% is achieved by a redefinition of |\everypar|, but the call to +% |\@parboxrestore| removes that redefinition, so it is re-inserted +% if needed. If the flag is already false then the |\caption| was not +% the first entry in the float, and so some other paragraph has already +% activated the special |\everypar|. In this case no further action is +% needed. +% \begin{macrocode} + \@parboxrestore + \if@minipage + \@setminipage + \fi +% \end{macrocode} +% +% \begin{macrocode} + \normalsize + \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par + \endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@float} +% \begin{macro}{\@dblflset} +% \changes{v1.1a}{1994/10/31}{Macro added} +% \changes{v1.1g}{1994/12/10}{Macro removed temporarily} +% \changes{v1.1a}{1994/10/31} +% {Major changes to parameter parsing, setting of local variables, +% etc; two-column and one-column cases merged; space hacks moved} +% \changes{v1.1c}{1994/11/05} +% {Add compatibility with old version of \cs{@xfloat}.} +% \changes{v1.1g}{1994/12/10}{Old version reinstated temporarily} +% +% \begin{macrocode} +\def\@float#1{% + \@ifnextchar[% + {\@xfloat{#1}}% + {\edef\reserved@a{\noexpand\@xfloat{#1}[\csname fps@#1\endcsname]}% + \reserved@a}} +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@dblfloat} +% \changes{v1.1a}{1994/10/31} +% {Major changes since two-column and one-column cases merged} +% \changes{v1.1g}{1994/12/10}{Old version reinstated temporarily} +% +% \begin{macrocode} +\def\@dblfloat{% + \if@twocolumn\let\reserved@a\@dbflt\else\let\reserved@a\@float\fi + \reserved@a} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\fps@dbl} +% \changes{v1.1a}{1994/10/31}{Macro added} +% \changes{v1.1g}{1994/12/10}{Macro removed temporarily} +% Note that all double floats have default fps `tp'. +% \end{macro} +% +% \begin{macro}{\@setfps} +% \changes{v1.1a}{1994/10/31}{Macro added} +% \changes{v1.1c}{1994/11/05} +% {Add compatibility with old version of \cs{@xfloat}.} +% \changes{v1.1g}{1994/12/10}{Macro removed temporarily} +% This sets the fps, dealing with error conditions by adding +% the default. +% +% \end{macro} +% +% \begin{macro}{\@xfloat} +% \changes{LaTeX2e}{1993/12/05}{Command changed} +% \changes{LaTeX2e}{1994/01/21}{Added missing percent characters.} +% \changes{v1.1a}{1994/10/31} +% {Major changes, removing setting of local variables, space hacks +% etc; two-column and one-column cases merged} +% \changes{v1.1c}{1994/11/05} +% {Add compatibility with old version of \cs{@xfloat}: but the +% arguments, provided at exorbitant cost, are now completely +% ignored} +% \changes{v1.1f}{1994/11/21} +% {Missing percents reinserted after 4, 8: these are not numbers.} +% \changes{v1.1g}{1994/12/10}{Old version reinstated temporarily} +% \changes{v1.1g}{1994/12/10}{Sanitisation added temporarily} +% The first part of this sets the count register that stores all +% the information about the type and fps of the float. +% +% We assume here that the default specifiers already contain no +% active characters. +% +% It may be better to store the defaults as numbers, rather than +% symbol strings. +% +% \changes{v1.1p}{1996/10/24}{Added \cs{@nodocument} to trap +% floats in the preamble} +% \begin{macrocode} +\def\@xfloat #1[#2]{% + \@nodocument + \def \@captype {#1}% + \def \@fps {#2}% + \@onelevel@sanitize \@fps + \def \reserved@b {!}% + \ifx \reserved@b \@fps + \@fpsadddefault + \else + \ifx \@fps \@empty + \@fpsadddefault + \fi + \fi + \ifhmode + \@bsphack + \@floatpenalty -\@Mii + \else + \@floatpenalty-\@Miii + \fi + \ifinner + \@parmoderr\@floatpenalty\z@ + \else + \@next\@currbox\@freelist + {% + \@tempcnta \sixt@@n + \expandafter \@tfor \expandafter \reserved@a + \expandafter :\expandafter =\@fps + \do + {% + \if \reserved@a h% + \ifodd \@tempcnta + \else + \advance \@tempcnta \@ne + \fi + \fi + \if \reserved@a t% + \@setfpsbit \tw@ + \fi + \if \reserved@a b% + \@setfpsbit 4% + \fi + \if \reserved@a p% + \@setfpsbit 8% + \fi + \if \reserved@a !% + \ifnum \@tempcnta>15 + \advance\@tempcnta -\sixt@@n\relax + \fi + \fi + }% + \@tempcntb \csname ftype@\@captype \endcsname + \multiply \@tempcntb \@xxxii + \advance \@tempcnta \@tempcntb + \global \count\@currbox \@tempcnta + }% + \@fltovf + \fi +% \end{macrocode} +% The remainder sets up the box in which the float is typeset, and +% the typesetting environment to be used. It is essential to have +% the extra box to avoid the unwanted space that would otherwise +% often be put at the top of the float. +% +% It ends with a hook; not sure how useful this is but it is needed +% at present to deal with double-column floats. +% \task{CAR?}{Sort out hooks} +% \changes{v1.0a}{1994/03/07} +% {(DPC) Extra group for colour} +% \changes{v1.0c}{1994/03/14} +% {(DPC) Use \cs{color@begingroup}} +% \changes{v1.0g}{1994/05/13} +% {(DPC) Use \cs{normalcolor}} +% \changes{v1.1a}{1994/10/31} +% {(DPC/CAR) Extra box added to remove colour resetting from vmode} +% \changes{v1.1a}{1994/10/31}{Reset hook added} +% \changes{v1.1c}{1994/11/05} +% {Use new \cs{color@hbox} concept.} +% \changes{v1.1f}{1994/11/21} +% {Changed to \cs{color@vbox} so that large floats overflow +% at the bottom} +% \changes{v1.1f}{1994/11/21}{Use \cs{@setnobreak}} +% \changes{v1.1f}{1994/11/21}{Added \cs{@setminipage}} +% \changes{v1.1f}{1994/11/21}{Added resetting of size and font} +% \changes{v1.1m}{1995/05/25}{(CAR) Resettings moved to hook} +% \begin{macrocode} + \global \setbox\@currbox + \color@vbox + \normalcolor + \vbox \bgroup + \hsize\columnwidth + \@parboxrestore + \@floatboxreset +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@floatboxreset} +% \changes{v1.1a}{1994/10/31}{Macro added} +% +% The rational for allowing these normally global flags to be set +% locally here, via |\@parboxrestore|, was stated originally by +% Donald Arseneau and extended by Chris Rowley. +% It is because these flags are only set globally to +% true by section commands, and these should never appear within +% marginals or floats or, indeed, in any group; and they are only ever +% set globally to false when they are definitely true. +% +% If anyone is unhappy with this argument then both flags should be +% treated as in |\set@nobreak|; otherwise this command will be +% redundant. +% \changes{v1.1p}{1996/10/24} +% {Added local settings of flags: dangerous!!} +% \begin{macrocode} +\def \@floatboxreset {% + \reset@font + \normalsize + \@setminipage +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@setnobreak} +% \changes{v1.1f}{1994/11/21}{Macro added} +% \changes{v1.1n}{1996/07/26}{remove unecessary \cs{global} before +% \cs{@nobreak...}} +% \begin{macrocode} +\def \@setnobreak{% + \if@nobreak + \let\outer@nobreak\@nobreaktrue + \@nobreakfalse + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@setminipage} +% \changes{v1.1f}{1994/11/21}{Macro added} +% \changes{v1.1n}{1996/07/26}{remove unecessary \cs{global} before +% \cs{@minipage...}} +% \begin{macrocode} +\def \@setminipage{% + \@minipagetrue + \everypar{\@minipagefalse\everypar{}}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\end@float} +% \changes{v1.0f}{1994/05/03} +% {(CAR) Added \cs{@largefloatcheck}} +% \changes{v1.1n}{1995/10/25}{(CAR) unify code for double and +% single versions} +% \begin{macrocode} +\def\end@float{% + \@endfloatbox + \ifnum\@floatpenalty <\z@ +% \end{macrocode} +% We make sure that we never exceed |\textheight|, otherwise float +% will never get typeset (91/03/15 FMi). +% \begin{macrocode} + \@largefloatcheck + \@cons\@currlist\@currbox + \ifnum\@floatpenalty <-\@Mii + \penalty -\@Miv +% \end{macrocode} +% Saving and restoring |\prevdepth| added 26 May 87 to prevent extra +% vertical space when used in vertical mode. +% \begin{macrocode} + \@tempdima\prevdepth + \vbox{}% + \prevdepth\@tempdima +% \end{macrocode} +% +% \begin{macrocode} + \penalty\@floatpenalty +% \end{macrocode} +% \changes{LaTeX2.09}{1992/03/18} +% {(RmS) changed \cs{@esphack} to \cs{@Esphack}} +% \begin{macrocode} + \else + \vadjust{\penalty -\@Miv \vbox{}\penalty\@floatpenalty}\@Esphack + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\end@dblfloat} +% \changes{v1.0f}{1994/05/03}{\cs{@largefloatcheck} added} +% \changes{v1.1n}{1995/10/25}{(CAR) unify code for double and +% single versions} +% \begin{macrocode} +\def\end@dblfloat{% +\if@twocolumn + \@endfloatbox + \ifnum\@floatpenalty <\z@ +% \end{macrocode} +% We make sure that we never exceed |\textheight|, otherwise float +% will never get typeset (91/03/15 FMi). +% \begin{macrocode} + \@largefloatcheck + \@cons\@dbldeferlist\@currbox + \fi +% \end{macrocode} +% RmS 92/03/18 changed |\@esphack| to |\@Esphack|. +% \begin{macrocode} + \ifnum \@floatpenalty =-\@Mii \@Esphack\fi +\else + \end@float +\fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@endfloatbox} +% \changes{v1.1n}{1995/10/25}{(CAR) macro added: to unify code for +% double and single versions} +% This macro is not intended to be a hook; it is designed to help +% maintain the integrity of this code, which is used twice and, as +% can be seen, is subject to frequent changes. +% \begin{macrocode} +\def \@endfloatbox{% + \par\vskip\z@skip %% \par\vskip\z@ added 15 Dec 87 +% \end{macrocode} +% \changes{v1.0a} +% {1994/03/07}{(DPC) Extra group for colour} +% \changes{v1.0c}{1994/03/14} +% {(DPC) Use \cs{color@endgroup}} +% \changes{v1.0h}{1994/05/20}{Restore outer value of @nobreak switch.} +% \changes{v1.1a}{1994/10/31} +% {(DPC/CAR) Extra box added to remove colour resetting from vmode} +% \changes{v1.1c}{1994/11/05} +% {Use new \cs{color@hbox} concept.} +% \changes{v1.1f}{1994/11/21}{Corrected position of \cs{outer@nobreak}} +% \changes{v1.1f}{1994/11/21}{Added reset of minipage flag} +% \changes{v1.1n}{1996/07/26}{remove unecessary \cs{global} before +% \cs{@minipage...}} +% \begin{macrocode} + \@minipagefalse + \outer@nobreak + \egroup %% end of vbox + \color@endbox +} +% +% \begin{macro}{\outer@nobreak} +% \changes{v1.0h}{1994/05/20}{Macro added: default is to do nothing.} +% \begin{macrocode} +\let\outer@nobreak\@empty +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@largefloatcheck} +% \changes{v1.0e}{1994/04/25}{Command added} +% +% This calculates by how much a float is oversize for the page and +% prints this in a warning message. +% +% \begin{macrocode} +\def \@largefloatcheck{% + \ifdim \ht\@currbox>\textheight + \@tempdima -\textheight + \advance \@tempdima \ht\@currbox +% \end{macrocode} +% \changes{v1.0e}{1994/04/25}{Changed warning message to give more +% info} +% \begin{macrocode} + \@latex@warning {Float too large for page by \the\@tempdima}% + \ht\@currbox \textheight + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@dbflt} +% \begin{macro}{\@xdblfloat} +% \changes{v1.1a}{1994/10/31} +% {Macros removed: \cs{@dbflt}, \cs{@xdblfloat}} +% \changes{v1.1g}{1994/12/10}{Macros reinserted temporarily} +% +% +% \begin{macrocode} +\def\@dbflt#1{\@ifnextchar[{\@xdblfloat{#1}}{\@xdblfloat{#1}[tp]}} +\def\@xdblfloat#1[#2]{% + \@xfloat{#1}[#2]\hsize\textwidth\linewidth\textwidth} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% Moved to ltoutput 93/12/16 +% \begin{macrocode} +%\newcount\c@topnumber +%\newcount\c@dbltopnumber +%\newcount\c@bottomnumber +%\newcount\c@totalnumber +% \end{macrocode} +% +% An analysis of |\@floatplacement|: +% +% This should be called whenever |\@colht| has been set. +% \begin{macrocode} +\def\@floatplacement{\global\@topnum\c@topnumber + % Textpage bit, global: + \global\@toproom \topfraction\@colht + \global\@botnum \c@bottomnumber + \global\@botroom \bottomfraction\@colht + \global\@colnum \c@totalnumber + % Floatpage bit, local: + \@fpmin \floatpagefraction\@colht} +% \end{macrocode} +% +% \begin{macro}{\@dblfloatplacement} +% \changes{LaTeX2e}{1993/12/05}{Command changed} +% +% This should be called only within a group. Now changed to +% provide extra checks in |\@addtodblcol|, needed when processing a +% BANG float. +% +% \begin{macrocode} +\def \@dblfloatplacement {% +% \end{macrocode} +% Textpage bit: global, but need not be. +% \begin{macrocode} + \global \@dbltopnum \c@dbltopnumber + \global \@dbltoproom \dbltopfraction\@colht +% \end{macrocode} +% This new bit uses |\@textmin| to locally store the amount of extra +% room in the column. +% \begin{macrocode} + \@textmin \@colht + \advance \@textmin -\@dbltoproom +% \end{macrocode} +% Floatpage bit: must be local. +% \begin{macrocode} + \@fpmin \dblfloatpagefraction\textheight + \@fptop \@dblfptop + \@fpsep \@dblfpsep + \@fpbot \@dblfpbot +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{oldcomments} +% MARGINAL NOTES: +% +% Marginal notes use the same mechanism as floats to communicate +% with the \output routine. Marginal notes are distinguished from +% floats by having a negative placement specification. The command +% \marginpar [LTEXT]{RTEXT} generates a marginal note in a parbox, +% using LTEXT if it's on the left and RTEXT if it's on the right. +% (Default is RTEXT = LTEXT.) It uses the following parameters. +% +% \marginparwidth : Width of marginal notes. +% \marginparsep : Distance between marginal note and text. +% the page layout to determine how to move the marginal +% note into the margin. E.g., \@leftmarginskip == +% \hskip -\marginparwidth \hskip -\marginparsep . +% \marginparpush : Minimum vertical separation between \marginpar's +% +% Marginal notes are normally put on the outside of the page +% if @mparswitch = true, and on the right if @mparswitch = false. +% The command \reversemarginpar reverses the side where they +% are put. \normalmarginpar undoes \reversemarginpar. +% These commands have no effect for two-column output. +% +% SURPRISE: if two marginal notes appear on the same line of +% text, then the second one could appear on the next page, in +% a funny position. +% +% +% \marginpar [LTEXT]{RTEXT} == +% BEGIN +% if hmode then \@bsphack +% \@floatpenalty := -10002 +% else \@floatpenalty := -10003 +% fi +% if inner +% then LaTeX Error: 'Not in outer paragraph mode.' +% \@floatpenalty := 0 +% else if \@freelist has two elements: +% then get \@marbox, \@currbox from \@freelist +% \count\@marbox :=G -1 +% else \@floatpenalty := 0 +% LaTeX Error: 'Too many unprocessed floats' +% \@currbox, \@marbox := \@tempboxa %%use \def +% fi +% fi +% if optional argument +% then %% \@xmpar == +% \@savemarbox\@marbox{LTEXT} +% \@savemarbox\@currbox{RTEXT} +% else %% \@ympar == +% \@savemarbox\@marbox{RTEXT} +% \box\@currbox :=G \box\@marbox +% fi +% \@xympar +% END +% +% \reversemarginpar == BEGIN \@mparbottom :=G 0 +% @reversemargin :=G true +% END +% +% \normalmarginpar == BEGIN \@mparbottom :=G 0 +% @reversemargin :=G false +% END +% +% \end{oldcomments} +% +% \begin{macro}{\marginpar} +% \begin{macrocode} +\def\marginpar{% + \ifhmode + \@bsphack + \@floatpenalty -\@Mii + \else + \@floatpenalty-\@Miii + \fi + \ifinner + \@parmoderr + \@floatpenalty\z@ + \else + \@next\@currbox\@freelist{}{}% + \@next\@marbox\@freelist{\global\count\@marbox\m@ne}% + {\@floatpenalty\z@ + \@fltovf\def\@currbox{\@tempboxa}\def\@marbox{\@tempboxa}}% + \fi + \@ifnextchar [\@xmpar\@ympar} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xmpar} +% \begin{macrocode} +\long\def\@xmpar[#1]#2{% + \@savemarbox\@marbox{#1}% + \@savemarbox\@currbox{#2}% + \@xympar} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ympar} +% \begin{macrocode} +\long\def\@ympar#1{% + \@savemarbox\@marbox{#1}% + \global\setbox\@currbox\copy\@marbox + \@xympar} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@savemarbox} +% \changes{v1.0b}{1994/03/12} +% {(DPC) Extra group for colour} +% \changes{v1.0c}{1994/03/14} +% {(DPC) Use \cs{color@begingroup}} +% \changes{v1.0d}{1994/04/18} +% {(DPC) Remove Colour support} +% \changes{v1.1a}{1994/10/31} +% {(DPC/CAR) Extra box added for colour} +% \changes{v1.1c}{1994/11/05} +% {Use new \cs{color@hbox} concept.} +% \changes{v1.1f}{1994/11/21}{Changed to \cs{color@vbox} } +% \changes{v1.1f}{1994/11/21}{Use \cs{@setnobreak} etc} +% \changes{v1.1f}{1994/11/21}{Added \cs{@setminipage} etc} +% \changes{v1.1f}{1994/11/21}{Added resetting of size and font} +% \changes{v1.1m}{1995/05/25}{(CAR) Resettings moved to hook} +% \changes{v1.1n}{1996/07/26}{remove unecessary \cs{global} before +% \cs{@minipage...}} +% \begin{macrocode} +\long\def \@savemarbox #1#2{% + \global\setbox #1% + \color@vbox + \vtop{% + \hsize\marginparwidth + \@parboxrestore + \@marginparreset + #2% + \@minipagefalse + \outer@nobreak + }% + \color@endbox +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@marginparreset} +% \changes{v1.1f}{1994/11/21}{Macro added} +% +% The rational for allowing these normally global flags to be set +% locally here, via |\@parboxrestore| was stated originally by +% Donald Arsenau and extended by Chris Rowley. +% It is because these flags are only set globally to +% true by section commands, and these should never appear within +% marginals or floats or, indeed, in any group; and they are only ever +% set globally to false when they are definitely true. +% +% If anyone is unhappy with this argument then both flags should be +% treated as in |\set@nobreak|; otherwise this command will be +% redundant. +% \changes{v1.1p}{1996/10/24} +% {Added local settings of flags: dangerous!!} +% \begin{macrocode} +\def \@marginparreset {% + \reset@font + \normalsize +% \let\if@nobreak\iffalse +% \let\if@noskipsec\iffalse +% \@setnobreak + \@setminipage +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xympar} +% \begin{macrocode} +% \end{macrocode} +% \changes{LaTeX2.09}{1992/03/18} +% {(RmS) added \cs{global}\cs{@ignorefalse}} +% \changes{v1.0b}{1994/03/12} +% {(DPC) Extra bgroup for colour} +% \changes{1.0c}{1994/03/14} +% {(DPC) Use \cs{color@begingroup}} +% \changes{v1.1a}{1994/10/31} +% {(DPC/CAR) Extra box added since needed for floats} +% \changes{v1.1c}{1994/11/05} +% {Use new \cs{color@hbox} concept.} +% \changes{v1.1f}{1994/11/21}{Changed to \cs{color@vbox} } +% Setting the box here is done only because the code +% uses \cs{end@float}; it will be empty and gets discarded. +% \changes{v1.1o}{1996/08/02}{Remove \cs{global} before \cs{@ignore...}} +% \begin{macrocode} +\def \@xympar{% + \ifnum\@floatpenalty <\z@\@cons\@currlist\@marbox\fi + \setbox\@tempboxa + \color@vbox + \vbox \bgroup + \end@float + \@ignorefalse + \@esphack +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\reversemarginpar} +% \begin{macro}{\normalmarginpar} +% \begin{macrocode} +\def\reversemarginpar{\global\@mparbottom\z@ \@reversemargintrue} +\def\normalmarginpar{\global\@mparbottom\z@ \@reversemarginfalse} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +\message{footnotes,} +% \end{macrocode} +% +% \subsection{Footnotes} +% +% \begin{oldcomments} +% +% \footnote{NOTE} : User command to insert a footnote. +% +% \footnote[NUM]{NOTE}: User command to insert a footnote numbered +% NUM, where NUM is a number -- 1, 2, +% etc. For example, if footnotes are numbered +% *, **, etc. within pages, then \footnote[2]{...} +% produces footnote '**'. This command does not +% step the footnote counter. +% +% \footnotemark[NUM] : Command to produce just the footnote mark in +% the text, but no footnote. With no argument, +% it steps the footnote counter before generating +% the mark. +% +% \footnotetext[NUM]{TEXT} : Command to produce the footnote but +% no mark. \footnote is equivalent to +% \footnotemark \footnotetext . +% +% As in PLAIN, footnotes use \insert\footins, and the following +% parameters: +% +% \footnotesize : Size-changing command for footnotes. +% +% \footnotesep : The height of a strut placed at the beginning of +% every footnote. +% \skip\footins : Space between main text and footnotes. The rule +% separating footnotes from text occurs in this +% space. This space lies above the strut of height +% \footnotesep which is at the beginning of the +% first footnote. +% \footnoterule : Macro to draw the rule separating footnotes from +% text. It is executed right after a \vspace of +% \skip\footins. It should take zero vertical +% space--i.e., it should to a negative skip to +% compensate for any positive space it occupies. +% (See PLAIN.TEX.) +% +% \interfootnotelinepenalty : Interline penalty for footnotes. +% +% \thefootnote : In usual LaTeX style, produces the footnote number. +% If footnotes are to be numbered within pages, then +% the document style file must include an \@addtoreset +% command to cause the footnote counter to be reset +% when the page counter is stepped. This is not a good +% idea, though, because the counter will not always be +% reset in time to ensure that the first footnote on a +% page is footnote number one. +% +% \@thefnmark : Holds the current footnote's mark--e.g., \dag or '1' +% or 'a'. +% +% \@mpfnnumber : A macro that generates the numbers for \footnote +% and \footnotemark commands. It == \thefootnote +% outside a minipage environment, but can be +% changed inside to generate numbers for +% \footnote's. +% +% \@makefnmark : A macro to generate the footnote marker from +% \@thefnmark The default definition was +% \hbox{$^\@thefnmark$}. +% +% This is now replaced by +% \textsuperscript{\@thefnmark} +% +% \@makefntext{NOTE} : +% Must produce the actual footnote, using \@thefnmark as the mark +% of the footnote and NOTE as the text. It is called when +% effectively inside a \parbox, with \hsize = \columnwidth. +% For example, it might be as simple as +% $^{\@thefnmark}$ NOTE +% +% In a minipage environment, \footnote and \footnotetext are redefined +% so that +% (a) they use the counter mpfootnote +% (b) the footnotes they produce go at the bottom of the minipage. +% The switch is accomplished by letting \@mpfn == footnote or mpfootnote +% and \thempfn == \thefootnote or \thempfootnote, and by redefining +% \@footnotetext to be \@mpfootnotetext in the minipage. +% +% \footnote{NOTE} == +% BEGIN +% \stepcounter{\@mpfn} +% begingroup +% \protect == \noexpand +% \@thefnmark :=G eval (\thempfn) +% endgroup +% \@footnotemark +% \@footnotetext{NOTE} +% END +% +% \footnote[NUM]{NOTE} == +% BEGIN +% begingroup +% \protect == \noexpand +% counter \@mpfn :=L NUM +% \@thefnmark :=G eval (\thempfn) +% endgroup +% \@footnotemark +% \@footnotetext{NOTE} +% END +% +% \footnotemark == +% BEGIN \stepcounter{footnote} +% begingroup +% \protect == \noexpand +% \@thefnmark :=G eval(\thefootnote) +% endgroup +% \@footnotemark +% END +% +% \footnotemark[NUM] == +% BEGIN +% begingroup +% footnote counter :=L NUM +% \protect == \noexpand +% \@thefnmark :=G eval(\thefootnote) +% endgroup +% \@footnotemark +% END +% +% \@footnotemark == +% BEGIN +% \leavevmode +% IF hmode THEN \@x@sf := \the\spacefactor FI +% \@makefnmark % put number in main text +% IF hmode THEN \spacefactor := \@x@sf FI +% END +% +% \footnotetext == +% BEGIN begingroup \protect == \noexpand +% \@thefnmark :=G eval (\thempfn) +% endgroup +% \@footnotetext +% END +% +% \footnotetext[NUM] == +% BEGIN begingroup counter \@mpfn :=L NUM +% \protect == \noexpand +% \@thefnmark :=G eval (\thempfn) +% endgroup +% \@footnotetext +% END +% +% \end{oldcomments} +% +% +% \changes{v1.1l}{1995/05/24}{Moved definition of \cs{footins} +% and \cs{footnoterule} from ltplain.} +% +% \begin{macro}{\footins} +% \LaTeX\ does use the same insert for footnotes as PLAIN. +% \begin{macrocode} +\newinsert\footins +% \end{macrocode} +% +% \LaTeX\ leaves these initializations for the |\footins| insert. +% +% \begin{macrocode} +\skip\footins=\bigskipamount % space added when footnote is present +\count\footins=1000 % footnote magnification factor (1 to 1) +\dimen\footins=8in % maximum footnotes per page +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\footnoterule} +% \LaTeX\ keeps PLAIN \TeX's |\footnoterule| as the default. +% +% \begin{macrocode} +\def\footnoterule{\kern-3\p@ + \hrule \@width 2in \kern 2.6\p@} % the \hrule is .4pt high +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\thefootnote} +% \changes{v1.1i}{1995/05/16}{Streamlined parts of code.} +% \begin{macrocode} +\@definecounter{footnote} +\def\thefootnote{\@arabic\c@footnote} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\thempfootnote} +% \changes{v1.1j}{1995/05/18}{Added \cs{itshape}.} +% \changes{v1.1v}{2002/10/01}{Use braces around \cs{itshape} +% to keep font change local (pr/3460).} +% The default display for the footnote counter in minipages is to +% use italic letters. We use |\itshape| not |\textit| as the latter +% would add an italic correction. +% \begin{macrocode} +\@definecounter{mpfootnote} +\def\thempfootnote{{\itshape\@alph\c@mpfootnote}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makefnmark} +% \changes{v1.1i}{1995/05/16}{Now use \cs{textsuperscript}.} +% \changes{v1.1j}{1995/05/18}{Added \cs{normalfont}.} +% \changes{v1.1k}{1995/05/20}{Moved \cs{normalfont} to +% \cs{textsuperscript}} +% \changes{v1.1k}{1995/05/20}{Moved \cs{normalfont} back +% and use \cs{@textsuperscript}} +% Default definition. +% \begin{macrocode} +%\def\@makefnmark{\hbox{$^{\@thefnmark}\m@th$}} +\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\textsuperscript} +% \changes{v1.1i}{1995/05/16}{Command added./pr1503} +% \changes{v1.1k}{1995/05/20}{Use \cs{normalfont}.} +% \changes{v1.1l}{1995/05/24}{Use \cs{@textsuperscript}} +% This command provides superscript characters in the current text +% font. It's implementation might change!!! +% \begin{macrocode} +\DeclareRobustCommand*\textsuperscript[1]{% + \@textsuperscript{\selectfont#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@textsuperscript} +% \changes{v1.1l}{1995/05/24}{Command added.} +% \changes{v1.1n}{1995/12/05}{Use \cs{ensuremath} for latex/1984.} +% \changes{v1.1m}{1995/12/07} +% {Move \cs{m@th} out of the \cs{ensuremath} for latex/1984.} +% This command should not be used directly, but may be used to define +% other commands |\textsuperscript|, |\@makefnmark|. |#1| should +% always start with a font selection command, to activate the font +% size switch. +% \begin{macrocode} +\def\@textsuperscript#1{% + {\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@#1}}}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\footnotesep} +% \begin{macrocode} +\newdimen\footnotesep +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\footnote} +% \changes{LaTeX2.09}{1991/11/01} +% {(RmS) Added \cs{let}\cs{protect}\cs{noexpand} in +% \cs{footnote}, \cs{footnotemark}, +% and \cs{footnotetext}, since \cs{xdef} is used} +% \changes{LaTeX2.09}{1991/11/22} +% {(RmS) Added \cs{let}\cs{protect}\cs{noexpand} in +% \cs{@xfootnote}, \cs{@xfootnotemark}, +% and \cs{@xfootnotetext}} +% \changes{LaTeX2.09}{1992/11/26} +% {(RmS) Changed all to +% `def`protect\string{`noexpand`protect`noexpand\string}} +% \changes{v1.1b}{1994/11/26} +% {(ASAJ) Added \cs{protected@xdef}.} +% +% \begin{macrocode} +\def\footnote{\@ifnextchar[\@xfootnote{\stepcounter\@mpfn + \protected@xdef\@thefnmark{\thempfn}% + \@footnotemark\@footnotetext}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xfootnote} +% \begin{macrocode} +\def\@xfootnote[#1]{% + \begingroup + \csname c@\@mpfn\endcsname #1\relax + \unrestored@protected@xdef\@thefnmark{\thempfn}% + \endgroup + \@footnotemark\@footnotetext} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@footnotetext} +% \changes{LaTeX2.09}{1991/09/29} +% {(RmS) added \cs{reset@font}} +% \changes{LaTeX2.09}{1992/11/26} +% {(RmS) added protection for \cs{edef}} +% \changes{v1.0a}{1994/03/07} +% {(DPC) Extra group for colour} +% \changes{v1.0c}{1994/03/14} +% {(DPC) Use \cs{color@begingroup}, add \cs{endgraf}} +% \changes{v1.0d}{1994/04/18} +% {(DPC) Remove Colour support} +% \changes{v1.0g}{1994/05/13} +% {(DPC) Add new style colour support: \cs{normalcolor}} +% \changes{v1.0g}{1994/05/13} +% {(DPC) Use \cs{@finalstrut}} +% \changes{v1.1a}{1994/10/31} +% {(DPC/CAR) Move colour setting to output routine} +% \changes{v1.1b}{1994/11/04} +% {(ASAJ) Added \cs{protected@edef}.} +% \changes{v1.1c}{1994/11/05} +% {Removed \cs{normalcolor} (again)} +% \changes{v1.1t}{1997/11/19} +% {Missing percent, again} +% \begin{macrocode} +\long\def\@footnotetext#1{\insert\footins{% + \reset@font\footnotesize + \interlinepenalty\interfootnotelinepenalty + \splittopskip\footnotesep + \splitmaxdepth \dp\strutbox \floatingpenalty \@MM + \hsize\columnwidth \@parboxrestore + \protected@edef\@currentlabel{% + \csname p@footnote\endcsname\@thefnmark + }% + \color@begingroup + \@makefntext{% + \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}% + \color@endgroup}}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\footnotemark} +% \changes{v1.1b}{1994/11/04}{Added \cs{protected@xdef} to +% \cs{footnotemark}.} +% \begin{macrocode} +\def\footnotemark{% + \@ifnextchar[\@xfootnotemark + {\stepcounter{footnote}% + \protected@xdef\@thefnmark{\thefootnote}% + \@footnotemark}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xfootnotemark} +% \begin{macrocode} +\def\@xfootnotemark[#1]{% + \begingroup + \c@footnote #1\relax + \unrestored@protected@xdef\@thefnmark{\thefootnote}% + \endgroup + \@footnotemark} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@footnotemark} +% \changes{v1.1h}{1995/05/12} +% {Add \cs{nobreak} to allow hyphenation. latex/1605} +% \begin{macrocode} +\def\@footnotemark{% + \leavevmode + \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi + \@makefnmark + \ifhmode\spacefactor\@x@sf\fi + \relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\footnotetext} +% \begin{macrocode} +\def\footnotetext{% + \@ifnextchar [\@xfootnotenext + {\protected@xdef\@thefnmark{\thempfn}% + \@footnotetext}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xfootnotenext} +% \begin{macrocode} +\def\@xfootnotenext[#1]{% + \begingroup + \csname c@\@mpfn\endcsname #1\relax + \unrestored@protected@xdef\@thefnmark{\thempfn}% + \endgroup + \@footnotetext} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\thempfn} +% \begin{macro}{\@mpfn} +% \begin{macrocode} +\def\@mpfn{footnote} +\def\thempfn{\thefootnote} +%</2ekernel> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltfntcmd.dtx b/Master/texmf-dist/source/latex/base/ltfntcmd.dtx new file mode 100644 index 00000000000..f6850793662 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltfntcmd.dtx @@ -0,0 +1,777 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%%% From File: ltfntcmd.dtx +%% +%<*driver> +% \fi +\ProvidesFile{ltfntcmd.dtx} + [2003/01/01 v3.3z LaTeX Kernel (Font commands)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltfntcmd.dtx} +\title{\filename} +\date{\filedate} +\author{Frank Mittelbach, Chris Rowley} +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{256} +% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \iffalse +% Copyright (C) 1994-1995 Frank Mittelbach and Chris Rowley +% all rights reserved. +% \fi +% +% \changes{v2.0b}{1993/05/05}{Removed all LaTeX related cmds} +% \changes{v3.0a}{1993/12/11}{Complete reworking of all text commands, +% using just one creator function} +% \changes{v3.0a}{1993/12/11}{newfontswitch command corrected and +% changed} +% \changes{v3.0a}{1993/12/11}{newcommands replaced by defs} +% \changes{v3.0a}{1993/12/11}{italic correction now put in front of +% penalty before glue} +% \changes{v3.0b}{1993/12/19}{\cs{@pdef} comand added} +% \changes{v3.0b}{1993/12/19}{Other tidying} +% \changes{v3.0b}{1993/12/19}{Made \cs{@newfontswitch} produce an +% error if command already exists, and added \cs{@renewfontswitch}, +% ASAJ} +% \changes{v3.0b}{1993/12/19}{Untidying added, so this is now a +% TEMPORARY version.} +% \changes{v3.0b}{1993/12/19}{Some more tidying done} +% \changes{v3.1b}{1994/01/31}{\cs{@normalsize} no longer defined} +% \changes{v3.2a}{1994/03/15}{Adapted to mass formatting} +% \changes{v3.2a}{1994/03/15}{Removed defs of short-forms and all +% sizes except \cs{normalize}} +% \changes{v3.2a}{1994/03/15}{Removed \cs{@renewfontswitch}} +% \changes{v3.2a}{1994/03/15}{Changed \cs{/} to \cs{@@italiccorr}} +% \changes{v3.2b}{1994/04/14}{Macros renamed to non-private forms, JB} +% \changes{v3.3a}{1994/04/20}{New implementation of \cs{\nocorr}} +% \changes{v3.3a}{1994/04/20}{Documentation up-dated} +% \changes{v3.3b}{1994/04/30}{Documentation up-dated and tidied} +% \changes{v3.3b}{1994/04/30}{Title changed} +% \changes{v3.3b}{1994/04/30}{Prefix frag@ changed to frag in +% \cs{@protecteddef}} +% \changes{v3.3b}{1994/04/30}{Warning changed to info message in +% \cs{@protecteddef}} +% \changes{v3.3c}{1994/05/05}{Corrected \cs{@fontswitch}} +% \changes{v3.3d}{1994/05/08}{Removed \cs{@undefinedfonterror}} +% \changes{v3.3f}{1994/05/09}{Replaced all \cs{next} by +% \cs{@let@token} and undo change 3.3e, +% whatever that was.} +% \changes{v3.3g}{1994/05/13}{Replaced \cs{@protecteddef} by +% \cs{DeclareRobustCommand}} +% \changes{v3.3h}{1994/05/20}{Use new error commands} +% \changes{v3.3i}{1994/05/24}{Tidying and typos fixed} +% \changes{v3.3j}{1994/05/25}{Insertion of \cs{aftergroup}s to +% implement \cs{nocorr} moved to the end of the group} +% \changes{v3.3k}{1994/06/09}{Tidying and typos fixed in documentation} +% \changes{v3.3l}{1994/06/18}{Added check for empty text} +% \changes{v3.3m}{1994/06/22}{Removed space from \cs{nfss@text}} +% \changes{v3.3m}{1994/06/22}{Renamed \cs{check@nocorr}} +% \changes{v3.3p}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% \changes{v3.3v}{1997/06/16}{Fix typo in documentation.} +% \changes{v3.3x}{1998/08/17}{(RmS) Minor documentation fixes.} +% +% \def \ie {i.e.~} +% \def \eg {e.g.~} +% +% \def \dst {{\normalfont\scshape docstrip}} +% \def \NFSS {\textsf{NFSS}} +% +% +% \begin{abstract} +% The commands defined in this file \texttt{ltfntcmd} are +% part of the kernel code for \LaTeXe/NFSS2. +% +% It is also meant to serve as documentation for package writers since +% it demonstrates how to define high-level font changing commands +% using a small number of creator functions. +% \end{abstract} +% +% \section{Introduction} +% +% Font changes such as |\bfseries|, |\sffamily|, etc.\ are +% declarations; this means that their scope is delimited by the +% grouping structure, either by the next |\end| of some environment or +% by explicitly using a group, e.g., writing something like +% |{\bfseries...}| in the source. If you make the mistake of writing +% |\bfseries{...}| (thinking of |\bfseries| as a command with one +% argument) then the result is rather striking. +% +% Font declarations are an artifact of the \TeX{} system and for +% several reasons it is better to avoid them on the user level +% whenever possible. In \LaTeX3 they will probably all be +% replaced by environments and by font commands taking one argument. +% +% This file defines a creator function for such declarative font +% switches. This function creates commands which can be used in +% both math and text. +% +% This file also defines a number of high-level commands (all +% starting with |\text..|) that have one argument and typeset this +% argument in the requested way. Thus these commands are for +% typesetting short pieces of text in a specific family, series or +% shape. These are all produced as examples of the use of a creator +% function which is itself also defined in this file. +% +% Table~\ref{tab:fontcmds} shows all these high-level commands in +% action. A further advantage of using these commands is that they +% automatically take care of any necessary italic correction on either +% side of their argument. +% \begin{table}[t] +% \begin{center} +% \begin{tabular}{lll} +% \textit{Command} & \textit{Corresponds to }& \textit{Action} \\[4pt] +% |\textrm{..}| & |\rmfamily| & +% Typeset argument in roman family \\ +% |\textsf{..}| & |\sffamily| & +% Typeset argument in \textsf{sans serif} family \\ +% |\texttt{..}| & |\ttfamily| & +% Typeset argument in \texttt{typewriter} family +% \\[2pt] +% |\textmd{..}| & |\mdseries| & +% Typeset argument in medium series \\ +% |\textbf{..}| & |\bfseries| & +% Typeset argument in \textbf{bold} series \\[2pt] +% |\textup{..}| & |\upshape| & +% Typeset argument in normal shape \\ +% |\textit{..}| & |\itshape| & +% Typeset argument in \textit{italic} shape \\ +% |\textsl{..}| & |\slshape| & +% Typeset argument in \textsl{slanted} shape \\ +% |\textsc{..}| & |\scshape| & +% Typeset argument in \textsc{small caps} shape +% \\[2pt] +% |\emph{..}| & |\em| & +% Typeset argument \emph{emphasized} +% \end{tabular} +% \end{center} +% \caption{Font-change commands with arguments} +% \label{tab:fontcmds} +% \begin{quote} +% The font change commands provided here +% all start with |\text..| to emphasize that they +% are for use in normal text and to be easily memorable. They +% automatically take care of any necessary italic correction on either +% side of the argument. +% \end{quote} +% \end{table} +% +% Thus, when using such commands, one does not have to worry about +% forgetting the italic correction when changing fonts. Only in very +% few situations is this additional space wrong but, for example, most +% typographers recommend omitting the italic correction if a small +% punctuation character, like a comma, directly follows the font +% change. Since the amount of correction required is partly a matter +% of taste, you can define in what situations the italic correction +% should be suppressed. This is done by putting the characters that +% should cancel a preceding italic correction in the list +% |\nocorrlist|.\footnote{Any package that changes the +% \texttt{\string\catcode} of a character inside +% \texttt{\string\nocorrlist} must then explicitly reset the list. +% Otherwise the changed character will no longer be recognized +% by the suppression algorithm.} +% The default definition for this list is produced by the following. +% \begin{verbatim} +% \newcommand \nocorrlist {,.} +% \end{verbatim} +% It is best to declare the most often used characters first, because +% this will make the processing slightly faster. For example, +% \begin{verbatim} +% \emph{When using the \NFSS{} high-level commands, +% the \emph{proper} use of italic corrections is +% automatically taken care of}. Only +% \emph{sometimes} one has to help \LaTeX{} by +% adding a \verb=\nocorr= command. +% \end{verbatim} +% which results in: +% \begin{quote} +% \emph{When using the \NFSS{} high-level commands, +% the \emph{proper} use of italic corrections is +% automatically taken care of}. Only +% \emph{sometimes} one has to help \LaTeX{} by +% adding a \verb=\nocorr= command. +% \end{quote} +% +% In contrast, the use of the declaration forms is often more +% appropriate when you define your own commands or environments. +% \begin{verbatim} +% \newenvironment{bfitemize}{\begin{itemize}\normalfont\bfseries} +% {\end{itemize}} +% \begin{bfitemize} +% \item This environment produces boldface items. +% \item It is defined in terms of \LaTeX's +% \texttt{itemize} environment and NFSS +% declarations. +% \end{bfitemize} +% \end{verbatim} +% This gives: +% \begin{quote} +% \newenvironment{bfitemize} +% {\begin{itemize}\normalfont\bfseries} +% {\end{itemize}} +% \begin{bfitemize} +% \item This environment produces boldface items. +% \item It is defined in terms of \LaTeX's +% \texttt{itemize} environment and NFSS +% declarations. +% \end{bfitemize} +% \end{quote} +% +% In addition to global customization of when to insert the italic +% correction, it is of course sometimes necessary to explicitly insert +% one with |\/|. +% +% It is also possible to suppress the italic correction +% in individual instances. For this, the command |\nocorr| is provided. +% +% The |\nocorr| must appear as the first or last token inside the +% braces of the argument of the |\text...| commands, at that end of +% the text where you wish to suppress the italic correction. +% +% +% It is worth pointing out here that inserting a |\/| in places where +% it can have no function (\ie anywhere except immediately after a +% slanted letter) is not an error---it will just be silently ignored. +% Unfortunately this is not true if the redefinition of |\/| in {\tt +% amstex.sty} is used as this version can cause space to be removed +% immediately before the |\/|. +% +% \StopEventually{} +% +% +% \section{The implementation} +% +% \changes{v3.3z}{2003/01/01}{Code checked and documentation extended +% by Chris} +% +% \begin{macro}{\DeclareTextFontCommand} +% \changes{v3.0a}{1993/12/11}{Macro changed} +% \changes{v3.0a}{1993/12/11}{Macro changed} +% This is the creator function for |\text..| commands. +% It gives a warning if |\foo| or |\fragfoo| is already defined. +% \changes{v3.0b}{1993/12/19}{Corrected and tidied} +% +% In math mode it simply puts the font declaration and text into a +% box (possibly an automagically sized one). +% +% Otherwise it first scans the text to see where |\nocorr| occurs +% within it. This sets the |\check@ic| commands to do what is +% necessary concerning the italic correction at both ends. +% +% The algorithm for deciding whether to put in an italic correction +% is not very subtle: one is added whenever the newly current font +% is not itself positively sloped, unless the next token is a +% character in the `nocorr' list. At the end of the text this +% is done after closing the group so as to check the `outer font'. +% Note that this +% will often result in adding an italic correction token after a +% character in an unsloped font; we believe (in early 2003) that +% this is perhaps inefficient but not dangerous. +% +% It also now checks for empty contents of the text command and optimises +% this case. Some care is also taken to check that doing dangerous +% things in vertical mode is avoided. +% +% The italic correction token is added to the horizontal list +% before (in the list) an immediately prceding non-zero glob of +% glue (skip) and any non-zero penalty preceding that since, in +% the typical case, this puts it immediately +% after the last character in the preceding word. +% +% +% \changes{v3.3j}{1994/05/25}{Insertion of \cs{aftergroup}s moved} +% \changes{v3.3j}{1994/05/25}{\cs{expandafter} inserted} +% \changes{v3.3m}{1994/06/22}{Removed space from \cs{nfss@text}} +% \changes{v3.3u}{1996/10/08}{Removed \cs{check@icr} when in vmode +% since it causes various errors (see pr/2157)} +% \changes{v3.3w}{1997/10/17}{Reinstalled \cs{check@icr} as check is +% now done in \cs{check@nocorr@} (see PR/2646).} +% \changes{v3.3y}{2000/01/30}{Use \cs{hmode@bgroup} now (pr/3160)} +% +% Note that it is necessary to put in the |\aftergroup\maybe@ic| at +% the end of the group so that it comes after any other aftergroup +% tokens and immediately before the following tokens. +% It is also necessary to remove the |\fi| from the token list before +% the group ends; this is done by adding an |\expandafter| just +% before the closing brace. +% +% \begin{macrocode} +%<*2ekernel> +\def \DeclareTextFontCommand #1#2{% + \DeclareRobustCommand#1[1]{% + \ifmmode + \nfss@text{#2##1}% + \else + \hmode@bgroup + \text@command{##1}% + #2\check@icl ##1\check@icr + \expandafter + \egroup + \fi + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\textrm} +% \begin{macro}{\textsf} +% \begin{macro}{\texttt} +% \begin{macro}{\textnormal} +% Now we define the |\text|\meta{family} commands in terms of the +% above; |\texttt| does not look very nice! +% \begin{macrocode} +\DeclareTextFontCommand{\textrm}{\rmfamily} +\DeclareTextFontCommand{\textsf}{\sffamily} +\DeclareTextFontCommand{\texttt}{\ttfamily} +\DeclareTextFontCommand{\textnormal}{\normalfont} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\textbf} +% \begin{macro}{\textmd} +% For the series attribute: +% \begin{macrocode} +\DeclareTextFontCommand{\textbf}{\bfseries} +\DeclareTextFontCommand{\textmd}{\mdseries} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\textit} +% \begin{macro}{\textsl} +% \begin{macro}{\textsc} +% \begin{macro}{\textup} +% \changes{v3.0a}{1993/12/11}{Macros changed} +% And for the shapes: +% \begin{macrocode} +\DeclareTextFontCommand{\textit}{\itshape} +\DeclareTextFontCommand{\textsl}{\slshape} +\DeclareTextFontCommand{\textsc}{\scshape} +\DeclareTextFontCommand{\textup}{\upshape} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\emph} +% \changes{v3.0a}{1993/12/11}{Macro changed} +% Finally we have the |\em| font change declaration of \LaTeX. The +% corresponding definition with argument is +% \begin{macrocode} +\DeclareTextFontCommand{\emph}{\em} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\nocorr} +% This is just a label, so it does nothing; it should also be +% unexpandable. +% \begin{macrocode} +\let \nocorr \relax +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\check@icl} +% \begin{macro}{\check@icr} +% \changes{v3.3j}{1994/05/25}{Macros added} +% \changes{v3.3t}{1996/05/09}{Default definitions added} +% We define these defaults in case some error causes them to be +% expanded at the wrong time. +% \begin{macrocode} +\let \check@icl \@empty +\let \check@icr \@empty +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\text@command} +% \begin{macro}{\check@nocorr@} +% \changes{v3.3a}{1994/04/20}{Macros added} +% \changes{v3.3m}{1994/06/22}{Renamed \cs{check@nocorr} to +% \cs{text@command} to improve \cs{long} error message} +% \changes{v3.3j}{1994/05/25}{Insertion of \cs{aftergroup}s moved +% and defaults set up for efficiency} +% This checks for a |\nocorr| as the first token in its argument +% and also for one in any other position not protected within +% braces (the latter is treated as if it were at the end of the +% argument). +% +% Is this the correct action in the `empty' case? It is efficient but +% typographically it is, strictly, incorrect! +% \changes{v3.3l}{1994/06/18}{Added check for empty text} +% \begin{macrocode} +\def \text@command #1{% + \def \reserved@a {#1}% + \ifx \reserved@a \@empty + \let \check@icl \@empty + \let \check@icr \@empty + \else +% \end{macrocode} +% |\space| is a reserved word in \LaTeX{} or actually already in +% plain \TeX. If somebody really redefines it so many things will +% break that I don't see any reason to make this routine here +% slower than necessary. +% \changes{v3.3q}{1994/12/10}{Use \cs{space} command for comparison} +% \begin{macrocode} +% \def \reserved@b { }% +% \ifx \reserved@a \reserved@b + \ifx \reserved@a \space + \let \check@icl \@empty + \let \check@icr \@empty + \else + \check@nocorr@ #1\nocorr\@nil + \fi + \fi +} +\def \check@nocorr@ #1#2\nocorr#3\@nil {% +% \end{macrocode} +% The two checks are initialised here to their values in +% the normal case. +% \changes{v3.3w}{1997/10/17}{Check for vertical mode moved here, from +% \cs{DeclareTextFontCommand} (see PR/2646).} +% \begin{macrocode} + \let \check@icl \maybe@ic + \def \check@icr {\ifvmode \else \aftergroup \maybe@ic \fi}% + \def \reserved@a {\nocorr}% + \def \reserved@b {#1}% + \def \reserved@c {#3}% + \ifx \reserved@a \reserved@b + \ifx \reserved@c \@empty +% \end{macrocode} +% In this case there is a |\nocorr| at the start but not at the +% end, so |\check@icl| should be empty. +% \begin{macrocode} + \let \check@icl \@empty + \else +% \end{macrocode} +% Otherwise there is a |\nocorr| both at the start and +% elsewhere, so no italic corrections should be added. +% \begin{macrocode} + \let \check@icl \@empty + \let \check@icr \@empty + \fi + \else + \ifx \reserved@c \@empty +% \end{macrocode} +% In this case there is no |\nocorr| anywhere, so we need to check +% for an italic correction at both the beginning and the end. This +% has been set up as the default so no code is needed here. +% \begin{macrocode} + \else +% \end{macrocode} +% In this case there is no |\nocorr| at the start but there is one +% elsewhere, so no |\aftergroup| is needed. +% \begin{macrocode} + \let \check@icr \@empty + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\maybe@ic} +% \changes{v3.0a}{1993/12/11}{Macro name changed} +% \begin{macro}{\maybe@ic@} +% \changes{v3.0a}{1993/12/11}{Macro and name changed} +% \task{CAR}{Make this more efficient by checking for non-characters +% first and using \cs{if} test?} +% These macros implement the italic correction. +% \begin{macrocode} +\def \maybe@ic {\futurelet\@let@token\maybe@ic@} +\def \maybe@ic@ {% +% \end{macrocode} +% We first check to see if the current font is positively sloped. +% (But do not forget the message Rainer sent about an upright font +% with non-zero slope! Or is this an urban myth?) It has been +% suggested that this should test against a small positive value, +% but what? +% \begin{macrocode} + \ifdim \fontdimen\@ne\font>\z@ + \else + \@tempswatrue +% \end{macrocode} +% It would be possible, but probably not worthwhile, to continue the +% forward scan beyond any closing braces. +% +% \changes{v3.3a}{1994/04/20}{\cs{nocorr} etc removed from list of +% tokens to check, leaving only punctuation characters} +% \begin{macrocode} + \expandafter\@tfor\expandafter\reserved@a\expandafter:\expandafter=% + \nocorrlist +% \end{macrocode} +% We have to hide the |\@let@token| in the macro |\t@st@ic| rather +% than testing it directly in the loop since it might be |\let| +% to a |\fi| or |\else|, which would result in chaos. +% \changes{v2.1a}{1993/11/24}{Use \cs{t@st@ic}} +% \begin{macrocode} + \do \t@st@ic +% \end{macrocode} +% Frank thinks that the next bit it is inefficient if done after +% the second change. Chris thinks that most all of this is +% inefficient for the commonest cases: but that is the price of a +% cleverer algorithm. It is certainly needed to deal with the use +% of |\nolinebreak|. +% +% \begin{macrocode} + \if@tempswa \sw@slant \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\t@st@ic} +% \changes{v2.1a}{1993/11/24}{Macro added} +% \changes{v3.3s}{1995/07/05}{Renamed from \cs{test@next}} +% The next token in the input stream is stored in |\@let@token| via a +% |\let|, the current token from |\nocorrlist| is stored via |\def| +% in |\reserved@a|. To compare them we have to fiddle around a bit. +% +% If the only things to check were characters then this could be +% done via an |\if| thus their catcodes would not matter; but this +% will not work whilst |\futurelet| is used above. +% \begin{macrocode} +\def \t@st@ic {% + \expandafter\let\expandafter\reserved@b\expandafter=\reserved@a\relax + \ifx\reserved@b\@let@token +% \end{macrocode} +% If they are the same we record the fact and jump out of the loop. +% \changes{v3.3s}{1995/07/03}{Use clean interface for jump} +% \begin{macrocode} + \@tempswafalse + \@break@tfor + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\sw@slant} +% \changes{v3.0a}{1993/12/11}{Macro changed} +% \begin{macro}{\fix@penalty} +% \changes{v3.0a}{1993/12/11}{Macro added} +% The definition of the mysterious |\sw@slant| command is as follows. +% \begin{macrocode} +\def \sw@slant {% +% \end{macrocode} +% It is surely correct to put in an italic correction when there +% is no skip. If the last thing on the list is actually a zero +% skip (including things whose dimension part is zero, such as +% |\hfill|), or anything other than a character, then the +% italic correction will have no effect. +% +% In order to work correctly with unbreakable spaces from |~| +% (and other common forms of line-breaking control) we also move +% back across a penalty before the glue. +% \begin{macrocode} + \ifdim \lastskip=\z@ + \fix@penalty + \else + \skip@ \lastskip + \unskip + \fix@penalty + \hskip \skip@ + \fi +} +% \end{macrocode} +% The above code means: ``If there is a non-zero space just before +% the current position (|\ifdim...|) save the amount of that space +% (|\skip@\lastskip|), remove it (|\unskip|), then do a similar +% thing if there is a penalty just before the skip, +% and finally put the space back in.'' +% +% Since zero glue cannot be distinguished in this context from no +% glue, we dare not put in an |\hskip| in this case as this may +% produce an unwanted breakpoint. This is not satisfactory. +% +% The penalty before the glue is handled similarly, with the same +% caveats concerning the zero case. Is this the first recorded +% use of |\unpenalty| in standard \LaTeX{} code? +% \begin{macrocode} +\def \fix@penalty {% + \ifnum \lastpenalty=\z@ + \@@italiccorr + \else + \count@ \lastpenalty + \unpenalty + \@@italiccorr + \penalty \count@ + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\nocorrlist} +% This holds the list of characters that should prevent italic +% correction. They should be ordered by decreasing frequency of +% use. If any such character is made active later on one needs +% to redefine the list so that the active character becomes part +% of it. +% \changes{v3.1a}{1994/01/27}{Only ., used as default for cm fonts} +% \begin{macrocode} +\def \nocorrlist {,.} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\nfss@text} +% This command will by default behave like a \LaTeX{} |\mbox| but +% may be redefined by packages such as |amstext.sty| to be a bit +% cleverer. +% \begin{macrocode} +\ifx \nfss@text\@undefined + \def \nfss@text {\leavevmode\hbox} +\fi +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\DeclareOldFontCommand} +% \changes{v3.2b}{1994/04/14}{Renamed from \cs{@newfontswitch}} +% This is the function used to create declarative font-changing +% commands that can also be used to change alphabets in math-mode. +% +% Usage: |\DeclareOldFontCommand \fn{|\meta{font-change decls}|}| +% \meta{math-alphabet} +% +% Here |\fn| is the font-declaration command being defined, +% \meta{font-change decls} is the declaration it will expand to in +% text-mode, and \meta{math-alphabet} is the (single) math alphabet +% specifier which is to be used in math-mode. +% +% It does not care whether the command being defined already +% exists but it does give a warning if it redefines anything. +% +% Here are some typical examples of its use in conjunction with +% more basic NFSS2 font commands. +% \begin{verbatim} +% \DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +% \DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +% \DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +% \end{verbatim} +% +% \changes{v3.0b}{1993/12/19}{Corrected and tidied} +% \begin{macrocode} +\def \DeclareOldFontCommand #1#2#3{% + \DeclareRobustCommand #1{\@fontswitch {#2}{#3}}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@fontswitch} +% \begin{macro}{\@@math@egroup} +% \begin{macro}{\@@math@egroup} +% These two commands actually do the necessary tests and +% declarative \mbox{font-} or alphabet-changing. +% +% \changes{v3.3c}{1994/05/05}{Corrected \cs{@fontswitch} and added +% saved versions} +% \changes{v3.3q}{1994/12/10}{Don't read arguments} +% \changes{v3.3r}{1995/04/02}{Read them again to be able to add \cs{relax}.} +% \begin{macrocode} +\def \@fontswitch #1#2{% + \ifmmode + \let \math@bgroup \relax + \def \math@egroup {\let \math@bgroup \@@math@bgroup + \let \math@egroup \@@math@egroup}% +% \end{macrocode} +% We need to have a |\relax| in the following line in case the |#2| +% is something like |\mathsf| grabbing the next token as an +% argument. For this reason the code also uses explicit arguments +% again (see pr/1275). +% \begin{macrocode} + #2\relax + \else + #1% + \fi +} +\let \@@math@bgroup \math@bgroup +\let \@@math@egroup \math@egroup +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \changes{v2.1b}{1993/12/08}{Macros \cs{rm}, \cs{bf} and \cs{sf} +% moved to classes.dtx} +% +% These commands are available only in the preamble. +% \begin{macrocode} +\@onlypreamble \DeclareTextFontCommand +\@onlypreamble \DeclareOldFontCommand +% \end{macrocode} +% +% \section{Initialization} +% \changes{v3.0b}{1993/12/19}{Added by ASAJ.} +% \changes{v3.0b}{1993/12/19}{Wording changes by CAR.} +% +% \begin{macro}{\normalsize} +% \changes{v3.3d}{1994/05/08}{Removed \cs{@undefinedfonterror}} +% \changes{v3.3o}{1994/11/12}{Added \cs{MessageBreak}} +% This is defined to produce an error. +% \begin{macrocode} +\def\normalsize{% + \@latex@error {The font size command \protect\normalsize\space + is not defined:\MessageBreak + there is probably something wrong with + the class file}\@eha +} +%</2ekernel> +% \end{macrocode} +% \end{macro} +% +% \Finale +\endinput diff --git a/Master/texmf-dist/source/latex/base/ltfssbas.dtx b/Master/texmf-dist/source/latex/base/ltfssbas.dtx new file mode 100644 index 00000000000..4adafd0cea4 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltfssbas.dtx @@ -0,0 +1,1910 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%%% From File: ltfssbas.dtx +%% Copyright (C) 1989-2002 Frank Mittelbach and Rainer Sch\"opf +% +%<def1>\ProvidesFile{autofss1.sty} +%<def1> [2002/10/02 v3.0x NFSS autoload file 1] +%<def2>\ProvidesFile{autofss2.sty} +%<def2> [2002/10/02 v3.0x NFSS autoload file 2] +% +%<*driver> +% \fi +% +% +\ProvidesFile{ltfssbas.dtx} + [2002/10/02 v3.0x LaTeX Kernel (NFSS Basic Macros)] +% \iffalse +\documentclass{ltxdoc} +\begin{document} +\DocInput{ltfssbas.dtx} +\end{document} +%</driver> +% \fi +% +% \iffalse +%<+checkmem>\def\CHECKMEM{\tracingstats=2 +%<+checkmem> \newlinechar=`\^^J +%<+checkmem> \message{^^JMemory usage: \filename}\shipout\hbox{}} +%<+checkmem>\CHECKMEM +% \fi +% +% \CheckSum{1089} +% +% +% \GetFileInfo{ltfssbas.dtx} +% \title{A new font selection scheme for \TeX{} macro packages\\ +% (Basic Macros)\thanks +% {This file has version number +% \fileversion\ dated \filedate}} +% +% \author{Frank Mittelbach \and Rainer Sch\"opf} +% +% \maketitle +% +% This file contains the main implementation of the `low level' font +% selection commands. See other parts of the \LaTeX\ +% distribution, or \emph{The \LaTeX\ Companion} for higher level +% documentation of the \LaTeX\ `New' Font Selection Scheme. +% +% \begin{quote} +% \textbf{Warning:} +% The macro documentation is still basically the documentation from the +% first NFSS release and therefore in some cases probably not +% completely accurate. +% \end{quote} +% +% \StopEventually{} +% +% \changes{v3.0v}{1998/08/17}{(RmS) Documentation fixes.} +% \changes{v3.0j}{1995/10/22}{(RmS) New size function macro +% \cs{genb@sfcnt} needs to be disabled at \cs{document}.} +% \changes{v3.0i}{1995/10/20} +% {(DPC) Modify autoload code, change \cs{undefined}} +% \changes{v3.0g}{1995/10/04}{Modify autoload code} +% \changes{v3.0f}{1995/08/24}{Added autoload code} +% \changes{v3.0d}{1995/07/13} +% {minor documentation changes} +% \changes{v3.0c}{1995/06/15} +% {(DPC) minor documentation changes} +% \changes{v3.0a}{1995/05/24} +% {(DPC) Make file from previous file, fam.dtx 1995/05/20 v2.2d} +% +% +% \changes{v2.1x}{1994/11/18}{(DPC) use \cs{reserved@f} not \cs{next}} +% \changes{v2.1q}{1994/05/20}{Use new error commands} +% \changes{v2.1o}{1994/05/15}{encoding cmds changed to {enc}-cmd} +% \changes{v2.1k}{1994/05/13}{Remove File identification `typeout'} +% \changes{v2.1j}{1994/05/12}{New baselinestretch concept} +% \changes{v2.1j}{1994/05/12}{Replaced hand-protected commands by +% \cs{DeclareRobustCommand} defs} +% \changes{v2.1h}{1994/04/11}{Added \cs{defaultscriptratio} and +% \cs{defaultscriptscriptratio}. ASAJ.} +% \changes{v2.1g}{1994/03/13}{add 2ekernel module to omit repeated code} +% \changes{v2.1a}{1994/01/17}{New math font setup} +% \changes{v2.0c}{1993/03/18}{Changed all \cs{@tempdima} in +% \cs{@tempdimb} to avoid killing \cs{numberline}} +% \changes{v1.91a}{1992/09/22}{Introduced \cs{tf@size} for math size.} +% \changes{v1.3a}{1991/11/27}{All \cs{family}, \cs{shape} etc. +% renamed to \cs{fontfamily} etc.} +% \changes{v1.2i}{1990/04/01}{Code added from tracefnt.dtx.} +% \changes{v1.2i}{1990/04/01}{Support for TeX3.} +% \changes{v1.2g}{1990/02/16}{Support for changes of \cs{baselineskip} +% without changing the size.} +% +% \changes{v1.2c}{1990/01/23}{\cs{no@version@warning} renamed to +% \cs{no@alphabet@error}.} +% \changes{v1.0s}{1989/11/25}{All \cs{edef}\cs{font@name} changed to +% \cs{xdef}\cs{font@name}. +% Necessary after introduction of +% \cs{begingroup}/\cs{endgroup} in v1.0q.} +% \changes{v1.0s}{1989/11/25}{extra// $\to$ + in \cs{extra@def}.} +% \changes{v1.0o}{1989/11/08}{First parameter of +% \cs{define@mathalphabet} +% and \cs{define@mathgroup} changed +% from string to control sequence.} +% \changes{v1.0m}{1989/09/14} +% {Global replacement: \cs{group} to \cs{mathgroup}} +% \changes{v1.0k}{1989/05/22}{Lines longer than 72 characters folded.} +% \changes{v1.0j}{1989/05/01}{Default for \cs{baselinestretch} added.} +% \changes{v1.0i}{1989/04/29} +% {Removed the \cs{halign} \cs{noalign} correction +% (wasn't bugfree)} +% \changes{v1.0h}{1989/04/29}{Documented problem with \cs{halign}, and +% \cs{noalign}} +% \changes{v1.0g}{1989/04/27}{Documentation revised.} +% \changes{v1.0f}{1989/04/23}{\% in \cs{getanddefinefonts} added.} +% \changes{v1.0e}{1989/04/21}{Documentation is fun!! +% Parameters of \cs{define@mathalphabet} changed.} +% \changes{v1.0d}{1989/04/19}{Even more doc.} +% \changes{v1.0c}{1989/04/14}{More documentation added.} +% \changes{v1.0b}{1989/04/10}{\cs{preload@sizes} added.} +% \changes{v1.0b}{1989/04/10}{\cs{wrong@fontshape} changed to define +% substitution font/shape macro.} +% \changes{v1.0a}{1989/04/10}{Starting with version numbers!! +% \cs{ifmmode} added in \cs{math@group}} +% \changes{v2.1w}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% +% +% \section{Autoloading parts of NFSS} +% +% This code is set up in a way that some parts of it can be kept +% separate and will only be loaded if needed. +% +% If we are producing an autoload version of \LaTeXe{} then all those +% parts with \textsf{def1} or \textsf{def2} docstrip guards will be +% placed into the autoloadable files \texttt{autofss1.sty} and +% \texttt{autofss2.sty}. +% +% The `2ekernel' code ensures that a |\usepackage{autofss1}| is +% essentially ignored if a `full' format is being used that has +% picture mode already in the format. +% +% Note the |autofss2| loading is currently disabled. +% +% \begin{macrocode} +%<2ekernel>\expandafter\let\csname ver@autofss1.sty\endcsname\fmtversion +% \end{macrocode} +% +% The autoload file \texttt{autofss2} is a specialty because it +% contains +% code which will be completely local, ie loaded every time again. +% +% \section{Preliminary macros} +% +% We define a number +% of macros that will be used later. +% +% +% \begin{macro}{\@nomath} +% |\@nomath| is used by most macros that will have no effect +% in math mode. It issues a warning message. +% \begin{macrocode} +%<*2ekernel|autoload> +\def\@nomath#1{\relax\ifmmode + \@font@warning{Command \noexpand#1invalid in math mode}\fi} +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% \changes{v1.2c}{1990/01/23}{Macro \cs{no@alphabet@help} added} +% \changes{v2.1i}{1994/04/18}{Macro \cs{no@alphabet@help} +% removed again} +% +% \begin{macro}{\no@alphabet@error} +% \changes{v1.2c}{1990/01/23}{Changed to error call} +% \changes{v2.1i}{1994/04/18}{Use std LaTeX error macro} +% The macro |\no@alphabet@error| is called whenever +% the user requests a math \emph{alphabet} that is not +% available in the current \emph{version}. +% In math mode an error message is produced otherwise the command +% keeps silent. +% The argument is the name of the control sequence that identifies +% the math \emph{alphabet}. +% The |\relax| at the beginning is necessary to prevent +% \TeX{} from scanning too far in certain situations. +% \begin{macrocode} +%<*2ekernel|def1> +\gdef\no@alphabet@error#1{\relax \ifmmode + \@latex@error{Math\space alphabet\space identifier\space + \noexpand#1is\space undefined\space in\space math\space + version\space `\math@version'}% + {Your\space requested\space math\space alphabet\space + is\space undefined\space in\space the\space current\space + math\space version.^^JCheck\space the\space spelling\space + or\space use\space the\space \noexpand\SetMathAlphabet\space + command.} + \fi} +%</2ekernel|def1> +%<*autoload> +\gdef\no@alphabet@error{\relax \ifmmode + \expandafter\try@sizes\expandafter\no@alphabet@error \fi} +%</autoload> +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\new@mathgroup} +% \begin{macro}{\mathgroup} +% We also give a new name to |\newfam| and |\fam| +% to avoid verbal confusion +% (see the introduction).\footnote{For the same reason +% it seems advisable to +% {\ttfamily\bslash let\bslash fam} and +% {\ttfamily\bslash newfam} +% equal to {\ttfamily\bslash relax}, +% but this is commented out to retain +% compatibility to existing style files.} +% \changes{v1.2e}{1990/01/28}{\cs{newfam} let to \cs{new@mathgroup}.} +% \changes{v3.0a}{1995/05/24} +% {(DPC) No need to redefine \cs{newfam} as not outer} +% \changes{v3.0b}{1995/05/27} +% {(FMi) But a need to define \cs{new@mathgroup}} +% \begin{macrocode} +%<*2ekernel|autoload> +\def\new@mathgroup{\alloc@8\mathgroup\chardef\sixt@@n} +\let\mathgroup\fam +\let\newfam\new@mathgroup +\@onlypreamble\new@mathgroup +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \section{Macros for setting up the tables} +% +% \begin{macro}{\DeclareFontShape} +% +% \changes{v1.9a}{1992/07/26}{Introduced \cs{DeclareFontShape}} +% The macro |\DeclareFontShape| takes $6$ arguments: +% \begin{macrocode} +\def\DeclareFontShape{\begingroup +% \end{macrocode} +% First we restore the catcodes of all characters used in the syntax. +% \changes{v2.1e}{1994/02/24} +% {Separate restoration of catcodes for fd cmds} +% \begin{macrocode} + \nfss@catcodes +% \end{macrocode} +% We use |\expandafter| |\endgroup| to restore catcode in case +% something goes wrong with the argument parsing (suggested by Tim +% Van Zandt) +% \end{macro} +% +% +% +% \begin{macro}{\DeclareFontShape} +% \changes{v2.1c}{1994/02/07}{revert catcode settings earlier} +% \changes{v3.0m}{1995/11/01} +% {(DPC) Test for \cs{relax} not \cs{undefined}, internal/1933} +% \begin{macrocode} + \expandafter\endgroup + \DeclareFontShape@} +\def\DeclareFontShape@#1#2#3#4#5#6{% + \expandafter\ifx\csname #1+#2\endcsname\relax + \@latex@error{Font family `#1+#2' unknown}\@eha + \else + \expandafter + \xdef\csname#1/#2/#3/#4\endcsname{\expandafter\noexpand + \csname #5\endcsname}% + \def\reserved@a{#6}% + \global + \expandafter\let\csname#5\expandafter\endcsname + \ifx\reserved@a\@empty + \@empty + \else + \reserved@a + \fi + \fi + } +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\DeclareFixedFont} +% Define a direct font switch that avoids all overhead. +% \changes{v2.1u}{1994/11/06}{Renamed +% \cs{every@size} to \cs{every@math@size}.} +% \begin{macrocode} +\def\DeclareFixedFont#1#2#3#4#5#6{% + \begingroup + \math@fontsfalse + \every@math@size{}% + \fontsize{#6}\z@ + \usefont{#2}{#3}{#4}{#5}% + \global\expandafter\let\expandafter#1\the\font + \endgroup + } +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% +% +% +% \begin{macro}{\do@subst@correction} +% +% \begin{macrocode} +%<*2ekernel|autoload> +\def\do@subst@correction{% + \xdef\subst@correction{% + \font@name + \global\expandafter\font + \csname \curr@fontshape/\f@size\endcsname + \noexpand\fontname\font + \relax}% +% \end{macrocode} +% Calling |\subst@correction| after the current group means calling +% it after we have loaded the substitution font which is done +% inside a group. +% \begin{macrocode} + \aftergroup\subst@correction +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DeclareFontFamily} +% \begin{macrocode} +\def\DeclareFontFamily#1#2#3{% +% \end{macrocode} +% If we want fast checking for the encoding scheme we can just +% check for |\T@..| being defined. +% \begin{macrocode} +% \@tempswafalse +% \def\reserved@b{#1}% +% \def\cdp@elt##1##2##3##4{\def\reserved@c{##1}% +% \ifx\reserved@b\reserved@c \@tempswatrue\fi}% +% \cdp@list +% \if@tempswa + \@ifundefined{T@#1}% + {% + \@latex@error{Encoding scheme `#1' unknown}\@eha + }% + {% +% \end{macrocode} +% Now we have to define the macro |\|\meta{\#1}|+|\meta{\#2} +% to contain |#3|. But since most of the time |#3| will be empty +% we use |\let| in a tricky way rather than a simple |\def| since +% this will save internal memory. +% We store the argument |#3| in a temporary macro +% |\reserved@a|. +% \begin{macrocode} + \def\reserved@a{#3}% +% \end{macrocode} +% We compare |\reserved@a| with |\@empty| +% If these two are the same we |\let| the `extra' +% macro equal to |\@empty| which is not the same a doing a |\let| +% to |\reserved@a| --- the latter would blow one extra memory +% location rather then reusing the one from |\@empty|. +% \begin{macrocode} + \global + \expandafter\let\csname #1+#2\expandafter\endcsname + \ifx \reserved@a\@empty + \@empty + \else \reserved@a + \fi + }% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\cdp@list} +% We initialize the code page list to be empty. +% \begin{macrocode} +\let\cdp@list\@empty +\@onlypreamble\cdp@list +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\cdp@elt} +% \begin{macrocode} +\let\cdp@elt\relax +\@onlypreamble\cdp@elt +% \end{macrocode} +% \end{macro} +% +% +% +% +% \begin{macro}{\DeclareFontEncoding} +% \begin{macrocode} +\def\DeclareFontEncoding{% +% \end{macrocode} +% First we start with ignoring all blanks and newlines since every +% surplus space in the second or third argument will come out in +% a weird place in the document. +% \changes{v2.1c}{1994/02/07}{revert catcode settings earlier} +% \changes{v2.1t}{1994/10/19}{Add missing \cs{relax}.} +% \changes{v2.1z}{1994/12/06}{use \cs{nfss@catcodes}} +% \begin{macrocode} + \begingroup + \nfss@catcodes + \expandafter\endgroup + \DeclareFontEncoding@} +\@onlypreamble\DeclareFontEncoding +% \end{macrocode} +% \changes{v2.0g}{1993/09/15} +% {Corrected: \cs{default@T} to \cs{default@M}.} +% \begin{macrocode} +\def\DeclareFontEncoding@#1#2#3{% + \expandafter + \ifx\csname T@#1\endcsname\relax + \def\cdp@elt{\noexpand\cdp@elt}% + \xdef\cdp@list{\cdp@list\cdp@elt{#1}% + {\default@family}{\default@series}% + {\default@shape}}% +% \end{macrocode} +% To support encoding dependent commands (like accents) we +% initialise the command +% |\|\meta{encoding}|-cmd| to be |\@changed@cmd|. +% (See \texttt{ltoutenc.dtx} for details.) +% \changes{v2.1l}{1994/05/13}{Init encoding change command} +% \changes{v2.1n}{1994/05/14}{Only init enc change cmd when +% new encoding} +% \changes{v2.1n}{1994/05/14}{Log if encoding is redeclared} +% \begin{macrocode} + \expandafter\let\csname#1-cmd\endcsname\@changed@cmd + \else + \@font@info{Redeclaring font encoding #1}% + \fi +% \end{macrocode} +% +% \begin{macrocode} + \global\@namedef{T@#1}{#2}% + \global\@namedef{M@#1}{\default@M#3}% +% \end{macrocode} +% Keep a record of the last encoding being declared: +% \changes{v3.0w}{1999/01/06}{Added \cs{LastDeclaredEncoding} to +% support cyrillic integration (pr/2988)} +% \begin{macrocode} + \xdef\LastDeclaredEncoding{#1}% + } +\@onlypreamble\DeclareFontEncoding@ +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\LastDeclaredEncoding} +% \changes{v3.0w}{1999/01/06}{Added \cs{LastDeclaredEncoding} to +% support cyrillic integration (pr/2988)} +% The last encoding being declared by |\DeclareFontEncoding|. +% \begin{macrocode} +\def\LastDeclaredEncoding{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DeclareFontSubstitution} +% \begin{macrocode} +\def\DeclareFontSubstitution#1#2#3#4{% + \expandafter + \ifx\csname T@#1\endcsname\relax + \@latex@error{Encoding scheme `#1' unknown}\@eha + \else + \begingroup +% \end{macrocode} +% \changes{v3.0x}{2002/10/02}{Adding \cs{LastDeclaredEncoding} +% introduced a bug as on some occasions that macro name was stored +% in the internal lists instead of the actual encoding. (pr/3459)} +% We loop through the |\cdp@list| and rebuild it anew in |\toks@| +% thereby replacing the defaults for the encoding in question with +% the new defaults. It is important to store the encoding to test +% against expanded in |\reserved@a| since it might just be +% |\LastDeclaredEncoding| that is passed as |#1|. +% \begin{macrocode} + \edef\reserved@a{#1}% + \toks@{}% + \def\cdp@elt##1##2##3##4{% + \def\reserved@b{##1}% + \ifx\reserved@a\reserved@b +% \end{macrocode} +% Here we use the new defaults but we use |##1| (i.e., the encoding +% name already stored previously) since we know that it is expanded. +% \begin{macrocode} + \addto@hook\toks@{\cdp@elt{##1}{#2}{#3}{#4}}% + \else +% \end{macrocode} +% If |\reserved@a| and |\reserved@b| differ then we simply copy +% from the old list to the new. +% \begin{macrocode} + \addto@hook\toks@{\cdp@elt{##1}{##2}{##3}{##4}}% + \fi}% + \cdp@list + \xdef\cdp@list{\the\toks@}% + \endgroup + \global + \@namedef{D@#1}{% + \def\default@family{#2}% + \def\default@series{#3}% + \def\default@shape{#4}% + }% + \fi + } +\@onlypreamble\DeclareFontSubstitution +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\DeclareFontEncodingDefaults} +% \begin{macrocode} +\def\DeclareFontEncodingDefaults#1#2{% + \ifx\relax#1\else + \ifx\default@T\@empty\else + \@font@info{Overwriting encoding scheme text defaults}% + \fi + \gdef\default@T{#1}% + \fi + \ifx\relax#2\else + \ifx\default@M\@empty\else + \@font@info{Overwriting encoding scheme math defaults}% + \fi + \gdef\default@M{#2}% + \fi +} +\@onlypreamble\DeclareFontEncodingDefaults +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\default@T} +% \begin{macro}{\default@M} +% \begin{macrocode} +\let\default@T\@empty +\let\default@M\@empty +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\DeclarePreloadSizes} +% \begin{macrocode} +\def\DeclarePreloadSizes#1#2#3#4#5{% + \@ifundefined{T@#1}% + {\@latex@error{Encoding scheme `#1' unknown}\@eha}% + {% +% \end{macrocode} +% Don't know at the moment what this group here does! +% \begin{macrocode} + \begingroup +% \end{macrocode} +% We define a macro |\reserved@f|\footnote{We cannot use +% {\ttfamily\bslash @tempa} +% since it is needed in +% {\ttfamily\bslash pickup@font}.} +% that grabs the next \emph{size} and loads the corresponding +% font. +% This is done by delimiting |\reserved@f|'s only argument by the +% \textsf{token} |,| (comma). +% \begin{macrocode} + \def\reserved@f##1,{% +% \end{macrocode} +% The end of the list will be detected when there are no more +% elements, i.e.\ when |\reserved@f|'s argument is empty. +% The trick used here is explained in Appendix~D of the +% \TeX{}book: if the argument is empty the |\if| +% will select the first clause and |\let| |\reserved@f| +% equal to |\relax|. +% (We use the |>| character here since it cannot appear +% in font file names.) +% \changes{v1.2j}{1990/06/24}{Missing percent added.} +% \begin{macrocode} + \if>##1>% + \let\reserved@f\relax + \else +% \end{macrocode} +% Otherwise, we define |\font@name| appropriately and +% call |\pickup@font| to do the work. +% Note that the requested |\curr@fontshape| +% combination must have been defined, or you will get an error. +% The definition of |\font@name| is carried out globally +% to be consistent with the rest of the code in this file. +% \begin{macrocode} + \xdef\font@name{\csname#1/#2/#3/#4/##1\endcsname}% + \pickup@font +% \end{macrocode} +% Now we forget the name of the font just loaded. +% More precisely, we set the corresponding control sequence +% to |\relax|. This means that later on, when the font +% is first used, the macro |\define@newfont| is called +% again to execute the `extra' macro for this font. +% \changes{v1.2d}{1990/01/27}{Font identifier set to \cs{relax}.} +% \begin{macrocode} + \global\expandafter\let\font@name\relax + \fi +% \end{macrocode} +% Finally we call |\reserved@f| again to process the next +% \emph{size}. If |\reserved@f| was |\let| equal to |\relax| +% this will end the macro. +% \begin{macrocode} + \reserved@f}% +% \end{macrocode} +% We finish with reinserting the list of sizes after the +% |\reserved@f| +% macro and appending an empty element so that the end of the list +% is recognized properly. +% \begin{macrocode} + \reserved@f#5,,% + \endgroup + }% +} +\@onlypreamble\DeclarePreloadSizes +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\ifmath@fonts} +% We need a switch to decide if we have to switch math fonts. +% For this purpose we provide |\ifmath@fonts| +% that can be set to true or false by the |\S@...| macros +% depending on if math fonts +% are provided for this size or not. +% The default is of course to switch all fonts. +% \begin{macrocode} +\newif\ifmath@fonts \math@fontstrue +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\DeclareMathSizes} +% \begin{macro}{\DeclareMathSizes*} +% |\DeclareMathSizes| takes the text size, math text size, math +% script size, and math scriptscript size as arguments and defines +% the right |\S@|\dots{} macro. +% +% \begin{macrocode} +\def\DeclareMathSizes{% + \@ifstar{\@DeclareMathSizes\math@fontsfalse}% + {\@DeclareMathSizes{}}} +\@onlypreamble\DeclareMathSizes +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@DeclareMathSizes} +% \changes{v3.0p}{1996/07/26}{use faster \cs{if} test} +% \begin{macrocode} +\def\@DeclareMathSizes#1#2#3#4#5{% + \@defaultunits\dimen@#2pt\relax\@nnil + \if$#3$% + \expandafter \let + \csname S@\strip@pt\dimen@\endcsname + \math@fontsfalse + \else + \expandafter \gdef + \csname S@\strip@pt\dimen@\endcsname + {\gdef\tf@size{#3}\gdef\sf@size{#4}% + \gdef\ssf@size{#5}% + #1% + }% + \fi} +\@onlypreamble\@DeclareMathSizes +% \end{macrocode} +% \end{macro} +% +% +% +% \section{Selecting a new font} +% +% \subsection{Macros for the user} +% +% +% \begin{macro}{\fontencoding} +% \changes{v2.1j}{1994/05/12}{Use \cs{DeclareRobustCommand}.} +% \begin{macro}{\f@encoding} +% As we said in the introduction a font is described by four parameters. +% We first define macros to specify the wanted \emph{family}, +% \emph{series}, or \emph{shape}. +% These are simply recorded in internal macros +% |\f@family|, |\f@series|, and |\f@shape|, resp. +% We use |\edef|'s so that the arguments can also be macros. +% \begin{macrocode} +\DeclareRobustCommand\fontencoding[1]{% + \expandafter\ifx\csname T@#1\endcsname\relax + \@latex@error{Encoding scheme `#1' unknown}\@eha + \else + \edef\f@encoding{#1}% + \ifx\cf@encoding\f@encoding +% \end{macrocode} +% If the new encoding is the same as the old +% encoding we have nothing to do. +% However, in case we had a sequence of several encoding changes +% without a |\selectfont| inbetween we can save processing by +% making sure that |\enc@update| is |\relax|. +% \begin{macrocode} + \let\enc@update\relax + \else +% \end{macrocode} +% If current and new encoding differ we define the macro +% |\enc@update| +% to contain all updates necessary at |\selectfont| time. +% \begin{macrocode} + \let\enc@update\@@enc@update + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@@enc@update} +% \begin{macrocode} +\def\@@enc@update{% +% \end{macrocode} +% When |\@@enc@update| is executed |\f@encoding| holds the encoding +% name +% for the new encoding and |\cf@encoding| the name of the last active +% encoding. +% +% We start by setting the init command for encoding dependent +% macros to |\@changed@cmd|. +% \begin{macrocode} + \expandafter + \let + \csname\cf@encoding -cmd\endcsname + \@changed@cmd +% \end{macrocode} +% Then we turn the one for the new encoding to |\@current@cmd| (see +% \texttt{ltoutenc.dtx} for further explanations). +% \begin{macrocode} + \expandafter + \let + \csname\f@encoding-cmd\endcsname + \@current@cmd +% \end{macrocode} +% We execute the default settings |\default@T|, followed by the one +% for the new encoding. +% \begin{macrocode} + \default@T + \csname T@\f@encoding\endcsname +% \end{macrocode} +% Finally we change the default substitution values, disable +% |\enc@update| and make |\f@encoding| officially the current +% encoding. +% \begin{macrocode} + \csname D@\f@encoding\endcsname + \let\enc@update\relax + \let\cf@encoding\f@encoding +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\enc@update} +% \changes{v2.1m}{1994/05/14}{Macro added} +% The default action in |\selectfont| is to do nothing. +% \begin{macrocode} +\let\enc@update\relax +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fontfamily} +% \changes{v2.1j}{1994/05/12}{Use \cs{DeclareRobustCommand}.} +% \begin{macro}{\f@family} +% \begin{macro}{\fontseries} +% \changes{v2.1j}{1994/05/12}{Use \cs{DeclareRobustCommand}.} +% \begin{macro}{\f@series} +% \begin{macro}{\fontshape} +% \changes{v2.1j}{1994/05/12}{Use \cs{DeclareRobustCommand}.} +% \changes{v2.1y}{1994/11/30}{Use \cs{@current@cmd} in +% \cs{@@enc@update}. ASAJ.} +% \begin{macro}{\f@shape} +% \begin{macrocode} +\DeclareRobustCommand\fontfamily[1]{\edef\f@family{#1}} +\DeclareRobustCommand\fontseries[1]{\edef\f@series{#1}} +\DeclareRobustCommand\fontshape [1]{\edef\f@shape{#1}} +% \end{macrocode} +% Some handy abbreviation if you want to get some particular font +% in the current size. If also the size should change one has to +% issue a |\fontsize| comand first. +% \begin{macrocode} +\def\usefont#1#2#3#4{\fontencoding{#1}\fontfamily{#2}% + \fontseries{#3}\fontshape{#4}\selectfont + \ignorespaces} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\linespread} +% \changes{v2.1j}{1994/05/12}{New macro} +% \changes{v2.1p}{1994/05/16}{Remove surplus braces} +% The comand |\linespread| changes the current |\baselinestretch| +% by calling |\set@fontsize|. The values for |\f@size| and +% |\f@baselineskip| will be left unchanged. +% \begin{macrocode} +\DeclareRobustCommand\linespread[1] + {\set@fontsize{#1}\f@size\f@baselineskip} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\fontsize} +% \changes{v2.1j}{1994/05/12}{Redefined to use \cs{set@fontsize}} +% \changes{v2.1p}{1994/05/16}{Pass \cs{baselinstretch} not +% \cs{f@linespread}} +% We also define a macro that allows to specify a size. In this +% case, however, we also need the value of |\baselineskip|. As the +% first argument to |\set@fontsize| we pass the current value of +% |\baselinestretch|. This will either match the internal value (in +% which case nothing changes, or it will be an updated value due to +% a user change of that macro using |\renewcommand|. If we would +% pass the internal |\f@linespread| such a change would be +% efectively overwritten by a size change. +% \begin{macrocode} +\DeclareRobustCommand\fontsize[2] + {\set@fontsize\baselinestretch{#1}{#2}} +% \end{macrocode} +% \end{macro} +% +% +% \changes{v2.1n}{1994/05/14}{Set defaults for all \cs{f@...}} +% +% \begin{macro}{\f@linespread} +% \changes{v2.1j}{1994/05/12}{New macro} +% This macro holds the current internal value for +% |\baselinestretch|. +% \begin{macrocode} +\let\f@family\@empty +\let\f@series\@empty +\let\f@shape\@empty +\let\f@size\@empty +\let\f@baselineskip\@empty +\let\f@linespread\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\cf@encoding} +% \changes{v2.1u}{1994/11/06}{New macro} +% \begin{macrocode} +\let\f@encoding\@empty +\let\cf@encoding\@empty +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\@defaultunits} +% +% The function |\@defaultunits| when wrapped around a dimen or skip +% assignment supplies default units. Usage: +% +% |\@defaultunits\dimen@=#1pt\relax\@nnil| +% +% Note: the |\relax| is *important*. Other units can be substituted +% for the `pt' if desired. +% +% We use |\remove@to@nnil| as an auxiliary macros for +% |\@defaultunits|. It just has to gobble the supplied default unit +% `pt' or whatever, if it wasn't used in the assignment. +% \begin{macrocode} +\def\@defaultunits{\afterassignment\remove@to@nnil} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\strip@pt} +% \begin{macro}{\rem@pt} +% This macro strips the characters |pt| produced by using |\the| +% on a dimen register. +% \begin{macrocode} +\begingroup + \catcode`P=12 + \catcode`T=12 + \lowercase{ + \def\x{\def\rem@pt##1.##2PT{##1\ifnum##2>\z@.##2\fi}}} + \expandafter\endgroup\x +\def\strip@pt{\expandafter\rem@pt\the} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\mathversion} +% \changes{v1.0h}{1989/04/29}{Test if version defined added.} +% \changes{v1.0m}{1989/09/14} +% {Corrected typo: \cs{endscname} to \cs{endcsname}.} +% \changes{v2.1j}{1994/05/12}{Use \cs{DeclareRobustCommand}.} +% \begin{macro}{\math@version} +% |\mathversion| takes the math \emph{version} name as +% argument, defines |\math@version| appropriately and switches +% to the font selected +% forcing a call to |\glb@settings| if the \emph{version} is +% known to the system. +% \changes{v1.0p}{1989/11/14}{Math version prefix `mv@' added.} +% \changes{v1.0r}{1989/11/22} +% {\cs{def} $\to$ \cs{edef} for \cs{math@version}.} +% \changes{v1.2g}{1990/02/16}{\cs{@nomath} added.} +% \changes{v2.1a}{1994/01/17}{New math font setup} +% \begin{macrocode} +\DeclareRobustCommand\mathversion[1] + {\@nomath\mathversion + \expandafter\ifx\csname mv@#1\endcsname\relax + \@latex@error{Math version `#1' is not defined}\@eha\else + \edef\math@version{#1}% +% \end{macrocode} +% We need to force a math font setup both now and at the point +% where we return to the previous math version. +% Forcing a math font setup can simply be done by setting +% |\glb@currsize| to an invalid value since this will trigger the +% setup when the formula starts. +% \begin{macrocode} + \gdef\glb@currsize{}% +% \end{macrocode} +% When the scope of the current |\mathversion| ends we need to +% restore the old setup. However this time we need to force it +% directly at least if we are inside math, otherwise we could wait. +% Another way to enhance this code here is todo the setting only if +% the version really has changed after all. This might be +% interesting in case of \texttt{amstext} and \texttt{boldsymbol}. +% \changes{v2.1b}{1994/01/25}{Corrections for math setup} +% \begin{macrocode} + \aftergroup\glb@settings + \fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% If \TeX{} would support a hook just before the end of a formula +% (opposite of |\everymath| so to speak) the implementation of the +% algorithm would be much simpler because in that case we would set up +% the correct math fonts at this point without having to worry about +% incorrect settings due to nesting. The same would be true if in +% \LaTeX{} the use of |$| (as the primitive \TeX{} command) would be +% impossible and instead only a higher-level interface would be +% available. Note that this does not mean that a |$| couldn't be the +% short-hand for starting and stopping that higher-level interface, it +% only means that the direct \TeX{} function must be hidden. +% +% Anyway, since we don't have this and won't have it in \LaTeXe{} we +% need to implement it in a somewhat slower way. +% +% +% We test for the current math font setup on entry of a formula, +% i.e., on the +% hooks |\everymath| and |\everydisplay|. But since these hooks may +% contain user data we provide ourselves with an internal version of +% these hooks which stays frozen. +% +% +% \begin{macro}{\frozen@everymath} +% \changes{v2.1a}{1994/01/17}{New math font setup} +% \begin{macro}{\frozen@everydisplay} +% New internal names for |\everymath| and |\everydisplay|. +% \begin{macrocode} +\let\frozen@everymath\everymath +\let\frozen@everydisplay\everydisplay +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\everymath} +% \changes{v2.1a}{1994/01/17}{New math font setup} +% \begin{macro}{\everydisplay} +% \changes{v2.1a}{1994/01/17}{New math font setup} +% Now we provide now user hooks that will be called in the +% frozen internals. +% \begin{macrocode} +\newtoks\everymath +\newtoks\everydisplay +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\frozen@everymath} +% \changes{v2.1a}{1994/01/17}{New math font setup} +% Now we define the behaviour of the frozen hooks: first +% check the math setup then call the user hook. +% \begin{macrocode} +\frozen@everymath = {\check@mathfonts + \the\everymath} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\frozen@everydisplay} +% \changes{v2.1a}{1994/01/17}{New math font setup} +% Ditto for the display hook. +% \begin{macrocode} +\frozen@everydisplay = {\check@mathfonts + \the\everydisplay} +% \end{macrocode} +% \end{macro} +% +% \changes{v3.0q}{1996/07/27}{\cs{if@inmath} switch removed} +% +% \begin{macro}{\curr@math@size} +% \changes{v2.1a}{1994/01/17}{New math font setup} +% This holds locally the current math size. +% \begin{macrocode} +\let\curr@math@size\@empty +% \end{macrocode} +% \end{macro} +% +% +% +% +% \subsection{Macros for loading fonts} +% +% \begin{macro}{\pickup@font} +% The macro |\pickup@font| which is used in +% |\selectfont| is very simple: +% if the font name is undefined (i.e.\ not known yet) it calls +% |\define@newfont| to load it. +% \begin{macrocode} +\def\pickup@font{% + \expandafter \ifx \font@name \relax + \define@newfont + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\split@name} +% |\pickup@font| assumes that |\font@name| is set +% but it is sometimes called when |\f@family|, |\f@series|, +% |\f@shape|, or |\f@size| may have the wrong settings +% (see, e.g., the definition of |\getanddefine@fonts|). +% Therefore we need a macro to extract font \emph{family}, +% \emph{series}, \emph{shape}, and \emph{size} from the font name. +% To this end we define |\split@name| which takes the font +% name as a list of characters of |\catcode| 12 (without the +% backslash at the beginning) delimited by the +% special control sequence |\@nil|. +% This is not very complicated: we first ensure that |/| has +% the right |\catcode| +% \begin{macrocode} +{\catcode`\/=12 +% \end{macrocode} +% and define |\split@name| so that it will define our +% private |\f@encoding|, |\f@family|, |\f@series|, |\f@shape|, +% and |\f@size| macros. +% \changes{v1.9a}{1992/07/26}{Added splitting into \cs{f@encoding}.} +% \begin{macrocode} +\gdef\split@name#1/#2/#3/#4/#5\@nil{\def\f@encoding{#1}% + \def\f@family{#2}% + \def\f@series{#3}% + \def\f@shape{#4}% + \def\f@size{#5}}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\curr@fontshape} +% Abbreviation which may get removed again for speed. +% \changes{v1.9a}{1992/07/26}{} +% \begin{macrocode} +\def\curr@fontshape{\f@encoding/\f@family/\f@series/\f@shape} +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\define@newfont} +% Now we can tackle the problem of defining a new font. +% \changes{v1.9a}{1992/07/26}{} +% \begin{macrocode} +%<*2ekernel|def2|autoload> +\def\define@newfont{% +% \end{macrocode} +% We have already mentioned that the \textsf{token} list that +% |\split@name| will get as argument must not start with +% a backslash. +% To reach this goal we will set the |\escapechar| to $-1$ so +% that the |\string| primitive will not generate an +% escape character. +% To keep this change local we open a group. We use +% |\begingroup| for this purpose since |\define@newfont| +% might be called in math mode, and an empty +% |\bgroup|\ldots|\egroup| would add an empty Ord atom +% to the math list and thus affect the spacing. +% +% Also locally redefine |\typeout| so that `No file ...fd' +% Warnings become Font Info message just sent to the log file. +% \changes{v1.0q}{1989/11/19}{Group added.} +% \changes{v3.0m}{1995/11/17}{Redefine \cs{typeout} latex/1676} +% \begin{macrocode} + \begingroup + \let\typeout\@font@info + \escapechar\m@ne +% \end{macrocode} +% Then we extract \emph{encoding scheme}, \emph{family}, +% \emph{series}, \emph{shape}, +% and \emph{size} from the font name. +% Note the four |\expandafter|'s so that |\font@name| is +% expanded first, then |\string|, and finally +% |\split@name|. +% \begin{macrocode} + \expandafter\expandafter\expandafter + \split@name\expandafter\string\font@name\@nil +% \end{macrocode} +% If the |\curr@fontshape| combination is not available, +% (i.e.\ undefined) we call the macro |\wrong@fontshape| to take +% care of this case. Otherwise |\extract@font| +% will load the external font for us. +% \changes{v1.2f}{1990/01/28}{Added call to \cs{curr@fontshape} macro +% to allow substitution.} +% \begin{macrocode} +% \expandafter\ifx +% \csname\curr@fontshape\endcsname \relax + \try@load@fontshape % try always +% \fi + \expandafter\ifx + \csname\curr@fontshape\endcsname \relax + \wrong@fontshape\else +% \end{macrocode} +% To allow substitution we call the |curr@fontshape| macro +% which usually will expand to |\relax| but may hold code for +% substitution (see |\subst@fontshape| definition). +% \begin{macrocode} +% \csname\curr@fontshape\endcsname + \extract@font\fi +% \end{macrocode} +% We are nearly finished and must only restore the +% |\escapechar| by closing the group. +% \begin{macrocode} + \endgroup} +%</2ekernel|def2|autoload> +% \end{macrocode} +% +% +% As |autofss2.sty| only makes local definitions it is re-loaded +% for each font, to save some string memory in the kernel, and to +% speed up the loading of some packages which may load fonts +% The code is actually pre-loaded into the kernel and removed +% at |\begin{document}|. The |\ifx| test below ensures that +% if |\usepackage{autofss2}| apears in the preamble, then the code +% is not removed at this time. Can not use |\AtBeginDocument| here +% as it is not defined yet! Listing all the commands like this +% is not ideal as any changes to the |autofss2.sty| need to be +% reflected here, but this seems the most memory efficient mechanism +% as it avoids the use of an extra csname to store the list. +% +% This is currently disabled, so the `autofss2' code remains +% in the kernel, and |autofss2.sty| is not generated in the current +% public release. +% \changes{v3.0l}{1995/10/26} +% {(DPC) disable autofss2 for now} +% \begin{macrocode} +%<*autoloadxxx> +\expandafter\def\expandafter\@begindocumenthook\expandafter{% + \expandafter\ifx\csname ver@autofss2.sty\endcsname\relax + \gdef\define@newfont{% + \begingroup + \makeatletter\nfss@catcodes + \catcode`\#6\relax + \@@input autofss2.sty\relax\define@newfont + \endgroup}% + \begingroup + \def\do##1{\global\let##1\@undefined}% + \do\extract@sizefn + \do\try@simple@size + \do\set@simple@size@args + \do\extract@rangefontinfo + \do\is@range + \do\check@range + \do\check@single + \do\set@size@funct@args + \do\set@size@funct@args@ + \do\try@size@range + \do\empty@sfcnt + \do\gen@sfcnt + \do\genb@sfcnt + \do\sub@sfcnt + \do\subf@sfcnt + \do\fixed@sfcnt + \endgroup + \fi} +%</autoloadxxx> +% \end{macrocode} +% +% \begin{macrocode} +%<*2ekernel|autoload> +\def\try@load@fontshape{% + \expandafter + \ifx\csname \f@encoding+\f@family\endcsname\relax + \@font@info{Try loading font information for + \f@encoding+\f@family}% +% \end{macrocode} +% We predefine this combination to be |\@empty| which means that +% next time we don't try again unnecessary in case we don't find a +% |.fd| file. If the file contains a |\DeclareFontFamily| command +% than this setting will be overwritten. +% \changes{v2.1e}{1994/02/24} +% {Separate restoration of catcodes for fd cmds} +% \changes{v2.1l}{1994/05/13}{Use \cs{@input@} for fd files} +% \begin{macrocode} + \global\expandafter\let + \csname\f@encoding+\f@family\endcsname\@empty +% \end{macrocode} +% Set the catcodes used in the syntax, but do it only once (this +% will be restored at the end of the font loading group). +% \changes{v3.0t}{1997/10/21}{Move \cs{makeatletter} to +% \cs{nfss@catcodes}.} +% \begin{macrocode} + \nfss@catcodes + \let\nfss@catcodes\relax +% \end{macrocode} +% +% \changes{v3.0s}{1996/11/18} +% {(DPC) lowercase fd file names. internal/1044} +% For increased portability make the external filename +% monocase, but look for the (old style) mixed case +% filename if the first attempt fails. +% +% On any monocase system this means that the file is looked for twice +% which takes up time and string space, but at least for this release +% Check for both names to give people time to re-install their private +% fd files with lowercase names. +% \begin{macrocode} + \edef\reserved@a{% + \lowercase{% + \noexpand\InputIfFileExists{\f@encoding\f@family.fd}}}% + \reserved@a\relax + {\@input@{\f@encoding\f@family.fd}}% + \fi} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\nfss@catcodes} +% \changes{v2.1e}{1994/02/24} +% {Separate restoration of catcodes for fd cmds} +% This macro should contain the standard |\catcode| assignments to +% all characters which are used in the commands found in an +% \texttt{.fd} file and which might have special |\catcode|s in the +% middle of a document. If necessary, this list can be extended in +% a package file using a suitable number of |\expandafter|, i.e., +%\begin{verbatim} +% \expandafter\def\expandafter\nfss@catcodes +% \expandafter{\nfss@catcodes <additional settings>} +%\end{verbatim} +% Note, that this macro might get executed several times since it +% is also called by |\DeclareFontShape|, thus it probably should +% not be misused as a general purpose hook. +% \begin{macrocode} +\def\nfss@catcodes{% +% \end{macrocode} +% We start by making |@| a letter and ignoring all blanks and newlines. +% \changes{v2.1z}{1994/12/06}{Added tab char as well} +% \changes{v3.0p}{1996/07/26}{omit \cs{relax} as not needed} +% \changes{v3.0t}{1997/10/21}{Moved \cs{makeatletter} from +% \cs{try@load@font@shape}.} +% \begin{macrocode} + \makeatletter + \catcode`\ 9% + \catcode`\^^I9% + \catcode`\^^M9% +% \end{macrocode} +% Then we set up |\|, |{|, |}|, |#| and |%| in case an \texttt{.fd} +% file is loaded during a verbatim environment. +% \changes{v3.0n}{1995/11/27}{Reset hash, for definitions in fd files} +% \changes{v3.00}{1995/12/06}{Reset hat, for typeouts etc in fd files} +% \begin{macrocode} + \catcode`\\\z@ + \catcode`\{\@ne + \catcode`\}\tw@ + \catcode`\#6% + \catcode`\^7% + \catcode`\%14% +% \end{macrocode} +% The we make sure that the important syntax parts have the right +% |\catcode|. +% \changes{v2.1s}{1994/09/16}{Reset [ and ] as well, just in case} +% \changes{v3.0r}{1996/08/25}{Reset the acute, grave and double quote +% chars as well} +% \begin{macrocode} + \@makeother\<% + \@makeother\>% + \@makeother\*% + \@makeother\.% + \@makeother\-% + \@makeother\/% + \@makeother\[% + \@makeother\]% + \@makeother\`% + \@makeother\'% + \@makeother\"% +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\DeclareErrorFont} +% Declare the last resort shape! We assume that in this fontshape +% there is a 10pt font but it doesn't really matter. We only loose +% one macro name if the assumption is false. But at least the font +% should be there! +% \begin{macrocode} +\def\DeclareErrorFont#1#2#3#4#5{% + \xdef\error@fontshape{% + \noexpand\expandafter\noexpand\split@name\noexpand\string + \expandafter\noexpand\csname#1/#2/#3/#4/#5\endcsname + \noexpand\@nil}% +% \end{macrocode} +% Initialize all those internal variables which may or may not have +% values in the first seconds of NFSS' bootstraping process. Later +% on such values will be updated when an encoding is selected, etc. +% +% We definitely don't want to set |\f@encoding|; we can set all the +% others since if they are left ``blank'' any selection would grap +% ``error default values'' as well. However, this probably should +% go also. +% \changes{v2.1n}{1994/05/14}{Don't set \cs{f@encoding}} +% \begin{macrocode} +% \gdef\f@encoding{#1}% + \gdef\default@family{#2}% + \gdef\default@series{#3}% + \gdef\default@shape{#4}% + \global\let\f@family\default@family + \global\let\f@series\default@series + \global\let\f@shape\default@shape + \gdef\f@size{#5}% + \gdef\f@baselineskip{#5pt}% +} +\@onlypreamble\DeclareErrorFont +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\wrong@fontshape} +% Before we come to the macro |\extract@font| we have to take +% care of unknown |\curr@fontshape| combinations. +% The general strategy is to issue a warning and to try a default +% \emph{shape}, then a default \emph{series}, +% and finally a default \emph{family}. +% If this last one also fails \TeX{} will go into an infinite loop. +% But if the defaults are set incorrectly one deserves nothing else! +% \changes{v1.9a}{1992/07/26}{} +% \begin{macrocode} +\def\wrong@fontshape{% + \csname D@\f@encoding\endcsname % install defaults if in math +% \end{macrocode} +% We remember the wanted |\curr@fontshape| combination +% which we will need in a moment. +% \begin{macrocode} + \edef\reserved@a{\csname\curr@fontshape\endcsname}% + \ifx\last@fontshape\reserved@a + \errmessage{Corrupted NFSS tables}% + \error@fontshape + \else +% \end{macrocode} +% Then we warn the user about the mess and set the shape to its +% default. +% \changes{v1.0q}{1989/11/19} +% {Instead of calling \cs{family}\cs{default@family}, +% etc. we directly set \cs{f@family}, etc.} +% \changes{v1.2f}{1990/01/28}{Warning message slightly changed.} +% \begin{macrocode} + \let\f@shape\default@shape +% \end{macrocode} +% If the combination is not known, try the default \emph{series}. +% \begin{macrocode} + \expandafter\ifx\csname\curr@fontshape\endcsname\relax + \let\f@series\default@series +% \end{macrocode} +% If this is still undefined, try the default \emph{family}. +% Otherwise give up. We never try to change the encoding scheme! +% \changes{v1.9a}{1992/07/26}{} +% \begin{macrocode} + \expandafter + \ifx\csname\curr@fontshape\endcsname\relax + \let\f@family\default@family + \fi \fi + \fi +% \end{macrocode} +% At this point a valid |\curr@fontshape| combination must +% have been found. +% We inform the user about this fact. +%\changes{v3.0n}{1995/11/02} +% {(DPC) Remove extra space with \cs{string} for latex/1676} +% \changes{v3.0m}{1995/11/17} +% {Support \cs{@wrong@font@char} latex/1676} +% +% The |\expandafter\string| here stops \TeX\ adding the space +% that it usually puts after command names in messages. The similar +% construction with |\@undefined| just produces `undefined', but saves +% a few tokens. +% +% |\@wrong@font@char| is locally redefined in |\UseTextSymbol| from +% its normal (empty) definition, to report the symbol generating the +% font switch. +% \begin{macrocode} + \@font@warning{Font shape `\expandafter\string\reserved@a' + \expandafter\@gobble\string\@undefined\MessageBreak + using `\curr@fontshape' instead\@wrong@font@char}% + \global\let\last@fontshape\reserved@a +% \end{macrocode} +% We change |\@defaultsubs| to produce a warning at the end of +% the document. +% \changes{v3.0d}{1995/07/13}{Change a macro not a switch to flag +% default font substitutions} +% \changes{v3.0k}{1995/10/24}{Make this code inline since it +% happens only here} +% The macro |\@defaultsubs| is initially |\relax| but gets changed +% here if some default font substitution happens. +% It is then executed in |\enddocument|. +% \begin{macrocode} + \gdef\@defaultsubs{% + \@font@warning{Some font shapes were not available, defaults + substituted.\@gobbletwo}}% +% \end{macrocode} +% If we substitute a |\curr@fontshape| combination +% by the default one we don't want the warning to be printed out +% whenever this (unknown) combination is used. +% Therefore we globally |\let| the macro corresponding to +% the wanted combination equal to its substitution. +% This requires the use of four |\expandafter|'s +% since |\csname|\dots|\endcsname| has to be +% expanded before |\reserved@a| (i.e.\ the requested +% combination), +% and this must happen before the |\let| is executed. +% \begin{macrocode} + \global\expandafter\expandafter\expandafter\let + \expandafter\reserved@a + \csname\curr@fontshape\endcsname +% \end{macrocode} +% Now we can redefine |\font@name| accordingly. +% This \emph{must} be done globally since it might occur in the +% group opened by |\define@newfont|. If we would this +% definition were local the closing |\endgroup| there +% would restore the old meaning of |\font@name| and then +% switch to the wrong font at the end of |\selectfont| +% although the correct font was loaded. +% \begin{macrocode} + \xdef\font@name{% + \csname\curr@fontshape/\f@size\endcsname}% +% \end{macrocode} +% The last thing this macro does is to call |\pickup@font| +% again to load the font if it is not defined yet. +% At this point this code will loop endlessly if +% the defaults are not well defined. +% \begin{macrocode} + \pickup@font} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@wrong@font@char} +% \changes{v3.0m}{1995/11/17}{(DPC) Macro added. latex/1676} +% Normally empty but redefined in |\UseTextSymbol| so that the +% Font shape undefined message can refer to the symbol causing the +% problem. +% \begin{macrocode} +\let\@wrong@font@char\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@defaultsubs} +% \changes{v3.0d}{1995/07/13}{macro added} +% \changes{v3.0k}{1995/10/24}{macro removed} +% \begin{macro}{\@defaultsubs} +% \changes{v3.0d}{1995/07/13}{macro added} +% See above. +% \begin{macrocode} +\let\@defaultsubs\relax +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\strip@prefix} +% In |\extract@font| we will need a way to recover the +% replacement text of a macro. +% This is done by the primitive |\meaning| together +% with the macro |\strip@prefix| (for the details +% see appendix~D of the \TeX{}book, p.\ 382). +% \begin{macrocode} +\def\strip@prefix#1>{} +% \end{macrocode} +% \end{macro} +% +% ^^A \extract@font +% +% +% +% \section{Assigning math fonts to \emph{versions}} +% +% +% \begin{macro}{\install@mathalphabet} +% This is just another name for |\gdef| but we can redefine it if +% necessary later on. +% \begin{macrocode} +\let\install@mathalphabet\gdef +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\math@fonts} +% +% \changes{v1.9a}{1992/07/26}{} +% \begin{macrocode} +\let\math@fonts\@empty +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\select@group} +% \changes{v1.0t}{1989/11/26}{\cs{bgroup}/\cs{egroup} changed to +% \cs{begingroup}/\cs{endgroup} to avoid empty Ord atom on math list.} +% |\select@group| has four arguments: the new +% \meta{math alphabet identifier} (a control sequence), the +% \meta{math group number}, the extra macro for math mode +% and the |\curr@fontshape| definition macro name. +% We first check if we are in math mode. +% \changes{v1.1a}{1989/12/16}{\cs{relax} in front added.} +% \changes{v1.1a}{1989/12/16}{Now four arguments.} +% \begin{macrocode} +%\def\select@group#1#2#3{\relax\ifmmode +% \end{macrocode} +% We do these things locally using |\begingroup| instead +% of |\bgroup| to avoid the appearance of an empty Ord +% atom on the math list. +% \begin{macrocode} +% \begingroup +% \end{macrocode} +% We set the math fonts for the \emph{family} in question by calling +% |\getanddefine@fonts| in the correct environment. +% \changes{v1.9a}{1992/07/26}{} +% \begin{macrocode} +% \escapechar\m@ne +% \getanddefine@fonts{\csname c@mv@\math@version\endcsname}#3% +% \end{macrocode} +% We globally select the math fonts\dots +% \begin{macrocode} +% \globaldefs\@ne \math@fonts +% \end{macrocode} +% \dots{} and close the group to +% restore |\globaldefs| and |\escapechar|. +% \begin{macrocode} +% \endgroup +% \end{macrocode} +% As long as no \emph{size} or \emph{version} change occurs +% the \meta{math alphabet identifier} should simply switch to the +% installed \emph{math group} instead of calling +% |\select@group| +% unnecessarily. So we globally redefine the first argument +% (the new \meta{math alphabet identifier}) +% to expand into a |\mathgroup| switch +% and then select this \emph{alphabet}. Note that this redefinition +% will be overwritten by the next call to a \emph{version} macro. +% \changes{v1.1a}{1989/12/16}{Usage of `\quotechar=' macro added.} +% \changes{v1.1a}{1989/12/16}{Redefinition of alphabet now simpler.} +% \changes{v1.2a}{1990/01/20}{Def for alph id changed.} +% The original code for the end of |\select@group| was +% \begin{verbatim} +% \gdef#1{#3\mathgroup #2}#1\fi} +%\end{verbatim} +% i.e.\ first redefining the \meta{math alphabet identifier} and +% then calling the new definition to switch to the wanted +% \meta{math group}. Now we define the \meta{math alphabet +% identifier} as a call to the |\use@mathgroup| command. +% \changes{v1.2b}{1990/01/21}{Code moved to \cs{use@mathgroup}.} +% \begin{macrocode} +% \xdef#1{\noexpand\use@mathgroup\noexpand#2% +% {\number\csname c@mv@\math@version\endcsname}}% +% \end{macrocode} +% \changes{v1.3c}{1992/05/12}{Added call to +% \cs{extract@alph@from@version}.} +% But this is not sufficient, as we learned the hard way. +% The problem here is that the loading of the fonts that comprise +% the alphabet identifier |#1|, as well as the necessary math font +% assignments is deferred until it is used. This is OK so far, but +% if the fonts are switched within the current formula (which may +% happen if a sub-formula is a box that contains a math version +% switch) the font assignments for |#1| are not restored unless +% |#1| is used again. This is disastrous since TeX sees the wrong +% fonts at the end of the math formula, when it converts the math +% list into a horizontal list. +% +% This is taken into account as follows: When a math alphabet +% identifier is used for the first time in a certain version +% it modifies the corresponding macro |\mv@|\meta{version} +% so that it calls |\getanddefine@fonts| directly in future as well. +% We use the macro |\extract@alph@from@version| to do this. +% It takes the math alphabet identifer |#1| and the math version +% macro as arguments. +% \changes{v1.9a}{1992/07/26}{} +% \begin{macrocode} +% \expandafter\extract@alph@from@version +% \csname mv@\math@version\expandafter\endcsname +% \expandafter{\number\csname c@mv@\math@version\endcsname}% +% #1% +% \stepcounter{mv@\math@version}% +% \end{macrocode} +% Finally, it is not possible to simply call the new definition +% since we +% have an argument (the third argument of |\use@mathgroup| +% or more exactly the argument od |\math@egroup| if the {\ttfamily +% margid} option is in force) +% which would swallow our closing |\fi|. So +% we use the |\expandafter| technique to remove the |\fi| +% before the |\use@mathgroup| is expanded. +% \begin{macrocode} +%\expandafter #1\fi} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\extract@alph@from@version} +% \changes{v1.3c}{1992/05/12}{Macro added.} +% We proceed to the definition of the +% macro |\extract@alph@from@version|. As stated above, it takes +% a math alphabet identifier and a math version macro +% (e.g.\ |\mv@normal|) as its arguments. +% \begin{macrocode} +\def\extract@alph@from@version#1#2#3{% +% \end{macrocode} +% To extract and replace the definition of math alphabet identifier +% |#3| in macro |#1| we have to recall how this definition looks +% like: Somewhere in the replacement text of |#1| there is +% the sequence\\[2pt] +% |\install@mathalphabet|\meta{math alphabet identifier} |#3||{%| \\ +% \hspace*{\MacroIndent}\hspace*{5mm} +% \meta{Definitions for }|#3}| \\[2pt] +% Hence, the first thing we do is to extract the tokens preceding +% this definitions, the definition itself, and the tokens following +% it. To this end we define one auxiliary macro |\reserved@a|. +% \begin{macrocode} + \def\reserved@a##1\install@mathalphabet#3##2##3\@nil{% +% \end{macrocode} +% When |\reserved@a| is expanded, it will have the tokens preceding +% the definition in question in its first argument (|##1|), the +% following tokens in its third argument (|##3|), and the replacement +% text for the math alphabet identifier |#3| in its second argument. +% (|##2|). This is then recorded for later use in a temporary macro +% |\reserved@b|. +% \begin{macrocode} + \def\reserved@b{##2}% +% \end{macrocode} +% Additionally, we define a macro |\reserved@c| to reconstruct the +% definitions for the math version in question from the tokens that +% will remain unchanged (|##1| and |##3|) and the yet to build new +% definitions for the math alphabet identifier |#3|. +% \begin{macrocode} + \def\reserved@c####1{\gdef#1{##1####1##3}}}% +% \end{macrocode} +% Then we execute our auxiliary macro. +% \begin{macrocode} + \expandafter\reserved@a#1\@nil +% \end{macrocode} +% OK, so now we have to build the new definition for |#3|. To do so, +% we first extract the interesting parts out of the old one. +% The old definition looks like:\\[2pt] +% |\select@group|\meta{math alphabet identifier} \\ +% \hspace*{\MacroIndent}\hspace*{5mm} +% \meta{math group number}\meta{math extra part}\\ +% \meta{|curr@fontshape| definition} \\[2pt] +% So we define a new temporary macro |\reserved@a| that +% extracts these parts. +% \begin{macrocode} + \def\reserved@a\select@group#3##1##2\@nil{% +% \end{macrocode} +% This macro can now directly rebuild the math version definition +% by calling |\reserved@c|: +% \begin{macrocode} + \reserved@c{% + \getanddefine@fonts{#2}##2% + \install@mathalphabet#3{% + \relax\ifmmode \else \non@alpherr#3\fi + \use@mathgroup##1{#2}}}% +% \end{macrocode} +% \changes{v2.1t}{1994/10/15}{Warn if math alpha is used outside math} +% In addtion it defines the alphabet the way it should be used from +% now on. +% \begin{macrocode} + \gdef#3{\relax\ifmmode \else \non@alpherr#3\fi + \use@mathgroup##1{#2}}}% +% \end{macrocode} +% Finally, we only have to call this macro |\reserved@a| on the old +% definitions recorded in |\reserved@b|: +% \begin{macrocode} + \expandafter\reserved@a\reserved@b\@nil + } +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\math@bgroup} +% \changes{v1.2a}{1990/01/20}{Def. placed in this file.} +% \begin{macro}{\math@egroup} +% \changes{v1.2a}{1990/01/20}{Def. placed in this file.} +% \changes{v1.2h}{1990/03/30}{Changed to have one arg.} +% \changes{v2.2f}{1994/03/10}{Changed \cs{begingroup}/\cs{endgroup} to +% \cs{bgroup}/\cs{egroup}.} +% Here are the default definitions for |\math@bgroup| and +% |\math@egroup|. We use |\bgroup| instead of |\begingroup| +% to avoid `leaking out' of style changes. This has the side +% effect of always producing mathord atoms. +% \begin{macrocode} +\let\math@bgroup\bgroup +\def\math@egroup#1{#1\egroup} +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\calculate@math@sizes} +% \changes{v2.1i}{1994/04/18}{Changed message to log only} +% Here is the default definition for |\calculate@math@sizes| +% a more elaborate interface +% is under testing in mthscale.sty. +% \begin{macrocode} +%<*2ekernel|def1> +\gdef\calculate@math@sizes{% + \@font@info{Calculating\space math\space sizes\space for\space + size\space <\f@size>}% + \dimen@\f@size \p@ + \@tempdimb \defaultscriptratio \dimen@ + \dimen@ \defaultscriptscriptratio \dimen@ + \expandafter\xdef\csname S@\f@size\endcsname{% + \gdef\noexpand\tf@size{\f@size}% + \gdef\noexpand\sf@size{\strip@pt\@tempdimb}% + \gdef\noexpand\ssf@size{\strip@pt\dimen@}% + \noexpand\math@fontstrue}} +%</2ekernel|def1> +%<*autoload> +\def\calculate@math@sizes{\try@sizes\calculate@math@sizes} +%</autoload> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\defaultscriptratio} +% \changes{v2.1h}{1994/04/11}{Macro added} +% \begin{macro}{\defaultscriptscriptratio} +% \changes{v2.1h}{1994/04/11}{Macro added} +% The default ratio for math +% sizes is:\\ +% 1 to |\defaultscriptratio| to |\defaultscriptscriptratio|.\\ +% By default this is 1 to .7 to .5. +% \begin{macrocode} +%<*2ekernel|autoload> +\def\defaultscriptratio{.7} +\def\defaultscriptscriptratio{.5} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\noaccents@} +% If we don't have a definition for |\noaccents@| we provide a +% dummy. +% \begin{macrocode} +\ifx\noaccents@\@undefined + \let\noaccents@\@empty +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\showhyphens} +% \changes{v1.2l}{1990/06/30}{Macro added.} +% \changes{v2.0e}{1993/05/16}{Use \cs{reset@font}} +% \changes{v3.0h}{1995/10/10} +% {Use \cs{normalfont} and make colour safe, and autoloadable} +% \changes{v3.0u}{1998/03/25} +% {Suppress unnecessary error when used in preamble} +% The |\showhyphens| command must be redefined since the version in +% \texttt{plain.tex} uses |\tenrm|. We have also made some further +% adjustments for its use in \LaTeX. +% \begin{macrocode} +%</2ekernel|autoload> +%<*2ekernel|autoerr> +\gdef\showhyphens#1{% + \setbox0\vbox{% + \color@begingroup + \everypar{}% + \parfillskip\z@skip\hsize\maxdimen + \normalfont + \pretolerance\m@ne\tolerance\m@ne\hbadness\z@\showboxdepth\z@\ #1% + \color@endgroup}} +%</2ekernel|autoerr> +%<autoload>\def\showhyphens{\@autoerr\showhyphens} +%<*2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\addto@hook} +% \changes{v1.0u}{1989/12/05}{\cs{addto@hook} added.} +% \changes{v2.1d}{1994/02/10}{Made \cs{addto@hook} long.} +% We need a macro to add tokens to a hook. +% \begin{macrocode} +\long\def\addto@hook#1#2{#1\expandafter{\the#1#2}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@vpt} +% \changes{v2.1v}{1994/11/09}{(DPC) macros added, from setsize.dtx} +% \changes{v2.1v}{1994/11/09}{(DPC) reduce save stack usage latex/1742} +% \begin{macrocode} + \def\@vpt{5} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@vipt} +% \begin{macrocode} + \def\@vipt{6} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@viipt} +% \begin{macrocode} + \def\@viipt{7} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@viiipt} +% \begin{macrocode} + \def\@viiipt{8} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ixpt} +% \begin{macrocode} + \def\@ixpt{9} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xpt} +% \begin{macrocode} + \def\@xpt{10} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xipt} +% \begin{macrocode} + \def\@xipt{10.95} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xiipt} +% \begin{macrocode} + \def\@xiipt{12} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xivpt} +% \begin{macrocode} + \def\@xivpt{14.4} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xviipt} +% \begin{macrocode} + \def\@xviipt{17.28} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xxpt} +% \begin{macrocode} + \def\@xxpt{20.74} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xxvpt} +% \begin{macrocode} + \def\@xxvpt{24.88} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel|autoload> +% \end{macrocode} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltfsscmp.dtx b/Master/texmf-dist/source/latex/base/ltfsscmp.dtx new file mode 100644 index 00000000000..b4441aa4120 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltfsscmp.dtx @@ -0,0 +1,414 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%%% From File: ltfsscmp.dtx +%% Copyright (C) 1989-1995 Frank Mittelbach and Rainer Sch\"opf, +%% all rights reserved. +% +%<*driver> +% \fi +% +% +\ProvidesFile{ltfsscmp.dtx} + [1995/08/26 v3.0c LaTeX Kernel (NFSS1 Compatibility)] +% \iffalse +\documentclass{ltxdoc} +\begin{document} +\DocInput{ltfsscmp.dtx} +\end{document} +%</driver> +% \fi +% +% \iffalse +%<+checkmem>\def\CHECKMEM{\tracingstats=2 +%<+checkmem> \newlinechar=`\^^J +%<+checkmem> \message{^^JMemory usage: \filename}\shipout\hbox{}} +%<+checkmem>\CHECKMEM +% \fi +% +% \CheckSum{235} +% +% +% \GetFileInfo{ltfsscmp.dtx} +% \title{A new font selection scheme for \TeX{} macro packages\\ +% (Compatibility with NFSS1)\thanks +% {This file has version number +% \fileversion\ dated \filedate}} +% +% \author{Frank Mittelbach \and Rainer Sch\"opf} +% +% \maketitle +% +% This file contains the implementation of commands giving +% compatibility with the original `NFSS1' release of the Font Selection +% Scheme. +% +% \begin{quote} +% \textbf{Warning:} +% The macro documentation is still basically the documentation from the +% first NFSS release and therefore in some cases probably not +% completely accurate. +% \end{quote} +% +% \StopEventually{} +% +% +% \changes{v3.0b}{1995/06/15} +% {(DPC) minor documentation edits} +% \changes{v3.0a}{1995/05/24} +% {(DPC) Make file from previous file, fam.dtx 1995/05/20 v2.2d} +% +% +% +% \section{Compatibility code for NFSS release 1} +% +% There have been a couple of commands which became obsolete with NFSS2. +% In the past they have been still part of the kernel code to make it +% possible to process old packages using those commands but since they +% take up valuable space we decided to remove them and instead +% auto-load their definitions if they are actually encountered in some +% file. +% +% Thus the following code doesn't really belong to this file but I put +% it here for the moment until finally a documented version of +% \texttt{ltfss.dtx} is available. +% +% [ auto-loading not activated ] +% +% \begin{macro}{\new@fontshape} +% \begin{macro}{\subst@fontshape} +% \begin{macro}{\extra@def} +% \begin{macro}{\default@mextra} +% \begin{macro}{\define@mathalphabet} +% \begin{macro}{\define@mathgroup} +% These macros are the interfaces in NFSS1 which shouldn't be used +% any longer. We all define them to call the macro +% |\scan@fontshape| which is an internal macro that loads the real +% definitions and then to execute themselves again. Once this +% auto-loading has happened they have the definition shown below and +% thus execute their real code directly. +% \begin{macrocode} +%<*autoload> +\def\new@fontshape{\scan@fontshape\new@fontshape} +\def\subst@fontshape{\scan@fontshape\subst@fontshape} +\def\extra@def{\scan@fontshape\extra@def} +\def\default@mextra{\scan@fontshape\default@mextra} +\def\define@mathalphabet{\scan@fontshape\define@mathalphabet} +\def\define@mathgroup{\scan@fontshape\define@mathgroup} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\scan@fontshape} +% Here is the kernel definition for |\scan@fontshape| which loads +% the actual definitions from the file \texttt{nfsscmp.def}. +% \begin{macrocode} +\def\scan@fontshape{\input{nfsscmp.def}} +% \end{macrocode} +% \end{macro} +% +% +% The following definitions are now placed into the auto-load file. +% \begin{macrocode} +% \end{macrocode} +% +% Since we don't know when this file will be read in we need to +% provide ourselves with standard |\catcode| settings. This is done +% by placing all definitions in a group and calling +% |\nfss@catcodes|. But this macro will also disable spaces which +% isn't very appropriate for the following code because it contains +% a lot of helper messages. Therefore we change this back. +% \begin{macrocode} +\begingroup +\nfss@catcodes +\catcode`\ =10\relax +%</autoload> +%<*compat> +% \end{macrocode} +% +% \begin{macro}{\new@fontshape} +% The interface is now |\DeclareFontShape|. +% \begin{macrocode} +\gdef\new@fontshape#1#2#3#4{% + \warn@rel@i\new@fontshape\DeclareFontShape + \expandafter\scan@fontshape\@gobble#4<\@nil><<% + \DeclareFontShape U{#1}{#2}{#3}\reserved@f} +\@onlypreamble\new@fontshape +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\warn@rel@i} +% The warning message used above. +% \begin{macrocode} +\gdef\warn@rel@i#1#2{% + \@font@warning{*** NFSS release 1 command + \noexpand#1found\MessageBreak + *** Update by using release 2 command + \string#2.\MessageBreak + *** Recovery is probably possible}% +} +\@onlypreamble\warn@rel@i +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\scan@fontshape} +% This will scan the old font shape definition syntax. +% \begin{macrocode} +\gdef\scan@fontshape{% + \let\reserved@f\@empty + \let\reserved@e\@empty % holds last info + \scan@@fontshape +} +\@onlypreamble\scan@fontshape +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\scan@@fontshape} +% \begin{macrocode} +\gdef\scan@@fontshape#1>#2#3<{% + \ifx\@nil#1% + \edef\reserved@f{\reserved@f\reserved@e}% + \else + \def\reserved@b{#1}% nick names + \def\reserved@c{#3}% + \in@{ at}{#3}% + \ifin@ + \in@{pt}{#3}% not a proof but a good chance + \ifin@ +% \end{macrocode} +% We grap also everything after pt and discard it if people have +% forgotten to place a percent sign there. +% \changes{v2.1d}{1994/02/10}{scan away stuff after pt} +% \begin{macrocode} + \def\reserved@a##1 at##2pt##3\@nil{% + \def\reserved@b{##2}% + \def\reserved@c{##1}% + }% + \reserved@a#3\@nil + \fi + \fi + \ifnum 0<0#2 + \edef\reserved@d{subf*\reserved@c}% + \ifcase #2\or + \or + \else + \errmessage{*** What's this? NFSS release 0? ***}% + \fi + \else + \edef\reserved@d{#2\reserved@c}% + \fi + \ifx\reserved@d\reserved@e + \edef\reserved@f{\reserved@f<\reserved@b>}% + \else + \edef\reserved@f{\reserved@f\reserved@e<\reserved@b>}%add old info + \let\reserved@e\reserved@d + \fi + \expandafter\scan@@fontshape + \fi +} +\@onlypreamble\scan@@fontshape +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\subst@fontshape} +% This is now also handled by the extend syntax of +% |\DeclareFontShape|. +% \begin{macrocode} +\gdef\subst@fontshape#1#2#3#4#5#6{% + \warn@rel@i\subst@fontshape\DeclareFontShape + \DeclareFontShape{U}{#1}{#2}{#3}{<->sub*#4/#5/#6}{}} +\@onlypreamble\subst@fontshape +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\extra@def} +% This was replaced by |\DeclareFontFamily|. +% \begin{macrocode} +\gdef\extra@def#1#2#3{% + \warn@rel@i\extra@def\DeclareFontFamily + \DeclareFontFamily{U}{#1}{}% +} +\@onlypreamble\extra@def +% \end{macrocode} +% \end{macro} +% +% +% +% +% \begin{macro}{\default@mextra} +% The new name is |\DeclareFontEncodingDefaults| but in this case +% we don't feel comfortable with this either. +% \begin{macrocode} +\gdef\default@mextra{% + \warn@rel@i\default@mextra\DeclareFontEncodingDefaults +% \end{macrocode} +% We pick up the argument to |\default@mextra| implicitly as +% the second argument of |\DeclareFontEncodingDefaults|. +% \begin{macrocode} + \DeclareFontEncodingDefaults\relax +} +\@onlypreamble\default@mextra +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\preload@sizes} +% The new interface is |\DeclarePreloadSizes|. +% \begin{macrocode} +\gdef\preload@sizes{% + \warn@rel@i\preload@sizes\DeclarePreloadSizes + \DeclarePreloadSizes U% +} +\@onlypreamble\preload@sizes +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\err@rel@i} +% This macro is used in cases where emulation with NFSS2 features +% is not really possible. +% \begin{macrocode} +\gdef\err@rel@i#1#2{% + \@latex@error{*** NFSS release 1 command \noexpand#1found% + ^^J*** Recovery not possible. Use \string#2}% + {The new release of NFSS doesn't support the + \noexpand#1command^^Jany longer. + Please upgrade your file to the syntax of NFSS + release 2^^Jusing the \noexpand#2command.}% +% \end{macrocode} +% Let's die. +% \begin{macrocode} + \batchmode\input.\relax +} +\@onlypreamble\err@rel@i +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\newmathalphabet} +% \begin{macro}{\newmathalphabet@@} +% \begin{macro}{\newmathalphabet@@@} +% |\newmathalphabet| is the old form. +% \begin{macrocode} +\gdef\newmathalphabet{% + \if@no@font@opt + \@latex@error{*** NFSS release 1 command + \noexpand\newmathalphabet found% + ^^J \space*** Automatic recovery not possible.% + ^^J \space*** TYPE H for Help% + }% + {Please look at the file usrguide.tex for hints on + how to resolve this problem.}% + \else + \warn@rel@i\newmathalphabet\DeclareMathAlphabet + \fi + \@ifstar\newmathalphabet@@@ + \newmathalphabet@@} +\gdef\newmathalphabet@@#1{\DeclareMathAlphabet#1{U}{}{}{}} +\gdef\newmathalphabet@@@#1#2#3#4{% + \DeclareMathAlphabet{#1}{U}{#2}{#3}{#4}} +\@onlypreamble\newmathalphabet +\@onlypreamble\newmathalphabet@@ +\@onlypreamble\newmathalphabet@@@ +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\if@no@font@opt} +% \begin{macro}{\@no@font@optfalse} +% \begin{macrocode} +\global\let\if@no@font@opt\iftrue +\gdef\@no@font@optfalse{\let\if@no@font@opt\iffalse} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\define@mathalphabet} +% This is a case where dying is best. +% \begin{macrocode} +\gdef\define@mathalphabet{% + \err@rel@i\define@mathalphabet\DeclareMathAlphabet +} +\@onlypreamble\define@mathalphabet +% \end{macrocode} +% \end{macro} +% +% +% +% +% \begin{macro}{\define@mathgroup} +% And here is another one +% \begin{macrocode} +\gdef\define@mathgroup{% + \err@rel@i\define@mathgroup\DeclareSymbolFont +} +\@onlypreamble\define@mathgroup +%</compat> +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\addtoversion} +% |\addtoversion| is the old form. +% \begin{macrocode} +\def\addtoversion#1#2{% + \warn@rel@i\addtoversion\SetMathAlphabet + \SetMathAlphabet#2{#1}{U}} +\@onlypreamble\addtoversion +% \end{macrocode} +% \end{macro} +% +% +% +% That finishes the definitions for the old interfaces --- but first +% we better finish the group. +% \begin{macrocode} +%<*autoload> +\endgroup +%</autoload> +% \end{macrocode} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltfssdcl.dtx b/Master/texmf-dist/source/latex/base/ltfssdcl.dtx new file mode 100644 index 00000000000..f2aee76bdab --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltfssdcl.dtx @@ -0,0 +1,1521 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%%% From File: ltfssdcl.dtx +%% Copyright (C) 1989-1998 Frank Mittelbach and Rainer Sch\"opf, +%% all rights reserved. +% +%<*driver> +% \fi +% +% +\ProvidesFile{ltfssdcl.dtx} + [1998/08/17 v3.0i LaTeX Kernel (NFSS Declarative Interface)] +% \iffalse +\documentclass{ltxdoc} +\begin{document} +\DocInput{ltfssdcl.dtx} +\end{document} +%</driver> +% \fi +% +% \iffalse +%<+checkmem>\def\CHECKMEM{\tracingstats=2 +%<+checkmem> \newlinechar=`\^^J +%<+checkmem> \message{^^JMemory usage: \filename}\shipout\hbox{}} +%<+checkmem>\CHECKMEM +% \fi +% +% \CheckSum{1871} +% +% +% \GetFileInfo{ltfssdcl.dtx} +% \title{A new font selection scheme for \TeX{} macro packages\\ +% (Declarative Interface)\thanks +% {This file has version number +% \fileversion\ dated \filedate}} +% +% \author{Frank Mittelbach \and Rainer Sch\"opf} +% +% \maketitle +% +% This file contains the main implementation of the font selection +% scheme commands. See other parts of the \LaTeX\ distribution, or +% \emph{The \LaTeX\ Companion} for higher level documentation of these +% commands. +% +% \begin{quote} +% \textbf{Warning:} +% The macro documentation is still basically the documentation from the +% first NFSS release and therefore in some cases probably not +% completely accurate. +% \end{quote} +% +% \StopEventually{} +% +% \section{Interface Commands} +% +% \changes{v3.0i}{1998/08/17} +% {(RmS) Corrected minor glitches in changes entries.} +% \changes{v3.0b}{1995/06/15} +% {(DPC) minor documentation changes} +% \changes{v3.0a}{1995/05/24} +% {(DPC) Make file from previous file, latint.dtx 1995/05/21 v2.1t} +% +% +% \changes{v2.1o}{1994/11/22} +% {wrap long lines} +% \changes{v2.1m}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% \changes{v2.1j}{1994/05/29}{Use new error commands} +% \changes{v2.1h}{1994/05/13}{Removed file identification typeout} +% \changes{v2.1g}{1994/05/12}{Allow \cs{relax}'ed cmds to be declared} +% \changes{v2.1g}{1994/05/12}{Allow \cs{relax} as undefined command} +% \changes{v2.1e}{1994/04/28}{Removed all \cs{uppercase} in hex num +% parsing macros} +% \changes{v2.1d}{1994/04/18}{Removed surplus \cs{no@alphabet@error} +% (see fam.dtx)} +% +% +% +% \changes{v2.1f}{1994/05/03}{Renamed \cs{@@DeclareMathDelimiter} to +% \cs{@DeclareMathDelimiter}} +% \changes{v2.1c}{1994/03/13}{add 2ekernel module to omit repeated code} +% +% +% \begin{macro}{\in@} +% \begin{macro}{\ifin@} +% |\@in| is a utility macro with two arguments. It determines +% whether its first argument occurs in its second (after expanding +% it) and sets the switch |\if@in| accordingly. +% \begin{macrocode} +%<*2ekernel|autoload> +\def\in@#1#2{% + \def\in@@##1#1##2##3\in@@{% + \ifx\in@##2\in@false\else\in@true\fi}% + \in@@#2#1\in@\in@@} +\newif\ifin@ +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% Before the |\begin{document}| command several +% \meta{math versions} and \meta{math alphabet identifiers} may +% be declared. +% In principle, there should be exactly one family/series/shape +% combination be declared for each version/alphabet pair. +% But we want to allow for defaults as well for automagical +% filling of holes. +% +% While building the tables for math alphabet identifiers and math +% versions we keep several lists: +% \begin{itemize} +% \item the list of all math versions, |\version@list|, +% each entry prefixed by the control sequence |\version@elt|, +% i.e.\ this list has the following form +% \begin{quote} +% |\version@elt|\meta{version$_1$}^^A +% |\version@elt|\meta{version$_2$}\ldots\\\hspace*{\fill}^^A +% |\version@elt|\meta{version$_n$} +% \end{quote} +% \item the list of all math alphabet identifiers. Here every +% entry has the form:\\[2pt] +% \hspace*{\MacroIndent} +% |\group@elt|\meta{math group number}\\ +% \hspace*{\MacroIndent} +% |{{|\meta{default family}^^A +% |}{|\meta{default series}^^A +% |}{|\meta{default shape}|}}|. +% \item Each defined math alphabet identifier holds a list containing +% Information about the {\em versions\/} for which it is +% defined. This list has a more complicated structure: it +% looks as follows: +% \begin{quote} +% |\set@alpha|\meta{the alphabet identifier itself}\\ +% \hspace*{\MacroIndent} +% |\reserved@c|\meta{math version}\meta{font info}\\ +% \hspace*{\MacroIndent}\ldots\\ +% |\@nil| +% \end{quote} +% where \meta{font info} is either |\reserved@e| +% (if the combination is not defined yet) or +% \begin{quote} +% |{{|\meta{family}|}{|\meta{series}^^A +% |}{|\meta{shape}|}}| +% \end{quote} +% \end{itemize} +% +% \begin{macro}{\version@list} +% We initialize the version list to be empty. +% \begin{macrocode} +\let\version@list=\@empty +\@onlypreamble\version@list +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\version@elt} +% \begin{macrocode} +\let\version@elt\relax +\@onlypreamble\version@elt +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\new@mathversion} +% The macro |\new@mathversion| is called with the version control +% sequence as its argument. +% \begin{macrocode} +%\def\new@mathversion#1{% +% \end{macrocode} +% The first thing this macro does is to check if the version +% identifier is already present in |\version@list|. +% We enclose |\version@list| in braces since it might be empty +% (if no {\em version\/} is defined yet). But this means that +% we need a suitable number of |\expandafter| primitives. +% \begin{macrocode} +% \expandafter\in@\expandafter#1\expandafter{\version@list}% +% \ifin@ +% \end{macrocode} +% If so it prints an error message. +% The |\next| macro is used to get rid of the four characters +% |\mv@| that would otherwise appear at the begin of the +% version name in the error message. +% \begin{macrocode} +% \@latex@error{Math version +% `\expandafter\@gobblefour\string#1' +% already defined}\@eha +% \end{macrocode} +% Otherwise we have a new version, and we can proceed with +% entering it into the tables. +% We add it to |\version@list|. This is very easy: +% we define |\version@elt| (which is the delimiter in +% |\version@list|) to protect itself and the following token +% from being expanded and simply redefine |\version@list|. +% \begin{macrocode} +% \else +% \global\expandafter\newcount\csname c@\expandafter +% \@gobble\string#1\endcsname +% \global\csname c@\expandafter +% \@gobble\string#1\endcsname\@ne +% \def\version@elt{\noexpand\version@elt\noexpand}% +% \edef\version@list{\version@list\version@elt#1}% +% \end{macrocode} +% Then we prepare to enter the new version into all math +% alphabet identifier lists. Remember that these lists +% use |\reserved@c| as delimiter, and that there appears the +% control sequence |\reserved@e| that must not be expanded. +% Therefore we take suitable precautions. +% \begin{macrocode} +% \def\reserved@c{\noexpand\reserved@c\noexpand}% +% \let\reserved@e\relax +% \end{macrocode} +% We will now go through the |\alpha@list| to process every +% \meta{math alphabet identifier} in turn. +% Since this list has |\group@elt| as a delimiter we define +% this control sequence. It has three arguments as every +% entry consists of three items (as explained above). +% \begin{macrocode} +% \def\group@elt##1##2##3{% +% \end{macrocode} +% The first of these arguments is the \meta{math alphabet +% identifier}. We redefine it by appending the information +% about the new version at the end of the list contained in +% it. However, there is one subtlety: the definitions for +% |\reserved@c| and |\reserved@e| made above prevent the +% main part of the list from being expanded. But we still have +% to take care of the header and the trailer. To do this we +% remove the trailer by means of the macro |\remove@nil| +% which also protect the header from being expanded. Its +% definition is given below. Now we can prepare to add the +% new version. +% \begin{macrocode} +% \edef##1{\expandafter\remove@nil##1% +% \reserved@c +% #1% +% \reserved@e +% \noexpand\@nil}}% +% \end{macrocode} +% Finally we call |\alpha@list| which will now execute +% the macro |\group@elt| once for every defined \meta{math +% alphabet identifier}. And that's all for now. +% \begin{macrocode} +% \alpha@list +% \fi} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\alpha@list} +% As we explained above every entry in |\alpha@list| has +% the form\\[2pt] +% |\alpha@elt|\\\meta{alphabet identifier}\meta{internal +% group number}\meta{default font assignments}\ldots\\[2pt] +% We initialize it to |\@empty|. +% \begin{macrocode} +\let\alpha@list\@empty +\@onlypreamble\alpha@list +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\alpha@elt} +% \begin{macrocode} +\let\alpha@elt\relax +\@onlypreamble\alpha@elt +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\newgroup} +% Start the group (fam) allocation at 0. (Doesn't belong here.) +% \begin{macrocode} +\count18=-1 +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\stepcounter} +% \changes{v3.0f}{1997/11/13} +% {(DPC) Remove as never used. (Re)defined in ltcounts} +% \end{macro} +% +% \begin{macro}{\select@group} +% We surround |\select@group| with braces so that functions using it +% can be used directly after |_| or |^|. +% \changes{v2.1p}{1994/12/10}{Surround with braces (add fourth arg)} +% However, if we use oldstyle syntax where the math alphabet +% doesn't have arguments (ie if |\math@bgroup| is not |\bgroup|) we +% need to get rid of the extra group. +% \changes{v2.1q}{1995/04/02}{fix problem for pr/1275} +% \changes{v3.0g}{1997/11/20} +% {(DPC) inline use of \cs{stepcounter} (faster, and saves a csname +% per math version as no reset list)} +% \begin{macrocode} +\def\select@group#1#2#3#4{% + \ifx\math@bgroup\bgroup\else\relax\expandafter\@firstofone\fi + {% + \ifmmode + \ifnum\csname c@mv@\math@version\endcsname<\sixt@@n + \begingroup + \escapechar\m@ne + \getanddefine@fonts{\csname c@mv@\math@version\endcsname}#3% + \globaldefs\@ne \math@fonts + \endgroup + \init@restore@version + \xdef#1{\noexpand\use@mathgroup\noexpand#2% + {\number\csname c@mv@\math@version\endcsname}}% + \global\advance\csname c@mv@\math@version\endcsname\@ne + \else + \let#1\relax + \@latex@error{Too many math alphabets used in + version \math@version}% + \@eha + \fi + \else \expandafter\non@alpherr\fi + #1{#4}% + }% +} +\@onlypreamble\restore@mathversion +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\init@restore@version} +% \changes{v3.0e}{1996/07/26}{Removed \cs{ifrestore@version} switch +% and replaced by \cs{init@restore@version}} +% \begin{macrocode} +\def\init@restore@version{% + \global\let\init@restore@version\relax + \xdef\restore@mathversion + {\expandafter\noexpand\csname mv@\math@version\endcsname + \global\csname c@mv@\math@version\endcsname + \number\csname c@mv@\math@version\endcsname\relax}% + \aftergroup\dorestore@version +} +\@onlypreamble\init@restore@version +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\non@alpherr} +% \changes{v3.0c}{1995/10/10} +% {(DPC) autoload error message} +% \begin{macrocode} +%</2ekernel|autoload> +%<*2ekernel|autoerr> +\gdef\non@alpherr#1{\@latex@error{% +% \end{macrocode} +% Since the argument is the internal alphabet name, we have to get +% rid of the |@| in its name. The trick here is to use |\@firstoftwo| +% which is a \LaTeX{} macro which discards the second of two +% arguments. +% \begin{macrocode} + \expandafter\@firstoftwo\string#1 allowed only in math mode}\@ehd} +%</2ekernel|autoerr> +%<autoload>\def\non@alpherr{\@autoerr\non@alpherr} +%<*2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\dorestore@version} +% \begin{macrocode} +\def\dorestore@version + {\ifmmode + \aftergroup\dorestore@version + \else + \gdef\init@restore@version{% + \global\let\init@restore@version\relax + \xdef\restore@mathversion + {\expandafter\noexpand\csname mv@\math@version\endcsname + \global\csname c@mv@\math@version\endcsname + \number\csname c@mv@\math@version\endcsname\relax}% + \aftergroup\dorestore@version + }% + \begingroup + \let\getanddefine@fonts\@gobbletwo + \restore@mathversion + \endgroup + \fi}% +\@onlypreamble\dorestore@version +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\document@select@group} +% We surround |\select@group| with braces so that functions using it +% can be used directly after |_| or |^|. +% \changes{v2.1p}{1994/12/10}{Surround with braces (add fourth arg)} +% \changes{v2.1q}{1995/04/02}{fix problem for pr/1275} +% \changes{v3.0g}{1997/11/20} +% {(DPC) inline use of \cs{stepcounter} (faster, and saves a csname +% per math version as no reset list)} +% \begin{macrocode} +\def\document@select@group#1#2#3#4{% + \ifx\math@bgroup\bgroup\else\relax\expandafter\@firstofone\fi + {% + \ifmmode + \ifnum\csname c@mv@\math@version\endcsname<\sixt@@n + \begingroup + \escapechar\m@ne + \getanddefine@fonts{\csname c@mv@\math@version\endcsname}#3% + \globaldefs\@ne \math@fonts + \endgroup + \expandafter\extract@alph@from@version + \csname mv@\math@version\expandafter\endcsname + \expandafter{\number\csname + c@mv@\math@version\endcsname}% + #1% + \global\advance\csname c@mv@\math@version\endcsname\@ne + \else + \let#1\relax + \@latex@error{Too many math alphabets used + in version \math@version}% + \@eha + \fi + \else \expandafter\non@alpherr\fi + #1{#4}% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\process@table} +% \begin{macrocode} +\def\process@table{% + \def\cdp@elt##1##2##3##4{% + \@font@info{Checking defaults for + ##1/##2/##3/##4}% + \expandafter + \ifx\csname##1/##2/##3/##4\endcsname\relax +% \end{macrocode} +% Grouping is important for two reasons, first |\cdp@elt| will get +% redefined if |\Declare...| functions are executed within the +% external |.fd| file and secondly |\try@load@fontshape| changes a +% lot of catcodes without surrounding itself with a group. +% \begin{macrocode} + \begingroup + \def\f@encoding{##1}\def\f@family{##2}% + \try@load@fontshape + \endgroup + \fi + \expandafter + \ifx\csname##1/##2/##3/##4\endcsname\relax + \@latex@error{This NFSS system isn't set up properly}% + {For encoding scheme ##1 the defaults + ##2/##3/##4 do not form a valid font shape}% + \else + \@font@info{... okay}% + \fi}% + \cdp@list +% \end{macrocode} +% Now we make sure that |\error@fontshape| is okay. +% \begin{macrocode} + \begingroup + \escapechar\m@ne + \error@fontshape + \expandafter\ifx\csname \curr@fontshape\endcsname\relax + \begingroup + \try@load@fontshape + \endgroup + \fi + \expandafter\ifx\csname \curr@fontshape\endcsname\relax + \@latex@error{This NFSS system isn't set up properly}% + {The system maintainer forgot to specify a suitable + substitution + font shape using the \noexpand\DeclareErrorFont + command}% + \fi + \endgroup +% \end{macrocode} +% Set |\select@group| to its meaning used within the document body. +% \begin{macrocode} + \let\select@group\document@select@group +% \end{macrocode} +% Install the default font attributes they are currently pointing +% to error font shape. +% Don't use |\reset@font| since that would trigger |\selectfont|. +% \begin{macrocode} + \fontencoding{\encodingdefault}% + \fontfamily{\familydefault}% + \fontseries{\seriesdefault}% + \fontshape{\shapedefault}% +% \end{macrocode} +% kill all macros not longer needed. +% we need to add many more!!!!!! +% \begin{macrocode} + \everyjob{}% +} +\@onlypreamble\process@table +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%\@onlypreamble\set@mathradical +% \end{macrocode} +% +% \begin{macro}{\DeclareMathVersion} +% \begin{macrocode} +\def\DeclareMathVersion#1{% + \expandafter\new@mathversion\csname mv@#1\endcsname} +\@onlypreamble\DeclareMathVersion +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\new@mathversion} +% \begin{macrocode} +\def\new@mathversion#1{% + \expandafter\in@\expandafter#1\expandafter{\version@list}% + \ifin@ + \@font@info{Redeclaring math version + `\expandafter\@gobblefour\string#1'}% + \else + \global\expandafter\newcount\csname c@\expandafter + \@gobble\string#1\endcsname + \def\version@elt{\noexpand\version@elt\noexpand}% + \edef\version@list{\version@list\version@elt#1}% + \fi +% \end{macrocode} +% |\toks@| is used to gather all tokens for the math version. +% |\count@| will be used to count the math groups we add to this +% version. +% \begin{macrocode} + \toks@{}% + \count@\z@ +% \end{macrocode} +% Now we loop over |\group@list| to add all math groups defined so +% far to the version and at the same time to count them. +% \begin{macrocode} + \def\group@elt##1##2{% + \advance\count@\@ne + \addto@hook\toks@{\getanddefine@fonts##1##2}% + }% + \group@list +% \end{macrocode} +% We set the counter for this math version to the number of math +% groups found in |\group@list|. +% \begin{macrocode} + \global\csname c@\expandafter\@gobble\string#1\endcsname\count@ +% \end{macrocode} +% Now we loop over |\alpha@list| to add all math alphabets known so +% far. We have to distinugish the case that an alphabet by default +% should produce an error in new versions. +% \begin{macrocode} + \def\alpha@elt##1##2##3{% + \ifx##2\no@alphabet@error + \toks@\expandafter{\the\toks@\install@mathalphabet##1% + {\no@alphabet@error##1}}% + \else + \toks@\expandafter{\the\toks@\install@mathalphabet##1% + {\select@group##1##2##3}}% + \fi + }% + \alpha@list +% \end{macrocode} +% Finally we define the math version to expand to the contents of +% |\toks@|. +% \changes{v2.0e}{1993/08/18}{Exchanged names of encodings in warning +% message of \cs{SetSymbolFont}.} +% \begin{macrocode} + \xdef#1{\the\toks@}% +} +\@onlypreamble\new@mathversion +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DeclareSymbolFont} +% \begin{macrocode} +\def\DeclareSymbolFont#1#2#3#4#5{% + \@tempswafalse + \edef\reserved@b{#2}% + \def\cdp@elt##1##2##3##4{\def\reserved@c{##1}% + \ifx\reserved@b\reserved@c \@tempswatrue\fi}% + \cdp@list + \if@tempswa + \@ifundefined{sym#1}{% +% \end{macrocode} +% +% \begin{macrocode} + \expandafter\new@mathgroup\csname sym#1\endcsname + \expandafter\new@symbolfont\csname sym#1\endcsname + {#2}{#3}{#4}{#5}}% + {% +% \end{macrocode} +% +% \begin{macrocode} + \@font@info{Redeclaring symbol font `#1'}% +% \end{macrocode} +% \changes{v3.0f}{1997/11/13} +% {(DPC) Really update \cs{group@list} dont +% leave new version in \cs{toks@}. latex/2661} +% Update the group list. +% \begin{macrocode} + \def\group@elt##1##2{% + \noexpand\group@elt\noexpand##1% + \expandafter\ifx\csname sym#1\endcsname##1% + \expandafter\noexpand\csname#2/#3/#4/#5\endcsname + \else + \noexpand##2% + \fi}% + \xdef\group@list{\group@list}% +% \end{macrocode} +% Update the version list. +% \begin{macrocode} + \def\version@elt##1{% + \expandafter + \SetSymbolFont@\expandafter##1\csname#2/#3/#4/#5\expandafter + \endcsname \csname sym#1\endcsname + }% + \version@list + }% + \else + \@latex@error{Encoding scheme `#2' unknown}\@eha + \fi + } +\@onlypreamble\DeclareSymbolFont +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\group@list} +% \begin{macrocode} +\let\group@list\@empty +\@onlypreamble\group@list +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\group@elt} +% \begin{macrocode} +\let\group@elt\relax +\@onlypreamble\group@elt +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\new@symbolfont} +% \begin{macrocode} +\def\new@symbolfont#1#2#3#4#5{% + \toks@\expandafter{\group@list}% + \edef\group@list{\the\toks@\noexpand\group@elt\noexpand#1% + \expandafter\noexpand\csname#2/#3/#4/#5\endcsname}% + \def\version@elt##1{\toks@\expandafter{##1}% + \edef##1{\the\toks@\noexpand\getanddefine@fonts + #1\expandafter\noexpand\csname#2/#3/#4/#5\endcsname}% + \global\advance\csname c@\expandafter + \@gobble\string##1\endcsname\@ne + }% + \version@list +} +\@onlypreamble\new@symbolfont +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\SetSymbolFont} +% \begin{macrocode} +\def\SetSymbolFont#1#2#3#4#5#6{% + \@tempswafalse + \edef\reserved@b{#3}% + \def\cdp@elt##1##2##3##4{\def\reserved@c{##1}% + \ifx\reserved@b\reserved@c \@tempswatrue\fi}% + \cdp@list + \if@tempswa + \expandafter\SetSymbolFont@ + \csname mv@#2\expandafter\endcsname\csname#3/#4/#5/#6\expandafter + \endcsname \csname sym#1\endcsname + \else + \@latex@error{Encoding scheme `#3' unknown}\@eha + \fi +} +\@onlypreamble\SetSymbolFont +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\SetSymbolFont@} +% \begin{macrocode} +\def\SetSymbolFont@#1#2#3{% + \expandafter\in@\expandafter#1\expandafter{\version@list}% + \ifin@ + \expandafter\in@\expandafter#3\expandafter{\group@list}% + \ifin@ + \begingroup + \expandafter\get@cdp\string#2\@nil\reserved@a + \toks@{}% + \def\install@mathalphabet##1##2{% + \addto@hook\toks@{\install@mathalphabet##1{##2}}% + }% + \def\getanddefine@fonts##1##2{% + \ifnum##1=#3% + \addto@hook\toks@{\getanddefine@fonts#3#2}% + \expandafter\get@cdp\string##2\@nil\reserved@b + \ifx\reserved@a\reserved@b\else + \@font@warning{Encoding `\reserved@b' has changed + to `\reserved@a' for symbol font\MessageBreak + `\expandafter\@gobblefour\string#3' in the + math version `\expandafter + \@gobblefour\string#1'}% + \fi + \@font@info{% + Overwriting symbol font + `\expandafter\@gobblefour\string#3' in + version `\expandafter + \@gobblefour\string#1'\MessageBreak + \@spaces \expandafter\@gobble\string##2 --> + \expandafter\@gobble\string#2}% + \else + \addto@hook\toks@{\getanddefine@fonts##1##2}% + \fi}% + #1% + \xdef#1{\the\toks@}% + \endgroup + \else + \@latex@error{Symbol font `\expandafter\@gobblefour\string#3' + not defined}\@eha + \fi + \else + \@latex@error{Math version `\expandafter\@gobblefour\string#1' + is not + defined}{You probably mispelled the name of the math + version.^^JOr you have to specify an additional package.}% + \fi +} +\@onlypreamble\SetSymbolFont@ +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\get@cdp} +% \begin{macrocode} +\def\get@cdp#1#2/#3\@nil#4{\def#4{#2}} +\@onlypreamble\get@cdp +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DeclareMathAlphabet} +% \begin{macrocode} +\def\DeclareMathAlphabet#1#2#3#4#5{% + \@tempswafalse + \edef\reserved@b{#2}% + \def\cdp@elt##1##2##3##4{\def\reserved@c{##1}% + \ifx\reserved@b\reserved@c \@tempswatrue\fi}% + \cdp@list + \if@tempswa + \expandafter\ifx + \csname\expandafter\@gobble\string#1\endcsname + \relax + \new@mathalphabet#1{#2}{#3}{#4}{#5}% + \else +% \end{macrocode} +% Check if it is already a math alphabet. +% \begin{macrocode} + \edef\reserved@a{\noexpand\in@{\string\select@group}% + {\expandafter\meaning\csname @\expandafter + \@gobble\string#1\endcsname}}% + \reserved@a + \ifin@ + \@font@info{Redeclaring math alphabet \string#1}% + \def\version@elt##1{% + \expandafter\SetMathAlphabet@\expandafter + ##1\csname#2/#3/#4/#5\expandafter\endcsname +% \end{macrocode} +% \changes{???}{1994/04/18}{Pass correct arg (2 not 3)} +% \begin{macrocode} + \csname M@#2\expandafter\endcsname + \csname @\expandafter\@gobble\string#1\endcsname#1}% + \version@list + \else +% \end{macrocode} +% Check if it is a math alphabet defined via +% |\DeclareSymbolFontAlphabet|. +% \begin{macrocode} + \edef\reserved@a{\noexpand\in@{\string\use@mathgroup}% + {\expandafter\meaning\csname @\expandafter + \@gobble\string#1\endcsname}}% + \reserved@a + \ifin@ +% \end{macrocode} +% In that case overwriting is simple since there is nothing +% inserted in the math version macros. +% \begin{macrocode} + \@font@info{Redeclaring math alphabet \string#1}% + \new@mathalphabet#1{#2}{#3}{#4}{#5}% +% \end{macrocode} +% Otherwise panic. +% \begin{macrocode} + \else + \@latex@error{Command `\string#1' already defined}\@eha + \fi + \fi + \fi + \else + \@latex@error{Encoding scheme `#2' unknown}\@eha + \fi + } +\@onlypreamble\DeclareMathAlphabet +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\new@mathalphabet} +% \begin{macrocode} +\def\new@mathalphabet#1#2#3#4#5{% + \toks@\expandafter{\alpha@list}% + \edef#1{\expandafter\noexpand\csname @\expandafter + \@gobble\string#1\endcsname + \if/#5/% + \noexpand\no@alphabet@error + \noexpand\no@alphabet@error + \else + \expandafter\noexpand\csname M@#2\endcsname + \expandafter\noexpand\csname#2/#3/#4/#5\endcsname + \fi + }% + \toks2\expandafter{#1}% + \edef\alpha@list{\the\toks@\noexpand\alpha@elt\the\toks2}% + \def\version@elt##1{\toks@\expandafter{##1}% + \edef##1{\the\toks@\install@mathalphabet + \expandafter\noexpand + \csname @\expandafter\@gobble + \string#1\endcsname + {\if/#5/% + \noexpand\no@alphabet@error + \noexpand#1% + \else + \noexpand\select@group\the\toks2 + \fi}}% + }% + \version@list + \expandafter\edef\csname @\expandafter\@gobble + \string#1\endcsname{\if/#5/% + \noexpand\no@alphabet@error + \noexpand#1% + \else + \noexpand\select@group\the\toks2 + \fi}% + \edef#1{\noexpand\protect + \expandafter\noexpand\csname @\expandafter + \@gobble\string#1\endcsname}% +} +\@onlypreamble\new@mathalphabet +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\SetMathAlphabet} +% \begin{macrocode} +\def\SetMathAlphabet#1#2#3#4#5#6{% + \@tempswafalse + \edef\reserved@b{#3}% + \def\cdp@elt##1##2##3##4{\def\reserved@c{##1}% + \ifx\reserved@b\reserved@c \@tempswatrue\fi}% + \cdp@list + \if@tempswa + \expandafter\SetMathAlphabet@ + \csname mv@#2\expandafter\endcsname\csname#3/#4/#5/#6\expandafter + \endcsname \csname M@#3\expandafter\endcsname + \csname @\expandafter\@gobble\string#1\endcsname#1% + \else + \@latex@error{Encoding scheme `#3' unknown}\@eha + \fi +} +\@onlypreamble\SetMathAlphabet +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\SetMathAlphabet@} +% \begin{macrocode} +\def\SetMathAlphabet@#1#2#3#4#5{% + \expandafter\in@\expandafter#1\expandafter{\version@list}% + \ifin@ + \expandafter\in@\expandafter#4\expandafter{\alpha@list}% + \ifin@ + \begingroup + \toks@{}% + \def\getanddefine@fonts##1##2{% + \addto@hook\toks@{\getanddefine@fonts##1##2}% + }% + \def\reserved@c##1##2##3##4{% % for message below + \expandafter\@gobble\string##4}% + \def\install@mathalphabet##1##2{% + \ifx##1#4% + \addto@hook\toks@ + {\install@mathalphabet#4{\select@group#4#3#2}}% + \@font@info{Overwriting math alphabet + `\string#5' in version `\expandafter + \@gobblefour\string#1'\MessageBreak + \@spaces \reserved@c##2 --> + \expandafter\@gobble\string#2}% + \else + \addto@hook\toks@{\install@mathalphabet##1{##2}}% + \fi + }% + #1% + \xdef#1{\the\toks@}% + \endgroup + \else +% \end{macrocode} +% If the math alphabet was defined via |\DeclareSymbolFontAlphabet| +% we have remove its external definition and add it as a normal +% math alphabet to every version before trying to change it in one +% version. +% \changes{v2.1b}{1994/03/11}{Changed parameter template in temporary +% macro to catch check add below.} +% \begin{macrocode} + \edef\reserved@a{% + \noexpand\in@{\string\use@mathgroup}{\meaning#4}}% + \reserved@a + \ifin@ + \def\reserved@b##1\use@mathgroup##2##3{% + \def\reserved@b{##3}\def\reserved@c{##2}}% + \expandafter\reserved@b#4% + \begingroup + \def\install@mathalphabet##1##2{% + \addto@hook\toks@{\install@mathalphabet##1{##2}}% + }% + \def\getanddefine@fonts##1##2{% + \addto@hook\toks@{\getanddefine@fonts##1##2}% + \ifnum##1=\reserved@b + \expandafter + \addto@hook\expandafter\toks@ + \expandafter{\expandafter\install@mathalphabet + \expandafter#4\expandafter + {\expandafter\select@group\expandafter + #4\reserved@c##2}}% + \fi + }% + \def\version@elt##1{% + \toks@{}% + ##1% + \xdef##1{\the\toks@}% + }% + \version@list + \endgroup +% \end{macrocode} +% Put it into the |\alpha@list| with default `error' +% \begin{macrocode} + \expandafter\gdef\expandafter\alpha@list\expandafter + {\alpha@list + \alpha@elt #4\no@alphabet@error \no@alphabet@error}% + \gdef#4{\no@alphabet@error #5}% fake things :-) +% \end{macrocode} +% Then call the internal setting routine again: +% \begin{macrocode} + \SetMathAlphabet@{#1}{#2}{#3}#4#5% + \else + \@latex@error{Command `\string#5' not defined as a + math alphabet}% + {Use \noexpand\DeclareMathAlphabet to define it.}% + \fi + \fi + \else + \@latex@error{Math version `\expandafter\@gobblefour\string#1' + is not + defined}{You probably mispelled the name of the math + version.^^JOr you have to specify an additional package.}% + \fi +} +\@onlypreamble\SetMathAlphabet@ +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DeclareMathAlphabet} +% could do with more checks like allowing single number in |#4| +% lowercase in |#4| etc +% \begin{macrocode} +\def\DeclareMathAccent#1#2#3#4{% + \expandafter\in@\csname sym#3\expandafter\endcsname + \expandafter{\group@list}% + \ifin@ + \begingroup + \count\z@=#4\relax + \count\tw@\count\z@ + \divide\count\z@\sixt@@n + \count@\count\z@ + \multiply\count@\sixt@@n + \advance\count\tw@-\count@ + \if\relax\noexpand#1% is command? + \edef\reserved@a{\noexpand\in@{\string\mathaccent}{\meaning#1}}% + \reserved@a + \ifin@ + \expandafter\set@mathaccent + \csname sym#3\endcsname#1#2% + {\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}% + \@font@info{Redeclaring math accent \string#1}% + \else + \expandafter\ifx + \csname\expandafter\@gobble\string#1\endcsname + \relax + \expandafter\set@mathaccent + \csname sym#3\endcsname#1#2% + {\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}% + \else + \@latex@error{Command `\string#1' already defined}\@eha + \fi + \fi + \else + \@latex@error{Not a command name: `\noexpand#1'}\@eha + \fi + \endgroup + \else + \@latex@error{Symbol font `#3' is not defined}\@eha + \fi +} +\@onlypreamble\DeclareMathAccent +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\set@mathaccent} +% \begin{macrocode} +\def\set@mathaccent#1#2#3#4{% + \xdef#2{\mathaccent"\mathchar@type#3\hexnumber@#1#4\relax}} +\@onlypreamble\set@mathaccent +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DeclareMathSymbol} +% \begin{macrocode} +\def\DeclareMathSymbol#1#2#3#4{% + \expandafter\in@\csname sym#3\expandafter\endcsname + \expandafter{\group@list}% + \ifin@ + \begingroup + \count\z@=#4\relax + \count\tw@\count\z@ + \divide\count\z@\sixt@@n + \count@\count\z@ + \multiply\count@\sixt@@n + \advance\count\tw@-\count@ + \if\relax\noexpand#1% is command? + \edef\reserved@a{\noexpand\in@{\string\mathchar}{\meaning#1}}% + \reserved@a + \ifin@ + \expandafter\set@mathsymbol + \csname sym#3\endcsname#1#2% + {\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}% + \@font@info{Redeclaring math symbol \string#1}% + \else + \expandafter\ifx + \csname\expandafter\@gobble\string#1\endcsname + \relax + \expandafter\set@mathsymbol + \csname sym#3\endcsname#1#2% + {\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}% + \else + \@latex@error{Command `\string#1' already defined}\@eha + \fi + \fi + \else + \expandafter\set@mathchar + \csname sym#3\endcsname#1#2 + {\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}% + \fi + \endgroup + \else + \@latex@error{Symbol font `#3' is not defined}\@eha + \fi +} +\@onlypreamble\DeclareMathSymbol +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\set@mathchar} +% \begin{macrocode} +\def\set@mathchar#1#2#3#4{% + \global\mathcode`#2="\mathchar@type#3\hexnumber@#1#4\relax} +\@onlypreamble\set@mathchar +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\set@mathsymbol} +% \begin{macrocode} +\def\set@mathsymbol#1#2#3#4{% + \global\mathchardef#2"\mathchar@type#3\hexnumber@#1#4\relax} +\@onlypreamble\set@mathsymbol +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%\def\mathsymbol#1#2#3{% +% \@tempcnta=#3\relax +% \@tempcntb\@tempcnta +% \divide\@tempcnta\sixt@@n +% \count@\@tempcnta +% \multiply\count@\sixt@@n +% \advance\@tempcntb-\count@ +% \mathchar"\mathchar@type#1\hexnumber@#2% +% \hexnumber@\@tempcnta\hexnumber@\@tempcntb\relax} +% +%\def\DeclareMathAlphabetCharacter#1#2#3{% +% \DeclareMathSymbol{#1}7{#2}{#3}} +% \end{macrocode} +% +% \begin{macro}{\DeclareMathDelimiter} +% \changes{v2.1m}{1994/11/18} +% {(DPC) \cs{expandafter} instead of \cs{next}} +% \begin{macrocode} +\def\DeclareMathDelimiter#1{% + \if\relax\noexpand#1% + \expandafter\@DeclareMathDelimiter + \else + \expandafter\@xxDeclareMathDelimiter + \fi + #1} +\@onlypreamble\DeclareMathDelimiter +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xxDeclareMathDelimiter} +% \changes{v3.0h}{1998/04/15}{Macro added (pr/2662)} +% This macro checks if the second arg is a ``math type'' such +% as |\mathopen|. The undocumented original code didn't use math +% types when the delimiter was a single letter. +% For this reason the coding is a bit strange as it tries to +% support the undocumented syntax for compatibility reasons. +% \begin{macrocode} +\def\@xxDeclareMathDelimiter#1#2#3#4{% +% \end{macrocode} +% 7 is the default value returned in the case that |\mathchar@type| +% is passed something unexpected, like a math symbol font name. +% We locally move |\mathalpha| out of the way so if you use that +% the right branch is taken. This will still fail if an explicit +% number |7| is used! +% \begin{macrocode} + \begingroup + \let\mathalpha\mathord + \ifnum7=\mathchar@type{#2}% + \endgroup +% \end{macrocode} +% If this branch is taken we have old syntax (5 arguments). +% \begin{macrocode} + \expandafter\@firstofone + \else +% \end{macrocode} +% If this branch is taken |\mathchar@type| is different from 7 so +% we assume new syntax. In this case we also use the arguments to +% set up the letter as a math symbol for the case where it is not +% used as a delimiter. +% \begin{macrocode} + \endgroup + \DeclareMathSymbol#1{#2}{#3}{#4}% +% \end{macrocode} +% Then we arrange that |\@xDeclareMathDelimiter| only gets |#1|, +% |#3|, |#4| \ldots\ as it does not expect a math type as argument. +% \begin{macrocode} + \expandafter\@firstoftwo + \fi + {\@xDeclareMathDelimiter#1}{#2}{#3}{#4}} +\@onlypreamble\@xxDeclareMathDelimiter +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@DeclareMathDelimiter} +% \begin{macrocode} +\def\@DeclareMathDelimiter#1#2#3#4#5#6{% + \expandafter\in@\csname sym#3\expandafter\endcsname + \expandafter{\group@list}% + \ifin@ + \expandafter\in@\csname sym#5\expandafter\endcsname + \expandafter{\group@list}% + \ifin@ + \begingroup + \count\z@=#4\relax + \count\tw@\count\z@ + \divide\count\z@\sixt@@n + \count@\count\z@ + \multiply\count@\sixt@@n + \advance\count\tw@-\count@ + \edef\reserved@c{\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}% + % + \count\z@=#6\relax + \count\tw@\count\z@ + \divide\count\z@\sixt@@n + \count@\count\z@ + \multiply\count@\sixt@@n + \advance\count\tw@-\count@ + \edef\reserved@d{\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}% + % + \edef\reserved@a{\noexpand\in@{\string\delimiter}{\meaning#1}}% + \reserved@a + \ifin@ + \expandafter\set@mathdelimiter + \csname sym#3\expandafter\endcsname + \csname sym#5\endcsname#1#2% + \reserved@c\reserved@d + \@font@info{Redeclaring math delimiter \string#1}% + \else + \expandafter\ifx + \csname\expandafter\@gobble\string#1\endcsname + \relax + \expandafter\set@mathdelimiter + \csname sym#3\expandafter\endcsname + \csname sym#5\endcsname#1#2% + \reserved@c\reserved@d + \else + \@latex@error{Command `\string#1' already defined}\@eha + \fi + \fi + \endgroup + \else + \@latex@error{Symbol font `#5' is not defined}\@eha + \fi + \else + \@latex@error{Symbol font `#3' is not defined}\@eha + \fi +} +\@onlypreamble\@DeclareMathDelimiter +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xDeclareMathDelimiter} +% \begin{macrocode} +\def\@xDeclareMathDelimiter#1#2#3#4#5{% + \expandafter\in@\csname sym#2\expandafter\endcsname + \expandafter{\group@list}% + \ifin@ + \expandafter\in@\csname sym#4\expandafter\endcsname + \expandafter{\group@list}% + \ifin@ + \begingroup + \count\z@=#3\relax + \count\tw@\count\z@ + \divide\count\z@\sixt@@n + \count@\count\z@ + \multiply\count@\sixt@@n + \advance\count\tw@-\count@ + \edef\reserved@c{\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}% + % + \count\z@=#5\relax + \count\tw@\count\z@ + \divide\count\z@\sixt@@n + \count@\count\z@ + \multiply\count@\sixt@@n + \advance\count\tw@-\count@ + \edef\reserved@d{\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}% + \expandafter\set@@mathdelimiter + \csname sym#2\expandafter\endcsname\csname sym#4\endcsname#1% + \reserved@c\reserved@d + \endgroup + \else + \@latex@error{Symbol font `#4' is not defined}\@eha + \fi + \else + \@latex@error{Symbol font `#2' is not defined}\@eha + \fi +} +\@onlypreamble\@xDeclareMathDelimiter +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\set@mathdelimiter} +% We have to end the definition of a math delimiter like |\lfloor| +% with a space and not with |\relax| as we did before, because +% otherwise contructs involving |\abovewithdelims| will prematurely +% end (pr/1329) +% +% \changes{v2.1q}{1995/04/02}{fix pr/1329} +% \begin{macrocode} +\def\set@mathdelimiter#1#2#3#4#5#6{% + \xdef#3{\delimiter"\mathchar@type#4\hexnumber@#1#5% + \hexnumber@#2#6 }} +\@onlypreamble\set@mathdelimiter +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\set@@mathdelimiter} +% \begin{macrocode} +\def\set@@mathdelimiter#1#2#3#4#5{% + \global\delcode`#3="\hexnumber@#1#4\hexnumber@#2#5\relax} +\@onlypreamble\set@@mathdelimiter +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DeclareMathRadical} +% \begin{macrocode} +\def\DeclareMathRadical#1#2#3#4#5{% +% \end{macrocode} +% Below is a crude fix to make this macro work if |#1| is undefined +% or |\relax|. Should be improved! +% \changes{v2.1t}{1995/05/21}{Allow for undefined cs names} +% \begin{macrocode} + \expandafter\ifx + \csname\expandafter\@gobble\string#1\endcsname + \relax + \let#1\radical + \fi + \edef\reserved@a{\noexpand\in@{\string\radical}{\meaning#1}}% + \reserved@a + \ifin@ + \expandafter\in@\csname sym#2\expandafter\endcsname + \expandafter{\group@list}% + \ifin@ + \expandafter\in@\csname sym#4\expandafter\endcsname + \expandafter{\group@list}% + \ifin@ + \begingroup + \count\z@=#3\relax + \count\tw@\count\z@ + \divide\count\z@\sixt@@n + \count@\count\z@ + \multiply\count@\sixt@@n + \advance\count\tw@-\count@ + \edef\reserved@c{% + \hexnumber@{\count\z@}\hexnumber@{\count\tw@}}% + \count\z@=#5\relax + \count\tw@\count\z@ + \divide\count\z@\sixt@@n + \count@\count\z@ + \multiply\count@\sixt@@n + \advance\count\tw@-\count@ + \edef\reserved@d{% + \hexnumber@{\count\z@}\hexnumber@{\count\tw@}}% +% \end{macrocode} +% Coded inline instead of using |\set@mathradical| +% \begin{macrocode} +% \expandafter\set@mathradical +% \csname sym#2\expandafter\endcsname +% \csname sym#4\endcsname#1% +% \reserved@c\reserved@d + \xdef#1{\radical"\expandafter\hexnumber@ + \csname sym#2\endcsname\reserved@c + \expandafter\hexnumber@ + \csname sym#4\endcsname\reserved@d + \relax}% + \endgroup + \else + \@latex@error{Symbol font `#4' is not defined}\@eha + \fi + \else + \@latex@error{Symbol font `#2' is not defined}\@eha + \fi + \else + \@latex@error{Command `\string#1' already defined}\@eha + \fi +} +\@onlypreamble\DeclareMathRadical +% \end{macrocode} +% \end{macro} +% +% Definition below was wrong it contained |\delimiter| ! +% +%\begin{verbatim} +%\def\set@mathradical#1#2#3#4#5{% +% \xdef#3{\radical"\hexnumber@#1#4\hexnumber@#2#5\relax}} +%\end{verbatim} +% +% \begin{macro}{\mathalpha} +% just a dummy currently +% \begin{macrocode} +\let\mathalpha\relax +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\mathchar@type} +% \begin{macrocode} +\def\mathchar@type#1{% + \ifodd 2#11 #1\else % is this non-negative number? + \ifx#1\mathord 0\else + \ifx#1\mathop 1\else + \ifx#1\mathbin 2\else + \ifx#1\mathrel 3\else + \ifx#1\mathopen 4\else + \ifx#1\mathclose 5\else + \ifx#1\mathpunct 6\else + 7% % anything else is variable ord + \fi + \fi + \fi + \fi + \fi + \fi + \fi + \fi} +\@onlypreamble\mathchar@type +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DeclareSymbolFontAlphabet} +% \begin{macrocode} +\def\DeclareSymbolFontAlphabet#1#2{% + \expandafter\DeclareSymbolFontAlphabet@ + \csname @\expandafter\@gobble\string#1\endcsname{#2}#1} +\@onlypreamble\DeclareSymbolFontAlphabet +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DeclareSymbolFontAlphabet@} +% \begin{macrocode} +\def\DeclareSymbolFontAlphabet@#1#2#3{% +% \end{macrocode} +% We use the switch |\if@tempswa| to decide if we can declare this +% symbol font alphabet. +% \begin{macrocode} + \@tempswatrue +% \end{macrocode} +% First check if |#2| is known to be a symbol font +% \begin{macrocode} + \expandafter\in@\csname sym#2\expandafter\endcsname + \expandafter{\group@list}% + \ifin@ +% \end{macrocode} +% Check if |#1| is defined as a math alphabet defined via +% |\DeclareMathAlphabet|: +% \begin{macrocode} + \expandafter\in@\expandafter#1\expandafter{\alpha@list}% + \ifin@ +% \end{macrocode} +% If so remove it from the |\alpha@list| and from all math version +% macros. +% \begin{macrocode} + \@font@info{Redeclaring math alphabet \string#3}% + \toks@{}% + \def\alpha@elt##1##2##3{% + \ifx##1#1\else\addto@hook\toks@{\alpha@elt##1##2##3}\fi}% + \alpha@list + \xdef\alpha@list{\the\toks@}% +% \end{macrocode} +% Now we loop over all versions and remove the math alphabet: +% \begin{macrocode} + \def\version@elt##1{% + \begingroup + \toks@{}% + \def\getanddefine@fonts####1####2{% + \addto@hook\toks@{\getanddefine@fonts####1####2}}% + \def\install@mathalphabet####1####2{% + \ifx####1#1\else + \addto@hook\toks@{\install@mathalphabet + ####1{####2}}\fi}% + ##1% + \xdef##1{\the\toks@}% + \endgroup + }% + \version@list + \else +% \end{macrocode} +% If |#3| is not defined as a math alphabet check if it is defined +% at all: +% \begin{macrocode} + \expandafter\ifx + \csname\expandafter\@gobble\string#1\endcsname + \relax +% \end{macrocode} +% If it is undefined, fine otherwise check if it is a math alphabet +% defined via |\DeclareSymbolFontAlphabet|: +% \begin{macrocode} + \else + \edef\reserved@a{% + \noexpand\in@{\string\use@mathgroup}{\meaning#1}}% + \reserved@a + \ifin@ + \@font@info{Redeclaring math alphabet \string#3}% + \else +% \end{macrocode} +% Since the command |#3| is defined to be something which is not a +% math alphabet we have to skip redefining it. +% \begin{macrocode} + \@tempswafalse + \@latex@error{Command `\string#3' already defined}\@eha + \fi + \fi + \fi + \else +% \end{macrocode} +% Since the symbol font is not known we better skip defining this +% alphabet. +% \begin{macrocode} + \@tempswafalse + \@latex@error{Unknown symbol font `#2'}\@eha + \fi + \if@tempswa +% \end{macrocode} +% When we reach this point we are allowed to define |#1| to be a +% symbol font math alphabet. This means that we have to set it to +% \begin{quote} +% |\use@mathgroup| \meta{math-settings} |\sym|\meta{name} +% \end{quote} +% The \meta{math-settings} are the one for the encoding that is +% used in the font shape where |\sym|\meta{name} is pointing to. +% This means that we have to get it from the information stored in +% |\group@list|. Thus we loop through that list after defining +% |\group@elt| in a suitable way. +% \changes{v2.1b}{1994/03/11}{Added check against use of alphabet +% switch outside of math mode.} +% \begin{macrocode} + \def\group@elt##1##2{% + \expandafter\ifx\csname sym#2\endcsname##1% + \expandafter\reserved@a\string##2\@nil + \fi}% + \def\reserved@a##1##2/##3\@nil{% + \def\reserved@a{##2}}% + \group@list + \toks@{\relax\ifmmode \else \non@alpherr#1\fi}% + \edef#1{\the\toks@ + \noexpand\use@mathgroup + \expandafter\noexpand\csname M@\reserved@a\endcsname + \csname sym#2\endcsname}% + \def#3{\protect#1}% + \fi +} +\@onlypreamble\DeclareSymbolFontAlphabet@ +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltfssini.dtx b/Master/texmf-dist/source/latex/base/ltfssini.dtx new file mode 100644 index 00000000000..c815906b882 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltfssini.dtx @@ -0,0 +1,583 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%%% From File: ltfssini.dtx +%% Copyright (C) 1989-2001 Frank Mittelbach and Rainer Sch\"opf, +%% all rights reserved. +% +%<*driver> +% \fi +% +% +\ProvidesFile{ltfssini.dtx} + [2001/06/01 v3.0k LaTeX Kernel (NFSS Initialisation)] +% \iffalse +\documentclass{ltxdoc} +\begin{document} +\DocInput{ltfssini.dtx} +\end{document} +%</driver> +% \fi +% +% \iffalse +%<+checkmem>\def\CHECKMEM{\tracingstats=2 +%<+checkmem> \newlinechar=`\^^J +%<+checkmem> \message{^^JMemory usage: \filename}\shipout\hbox{}} +%<+checkmem>\CHECKMEM +% \fi +% +% \CheckSum{298} +% +% +% \GetFileInfo{ltfssini.dtx} +% \title{A new font selection scheme for \TeX{} macro packages\\ +% (Initialisation)\thanks +% {This file has version number +% \fileversion\ dated \filedate}} +% +% \author{Frank Mittelbach \and Rainer Sch\"opf} +% +% \maketitle +% +% This file contains the top level \LaTeX\ interface to the font +% selection scheme commands. See other parts of the \LaTeX\ +% distribution, or \emph{The \LaTeX\ Companion} for higher level +% documentation of these commands. +% +% \StopEventually{} +% +% +% \changes{v3.0i}{1998/08/17}{(RmS) Minor documentation fixes.} +% \changes{v3.0b}{1995/06/28} +% {(DPC) Fix documentation typos} +% \changes{v3.0a}{1995/05/24} +% {(DPC) Make file from previous file, lfonts.dtx 1995/05/23 v2.2e} +% +% +% +% \section{NFSS Initialisation} +% +% \iffalse +%<+checkmem>\CHECKMEM +% \fi +% +% +% \changes{v2.2a}{1994/10/14}{New coding for cfg files} +% \changes{v2.1a}{1993/12/03}{update for LaTeX2e} +% \changes{v1.2c}{1992/01/06}{added slitex code} +% \changes{v1.2d}{1992/03/21}{Renamed \cs{text} to \cs{nfss@text} +% to make it internal.} +% \changes{v1.2a}{1991/11/27}{All \cs{family}, \cs{shape} etc. renamed +% to \cs{fontfamily} etc.} +% \changes{v1.1i}{1990/04/02}{\cs{input} of files now handled +% by docstrip.} +% \changes{v1.1g}{1990/02/08}{Protected the commands +% \cs{family}, \cs{series}, +% \cs{shape}, \cs{size}, \cs{selectfont}, and \cs{mathversion}.} +% \changes{v1.1c}{1989/12/03}{Some internal macros renamed to make them +% inaccessible.} +% \changes{v1.1b}{1989/12/02}{\cs{rmmath} renamed to \cs{mathrm}} +% +% \changes{v1.0i}{1989/11/07}{All family, series, and shape names +% abbreviated.} +% \changes{v1.0g}{1989/05/22}{Lines shortened to 72 characters} +% \changes{v1.0f}{1989/04/29}{Corrections to \LaTeX\ tabular env. +% added.} +% \changes{v1.0e}{1989/04/27}{Definitions of \LaTeX\ symbols corrected.} +% \changes{v1.0d}{1989/04/26}{\cs{xpt} added.} +% \changes{v1.0c}{1989/04/21}{Changed to conform to fam.tex.} +% \changes{v1.0b}{1989/04/15}{\cs{mathfontset} renamed to +% \cs{mathversion.}} +% \changes{v1.0a}{1989/04/10}{Starting with version numbers! +% \cs{newif} for \cs{@tempswa} added since this switch is +% unkown at the time when this file is read in. +% (latex.tex is loaded later.) +% \cs{math@famname} changed to \cs{math@version.}} +% +% +% \changes{v2.1j}{1994/05/13}{Removed file identification typeout} +% +% Finally, there are six commands that are to be used in \LaTeX{} +% and that we will therefore protect against expansion at the +% wrong point: +% |\fontfamily|, |\fontseries|, |\fontshape|, |\fontsize|, +% |\selectfont|, and |\mathversion|. +% +% \changes{v2.1i}{1994/05/12}{Moved \cs{fontfamily} to fam.dtx} +% \changes{v2.1i}{1994/05/12}{Moved \cs{fontencoding} to fam.dtx} +% \changes{v2.1i}{1994/05/12}{Moved \cs{fontseries} to fam.dtx} +% \changes{v2.1i}{1994/05/12}{Moved \cs{fontshape} to fam.dtx} +% \changes{v2.1i}{1994/05/12}{Moved \cs{fontsize} to fam.dtx} +% \changes{v2.1i}{1994/05/12}{Moved \cs{mathversion} to fam.dtx} +% \changes{v2.1i}{1994/05/12}{Moved \cs{selectfont} to tracefnt.dtx} +% +% +% +% \subsection{Providing math \emph{versions}} +% +% \LaTeX{} provides two \emph{versions}. We call them +% \textsf{normal} and \textsf{bold}, respectively. +% \begin{macrocode} +\DeclareMathVersion{normal} +\DeclareMathVersion{bold} +% \end{macrocode} +% +% +% Now we define the standard font change commands. +% We don't allow the use of |\rmfamily| etc.\ in math mode. +% +% First the changes to another \emph{family}: +% \begin{macrocode} +\DeclareRobustCommand\rmfamily + {\not@math@alphabet\rmfamily\mathrm + \fontfamily\rmdefault\selectfont} +\DeclareRobustCommand\sffamily + {\not@math@alphabet\sffamily\mathsf + \fontfamily\sfdefault\selectfont} +\DeclareRobustCommand\ttfamily + {\not@math@alphabet\ttfamily\mathtt + \fontfamily\ttdefault\selectfont} +% \end{macrocode} +% Then the commands changing the \emph{series}: +% \begin{macrocode} +\DeclareRobustCommand\bfseries + {\not@math@alphabet\bfseries\mathbf + \fontseries\bfdefault\selectfont} +\DeclareRobustCommand\mdseries + {\not@math@alphabet\mdseries\relax + \fontseries\mddefault\selectfont} +\DeclareRobustCommand\upshape + {\not@math@alphabet\upshape\relax + \fontshape\updefault\selectfont} +% \end{macrocode} +% Then the commands changing the \emph{shape}: +% \begin{macrocode} +\DeclareRobustCommand\slshape + {\not@math@alphabet\slshape\relax + \fontshape\sldefault\selectfont} +\DeclareRobustCommand\scshape + {\not@math@alphabet\scshape\relax + \fontshape\scdefault\selectfont} +\DeclareRobustCommand\itshape + {\not@math@alphabet\itshape\mathit + \fontshape\itdefault\selectfont} +% \end{macrocode} +% +% +% +% We also have to define the {\em emphasize\/} font change command +% (i.e.\ |\em|). This command will look is the current font is +% sloped (i.e.\ has a positive |\fontdimen1|) and will then +% select either |\upshape| or |\itshape|. +% \changes{v1.2b}{1990/01/28}{Call to \cs{@nomath} added.} +% \begin{macrocode} +\DeclareRobustCommand\em + {\@nomath\em \ifdim \fontdimen\@ne\font >\z@ + \upshape \else \itshape \fi} +% \end{macrocode} +% +% +% \begin{macro}{\not@math@alphabet} +% This function generates an error message when it is called in +% math mode. The same function should be defined in +% \texttt{newlfont.sty}. +% \changes{v1.4d}{1992/09/21}{Macro defined.} +% \changes{v2.1e}{1994/01/17}{Message changed} +% \changes{v2.1f}{1994/01/18}{Message corrected} +% \changes{v2.1g}{1994/04/22}{Message changed again} +% \changes{v2.2d}{1995/04/02}{add \cs{noexpand} to second part of message} +% \begin{macrocode} +\def\not@math@alphabet#1#2{% + \relax + \ifmmode + \@latex@error{Command \noexpand#1invalid in math mode}% + {% + Please + \ifx#2\relax + define a new math alphabet^^J% + if you want to use a special font in math mode% + \else +% \end{macrocode} +% We have to a |\noexpand| below to prevent expansion of |#2|. In +% case of |#1| we can omit this (due to the current definition of +% robust commands since they do come out right there :-). +% \begin{macrocode} + use the math alphabet \noexpand#2instead of + the #1command% + \fi + . + }% + \fi} +% \end{macrocode} +% \end{macro} +% +% +% +% Finally we provide two abbreviations to switch to the \LaTeX{} +% \emph{versions}. +% \begin{macrocode} +\def\boldmath{\@nomath\boldmath + \mathversion{bold}} +\def\unboldmath{\@nomath\unboldmath + \mathversion{normal}} +% \end{macrocode} +% Here we switch to the default math version by defining the internal +% macro |\math@version|. We dare not to call |\mathversion| +% at this place because this would call |\glb@settings|. +% \begin{macrocode} +\def\math@version{normal} +% \end{macrocode} +% +% \subsection{Miscellaneous} +% +% \begin{macro}{\newfont} +% \changes{v1.2g}{1991/03/30}{Definition added.} +% \changes{v2.2e}{1995/05/23}{Font assignment made local again.} +% \begin{macro}{\symbol} +% \changes{v1.2g}{1991/03/30}{Definition added.} +% We start by defining a few macros that are part of +% standard \LaTeX's user interface. The use of these functions is +% not encouraged, but they will allow to process older documents +% without changes to the source. +% \begin{macrocode} +\def\newfont#1#2{\@ifdefinable#1{\font#1=#2\relax}} +\def\symbol#1{\char #1\relax} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@setfontsize} +% \begin{macro}{\@setsize} +% This abbreviation is used by \LaTeX's user level size changing +% commands, such as |\large|. +% \begin{macrocode} +\def\@setfontsize#1#2#3{\@nomath#1% +% \end{macrocode} +% For the benefit of people relying on keeping the name of the +% current font command saved in |\@currsize| we define it. To ensure +% that |\@setfontsize| keeps being robust we omit this assignment +% during times where |\protect| differs from |\@typeset@protect|. +% \changes{v1.4b}{1992/08/20}{Added \cs{@currsize}.} +% \changes{v2.2b}{1994/11/06}{Use \cs{@typeset@protect}} +% \begin{macrocode} + \ifx\protect\@typeset@protect + \let\@currsize#1% + \fi + \fontsize{#2}{#3}\selectfont} +% \end{macrocode} +% For compatibility we also define |\@setsize| the 209 command +% \begin{macrocode} +%<*compat> +\def\@setsize#1#2#3#4{\@setfontsize#1{#4}{#2}} +%</compat> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\oldstylenums} +% This macro implements old style numerals but only works if we +% assume that the standard math fonts are used. Thus it needs +% changing in case other math encodings are used. +% \begin{macrocode} +\def\oldstylenums#1{% + \begingroup +% \end{macrocode} +% Provide spacing using the interword space of the current font. +% \begin{macrocode} + \spaceskip\fontdimen\tw@\font +% \end{macrocode} +% Then switch to the math italic font. We don't change the current +% value of |\f@series| which means that you can use bold numerals +% if |\bfseries| is in force. As family we use |\rmdefault| which +% means that this only works if there exist an |OML| encoded +% version of that font or rather a corresponding |.fd| file (which +% is the case for standard \LaTeX{} fonts even though they only +% contain substitutions). +% \changes{v3.0j}{1999/02/12}{Use \cs{rmdefault} instead of \texttt{cmm} +% (pr/2954)} +% \begin{macrocode} + \usefont{OML}{\rmdefault}{\f@series}{it}% + \mathgroup\symletters #1% + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hexnumber@} +% To set up \LaTeX's special math character +% definitions we first provide a macro to generate hexadecimal +% numbers. It is a rather simple |\ifcase|. +% \changes{v?}{1992/11/13}{Made expandable.} +% \changes{v?}{1992/12/03}{Make it accept counters.} +% \begin{macrocode} +\def\hexnumber@#1{\ifcase\number#1 + 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or + 9\or A\or B\or C\or D\or E\or F\fi} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\nfss@text} +% \changes{v1.1e}{1990/01/25}{Macro added.} +% In it simplest form |\nfss@text| is an |\mbox|. This will +% produce unbreakable text outside math and inside math you will +% get text with the same fonts as outside. The only drawback is +% that such item won't change sizes in subscripts. But this +% behavior can be easily changed. With the \texttt{amstex} style +% option one will get a sub style called \texttt{amstext} which will +% redefine the |\nfss@text| macro to produce correct text in all +% sizes. +% +% We have to use |\def| instead of the shorter |\let| since +% |\mbox| is undefined when we reach this point. +% \changes{v1.1k}{1990/06/23}{Changed to \cs{mbox}.} +% \changes{v2.1n}{1994/05/17}{Added braces to allow use in subscripts} +% \begin{macrocode} +\def\nfss@text#1{{\mbox{#1}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\copyright} +% The definition of |\copyright| was changed so +% that it works in other type styles, +% and to make it robust. We leave the family untouched so that +% the copyright notice will come out differently if a different +% font family is in use. +% This command is commented out, since it is now defined in +% ltoutenc.dtx. +% \changes{v1.1m}{1991/03/28}{Extra braces added.} +% \changes{v2.1n}{1994/05/17}{Really add extra braces} +% \changes{v2.2c}{1994/12/02}{\cs{copyright} is now in ltoutenc. +% ASAJ} +% \begin{macrocode} +%\DeclareRobustCommand\copyright +% {{\ooalign{\hfil +% \raise.07ex\hbox{\mdseries\upshape c}\hfil\crcr +% \mathhexbox20D}}} +% \end{macrocode} +% \end{macro} +% +% \changes{v2.1a}{1993/11/24}{Removed \cs{xpt} stuff} +% +% +% \begin{macro}{\normalfont} +% \changes{v2.1a}{1993/11/11}{Macro added} +% \begin{macro}{\reset@font} +% \begin{macro}{\p@reset@font} +% \changes{v1.1n}{1991/08/26}{Macro introduced} +% The macro |\reset@font| is used in \LaTeX{} to switch to a standard +% font, in order to initialize the current font in situations where +% typesetting is done in a new visual context (e.g.\ in a +% footnote). We define it here to allow the test for the new +% \LaTeX{} version above but nevertheless are able to run all kind +% of mixtures. +% \changes{v1.1o}{1991/11/21}{Changed to protected version of macro.} +% \changes{v1.1o}{1991/11/21}{Added extra braces for robustness.} +% +% The user interface name for |\reset@font| is |\normalfont|: +% \changes{v2.1k}{1994/05/14}{Remove surplus braces} +% \changes{v3.0f}{1995/10/16}{Added \cs{relax} after \cs{usefont}, +% as the latter eats up spaces.} +% \begin{macrocode} +\DeclareRobustCommand\normalfont + {\usefont\encodingdefault + \familydefault + \seriesdefault + \shapedefault + \relax} +\let\reset@font\normalfont +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% We left out the special \LaTeX{} fonts which are not automatically +% included in the base version of the font selection since these fonts +% contain only a few characters which are also included in the AMS +% fonts so anybody who is using these fonts doesn't need them. +% But for compatibility reasons we will define these symbols. +% +% \changes{v2.1g}{1994/02/22}{Correct error mssage} +% \begin{macrocode} +\def\not@base#1{\@latex@error + {Command \noexpand#1not provided in base LaTeX2e}% + {Load the latexsym or the amsfonts package to + define this symbol}} +\def\mho{\not@base\mho} +\def\Join{\not@base\Join} +\def\Box{\not@base\Box} +\def\Diamond{\not@base\Diamond} +\def\leadsto{\not@base\leadsto} +\def\sqsubset{\not@base\sqsubset} +\def\sqsupset{\not@base\sqsupset} +\def\lhd{\not@base\lhd} +\def\unlhd{\not@base\unlhd} +\def\rhd{\not@base\rhd} +\def\unrhd{\not@base\unrhd} +% \end{macrocode} +% +% +% +% We now initialize all variables set by |\DeclareErrorFont|. These +% values are not really important since they will be overwritten +% later on by the definition in |fontdef.ltx|. +% +% However, if \texttt{fontdef.cfg} is corrupted then at least a +% hopefully suitable error font is present. +% +% \changes{v2.1k}{1994/05/14}{Init error font just before checking for +% fontdef.cfg} +% \begin{macrocode} +\DeclareErrorFont{OT1}{cmr}{m}{n}{10} %% don't modify this setting + %% overwrite it in fontdef.cfg + %% if necessary +% \end{macrocode} +% +% +% +% +% We now load the customizable parts of NFSS. +% \changes{v3.0d}{1995/07/19} +% {(DPC) TeX2 support} +% \changes{v3.0e}{1995/09/15} +% {(DPC) Modify TeX2 message} +% \changes{v3.0g}{1995/11/01} +% {(DPC) Switch meaning of \cs{@addtofilelist} for cfg files} +% \changes{v3.0h}{1996/12/06} +% {(DPC) Remove *** from messages internal/2338} +% \begin{macrocode} +\ifnum\inputlineno=\m@ne +% \end{macrocode} +% Still using \TeX2. need a configuration file to avoid setting the 8bit +% characters. +% \begin{macrocode} +\InputIfFileExists{fonttext.cfg} + {\typeout{====================================^^J% + ^^J% + Local config file fonttext.cfg used^^J% + ^^J% + ====================================}% + \def\@addtofilelist##1{\xdef\@filelist{\@filelist,##1}}% + } + {\typeout{!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J% + !^^J% + ! You MUST use a fonttext.cfg file!^^J% + ! As you are still using TeX2!!!!!^^J% + !^^J% + ! See the documentation file tex2.txt^^J% + !^^J% + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}% + \batchmode \@@end} +\else +% \end{macrocode} +% With \TeX3 can use the standard |ltx| file if no configuration file +% exists. +% \begin{macrocode} +\InputIfFileExists{fonttext.cfg} + {\typeout{====================================^^J% + ^^J% + Local config file fonttext.cfg used^^J% + ^^J% + ====================================}% + \def\@addtofilelist##1{\xdef\@filelist{\@filelist,##1}}% + } + {\input{fonttext.ltx}} +\fi +\let\@addtofilelist\@gobble +% \end{macrocode} +% +% Ditto for math although I don't think that we will get a lot of +% customisation :-) +% \begin{macrocode} +\InputIfFileExists{fontmath.cfg} + {\typeout{====================================^^J% + ^^J% + Local config file fontmath.cfg used^^J% + ^^J% + ====================================}% + \def\@addtofilelist##1{\xdef\@filelist{\@filelist,##1}}% + } + {\input{fontmath.ltx}} +\let\@addtofilelist\@gobble +% \end{macrocode} +% +% Then we preload several fonts. This file might be customized +% \emph{without} changing the behavior of the format (i.e.\ necessary +% font definitions will be loaded at runtime if they are not +% preloaded). This is done in the file \texttt{preload.ltx}. +% \begin{macrocode} +\InputIfFileExists{preload.cfg} + {\typeout{====================================^^J% + ^^J% + Local config file preload.cfg used^^J% + ^^J% + =====================================}% + \def\@addtofilelist##1{\xdef\@filelist{\@filelist,##1}}% + } + {\input{preload.ltx}} +\let\@addtofilelist\@gobble +% \end{macrocode} +% +% +% \begin{macro}{\@acci} +% \begin{macro}{\@accii} +% \begin{macro}{\@acciii} +% \changes{v2.1m}{1994/05/16}{Define saved versions of accents} +% We also save the values of some accents in |\@acci|, |\@accii| +% and |\@acciii| so they can be restored by a |minipage| inside a +% |tabbing| environment. +% \begin{macrocode} +\let\@acci\' \let\@accii\` \let\@acciii\= +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\cal} +% \changes{v3.0a}{1995/05/24} +% {(DPC) Remove definition} +% \begin{macro}{\mit} +% \changes{v3.0a}{1995/05/24} +% {(DPC) Remove definition} +% Here were the two old \meta{alphabet identifiers}. +% \end{macro} +% \end{macro} +% +% +% \iffalse +%<+checkmem>\CHECKMEM +% \fi +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltfsstrc.dtx b/Master/texmf-dist/source/latex/base/ltfsstrc.dtx new file mode 100644 index 00000000000..3b77cfcf22c --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltfsstrc.dtx @@ -0,0 +1,1887 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltfsstrc.dtx +%% Copyright (C) 1989-97 by Frank Mittelbach and Rainer Sch\"opf. +%% Copyright (C) 1994-97 by LaTeX3 project. All rights reserved. +% +%<package>\NeedsTeXFormat{LaTeX2e}[1995/05/16] +%<package>\ProvidesPackage{tracefnt} +%<package> [1997/05/29 v3.0j Standard LaTeX package (font tracing)] +% \fi +% \ProvidesFile{ltfsstrc.dtx} +% [1997/05/29 v3.0j LaTeX Kernel (NFSS tracing)] +% +% \iffalse +%<+checkmem>\CHECKMEM +% \fi +% +% \CheckSum{1041} +% +% +% +% \changes{v3.0g}{1995/11/28} +% {documentation fixes} +% \changes{v3.0f}{1995/10/22}{Added `genb' and `sgenb' size functions +% to support new DC font naming scheme.} +% \changes{v3.0e}{1995/10/20} +% {(DPC) Modify autoload code} +% \changes{v3.0d}{1995/10/04} +% {(DPC) Modify autoload code} +% \changes{v3.0b}{1995/05/24} +% {(DPC) Fix \cs{ProvidesFile} usage} +% \changes{v3.0a}{1995/05/24} +% {(DPC) Make file from previous file, tracefnt 1995/05/16 v2.3o} +% +% \changes{v2.3m}{1994/11/18} +% {\cs{next} to \cs{reserved@f}} +% \changes{v2.3l}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% \changes{v2.3i}{1994/05/20}{Use new error command names} +% \changes{v2.3g}{1994/05/13}{Removed typeouts as +% \cs{ProvidesPackage} writes to log.} +% \changes{v2.3e}{1994/04/27}{Corrected item that was forgotten +% in last change.} +% \changes{v2.3d}{1994/04/18}{Changed to new error/warning scheme} +% \changes{v2.3a}{1994/01/17}{New math font setup} +% \changes{v2.2a}{1993/11/11}{Option concept added for LaTeX2e} +% \changes{v2.1j}{1993/09/15}{Corrected spelling of \cs{noxpand}.} +% \changes{v2.1i}{1993/09/02}{Corrected name of sgen size function.} +% \changes{v2.1h}{1993/07/16}{Changed layout of info messages} +% \changes{v2.1b}{1993/03/18} +% {Changed all \cs{@tempdimb} in \cs{@tempdimx} +% to avoid killing \cs{numberline}} +% \changes{v2.1b}{1993/03/18} +% {Changed all \cs{@tempdima} in \cs{@tempdimb} +% to avoid killing \cs{numberline}} +% \changes{v1.0l}{1990/04/01}{Part of code moved to fam.dtx.} +% \changes{v1.0k}{1990/03/14}{Added code for TeX3.} +% \changes{v1.0h}{1990/01/18}{\cs{tracingfonts} meaning changed.} +% +% \newcommand\module[1]{\texttt{#1}} +% \providecommand{\dst}{\textsc{DocStrip}} +% \newcommand\Loption[1]{\texttt{#1}} +% +% \GetFileInfo{ltfsstrc.dtx} +% \title{The \texttt{tracefnt} package\thanks +% {This file has version number \fileversion, dated +% \filedate.} \\ +% for use with the new font selection scheme} +% \author{Frank Mittelbach \and Rainer Sch\"opf} +% +% +% \maketitle +% +% \section{Introduction} +% +% This package contains the code for tracing font loading and font +% changes. It basically overlays some of the low-level functions of +% NFSS with additional code used for tracing. +% +% The package accepts the following options: +% \begin{description} +% \item[errorshow] Write all information about font changes etc.\ +% only to the transcript file unless an error happens. This means +% that information about font substitution will not be shown on the +% terminal. +% +% \item[warningshow] Show all NFSS warnings on the terminal. This +% setting corresponds to the default behaviour of NFSS if the +% \texttt{tracefnt} package is \emph{not} loaded! +% +% \item[infoshow] Show all NFSS warning and all NFSS info +% messages (that are normally only written to the transcript file) +% also on the terminal. This is the default if the \texttt{tracefnt} +% package is loaded. +% +% \item[debugshow] In addition to \texttt{infoshow} show also +% changing of math fonts as far as possible (this option can produce a +% large amount of output. +% +% \item[loading] Show the name of external fonts when they are +% loaded. This option shows only ``newly'' loaded fonts not those +% already preloaded in the format or the class file before the +% \texttt{tracefnt} package became active. +% +% \item[pausing] +% Turn all font warnings into errors so that \LaTeX{} will stop. +% +% \end{description} +% +% +% \StopEventually{} +% +% \section{A driver for this document} +% +% The next bit of code contains the documentation driver file for +% \TeX{}, i.e., the file that will produce the documentation you +% are currently reading. It will be extracted from this file by the +% \dst{} program. +% +% When this file is processed directly by \LaTeX{} this will +% produce the documentation as well. +% +% \begin{macrocode} +%<*driver> +\documentclass{ltxdoc} + + +%\OnlyDescription % comment out for implementation details + +\begin{document} + \DocInput{ltfsstrc.dtx} +\end{document} +%</driver> +% \end{macrocode} +% +% +% \section{The Implementation} +% +% \begin{quote} +% \textbf{Warning:} Read the macro documentation with a grain of +% salt. It is still basically the documentation from the first NFSS +% release and therefore in some cases probably not completely +% accurate. +% \end{quote} +% +% If we are making a package file it is a good idea to test whether +% we are running under 2e. +% This code is actually placed at the very beginning of this file +% for easier maintenance, thus commented out here. +% \begin{macrocode} +%<*package> +%\NeedsTeXFormat{LaTeX2e} +%\ProvidesPackage{tracefnt}[??/??/?? v?.?? +% Standard LaTeX package (font tracing)] +%</package> +% \end{macrocode} +% +% +% The \texttt{debug} module makes use of commands contained in a +% special package file named \texttt{trace.sty}.\footnote{This package +% is not in distribution at the moment (and probably doesn't any +% longer work). Think of this part of the code as being historical +% artefacts.} +% \begin{macrocode} +%<+debug> \input trace.sty +% \end{macrocode} +% +% +% \section{Handling Options} +% +% \begin{macro}{\tracingfonts} +% Here is the definition of the integer register for the font +% trace. As a default in a package file we use $1$ to give error +% messages if fonts are substituted. If this code is used for +% debugging or tracing reasons in the format file (i.e.\ in +% \texttt{fam.dtx}) we use $0$ as the default. But if no font +% trace is used we build a definition that will produce a warning +% message. +% \changes{v1.0l}{1990/04/01} +% {Check if \cs{tracingfonts} already defined.} +% \changes{v1.0o}{1990/04/01} +% {Check if \cs{tracingfonts} defined removed again.} +% \begin{macrocode} +%<*2ekernel|autoload> +\def\tracingfonts{% + \@font@warning{Command \noexpand\tracingfonts + not provided.\MessageBreak + Use the `tracefnt' package.\MessageBreak Command found:}% + \count@} +%</2ekernel|autoload> +% \end{macrocode} +% The |\count@| in the line above will remove the number after +% |\tracingfonts|. Note that this definition will be overwritten be +% the next line if one of these modules are included. +% \begin{macrocode} +%<*package,trace,debug> +\newcount\tracingfonts +\tracingfonts=0 +%</package,trace,debug> +% \end{macrocode} +% \end{macro} +% +% +% The option \Loption{errorshow} turns off all warnings so that only +% real errors are shown. \Loption{warningshow} corresponds to the +% NFSS default (when \texttt{tracefnt} is not loaded). +% \Loption{infoshow} is the default for this package here; and +% \Loption{debugshow}, \Loption{loading}, and +% \Loption{pausing} extend the amount of information even further. +% \changes{v2.3o}{1995/05/13} +% {Use single hash mark in \cs{DeclareOption}} +% \begin{macrocode} +%<*package> +\DeclareOption{errorshow}{% + \def\@font@info#1{% + \GenericInfo{(Font)\@spaces\@spaces\@spaces\space\space}% + {LaTeX Font Info: \space\space\space#1}}% + \def\@font@warning#1{% + \GenericInfo{(Font)\@spaces\@spaces\@spaces\space\space}% + {LaTeX Font Warning: #1}}% + } +% \end{macrocode} +% +% \begin{macrocode} +\DeclareOption{warningshow}{% + \def\@font@info#1{% + \GenericInfo{(Font)\@spaces\@spaces\@spaces\space\space}% + {LaTeX Font Info: \space\space\space#1}}% + \def\@font@warning#1{% + \GenericWarning{(Font)\@spaces\@spaces\@spaces\space\space}% + {LaTeX Font Warning: #1}}% + } +% \end{macrocode} +% +% \begin{macrocode} +\DeclareOption{infoshow}{% + \def\@font@info#1{% + \GenericWarning{(Font)\@spaces\@spaces\@spaces\space\space}% + {LaTeX Font Info: \space\space\space#1}}% + \def\@font@warning#1{% + \GenericWarning{(Font)\@spaces\@spaces\@spaces\space\space}% + {LaTeX Font Warning: #1}}% + } +% \end{macrocode} +% +% \begin{macrocode} +\DeclareOption{loading}{% + \tracingfonts\tw@ + } +% \end{macrocode} +% +% \begin{macrocode} +\DeclareOption{debugshow}{% + \ExecuteOptions{infoshow}% + \tracingfonts\thr@@ + } +% \end{macrocode} +% +% \changes{v3.0j}{1997/05/29}{Replaced \texttt{\symbol{92}\symbol{92}} +% by \cs{MessageBreak}, as suggested by Donald Arseneau.} +% \begin{macrocode} +\DeclareOption{pausing}{% + \def\@font@warning#1{% + \GenericError + {(Font)\@spaces\@spaces\@spaces\space\space}% + {LaTeX Font Warning: #1}% + {See the LaTeX Companion for details.}% + {I'll stop for every LaTeX Font Warning because + you requested\MessageBreak the `pausing' option + to the tracefnt package.}}% + } +% \end{macrocode} +% We make |infoshow| the default, which in turn defines +% |\font@warning| and |\font@info|. +% \begin{macrocode} +\ExecuteOptions{infoshow} +\ProcessOptions +%</package> +% \end{macrocode} +% +% We also need a default definition inside the kernel: +% \begin{macrocode} +%<*2ekernel|autoload> +\def\@font@info#1{% + \GenericInfo{(Font)\@spaces\@spaces\@spaces\space\space}% + {LaTeX Font Info: \space\space\space#1}}% +\def\@font@warning#1{% + \GenericWarning{(Font)\@spaces\@spaces\@spaces\space\space}% + {LaTeX Font Warning: #1}}% +%</2ekernel|autoload> +% \end{macrocode} +% +% +% \section{Macros common to \texttt{fam.tex} and \texttt{tracefnt.sty}} +% +% In the first versions of \texttt{tracefnt.dtx} some macros of +% \texttt{fam.dtx}\footnote{This file is currently not distributed in +% documented form. Its code is part of \texttt{ltfss.dtx}.} +% were redefined to included the extra tracing +% information. Now these macros are all defined in this file (i.e.\ +% removed from \texttt{fam.dtx}) and different production versions can +% be obtained simply by specifying a different set of modules to +% include when generating \texttt{ltfss.dtx}. +% +% +% +% \subsection{General font loading} +% +% +% \begin{macro}{\extract@font} +% +% This macro organizes the font loading. +% It first calls |\get@external@font| +% which will return in |\external@font| the name of the external +% font file (the \texttt{.tfm}) as it was determined by the NFSS +% tables. +% \begin{macrocode} +%<*2ekernel|package|autoload> +\def\extract@font{% + \get@external@font +% \end{macrocode} +% Then the external font is loaded and assigned to the font +% identifier stored inside |\font@name| +% (for this reason we need |\expandafter|). +% \begin{macrocode} + \global\expandafter\font\font@name\external@font\relax +% \end{macrocode} +% When tracing we typeout the internal and external font name. +% \changes{v1.0k}{1990/03/14}{Added code for TeX3.} +% \begin{macrocode} +%<*trace> + \ifnum \tracingfonts >\@ne + \@font@info{External font `\external@font' + loaded as\MessageBreak \font@name}\fi +%</trace> +% \end{macrocode} +% Finally we call the corresponding ``loading action'' macros to +% finish things. First the font is locally selected to allow the +% use of |\font| inside the loading action macros. +% \begin{macrocode} + \font@name \relax +% \end{macrocode} +% The next two lines execute the ``loading actions'' for the +% family and then for the individual font shape. +% \begin{macrocode} + \csname \f@encoding+\f@family\endcsname + \csname\curr@fontshape\endcsname + \relax + } +%</2ekernel|package|autoload> +% \end{macrocode} +% The |\relax| at the end needs to be explained. +% This is inserted to prevent \TeX{} from scanning too far +% when it is executing the replacement text of the loading +% code macros. +% \end{macro} +% +% +% \begin{macro}{\get@external@font} +% This function tries to find an external font name. It will place +% the name into the macro +% |\external@font|. If no font is found it will return the one +% that was defined via |\DeclareErrorFont|. +% \begin{macrocode} +%<*2ekernel|autoload> +\def\get@external@font{% +% \end{macrocode} +% We don't know the external font name at the beginning. +% \begin{macrocode} + \let\external@font\@empty + \edef\font@info{\expandafter\expandafter\expandafter\string + \csname \curr@fontshape \endcsname}% + \try@size@range +% \end{macrocode} +% If this failed, we'll try to substitute another size of the same +% font. This is done by the |\try@size@substitution| macro. It +% ``knows about'' |\do@extract@font|, |\font@name|, |\f@size|, and +% so on. +% \begin{macrocode} + \ifx\external@font\@empty + \try@size@substitution + \ifx\external@font\@empty + \@latex@error{Font \expandafter \string\font@name\space + not found}\@eha + \error@fontshape + \get@external@font + \fi\fi +} +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% +% \changes{v1.0j}{1990/02/18} +% {Redefine unprotected version \cs{p@selectfont} +% instead of \cs{selectfont}.} +% +% +% \begin{macro}{\selectfont} +% \changes{v1.1a}{1989/12/16}{Changed order of calls.} +% \changes{v2.3f}{1994/05/12}{Use \cs{DeclareRobustCommand}} +% The macro |\selectfont| is called whenever a font change must +% take place. +% \begin{macrocode} +%<*2ekernel|package|autoload> +\DeclareRobustCommand\selectfont + {% +% \end{macrocode} +% When \module{debug} is specified we actually want something like +% `undebug'. The font selection is now stable so that using +% |\tracingall| on some other macros will show us a lot of unwanted +% information about font loading. Therefore we disable tracing during +% font loading as long as |\tracingfonts| is less than $4$. +% \changes{v1.0m}{1990/04/05} +% {Call \cs{tracingon} only if \cs{tracingfonts} greater than 3.} +% \changes{v1.0n}{1990/05/05}{\cs{tracingon} with new syntax.} +% \begin{macrocode} +%<+debug> \pushtracing +%<+debug> \ifnum\tracingfonts<4 \tracingoff +%<+debug> \else \tracingon\p@selectfont \fi +% \end{macrocode} +% If |\baselinestretch| was redefined by the user it will not +% longer match its internal counterpart |\f@linespread|. If so we +% call |\set@fontsize| to prepare |\size@update|. +% \begin{macrocode} + \ifx\f@linespread\baselinestretch \else + \set@fontsize\baselinestretch\f@size\f@baselineskip \fi +% \end{macrocode} +% Then we generate the internal name of the font +% by concatenating {\em family}, {\em series}, +% {\em shape}, and current {\em size}, +% with slashes as delimiters between them. +% This is much more readable than standard +% \LaTeX's |\twfbf|, etc. +% We define |\font@name| globally, as always. +% The reason for this is explained later on. +% \changes{v2.0b}{1992/07/26}{} +% \begin{macrocode} + \xdef\font@name{% + \csname\curr@fontshape/\f@size\endcsname}% +% \end{macrocode} +% We call the macro |\pickup@font| which will load the font if +% necessary. +% \begin{macrocode} + \pickup@font +% \end{macrocode} +% Then we select the font. +% \begin{macrocode} + \font@name +% \end{macrocode} +% If |\tracingfonts| is +% greater than 2 we also show the font switch. +% We do this before |\glb@settings| is called since this +% macro might redefine |\font@name|. +% \changes{v1.0k}{1990/03/14}{Added code for TeX3.} +% \changes{v1.0i}{1990/02/16}{Changed \cs{f@size} to \cs{lcl@currsize} +% (see fam file).} +% \begin{macrocode} +%<*trace> + \ifnum \tracingfonts>\tw@ + \@font@info{Switching to \font@name}\fi +%</trace> +% \end{macrocode} +% Finally we call |\size@update|. This macro is normally empty but +% will contain actions (like setting the |\baselineskip|) that have +% to be carried out when the font size, the base |\baselineskip| or +% the |\baselinestretch| have changed. +% \begin{macrocode} + \size@update +% \end{macrocode} +% A similar function is called to handle anything related to +% encoding updates. This one is changed from |\relax| by +% |\fontencoding|. +% \changes{v2.3h}{1994/05/14}{Added \cs{enc@update}} +% \begin{macrocode} + \enc@update +% \end{macrocode} +% Just before ending this macro we have to pop the tracing stack +% if it was pushed before. +% \begin{macrocode} +%<+debug> \poptracing + } +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\set@fontsize} +% The macro |\set@fontsize| does the actual work. First it assigns +% new values to |\f@size|, |\f@baselineskip| and |\f@linespread|. +% \begin{macrocode} +\def\set@fontsize#1#2#3{% + \@defaultunits\@tempdimb#2pt\relax\@nnil + \edef\f@size{\strip@pt\@tempdimb}% + \@defaultunits\@tempskipa#3pt\relax\@nnil + \edef\f@baselineskip{\the\@tempskipa}% + \edef\f@linespread{#1}% +% \end{macrocode} +% For backward compatibility and for later testing within +% |\selectfont| the internal value of |\f@linespread| is passed +% back to |\baselinestretch|. +% \begin{macrocode} + \let\baselinestretch\f@linespread +% \end{macrocode} +% Additional processing will happen within |\selectfont|. For this +% reason the macro |\size@update| (which will be called in +% |\selectfont|) will be defined to be: +% \begin{macrocode} + \def\size@update{% +% \end{macrocode} +% First calculate the new |\baselineskip| and also store it in +% |normalbaselineskip| +% \begin{macrocode} + \baselineskip\f@baselineskip\relax + \baselineskip\f@linespread\baselineskip + \normalbaselineskip\baselineskip +% \end{macrocode} +% then to set up a new |\strutbox| +% \begin{macrocode} + \setbox\strutbox\hbox{% + \vrule\@height.7\baselineskip + \@depth.3\baselineskip + \@width\z@}% +% \end{macrocode} +% We end with a bit of tracing information. +% \begin{macrocode} +%<*trace> + \ifnum \tracingfonts>\tw@ + \ifx\f@linespread\@empty + \let\reserved@a\@empty + \else + \def\reserved@a{\f@linespread x}% + \fi + \@font@info{Changing size to \f@size/\reserved@a + \f@baselineskip}% + \aftergroup\type@restoreinfo \fi +%</trace> +% \end{macrocode} +% When all this is processed |\size@update| redefines itself to +% |\relax| so that in later calls of |\selectfont| no extra code +% will be executed. +% \begin{macrocode} + \let\size@update\relax}% + } +% \end{macrocode} +% Instead of defining this macro internally we might speed things +% up by placing the code into a separate macro and use |\let|! +% \end{macro} +% +% +% \begin{macro}{\size@update} +% Normally this macro does nothing; it will be redefined by +% |\set@fontsize| to initiate an update. +% \begin{macrocode} +\let\size@update\relax +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\type@restoreinfo} +% This macro produces some info when a font size and/or baseline +% change will get restored. +% \changes{1.0r}{1990/08/27}{Some extra tracing info.} +% \begin{macrocode} +%<*trace> + \def\type@restoreinfo{% + \ifx\f@linespread\@empty + \let\reserved@a\@empty + \else + \def\reserved@a{\f@linespread x}% + \fi + \@font@info{Restoring size to + \f@size/\reserved@a\f@baselineskip}} +%</trace> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\glb@settings} +% \begin{macro}{\glb@currsize} +% \changes{v2.3a}{1994/01/17}{New math font setup} +% \changes{v2.3k}{1994/11/06}{New implementation} +% The macro |\glb@settings| globally selects +% all math fonts for the current size if necessary. +% \begin{macrocode} +\def\glb@settings{% +% \end{macrocode} +% When |\glb@settings| gains control a size +% change was requested and all previous font assignments need to +% be replaced. +% Therefore the old values of the fonts are no longer needed. +% For every {\em math group\/} the new assignments are appended to +% |\math@fonts|. +% But this happens only if the |math@fonts| switch +% is set to true. +% However, we always set up the correct math sizes for script and +% scriptscript fonts since they may be needed even if we don't set +% up the whole math machinery. +% +% Here we set the math size, script size and scriptscript size. +% If the |S@|\ldots{} macro is not defined we have to first +% calculate the three sizes. +% \begin{macrocode} + \expandafter\ifx\csname S@\f@size\endcsname\relax + \calculate@math@sizes + \fi +% \end{macrocode} +% The effect of this is that |\calculate@math@sizes| +% may or may not define the |S@|\ldots{} macro. In the +% first case the next time the same size is requested +% this macro is used, otherwise |\calculate@math@sizes| is +% called again. +% This also sets the |math@fonts| switch. +% If it is true we must switch the math fonts. +% \begin{macrocode} + \csname S@\f@size\endcsname + \ifmath@fonts +%<*trace> + \ifnum \tracingfonts>\tw@ + \@font@info{Setting up math fonts for + \f@size/\f@baselineskip}\fi +%</trace> +% \end{macrocode} +% Inside a group we execute the macro for the current math {\em +% version}. This sets |\math@fonts| to a list of +% |\textfont|\dots{} assignments. |\getanddefine@fonts| (which may +% be called at this point) needs the |\escapechar| parameter to be +% set to $-1$. +% \begin{macrocode} + \begingroup + \escapechar\m@ne + \csname mv@\math@version \endcsname +% \end{macrocode} +% Then we set |\globaldefs| to 1 so that all following changes are +% done globally. The math font assignments recorded in +% |\math@fonts| are executed and |\glb@currsize| is set equal to +% |\f@size|. This signals that the fonts for math in this size are +% set up. +% \begin{macrocode} + \globaldefs\@ne + \math@fonts + \let \glb@currsize \f@size + \endgroup +% \end{macrocode} +% Finally we execute any code that is supposed to happen +% whenever the math font setup changes. This register will +% be executed in local mode which means that everything that is +% supposed to have any effect should be done globally inside. +% We can't execute it within |\globaldefs\@ne| as we don't know +% what ends up inside this register, e.g., it might contain +% calculations which use some local registers to calculate the +% final (global) value. +% \begin{macrocode} + \the\every@math@size +% \end{macrocode} +% Otherwise we announce that the math fonts are not set up for this +% size. +% \begin{macrocode} +%<*trace> + \else + \ifnum \tracingfonts>\tw@ + \@font@info{No math setup for + \f@size/\f@baselineskip}\fi +%</trace> + \fi +} +%</2ekernel|package|autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\baselinestretch} +% \changes{v1.0o}{1990/06/24}{Moved to tracefnt.dtx.} +% In |\selectfont| we used |\baselinestretch| as +% a factor when assigning a value to |\baselineskip|. +% We use 1 as a default (i.e.\ no stretch). +% \begin{macrocode} +%<*2ekernel|autoload> +\def\baselinestretch{1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\every@math@size} +% \changes{v1.0u fam.dtx}{1989/12/05}{Hook \cs{every@size} added.} +% \changes{v23.k}{1994/10/23}{Renamed to \cs{every@math@size}} +% We must still define the hook |\every@math@size| we used in +% |\glb@settings|. We initialize it to nothing. It is important to +% remember that everything that goes into this hook should to global +% updates, local changes will have weird effects. +% \begin{macrocode} +\newtoks\every@math@size +\every@math@size={} +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{Math fonts setup} +% +% +% \subsubsection{Outline of algorithm for math font sizes} +% +% \TeX{} uses the the math fonts that are current when the end of a +% formula is reached. If we don't want to keep font setups local to +% every formula (which would result in an enormous overhead, we have +% to be careful not to end up with the wrong setup in case formulas +% are nested, e.g., we need to be able to handle +% \begin{verbatim} +% $ a=b+c \mbox{ \small for all $b$ and $c\in Z$}$ +%\end{verbatim} +% Here the inner formulae |b| and |c\in Z| are typeset in |\small| but +% we have to return to |\normalsize| before we reach the closing |$| +% of the outer formula. +% +% This is handled in the following way: +% \begin{enumerate} +% \item At any point in the document the global variable +% |\gbl@currsize| contains the point size for which the math fonts +% currently are set up. +% +% \item \label{it:everymath} Whenever we start a formula we compare +% its value with the local variable |\f@size| that describes the +% current text font size. +% +% \item If both are the same we assume that we can use the current +% math font setup without adjustment. +% +% \item \label{it:everymathend} If they differ we call |\gbl@settings| +% which changes the math font setup and updates |\gbl@currsize|. +% \begin{enumerate} +% \item If we are recursively inside another formula (|\if@inmath|) we +% ensure that |\gbl@settings| is executed again in the outer +% formula, so that the old setup is automatically restored. +% \item Otherwise, we set the switch |@inmath| locally to |true| so +% that all nested formulae will be able to detect that they are +% nested in some outer formula. +% \end{enumerate} +% \end{enumerate} +% +% +% The above algorithm has the following features: +% \begin{itemize} +% \item For sizes which are not containing any formula no math setup +% is done. Compared to the original algorithm of NFSS this results +% in the following savings: +% \begin{itemize} +% \item No unnecessary loading of math fonts for sizes that are not +% used to typeset any math formulae (explicit or implicit ones). +% \item No time overhead due to unnecessary changes of the math font +% setup on entrance and exit of the text font size. +% \end{itemize} +% +% \item Math font setup changes for top-level formulae will survive +% (there is no restoration after the formula) thus any following +% formula in the same size will be directly typesetable. Compared to +% original implementation in NFSS2 +% the new algorithm has the overhead of one test per formula +% to see if the current math setup is valid (in the original +% algorithm the setup was always valid, thus no test was necessary). +% +% \item In nested formulae the math font setup is restored in the +% outer formula by a series of |\aftergroup| commands and checks. +% Compared to the original algorithm this involves additional checks +% ($2 \times \langle\mbox{non-math levels}\rangle$ per inner +% formula). +% \end{itemize} +% +% \subsubsection{Code for math font size setting} +% +% \begin{macro}{\check@mathfonts} +% \changes{v2.3a}{1994/01/17}{New math font setup} +% \changes{v2.3c}{1994/01/26}{Correct trace info placement} +% In the |\check@mathfonts| macros we implement the steps +% \ref{it:everymath} to \ref{it:everymathend} except that instead +% of a switch the macro |\init@restore@glb@settings| is used. +% \begin{macrocode} +%<*2ekernel|package|autoload> +\def\check@mathfonts{% + \ifx \glb@currsize \f@size +%<*trace> + \ifnum \tracingfonts>\thr@@ + \@font@info{*** MATH: no change \f@size\space + curr/global (\curr@math@size/\glb@currsize)}\fi +%</trace> + \else +%<*trace> + \ifnum \tracingfonts>\thr@@ + \@font@info{*** MATH: setting up \f@size\space + curr/global (\curr@math@size/\glb@currsize)}\fi +%</trace> + \glb@settings + \init@restore@glb@settings + \fi + \let\curr@math@size\f@size + \def\init@restore@glb@settings{\aftergroup\restglb@settings}% +} +% \end{macrocode} +% \end{macro} +% +% +% +% +% \begin{macro}{\init@restore@glb@settings} +% \changes{v3.0i}{1996/07/26}{macro added replacing \cs{if@inmath} switch} +% This macros does by default nothing but get redefined inside +% |\check@mathfonts| to initiate fontsize restoring in nested +% formulas. +% \begin{macrocode} +%<-trace>\let\init@restore@glb@settings\relax +%<*trace> +\def\init@restore@glb@settings{% + \ifnum \tracingfonts>\thr@@ + \@font@info{*** MATH: no resetting (not in + nested math)}\fi +} +%</trace> +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\restglb@settings} +% \changes{v2.3a}{1994/01/17}{New math font setup} +% \changes{v2.3c}{1994/01/26}{Correct trace info placement} +% This macro will be executed the first time after the current +% formula. +% \begin{macrocode} +\def\restglb@settings{% +%<*trace> + \ifnum \tracingfonts>\thr@@ + \@font@info{*** MATH: restoring}\fi +%</trace> + \begingroup + \let\f@size\curr@math@size + \ifx\glb@currsize \f@size +%<*trace> + \ifnum \tracingfonts>\thr@@ + \@font@info{*** MATH: ... already okay (\f@size)}\fi +%</trace> + \else +%<*trace> + \ifnum \tracingfonts>\thr@@ + \@font@info{*** MATH: ... to \f@size}\fi +%</trace> + \glb@settings + \fi + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{Other code for math} +% +% +% \begin{macro}{\use@mathgroup} +% \changes{v1.2b}{1990/01/21}{Macro added to allow cleaner interface.} +% \changes{v1.2h}{1990/03/30}{Third argument removed (see +% \cs{math@egroup}).} +% The |\use@mathgroup| macro should be used in user +% macros to select a math group. Depending on whether or not the +% \texttt{margid} option is in force it has two or three arguments. +% For this reason it should be called as the last macro. +% +% First we test if we are inside math mode since we don't want to +% apply a useless definition. +% \changes{v1.1a}{1989/12/16}{Usage of `\quotechar=' macro added.} +% \changes{v1.1a}{1989/12/16}{Redefinition of alphabet now simpler.} +% \begin{macrocode} +\def\use@mathgroup#1#2{\relax\ifmmode +% \end{macrocode} +% \changes{v1.0o}{1990/06/24}{Tracing code added.} +% \changes{v1.0q}{1990/07/07}{Group number added to tracing.} +% \begin{macrocode} +%<*trace> + \ifnum \tracingfonts>\tw@ + \count@#2\relax + \@font@info{Using \noexpand\mathgroup + (\the\count@) #2}\fi +%</trace> +% \end{macrocode} +% If so we first call the `=' macro (i.e.\ argument three) to set +% up special things for the selected math group. Then we call +% |\mathgroup| to select the group given by argument two and +% finally we place |#1| (i.e.\ the argument of the \meta{math +% alphabet identifier} at the end. This part of the code is +% surrounded by two commands which behave like |\begingroup| +% and |\endgroup| if we want \meta{math alphabet identifier}s +% but will expand into |\@empty| if we want simply switches to +% a new math group. +% \changes{v1.0p}{1990/06/30}{Added \cs{relax} after math group number.} +% Since argument number $2$ may be a digit instead of a control +% sequence we add a |\relax|. +% Otherwise something like |\mit{1}| would switch to math group +% $11$ (and back) instead of printing an oldstyle $\mit {1}$. +% \changes{v2.0b}{1992/07/26}{} +% \begin{macrocode} + \math@bgroup + \expandafter\ifx\csname M@\f@encoding\endcsname#1\else + #1\fi + \mathgroup#2\relax +% \end{macrocode} +% Before we reinsert the swallowed token (arg.\ three) into the +% input stream, in the case that the \meta{math alphabet +% identifier} isn't called in math mode, we remove the |\fi| +% with the |\expandafter| trick. This is necessary if the +% token is actually an macro with arguments. In such a case the +% |\fi| will be misinterpreted as the first argument which +% would be disastrous. +% \changes{v1.0f}{1989/12/13} +% {\cs{expandafter} added before final \cs{fi}.} +% \begin{macrocode} + \expandafter\math@egroup\fi}% +% \end{macrocode} +% The surrounding macros equal |\begingroup| and |\endgroup|. But +% using internal names makes it possible to overwrite their meaning +% in certain cases. This is for example used in \AmSTeX{} macros +% for placing accents. +% \end{macro} +% +% \begin{macro}{\math@egroup} +% \changes{v1.0q}{1990/07/07}{Tracing code added.} If the +% \texttt{margid} option is in force (which can be tested by +% looking at the definition of |\math@bgroup| we change the +% |\math@egroup| command a bit to display the current \meta{math +% group number} after it closes the scope of \meta{math alphabet} +% with |\endgroup|. +% \changes{v3.0h}{1996/05/08}{Use \cs{bgroup} instead of \cs{begingroup} +% to match a kernel change made in 1994!!!!} +% \begin{macrocode} +%<*trace> + \ifx\math@bgroup\bgroup + \def\math@egroup#1{#1\egroup + \ifnum \tracingfonts>\tw@ + \@font@info{Restoring \noexpand\mathgroup + (\ifnum\mathgroup=\m@ne default\else \the\mathgroup \fi)% + }\fi} + \fi +%</trace> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\getanddefine@fonts} +% \changes{v1.0o}{1990/06/24}{\cs{Macro} moved from fam.dtx.} +% |\getanddefine@fonts| has two arguments: the \meta{math +% group number} and the {\em family/series/shape\/} name as a +% control sequence. +% \begin{macrocode} +\def\getanddefine@fonts#1#2{% +% \end{macrocode} +% First we turn of tracing when |\tracingfonts| is less than $4$. +% \changes{v1.0o}{1990/06/24}{Adding debug code.} +% \changes{v1.0r}{1990/08/27} +% {Correcting missing name after \cs{tracingon}.} +% \begin{macrocode} +%<+debug> \pushtracing +%<+debug> \ifnum\tracingfonts<4 \tracingoff +%<+debug> \else \tracingon\getanddefine@fonts \fi +% \end{macrocode} +% \changes{v1.0o}{1990/06/24}{\cs{Adding} tracing code.} +% \changes{v1.0q}{1990/07/07}{Group number added to tracing.} +% \changes{v2.1a}{1992/09/22}{Introduced \cs{tf@size} for math size.} +% \begin{macrocode} +%<*trace> + \ifnum \tracingfonts>\tw@ + \count@#1\relax + \@font@info{\noexpand\mathgroup (\the\count@) #1 :=\MessageBreak + \string#2 \tf@size/\sf@size/\ssf@size}\fi +%</trace> +% \end{macrocode} +% We append the current |\tf@size| to |#2| to obtain the font +% name.\footnote{One might ask why this expansion does not generate +% a macro name that starts with an additional \texttt{\bslash} +% character. The solution is that \texttt{\bslash escapechar} is +% set to $-1$ before \texttt{\bslash getanddefine@fonts} is +% called.} Again, |font@name| is defined globally, for the reasons +% explained in the description of |\wrong@fontshape|. +% \begin{macrocode} + \xdef\font@name{\csname \string#2/\tf@size\endcsname}% +% \end{macrocode} +% Then we call |\pickup@font| to load it if necessary. +% We remember the internal name as |\textfont@name|. +% \begin{macrocode} + \pickup@font \let\textfont@name\font@name +% \end{macrocode} +% Same game for |\scriptfont| and |\scriptscriptfont|: +% \begin{macrocode} + \xdef\font@name{\csname \string#2/\sf@size\endcsname}% + \pickup@font \let\scriptfont@name\font@name + \xdef\font@name{\csname \string#2/\ssf@size\endcsname}% + \pickup@font +% \end{macrocode} +% Then we append the new |\textfont|\ldots{} assignments to +% the |\math@fonts|. +% \begin{macrocode} + \edef\math@fonts{\math@fonts + \textfont#1\textfont@name + \scriptfont#1\scriptfont@name + \scriptscriptfont#1\font@name}% +% \end{macrocode} +% Just before ending this macro we have to pop the tracing stack +% if it was pushed before. +% \begin{macrocode} +%<+debug> \poptracing + } +%</2ekernel|package|autoload> +% \end{macrocode} +% \end{macro} +% +% +% \section{Scaled font extraction} +% +% \begin{macro}{\ifnot@nil} +% We begin with a simple auxiliary macro. It checks +% whether its argument is the token |\@nil|. If so, +% it expands to |\@gobble| which discards the following +% argument, otherwise it expands to |\@firstofone| which +% reproduces it argument. +% \changes{v2.3n}{1995/05/08}{Use \cs{@firstofone}} +% \begin{macrocode} +%<*2ekernel|autoload> +\def\ifnot@nil#1{\def\reserved@a{#1}% + \ifx\reserved@a\@nnil \expandafter\@gobble + \else \expandafter\@firstofone\fi} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\remove@to@nnil} +% \begin{macro}{\remove@angles} +% \begin{macro}{\remove@star} +% Three other auxiliary macros will be needed in the following: +% |\remove@to@nnil| gobbles up everything up to, and including, +% the next |\@nnil| token, and |\remove@angles| and |\remove@star| +% do the same +% for the character |>| and |*|, respectively, instead of |\@nnil|. +% \begin{macrocode} +\def\remove@to@nnil#1\@nnil{} +\def\remove@angles#1>{\set@simple@size@args} +\def\remove@star#1*{#1} +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \changes{v3.0c}{1995/08/24}{Macro \cs{gobble@font@spec} removed} +% +% \begin{macro}{\extract@sizefn} +% This macro takes a size specification and parses it into size +% function and the optional and mandatory arguments. +% \begin{macrocode} +%<*2ekernel|def2|autoload> +\def\extract@sizefn#1*#2\@nil{% + \if>#2>\set@size@funct@args#1\@nil + \let\sizefn@info\@empty + \else\expandafter\set@size@funct@args\remove@star#2\@nil + \def\sizefn@info{#1}\fi + } +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\try@simple@size} +% This function tries to extract the given size (specified by +% |\f@size|) for the requested font shape. The font information +% must already be present in |\font@info|. +% The central macro that does the real work is |\extract@fontinfo|. +% We will first give a simple example how this macro works, and +% describe it in full generality later. +% +% Assume that the requested parameters are: {\em encoding scheme\/} +% `OT1', {\em family\/} `cm', {\em series\/} `sansserif', +% {\em shape\/} `normal', and {\em size\/} `$12$'. +% The correspondign font definitions have already been +% extracted from the macro |\OT1/cm/sansserif/normal| and +% stored in |font@info|. +% (Otherwise |\extract@fontinfo| doesn't get called.) +% This information consists of a token list made of characters +% of category code $12$ of the form +% \begin{verbatim} +% <10*>cmss10<12*>cmss12<17*>cmss17 +%\end{verbatim} +% For reasonable packages one usually needs more sizes but this is +% sufficient to get the flavour. +% We will define a macro |\extract@fontinfo| to find +% the external font name (`cmss12') for us: +% \begin{verbatim} +% \def\extract@fontinfo#1<12*#2>#3<#4\@nnil{% +% \set@simple@size@args#3<#4\@nnil +% \execute@size@function{#2}} +%\end{verbatim} +% so that when it gets called via +% \begin{verbatim} +% \extract@fontinfo<10*>cmss10<12*>cmss12<17*>cmss17\@nnil +%\end{verbatim} +% |#1| will contain all characters before |<12*>|, +% |#2| will be empty, |#3| will be exactly |cmss12|, +% and |#3| will be |17>cmss17|. +% The expansion is therefore +% \begin{verbatim} +% \set@simple@size@args cmss12<17*>cmss17\@nnil +% \execute@size@function{} +%\end{verbatim} +% This means: the default (empty) size function will be executed, +% with its optional argument argument set to empty and its mandatory +% argument set to |cmss12| by |\set@simple@size@args|. +% As we discussed earlier, the effect of the default size function +% is to load the given external font (cmss12) at the specified size +% (12)---which is exactly what was intended. +% +% But this is only part of the whole story. +% It may be that the size requested does not occur +% in the token list |\font@info|. +% And the simple definition of |\extract@fontinfo| we gave +% above does not allow to specify give more than one +% size specification in front of the external font name. +% +% Let's address these two problems separately. The first one +% is solved with the following trick: +% We define |\extract@fontinfo| as follows: +% \begin{verbatim} +% \def\extract@fontinfo#1<12*#2>#3<#4\@nnil{% +% \ifnot@nil{#3}% +% {\set@simple@size@args#3<#4\@nnil +% \execute@size@function{#2}% +% }}% +%\end{verbatim} +% How does this work? +% We call |\extract@fontinfo| via +% \begin{verbatim} +% \expandafter\extract@fontinfo\font@info<12*>\@nil<\@nnil +%\end{verbatim} +% i.e. by appending |<12*>\@nil<\@nnil|. +% If the size (`12' in this case) appears in |\font@info| +% everything works as explained above, the only difference being +% that argument |#4| of |\extract@fontinfo| +% additionally gets the tokens |<12*>\@nil<\@nnil|. +% However, if the size is not found everything up to the final +% |<12*>| is in argument |#1|, +% |#3| gets |\@nil|, +% and |#2| and |#4| are empty. +% The macro |\ifnot@nil| will discard the calls to +% |\set@simple@size@args| and |execute@size@function|, and +% hence |\font@info| will continue to be equal to |\@empty|. +% This means that no simple size specification matching the +% requested size could be found. +% +% The second problem (more than one simple size specification +% for one external font name) will be addressed in +% |\set@simple@size@args| below. +% +% The macros are hidden inside other control sequences +% so that we have to build |\extract@fontinfo| in +% several steps. +% +% So here's the actual definition of |\extract@font| in +% |\try@simple@size|. +% \begin{macrocode} +% % this could be replaced by \try@size@range making the subst slower! +\def\try@simple@size{% +% \end{macrocode} +% |\reserved@a| is made an abbreviation for the head of the +% definition of the macro |\extract@fontinfo|. +% \begin{macrocode} + \def\reserved@a{\def\extract@fontinfo####1}% +% \end{macrocode} +% Now we can define |\extract@fontinfo|. Here we handle a small +% but convenient variation: in case of the default (empty) size +% function it is allowed to omit the |*| character. +% \changes{v2.0b}{1992/07/26}{} +% \changes{v2.0c}{1992/09/19}{} +% \begin{macrocode} + \expandafter\reserved@a\expandafter<\f@size>##2<##3\@nnil{% + \ifnot@nil{##2}% + {\set@simple@size@args##2<##3\@nnil + \execute@size@function\sizefn@info + }}% +% \end{macrocode} +% \changes{v2.0b}{1992/07/26}{} +% Now we call |\extract@fontinfo|. Note the |<\@nil| \textsf{tokens} +% at the end. +% \begin{macrocode} + \expandafter\expandafter + \expandafter\extract@fontinfo\expandafter\font@info + \expandafter<\f@size>\@nil<\@nnil +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\set@simple@size@args} +% As promised above, the macro |\set@simple@size@args| will handle +% the case of several size specifications in a row. +% If another size specification follows, the very first token of +% its argument list is the character |<|. +% By starting the definition as follows, +% \begin{macrocode} +\def\set@simple@size@args#1<{% +% \end{macrocode} +% parameter |#1| is empty in this case, and contains the size +% function's arguments otherwise. We distinguish these two cases +% (Note that the character |<| cannot appear in |#1|) by calling +% |\remove@angles| for empty |#1| and |\extract@sizefn| +% otherwise. In the latter case we have to take care of the +% remaining character tokens and discard them. This is done by +% |\remove@to@nnil|. Note also the use of Kabelschacht's method. +% \begin{macrocode} + \if<#1<% + \expandafter\remove@angles + \else + \extract@sizefn#1*\@nil + \expandafter\remove@to@nnil + \fi} +% \end{macrocode} +% \end{macro} +% +% +% Now, we are through with the case of a simple size, except for +% calling the size function. This will be handled later, as it is +% the same mechanism for all types of size specification. We will +% now proceed to macors for extraction of size range specification. +% +% +% +% \begin{macro}{\extract@rangefontinfo} +% |\extract@rangefontinfo| goes through a font shape definition +% in the input until it recognizes the tokens |<\@nil->|. +% It looks for font ranges with font size functions. It's operation +% is rather simple: it discards everything up to the next size +% specification and passes this on to |\is@range| for inspection. +% The specification (parameter |#2| is inserted again, in case +% it is needed later. +% \begin{macrocode} +\def\extract@rangefontinfo#1<#2>{% + \is@range#2->\@nil#2>} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\is@range} +% |\is@range| is again a sort of dispatcher macro: if the size +% specification it is looking at is not a range specification +% it discards it and calls |\extract@rangefontinfo| to continue +% the search. Otherwise it calls |\check@range| to check the +% requested size against the specified range. +% +% From the way |\is@range| is called inside |\extract@rangefontinfo| +% we see that |#2| is the character |>| if the size specification +% found is a simple one (as it does not contain a |-| character. +% This is checked easily enough and |\extract@rangefontinfo| +% called again. Note that the extra tokens inserted after the +% |\@nil| in the call to |\is@range| appear at the beginning of +% the first argument to |\extract@rangefontinfo| and are hence +% ignored. +% \begin{macrocode} +\def\is@range#1-#2\@nil{% + \if>#2\expandafter\check@single\else + \expandafter\check@range\fi} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\check@range} +% |\check@range| takes lower bound as parameter |#1|, upper bound +% as |#2|, size function as |#3| and the size function's arguments +% as |#4|. If |#3| is the special token |\@nil| |\font@info| is +% exhausted and we can stop searching. +% \begin{macrocode} +\def\check@range#1-#2>#3<#4\@nnil{% + \ifnot@nil{#3}{% +% \end{macrocode} +% If |#3| wasn't |\@nil| we have a range. We start by assuming that +% we have to recurse. Note that we have to reinsert an |<| as it +% was already removed by scanning. +% \begin{macrocode} + \def\reserved@f{\extract@rangefontinfo<#4\@nnil}% +% \end{macrocode} +% We have to make sure that both boundaries are present, if not we +% have to set them. Here we check the upper bound. If |\upper@bound| +% is zero after the assignment we set it to |\maxdimen| (upper open +% range). We need to use a \meta{dimen} register for the scan since +% we may have a decimal number as the boundary. +% \begin{macrocode} + \upper@bound0#2\p@ + \ifdim\upper@bound=\z@ \upper@bound\maxdimen\fi +% \end{macrocode} +% Now we check the upper boundary against |\f@size|. +% If it is larger or equal than |\f@size| this +% range is no good and we have to recurse. +% \begin{macrocode} + \ifdim \f@size \p@<\upper@bound +% \end{macrocode} +% Otherwise we have to check the lower bound. This time it is not +% necessary to scan the boundary value into a register because if +% it is empty we get zero as desired. We could even omit the |0| +% which would result in |1pt| as default lower boundary. If +% |\f@size| is smaller than the boundary we have to recurse. +% \begin{macrocode} + \lower@bound0#1\p@ + \ifdim \f@size \p@<\lower@bound + \else +% \end{macrocode} +% If both tests are passed we can try executing the size function. +% \begin{macrocode} + \set@simple@size@args#3<#4\@nnil + \execute@size@function\sizefn@info +% \end{macrocode} +% If the function was successful it should have left an external +% font name in |\external@font|. We use this to see if we can stop +% scanning. Otherwise we recurse. +% \begin{macrocode} + \ifx\external@font\@empty + \else + \let\reserved@f\@empty + \fi + \fi + \fi + \reserved@f}} +%</2ekernel|def2|autoload> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\lower@bound} +% \begin{macro}{\upper@bound} +% We use two dimen registers |\lower@bound| and |\upper@bound| +% to store the lower and upper endpoints of the range we found. +% \begin{macrocode} +%<*2ekernel|autoload> +\newdimen\lower@bound +\newdimen\upper@bound +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\check@single} +% |\check@single| takes the size as parameter |#1|, size function +% as |#2| and the size function's arguments as |#3|. We can assume +% that there is always something in the pipeline since the very +% last entry is a faked range (see above). +% \begin{macrocode} +%<*2ekernel|def2|autoload> +\def\check@single#1>#2<#3\@nnil{% +% \end{macrocode} +% We start by assuming that +% we have to recurse. Note that we have to reinsert an |<| as it +% was already removed by scanning. +% \begin{macrocode} + \def\reserved@f{\extract@rangefontinfo<#3\@nnil}% +% \end{macrocode} +% Now we check the the size against |\f@size|. If it is not equal +% |\f@size| it is no good and we have to recurse. +% \begin{macrocode} + \ifdim \f@size \p@=#1\p@ +% \end{macrocode} +% Otherwise if this test is passed we can try executing the size +% function. +% \begin{macrocode} + \set@simple@size@args#2<#3\@nnil + \execute@size@function\sizefn@info +% \end{macrocode} +% If the function was successful it should have left an external +% font name in |\external@font|. We use this to see if we can stop +% scanning. Otherwise we recurse. +% \begin{macrocode} + \ifx\external@font\@empty + \else + \let\reserved@f\@empty + \fi + \fi + \reserved@f} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\set@size@funct@args} +% \begin{macro}{\set@size@funct@args@} +% This macro sets the optional and mandatory arguments for a size +% function. If the optional argument is not present it is set to +% the empty token list. The mandatory argument is delimited by the +% token |\@nil|. +% \begin{macrocode} +\def\set@size@funct@args{\@ifnextchar[% + \set@size@funct@args@{\set@size@funct@args@[]}} +% \end{macrocode} +% +% \begin{macrocode} +\def\set@size@funct@args@[#1]#2\@nil{% + \def\mandatory@arg{#2}% + \def\optional@arg{#1}} +%</2ekernel|def2|autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\DeclareSizeFunction} +% This function defines a new size function hiding the internal +% from the designer. The body of the size function may use +% |\optional@arg| and |\mandatory@arg| denoting the optional and +% mandatory argument that may follow the size specification |<...>|. +% \changes{v2.1c}{1993/03/18}{Added all args to avoid blanks problems} +% \begin{macrocode} +%<*2ekernel|autoload> +\def\DeclareSizeFunction#1#2{\@namedef{s@fct@#1}{#2}} +\@onlypreamble\DeclareSizeFunction +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\execute@size@function} +% This macro is very simple. The only point worth noting +% is that calling an undefined size function will do nothing +% (actually execute a |\relax|). +% \begin{macrocode} +%<*2ekernel|package|autoload> +\def\execute@size@function#1{% %%% could be added to autoload as well +%<*trace> + \@ifundefined{s@fct@#1}% + {\errmessage{Undefined font size function #1}% + \s@fct@}% + {\csname s@fct@#1\endcsname}% +%</trace> +%<-trace> \csname s@fct@#1\endcsname +} +%</2ekernel|package|autoload> +% \end{macrocode} +% \end{macro} +% +% \changes{v2.3j}{1994/05/23}{Removed def of \cs{f@warn@break}} +% +% +% \begin{macro}{\try@size@range} +% This macro tries to find a suitable range for requested size +% (specified by |\f@size|) in |\font@info|. All the relevant +% action is done in |\extract@rangefontinfo|. All that needs +% to be done is to stuff in the token list in |\font@info| so +% that |\extract@rangefontinfo| can inspect it. +% Note the |<-*\@nil><| token at the end to stop scanning. +% \changes{v2.0b}{1992/07/26}{} +% \begin{macrocode} +%<*2ekernel|def2|autoload> +\def\try@size@range{% + \expandafter\extract@rangefontinfo\font@info <-*>\@nil<\@nnil +} +%</2ekernel|def2|autoload> +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\try@size@substitution} +% \changes{v2.3k}{1994/11/06}{New implementation} +% This is the last thing that can be tried. If the desired |\f@size| +% is found neither among the simple size specifications nor in one +% of the ranges the whole list of size specifications is searched for +% a nearby simple size. +% \begin{macrocode} +%<*2ekernel|def1> +\gdef\try@size@substitution{% +% \end{macrocode} +% First we do some initializations. |\@tempdimb| +% will hold the difference between the wanted size and the best +% solution found so far, so we initialise it with |\maxdimen|. +% The macro |\best@size| will hold the best size found, nothing +% found is indicated by the empty value. +% \begin{macrocode} + \@tempdimb \maxdimen + \let \best@size \@empty +% \end{macrocode} +% Now we loop over the specification +% \begin{macrocode} + \expandafter \try@simples \font@info <\number\@M>\@nil<\@nnil +} +%</2ekernel|def1> +%<*autoload> +\def\try@size@substitution{\try@simples\try@size@substitution} +%</autoload> +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\font@submax} +% \changes{v2.3d}{1994/04/18}{Changed dimen to macro} +% \begin{macro}{\fontsubfuzz} +% \changes{v2.3d}{1994/04/18}{Changed dimen to macro} +% The macro |\font@submax| records the maximal deviation from the +% desired size encountered so far. Its value is used in a warning +% message at |\end{coument}|. The macro +% |\fontsubfuzz| contains the amount that will not cause terminal +% warnings (warnings still go into the transcript file). +% \begin{macrocode} +%<*2ekernel|autoload> +\def\font@submax{0pt} +\def\fontsubfuzz{.4pt} +%</2ekernel|autoload> +%<+package>\def\fontsubfuzz{0pt} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% +% \begin{macro}{\try@simples} +% \changes{v2.3k}{1994/11/06}{New implementation} +% |\try@simples| goes through a font shape definition +% in the input until it recognizes the tokens |<*\@nil><|. +% It looks for simple sizes to determine the two closest sizes. +% It is assumed that simple sizes are in increasing order. +% \begin{macrocode} +%<*2ekernel|def1> +\gdef\try@simples#1<#2>{% + \tryif@simple#2->\tryif@simple} +%</2ekernel|def1> +%<*autoload> +\def\try@simples{\@autoload{fss1}} +%</autoload> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tryis@simple} +% \changes{v2.3k}{1994/11/06}{New implementation} +% |\tryis@simple| is similar to |\is@range|. If it sees a simple size, +% it checks it against the value of |\f@size| and sets +% |\lower@font@size| or |\higher@font@size|. In the latter case, it +% stops the iteration. By adding |<\number\@M>| at the end of the +% line we always have an end point. This is a hack which probably +% should be corrected. +% +% First it checks whether it is finished already, then whether the +% size specification in question is a simple one. +% \begin{macrocode} +%<*2ekernel|def1> +\gdef\tryif@simple#1-#2\tryif@simple{% +% \end{macrocode} +% Most common case for |\reserved@f| first: +% \begin{macrocode} + \let \reserved@f \try@simples + \if>#2% +% \end{macrocode} +% If so, it compares it to the value of |\f@size|. This is done using +% a dimen register since there may be fractional numbers. +% \begin{macrocode} + \dimen@ #1\p@ + \ifdim \dimen@<\@M\p@ +% \end{macrocode} +% If |\dimen@| is |\@M\p@| we have reached the end of the fontspec +% (hopefully) otherwise we compare the value with |\f@size| and +% compute in |\@tempdimc| the absolute value of the difference +% between the two values. +% \begin{macrocode} + \ifdim \f@size\p@<\dimen@ + \@tempdimc \dimen@ + \advance\@tempdimc -\f@size\p@ + \else + \@tempdimc \f@size\p@ + \advance\@tempdimc -\dimen@ + \fi +% \end{macrocode} +% The result is then compared with the smallest difference we have +% encountered, if the new value (in |\@tempdimc| is smaller) we +% have found a size which is a better approximation so we make it +% the |\best@size| and adjust |\@tempdimb|. +% \begin{macrocode} + \ifdim \@tempdimc<\@tempdimb + \@tempdimb \@tempdimc + \def \best@size{#1}% + \fi +% \end{macrocode} +% When we have reached the end of the fontspec we substitute the +% best size found (if any). We code this inline to save macro +% space; in the past this was done by a macro called |\subst@size|. +% \begin{macrocode} + \else +% \end{macrocode} +% +% +% \begin{macro}{\subst@size} +% This macro substitutes the size recorded in |\best@size| for +% the unavailable size |\f@size|. |\font@submax| records the maximum +% difference between desired size and selected size in the +% whole run. +% \changes{v2.3d}{1994/04/18}{\cs{font@submax} and \cs{fontsubfuzz} +% now macros} +% \begin{macrocode} +% %\subst@size %% coded inline +% %\def\subst@size{% + \ifx \external@font\@empty + \ifx \best@size\@empty + \else + \ifdim \@tempdimb>\font@submax \relax + \xdef \font@submax {\the\@tempdimb}% + \fi + \let \f@user@size \f@size + \let \f@size \best@size + \ifdim \@tempdimb>\fontsubfuzz\relax + \@font@warning{Font\space shape\space + `\curr@fontshape'\space in\space size\space + <\f@user@size>\space not\space available\MessageBreak + size\space <\f@size>\space substituted}% + \fi + \try@simple@size + \do@subst@correction + \fi + \fi +% %} +% \end{macrocode} +% \end{macro} +% +% This brings us back into the main part of |\tryif@simple|. +% Finally we get rid of any rubbish left over on the input stack. +% +% \changes{v3.0c}{1995/08/24}{} +% \begin{macrocode} + \let \reserved@f \remove@to@nnil + \fi + \fi +% \end{macrocode} +% If it's a range iterate also. +% \begin{macrocode} + \reserved@f} +%</2ekernel|def1> +% \end{macrocode} +% \end{macro} +% +% +% +% \subsection{Sizefunctions} +% +% In the following we define some useful size functions. +% +% +% \begin{macro}{\s@fct@} +% This is the default size function. Mandatory argument is an +% external font name, optinal argument a scale factor. +% The font is scaled +% to |\f@size| if no optional argument is present, and to +% |\f@size| multiplied by the optional argument otherwise. +% \changes{v2.0b}{1992/07/26}{} +% \begin{macrocode} +%<*2ekernel|autoload> +\DeclareSizeFunction{}{\empty@sfcnt\@font@warning} +\DeclareSizeFunction{s}{\empty@sfcnt\@font@info} +%</2ekernel|autoload> +% \end{macrocode} +% +% \begin{macrocode} +%<*2ekernel|def2|autoload> +\def\empty@sfcnt#1{% + \@tempdimb \f@size\p@ + \ifx\optional@arg\@empty + \else + \@tempdimb \optional@arg\@tempdimb + #1{Font\space shape\space `\curr@fontshape'\space + will\space be\MessageBreak + scaled\space to\space size\space \the\@tempdimb}% + \fi + \edef\external@font{\mandatory@arg\space at\the\@tempdimb}} +%</2ekernel|def2|autoload> +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\s@fct@gen} +% \begin{macro}{\s@fct@sgen} +% This size function generates the external name from the mandatory +% argument and the requested user size, and thus can be used for +% external names where the size is encoded in the font name. The +% optinal argument a scale factor. The font is scaled to |\f@size| +% if no optional argument is present, and to |\f@size| multiplied +% by the optional argument otherwise. +% \begin{macrocode} +%<*2ekernel|autoload> +\DeclareSizeFunction{gen}{\gen@sfcnt\@font@warning} +\DeclareSizeFunction{sgen}{\gen@sfcnt\@font@info} +%</2ekernel|autoload> +% \end{macrocode} +% +% \begin{macrocode} +%<*2ekernel|def2|autoload> +\def\gen@sfcnt{% + \edef\mandatory@arg{\mandatory@arg\f@size}% + \empty@sfcnt} +%</2ekernel|def2|autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% +% \begin{macro}{\s@fct@genb} +% \begin{macro}{\s@fct@sgenb} +% This size function is similar to |gen|, but for fonts where the +% size is encoded in the font name in centipoints, as in the DC +% fonts version 1.2. The font is scaled to |\f@size| +% if no optional argument is present, and to |\f@size| multiplied +% by the optional argument otherwise. +% \begin{macrocode} +%<*2ekernel|autoload> +\DeclareSizeFunction{genb}{\genb@sfcnt\@font@warning} +\DeclareSizeFunction{sgenb}{\genb@sfcnt\@font@info} +%</2ekernel|autoload> +% \end{macrocode} +% +% \begin{macrocode} +%<*2ekernel|def2|autoload> +\def\genb@sfcnt{% + \edef\mandatory@arg{\mandatory@arg\expandafter\genb@x\f@size..\@@}% + \empty@sfcnt} +%</2ekernel|def2|autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\genb@x} +% \begin{macro}{\genb@y} +% The auxiliary macros |\genb@x| and |\genb@y| are used to convert +% the |\f@size| into centipoints. +% \begin{macrocode} +%<*2ekernel|def2|autoload> +\def\genb@x#1.#2.#3\@@{\two@digits{#1}\genb@y#200\@@} +\def\genb@y#1#2#3\@@{#1#2} +%</2ekernel|def2|autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% +% \begin{macro}{\s@fct@sub} +% This size function handles font substitution. +% The mandatory argument is a family/series/shape combination, +% the optional argument (if present) is ignored. The font encoding +% scheme cannot be changed. Therefore, the first thing we do is to +% prepend the encoding scheme. +% \changes{v2.0b}{1992/07/26}{} +% \begin{macrocode} +%<*2ekernel|autoload> +\DeclareSizeFunction{sub}{\sub@sfcnt\@font@warning} +\DeclareSizeFunction{ssub}{\sub@sfcnt\@font@info} +%</2ekernel|autoload> +% \end{macrocode} +% +% \begin{macrocode} +%<*2ekernel|def2|autoload> +\def\sub@sfcnt#1{% + \edef\mandatory@arg{\f@encoding/\mandatory@arg}% +% \end{macrocode} +% Next action is split the arg into its individual components and +% allow for a late font shape load. +% \begin{macrocode} + \begingroup + \expandafter\split@name\mandatory@arg/\@nil + \try@load@fontshape + \endgroup +% \end{macrocode} +% Then we record the current |\f@size| since it may get clobbered. +% \begin{macrocode} + \let\f@user@size\f@size +% \end{macrocode} +% Then we check whether this new combination is defined and +% give an error message if not. In this case we also switch to +% |\error@fontshape|. +% \begin{macrocode} + \expandafter + \ifx\csname\mandatory@arg\endcsname\relax + \errmessage{No\space declaration\space for\space + shape\space \mandatory@arg}% + \error@fontshape + \else +% \end{macrocode} +% Otherwise we warn the user about the substitution taking place. +% \begin{macrocode} + #1{Font\space shape\space `\curr@fontshape'\space in\space + size\space <\f@size>\space not\space available\MessageBreak + Font\space shape\space `\mandatory@arg'\space tried\space + instead}% + \expandafter\split@name\mandatory@arg/\@nil + \fi +% \end{macrocode} +% Then we restart the font specification scan by calling +% |\get@external@font|. +% \begin{macrocode} + \edef\f@size{\f@user@size}% + \get@external@font +% \end{macrocode} +% Finally |\do@subst@correction| is called to get the font name +% right. +% \begin{macrocode} + \do@subst@correction +} +%</2ekernel|def2|autoload> +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\s@fct@subf} +% The |subf| size function allows substitution of another font. The +% mandatory argument is the external name of the font to be +% substituted, the optional argument a size scaling factor like +% in the default size function. +% The main difference to the default size function is the warning +% message. +% \begin{macrocode} +%<*2ekernel|autoload> +\DeclareSizeFunction{subf}{\subf@sfcnt\@font@warning} +\DeclareSizeFunction{ssubf}{\subf@sfcnt\@font@info} +%</2ekernel|autoload> +% \end{macrocode} +% +% \begin{macrocode} +%<*2ekernel|def2|autoload> +\def\subf@sfcnt#1{% + #1{Font\space shape\space `\curr@fontshape'\space in\space + size\space \f@size\space not\space available\MessageBreak + external\space font\space `\mandatory@arg'\space used}% + \empty@sfcnt#1% + } +%</2ekernel|def2|autoload> +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\s@fct@fixed} +% The |fixed| size function is for using a font at a different size +% than requested. A warning message is printed, and the external +% font to be used is taken from the mandatory argument. +% If an optional argument is present it is used as the `at' +% size for the font. Otherwise the font is loaded at its design size. +% \begin{macrocode} +%<*2ekernel|autoload> +\DeclareSizeFunction{fixed}{\fixed@sfcnt\@font@warning} +\DeclareSizeFunction{sfixed}{\fixed@sfcnt\@font@info} +%</2ekernel|autoload> +% \end{macrocode} +% +% \begin{macrocode} +%<*2ekernel|def2|autoload> +\def\fixed@sfcnt#1{% + \ifx\optional@arg\@empty + \let\external@font\mandatory@arg + \else + \edef\external@font{\mandatory@arg\space at\optional@arg pt}% + \fi + #1{External\space font\space `\external@font'\space loaded\space + for\space size\MessageBreak + <\f@size>}% +} +%</2ekernel|def2|autoload> +% \end{macrocode} +% \end{macro} +% +% \iffalse +%<+checkmem>\CHECKMEM +% \fi +% +% +% \Finale diff --git a/Master/texmf-dist/source/latex/base/lthyphen.dtx b/Master/texmf-dist/source/latex/base/lthyphen.dtx new file mode 100644 index 00000000000..03849a56131 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/lthyphen.dtx @@ -0,0 +1,158 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%<*driver> +\ProvidesFile{lthyphen.dtx} +%</driver> +%<default>\ProvidesFile{hyphen.ltx} +% \fi +% \ProvidesFile{lthyphen.dtx} + [1994/12/04 v1.0h LaTeX Kernel (hyphenation interface)] +% +% +% \CheckSum{13} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +%\iffalse This is a META comment +% +% File `lthyphen.dtx'. +% Copyright (C) 1994-94 LaTeX3 project, Frank Mittelbach and +% Rainer Sch\"opf, all rights reserved. +% +%\fi +% \GetFileInfo{lthyphen.dtx} +% \title{The \texttt{lthyphen.dtx} file\thanks +% {This file has version number \fileversion, dated \filedate.}\\ +% for use with \LaTeXe} +% \author{Frank Mittelbach, Chris Rowley \and Rainer Sch\"opf} +% +% \def\dst{{\normalfont\scshape docstrip}} +% \setcounter{StandardModuleDepth}{1} +% +% +% \maketitle +% +% This file contains the code for loading hyphenation patterns into +% \LaTeX. Most of this will end up in a file called +% \texttt{hyphen.ltx}. If you wish to customize your \LaTeX{} system +% in respect of hyphenation patterns, write a file +% \texttt{hyphen.cfg}. If this file exists, it will be loaded instead +% of \texttt{hyphen.ltx}. See the comments below for additional +% information. +% +% \StopEventually{} +% +% To produce the printed version of this file the following code +% is used. It can be extracted with the \dst{} program, or one can run +% this file directly through \LaTeXe{}. +% \begin{macrocode} +%<*driver> +\documentclass{ltxdoc} +\begin{document} +\DocInput{lthyphen.dtx} +\end{document} +%</driver> +% \end{macrocode} +% +% \changes{v0.1c}{1994/03/07}{move the 2ekernel code to ltfinal.dtx} +% \changes{v1.0g}{1994/12/01}{Rename lthyphen.ltx/cfg to hyphen.ltx/cfg} +% \changes{v1.0h}{1994/12/04}{Documentation edits for /1989} +% +% The default file |hyphen.ltx| loads hyphenation patterns for US +% english. If you want to load additional or other hyphenation +% patterns, you should create a file |hyphen.cfg|. This is best done +% by starting from |hyphen.ltx|. +% +% For backward compatibility, the default file, |hyphen.ltx|, +% first tries to load +% the file |hyphen.tex|. If this file exists, an information +% message is issued and the appropriate defaults for \TeX's internal +% parameters are set: |\language| is initialized to $0$, and +% |\lefthyphenmin| and |\righthyphenmin| to $2$ and $3$, respectively, +% to disallow x- or -xx breaks. +% \begin{macrocode} +%<*default> +\InputIfFileExists{hyphen.tex}% + {\message{Loading hyphenation patterns for US english.}% + \language=0 + \lefthyphenmin=2 \righthyphenmin=3 }% +% \end{macrocode} +% Otherwise, since we cannot do anything without any hyphenation +% patterns, an error message is printed and the Ini\TeX{} run +% is terminated by invoking |\@@end| (which is the \LaTeXe{} name +% for \TeX's |\end| primitive). +% \begin{macrocode} + {\errhelp{The configuration for hyphenation is incorrectly + installed.^^J% + If you don't understand this error message you need + to seek^^Jexpert advice.}% + \errmessage{OOPS! I can't find any hyphenation patterns for + US english.^^J \space Think of getting some or the + latex2e setup will never succeed}\@@end} +%</default> +% \end{macrocode} +% The following example describes the possible contents of a file +% |hyphen.cfg| that will load both US English and German hyphenation +% patterns, making the former the default. +% It sets |\language| to $0$ for the US patterns and to $1$ for the +% German patterns. +% Then |\language| is set to $0$ to make this the default and the +% default values of |\lefthyphenmin| and |\righthyphenmin| are set. +% \begin{verbatim} +%\language=0 +%\input hyphen % (or \input ushyphen1 if the file has been renamed) +%\language=1 +%\input ghyph31 +%\language=0 +%\lefthyphenmin=2 +%\righthyphenmin=3 +%\endinput +%\end{verbatim} +% +% Another possibility is to use the package |babel|, by Johannes Braams. +% That package is distributed with a suitable |hyphen.cfg| file. +% +% +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/base/ltidxglo.dtx b/Master/texmf-dist/source/latex/base/ltidxglo.dtx new file mode 100644 index 00000000000..7a630b77e97 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltidxglo.dtx @@ -0,0 +1,217 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%%% From File: ltidxglo.dtx +% +%<*driver> +% \fi +\ProvidesFile{ltidxglo.dtx} + [1996/01/20 v1.1e LaTeX Kernel (Index and Glossary)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltidxglo.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} + +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{77} +% +% \section{Index and Glossary Generation} +% Index and Glossary commands. +% +% \DescribeMacro{\makeindex} A preamble command to turn on indexing. +% +% \DescribeMacro{\makeglossary} A preamble command to turn on making +% glossary entries. +% +% \DescribeMacro{\index} Make an index entry for |#1|. +% +% \DescribeMacro{\glossary} Make a glossary entry for |#1|. +% +% \StopEventually{} +% +% +% \changes{v1.0a}{1994/03/31}{Initial version of ltidxbib.dtx, +% split from ltherest.dtx} +% \changes{v1.1a}{1994/05/19}{Initial version of ltidxglo.dtx, +% split from ltidxbib.dtx} +% \changes{v1.1d}{1995/10/25}{Doc cleanup} +% +% +% \begin{oldcomments} +% \makeindex == +% BEGIN +% \index == BEGIN \@bsphack +% \begingroup +% \protect{X} == \string X\space +% %% added 3 Feb 87 for \index commands +% %% in \footnotes +% re-\catcode special characters +% to 'other' +% \@wrindex +% END +% +% \@wrindex{ITEM} == +% BEGIN +% write of {\indexentry{ITEM}{page number}} +% \endgroup +% \@esphack +% END +% +% INITIALIZATION: +% +% \index == BEGIN \@bsphack +% \begingroup +% re-\catcode special characters (in case '%' there) +% \@index +% END +% +% \@index{ITEM} == BEGIN \endgroup \@esphack END +% +% Changes made 14 Apr 89 to write \glossaryentry's instead of +% \indexentry's on the .glo file. +% \end{oldcomments} +% +% \begin{macrocode} +%<*2ekernel> +\message{index,} +% \end{macrocode} +% +% \changes{v1.1b}{1994/11/04}{Removed \cs{if@filesw} from +% \cs{makeindex}.} +% +% \begin{macro}{\makeindex} +% \begin{macrocode} +\def\makeindex{% + \newwrite\@indexfile + \immediate\openout\@indexfile=\jobname.idx + \def\index{\@bsphack\begingroup + \@sanitize + \@wrindex}\typeout + {Writing index file \jobname.idx}% +% \end{macrocode} +% \changes{v1.1e}{1996/01/20}{Make no-op after use pr/2048} +% Opening the write channel should be done only once +% since on some OS multiple opens are forbidden and in +% any case it is useless. So we turn this into a no-op after +% use. +% \begin{macrocode} + \let\makeindex\@empty +} +\@onlypreamble\makeindex +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@wrindex} +% \changes{v1.1b}{1994/11/04}{Added \cs{protected@write} to +% \cs{@wrindex}.} +% \begin{macrocode} +\def\@wrindex#1{% + \protected@write\@indexfile{}% + {\string\indexentry{#1}{\thepage}}% + \endgroup + \@esphack} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\index} +% \begin{macrocode} +\def\index{\@bsphack\begingroup \@sanitize\@index} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@index} +% \begin{macrocode} +\def\@index#1{\endgroup\@esphack} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\makeglossary} +% \changes{v1.1b}{1994/11/04}{Removed \cs{if@filesw} from +% \cs{makeglossary}.} +% \begin{macrocode} +\def\makeglossary{% + \newwrite\@glossaryfile + \immediate\openout\@glossaryfile=\jobname.glo + \def\glossary{\@bsphack\begingroup + \@sanitize + \@wrglossary}\typeout + {Writing glossary file \jobname.glo }% +% \end{macrocode} +% \changes{v1.1e}{1996/01/20}{Make no-op after use pr/2048} +% Opening the write channel should be done only once +% since on some OS multiple opens are forbidden and in +% any case it is useless. So we turn this into a no-op after +% use. +% \begin{macrocode} + \let\makeglossary\@empty +} +\@onlypreamble\makeglossary +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@wrglossary} +% \changes{v1.1b}{1994/11/04}{Added \cs{protected@write} to +% \cs{@wrglossary}.} +% \begin{macrocode} +\def\@wrglossary#1{% + \protected@write\@glossaryfile{}% + {\string\glossaryentry{#1}{\thepage}}% + \endgroup + \@esphack} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\glossary} +% \begin{macrocode} +\def\glossary{\@bsphack\begingroup\@sanitize\@index} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel> +% \end{macrocode} +% +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltlength.dtx b/Master/texmf-dist/source/latex/base/ltlength.dtx new file mode 100644 index 00000000000..e48ebfeedd6 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltlength.dtx @@ -0,0 +1,152 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltlength.dtx +% +%<*driver> +% \fi +\ProvidesFile{ltlength.dtx} + [1995/08/11 v1.1b LaTeX Kernel (Lengths)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltlength.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} + +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{40} +% +% \changes{v1.0c}{1994/03/29} +% {Create file ltcntlen from parts of ltmiscen and ltherest.} +% \changes{v1.1a}{1994/05/19} +% {Extract file ltlength from ltcntlen.} +% \changes{v1.1b}{1995/08/11} +% {Doc typos fixed for latex/753} +% +% \section{Lengths} +% +% \DescribeMacro{\newlength} +% Declare |#1| to be a new length command. +% +% \DescribeMacro{\setlength} +% Set the length command, |#1|, to the value |#2|. +% +% \DescribeMacro{\addtolength} +% Increase the value of the length command, |#1|, by the value |#2|. +% +% \DescribeMacro{\settowidth} +% Set the length, |#1| to the width of a box containing |#2|. +% +% \DescribeMacro{\settoheight} +% Set the length, |#1| to the height of a box containing |#2|. +% +% \DescribeMacro{\settodepth} +% Set the length, |#1| to the depth of a box containing |#2|. +% +% \StopEventually{} +% +% \begin{macrocode} +%<*2ekernel> +\message{lengths,} +% \end{macrocode} +% +% \begin{macro}{\newlength} +% \begin{macrocode} +\def\newlength#1{\@ifdefinable#1{\newskip#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\setlength} +% \begin{macrocode} +\def\setlength#1#2{#1#2\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\addtolength} +% |\relax| added 24 Mar 86 +% \begin{macrocode} +\def\addtolength#1#2{\advance#1 #2\relax} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\settoheight} +% \changes{LaTeX2e}{1993/11/22}{Macro added} +% \begin{macro}{\settodepth} +% \changes{LaTeX2e}{1993/11/22}{Macro added} +% \begin{macro}{\settowidth} +% \begin{macro}{\@settodim} +% \changes{LaTeX2e}{1993/11/22}{Macro added} +% \changes{v1.0a}{1994/03/07}{(DPC) Extra group for colour} +% The obvious analogs of |\settowidth|. +% \begin{macrocode} +\def\@settodim#1#2#3{\setbox\@tempboxa\hbox{{#3}}#2#1\@tempboxa +% \end{macrocode} +% Clear the memory afterwards (which might be a lot). +% \begin{macrocode} + \setbox\@tempboxa\box\voidb@x} +\def\settoheight{\@settodim\ht} +\def\settodepth {\@settodim\dp} +\def\settowidth {\@settodim\wd} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@settopoint} +% This macro takes the contents of the skip register that is +% supplied as its argument and removes the fractional part to make +% it a whole number of points. This can be used in class files to +% avoid values like |345.4666666pt| when calulating a dimension. +% \changes{LaTeX2e}{1993/11/22}{Macro added} +% \begin{macrocode} +\def\@settopoint#1{\divide#1\p@\multiply#1\p@} +%</2ekernel> +% \end{macrocode} +% \end{macro} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltlists.dtx b/Master/texmf-dist/source/latex/base/ltlists.dtx new file mode 100644 index 00000000000..6a4a91d7271 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltlists.dtx @@ -0,0 +1,1075 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%%% From File: ltlists.dtx +%<*driver> +% \fi +\ProvidesFile{ltlists.dtx} + [2002/10/28 v1.0s LaTeX Kernel (List Environments)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltlists.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Tobias Oetiker\thanks{Tobi has converted the documentation to + doc.sty standard}\and + Chris Rowley\and + Rainer Sch\"opf} + +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{498} +% +% \changes{v1.0b}{1994/03/28}{Improve documentation} +% \changes{v1.0f}{1994/05/21}{Use new error commands} +% \changes{v1.0f}{1995/05/21}{Moved to doc.sty standard} +% +% \section{List, and related environments} +% +% The generic commands for creating an indented environment -- +% |enumerate|, |itemize|, |quote|, etc -- are: +% \begin{quote} +% |\list|\marg{LABEL}\marg{COMMANDS} ... |\endlist| +% \end{quote} +% +% which can be invoked by the user as the list environment. The LABEL +% argument specifies item labeling. COMMANDS contains commands for +% changing the horizontal and vertical spacing parameters. +% +% Each item of the environment is begun by the command +% |\item[|ITEMLABEL|]| +% which produces an item labeled by ITEMLABEL. If the argument is +% missing, then the LABEL argument of the |\list| command is used as the +% item label. +% +% The label is formed by putting |\makelabel|\marg{ITEMLABEL} in an hbox +% whose width is either its natural width or else |\labelwidth|, +% whichever is larger. The |\list| command defines |\makelabel| to have +% the default definition: +% \begin{quote} +% |\makelabel|\marg{ARG} == BEGIN |\hfil| ARG END +% \end{quote} +% which, for a label of width less than |\labelwidth|, puts the label +% flushright, |\labelsep| to the left of the item's text. However, +% |\makelabel| can be |\let| to another command by the |\list|'s +% COMMANDS argument. +% +% A |\usecounter|\marg{foo} command in the second argument causes the +% counter \emph{foo} to be initialized to zero, and stepped by every +% |\item| command without an argument. (|\label| commands within the +% list refer to this counter.) +% +% When you leave a list environment, returning either to an enclosing +% list or normal text mode, LaTeX begins a new paragraph if and only if +% you leave a blank line after the |\end| command. This is accomplished +% by the |\@endparenv| command. +% +% Blank lines are ignored every other reasonable place--i.e.: +% \begin{itemize} +% \item Between the |\begin{list}| and the first |\item|, +% \item Between the |\item| and the text of that item. +% \item Between the end of the last item and the |\end{list}|. +% \end{itemize} +% +% For an environment like quotation, in which items are not labeled, +% the entire environment is a single item. It is defined by +% letting |\quotation| == |\list{}{...}\item\relax|. (Note the +% |\relax|, there in case the first character in the environment is a +% '['.) The spacing parameters provide a great deal of flexability in +% designing the format, including the ability to let the indentation of +% the first paragraph be different from that of the subsequent ones. +% +% The trivlist environment is equivalent to a list environment +% whose second argument sets the following parameter values: +% \begin{description} +% \item[\cs{leftmargin} = 0:] causes no indentation of left margin +% \item[\cs{labelwidth} = 0:] see below for precise effect this has. +% \item[\cs{itemindent} = 0:] with a null label, makes first paragraph +% have no indentation. Succeeding paragraphs have |\parindent| +% indentation. To give first paragraph same indentation, set +% |\itemindent| = |\parindent| before the |\item[]|. +% \end{description} +% +% Every |\item| in a trivlist environment must have an argument---in +% many cases, this will be the null argument (|\item[]|). The trivlist +% environment is mainly used for paragraphing environments, like +% verbatim, in which there is no margin change. It provides the same +% vertical spacing as the list environment, and works reasonably well +% when it occurs immediately after an |\item| command in an enclosing +% list. +% +% \StopEventually{} +% +% +% \changes{v1.0a}{1994/03/07}{Initial version, split from latex.dtx} +% \changes{v1.0a}{1994/03/07}{Long lines wrapped to 72 columns} +% +% +% \subsection{List and Trivlist} +% +% +% The following variables are used inside a list environment: +% \begin{description} +% \item[\cs{@totalleftmargin}] The distance that the prevailing left +% margin is indented from the outermost left margin, +% \item[\cs{linewidth}] The width of the current line. Must be +% initialized to |\hsize|. +% \item[\cs{@listdepth}] A count for holding current list nesting depth. +% \item[\cs{makelabel}] A macro with a single argument, used to +% generate the label from the argument (given or implied) +% of the |\item| command. Initialized to |\@mklab| by the |\list| +% command. This command must produce some stretch---i.e., an +% |\hfil|. +% \item[\cs{@inlabel}] A switch that is false except between the time +% an |\item| is encountered and the time that \TeX{} +% actually enters horizontal mode. Should be tested by commands +% that can be messed up by the list environment's use of |\everypar|. +% \item[\cs{box\@labels}] When |@inlabel = true|, it holds the labels +% to be put out by |\everypar|. +% \item[\texttt{@noparitem}] A switch set by |\list| when +% |@inlabel = true|. +% Handles the case of a |\list| being the first thing in an item. +% \item[\texttt{@noparlist}] A switch set true for a list that begins an +% item. No |\topsep| space is added before or after |\item|'s such a +% list. +% \item[\texttt{@newlist}] Set true by |\list|, set false by the first +% text (by |\everypar|). +% \item[\texttt{@noitemarg}] Set true when executing an |\item| with no +% explicit argument. Used to save space. To save time, make two +% separate |\@item| commands. +% \item[\texttt{@nmbrlist}] Set true by |\usecounter| command, causes +% list to be numbered. +% \item[\cs{@listctr}] |\def|'ed by |\usecounter| to name of counter. +% \item[\cs{@noskipsec}] A switch set true by a sectioning command when +% it is creating an in-text heading with |\everypar|. +% \end{description} +% +% Throughout a list environment, |\hsize| is the width of the current +% line, measured from the outermost left margin to the outermost right +% margin. Environments like tabbing should use |\linewidth| instead of +% |\hsize|. +% +% Here are the parameters of a list that can be set by commands in +% the |\list|'s COMMANDS argument. These parameters are all TeX +% skips or dimensions (defined by |\newskip| or |\newdimen|), so the +% usual \TeX\ or \LaTeX\ commands can be used to set them. The +% commands will be executed in vmode if and only if the |\list| was +% preceded by a |\par| (or something like an |\end{list}|), so the +% spacing parameters can be set according to whether the list is +% inside a paragraph or is its own paragraph. +% +% +% \subsection{Vertical Spacing (skips)} +% \begin{description} +% \item[\cs{topsep}:] Space between first item and preceding paragraph. +% \item[\cs{partopsep}:] Extra space added to \cs{topsep} when +% environment starts a new paragraph (is called in vmode). +% \item[\cs{itemsep}:] Space between successive items. +% \item[\cs{parsep}:] Space between paragraphs within an item -- the +% \cs{parskip} for this environment. +% \end{description} +% +% \subsection{Penalties} +% \begin{description} +% +% \item[\cs{@beginparpenalty}:] put at the beginning of a list +% \item[\cs{@endparpenalty}:] put at end of list +% \item[\cs{@itempenalty}:] put between items. +% \end{description} +% +% \subsection{Horizontal Spacing (dimens)} +% \begin{description} +% \item[\cs{leftmargin}:] space between left margin of enclosing +% environment (or of page if top level list) and left margin of +% this list. Must be nonnegative. +% \item[\cs{rightmargin}:] analogous. +% \item[\cs{listparindent}:] extra indentation at beginning of every +% paragraph of a list except the one started by the \cs{item} +% command. May be negative! Usually, labeled +% lists have \cs{listparindent} equal to zero. +% \item[\cs{itemindent}:] extra indentation added right BEFORE an item +% label. +% \item[\cs{labelwidth}:] nominal width of box that contains the label. +% If the natural width of the +% label $< =$ \cs{labelwidth}, +% then the label is flushed right inside a box +% of width \cs{labelwidth} (with an \cs{hfil}). +% Otherwise, +% a box of the natural width is employed, which +% causes an indentation of the text on that line. +% \item[\cs{labelsep}:] space between end of label box and text of +% first item. +% \end{description} +% \subsection{Default Values} +% Defaults for the list environment are set as follows. +% First, \cs{rightmargin}, \cs{listparindent} and \cs{itemindent} +% are set +% to 0pt. Then, one of the commands +% \cs{@listi}, \cs{@listii}, ... , \cs{@listvi} +% is called, depending upon the current level of the list. +% The \cs{@list} \ldots commands should be defined by the document +% style. A convention that the document style should follow is +% to set \cs{leftmargin} to +% \cs{leftmargini},\ldots, \cs{leftmarginvi} for +% the appropriate level. Items that aren't changed may be left +% alone, but everything that could possibly be changed must be +% reset. +% \begin{oldcomments} +% \list{LABEL}{COMMANDS} == +% BEGIN +% if \@listdepth > 5 +% then LaTeX error: 'Too deeply nested' +% else \@listdepth :=G \@listdepth + 1 +% fi +% \rightmargin := 0pt +% \listparindent := 0pt +% \itemindent := 0pt +% \eval(@list \romannumeral\the\@listdepth) %% Set default values: +% \@itemlabel :=L LABEL +% \makelabel == \@mklab +% @nmbrlist :=L false +% COMMANDS +% +% \@trivlist % commands common to \list and \trivlist +% +% \parskip :=L \parsep +% \parindent :=L \listparindent +% \linewidth :=L \linewidth - \rightmargin -\leftmargin +% \@totalleftmargin :=L \@totalleftmargin + \leftmargin +% \parshape 1 \@totalleftmargin \linewidth +% \ignorespaces % gobble space up to \item +% END +% +% \endlist == BEGIN \@listdepth :=G \@listdepth -1 +% \endtrivlist +% END +% +% \@trivlist == +% BEGIN +% if @newlist = T then \@noitemerr fi +% %% This command removed for some forgotten reason. +% \@topsepadd :=L \topsep +% if @noskipsec then leave vertical mode fi %% Added 11 Jun 85 +% if vertical mode +% then \@topsepadd :=L \@topsepadd + \partopsep +% else \unskip \par % remove glue from end of last line +% fi +% if @inlabel = true +% then @noparitem :=L true +% @noparlist :=L true +% else @noparlist :=L false +% \@topsep :=L \@topsepadd +% fi +% \@topsep :=L \@topsep + \parskip %% Change 4 Sep 85 +% \leftskip :=L 0pt % Restore paragraphing parameters +% \rightskip :=L \@rightskip +% \parfillskip :=L 0pt + 1fil +% +% NOTE: \@setpar called on every \list in case \par has been +% temporarily munged before the \list command. +% \@setpar{if @newlist = false then {\@@par} fi} +% \@newlist :=G T +% \@outerparskip :=L \parskip +% END +% +% \trivlist == +% BEGIN +% \parsep := \parskip +% @nmbrlist := F +% \@trivlist +% \labelwidth := 0 +% \leftmargin := 0 +% \itemindent := \parindent +% \@itemlabel :=L "empty" %% added 93/12/13 +% \makelabel{LABEL} == LABEL +% END +% +% \endtrivlist == +% BEGIN +% if @inlabel = T then \indent fi +% if horizontal mode then \unskip \par fi +% if @noparlist = true +% else if \lastskip > 0 +% then \@tempskipa := \lastskip +% \vskip - \lastskip +% \vskip \@tempskipa -\@outerparskip + \parskip +% fi +% \@endparenv +% fi +% END +% +% \@endparenv == +% BEGIN +% \addpenalty{@endparpenalty} +% \addvspace{\@topsepadd} +% \endgroup %% ends the \begin command's \begingroup +% \par == BEGIN +% \@restorepar +% \everypar{} +% \par +% END +% \everypar == BEGIN remove \lastbox \everypar{} END +% \begingroup %% to match the \end commands \endgroup +% END +% +% \item == BEGIN if math mode then WARNING fi +% if next char = [ +% then \@item +% else @noitemarg := true +% \@item[@itemlabel] +% END +% +% \@item[LAB] == +% BEGIN +% if @noparitem = true +% then @noparitem := false +% % NOTE: then clause hardly every taken, +% % so made a macro \@donoparitem +% \box\@labels :=G \hbox{\hskip -\leftmargin +% \box\@labels +% \hskip \leftmargin } +% if @minipage = false then +% \@tempskipa := \lastskip +% \vskip -\lastskip +% \vskip \@tempskipa + \@outerparskip - \parskip +% fi +% else if @inlabel = true +% then \indent \par % previous item empty. +% fi +% if hmode then 2 \unskip's +% % To remove any space at end of prev. +% % paragraph that could cause a blank line. +% \par +% fi +% if @newlist = T +% then if @nobreak = T % Kludge if list follows \section +% then \addvspace{\@outerparskip - \parskip} +% else \addpenalty{\@beginparpenalty} +% \addvspace{\@topsep} +% \addvspace{-\parskip} %% added 4 Sep 85 +% fi +% else \addpenalty{\@itempenalty} +% \addvspace{\itemsep} +% fi +% @inlabel :=G true +% fi +% +% \everypar{ @minipage :=G F +% @newlist :=G F +% if @inlabel = true +% then @inlabel :=G false +% \hskip -\parindent +% \box\@labels +% \penalty 0 +% %% 3 Oct 85 -- allow line break here +% \box\@labels :=G null +% fi +% \everypar{} } +% @nobreak :=G false +% if @noitemarg = true +% then @noitemarg := false +% if @nmbrlist +% then \refstepcounter{\@listctr} +% fi fi +% \@tempboxa :=L \hbox{\makelabel{LAB}} +% \box\@labels :=G \@labels \hskip \itemindent +% \hskip - (\labelwidth + \labelsep) +% if \wd \@tempboxa > \labelwidth +% then \box\@tempboxa +% else \hbox to \labelwidth {\unhbox\@tempboxa} +% fi +% \hskip\labelsep +% \ignorespaces %gobble space up to text +% END +% +% \makelabel{LABEL} == ERROR %% default to catch lonely \item +% +% +% \usecounter{CTR} == BEGIN @nmbrlist :=L true +% \@listctr == CTR +% \setcounter{CTR}{0} +% END +% +% DEFINE \dimen's and \count +% \end{oldcomments} +% \begin{macro}{\topskip} +% \begin{macro}{\partopsep} +% \begin{macro}{\itemsep} +% \begin{macro}{\parsep} +% \begin{macro}{\@topsep} +% \begin{macro}{\@topsepadd} +% \begin{macro}{\outerparskip} +% \begin{macrocode} +%<*2ekernel> +\newskip\topsep +\newskip\partopsep +\newskip\itemsep +\newskip\parsep +\newskip\@topsep +\newskip\@topsepadd +\newskip\@outerparskip +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro} +% \end{macro} +% \begin{macro}{\leftmargin}\begin{macro}{\rightmargin} +% \begin{macro}{\listparindent}\begin{macro}{\itemindent} +% \begin{macro}{\labelwidth}\begin{macro}{\labelsep} +% \begin{macro}{\@totalleftmargin} +% \begin{macrocode} +\newdimen\leftmargin +\newdimen\rightmargin +\newdimen\listparindent +\newdimen\itemindent +\newdimen\labelwidth +\newdimen\labelsep +\newdimen\linewidth +\newdimen\@totalleftmargin \@totalleftmargin=\z@ +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro} +% \end{macro}\end{macro} +% +% \begin{macro}{\leftmargini} +% \begin{macro}{\leftmarginii} +% \begin{macro}{\leftmarginiii} +% \begin{macro}{\leftmarginiv} +% \begin{macro}{\leftmarginv} +% \begin{macro}{\leftmarginvi} +% \begin{macrocode} +\newdimen\leftmargini +\newdimen\leftmarginii +\newdimen\leftmarginiii +\newdimen\leftmarginiv +\newdimen\leftmarginv +\newdimen\leftmarginvi +% \end{macrocode} +% \end{macro}\end{macro}\end{macro} +% \end{macro}\end{macro}\end{macro} +% +% \begin{macro}{\@listdepth}\begin{macro}{\@itempenalty} +% \begin{macro}{\@beginparpenalty}\begin{macro}{\@endparpenalty} +% \begin{macrocode} +\newcount\@listdepth \@listdepth=0 +\newcount\@itempenalty +\newcount\@beginparpenalty +\newcount\@endparpenalty +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro} +% +% \begin{macro}{\@labels} +% \begin{macrocode} +\newbox\@labels +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@inlabel} +% \begin{macro}{\@inlabelfalse} +% \begin{macro}{\@inlabeltrue} +% \begin{macrocode} +\newif\if@inlabel \@inlabelfalse +% \end{macrocode} +% \end{macro}\end{macro}\end{macro} +% +% \begin{macro}{\if@newlist} +% \begin{macro}{\@newlistfalse} +% \begin{macro}{\@newlisttrue} +% \begin{macrocode} +\newif\if@newlist \@newlistfalse +% \end{macrocode} +% \end{macro}\end{macro}\end{macro} +% +% \begin{macro}{\if@noparitem} +% \begin{macro}{\@noparitemfalse} +% \begin{macro}{\@noparitemtrue} +% \begin{macrocode} +\newif\if@noparitem \@noparitemfalse +% \end{macrocode} +% \end{macro}\end{macro}\end{macro} +% +% \begin{macro}{\if@noparlist} +% \begin{macro}{\@noparlistfalse} +% \begin{macro}{\@noparlisttrue} +% \begin{macrocode} +\newif\if@noparlist \@noparlistfalse +% \end{macrocode} +% \end{macro}\end{macro}\end{macro} +% +% \begin{macro}{\if@noitemarg} +% \begin{macro}{\@noitemargfalse} +% \begin{macro}{\@noitemargtrue} +% \begin{macrocode} +\newif\if@noitemarg \@noitemargfalse +% \end{macrocode} +% \end{macro}\end{macro}\end{macro} +% +% \begin{macro}{\if@newlist} +% \begin{macro}{\@newlistfalse} +% \begin{macro}{\@newlisttrue} +% \begin{macrocode} +\newif\if@nmbrlist \@nmbrlistfalse +% \end{macrocode} +% \end{macro}\end{macro}\end{macro} +% +% \begin{macro}{\list} +% \begin{macrocode} +\def\list#1#2{% + \ifnum \@listdepth >5\relax + \@toodeep + \else + \global\advance\@listdepth\@ne + \fi + \rightmargin\z@ + \listparindent\z@ + \itemindent\z@ + \csname @list\romannumeral\the\@listdepth\endcsname + \def\@itemlabel{#1}% + \let\makelabel\@mklab + \@nmbrlistfalse + #2\relax + \@trivlist + \parskip\parsep + \parindent\listparindent + \advance\linewidth -\rightmargin + \advance\linewidth -\leftmargin + \advance\@totalleftmargin \leftmargin + \parshape \@ne \@totalleftmargin \linewidth + \ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\par@deathcycles} +% \begin{macrocode} +\newcount\par@deathcycles +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@trivlist} +% \changes{v1.0e}{1994/12/02}{RmS: Added check for looping} +% \changes{v1.0p}{1996/10/31}{Added check for missing item in outer +% list} +% \changes{v1.0q}{1996/11/04}{Moved check for missing item: only checked +% when not inlabel flag is false} +% Because |\par| is sometimes made a no-op it is possible for a missing +% |\item| to produce a loop that does not fill memory and so never gets +% trapped by \TeX. We thus need to trap this here by seting |\par| to +% count the number of times a paragraph ii is called with no progress +% being made started. +% \begin{macrocode} +\def\@trivlist{% + \if@noskipsec \leavevmode \fi + \@topsepadd \topsep + \ifvmode + \advance\@topsepadd \partopsep + \else + \unskip \par + \fi + \if@inlabel + \@noparitemtrue + \@noparlisttrue + \else + \if@newlist \@noitemerr \fi + \@noparlistfalse + \@topsep \@topsepadd + \fi + \advance\@topsep \parskip + \leftskip \z@skip + \rightskip \@rightskip + \parfillskip \@flushglue + \par@deathcycles \z@ + \@setpar{\if@newlist + \advance\par@deathcycles \@ne + \ifnum \par@deathcycles >\@m + \@noitemerr + {\@@par}% + \fi + \else + {\@@par}% + \fi}% + \global \@newlisttrue + \@outerparskip \parskip} +% \end{macrocode} +% \end{macro} +% +% \changes{0.0}{1992/03/18}{RmS: added \cs{@nmbrlistfalse}} +% \begin{macro}{\trivlist} +% \begin{macrocode} +\def\trivlist{% + \parsep\parskip + \@nmbrlistfalse + \@trivlist + \labelwidth\z@ + \leftmargin\z@ + \itemindent\z@ +% \end{macrocode} +% +% We initialise |\@itemlabel| so that a \texttt{trivlist} with +% an |\item| not having an optional argument doesn't produce an +% error message. +% \changes{latex2e}{1993/12/13}{Initialised \cs{@itemlabel}} +% \begin{macrocode} + \let\@itemlabel\@empty + \def\makelabel##1{##1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\endlist} +% \begin{macrocode} +\def\endlist{% + \global\advance\@listdepth\m@ne + \endtrivlist} +% \end{macrocode} +% \end{macro} +% +% The definition of \cs{trivlist} used to be in ltspace.dtx +% so that other commands could be `let to it'. +% They now use \cs{def}. +% \begin{macro}{\endtrivlist} +% \changes{v1.2b ltspace}{1994/11/12}{Changed order of tests to make +% \cs{@noitemerror} correct: end of an era.} +% \changes{v1.0i}{1995/05/25}{Macros moved from ltspace.dtx} +% \changes{v1.0n}{1996/10/25}{Change \cs{indent} to \cs{leavevmode}} +% \changes{v1.0n}{1996/10/25}{Reset flags explicitly} +% \changes{v1.0o}{1996/10/26}{Correct typo} +% \begin{macrocode} +\def\endtrivlist{% + \if@inlabel + \leavevmode + \global \@inlabelfalse + \fi + \if@newlist + \@noitemerr + \global \@newlistfalse + \fi + \ifhmode\unskip \par +% \end{macrocode} +% We also check if we are in math mode and issue an error message +% if so (hoping that |\@currenvir| resolves suitably). Otherwise +% the usual ``perhaps a missing item'' error will get triggered +% later which is confusing. +% \changes{v1.0s}{2002/10/28}{Check for math mode (pr/3437)} +% \begin{macrocode} + \else + \@inmatherr{\end{\@currenvir}}% + \fi + \if@noparlist \else + \ifdim\lastskip >\z@ + \@tempskipa\lastskip \vskip -\lastskip + \advance\@tempskipa\parskip \advance\@tempskipa -\@outerparskip + \vskip\@tempskipa + \fi + \@endparenv + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\@endparenv} +% \begin{macro}{\@doendpe} +% To suppress the paragraph indentation in text immediately following +% a paragraph-making environment, \cs{everypar} is changed to remove the +% space, and \cs{par} is redefined to restore \cs{everypar}. Instead of +% redefining \cs{par} and \cs{everpar}, \cs{@endparenv} was changed to +% set the @endpe switch, letting \cs{end} redefine \cs{par} and +% \cs{everypar}. +% +% This allows paragraph-making environments to work right when called +% by other environments. (Changed 27 Oct 86) +% \begin{macrocode} +\def\@endparenv{% + \addpenalty\@endparpenalty\addvspace\@topsepadd\@endpetrue} +% \end{macrocode} +% +% \begin{macrocode} +\def\@doendpe{\@endpetrue + \def\par{\@restorepar\everypar{}\par\@endpefalse}\everypar +% \end{macrocode} +% +% Use |\setbox0=\lastbox| instead of |\hskip -\parindent| +% so that a \cs{noindent} becomes a no-op when used before +% a line immediately following a list environment(23 Oct 86). +% \changes{v1.0k}{1995/11/07}{Enclosed \cs{setbox0} assignment by a +% group so that it leaves the contents of box $0$ intact.} +% \begin{macrocode} + {{\setbox\z@\lastbox}\everypar{}\@endpefalse}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\if@endpe} +% \begin{macro}{\@endpefalse} +% \begin{macro}{\@endpeltrue} +% \begin{macrocode} +\newif\if@endpe +\@endpefalse +% \end{macrocode} +% \end{macro}\end{macro}\end{macro} +% +% +% \begin{macro}{\@mklab} +% \begin{macrocode} +\def\@mklab#1{\hfil #1} +% \end{macrocode} +% \end{macro} +% +% \changes{LaTeX2.09}{1992/09/18} +% {(RmS) Added warning if \cs{item} is used in math mode} +% \changes{v1.0c}{1994/04/28} +% {Replaced \cs{@ltxnomath} by \cs{@inmatherr}} +% \changes{v1.0d}{1994/05/03} +% {Removed superfluous braces} +% \begin{macro}{\item} +% \begin{macrocode} +\def\item{% + \@inmatherr\item + \@ifnextchar [\@item{\@noitemargtrue \@item[\@itemlabel]}} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\@donoparitem} +% \begin{macrocode} +\def\@donoparitem{% + \@noparitemfalse + \global\setbox\@labels\hbox{\hskip -\leftmargin + \unhbox\@labels + \hskip \leftmargin}% + \if@minipage\else + \@tempskipa\lastskip + \vskip -\lastskip + \advance\@tempskipa\@outerparskip + \advance\@tempskipa -\parskip + \vskip\@tempskipa + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@item} +% \changes{v1.0l}{1996/07/26}{Remove unecessary \cs{global} before +% \cs{@minipage...}} +% \begin{macrocode} +\def\@item[#1]{% + \if@noparitem + \@donoparitem + \else + \if@inlabel + \indent \par + \fi + \ifhmode + \unskip\unskip \par + \fi + \if@newlist + \if@nobreak + \@nbitem + \else + \addpenalty\@beginparpenalty + \addvspace\@topsep + \addvspace{-\parskip}% + \fi + \else + \addpenalty\@itempenalty + \addvspace\itemsep + \fi + \global\@inlabeltrue + \fi + \everypar{% + \@minipagefalse + \global\@newlistfalse +% \end{macrocode} +% This |\if@inlabel| check is needed in case an item starts of +% inside a group so that |\everypar| does not become empty +% outside that group. +% \@nobreakfalse, etc etc. +% \begin{macrocode} + \if@inlabel + \global\@inlabelfalse +% \end{macrocode} +% The paragraph indent is now removed by using |\setbox...| since +% this makes |\noindent| a no-op here, as it should be. Thus the +% following comment is redundant but is left here for the sake of +% future historians: +% this next command was changed from an hskip to a kern to avoid +% a break point after the parindent box: the skip could cause a +% line-break if a very long label occurs in raggedright setting. +% \changes{v1.0d}{1994/05/03}{\cs{hskip} changed to \cs{kern}} +% \changes{v1.0m}{1996/10/23}{\cs{kern...} changed to \cs{setbox...}} +% \changes{v1.0r}{1997/02/21} +% {\cs{ifvoid} check added for \cs{noindent}. latex/2414} +% If |\noindent| was used after |\item| want to cancel the |\itemindent| +% skip. This case can be detected as the indentation box will be void. +% \begin{macrocode} + {\setbox\z@\lastbox + \ifvoid\z@ + \kern-\itemindent + \fi}% +% \end{macrocode} +% +% \begin{macrocode} + \box\@labels + \penalty\z@ + \fi +% \end{macrocode} +% This code is intended to prevent a page break after the first +% line of an item that comes immediately after a section title. It +% may be sensible to always forbid a page break after one line of +% an item? As with all such settings of |\clubpenalty| it is local +% so will have no effect if the item starts in a group. +% +% Only resetting |\@nobreak| when it is true is now +% essential since now it is sometimes set locally. +% \changes{v1.0m}{1996/10/23}{Added setting of \cs{clubpenalty} and +% set \cs{@nobreakfalse} only when necessary} +% \begin{macrocode} + \if@nobreak + \@nobreakfalse + \clubpenalty \@M + \else + \clubpenalty \@clubpenalty + \everypar{}% + \fi}% +% \end{macrocode} +% \changes{v1.0l}{1996/07/26}{Remove unecessary \cs{global} before +% \cs{@nobreak...}} +% \changes{v1.0m}{1996/10/23}{\cs{@nobreak...} moved into the +% \cs{everypar} and not executed unconditionally, see above} +% \begin{macrocode} + \if@noitemarg + \@noitemargfalse + \if@nmbrlist +% \end{macrocode} +% \changes{v1.0g}{1995/05/17}{Removed surplus braces} +% \begin{macrocode} + \refstepcounter\@listctr + \fi + \fi +% \end{macrocode} +% We use |\sbox| to support colour commands. +% \changes{LaTeX2e}{1993/12/08}{use \cs{sbox} to support colour} +% \begin{macrocode} + \sbox\@tempboxa{\makelabel{#1}}% + \global\setbox\@labels\hbox{% + \unhbox\@labels + \hskip \itemindent + \hskip -\labelwidth + \hskip -\labelsep + \ifdim \wd\@tempboxa >\labelwidth + \box\@tempboxa +% \end{macrocode} +% \changes{LaTeX2.09}{1991/11/22} +% {(RmS) Changed second call to \cs{makelabel} to +% \cs{unhbox}\cs{@tempboxa}. +% Avoids problems with side effects in \cs{makelabel} and is +% more efficient.} +% \begin{macrocode} + \else + \hbox to\labelwidth {\unhbox\@tempboxa}% + \fi + \hskip \labelsep}% + \ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\makelabel} +% \changes{LaTeX2.09}{1991/11/04} +% {(RmS) added default definition for \cs{makelabel}, +% to produce an error message.} +% \begin{macrocode} +\def\makelabel#1{% + \@latex@error{Lonely \string\item--perhaps a missing + list environment}\@ehc} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@nbitem} +% \changes{v1.0g}{1995/05/17}{Removed surplus braces} +% \begin{macrocode} +\def\@nbitem{% + \@tempskipa\@outerparskip + \advance\@tempskipa -\parskip + \addvspace\@tempskipa} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\usecounter} +% \begin{macrocode} +\def\usecounter#1{\@nmbrlisttrue\def\@listctr{#1}\setcounter{#1}\z@} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Itemize and Enumerate} +% +% Enumeration is done with four counters: |enumi|, |enumii|, |enumiii| +% and |enumiv|, where |enum|N controls the numbering of the Nth level +% enumeration. The label is generated by the commands +% \cs{labelenumi} \ldots{} \cs{labelenumiv}, which should be defined +% by the document style. +% Note that \cs{p@enum}N\cs{theenum}N defines the output +% of a \cs{ref} command. A typical definition might be: +% \begin{verbatim} +% \def\theenumii{\alph{enumii}} +% \def\p@enumii{\theenumi} +% \def\labelenumii{(\theenumii)} +% \end{verbatim} +% which will print the labels as `(a)', `(b)', \ldots +% and print a \cs{ref} as `3a'. +% +% The item numbers are moved to the right of the label box, so they are +% always a distance of \cs{labelsep} from the item. +% +% \cs{@enumdepth} holds the current enumeration nesting depth. +% +% Itemization is controlled by four commands: \cs{labelitemi}, +% \cs{labelitemii}, +% \cs{labelitemiii}, and \cs{labelitemiv}. +% To cause the second-level list to be +% bulleted, you just define \cs{labelitemii} +% to be $\bullet$. \cs{@itemspacing} +% and \cs{@itemdepth} are the analogs of \cs{@enumspacing} and +% \cs{@enumdepth}. +% +% \begin{oldcomments} +% \enumerate == +% BEGIN +% if \@enumdepth > 3 +% then errormessage: ``Too deeply nested''. +% else \@enumdepth :=L \@enumdepth + 1 +% \@enumctr :=L eval(enum@\romannumeral\the\@enumdepth) +% \list{\label(\@enumctr)} +% {\usecounter{\@enumctr} +% \makelabel{LABEL} == \hss \llap{LABEL}} +% fi +% END +% +% \endenumerate == \endlist +% \end{oldcomments} +% +% \begin{macro}{\@enumdepth} +% \begin{macrocode} +\newcount\@enumdepth \@enumdepth = 0 +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@enumi} +% \begin{macro}{\c@enumii} +% \begin{macro}{\c@enumii} +% \begin{macro}{\c@enumiv} +% \begin{macrocode} +\@definecounter{enumi} +\@definecounter{enumii} +\@definecounter{enumiii} +\@definecounter{enumiv} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{environment}{enumerate} +% \changes{v1.0g}{1995/05/17}{Use \cs{thr@@} and remove surplus braces} +% \begin{macrocode} +\def\enumerate{% + \ifnum \@enumdepth >\thr@@\@toodeep\else + \advance\@enumdepth\@ne + \edef\@enumctr{enum\romannumeral\the\@enumdepth}% +% \end{macrocode} +% +% \changes{v1.0j}{1995/07/09}{Use \cs{expandafter}} +% \begin{macrocode} + \expandafter + \list + \csname label\@enumctr\endcsname + {\usecounter\@enumctr\def\makelabel##1{\hss\llap{##1}}}% + \fi} +% \end{macrocode} +% +% \begin{macrocode} +\let\endenumerate =\endlist +% \end{macrocode} +% \end{environment} +% +% +% \begin{oldcomments} +% \itemize == +% BEGIN +% if \@itemdepth > 3 +% then errormessage: 'Too deeply nested'. +% else \@itemdepth :=L \@itemdepth + 1 +% \@itemitem == eval(labelitem\romannumeral\the\@itemdepth) +% \list{\@nameuse{\@itemitem}} +% {\makelabel{LABEL} == \hss \llap{LABEL}} +% fi +% END +% +% \enditemize == \endlist +% +% \end{oldcomments} +% +% \begin{macro}{\@itemdepth} +% \begin{macrocode} +\newcount\@itemdepth \@itemdepth = 0 +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{itemize} +% \changes{v1.0g}{1995/05/17}{Use \cs{thr@@}} +% \begin{macrocode} +\def\itemize{% + \ifnum \@itemdepth >\thr@@\@toodeep\else + \advance\@itemdepth\@ne + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% +% \end{macrocode} +% +% \changes{v1.0j}{1995/07/09}{Use \cs{expandafter}} +% \begin{macrocode} + \expandafter + \list + \csname\@itemitem\endcsname + {\def\makelabel##1{\hss\llap{##1}}}% + \fi} +% \end{macrocode} +% +% \begin{macrocode} +\let\enditemize =\endlist +%</2ekernel> +% \end{macrocode} +% \end{environment} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltlogos.dtx b/Master/texmf-dist/source/latex/base/ltlogos.dtx new file mode 100644 index 00000000000..61173b17e2d --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltlogos.dtx @@ -0,0 +1,123 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltlogos.dtx +%<*driver> +% \fi +\ProvidesFile{ltlogos.dtx} + [1998/08/17 v1.1i LaTeX Kernel (Logos)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltlogos.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{40} +% +% \changes{v1.1a}{1994/05/16}{(ASAJ) Split from ltinit.dtx.} +% \changes{v1.1b}{1994/05/18}{(ASAJ) Added the \TeX{} logo.} +% \changes{v1.1b}{1994/05/18}{(ASAJ) Made the \LaTeXe{} logo use the +% text font `2' rather than the math font `2'.} +% \changes{v1.1i}{1998/08/17}{(RmS) Minor documentation fixes.} +% +% \section{Logos} +% +% Various logos are defined here. +% +% \StopEventually{} +% +% \begin{macro}{\TeX} +% The \TeX{} logo, adjusted so that a full stop after the logo +% counts as ending a sentence. +% \begin{macrocode} +%<*2ekernel> +\def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\LaTeX} +% The \LaTeX{} logo. +% \changes{LaTeX2e}{1993/11/24}{Macro changed} +% \changes{v1.0o}{1994/05/11}{Use \cs{DeclareProtectedCommand}. ASAJ.} +% \changes{v1.1d}{1994/06/01} +% {Add \cs{m@th} to force math size calculations} +% \changes{v1.1e}{1994/07/20}{Save a few tokens} +% +% \changes{v1.1h}{1997/10/08}{Simplify macro (force loading of +% suitable math fonts once).} +% \begin{macrocode} +\DeclareRobustCommand{\LaTeX}{L\kern-.36em% + {\sbox\z@ T% + \vbox to\ht\z@{\hbox{\check@mathfonts + \fontsize\sf@size\z@ + \math@fontsfalse\selectfont + A}% + \vss}% + }% + \kern-.15em% + \TeX} +% \end{macrocode} +% \end{macro} +% +% \changes{v1.1c}{1994/05/26}{Remove \cs{SLiTeX} logo} +% +% \begin{macro}{\LaTeXe} +% The \LaTeXe\ logo as proposed by A-W designers. +% \changes{LaTeX2e}{1993/11/22}{Macro added} +% \changes{LaTeX2e}{1993/12/16}{Extended logo by DPC} +% \changes{v1.0o}{1994/05/11}{Use \cs{DeclareProtectedCommand}. ASAJ.} +% \changes{v1.1e}{1994/07/20}{Save a few tokens} +% \changes{v1.1f}{1997/05/29}{Added \cs{m@th} so that the \LaTeXe{} +% logo works with non-zero values of \cs{mathsurround}.} +% \begin{macrocode} +\DeclareRobustCommand{\LaTeXe}{\mbox{\m@th + \if b\expandafter\@car\f@series\@nil\boldmath\fi + \LaTeX\kern.15em2$_{\textstyle\varepsilon}$}} +%</2ekernel> +% \end{macrocode} +% \end{macro} +% +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/base/ltmath.dtx b/Master/texmf-dist/source/latex/base/ltmath.dtx new file mode 100644 index 00000000000..f50778c5826 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltmath.dtx @@ -0,0 +1,996 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%%% From File: ltmath.dtx +% +%<leqno>\ProvidesFile{leqno.clo} +%<fleqn>\ProvidesFile{fleqn.clo} +%<leqno,fleqn> [1998/08/17 v1.1c Standard LaTeX option +%<leqno> (left equation numbers)] +%<fleqn> (flush left equations)] +% +%<*driver> +% \fi +\ProvidesFile{ltmath.dtx} + [1999/10/09 v1.1f LaTeX Kernel (Math Setup)] +% \iffalse +%</driver> +% +%<*driver> +\documentclass{ltxdoc} +\GetFileInfo{ltmath.dtx} +\title{\filename} +\date{\filedate} +\author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} +\begin{document} + \maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{1101} +% +% \changes{v1.1b}{1996/07/26}{Removed \cs{global} before +% \cs{@ignoretrue} in various places.} +% \changes{v1.1c}{1998/08/17}{(RmS) Minor documentation fixes.} +% +% \section{Math setup} +% +% This file contains a lot of the original plain \TeX{} code, as well +% as the \LaTeX{} environments for math. It still needs sorting out. +% +% \StopEventually{} +% +% \begin{macrocode} +%<*2ekernel> +\message{math definitions,} +% \end{macrocode} +% +% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +% +% \subsection{Math commands based on plain \TeX} +% +% \subsubsection{The log-like functions} +% +% \changes{1.0m}{1994/10/29}{ASAJ: Added \cs{DeclareMathOperator}.} +% \changes{v1.0o}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% \changes{1.0q}{1994/11/30}{ASAJ: \cs{DeclareMathOperator} moved to +% AMS\LaTeX.} +% \changes{v1.0r}{1995/05/07}{Use \cs{hb@xt@}} +% \changes{v1.0r}{1995/05/21}{Update some plain macros} +% \changes{v1.0t}{1995/06/28}{minor doc edits} +% +% \begin{macro}{\log} +% The standard operators: +% \begin{macrocode} +\def\log{\mathop{\operator@font log}\nolimits} +\def\lg{\mathop{\operator@font lg}\nolimits} +\def\ln{\mathop{\operator@font ln}\nolimits} +\def\lim{\mathop{\operator@font lim}} +\def\limsup{\mathop{\operator@font lim\,sup}} +\def\liminf{\mathop{\operator@font lim\,inf}} +\def\sin{\mathop{\operator@font sin}\nolimits} +\def\arcsin{\mathop{\operator@font arcsin}\nolimits} +\def\sinh{\mathop{\operator@font sinh}\nolimits} +\def\cos{\mathop{\operator@font cos}\nolimits} +\def\arccos{\mathop{\operator@font arccos}\nolimits} +\def\cosh{\mathop{\operator@font cosh}\nolimits} +\def\tan{\mathop{\operator@font tan}\nolimits} +\def\arctan{\mathop{\operator@font arctan}\nolimits} +\def\tanh{\mathop{\operator@font tanh}\nolimits} +\def\cot{\mathop{\operator@font cot}\nolimits} +\def\coth{\mathop{\operator@font coth}\nolimits} +\def\sec{\mathop{\operator@font sec}\nolimits} +\def\csc{\mathop{\operator@font csc}\nolimits} +\def\max{\mathop{\operator@font max}} +\def\min{\mathop{\operator@font min}} +\def\sup{\mathop{\operator@font sup}} +\def\inf{\mathop{\operator@font inf}} +\def\arg{\mathop{\operator@font arg}\nolimits} +\def\ker{\mathop{\operator@font ker}\nolimits} +\def\dim{\mathop{\operator@font dim}\nolimits} +\def\hom{\mathop{\operator@font hom}\nolimits} +\def\det{\mathop{\operator@font det}} +\def\exp{\mathop{\operator@font exp}\nolimits} +\def\Pr{\mathop{\operator@font Pr}} +\def\gcd{\mathop{\operator@font gcd}} +\def\deg{\mathop{\operator@font deg}\nolimits} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bmod} +% And some operators have to be done by hand: +% \begin{macrocode} +\def\bmod{% + \nonscript\mskip-\medmuskip\mkern5mu% + \mathbin{\operator@font mod}\penalty900\mkern5mu% + \nonscript\mskip-\medmuskip} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\pmod} +% \begin{macrocode} +\def\pmod#1{% + \allowbreak\mkern18mu({\operator@font mod}\,\,#1)} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Biggggg} +% +% \begin{macro}{\big} +% Variants on |\big| and friends for use with delimiters: +% \begin{macrocode} +\def\bigl{\mathopen\big} +\def\bigm{\mathrel\big} +\def\bigr{\mathclose\big} +\def\Bigl{\mathopen\Big} +\def\Bigm{\mathrel\Big} +\def\Bigr{\mathclose\Big} +\def\biggl{\mathopen\bigg} +\def\biggm{\mathrel\bigg} +\def\biggr{\mathclose\bigg} +\def\Biggl{\mathopen\Bigg} +\def\Biggm{\mathrel\Bigg} +\def\Biggr{\mathclose\Bigg} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{The UNSORTED Rest} +% +% The other math commands are lifted from plain \TeX. +% +% \begin{macro}{\jot} +% \begin{macrocode} +\newdimen\jot +\jot=3pt +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\interdisplaylinepenalty} +% \begin{macrocode} +\newcount\interdisplaylinepenalty +\interdisplaylinepenalty=100 +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\choose} +% \begin{macrocode} +\def\choose{\atopwithdelims()} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\atopwithdelims} +% \begin{macrocode} +\def\brack{\atopwithdelims[]} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\brace} +% \begin{macrocode} +\def\brace{\atopwithdelims\{\}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\mathpalette} +% \changes{v1.0r}{1995/05/21}{Use \cs{sqrtsign} instead of +% \cs{sqrt}} +% \begin{macrocode} +\def\mathpalette#1#2{% + \mathchoice + {#1\displaystyle{#2}}% + {#1\textstyle{#2}}% + {#1\scriptstyle{#2}}% + {#1\scriptscriptstyle{#2}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\root} +% \changes{v1.1d}{1997/01/08} +% {(DPC) Remove spurious space tokens from +% plain \TeX\ definition /2359} +% \begin{macro}{\rootbox} +% \begin{macro}{\r@@t} +% \begin{macrocode} +\newbox\rootbox +% \end{macrocode} +% +% \begin{macrocode} +\def\root#1\of{% + \setbox\rootbox\hbox{$\m@th\scriptscriptstyle{#1}$}% + \mathpalette\r@@t} +% \end{macrocode} +% +% \begin{macrocode} +\def\r@@t#1#2{% + \setbox\z@\hbox{$\m@th#1\sqrtsign{#2}$}% + \dimen@\ht\z@ \advance\dimen@-\dp\z@ + \mkern5mu\raise.6\dimen@\copy\rootbox + \mkern-10mu\box\z@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\phantom} +% \changes{v1.0p}{1994/11/18} +% {(DPC) use \cs{expandafter} instead of \cs{next}} +% \changes{v1.0p}{1994/11/18} +% {(DPC) colour support} +% \begin{macro}{\hphantom} +% \begin{macro}{\vphantom} +% \begin{macrocode} +\newif\ifv@ +\newif\ifh@ +% \end{macrocode} +% +% \begin{macrocode} +\def\vphantom{\v@true\h@false\ph@nt} +% \end{macrocode} +% +% \begin{macrocode} +\def\hphantom{\v@false\h@true\ph@nt} +% \end{macrocode} +% +% \begin{macrocode} +\def\phantom{\v@true\h@true\ph@nt} +% \end{macrocode} +% +% \begin{macrocode} +\def\ph@nt{% + \ifmmode + \expandafter\mathpalette\expandafter\mathph@nt + \else + \expandafter\makeph@nt + \fi} +% \end{macrocode} +% +% \begin{macrocode} +\def\makeph@nt#1{% + \setbox\z@\hbox{\color@begingroup#1\color@endgroup}\finph@nt} +% \end{macrocode} +% +% \begin{macrocode} +\def\mathph@nt#1#2{% + \setbox\z@\hbox{$\m@th#1{#2}$}\finph@nt} +% \end{macrocode} +% +% \begin{macrocode} +\def\finph@nt{% + \setbox\tw@\null + \ifv@ \ht\tw@\ht\z@ \dp\tw@\dp\z@\fi + \ifh@ \wd\tw@\wd\z@\fi \box\tw@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\mathstrut} +% \begin{macrocode} +\def\mathstrut{\vphantom(} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\smash} +% \changes{v1.0p}{1994/11/18} +% {(DPC) use \cs{expandafter} instead of \cs{next}} +% \changes{v1.0p}{1994/11/18} +% {(DPC) colour support} +% \begin{macrocode} +\def\smash{% + \relax % \relax, in case this comes first in \halign + \ifmmode + \expandafter\mathpalette\expandafter\mathsm@sh + \else + \expandafter\makesm@sh + \fi} +% \end{macrocode} +% +% \begin{macrocode} +\def\makesm@sh#1{% + \setbox\z@\hbox{\color@begingroup#1\color@endgroup}\finsm@sh} +\def\mathsm@sh#1#2{% + \setbox\z@\hbox{$\m@th#1{#2}$}\finsm@sh} +\def\finsm@sh{\ht\z@\z@ \dp\z@\z@ \box\z@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\buildrel} +% \begin{macrocode} +\def\buildrel#1\over#2{\mathrel{\mathop{\kern\z@#2}\limits^{#1}}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\cases} +% \changes{LaTeX2.09}{1991/08/14} +% {(RmS) inserted extra braces around entry for NFSS} +% \begin{macrocode} +\def\cases#1{\left\{\,\vcenter{\normalbaselines\m@th + \ialign{$##\hfil$&\quad{##}\hfil\crcr#1\crcr}}\right.} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\matrix} +% \begin{macrocode} +\def\matrix#1{\null\,\vcenter{\normalbaselines\m@th + \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr + \mathstrut\crcr\noalign{\kern-\baselineskip} + #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\pmatrix} +% \begin{macrocode} +\def\pmatrix#1{\left(\matrix{#1}\right)} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\bordermatrix} +% \changes{LaTeX2e}{1994/01/25}{Removed \cs{p@renwd}.} +% \begin{macrocode} +\def\bordermatrix#1{\begingroup \m@th + \@tempdima 8.75\p@ + \setbox\z@\vbox{% + \def\cr{\crcr\noalign{\kern2\p@\global\let\cr\endline}}% + \ialign{$##$\hfil\kern2\p@\kern\@tempdima&\thinspace\hfil$##$\hfil + &&\quad\hfil$##$\hfil\crcr + \omit\strut\hfil\crcr\noalign{\kern-\baselineskip}% + #1\crcr\omit\strut\cr}}% + \setbox\tw@\vbox{\unvcopy\z@\global\setbox\@ne\lastbox}% + \setbox\tw@\hbox{\unhbox\@ne\unskip\global\setbox\@ne\lastbox}% + \setbox\tw@\hbox{$\kern\wd\@ne\kern-\@tempdima\left(\kern-\wd\@ne + \global\setbox\@ne\vbox{\box\@ne\kern2\p@}% + \vcenter{\kern-\ht\@ne\unvbox\z@\kern-\baselineskip}\,\right)$}% + \null\;\vbox{\kern\ht\@ne\box\tw@}\endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\openup} +% \begin{macrocode} +\def\openup{\afterassignment\@penup\dimen@} +% \end{macrocode} +% +% \begin{macrocode} +\def\@penup{\advance\lineskip\dimen@ + \advance\baselineskip\dimen@ + \advance\lineskiplimit\dimen@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\displaylines} +% \begin{macrocode} +\newif\ifdt@p +% \end{macrocode} +% +% \begin{macrocode} +\def\displ@y{\global\dt@ptrue\openup\jot\m@th + \everycr{\noalign{\ifdt@p \global\dt@pfalse \ifdim\prevdepth>-1000\p@ + \vskip-\lineskiplimit \vskip\normallineskiplimit \fi + \else \penalty\interdisplaylinepenalty \fi}}} +% \end{macrocode} +% +% \begin{macrocode} +\def\@lign{\tabskip\z@skip\everycr{}} % restore inside \displ@y +% \end{macrocode} +% +% \begin{macrocode} +\def\displaylines#1{\displ@y \tabskip\z@skip + \halign{\hb@xt@\displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr + #1\crcr}} +% \end{macrocode} +% \end{macro} +% +% \changes{v1.0r}{1995/05/21}{Remove \cs{mathhexbox} from this file} +% +% \begin{macro}{\sp} +% \begin{macro}{\sb} +% \begin{macrocode} +\let\sp=^ +\let\sb=_ +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\>} +% \begin{macro}{\;} +% \begin{macro}{\!} +% \begin{macrocode} +%\def\,{\mskip\thinmuskip} % already defined in ltspace +\def\>{\mskip\medmuskip} +\def\;{\mskip\thickmuskip} +\def\!{\mskip-\thinmuskip} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\*} +% \begin{macrocode} +\def\*{\discretionary{\thinspace\the\textfont2\char2}{}{}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\:} +% Nickname for the medium space since |\>| is not available inside +% \texttt{tabbing}. +% \begin{macrocode} +\let\:=\> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\active@math@prime} +% \changes{v1.1e}{1999/10/09}{Macro added, see PR 3104.} +% This is the definition of the active math prime. +% \begin{macrocode} +\def\active@math@prime{^\bgroup\prim@s} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\prime@s} +% \changes{v1.0p}{1994/11/18} +% {(DPC) use \cs{@let@token} instead of \cs{next} +% and \cs{expandafter} instead of \cs{nxt}} +% \changes{v1.1e}{1999/10/09}{Introduce \cs{active@math@prime}.} +% \begin{macrocode} +{\catcode`\'=\active \global\let'\active@math@prime} +% \end{macrocode} +% +% \begin{macrocode} +\def\prim@s{% + \prime\futurelet\@let@token\pr@m@s} +% \end{macrocode} +% +% \begin{macrocode} +\def\pr@m@s{% + \ifx'\@let@token + \expandafter\pr@@@s + \else + \ifx^\@let@token + \expandafter\expandafter\expandafter\pr@@@t + \else + \egroup + \fi + \fi} +% \end{macrocode} +% +% \begin{macrocode} +\def\pr@@@s#1{\prim@s} +% \end{macrocode} +% +% \begin{macrocode} +\def\pr@@@t#1#2{#2\egroup} +% \end{macrocode} +% \end{macro} +% +% \changes{v1.0i}{1994/05/17}{Replaced \cs{let} by \cs{gdef}, for +% indirect definition.} +% \begin{macrocode} +{\catcode`\_=\active \gdef_{\_}} % _ in math is + % either subscript or \_ +% \end{macrocode} +% +% +% \changes{v1.0m}{1994/10/29}{ASAJ: Removed \cs{dag}, \cs{ddag}.} +% \changes{v1.0m}{1994/10/29}{ASAJ: Renamed \cs{S} and \cs{P} to +% \cs{mathsection} and \cs{mathparagraph} and made them +% \cs{mathchardef}s.} +% \changes{v1.0m}{1994/10/29}{ASAJ: Added \cs{mathellipsis}, +% \cs{mathdollar} and \cs{mathsterling}.} +% \changes{v1.0n}{1994/10/30}{ASAJ: Moved the new commands to ltoutenc.} +% +% \subsection{Math Environments} +% +% \changes{1.0m}{1994/10/29}{ASAJ: Tidied up documentation.} +% +% \begin{macro}{\(} +% \begin{macro}{\)} +% Produces |$...$| with checks that |\(| isn't used in math mode, and +% that |\)| is only used in math mode begun with |\(|. +% \begin{macrocode} +\def\({\relax\ifmmode\@badmath\else$\fi} +\def\){\relax\ifmmode\ifinner$\else\@badmath\fi\else \@badmath\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\[} +% \begin{macro}{\]} +% Produces |$$...$$| with checks that |\[| isn't used in math mode, +% and that |\]| is only used in math mode begun with |\]|. +% \begin{macrocode} +\def\[{% + \relax\ifmmode + \@badmath + \else + \ifvmode + \nointerlineskip + \makebox[.6\linewidth]% + \fi + $$%%$$ BRACE MATCH HACK + \fi +} +% \end{macrocode} +% +% \begin{macrocode} +\def\]{% + \relax\ifmmode + \ifinner + \@badmath + \else + $$%%$$ BRACE MATCH HACK + \fi + \else + \@badmath + \fi + \ignorespaces +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{environment}{math} +% \begin{environment}{displaymath} +% Disguises for |\(...\)| and |\[...\]|. +% \begin{macrocode} +\let\math=\( +\let\endmath=\) +% \end{macrocode} +% +% \begin{macrocode} +\def\displaymath{\[} +\def\enddisplaymath{\]\@ignoretrue} +% \end{macrocode} +% \end{environment} +% \end{environment} +% +% +% \begin{environment}{equation} +% \changes{LaTeX2.09}{1992/01/10}{RmS: put \cs{hbox} around \cs{@eqnnum} +% to typeset the equation number in text mode +% (as in the eqnarray env.)} +% \begin{macro}{\c@equation} +% Numbered equations, using the counter |\c@equation|. +% \emph{Note}: The document style must define |\theequation| etc., and +% do the appropriate |\@addtoreset|. It should also redefine |\@eqnnum| +% if another format for the equation number is desired other than the +% standard (...), or to move the equation numbers to the flushleft. +% (See comment on the |\def| of |\@eqnnum|.) +% \begin{macrocode} +\@definecounter{equation} +\def\equation{$$\refstepcounter{equation}} +\def\endequation{\eqno \hbox{\@eqnnum}$$\@ignoretrue} +% \end{macrocode} +% \end{macro} +% \end{environment} +% +% \begin{macro}{\@eqnnum} +% \changes{LaTeX2.09}{1991/09/29}{RmS: \cs{reset@font} added.} +% \changes{v1.0l}{1994/10/23}{Added \cs{normalcolor} since \cs{eqno} +% introduces a subgroup of the displayed math group} +% +% Produces the equation number for equation and +% eqnarray environments. The following definition is for +% flushright numbers; for flushleft numbers, see leqno.clo. +% The equation number is set in black roman type even +% if an eqnarray environment appears in an italic environment. +% \changes{v1.0s}{1995/05/26}{Removed \cs{rmfamily} (PR 1578), +% replaced \cs{reset@font} with \cs{normalfont}} +% \begin{macrocode} +\def\@eqnnum{{\normalfont \normalcolor (\theequation)}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\stackrel} +% A disguise for plain \TeX's buildrel. +% \begin{macrocode} +\def\stackrel#1#2{\mathrel{\mathop{#2}\limits^{#1}}} +% \end{macrocode} +% \end{macro} +% +% \changes{v0.9g}{1993/12/11}{Added a group around the first argument +% of \cs{frac} to prevent +% changes (for example font changes) from modifying the contents of +% the second argument.} +% +% \begin{macro}{\frac} +% A disguise for plain \TeX's |\over|. +% \begin{macrocode} +\def\frac#1#2{{\begingroup#1\endgroup\over#2}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\sqrt} +% \changes{v1.0y}{1995/10/16}{(DPC) Make robust /1808} +% \begin{macro}{\@sqrt} +% Add an optional argument to plain's |\sqrt| to give the $n$th root +% of an expression $\sqrt[n]{e}$. +% \changes{v1.0r}{1995/05/21}{Use \cs{sqrtsign}} +% \begin{macrocode} +\DeclareRobustCommand\sqrt{\@ifnextchar[\@sqrt\sqrtsign} +\def\@sqrt[#1]{\root #1\of} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \changes{LaTeX2.09}{1985/11/04}{produce warning message if line +% extends into margin. Doesn't warn about formula +% overprinting equation number.} +% \changes{LaTeX2.09}{1993/11/02}{RmS: +% Corrected description of \cs{@eqnsel}, moved \cs{@eqnsel} +% accordingly and removed extra \cs{tabskip} assignment.} +% \changes{LaTeX2e}{1993/11/03}{RmS: Initialized \cs{everycr} to empty} +% \changes{v0.9i}{1993/12/16} +% {use \cs{refstepcounter} instead of shortcut} +% \changes{v0.9o}{1994/01/13}{correcting 0.9i} +% +% \begin{environment}{eqnarray} +% \begin{macro}{\@eqcnt} +% \begin{macro}{\@eqpen} +% \begin{macro}{\if@eqnsw} +% \begin{macro}{\@eqnsel} +% Here's the eqnarray environment: +% Default is for left-hand side of equations to be flushright. +% To make them flushleft, |\let\@eqnsel = \hfil|. +% \begin{macrocode} +\newcount\@eqcnt +\newcount\@eqpen +\newif\if@eqnsw\@eqnswtrue +\newskip\@centering +\@centering = 0pt plus 1000pt +% \end{macrocode} +% To get a proper \cs{@currentlabel} we have to redefine it for the +% whole display. Note that we can't use \cs{refstepcounter} as this +% results in |\@currentlabel| getting restored at the wrong and +% thus always writing the first label to the \texttt{.aux} file. +% \begin{macrocode} +\def\eqnarray{% + \stepcounter{equation}% + \def\@currentlabel{\p@equation\theequation}% + \global\@eqnswtrue + \m@th + \global\@eqcnt\z@ + \tabskip\@centering + \let\\\@eqncr + $$\everycr{}\halign to\displaywidth\bgroup + \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel + &\global\@eqcnt\@ne\hskip \tw@\arraycolsep \hfil${##}$\hfil + &\global\@eqcnt\tw@ \hskip \tw@\arraycolsep + $\displaystyle{##}$\hfil\tabskip\@centering + &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup + \tabskip\z@skip + \cr +} +% \end{macrocode} +% +% \begin{macrocode} +\def\endeqnarray{% + \@@eqncr + \egroup + \global\advance\c@equation\m@ne + $$\@ignoretrue +} +% \end{macrocode} +% +% \begin{macrocode} +\let\@eqnsel=\relax +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{environment} +% +% \begin{macro}{\nonumber} +% Switches off equation numbering. +% \begin{macrocode} +\def\nonumber{\global\@eqnswfalse} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@eqncr} +% \begin{macro}{\@xeqncr} +% \begin{macro}{\@yeqncr} +% \changes{v1.0y}{1995/10/16}{(DPC) Use \cs{@testopt} /1911} +% \begin{macrocode} +\def\@eqncr{% + {\ifnum0=`}\fi + \@ifstar{% + \global\@eqpen\@M\@yeqncr + }{% + \global\@eqpen\interdisplaylinepenalty \@yeqncr + }% +} +% \end{macrocode} +% +% \begin{macrocode} +\def\@yeqncr{\@testopt\@xeqncr\z@skip} +% \end{macrocode} +% +% \begin{macrocode} +\def\@xeqncr[#1]{% + \ifnum0=`{\fi}% + \@@eqncr + \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}% +} +% \end{macrocode} +% +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@@eqncr} +% \changes{v0.9i}{1993/12/16}{use \cs{refstepcounter} instead of shortcut} +% \changes{v0.9o}{1994/01/13}{correcting 0.9i} +% +% \begin{macrocode} +\def\@@eqncr{\let\reserved@a\relax + \ifcase\@eqcnt \def\reserved@a{& & &}\or \def\reserved@a{& &}% + \or \def\reserved@a{&}\else + \let\reserved@a\@empty + \@latex@error{Too many columns in eqnarray environment}\@ehc\fi + \reserved@a \if@eqnsw\@eqnnum\stepcounter{equation}\fi + \global\@eqnswtrue\global\@eqcnt\z@\cr} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{eqnarray*} +% \begin{macro}{\@seqncr} +% Here's the eqnarray* environment: +% \begin{macrocode} +\let\@seqncr=\@eqncr +% \end{macrocode} +% +% \begin{macrocode} +\@namedef{eqnarray*}{\def\@eqncr{\nonumber\@seqncr}\eqnarray} +% \end{macrocode} +% +% \begin{macrocode} +\@namedef{endeqnarray*}{\nonumber\endeqnarray} +% \end{macrocode} +% \end{macro} +% \end{environment} +% +% \begin{macro}{\lefteqn} +% |\lefteqn{FORMULA}| typesets |FORMULA| in display math style +% flushleft in a box of width zero. +% \changes{v1.0r}{1995/05/21}{Use \cs{rlap}} +% \begin{macrocode} +\def\lefteqn#1{\rlap{$\displaystyle #1$}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ensuremath} +% In math mode, |\ensuremath{text}| is equivalent to text; in LR or +% paragraph mode, it is equivalent to |$|text|$|. +% |\relax| is not needed +% in front of the |\ifmmode| as |\protect| will be |\let| to |\relax|. +% This version (due to Donald Arseneau) avoids duplicating its +% argument in the `then' and `else' part of the |\ifmath| which is +% necessary in nested `tabular' like environments. See amslatex/2104. +% \changes{v1.0k}{1994/05/16} +% {Use \cs{DeclareRobustCommand} and add extra braces in math mode} +% \changes{v1.0l}{1994/10/23}{Remove extra braces: but see p 168 of +% Leslie's book} +% \changes{v1.1a}{1996/03/25}{Reimplement for amslatex/2104} +% \begin{macrocode} +\DeclareRobustCommand{\ensuremath}{% + \ifmmode + \expandafter\@firstofone + \else + \expandafter\@ensuredmath + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ensuredmath} +% \changes{v1.1a}{1996/03/25}{Macro added for amslatex/2104} +% \changes{v1.1c}{1996/11/09}{Made long, as it was before. /2104} +% The |\relax| stops |\ensuremath{}| starting display math. +% \begin{macrocode} +\long\def\@ensuredmath#1{$\relax#1$} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel> +% \end{macrocode} +% +% +% +% \subsection{External options to the standard document classes} +% +% \changes{v1.0u}{1995/08/09} +% {Added code for class options leqno and fleqn} +% +% \subsubsection{Left equation numbering} +% +% \begin{macro}{\@eqnnum} +% To put the equation number on the left side of an equation we +% have to use a little trick. The number is shifted |\displaywidth| +% to the left inside a box of (approximately) zero width. This +% fails when the quation is too wide, the equation number than may +% overprint the equation itself. +% \changes{v1.2y classes}{1995/01/12}{Added \cs{normalcolor}} +% \changes{v1.3c classes}{1995/05/25} +% {replace \cs{reset@font}\cs{rmfamily} with \cs{normalfont} +% (PR 1578)} +% \begin{macrocode} +%<*leqno> +\renewcommand\@eqnnum{\hb@xt@.01\p@{}% + \rlap{\normalfont\normalcolor + \hskip -\displaywidth(\theequation)}} +%</leqno> +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Flush left equations} +% +% To get the displayed math environments to print the contents +% flush left (with an indentation) we have to redefine all of +% \LaTeXe's displayed math environments. +% +% \begin{macro}{\mathindent} +% The amount of indentation of the equations is stored in a register. +% \begin{macrocode} +%<*fleqn> +\newdimen\mathindent +% \end{macrocode} +% The setting of |\mathindent| has to be deferred until the class +% file has been processed, because |\leftmargini| is still 0pt +% wide at the moment \texttt{fleqn.clo} is read in. +% \changes{v1.0n classes} +% {1994/01/19}{Deferred setting of \cs{mathindent}} +% \changes{v1.2t classes} +% {1994/06/22}{Set \cs{mathindent} at the end of the +% class instead of at begin document} +% \begin{macrocode} +\AtEndOfClass{\mathindent\leftmargini} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\[} +% Begin display math; +% \begin{macrocode} +\renewcommand\[{\relax + \ifmmode\@badmath + \else + \begin{trivlist}% + \@beginparpenalty\predisplaypenalty + \@endparpenalty\postdisplaypenalty + \item[]\leavevmode + \hb@xt@\linewidth\bgroup $\m@th\displaystyle %$ + \hskip\mathindent\bgroup + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\]} +% end display math; +% \begin{macrocode} +\renewcommand\]{\relax + \ifmmode + \egroup $\hfil% $ + \egroup + \end{trivlist}% + \else \@badmath + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{equation} +% The \textsf{equation} environment +% \begin{macrocode} +\renewenvironment{equation}% + {\@beginparpenalty\predisplaypenalty + \@endparpenalty\postdisplaypenalty + \refstepcounter{equation}% + \trivlist \item[]\leavevmode + \hb@xt@\linewidth\bgroup $\m@th% $ + \displaystyle + \hskip\mathindent}% + {$\hfil % $ + \displaywidth\linewidth\hbox{\@eqnnum}% + \egroup + \endtrivlist} +% \end{macrocode} +% \end{environment} +% +% \begin{environment}{eqnarray} +% The \textsf{eqnarray} environment +% \begin{macrocode} +\renewenvironment{eqnarray}{% + \stepcounter{equation}% + \def\@currentlabel{\p@equation\theequation}% + \global\@eqnswtrue\m@th + \global\@eqcnt\z@ + \tabskip\mathindent + \let\\=\@eqncr + \setlength\abovedisplayskip{\topsep}% + \ifvmode + \addtolength\abovedisplayskip{\partopsep}% + \fi +% \end{macrocode} +% When the documentclass uses a non-zero |\parskip| setting the +% |\topsep| might have a negative value to compensate for +% that. Therefore we add |\parskip| to |\abovedisplayskip|. +% \changes{v1.2v classes}{1994/11/10}{Added value of \cs{parskip} to +% \cs{abovedisplayskip} to compensate for negative \cs{topsep}} +% \begin{macrocode} + \addtolength\abovedisplayskip{\parskip}% + \setlength\belowdisplayskip{\abovedisplayskip}% + \setlength\belowdisplayshortskip{\abovedisplayskip}% + \setlength\abovedisplayshortskip{\abovedisplayskip}% + $$\everycr{}\halign to\linewidth% $$ + \bgroup + \hskip\@centering + $\displaystyle\tabskip\z@skip{##}$\@eqnsel&% + \global\@eqcnt\@ne \hskip \tw@\arraycolsep \hfil${##}$\hfil&% + \global\@eqcnt\tw@ \hskip \tw@\arraycolsep + $\displaystyle{##}$\hfil \tabskip\@centering&% + \global\@eqcnt\thr@@ + \hb@xt@\z@\bgroup\hss##\egroup\tabskip\z@skip\cr}% + {\@@eqncr + \egroup + \global\advance\c@equation\m@ne$$% $$ + \@ignoretrue + } +%</fleqn> +% \end{macrocode} +% \end{environment} +% +% +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltmiscen.dtx b/Master/texmf-dist/source/latex/base/ltmiscen.dtx new file mode 100644 index 00000000000..e6eb56416ed --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltmiscen.dtx @@ -0,0 +1,796 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%%% From File: ltmiscen.dtx +% +%<*driver> +% \fi +\ProvidesFile{ltmiscen.dtx} + [2000/07/11 v1.1j LaTeX Kernel (Misc. Environments)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltmiscen.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} + +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{457} +% +% \changes{v1.0c}{1994/03/28}{Improve Documentation} +% \changes{v1.0d}{1994/03/29}{Remove counter macros to ltcntlen} +% \changes{v1.0g}{1994/05/02}{Changed 91 to 1991 and moved some bits} +% \changes{v1.0i}{1994/05/05}{Removed braces from ifnextchar and +% ifstar arguments} +% \changes{v1.0m}{1994/05/20}{Use new warning commands} +% \changes{v1.0n}{1994/05/21}{Use new error commands} +% \changes{v1.0s}{1994/10/14}{Move math to other file} +% \changes{v1.0v}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% \changes{v1.0x}{1995/04/22}{Removed extra def of \cs{@gobble}} +% \changes{v1.0z}{1995/07/13}{Improve Documentation} +% \changes{v1.1c}{1996/04/22}{Improve Documentation} +% \changes{v1.1d}{1996/06/03}{Move setting of verbatim font and +% \cs{@noligs}.} +% \changes{v1.1g}{1998/08/17}{(RmS) Minor documentation fixes.} +% +% \section{Miscellaneous Environments} +% This section implements the basic environment mechanism, and also +% a few specific environments including |document|, The math +% environments and related commands, the `flushing' environments, +% (|center|, |flushleft|, |flushright|), and |verbatim|. +% +% \StopEventually{} +% +% \begin{macrocode} +%<*2ekernel> +\message{environments,} +% \end{macrocode} +% +% \subsection{Environments} +% +% |\begin{foo}| and |\end{foo}| are used to delimit environment |foo|. +% +% |\begin{foo}| starts a group and calls |\foo| if it is defined, +% otherwise it does nothing. +% +% |\end{foo}| checks to see that it matches the +% corresponding |\begin| and if so, it calls |\endfoo| and does an +% |\endgroup|. Otherwise, |\end{foo}| does nothing. +% +% If |\end{foo}| needs to ignore blanks after it, then |\endfoo| should +% globally set the |@ignore| switch true with |\@ignoretrue| +% (this will automatically be global). +% +% +% NOTE: |\@@end| is defined to be the |\end| command of \TeX82. +% +% |\enddocument| is the user's command for ending the manuscript file. +% +% |\stop| is a panic button --- to end \TeX\ in the middle. +% +% \begin{oldcomments} +% \enddocument == +% BEGIN +% \@checkend{document} %% checks for unmatched \begin +% \clearpage +% \begingroup +% if @filesw = true +% then close file @mainaux +% if G@refundefined = true +% then LaTeX Warning: 'There are undefined references.' fi +% if @multiplelabels = true +% then LaTeX Warning: +% 'One or more label(s) multiply defined.' +% else +% \@setckpt {ARG1}{ARG2} == null +% \newlabel{LABEL}{VAL} == +% BEGIN +% \reserved@a == VAL +% if def(\reserved@a) = def(\r@LABEL) +% else @tempswa := true fi +% END +% \bibcite{LABEL}{VAL} == null +% BEGIN +% \reserved@a == VAL +% if def(\reserved@a) = def(\g@LABEL) +% else @tempswa := true fi +% END +% @tempswa := false +% make @ a letter +% \input \jobname.AUX +% if @tempswa = true +% then LaTeX Warning: 'Label may have changed. +% Rerun to get cross-references right.' +% fi fi fi +% \endgroup +% finish up +% END +% +% \@writefile{EXT}{ENTRY} == +% if tf@EXT undefined +% else \write\tf@EXT{ENTRY} +% fi +% \end{oldcomments} +% +% \begin{macro}{\@currenvir} +% The name of the current environment. Initialized to +% \texttt{document} to so that |\end{document}| works correctly. +% \begin{macrocode} +\def\@currenvir{document} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@ignore} +% \begin{macro}{\@ignoretrue} +% \begin{macro}{\@ignorefalse} +% \changes{v1.1e}{1996/07/26}{put \cs{global} into definition} +% \begin{macrocode} +\def\@ignorefalse{\global\let\if@ignore\iffalse} +\def\@ignoretrue {\global\let\if@ignore\iftrue} +\@ignorefalse +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\ignorespacesafterend} +% \changes{v1.1e}{1996/07/26}{user level macro added} +% \begin{macrocode} +\let\ignorespacesafterend\@ignoretrue +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\enddocument} +% \changes{LaTeX2.09}{1993/08/03} +% {Changed redefinition of \cs{global} to redefinition +% of \cs{@setckpt}.} +% \changes{LaTeX2.09}{1993/09/08} +% {Added warning in case of undefined references.}% +% \changes{v0.9e}{1993/12/09}{Hook added} +% \begin{macrocode} +\def\enddocument{% +% \end{macrocode} +% The |\end{document}| hook is executed first. If necessary it can +% contain a |\clearpage| to output dangling floats first. In this +% position it can also contain something like |\end{foo}| so that +% the whole document effectively starts and ends with some special +% environment. However, this must be used with care, eg if two +% applications would use this without knowledge of each other the +% order of the environments will be wrong after all. +% |\AtEndDocument| is redefined +% at this point so that and such commands that get into the hook do +% not chase their tail\ldots +% \changes{v1.0y}{1995/04/27}{\cs{@checkend} moved after hook} +% \changes{v1.0z}{1995/07/13}{Set \cs{@setckpt} to \cs{@gobbletwo} +% instead of defining it by hand} +% \changes{v1.1i}{2000/05/19} +% {Reset \cs{AtEndDocument} for latex/3060} +% \begin{macrocode} + \let\AtEndDocument\@firstofone + \@enddocumenthook + \@checkend{document}% + \clearpage + \begingroup + \if@filesw + \immediate\closeout\@mainaux + \let\@setckpt\@gobbletwo + \let\@newl@bel\@testdef +% \end{macrocode} +% \changes{v1.0z}{1995/07/13}{Sorten redefinition of \cs{bibcite} and +% \cs{newlabel}} +% The previous line is equiv to setting +%\begin{verbatim} +% \def\newlabel{\@testdef r}% +% \def\bibcite{\@testdef b}% +%\end{verbatim} +% \begin{macrocode} + \@tempswafalse + \makeatletter \input\jobname.aux + \fi +% \end{macrocode} +% \changes{v1.0w}{1994/11/30} +% {(DPC) Use \cs{@dofilelist}} +% \begin{macrocode} + \@dofilelist +% \end{macrocode} +% First we check for font size substitution bigger than +% |\fontsubfuzz|. The |\relax| is necessary because this is a macro +% not a register. +% \changes{v1.0w}{1994/11/30} +% {(DPC) Do warnings even for \cs{nofiles}} +% \begin{macrocode} + \ifdim \font@submax >\fontsubfuzz\relax +% \end{macrocode} +% In case you wonder about the |\@gobbletwo| inside the message +% below, this is a horrible hack to remove the tokens |\on@line.| +% that are added by |\@font@warning| at the end. +% \changes{v1.1j}{2000/07/11}{Fix typo in warning} +% \begin{macrocode} + \@font@warning{Size substitutions with differences\MessageBreak + up to \font@submax\space have occurred.\@gobbletwo}% + \fi +% \end{macrocode} +% The macro |\@defaultsubs| is initially |\relax| but gets redefined +% to produce +% a warning if there have been some default font substitutions. +% \changes{v1.0z}{1995/07/13}{Use \cs{\@defaultsubs} instead of switch} +% \begin{macrocode} + \@defaultsubs +% \end{macrocode} +% The macro |\@refundefined| is initially |\relax| but gets redefined +% to produce a warning if there are undefined refs. +% \changes{v1.1b}{1995/10/24}{Use \cs{\@refundefined} instead of switch} +% \begin{macrocode} + \@refundefined +% \end{macrocode} +% If a label is defined more than once, |\@tempswa| will always be +% true and thus produce a ``Label(s) may \ldots'' warning. But +% since a rerun will not solve that problem (unless one uses a +% package like \texttt{varioref} that generates labels on the fly), +% we suppress this message. +% \changes{v1.0e}{1994/04/20}{Changed logic for producing +% warning messages} +% \changes{v1.1b}{1995/10/24}{Changed logic for producing +% warning messages and removed switch} +% \begin{macrocode} + \if@filesw + \ifx \@multiplelabels \relax + \if@tempswa + \@latex@warning@no@line{Label(s) may have changed. + Rerun to get cross-references right}% + \fi + \else + \@multiplelabels + \fi + \fi + \endgroup + \deadcycles\z@\@@end} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@testdef} +% \begin{macrocode} +\def\@testdef #1#2#3{% + \def\reserved@a{#3}\expandafter \ifx \csname #1@#2\endcsname + \reserved@a \else \@tempswatrue \fi} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@writefile} +% \changes{v1.0l}{1994/05/20}{Added correct setting of \cs{protect}.} +% \changes{v1.0t}{1994/11/04}{Removed setting of \cs{protect}. ASAJ.} +% \changes{v1.0z}{1995/07/13}{Added missing percent and use \cs{relax} +% in the THEN case} +% \begin{macrocode} +\long\def\@writefile#1#2{% + \@ifundefined{tf@#1}\relax + {\@temptokena{#2}% + \immediate\write\csname tf@#1\endcsname{\the\@temptokena}% + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\stop} +% \begin{macrocode} +\def\stop{\clearpage\deadcycles\z@\let\par\@@par\@@end} +% \end{macrocode} +% \end{macro} +% +% +% \begin{oldcomments} +% +% \begin{macrocode} +\everypar{\@nodocument} %% To get an error if text appears before the +\nullfont %% \begin{document} +% \end{macrocode} +% +% \begin, \end, and \@checkend changed so \end{document} will catch +% an unmatched \begin. Changed 24 May 89 as suggested by +% Frank Mittelbach and Rainer Sch\"opf. +% +% \begin{NAME} == +% BEGIN +% IF \NAME undefined THEN \reserved@a == BEGIN report error END +% ELSE \reserved@a == +% (\@currenvir :=L NAME) \NAME +% FI +% @ignore :=G F %% Added 30 Nov 88 +% \begingroup +% \@endpe := F +% \@currenvir :=L NAME +% \NAME +% END +% +% \end{NAME} == +% BEGIN +% \endNAME +% \@checkend{NAME} +% \endgroup +% IF @endpe = T %% @endpe set True by \@endparenv +% THEN \@doendpe %% \@doendpe redefines \par and \everypar +% %% to suppress paragraph indentation in +% FI %% immediately following text +% IF @ignore = T +% THEN @ignore :=G F +% \ignorespaces +% FI +% END +% +% \@checkend{NAME} == +% BEGIN +% IF \@currenvir = NAME +% ELSE \@badend{NAME} +% FI +% END +% +% \end{oldcomments} +% +% +% \begin{macro}{\begin} +% \changes{LaTeX2.09}{1992/03/18}{Changed \cs{@ignoretrue} to +% \cs{@ignorefalse} (as documented)} +% \changes{LaTeX2.09}{1992/08/24}{Added code to \cs{begin} to +% remember line number. Used by \cs{@badend} to display +% position of non-matching \cs{begin}.} +% \changes{v1.1e}{1996/07/26}{remove \cs{global} before \cs{@ignore...}} +% \begin{macrocode} +\def\begin#1{% + \@ifundefined{#1}% + {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}% + {\def\reserved@a{\def\@currenvir{#1}% + \edef\@currenvline{\on@line}% + \csname #1\endcsname}}% + \@ignorefalse + \begingroup\@endpefalse\reserved@a} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\end} +% \changes{v1.1e}{1996/07/26}{remove \cs{global} before \cs{@ignore...}} +% \begin{macrocode} +\def\end#1{% + \csname end#1\endcsname\@checkend{#1}% + \expandafter\endgroup\if@endpe\@doendpe\fi + \if@ignore\@ignorefalse\ignorespaces\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@checkend} +% \begin{macrocode} +\def\@checkend#1{\def\reserved@a{#1}\ifx + \reserved@a\@currenvir \else\@badend{#1}\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@currenvline} +% We do need a default value for |\@currenvline| on top-level since +% the document environment cancels the brace group. This means that +% a missmatch with |\begin|\allowbreak|{document}| will not produce +% a line number. Thus the outer default must be |\@empty| or we +% will end up with two spaces. +% \changes{v1.0q}{1994/05/24}{Use \cs{@empty} as outer default} +% \begin{macrocode} +\let\@currenvline\@empty +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Center, Flushright, Flushleft} +% +% \begin{macrocode} +\message{center,} +% \end{macrocode} +% +% \begin{oldcomments} +% +% \center, \flushright and \flushleft set +% \rightskip = 0pt or \@flushglue (as appropriate) +% \leftskip = 0pt or \@flushglue (as appropriate) +% \parindent = 0pt +% \parfillskip = 0pt. (except \flushleft) +% \\ == \par \vskip -\parskip +% \\[LENGTH] == \\ \vskip LENGTH +% \\* == \par \penalty 10000 \vskip -\parskip +% \\*[LEN] == \\* \vskip LENGTH +% +% They invoke the trivlist environment to handle vertical spacing before +% and after them. +% +% \centering, \raggedright and \raggedleft are the declaration analogs +% of the above. +% +% \raggedright has a more universal effect, however. It sets +% \@rightskip := flushglue. Every environment, like the list +% environments, +% that set \rightskip to its 'normal' value set it to \@rightskip +% +% \end{oldcomments} +% +% \begin{macro}{\@centercr} +% \changes{v1.0h}{1994/05/03}{\cs{@badcrerr} replaced by \cs{@nolnerr}} +% \changes{v1.0z}{1995/07/13}{Use \cs{nobreak}} +% \begin{macrocode} +\def\@centercr{\ifhmode \unskip\else \@nolnerr\fi + \par\@ifstar{\nobreak\@xcentercr}\@xcentercr} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xcentercr} +% \begin{macrocode} +\def\@xcentercr{\addvspace{-\parskip}\@ifnextchar + [\@icentercr\ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@icentercr} +% \begin{macrocode} +\def\@icentercr[#1]{\vskip #1\ignorespaces} +% \end{macrocode} +% \end{macro} +% +% +% \begin{environment}{center} +% \changes{v0.9h}{1993/12/13}{Removed optional argument of \cs{item}} +% \changes{v1.0u}{1994/11/12}{Changed end macro to \cs{def}: safer and +% consistent} +% We use |\relax| to prevent |\item| scanning too far. +% \begin{macrocode} +\def\center{\trivlist \centering\item\relax} +% \end{macrocode} +% +% \begin{macrocode} +\def\endcenter{\endtrivlist} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\centering} +% \begin{macrocode} +\def\centering{% + \let\\\@centercr + \rightskip\@flushglue\leftskip\@flushglue + \parindent\z@\parfillskip\z@skip} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@rightskip} +% \begin{macrocode} +\newskip\@rightskip \@rightskip \z@skip +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{flushleft} +% \changes{v0.9h}{1993/12/13}{Removed optional argument of \cs{item}} +% \changes{v1.0u}{1994/11/12}{Changed end macro to \cs{def}: safer and +% consistent} +% We use |\relax| to prevent |\item| scanning too far. +% \begin{macrocode} +\def\flushleft{\trivlist \raggedright\item\relax} +% \end{macrocode} +% +% \begin{macrocode} +\def\endflushleft{\endtrivlist} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\raggedright} +% \begin{macrocode} +\def\raggedright{% + \let\\\@centercr\@rightskip\@flushglue \rightskip\@rightskip + \leftskip\z@skip + \parindent\z@} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{flushright} +% \changes{v0.9h}{1993/12/13}{Removed optional argument of \cs{item}} +% \changes{v1.0u}{1994/11/12}{Changed end macro to \cs{def}: safer and +% consistent} +% We use |\relax| to prevent |\item| scanning too far. +% \begin{macrocode} +\def\flushright{\trivlist \raggedleft\item\relax} +% \end{macrocode} +% +% \begin{macrocode} +\def\endflushright{\endtrivlist} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\raggedleft} +% \begin{macrocode} +\def\raggedleft{% + \let\\\@centercr + \rightskip\z@skip\leftskip\@flushglue + \parindent\z@\parfillskip\z@skip} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\message{verbatim,} +% \end{macrocode} +% +% \subsection{Verbatim} +% +% +% The verbatim environment uses the fixed-width |\ttfamily| font, turns +% blanks into spaces, starts a new line for each carrige return (or +% sequence of consecutive carriage returns), and interprets +% \emph{every} character literally. +% I.e., all special characters |\, {, $|, etc. +% are |\catcode|'d to 'other'. +% +% The command |\verb| produces in-line verbatim text, where the argument +% is delimited by any pair of characters. E.g., |\verb #...#| takes +% `|...|' as its argument, and sets it verbatim in |\ttfamily| font. +% +% The *-variants of these commands are the same, except that spaces +% print as the \TeX{}book's space character instead of as blank spaces. +% +% \begin{macro}{\@vobeyspaces} +% \begin{macrocode} +{\catcode`\ =\active% +\gdef\@vobeyspaces{\catcode`\ \active\let \@xobeysp}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xobeysp} +% \changes{v1.0z}{1995/07/13}{Use \cs{nobreak}} +% \changes{v1.1f}{1996/09/28}{Moved to ltspace.dtx} +% \end{macro} +% +% +% \begin{macro}{\@xverbatim} +% \begin{macro}{\@sxverbatim} +% \begin{macrocode} +\begingroup \catcode `|=0 \catcode `[= 1 +\catcode`]=2 \catcode `\{=12 \catcode `\}=12 +\catcode`\\=12 |gdef|@xverbatim#1\end{verbatim}[#1|end[verbatim]] +|gdef|@sxverbatim#1\end{verbatim*}[#1|end[verbatim*]] +|endgroup +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@verbatim} +% \changes{LaTeX2.09}{1991/07/24}{Added \cs{penalty}\cs{interlinepenalty} +% to definition of \cs{par} so that \cs{samepage} works} +% \changes{v0.9h}{1993/12/13}{Removed optional argument of \cs{item}} +% Real start of verbatim environment +% We use |\relax| to prevent |\item| scanning too far. +% \changes{v0.9p}{1994/01/18} +% {Add \cs{global}\cs{@inlabelfalse}} +% \changes{v1.0b}{1994/03/16} +% {Remove \cs{global}\cs{@inlabelfalse} again.} +% \begin{macrocode} +\def\@verbatim{\trivlist \item\relax + \if@minipage\else\vskip\parskip\fi + \leftskip\@totalleftmargin\rightskip\z@skip + \parindent\z@\parfillskip\@flushglue\parskip\z@skip +% \end{macrocode} +% \changes{LaTeX2.09}{1991/08/26}{\cs{@@par} added} +% Added |\@@par| to clear possible |\parshape| definition +% from a surrounding list (the verbatim guru says). +% \changes{v0.9p}{1994/01/18} +% {Only add \cs{penalty} if in hmode} +% \begin{macrocode} + \@@par + \@tempswafalse + \def\par{% + \if@tempswa +% \end{macrocode} +% A |\leavevmode| added: needed if, for example, a blank verbatim +% line is the first thing in a list item (wow!). +% \changes{v1.0f}{1994/04/29}{\cs{leavevmode} added} +% \begin{macrocode} + \leavevmode \null \@@par\penalty\interlinepenalty + \else + \@tempswatrue + \ifhmode\@@par\penalty\interlinepenalty\fi + \fi}% +% \end{macrocode} +% To allow customization we hide the font used in a separate macro. +% \changes{v0.9a}{1993/11/21}{use \cs{verbatim@font} instead of \cs{tt}} +% \changes{v0.9h}{1993/12/13}{Readded \cs{@noligs}} +% \changes{v1.1d}{1996/06/03}{Exchanged the following two code lines +% so that \cs{dospecials} cannot reset the category code +% of characters handled by \cs{@noligs}.} +% \changes{v1.1h}{2000/01/07}{Disable hyphenation even if the font allows it.} +% \begin{macrocode} + \let\do\@makeother \dospecials + \obeylines \verbatim@font \@noligs + \hyphenchar\font\m@ne +% \end{macrocode} +% To avoid a breakpoint after the labels box, we remove the penalty +% put there by the list macros: another use of |\unpenalty|! +% \changes{v1.0f}{1994/04/29}{Change to \cs{everypar} added} +% \begin{macrocode} + \everypar \expandafter{\the\everypar \unpenalty}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\verbatim} +% \begin{macro}{\endverbatim} +% (RmS 93/09/19) Protected against `missing item' error message +% triggered by empty verbatim environment. +% \begin{macrocode} +\def\verbatim{\@verbatim \frenchspacing\@vobeyspaces \@xverbatim} +\def\endverbatim{\if@newlist \leavevmode\fi\endtrivlist} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\verbatim@font} +% \changes{v0.9a}{1993/11/21}{Macro added} +% Macro to select the font used for verbatim typesetting. +% It also does other work if necessary for the font used. +% \changes{v0.9s}{1994/01/21}{Removed unnecessary category code +% hackery.} +% \begin{macrocode} +\def\verbatim@font{\normalfont\ttfamily} +% \end{macrocode} +% \end{macro} +% +% +% \begin{environment}{verbatim*} +% \begin{macrocode} +\@namedef{verbatim*}{\@verbatim\@sxverbatim} +\expandafter\let\csname endverbatim*\endcsname =\endverbatim +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\@makeother} +% \begin{macrocode} +\def\@makeother#1{\catcode`#112\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\verb@balance@group} +% \changes{LaTeX2.09}{1993/09/07} +% {(RmS) Changed definition of \cs{verb} so that it detects a +% missing second delimiter.} +% \begin{macrocode} +\let\verb@balance@group\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\verb@egroup} +% \begin{macrocode} +\def\verb@egroup{\global\let\verb@balance@group\@empty\egroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\verb@eol@error} +% \begin{macrocode} +\begingroup + \obeylines% + \gdef\verb@eol@error{\obeylines% + \def^^M{\verb@egroup\@latex@error{% + \noexpand\verb ended by end of line}\@ehc}}% +\endgroup +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\verb} +% \changes{LaTeX2.09}{1992/08/24} +% {Changed \cs{verb} and \cs{@sverb} to work correctly +% in math mode} +% \changes{v0.9a}{1993/11/21}{Use \cs{verbatim@font} instead of +% \cs{tt}.} +% \changes{v1.1a}{1995/09/19}{Put \cs{@noligs} after +% \cs{verbatim@font} where it belongs.} +% Typesetting a small piece verbatim. +% \changes{v1.1d}{1996/06/03}{Put setting of verbatim font after +% \cs{dospecials} +% so that \cs{dospecials} cannot reset the category code +% of characters handled by \cs{@noligs}.} +% \begin{macrocode} +\def\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi + \bgroup + \verb@eol@error \let\do\@makeother \dospecials + \verbatim@font\@noligs + \@ifstar\@sverb\@verb} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@sverb} +% \changes{v1.0j}{1994/05/10}{Slight change in error message text.} +% Definitions of |\@sverb| and |\@verb| changed so |\verb+ foo+| +% does not lose leading blanks when it comes at the beginning of a line. +% Change made 24 May 89. Suggested by Frank Mittelbach and Rainer +% Sch\"opf. +% +% \begin{macrocode} +\def\@sverb#1{% + \catcode`#1\active + \lccode`\~`#1% + \gdef\verb@balance@group{\verb@egroup + \@latex@error{\noexpand\verb illegal in command argument}\@ehc}% + \aftergroup\verb@balance@group + \lowercase{\let~\verb@egroup}}% +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@verb} +% \begin{macrocode} +\def\@verb{\@vobeyspaces \frenchspacing \@sverb} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\verbatim@nolig@list} +% \changes{LaTeX2.09}{1993/09/03} +% {Replaced \cs{@noligs} by extensible list} +% \begin{macrocode} +\def\verbatim@nolig@list{\do\`\do\<\do\>\do\,\do\'\do\-} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\do@noligs} +% \begin{macrocode} +\def\do@noligs#1{% + \catcode`#1\active + \begingroup + \lccode`\~`#1\relax + \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@noligs} +% To stay compatible with packages that use |\@noligs| we keep it. +% \changes{v0.9h}{1993/12/13}{Readded \cs{@noligs}} +% \begin{macrocode} +\def\@noligs{\let\do\do@noligs \verbatim@nolig@list} +% \end{macrocode} +% \end{macro} +% +% \changes{v0.9i}{1993/12/16}{\cs{literal} added} +% \changes{v1.0r}{1994/05/26/16}{\cs{literal} removed} +% \begin{macrocode} +%</2ekernel> +% \end{macrocode} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltoutenc.dtx b/Master/texmf-dist/source/latex/base/ltoutenc.dtx new file mode 100644 index 00000000000..f31394f32d2 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltoutenc.dtx @@ -0,0 +1,3320 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%%% From File: ltoutenc.dtx +%\NeedsTeXFormat{LaTeX2e}[2000/06/01] +%<OT1>\ProvidesFile{ot1enc.def} +%<T1>\ProvidesFile{t1enc.def} +%<OMS>\ProvidesFile{omsenc.def} +%<OML>\ProvidesFile{omlenc.def} +%<OT4>\ProvidesFile{ot4enc.def} +%<TS1>\ProvidesFile{ts1enc.def}[2001/06/05 v3.0e (jk/car/fm) +%<package>\ProvidesPackage{fontenc} +%<TS1sty>\ProvidesPackage{textcomp} +%<OT1|T1|OMS|OML|OT4|package|TS1sty> [2004/02/22 v1.99f +%<OT1|T1|OMS|OML|OT4|TS1> Standard LaTeX file] +%<package|TS1sty> Standard LaTeX package] +% +%<*driver> +% \fi +\ProvidesFile{ltoutenc.dtx} + [2004/02/22 v1.99f LaTeX Kernel (font encodings)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltoutenc.dtx} +\title{\filename} +\date{\filedate} +\author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} +\usepackage{textcomp} +\begin{document} + \maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{2762} +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% +% \changes{v1.99e}{2004/02/13}{Documentation fixes: typos} +% \changes{v1.9k}{1998/01/12}{Added \cs{ProvidesPackage} +% for textcomp.sty} +% \changes{v1.9i}{1997/12/19}{Documentation corrections.} +% \changes{v1.9h}{1997/12/17}{Documentation changes and additions.} +% \changes{v1.9h}{1997/12/17}{Added textcomp.sty.} +% \changes{v1.9f}{1997/08/29}{Added OT4 encoding, +% provided by Marcin Woli\'nski.} +% \changes{v1.7r}{1995/11/28}{doc fixes} +% \changes{v1.7h}{1995/04/21}{Added \cs{null} \cs{k} latex/1274} +% \changes{v1.7f}{1994/12/14}{Added braces to \cs{copyright} so it +% works unbraced in subscripts.} +% \changes{v1.7f}{1994/12/14}{Added check for math mode in +% \cs{@changed@cmd}.} +% \changes{v1.7f}{1994/12/14}{Commented out \cs{textasciicircum}, +% \cs{textasciitilde}, \cs{textbackslash}, \cs{textbar}, +% \cs{textgreater}, \cs{texthyphenchar}, \cs{texthyphen} and +% \cs{textless} to save memory.} +% \changes{v1.7e}{1994/12/10}{Added documentation for the OML encoding.} +% \changes{v1.7e}{1994/12/10}{Replaced width with \cs{@width} and +% ditto height in vrules.} +% \changes{v1.7d}{1994/12/08}{Added \cs{null} and \cs{sh@ft} to \cs{b} +% and \cs{d}.} +% \changes{v1.7c}{1994/12/05}{Added braces to \cs{textcircled}.} +% \changes{v1.7b}{1994/12/02}{Fixed a bug with \cs{a}.} +% \changes{v1.7a}{1994/11/30}{Added new code for encoding-specific +% commands. These now expand in the mouth, which means that +% ligaturing and kerning can happen.} +% \changes{v1.6i}{1994/11/22}{Fixed empty accents. Again.} +% \changes{v1.6i}{1994/11/22}{Corrected \cs{dots} so that there's no +% kerning in monowidth fonts.} +% \changes{v1.6i}{1994/11/22}{Corrected typo with +% \cs{mathunderscore}.} +% \changes{v1.6h}{1994/11/17}{(DPC) \cs{@tempa} to \cs{reserved@a}} +% \changes{v1.6d}{1994/11/02}{Wrapped lines longer than 70 characters.} +% \changes{v1.6d}{1994/10/30}{Added math commands.} +% \changes{v1.6d}{1994/10/30}{Added OML encoding.} +% \changes{v1.6d}{1994/10/30}{Added \cs{textcircled}.} +% \changes{v1.6d}{1994/10/30}{Added \cs{DeclareTextCompositeCommand}.} +% \changes{v1.6c}{1994/10/29}{Renamed \cs{P}, \cs{S}, \cs{dag} and +% \cs{ddag} to \cs{textparagraph}, \cs{textsection}, +% \cs{textdagger} and \cs{textdaggerdbl}.} +% \changes{v1.6b}{1994/10/27}{Removed the enc.def files} +% \changes{v1.6a}{1994/10/25}{Added \cs{ProvideTextCommand}, +% \cs{UseTextSymbol}, +% \cs{UseTextAccent}, +% \cs{DeclareTextSymbolDefault}, +% \cs{DeclareTextAccentDefault}, +% \cs{DeclareTextCommandDefault}, and +% \cs{ProvideTextCommandDefault}.} +% \changes{v1.5m}{1994/10/18}{Added new definitions of \cs{patterns} +% and \cs{hyphenation}.} +% \changes{v1.5l}{1994/10/07}{Moved the ogonek accent.} +% \changes{v1.5k}{1994/05/18}{Removed braces from \cs{pounds} and +% \cs{dollar}.} +% \changes{v1.5k}{1994/05/18}{Replaced \cs{defaultencoding} with +% \cs{encodingdefault}.} +% \changes{v1.5k}{1994/05/18}{Made dotted-i produce `i'.} +% \changes{v1.5j}{1994/05/17}{Added braces to \cs{pounds} so it works +% as a subscript.} +% \changes{v1.5i}{1994/05/16}{Fixed a bug with \cs{d}.} +% \changes{v1.5h}{1994/05/16}{Added \cs{NG}, \cs{ng}, \cs{TH}, +% \cs{th}, \cs{DH}, \cs{dh}, \cs{DJ} and \cs{dj}.} +% \changes{v1.5h}{1994/05/16}{Added \cs{r} (ring accent) and \cs{k} +% (ogonek) accents.} +% \changes{v1.5h}{1994/05/16}{Removed \cs{P} from the OT1 definitions +% file.} +% \changes{v1.5h}{1994/05/16}{Fixed a bug with \cs{pounds}.} +% \changes{v1.5g}{1994/05/16}{Made fontenc.sty use the new mixed-case +% encoding files.} +% \changes{v1.5f}{1994/05/16}{Revert code so that the encoding +% given is used in \cs{DeclareTextCommand} (FMi)} +% \changes{v1.5f}{1994/05/16}{enc files now have uc encoding name +% parts (FMi)} +% \changes{v1.5e}{1994/05/14}{Replaced \cs{ENC@cmd} by \cs{ENC-cmd}.} +% \changes{v1.5d}{1994/05/14}{Rewrote \cs{DeclareTextCommand} to define +% its argument to use the current encoding by default, rather than +% the encoding provided to \cs{DeclareTextCommand}.} +% \changes{v1.5d}{1994/05/14}{Tidied up the documentation.} +% \changes{v1.5c}{1994/05/14}{Added the fontenc package.} +% \changes{v1.5c}{1994/05/14}{Fixed a bug which caused an infinite loop +% if \cs{f@encoding} was incorrectly set.} +% \changes{v1.5c}{1994/05/14}{Moved fontsmpl to its own dtx file.} +% \changes{v1.5b}{1994/05/13}{Added \cmd\{, \cmd\} and \cmd\$.} +% \changes{v1.5b}{1994/05/13} +% {Replaces \cs{space} by `~' in \cs{csname}.} +% \changes{v1.5b}{1994/05/13}{Renamed \cs{DeclareProtectedCommand} to +% \cs{DeclareRobustCommand}.} +% \changes{v1.5a}{1994/05/11}{Renamed the commands again. Made the +% encoding part of the command syntax. Added the +% \cs{DeclareTextCommand} interface. Used +% \cs{DeclareProtectedCommand}.} +% \changes{v1.4a}{1994/05/01}{Renamed the commands, removed the +% \cs{EncodingSpecific} command. Turned all slots into decimal. +% Added \cs{a}.} +% \changes{v1.4a}{1994/05/01}{Removed Rokicki's encoding.} +% \changes{v1.3d}{1993/12/18}{Some T1 stuff had drifted into the OT1 +% file.} +% \changes{v1.3c}{1993/12/18}{A new syntax, separating +% accent-definitions from encoing-specific definitions, and +% allowing encoding-specific \cs{chardef}, \cs{let}, etc.} +% \changes{v1.3c}{1993/12/18}{Rewrote for the new syntax of +% \cs{EncodingSpecific}.} +% \changes{v1.3b}{1993/12/18}{Corrected typos.} +% \changes{v1.3b}{1993/12/18}{Replaced the missing last argument to +% \cs{DeclareFontEncoding}.} +% \changes{v1.3a}{1993/12/18}{Replaced OT3 by XXX} +% \changes{v1.3}{1993/12/17}{Added \cs{EncodingSpecificAccent}, +% \cs{EncodingSpecificAccentedLetter} and +% \cs{EncodingSpecificCommand}.} +% \changes{v1.3}{1993/12/17}{Made Rokicki's encoding a proper encoding +% scheme rather than a variant of OT1.} +% \changes{v1.2b}{1993/12/13}{Corrected file name in driver code.} +% \changes{v1.2a}{1993/12/11}{Corrected for t1enc, math.} +% \changes{v1.2}{1993/12/10}{Added source code for t1enc.sty.} +% \changes{v1.1}{1993/12/07}{Made all character numbers decimal.} +% \changes{v1.1}{1993/12/07}{Removed a lot of equal signs and the +% like.} +% +% +% \section{Font encodings} +% +% This section of the kernel contains commands for declaring +% encoding-specific +% commands, such as accents. It also contains the code for some of +% the encoding files, including |omlenc.def|, +% |omsenc.def|, |t1enc.def| and |ot1enc.def| files, which define +% the |OLM|, +% |OMS|, |T1| and |OT1| encodings, and the |fontenc| package +% for selecting encodings. +% +% The |fontenc| package has options for encodings, of which the +% last option is the default encoding. For example, to use the +% |OT2|, |OT3| and |T1| encodings, with |T1| as the default, you +% say: +%\begin{verbatim} +% \usepackage[OT2,OT3,T1]{fontenc} +%\end{verbatim} +% The standard kernel set-up loads font encoding files and selects +% an encoding as follows. +%\begin{verbatim} +% \input {omlenc.def} +% \input {t1enc.def} +% \input {ot1enc.def} +% \input {omsenc.def} +% \fontencoding{OT1} +%\end{verbatim} +% Note that the files in the standard |inputenc| package depend on +% this behaviour of the kernel. +% +% The syntax for declaring encoding-specific commands is: +% \begin{quote} +% |\DeclareTextCommand{|^^A +% \meta{command}|}{|^^A +% \meta{encoding}|}|\\\hspace*{\fill}|[|^^A +% \meta{number}|][|^^A +% \meta{default}|]{|^^A +% \meta{commands}|}| +% \end{quote} +% This command is like |\newcommand|, except that it defines a +% command which is specific to one encoding. The resulting command +% is always robust, even if its definition is fragile. For example, +% the definition of |\l| in the |OT1| encoding is: +%\begin{verbatim} +% \DeclareTextCommand{\l}{OT1}{{\@xxxii l}} +%\end{verbatim} +% |\DeclareTextCommand| takes the same optional arguments as +% |\newcommand|. +% \begin{quote} +% |\ProvideTextCommand{|^^A +% \meta{command}|}{|^^A +% \meta{encoding}|}|\\\hspace*{\fill}|[|^^A +% \meta{number}|][|^^A +% \meta{default}|]{|^^A +% \meta{commands}|}| +% \end{quote} +% This acts like |\DeclareTextCommand|, but does nothing if the +% command is already defined. +% \begin{quote} +% |\DeclareTextSymbol{|^^A +% \meta{command}|}{|^^A +% \meta{encoding}|}{|^^A +% \meta{slot}|}| +% \end{quote} +% This command defines a text symbol, with a particular slot in that +% encoding. The commands: +% \changes{v1.9h}{1997/12/17}{Example corrected, braces removed.} +%\begin{verbatim} +% \DeclareTextSymbol{\ss}{OT1}{25} +% \DeclareTextCommand{\ss}{OT1}{\char25 } +%\end{verbatim} +% have the same effect, but the |\DeclareTextSymbol| is faster. +% \begin{quote} +% |\DeclareTextAccent{|^^A +% \meta{command}|}{|^^A +% \meta{encoding}|}{|^^A +% \meta{slot}|}| +% \end{quote} +% \changes{v1.8e}{1996/11/23}{Corrected description} +% \changes{v1.9k}{1997/12/31}{Further correction} +% This command declares a text accent. The commands: +%\begin{verbatim} +% \DeclareTextAccent{\"}{OT1}{127} +% \DeclareTextCommand{\"}{OT1}{\add@accent {127}} +%\end{verbatim} +% have the same effect. +% \changes{v1.8c}{1996/10/27} +% {Corrected syntax descriptions} +% \begin{quote} +% |\DeclareTextComposite{|^^A +% \meta{command}|}|\\\hspace*{\fill}|{|^^A +% \meta{encoding}|}{|^^A +% \meta{argument}|}{|^^A +% \meta{slot}|}| +% \end{quote} +% This command declares a composite letter, for example in the |T1| +% encoding |\'{a}| is slot 225, which is declared by: +%\begin{verbatim} +% \DeclareTextComposite{\'}{T1}{a}{225} +%\end{verbatim} +% \changes{v1.8e}{1996/11/23} +% {Corrected description} +% The \emph{command} will normally have been declared with +% |\DeclareTextAccent|, or as a one-argument |\DeclareTextCommand|. +% +% |\DeclareTextComposite| is the most common example of using +% the more general declaration +% |\DeclareTextCompositeCommand|, which can define a composite +% to be an arbitrary piece of text. +% \begin{quote} +% |\DeclareTextCompositeCommand{|^^A +% \meta{command}|}|\\\hspace*{\fill}|{|^^A +% \meta{encoding}|}{|^^A +% \meta{argument}|}{|^^A +% \meta{text}|}| +% \end{quote} +% For example, in the OT1 encoding \r A has a hand-crafted +% defintion this is declared as follows +%\begin{verbatim} +% \DeclareTextCompositeCommand{\r}{OT1}{A} +% {\leavevmode\setbox\z@\hbox{!}\dimen@\ht\z@\advance\dimen@-1ex% +% \rlap{\raise.67\dimen@\hbox{\char23}}A} +%\end{verbatim} +% \changes{v1.8e}{1996/11/23} +% {Corrected description} +% The \emph{command} will normally have been declared with +% |\DeclareTextAccent|, or as a one-argument |\DeclareTextCommand|. +% +% The commands defined using the above declarations can be used in +% two ways. +% Normally they are used by just calling the command in the +% appropriate encoding, for example |\ss|. However, sometimes you +% may wish to use a command in an encoding where it is not defined. +% If the command has no arguments, then you can use it in another +% encoding by calling |\UseTextSymbol|: +% \begin{quote} +% |\UseTextSymbol{|^^A +% \meta{encoding}|}{|^^A +% \meta{command}|}| +% \end{quote} +% +% \task{Document the problems of these commands, see pr/3160} +% \changes{v1.9e}{1997/08/05}{Corrected order of arguments in +% \cs{UseTextSymbol} example.} +% For example, |\UseTextSymbol{OT1}{\ss}| has the same effect as: +%\begin{verbatim} +% {\fontencoding{OT1}\selectfont\ss} +%\end{verbatim} +% If the command has one argument then you can use it in another +% encoding by calling +% |\UseTextAccent|: +% \begin{quote} +% |\UseTextAccent{|^^A +% \meta{encoding}|}{|^^A +% \meta{command}|}{|^^A +% \meta{text}|}| +% \end{quote} +% For example, if the current encoding is |OT2| then +% |\UseTextAccent{OT1}{\'}{a}| has the same effect as: +%\begin{verbatim} +% {\fontencoding{OT1}\selectfont\'{\fontencoding{OT2}\selectfont a}} +%\end{verbatim} +% \changes{v1.8e}{1996/11/23} +% {Extended description} +% You can also declare a default definition for a text command, which +% will be used if the current encoding has no appropriate definition. +% Such use will also set the definition for this command in the +% current encoding to equal this default definition; this makes +% subsequent uses of the command much faster. +% \begin{quote} +% |\DeclareTextCommandDefault{|^^A +% \meta{command}|}{|^^A +% \meta{definition}|}| +% \end{quote} +% For example, the default definition of the command +% |\textonequarter| (which produces the fraction $\frac14$) could be +% built using math mode: +%\begin{verbatim} +% \DeclareTextCommandDefault{\textonequarter}{\ensuremath {\frac14}} +%\end{verbatim} +% There is a matching |\Provide| command which will not override an +% existing default definition: +% \begin{quote} +% |\ProvideTextCommandDefault{|^^A +% \meta{command}|}{|^^A +% \meta{definition}|}| +% \end{quote} +% The most common use for these commands is to use symbols from +% other encodings, so there are some optimizations provided: +% \begin{quote} +% |\DeclareTextSymbolDefault{|^^A +% \meta{command}|}|^^A +% \meta{encoding}|}|\\ +% |\DeclareTextAccentDefault{|^^A +% \meta{command}|}|^^A +% \meta{encoding}|}| +% \end{quote} +% are short for: +% \begin{quote} +% |\DeclareTextCommandDefault{|^^A +% \meta{command}|}|\\\hspace*{\fill}^^A +% |{\UseTextSymbol{|^^A +% \meta{encoding}|}{|\meta{command}|}}| \\ +% |\DeclareTextCommandDefault[1]{|^^A +% \meta{command}|}|\\\hspace*{\fill}^^A +% |{\UseTextAccent{|^^A +% \meta{encoding}|}{|\meta{command}|}{#1}}| +% \end{quote} +% For example, to make |OT1| the default encoding for |\ss| and +% |\'| you say: +%\begin{verbatim} +% \DeclareTextSymbolDefault{\ss}{OT1} +% \DeclareTextAccentDefault{\'}{OT1} +%\end{verbatim} +% Note that you can use these commands on any zero- or one-argument +% commands declared with |\DeclareText*| or |\ProvideText*|, not +% just those defined using |\DeclareTextSymbol| or +% |\DeclareTextAccent|. +% +% \subsection{Removing encoding-specific commands} +% \label{sec:removeencspec} +% +% \changes{v1.9o}{1998/03/20}{Documentation added for pr/2783} +% +% In some cases encoding definitions are given to provide some limited +% support since nothing better is available, for example, the definition +% for |\textdollar| in \texttt{OT1} is a hack since \$ and \pounds{} +% actually share the same slot in this encoding. Thus if such a glyph +% becomes available in a different encoding (e.g., \texttt{TS1}) one +% would like to get rid of the flacky one and make the default +% definition point to the new encoding. In such a case defining +%\begin{verbatim} +% \DeclareTextSymbol{\textdollar}{TS1}{36} +% \DeclareTextSymbolDefault{\textdollar}{TS1} +%\end{verbatim} +% is not enough since if typesetting in \texttt{OT1} \LaTeX{} will +% still find the encoding specific-definition for \texttt{OT1} and +% therefore ignore the new default. +% Therefore to ensure that in this case the \texttt{TS1} version is +% used we have to remove the \texttt{OT1} declaration: +%\begin{verbatim} +% \UndeclareTextCommand{\textdollar}{OT1} +%\end{verbatim} +% +% Since the \$ sign is a proper glyph in the \texttt{T1} encoding there +% is no point removing its definition and forcing \LaTeX{} to pick up +% the \texttt{TS1} version if typesetting in this encoding. +% However, assume you want to use the variant dollar sign, +% i.e., \textdollaroldstyle{} +% for your dollars. In that case you have to get rid of the \texttt{T1} +% declaration as well, e.g., the following would do that for you: +%\begin{verbatim} +% \UndeclareTextCommand{\textdollar}{OT1} +% \UndeclareTextCommand{\textdollar} {T1} +% \DeclareTextCommandDefault{\textdollar} +% {\UseTextSymbol{TS1}\textdollaroldstyle} +%\end{verbatim} +% +% \subsection{The order of declarations}\label{sec:orderofdecls} +% +% \changes{v1.9o}{1998/03/20}{Documentation added about order of decls} +% +% If an encoding-specific command is defined for more than one encoding, +% then it will execute fastest in the encoding in which it was defined +% last since its top-level definition will be set up to execute in that +% encoding without any overhead. +% +% For this reason the file \texttt{fonttext.ltx} currently first loads +% the definitions for the \texttt{T1} encoding and then those for the +% \texttt{OT1} encoding so that typesetting in \texttt{OT1} is optimized +% since that is (still) the default. However, when \texttt{T1} is +% explicitly requested (via |\usepackage[T1]{fontenc}|) the +% top-level definitions are automatically changed to favour +% \texttt{T1} since its declarations are reloaded in the process. +% +% For the same reason default declarations should never come last since +% they are implemented as a special encoding themselves (with the +% name |?|). +% Specifying them last would simply mean to make those encoding-specific +% commands equally inefficient in all encodings. Therefore the +% \texttt{textcomp} package, for example, first sets up all defaults +% to point to \texttt{TS1} and then declares the commands in the +% \texttt{TS1} encoding. +% +% +% \StopEventually{} +% +% \subsection{Docstrip modules} +% +% This |.dtx| file is be used to generate several related files +% containing font encoding definitions. The mutually exclusive +% docstrip options are listed here. +% \begin{center} +% \begin{tabular}{lp{10cm}} +% |T1| & generates |t1enc.def| for the Cork encoding. \\ +% |TS1| & generates |ts1enc.def| for the Text Companion +% encoding. \\ +% |TS1sty| & generates |textcomp.sty|, package that sets up use +% of the Text Companion encoding. \\ +% |OT1| & generates |ot1enc.def| for Knuth's CM encoding. \\ +% |OMS| & generates |omsenc.def| for Knuth's +% math symbol encoding. \\ +% |OML| & generates |omlenc.def| for Knuth's +% math letters encoding. \\ +% |OT4| & generates |ot4enc.def| for the Polish extension to +% the OT1 encoding, created by B.~Jackowski and +% M.~Ry\'cko for use with the Polish version of +% Computer Modern and Computer Concrete.\\ +% |package| & generates |fontenc.sty| for +% selecting encodings. \\ +% |2ekernel| & for the kernel commands.\\ +% |autoload| & for the `autoload' kernel commands.\\ +% |autoerr| & for the autoerr.sty error message autoload file. +% \end{tabular} +% \end{center} +% \changes{1.0d}{1993/07/17}{changed \cs{catcoding} @} +% \changes{1.0f}{1993/08/13}{Protected against active @ sign.} +% \changes{1.0g}{1993/08/16}{Needs space after \cs{string}} +% \changes{1.1}{1993/12/07}{Protected all special characters with +% \cs{string}.} +% \changes{1.3}{1993/12/17}{Removed the catcode hackery, since the file +% is only read as a package in the preamble, and removed all the +% messages on the screen, which just confuse users. Replaced them +% by the appropriate \cs{ProvidesPackage} commands. Added XXXenc.} +% \changes{1.3b}{1993/12/18} +% {Fixed typos with \cs{ProvidesPackage} lines. +% Added the \cs{NeedsTeXFormat} line. Added the last argument to +% \cs{DeclareEncoding}. Moved the use of the encodings to after their +% declaration. } +% \changes{1.4a}{1994/04/29}{Removed Rokicki's OT1 variant encoding. +% Moved the driver to the top.} +% \changes{1.5a}{1994/05/11}{Made T1 and OT1 generate packages rather +% than def files. Renamed the `package' module to `teststy'.} +% \changes{1.5d}{1994/05/14}{Moved the driver to the top.} +% +% \subsection{Definitions for the kernel} +% +% \subsubsection{Declaration commands} +% +% \changes{1.3}{1993/12/17}{Added this section} +% \changes{1.3c}{1993/12/18}{Split \cs{EncodingSpecificAccent} up into +% \cs{EncodingSpecific} and \cs{DeclareAccent}.} +% \changes{1.4a}{1994/04/29}{Removed \cs{EncodingSpecific}. Renamed +% all the commands. Added \cs{DeclareTextGlyph} and +% \cs{UndeclareTextCommand}.} +% \changes{v1.5a}{1994/05/11}{Reimplemented \cs{DeclareTextCommand} +% using \cs{@changed@cmd} and \cs{DeclareProtectedCommand}.} +% \changes{v1.5c}{1994/05/14}{Fixed a bug which caused an infinite loop +% if \cs{f@encoding} was incorrectly set.} +% \changes{v1.5d}{1994/05/14}{Rewrote \cs{DeclareTextCommand} to define +% its argument to use the current encoding by default, rather than +% the encoding provided to \cs{DeclareTextCommand}.} +% \changes{v1.6a}{1994/10/25}{Added the \cs{Provide} commands, +% and the default definitions.} +% +% This section contains definitions for commands such as accents which +% depend on the current encoding. These commands will usually be kept +% in |.def| files, for example |ot1enc.def| contains the definitions +% for the |OT1| encoding. +% \begin{macrocode} +%<*2ekernel|autoload> +\message{font encodings,} +% \end{macrocode} +% +% \changes{v1.5d}{1994/10/27}{Rewrote \cs{DeclareTextSymbol} to define +% its argument to use the current encoding by default, to fit with +% \cs{DeclareTextCommand}.} +% +% \changes{v1.7a}{1994/11/30}{Redefined \cs{@changed@cmd} to expand in +% the mouth.} +% \changes{v1.7a}{1994/11/30}{Removed \cs{@changed@x@mouth} since +% \cs{@changed@x} now expands in the mouth.} +% +% \changes{v1.7r}{1995/11/28}{Renamed \cs{@changed@x@err} to +% \cs{TextSymbolUnavailable}.} +% \changes{v1.7r}{1995/11/28}{Added math mode checks to text commands.} +% Far too many macros in one block here! +% \begin{macro}{\DeclareTextCommand} +% \begin{macro}{\ProvideTextCommand} +% \begin{macro}{\DeclareTextSymbol} +% \begin{macro}{\@dec@text@cmd} +% \begin{macro}{\chardef@text@cmd} +% \begin{macro}{\@changed@cmd} +% \begin{macro}{\@changed@x} +% \begin{macro}{\TextSymbolUnavailable} +% \begin{macro}{\@inmathwarn} +% If you say: +%\begin{verbatim} +% \DeclareTextCommand{\foo}{T1}... +%\end{verbatim} +% then |\foo| is defined to be |\T1-cmd \foo \T1\foo|, +% where |\T1\foo| is \emph{one} control sequence, not two! +% We then call |\newcommand| to define |\T1\foo|. +% \begin{macrocode} +\def\DeclareTextCommand{% + \@dec@text@cmd\newcommand} +% \end{macrocode} +% +% \begin{macrocode} +\def\ProvideTextCommand{% + \@dec@text@cmd\providecommand} +% \end{macrocode} +% +% \begin{macrocode} +\def\@dec@text@cmd#1#2#3{% + \expandafter\def\expandafter#2% + \expandafter{% + \csname#3-cmd\expandafter\endcsname + \expandafter#2% + \csname#3\string#2\endcsname + }% + \let\@ifdefinable\@rc@ifdefinable + \expandafter#1\csname#3\string#2\endcsname} +% \end{macrocode} +% \changes{v1.99d}{2004/02/06}{New command added to fix +% severe bug: pr/3563} +% This command was introduced to fix a major bug +% in |\@dec@text@cmd| without changing that command itself. +% This was thought to be necessary because it is defined +% in more than one package. (Perhaps the more serious bug is to put +% complex low-level commands like this in packages?) +% +% The problem it solves is that whereas both |\newcommand| and +% |\providecommand| (used just above) both handle the +% resetting of |\@ifdefinable| (following its disabling in +% |\@dec@text@cmd|), the primitive |\chardef| neither needs the +% disabling, nor does the resetting. +% +% \begin{macrocode} +\def\chardef@text@cmd{% + \let\@ifdefinable\@@ifdefinable + \chardef + } +\def\DeclareTextSymbol#1#2#3{% + \@dec@text@cmd\chardef@text@cmd#1{#2}#3\relax + } +% \end{macrocode} +% +% The declarations are only available before |\begin{document}|. +% \changes{v1.7h}{1995/05/21}{Added several \cs{@onlypreamble}} +% \changes{v1.7k}{1995/06/05}{Removed \cs{protected@cmd} and replaced +% with explicit \cs{noexpand}.} +% \begin{macrocode} +\@onlypreamble\DeclareTextCommand +\@onlypreamble\DeclareTextSymbol +% \end{macrocode} +% The sneaky bit in all this is what |\T1-cmd \foo \T1\foo| does. +% There are five possibilities, depending on the current values of +% |\protect|, |\cf@encoding| and |\ifmmode|: +% \begin{itemize} +% \item If |\protect| is |\@typeset@protect| and |\cf@encoding| is +% |T1|, then we execute |\T1\foo|. This should be the normal +% behaviour, and is optimized for speed. +% \item If |\protect| is |\@typeset@protect|, |\cf@encoding| is +% (say) |OT1|, and |\OT1\foo| is defined, then we execute +% |\OT1\foo|. +% \item If |\protect| is |\@typeset@protect|, |\cf@encoding| is +% (say) |OT1|, we're in text mode, +% and |\OT1\foo| is undefined, then we define +% |\OT1\foo| to be the default value of |\foo|, and execute +% |\OT1\foo|. +% \item If |\protect| is |\@typeset@protect|, |\cf@encoding| is +% (say) |OT1|, we're in math mode, +% and |\OT1\foo| is undefined, then we execute the default value +% of |\foo|. (This is necessary so that things like +% |$X_\copyright$| work properly.) +% \item If |\protect| is not |\@typeset@protect| then we execute +% |\noexpand\foo|. For example, if we are writing to a file, +% then this results in |\foo| being written. If we are in a +% |\mark|, then |\foo| will be put in the mark---since |\foo| is +% robust, it will then survive all the things which may happen +% to it whilst it's a |\mark|. +% \end{itemize} +% So after all that, we will either execute the appropriate +% definition of |\foo| for the current encoding, or we will execute +% |\noexpand\foo|. +% +% The default value of |\foo| is |\?\foo| if it is defined, and an +% error message otherwise. +% +% When the encoding is changed from |T1| to |OT1|, |\T1-cmd| is +% defined to be |\@changed@cmd| and |\OT1-cmd| is defined to be +% |\@current@cmd|. This means that the test for what the current +% encoding is can be performed quickly. +% \begin{macrocode} +\def\@current@cmd#1{% + \ifx\protect\@typeset@protect + \@inmathwarn#1% + \else + \noexpand#1\expandafter\@gobble + \fi} +% \end{macrocode} +% +% \begin{macrocode} +\def\@changed@cmd#1#2{% + \ifx\protect\@typeset@protect + \@inmathwarn#1% + \expandafter\ifx\csname\cf@encoding\string#1\endcsname\relax + \expandafter\ifx\csname ?\string#1\endcsname\relax + \expandafter\def\csname ?\string#1\endcsname{% + \TextSymbolUnavailable#1% + }% + \fi + \global\expandafter\let + \csname\cf@encoding \string#1\expandafter\endcsname + \csname ?\string#1\endcsname + \fi + \csname\cf@encoding\string#1% + \expandafter\endcsname + \else + \noexpand#1% + \fi} +% \end{macrocode} +% \changes{v1.7m}{1995/10/09}{Autoload error} +% \changes{v1.7v}{1995/12/05}{Changed \cs{TextSymbolUnavailable} text} +% \begin{macrocode} +%</2ekernel|autoload> +%<*2ekernel|autoerr> +\gdef\TextSymbolUnavailable#1{% + \@latex@error{% + Command \protect#1 unavailable in encoding \cf@encoding% + }\@eha} +%</2ekernel|autoerr> +%<autoload>\gdef\TextSymbolUnavailable{\@autoerr\TextSymbolUnavailable} +%<*2ekernel|autoload> +% \end{macrocode} +% The command |\@inmathwarn| produces a warning message if we are +% currently in math mode. Note that since this command is used +% inside text commands, it can't call |\relax| before the +% |\ifmmode|. This means that it is possible for the warning to +% fail to be issued at the beginning of a row of an halign whose +% template enters math mode. This is probably a bad feature, but +% there's not much that can be done about it, since adding a |\relax| +% would break ligatures and kerning between text symbols. +% +% A more efficient solution would be to make |\@inmathwarn| and +% |\@inmatherr| equal to |\@empty| and |\relax| by default, and +% to have +% |\everymath| reset them to their usual definitions. This is left +% for future investigation (for example it may break some third +% party code). +% \begin{macrocode} +\def\@inmathwarn#1{% + \ifmmode + \@latex@warning{Command \protect#1 invalid in math mode}% + \fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \changes{v1.7k}{1995/06/05}{Allowed \cs{ProvideTextCommandDefault} +% after the preamble.} +% +% \begin{macro}{\DeclareTextCommandDefault} +% \begin{macro}{\ProvideTextCommandDefault} +% These define commands with encoding |?|. +% +% Note that |\DeclareTextCommandDefault| can only be used in the +% preamble, but that the |\Provide| version is allowed in inputenc +% |.def| files, so is allowed anywhere. +% \begin{macrocode} +\def\DeclareTextCommandDefault#1{% + \DeclareTextCommand#1?} +% \end{macrocode} +% +% \begin{macrocode} +\def\ProvideTextCommandDefault#1{% + \ProvideTextCommand#1?} +% \end{macrocode} +% +% \begin{macrocode} +\@onlypreamble\DeclareTextCommandDefault +%\@onlypreamble\ProvideTextCommandDefault +% \end{macrocode} +% They require |\?-cmd| to be initialized as |\@changed@cmd|. +% \begin{macrocode} +\expandafter\let\csname?-cmd\endcsname\@changed@cmd +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\DeclareTextAccent} +% \changes{v1.5a}{1994/05/11} +% {Reimplemented using \cs{DeclareTextCommand}.} +% \changes{v1.7z}{1996/05/23} +% {Reimplemented using \cs{add@accent} to save space latex/2133} +% This is just a disguise for defining a \TeX~|\accent| command. +% \begin{macrocode} +\def\DeclareTextAccent#1#2#3{% + \DeclareTextCommand#1{#2}{\add@accent{#3}}} +% \end{macrocode} +% +% \begin{macrocode} +\@onlypreamble\DeclareTextAccent +% \end{macrocode} +% \end{macro} +% +% \changes{v1.7a}{1994/11/30}{Rewrote \cs{@text@composite} so it +% allows an empty argument, or an argument containing lots of +% commands.} +% +% \begin{macro}{\add@accent} +% \changes{v1.7z}{1996/05/23}{macro added. latex/2133} +% \changes{v1.91}{2000/08/30}{Rearranged but no change to final code, +% CAR (pr/3160)} +% To save space this code is shared between all text accents that are +% set using the |\accent| primitive. +% The argument is pre-set in a box so that any +% font loading that is needed is already done within the box. +% This is needed because font-loading involves grouping and that would +% prevent the accent mechanism from working so that the accent would +% not be positioned over the argument. +% Declarations that change the font should be allowed (only low-level +% ones are at present) inside the argument of an accent command, +% but not size changes, as they involve |\setbox| operations which +% also inhibit the mechanism of the |\accent| primitive. +% +% Note that the whole process is within a group. +% \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable +% (pr/3160)} +% For a detailed discussion of this reimplementation and its +% deficiencies, see pr/3160. +% \task{Improve this and document its problems, see pr/3160} +% \changes{v1.9z}{2000/01/30}{Macro reimplemented (pr/3160)} +% \begin{macrocode} +\def\add@accent#1#2{\hmode@bgroup +% \end{macrocode} +% Turn off the group in |\UseTextSymbol| in case this is used +% inside the argument of |\add@accent|. +% \begin{macrocode} + \let\hmode@start@before@group\@firstofone + \setbox\@tempboxa\hbox{#2% +% \end{macrocode} +% When presetting the argument in a box we record its |\spacefactor| +% for later use after the accent got typeset. This way something like +% |\`A| gets the spacefactor of |A| (i.e., 999) rather than the +% default value of 1000. +% \changes{v1.9q}{1998/06/12} +% {Explicitly set \cs{spacefactor} after \cs{accent} (pr/2877)} +% \begin{macrocode} + \global\mathchardef\accent@spacefactor\spacefactor}% + \accent#1 #2\egroup\spacefactor\accent@spacefactor} +% \end{macrocode} +% Default definition for |\accent@spacefactor| prevents a horrible +% death of the above macro inside an unprotected |\edef|. +% \changes{v1.9w}{1999/10/28}{Give \cs{accent@spacefactor} a default +% definition (pr/3084)} +% \begin{macrocode} +\let\accent@spacefactor\relax +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hmode@bgroup} +% \changes{v1.9y}{2000/01/30}{Macro added} +% \begin{macrocode} +\def\hmode@bgroup{\leavevmode\bgroup} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\DeclareTextCompositeCommand} +% \changes{v1.7z}{1996/05/23} +% {Modified to cope with new \cs{add@accent} command: required +% removal of check for one argument-command} +% \begin{macro}{\DeclareTextComposite} +% \changes{v1.7l}{1995/06/09}{Rewrote \cs{DeclareTextComposite} to +% define the composite as a no-argument command rather than a +% two-argument command.} +% \begin{macro}{\@text@composite} +% \begin{macro}{\@text@composite@x} +% \begin{macro}{\@strip@args} +% \changes{v1.8c}{1996/10/27} +% {Removed macro} +% Another amusing game to play with |\expandafter|, |\csname|, and +% |\string|. When you say +% |\DeclareTextCompositeCommand{\foo}{T1}{a}{bar}|, we look to see +% if the expansion of |\T1\foo| begins with |\@text@composite|, and +% if it doesn't, we redefine |\T1\foo| to be: +%\begin{verbatim} +% #1 -> \@text@composite \T1\foo #1\@empty \@text@composite {...} +%\end{verbatim} +% where |...| is the +% previous definition of |\T1\foo|. Finally, we define |\\T1\foo-a| +% to expand to |bar|. +% \begin{macrocode} +\def\DeclareTextCompositeCommand#1#2#3#4{% + \expandafter\let\expandafter\reserved@a\csname#2\string#1\endcsname + \expandafter\expandafter\expandafter\ifx + \expandafter\@car\reserved@a\relax\relax\@nil \@text@composite \else + \edef\reserved@b##1{% + \def\expandafter\noexpand + \csname#2\string#1\endcsname####1{% + \noexpand\@text@composite + \expandafter\noexpand\csname#2\string#1\endcsname + ####1\noexpand\@empty\noexpand\@text@composite + {##1}}}% + \expandafter\reserved@b\expandafter{\reserved@a{##1}}% + \fi + \expandafter\def\csname\expandafter\string\csname + #2\endcsname\string#1-\string#3\endcsname{#4}} +% \end{macrocode} +% +% \begin{macrocode} +\@onlypreamble\DeclareTextCompositeCommand +% \end{macrocode} +% This all works because: +%\begin{verbatim} +% \@text@composite \T1\foo A\@empty \@text@composite {...} +%\end{verbatim} +% expands to +% |\\T1\foo-A| if |\\T1\foo-A| has been defined, and |{...}| +% otherwise. +% +% Note that |\@text@composite| grabs the first token of the +% argument and puts just that in the +% csname. This is so that |\'{\textit{e}}| will work---it checks +% whether |\\T1\'-\textit| is defined (which presumably it isn't) +% and so expands to |{\accent 1 \textit{e}}|. +% +% This trick won't always work, for example |\'{{\itshape e}}| will +% expand to (with spaces added for clarity): +%\begin{verbatim} +% \csname \string \T1\' - \string {\itshape e} \@empty \endcsname +%\end{verbatim} +% which will die pretty horribly. Unfortunately there's not much +% can be done about this if we're going to use |\csname| lookups as a +% fast way of accessing composites. +% +% This has an unfortunate `misfeature' though, which is that in +% the T1 encoding, |\'{aa}| produces \'a. This is not the expected +% behaviour, and should perhaps be fixed if the fix doesn't affect +% performance too badly. +% +% Finally, it's worth noting that the |\@empty| is used in +% |\@text@composite| so that accents will work even when the +% argument is empty. If you say |\'{}| then this looks up +% |\\T1\'-\@empty|, which ought to be |\relax|, and so all is well. +% If we didn't include the |\@empty|, then |\'{}| would expand to: +%\begin{verbatim} +% \csname \string \T1\' - \string \endcsname +%\end{verbatim} +% so the |\endcsname| would be |\string|'ed and the whole of the +% rest of the document would be put inside the |\csname|. This +% would not be good. +% \begin{macrocode} +\def\@text@composite#1#2#3\@text@composite{% + \expandafter\@text@composite@x + \csname\string#1-\string#2\endcsname} +% \end{macrocode} +% +% \changes{v1.7z}{1996/05/23} +% {\cs{expandafter} added to match other changes for latex/2133} +% \changes{v1.9r}{1999/01/06}{New impl for latex/2930} +% \changes{v1.9s}{1999/01/13}{Simplified solution for latex/2930} +% Originally the |\@text@composite@x| macro had two arguments and if +% |#1| was not |\relax| it was executed, otherwise |#2| was executed. +% All this happened within the |\ifx| code so that neither |#1| +% nor |#2| could have picked up any additional arguments form +% the input stream. +% This has now being changed using the typical |\@firstoftwo| / +% |\@secondoftwo| coding. This way the +% final expansion will happen without any |\else| or |\fi| +% intervening in the case that we need to get a further token +% from the input stream. +% \begin{macrocode} +\def\@text@composite@x#1{% + \ifx#1\relax + \expandafter\@secondoftwo + \else + \expandafter\@firstoftwo + \fi + #1} +% \end{macrocode} +% The command |\DeclareTextComposite| uses +% |\DeclareTextCompositeCommand| to declare a command which +% expands out to a single glyph. +% \changes{v1.8a}{1996/07/19} +% {Use char 0 not @ as carrier for \cs{lowercase} /2197} +% \begin{macrocode} +\catcode\z@=11\relax +% \end{macrocode} +% +% \begin{macrocode} +\def\DeclareTextComposite#1#2#3#4{% + \def\reserved@a{\DeclareTextCompositeCommand#1{#2}{#3}}% + \bgroup + \lccode\z@#4% + \lowercase{% + \egroup + \reserved@a ^^@}} +% \end{macrocode} +% +% \begin{macrocode} +\catcode\z@=15\relax +% \end{macrocode} +% +% \begin{macrocode} +\@onlypreamble\DeclareTextComposite +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\UseTextAccent} +% \begin{macro}{\UseTextSymbol} +% \changes{v1.7p}{1995/11/17}{Support \cs{@wrong@font@char} latex/1676} +% \changes{v1.7q}{1995/11/18}{Modify message slightly} +% \begin{macro}{\@use@text@encoding} +% \changes{v1.91}{2000/08/30}{Rearranged but no change to final code, +% CAR (pr/3160)} +% These fragile commands access glyphs from different encodings. +% They use grotty low-level calls to the font selection scheme for +% speed, and in order to make sure that |\UseTextSymbol| doesn't +% do anything which you're not allowed to do between an |\accent| +% and its glyph. +% +% For a detailed discussion of this reimplementation and its +% deficiencies, see pr/3160. +% \task{Improve this and document its problems, see pr/3160} +% \changes{v1.9z}{2000/01/30}{Macro reimplemented (pr/3160)} +% \begin{macrocode} +\def\UseTextAccent#1#2#3{% + \hmode@start@before@group + {% +% \end{macrocode} +% Turn off the group in |\UseTextSymbol| in case this is used +% inside the arguments of |\UseTextAccent|. +% \begin{macrocode} + \let\hmode@start@before@group\@firstofone + \let\@curr@enc\cf@encoding + \@use@text@encoding{#1}% + #2{\@use@text@encoding\@curr@enc#3}% + }} +% \end{macrocode} +% +% \changes{v1.9z}{2000/01/30}{Macro reimplemented (pr/3160)} +% \begin{macrocode} +\def\UseTextSymbol#1#2{% + \hmode@start@before@group + {% + \def\@wrong@font@char{\MessageBreak + for \noexpand\symbol`\string#2'}% + \@use@text@encoding{#1}% + #2% + }% + } +% \end{macrocode} +% +% \begin{macrocode} +\def\@use@text@encoding#1{% + \edef\f@encoding{#1}% + \xdef\font@name{% + \csname\curr@fontshape/\f@size\endcsname}% + \pickup@font + \font@name + \@@enc@update} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\hmode@start@before@group} +% The |\hmode@start@before@group| starts hmode and should be +% immediately followed by an explicit |{...}|. Its purpose is to +% ensure that hmode is started before this group is opened. Inside +% |\add@accent| and |\UseTextAccent| it is redefined to remove this +% group so that it doesn't conflict with the |\accent| primitive. +% +% For a detailed discussion see pr/3160. +% \changes{v1.9z}{2000/01/30}{Macro added (pr/3160)} +% \begin{macrocode} +\let\hmode@start@before@group\leavevmode +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DeclareTextSymbolDefault} +% \begin{macro}{\DeclareTextAccentDefault} +% Some syntactic sugar. Again, these should probably be optimized +% for speed. +% \begin{macrocode} +\def\DeclareTextSymbolDefault#1#2{% + \DeclareTextCommandDefault#1{\UseTextSymbol{#2}#1}} +% \end{macrocode} +% +% \begin{macrocode} +\def\DeclareTextAccentDefault#1#2{% + \DeclareTextCommandDefault#1{\UseTextAccent{#2}#1}} +% \end{macrocode} +% +% \begin{macrocode} +\@onlypreamble\DeclareTextSymbolDefault +\@onlypreamble\DeclareTextAccentDefault +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\UndeclareTextCommand} +% This command safely removes and encoding specific declaration +% for a given encoding. It is helpful if one intends to use the +% default definition always and therefore wants to get rid of +% a declaration for some specific encoding. +% \changes{v1.9o}{1998/03/20}{Macro added for pr/2783} +% \begin{macrocode} +\def\UndeclareTextCommand#1#2{% +% \end{macrocode} +% If there is no declaration for the current encoding do nothing. +% (This makes a hash table entry but without e\TeX{} we can't do +% anything about that). +% \begin{macrocode} + \expandafter\ifx\csname#2\string#1\endcsname\relax + \else +% \end{macrocode} +% Else: throw away that declaration. +% \begin{macrocode} + \global\expandafter\let\csname#2\string#1\endcsname + \@undefined +% \end{macrocode} +% But this is unfortunately not enough, we have to take a look +% at the top-level definition of the encoding specific command +% which for a command |\foo| would look similar to +% |\T1-cmd \foo \T1\foo| (three tokens). +% +% Of course, instead of |T1| one could see a different encoding name; +% which one depends the encoding for which |\foo| was declared +% last. +% +% Now assume we have just removed the declaration for |\foo| in |T1| +% and the top-level of |\foo| expands to the above. Then we better +% change that pretty fast otherwise we do get an ``undefined csname +% error'' when we try to typeset |\foo| within |T1| instead of +% getting the default definition for |\foo|. +% And what is the best way to change that top-level definition? Well, +% the only ``encoding'' we know for sure will still be around is +% the default encoding denoted by |?|. +% +% Thus in case the last token of the top-level expansion +% is now undefined we change the declaration to look like +% |\?-cmd \foo \?\foo| which is done by the following +% (readable?) code: +% \begin{macrocode} + \expandafter\expandafter\expandafter + \ifx\expandafter\@thirdofthree#1\@undefined + \expandafter\gdef\expandafter#1\expandafter + {\csname ?-cmd\expandafter\endcsname\expandafter + #1\csname?\string#1\endcsname}% + \fi + \fi +} +% \end{macrocode} +% +% \begin{macrocode} +\@onlypreamble\UndeclareTextCommand +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{Hyphenation} +% +% \changes{v1.5l}{1994/10/18}{Added new definitions of \cs{patterns} +% and \cs{hyphenation}.} +% \changes{v1.6g}{1994/11/05}{Added setting of \cs{@typeset@protect} +% to \cs{patterns} and \cs{hyphenation}.} +% \changes{v1.6g}{1994/11/30}{Removed new definitions of \cs{patterns} +% and \cs{hyphenation}, since encoding-specific commands now expand +% in the mouth.} +% +% \begin{macro}{\patterns} +% \begin{macro}{\@@patterns} +% \begin{macro}{\hyphenation} +% \begin{macro}{\@@hyphenation} +% We redefine |\patterns| and |\hyphenation| to allow the use of +% commands declared with |\DeclareText*| to be used inside them. +% \begin{macrocode} +%\let\@@patterns\patterns +%\let\@@hyphenation\hyphenation +%\def\patterns{% +% \bgroup +% \let\protect\@empty +% \let\@typeset@protect\@empty +% \let\@changed@x\@changed@x@mouth +% \afterassignment\egroup +% \@@patterns +%} +%\def\hyphenation{% +% \bgroup +% \let\protect\@empty +% \let\@typeset@protect\@empty +% \let\@changed@x\@changed@x@mouth +% \afterassignment\egroup +% \@@hyphenation +%} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Miscellania} +% +% \changes{1.4a}{1994/05/01}{Added the \cs{a} command.} +% \changes{1.7a}{1994/11/30}{Redefined \cs{a} for the new scheme.} +% \changes{1.7b}{1994/12/02}{Redefined \cs{a} properly.} +% \changes{1.7g}{1995/03/03}{Corrected an error in documentation +% referring to the tabular rather than the tabbing +% environment.} +% \changes{v1.7n}{1995/11/02}{Changed internal name \cs{a} to +% \cs{@tabacckludge} to protect against redefinition by malicicous +% users.} +% +% \begin{macro}{\a} +% The |\a| command is used to access the accent commands even when +% they have been redefined (for example by the |tabbing| +% environment). Its internal name is |\@tabacckludge|. +% +% The |\string| within the |\csname| guards against something +% like |'| being active at the point of use. +% \changes{v1.9r}{1998/09/19}{Added \cs{string} (pr/2878)} +% \begin{macrocode} +\def\@tabacckludge#1{\expandafter\@changed@cmd + \csname\string#1\endcsname\relax} +\let\a=\@tabacckludge +% \end{macrocode} +% \end{macro} +% +% \changes{v1.6a}{1994/10/25}{Added the files OT1enc.def, T1enc.def and +% OMSenc.def.} +% \changes{v1.6b}{1994/10/27}{Removed the files OT1enc.def, T1enc.def +% and OMSenc.def.} +% +% \subsubsection{Default encodings} +% +% We define the default encodings for most commands to be either OT1, +% OML or OMS. These defaults are in the kernel and therefore +% fonts with these encodings must be available unless these +% defaults are redefined elsewhere. Recall that the standard kernel +% loads the encoding files for these encodings, and also that for +% the T1 encoding. +% +% The naming conventions in the kernel are not what we would use if we +% were starting from scratch\dots\ +% Those defined by DEK (like |\ae| and |\ss|) or by the \TeX{} Users +% Group Technical Working Group on multi-lingual typesetting (like +% |\th| and |\ng|) have short names. Those which were added to the +% kernel in 1993 and early 1994 are named after their Adobe glyph +% names (like |\guillemotleft| and |\quotedblbase|). Unfortunately, +% this naming scheme won't work for all glyphs, since some names (like +% |\space|) are already used, and some (like |\endash|) are very +% likely to be defined by users. So we're now using the naming scheme +% of |\text| followed by the Adobe name, (like |\textendash| and +% |\textsterling|). Except that some glyphs don't have Adobe names, +% so we're using the names used by fontinst for those (like +% |\textcompwordmark|). Sigh. +% +% \changes{v1.6a}{1994/10/25}{Added the defaults.} +% \changes{v1.6b}{1994/10/27}{Added more defaults for OT1.} +% \changes{v1.6c}{1994/10/29}{Added commands like \cs{dots} for use in +% text and math.} +% +% Some accents from OT1: +% \begin{macrocode} +\DeclareTextAccentDefault{\"}{OT1} +\DeclareTextAccentDefault{\'}{OT1} +\DeclareTextAccentDefault{\.}{OT1} +\DeclareTextAccentDefault{\=}{OT1} +\DeclareTextAccentDefault{\H}{OT1} +\DeclareTextAccentDefault{\^}{OT1} +\DeclareTextAccentDefault{\`}{OT1} +\DeclareTextAccentDefault{\b}{OT1} +\DeclareTextAccentDefault{\c}{OT1} +\DeclareTextAccentDefault{\d}{OT1} +\DeclareTextAccentDefault{\r}{OT1} +\DeclareTextAccentDefault{\u}{OT1} +\DeclareTextAccentDefault{\v}{OT1} +\DeclareTextAccentDefault{\~}{OT1} +% \end{macrocode} +% Some symbols from OT1: +% \changes{v1.8c}{1996/10/27} +% {Removed \cs{aa} and \cs{AA}} +% \begin{macrocode} +%\DeclareTextSymbolDefault{\AA}{OT1} +\DeclareTextSymbolDefault{\AE}{OT1} +\DeclareTextSymbolDefault{\L}{OT1} +\DeclareTextSymbolDefault{\OE}{OT1} +\DeclareTextSymbolDefault{\O}{OT1} +%\DeclareTextSymbolDefault{\aa}{OT1} +\DeclareTextSymbolDefault{\ae}{OT1} +\DeclareTextSymbolDefault{\i}{OT1} +\DeclareTextSymbolDefault{\j}{OT1} +\DeclareTextSymbolDefault{\l}{OT1} +\DeclareTextSymbolDefault{\oe}{OT1} +\DeclareTextSymbolDefault{\o}{OT1} +\DeclareTextSymbolDefault{\ss}{OT1} +\DeclareTextSymbolDefault{\textdollar}{OT1} +\DeclareTextSymbolDefault{\textemdash}{OT1} +\DeclareTextSymbolDefault{\textendash}{OT1} +\DeclareTextSymbolDefault{\textexclamdown}{OT1} +%\DeclareTextSymbolDefault{\texthyphenchar}{OT1} +%\DeclareTextSymbolDefault{\texthyphen}{OT1} +\DeclareTextSymbolDefault{\textquestiondown}{OT1} +\DeclareTextSymbolDefault{\textquotedblleft}{OT1} +\DeclareTextSymbolDefault{\textquotedblright}{OT1} +\DeclareTextSymbolDefault{\textquoteleft}{OT1} +\DeclareTextSymbolDefault{\textquoteright}{OT1} +\DeclareTextSymbolDefault{\textsterling}{OT1} +% \end{macrocode} +% Some symbols from OMS: +% \changes{v1.7t}{1995/11/29}{Added \cs{textbackslash} and +% \cs{textbar}.} +% \changes{v1.8c}{1996/10/27} +% {Added \cs{textasteriskcentered}} +% \changes{v1.95}{2002/06/16}{Added default for \cs{textbardbl} (pr/3400)} +% \begin{macrocode} +\DeclareTextSymbolDefault{\textasteriskcentered}{OMS} +\DeclareTextSymbolDefault{\textbackslash}{OMS} +\DeclareTextSymbolDefault{\textbar}{OMS} +\DeclareTextSymbolDefault{\textbardbl}{OMS} +\DeclareTextSymbolDefault{\textbraceleft}{OMS} +\DeclareTextSymbolDefault{\textbraceright}{OMS} +\DeclareTextSymbolDefault{\textbullet}{OMS} +\DeclareTextSymbolDefault{\textdaggerdbl}{OMS} +\DeclareTextSymbolDefault{\textdagger}{OMS} +\DeclareTextSymbolDefault{\textparagraph}{OMS} +\DeclareTextSymbolDefault{\textperiodcentered}{OMS} +\DeclareTextSymbolDefault{\textsection}{OMS} +\DeclareTextAccentDefault{\textcircled}{OMS} +% \end{macrocode} +% +% \changes{v1.6d}{1994/10/30}{Added OML encoding.} +% \changes{v1.6d}{1994/10/30}{Made \cs{textless} and \cs{textgreater} +% come from OML.} +% \changes{v1.6d}{1994/10/30}{Added \cs{t}.} +% \changes{v1.7k}{1995/06/05}{Commented out \cs{textless} and +% \cs{textgreater}.} +% +% Some symbols from OML: +% \changes{v1.7t}{1995/11/29}{Added \cs{textless} and +% \cs{textgreater}.} +% \begin{macrocode} +\DeclareTextSymbolDefault{\textless}{OML} +\DeclareTextSymbolDefault{\textgreater}{OML} +\DeclareTextAccentDefault{\t}{OML} +% \end{macrocode} +% +% \changes{v1.6d}{1994/10/30}{Added \cs{textcircled}.} +% \changes{v1.6d}{1994/10/30}{Rewrote \cs{copyright} to use +% \cs{textcircled}.} +% \changes{v1.6d}{1994/10/30}{Removed \cs{textregistered}.} +% \changes{v1.7k}{1995/06/05}{Save some tokens in +% \cs{textvisiblespace} and \cs{textunderscore}.} +% \changes{v1.7t}{1995/11/29}{Added \cs{textasciicircum}, +% \cs{textasciitilde}, \cs{textregistered} and \cs{texttrademark}.} +% \changes{v1.7u}{1995/12/01}{Made \cs{SS} a Default, rather than +% having the default point to the OT1 definition.} +% \changes{v1.7w}{1995/12/11}{Modified \cs{copyright}} +% \changes{v1.9a}{1997/04/30}{Introduced \cs{textcopyright} and modified +% \cs{copyright}} +% +% Some defaults we can fake. +% +% The interface for defining |\copyright| changed, it used to +% use |\expandafter| to add braces at the appropriate points. +% \begin{macrocode} +\DeclareTextCommandDefault{\textcopyright}{\textcircled{c}} +% \expandafter\def\expandafter +% \copyright\expandafter{\expandafter{\copyright}} +% \end{macrocode} +% +% \changes{v1.9a}{1997/04/30}{Modified \cs{textunderscore}, removing +% \cs{mathunderscore}} +% \changes{v1.9b}{1997/04/30}{Added \cs{leavevmode} to +% \cs{textunderscore}} +% \changes{v1.9d}{1997/05/07}{Added \cs{leavevmode} to +% \cs{textcompwordmark}} +% \begin{macrocode} +\DeclareTextCommandDefault{\textasciicircum}{\^{}} +\DeclareTextCommandDefault{\textasciitilde}{\~{}} +\DeclareTextCommandDefault{\textcompwordmark}{\leavevmode\kern\z@} +\DeclareTextCommandDefault{\textunderscore}{% + \leavevmode \kern.06em\vbox{\hrule\@width.3em}} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareTextCommandDefault{\textvisiblespace}{% + \mbox{\kern.06em\vrule \@height.3ex}% + \vbox{\hrule \@width.3em}% + \hbox{\vrule \@height.3ex}} +% \end{macrocode} +% +% Using |\fontdimen3| in the next definition is some sort of a +% kludge (since it is the interword stretch) but it makes the +% ellipsis come out right in mono-spaced fonts too (since there it +% is zero). +% \begin{macrocode} +\DeclareTextCommandDefault{\textellipsis}{% + .\kern\fontdimen3\font + .\kern\fontdimen3\font + .\kern\fontdimen3\font} +% \end{macrocode} +% +% \changes{v1.9a}{1997/04/30}{Changed \cs{textsc} to \cs{scshape}} +% \changes{v1.95}{2002/06/18}{Changed def for \cs{textregistered} to +% avoid small caps (pr/3420)} +% \begin{macrocode} +%\DeclareTextCommandDefault{\textregistered}{\textcircled{\scshape r}} +\DeclareTextCommandDefault{\textregistered}{\textcircled{% + \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont R}} +\DeclareTextCommandDefault{\texttrademark}{\textsuperscript{TM}} +\DeclareTextCommandDefault{\SS}{SS} +% \end{macrocode} +% +% \changes{v1.9n}{1998/03/05}{Added masc/fem ords as in pr/2579} +% \begin{macrocode} +\DeclareTextCommandDefault{\textordfeminine}{\textsuperscript{a}} +\DeclareTextCommandDefault{\textordmasculine}{\textsuperscript{o}} +% \end{macrocode} +% +% \subsubsection{Math material} +% +% Some commands can be used in both text and math mode: +% \begin{macrocode} +\DeclareRobustCommand{\$}{\ifmmode\mathdollar\else\textdollar\fi} +\DeclareRobustCommand{\{}{\ifmmode\lbrace\else\textbraceleft\fi} +\DeclareRobustCommand{\}}{\ifmmode\rbrace\else\textbraceright\fi} +\DeclareRobustCommand{\P}{\ifmmode\mathparagraph\else\textparagraph\fi} +\DeclareRobustCommand{\S}{\ifmmode\mathsection\else\textsection\fi} +\DeclareRobustCommand{\dag}{\ifmmode{\dagger}\else\textdagger\fi} +\DeclareRobustCommand{\ddag}{\ifmmode{\ddagger}\else\textdaggerdbl\fi} +% \end{macrocode} +% +% For historical reasons |\copyright| +% needs |{}| around the definition in maths. +% +% \changes{v1.6f}{1994/11/04}{Added \cmd\_.} +% +% \changes{v1.9a}{1997/04/30}{Modified \cs{underscore}, removing +% \cs{mathunderscore}} +% \changes{v1.9a}{1997/04/30}{Introduced \cs{textcopyright} and modify +% \cs{copyright}} +% \begin{macrocode} +\DeclareRobustCommand{\_}{% + \ifmmode\nfss@text{\textunderscore}\else\textunderscore\fi} +\DeclareRobustCommand{\copyright}{% + \ifmmode{\nfss@text{\textcopyright}}\else\textcopyright\fi} +\DeclareRobustCommand{\pounds}{% + \ifmmode\mathsterling\else\textsterling\fi} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareRobustCommand{\dots}{% + \ifmmode\mathellipsis\else\textellipsis\fi} +% \end{macrocode} +% +% \begin{macrocode} +\let\ldots\dots +%</2ekernel|autoload> +% \end{macrocode} +% +% \changes{v1.6d}{1994/10/30}{Moved math commands here from ltmath.} +% \changes{v1.6f}{1994/11/04}{Added \cs{mathunderscore}.} +% \changes{v1.7k}{1995/06/05}{Moved math commands to fontdef.dtx.} +% +% +% \changes{1.4a}{1994/05/01}{Added the \cs{SaveAtCatcode} and +% \cs{RestoreAtCatcode} commands.} +% +% \changes{1.5a}{1994/05/12}{Removed the \cs{SaveAtCatcode} and +% \cs{RestoreAtCatcode} commands.} +% +% +% \subsection{Definitions for the OT1 encoding} +% +% \changes{1.3}{1993/12/17}{Removed all the hackery for use in +% \cs{DeclareFontEncoding}, and redid everything using +% \cs{DeclareTextFoo}.} +% \changes{1.3b}{1993/12/18}{Replaced the missing last argument to +% \cs{DeclareFontEncoding}.} +% \changes{1.3c}{1993/12/18}{Rewrote for the new syntax of +% \cs{EncodingSpecific}.} +% \changes{1.4a}{1994/05/01}{Rewrote for the new syntax.} +% \changes{1.5a}{1994/05/12}{Rewrote for the new syntax.} +% \changes{1.5h}{1994/05/16}{\cs{pounds} was still using u rather than +% ui shape.} +% \changes{1.6b}{1994/10/27}{Added: +% \cs{textemdash} +% \cs{textendash} +% \cs{textexclamdown} +% \cs{texthyphenchar} +% \cs{texthyphen} +% \cs{textquestiondown} +% \cs{textquotedblleft} +% \cs{textquotedblright} +% \cs{textquoteleft} +% \cs{textquoteright} +% } +% +% The definitions for the `\TeX{} text' (OT1) encoding. +% +% Declare the encoding. +% \begin{macrocode} +%<*OT1> +\DeclareFontEncoding{OT1}{}{} +% \end{macrocode} +% Declare the accents. +% \begin{macrocode} +\DeclareTextAccent{\"}{OT1}{127} +\DeclareTextAccent{\'}{OT1}{19} +\DeclareTextAccent{\.}{OT1}{95} +\DeclareTextAccent{\=}{OT1}{22} +\DeclareTextAccent{\^}{OT1}{94} +\DeclareTextAccent{\`}{OT1}{18} +\DeclareTextAccent{\~}{OT1}{126} +\DeclareTextAccent{\H}{OT1}{125} +\DeclareTextAccent{\u}{OT1}{21} +\DeclareTextAccent{\v}{OT1}{20} +\DeclareTextAccent{\r}{OT1}{23} +% \end{macrocode} +% Some accents have to be built by hand: +% Note that |\ooalign| and |\o@lign| must be inside a group. +% \changes{v1.7j}{1995/05/21}{Updated some plain macros} +% \changes{v1.7o}{1995/11/07}{Added \cs{leavevmode} at start of +% \cs{c}, otherwise the output routine might be invoked within the +% macro.} +% \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable +% (pr/3160)} +% \begin{macrocode} +\DeclareTextCommand{\b}{OT1}[1] + {\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\sh@ft{29}% + \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}\egroup} +\DeclareTextCommand{\c}{OT1}[1] + {\leavevmode\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1% + \else{\ooalign{\unhbox\z@\crcr\hidewidth\char24\hidewidth}}\fi} +\DeclareTextCommand{\d}{OT1}[1] + {\hmode@bgroup + \o@lign{\relax#1\crcr\hidewidth\sh@ft{10}.\hidewidth}\egroup} +% \end{macrocode} +% Declare the text symbols. +% \begin{macrocode} +\DeclareTextSymbol{\AE}{OT1}{29} +\DeclareTextSymbol{\OE}{OT1}{30} +\DeclareTextSymbol{\O}{OT1}{31} +\DeclareTextSymbol{\ae}{OT1}{26} +\DeclareTextSymbol{\i}{OT1}{16} +\DeclareTextSymbol{\j}{OT1}{17} +\DeclareTextSymbol{\oe}{OT1}{27} +\DeclareTextSymbol{\o}{OT1}{28} +\DeclareTextSymbol{\ss}{OT1}{25} +\DeclareTextSymbol{\textemdash}{OT1}{124} +\DeclareTextSymbol{\textendash}{OT1}{123} +% \end{macrocode} +% Using the ligatures helps with OT1 fonts that have +% |\textexclamdown| and |\textquestiondown| in unusual positions. +% \changes{v1.95}{2002/06/17}{Definition of \cs{textexclamdown} changed (pr/3368)} +% \changes{v1.95}{2002/06/17}{Definition of \cs{textquestiondown} changed (pr/3368)} +% \begin{macrocode} +%\DeclareTextSymbol{\textexclamdown}{OT1}{60} +%\DeclareTextSymbol{\textquestiondown}{OT1}{62} +\DeclareTextCommand{\textexclamdown}{OT1}{!`} +\DeclareTextCommand{\textquestiondown}{OT1}{?`} +%\DeclareTextSymbol{\texthyphenchar}{OT1}{`\-} +%\DeclareTextSymbol{\texthyphen}{OT1}{`\-} +\DeclareTextSymbol{\textquotedblleft}{OT1}{92} +\DeclareTextSymbol{\textquotedblright}{OT1}{`\"} +\DeclareTextSymbol{\textquoteleft}{OT1}{`\`} +\DeclareTextSymbol{\textquoteright}{OT1}{`\'} +% \end{macrocode} +% Some symbols which are faked from others: +% \changes{v1.7o}{1995/11/07}{Changed \cs{char}32 to \cs{@xxxii} (two +% tokens less).} +% \changes{v1.7o}{1995/11/07}{Replaced octal number 27 by decimal +% number 23 to protect against the quote character being active.} +% \changes{v1.7o}{1995/11/07}{Replaced some 0's by \cs{z@} (faster).} +% \changes{v1.8c}{1996/10/27} +% {Removed \cs{aa} and \cs{AA}} +% \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable +% (pr/3160)} +% \begin{macrocode} +% \DeclareTextCommand{\aa}{OT1} +% {{\accent23a}} +\DeclareTextCommand{\L}{OT1} + {\leavevmode\setbox\z@\hbox{L}\hb@xt@\wd\z@{\hss\@xxxii L}} +\DeclareTextCommand{\l}{OT1} + {\hmode@bgroup\@xxxii l\egroup} +% \DeclareTextCommand{\AA}{OT1} +% {\leavevmode\setbox\z@\hbox{h}\dimen@\ht\z@\advance\dimen@-1ex% +% \rlap{\raise.67\dimen@\hbox{\char23}}A} +% \end{macrocode} +% In the OT1 encoding \r A has a hand-crafted definition, so we +% have here the first recorded explicit use of +% |\DeclareTextCompositeCommand|. +% \changes{v1.8c}{1996/10/27} +% {Added \cs{r} A} +% \changes{v1.96}{2002/10/28}{% +% coding change, to follow bug fix by DEK in plain.tex (pr/3469)} +% \begin{macrocode} +\DeclareTextCompositeCommand{\r}{OT1}{A} + {\leavevmode\setbox\z@\hbox{!}\dimen@\ht\z@\advance\dimen@-1ex% + \rlap{\raise.67\dimen@\hbox{\char23}}A} +% \end{macrocode} +% In the OT1 encoding, \pounds~and \$ share a slot. +% \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable +% (pr/3160)} +% \begin{macrocode} +\DeclareTextCommand{\textdollar}{OT1}{\hmode@bgroup + \ifdim \fontdimen\@ne\font >\z@ + \slshape + \else + \upshape + \fi + \char`\$\egroup} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareTextCommand{\textsterling}{OT1}{\hmode@bgroup + \ifdim \fontdimen\@ne\font >\z@ + \itshape + \else + \fontshape{ui}\selectfont + \fi + \char`\$\egroup} +% \end{macrocode} +% +% Here we are adding some more composite commands to the |OT1| +% encoding. This makes the use of certain accents with |i| +% compatible with their use with the |T1| encoding; this +% enables them to become true \LaTeX{} internal representations. +% However, it will make these accents work a little less fast since +% a check will always be made for the existence of a composite. +% +% \changes{v1.93}{2001/05/28}{Added composites for compatibility with +% T1, pr/3295} +% \changes{v1.94}{2001/06/05}{Text composite Commands need kludges for +% `,' -- see tlb1903.lvt} +% \begin{macrocode} +\DeclareTextComposite{\.}{OT1}{i}{`\i} +\DeclareTextComposite{\.}{OT1}{\i}{`\i} +\DeclareTextCompositeCommand{\`}{OT1}{i}{\@tabacckludge`\i} +\DeclareTextCompositeCommand{\'}{OT1}{i}{\@tabacckludge'\i} +\DeclareTextCompositeCommand{\^}{OT1}{i}{\^\i} +\DeclareTextCompositeCommand{\"}{OT1}{i}{\"\i} +% \end{macrocode} +% +% \begin{macrocode} +%</OT1> +% \end{macrocode} +% +% \subsection{Definitions for the T1 encoding} +% +% \changes{1.3}{1993/12/17}{Removed all the hackery for use in +% \cs{DeclareFontEncoding}, and redid everything using +% \cs{DeclareTextFoo}.} +% \changes{1.3b}{1993/12/18}{Replaced the missing last argument to +% \cs{DeclareFontEncoding}.} +% \changes{1.3c}{1993/12/18}{Rewrote for the new syntax of +% \cs{EncodingSpecific}.} +% \changes{1.4a}{1994/05/01}{Rewrote for the new syntax.} +% \changes{1.5a}{1994/05/12}{Rewrote for the new syntax.} +% \changes{1.6a}{1994/10/25}{Added \cs{textdollar}, +% \cs{textlbrace}, \cs{textrbrace}, \cs{textsterling}, +% \cs{textunderline}.} +% \changes{1.6a}{1994/10/25}{Removed +% \cs{textlbrace}, \cs{textrbrace}, \cs{textunderline} to give them +% their proper names.} +% \changes{1.6b}{1994/10/27}{Added +% \cs{textasciicircum} +% \cs{textasciitilde} +% \cs{textbackslash} +% \cs{textbar} +% \cs{textbraceleft} +% \cs{textbraceright} +% \cs{textcompwordmark} +% \cs{textemdash} +% \cs{textendash} +% \cs{textexclamdown} +% \cs{textgreater} +% \cs{texthyphenchar} +% \cs{texthyphen} +% \cs{textless} +% \cs{textquestiondown} +% \cs{textquotedblleft} +% \cs{textquotedblright} +% \cs{textquotedbl} +% \cs{textquoteleft} +% \cs{textquoteright} +% \cs{textunderscore} +% \cs{textvisiblespace} +% } +% \changes{v1.9h}{1997/12/17} +% {Added \cs{textperthousand} and \cs{textpertenthousand}} +% +% The definitions for the `Extended \TeX{} text' (T1) encoding. +% +% Declare the encoding. +% \begin{macrocode} +%<*T1> +\DeclareFontEncoding{T1}{}{} +% \end{macrocode} +% Declare the accents. +% \begin{macrocode} +\DeclareTextAccent{\`}{T1}{0} +\DeclareTextAccent{\'}{T1}{1} +\DeclareTextAccent{\^}{T1}{2} +\DeclareTextAccent{\~}{T1}{3} +\DeclareTextAccent{\"}{T1}{4} +\DeclareTextAccent{\H}{T1}{5} +\DeclareTextAccent{\r}{T1}{6} +\DeclareTextAccent{\v}{T1}{7} +\DeclareTextAccent{\u}{T1}{8} +\DeclareTextAccent{\=}{T1}{9} +\DeclareTextAccent{\.}{T1}{10} +% \end{macrocode} +% Some accents have to be built by hand. +% Note that |\ooalign| and |\o@lign| must be inside a group. +% \changes{v1.9h}{1997/12/17}{As in OT1, Added \cs{leavevmode} at +% start of \cs{c}, otherwise the output routine might be invoked +% within the macro.} +% \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable +% (pr/3160)} +% \changes{v1.95}{2002/06/17}{Corrected \cs{c} for T1 (pr/3442)} +% \changes{v1.99b}{2004/01/03}{Use \cs{ooalign} for \cs{k} (pr/3532)} +% \changes{v1.99b}{2004/01/03}{Added \cs{textogonekcentered} (pr/3532)} +% \changes{v1.99c}{2004/01/04}{More adjustments for ogonek (pr/3532)} +% \begin{macrocode} +\DeclareTextCommand{\b}{T1}[1] + {\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\sh@ft{29}% + \vbox to.2ex{\hbox{\char9}\vss}\hidewidth}\egroup} +\DeclareTextCommand{\c}{T1}[1] + {\leavevmode\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent11 #1% + \else{\ooalign{\unhbox\z@\crcr + \hidewidth\char11\hidewidth}}\fi} +\DeclareTextCommand{\d}{T1}[1] + {\hmode@bgroup + \o@lign{\relax#1\crcr\hidewidth\sh@ft{10}.\hidewidth}\egroup} +\DeclareTextCommand{\k}{T1}[1] + {\hmode@bgroup\ooalign{\null#1\crcr\hidewidth\char12}\egroup} +\DeclareTextCommand{\textogonekcentered}{T1}[1] + {\hmode@bgroup\ooalign{\null#1\crcr\hidewidth\char12\hidewidth}\egroup} +% \end{macrocode} +% +% Some symbols are constructed. +% +% \changes{v1.9h}{1997/12/17} +% {Added \cs{textperthousand} and \cs{textpertenthousand}} +% Slot 24 contains a small circle intended for construction of +% these two glyphs. +% +% \begin{macrocode} +\DeclareTextCommand{\textperthousand}{T1} + {\%\char 24 } % space or `relax as delimiter? +\DeclareTextCommand{\textpertenthousand}{T1} + {\%\char 24\char 24 } % space or `relax as delimiter? +% \end{macrocode} +% +% Declare the text symbols. +% \changes{v1.7t}{1995/11/29}{Added \cs{textasciicircum}, +% \cs{textasciitilde}, \cs{textbackslash}, \cs{textbar}, +% \cs{textgreater} and \cs{textless}.} +% \changes{v1.8c}{1996/10/27} +% {Removed \cs{aa} and \cs{AA}} +% +% \begin{macrocode} +%\DeclareTextSymbol{\AA}{T1}{197} +\DeclareTextSymbol{\AE}{T1}{198} +\DeclareTextSymbol{\DH}{T1}{208} +\DeclareTextSymbol{\DJ}{T1}{208} +\DeclareTextSymbol{\L}{T1}{138} +\DeclareTextSymbol{\NG}{T1}{141} +\DeclareTextSymbol{\OE}{T1}{215} +\DeclareTextSymbol{\O}{T1}{216} +\DeclareTextSymbol{\SS}{T1}{223} +\DeclareTextSymbol{\TH}{T1}{222} +%\DeclareTextSymbol{\aa}{T1}{229} +\DeclareTextSymbol{\ae}{T1}{230} +\DeclareTextSymbol{\dh}{T1}{240} +\DeclareTextSymbol{\dj}{T1}{158} +\DeclareTextSymbol{\guillemotleft}{T1}{19} +\DeclareTextSymbol{\guillemotright}{T1}{20} +\DeclareTextSymbol{\guilsinglleft}{T1}{14} +\DeclareTextSymbol{\guilsinglright}{T1}{15} +\DeclareTextSymbol{\i}{T1}{25} +\DeclareTextSymbol{\j}{T1}{26} +\DeclareTextSymbol{\l}{T1}{170} +\DeclareTextSymbol{\ng}{T1}{173} +\DeclareTextSymbol{\oe}{T1}{247} +\DeclareTextSymbol{\o}{T1}{248} +\DeclareTextSymbol{\quotedblbase}{T1}{18} +\DeclareTextSymbol{\quotesinglbase}{T1}{13} +\DeclareTextSymbol{\ss}{T1}{255} +\DeclareTextSymbol{\textasciicircum}{T1}{`\^} +\DeclareTextSymbol{\textasciitilde}{T1}{`\~} +\DeclareTextSymbol{\textbackslash}{T1}{`\\} +\DeclareTextSymbol{\textbar}{T1}{`\|} +\DeclareTextSymbol{\textbraceleft}{T1}{`\{} +\DeclareTextSymbol{\textbraceright}{T1}{`\}} +\DeclareTextSymbol{\textcompwordmark}{T1}{23} +\DeclareTextSymbol{\textdollar}{T1}{`\$} +\DeclareTextSymbol{\textemdash}{T1}{22} +\DeclareTextSymbol{\textendash}{T1}{21} +\DeclareTextSymbol{\textexclamdown}{T1}{189} +\DeclareTextSymbol{\textgreater}{T1}{`\>} +%\DeclareTextSymbol{\texthyphenchar}{T1}{127} +%\DeclareTextSymbol{\texthyphen}{T1}{`\-} +\DeclareTextSymbol{\textless}{T1}{`\<} +\DeclareTextSymbol{\textquestiondown}{T1}{190} +\DeclareTextSymbol{\textquotedblleft}{T1}{16} +\DeclareTextSymbol{\textquotedblright}{T1}{17} +\DeclareTextSymbol{\textquotedbl}{T1}{`\"} +\DeclareTextSymbol{\textquoteleft}{T1}{`\`} +\DeclareTextSymbol{\textquoteright}{T1}{`\'} +\DeclareTextSymbol{\textsection}{T1}{159} +\DeclareTextSymbol{\textsterling}{T1}{191} +\DeclareTextSymbol{\textunderscore}{T1}{95} +\DeclareTextSymbol{\textvisiblespace}{T1}{32} +\DeclareTextSymbol{\th}{T1}{254} +% \end{macrocode} +% Declare the composites. +% \changes{v1.93}{2001/05/28}{Changed the effect of +% \cs{\.}\cs{\i}, pr/3295} +% \begin{macrocode} +\DeclareTextComposite{\.}{T1}{i}{`\i} +\DeclareTextComposite{\.}{T1}{\i}{`\i} +% \end{macrocode} +% \changes{v1.9c}{1997/05/04}{Added `hex index tabs'} +% "80 = 128 +% \begin{macrocode} +\DeclareTextComposite{\u}{T1}{A}{128} +\DeclareTextComposite{\k}{T1}{A}{129} +\DeclareTextComposite{\'}{T1}{C}{130} +\DeclareTextComposite{\v}{T1}{C}{131} +\DeclareTextComposite{\v}{T1}{D}{132} +\DeclareTextComposite{\v}{T1}{E}{133} +\DeclareTextComposite{\k}{T1}{E}{134} +\DeclareTextComposite{\u}{T1}{G}{135} +% \end{macrocode} +% "88 = 136 +% \begin{macrocode} +\DeclareTextComposite{\'}{T1}{L}{136} +\DeclareTextComposite{\v}{T1}{L}{137} +\DeclareTextComposite{\'}{T1}{N}{139} +\DeclareTextComposite{\v}{T1}{N}{140} +\DeclareTextComposite{\H}{T1}{O}{142} +\DeclareTextComposite{\'}{T1}{R}{143} +% \end{macrocode} +% "90 = 144 +% \begin{macrocode} +\DeclareTextComposite{\v}{T1}{R}{144} +\DeclareTextComposite{\'}{T1}{S}{145} +\DeclareTextComposite{\v}{T1}{S}{146} +\DeclareTextComposite{\c}{T1}{S}{147} +\DeclareTextComposite{\v}{T1}{T}{148} +\DeclareTextComposite{\c}{T1}{T}{149} +\DeclareTextComposite{\H}{T1}{U}{150} +\DeclareTextComposite{\r}{T1}{U}{151} +% \end{macrocode} +% "98 = 152 +% \begin{macrocode} +\DeclareTextComposite{\"}{T1}{Y}{152} +\DeclareTextComposite{\'}{T1}{Z}{153} +\DeclareTextComposite{\v}{T1}{Z}{154} +\DeclareTextComposite{\.}{T1}{Z}{155} +\DeclareTextComposite{\.}{T1}{I}{157} +% \end{macrocode} +% "A0 = 160 +% \begin{macrocode} +\DeclareTextComposite{\u}{T1}{a}{160} +\DeclareTextComposite{\k}{T1}{a}{161} +\DeclareTextComposite{\'}{T1}{c}{162} +\DeclareTextComposite{\v}{T1}{c}{163} +\DeclareTextComposite{\v}{T1}{d}{164} +\DeclareTextComposite{\v}{T1}{e}{165} +\DeclareTextComposite{\k}{T1}{e}{166} +\DeclareTextComposite{\u}{T1}{g}{167} +% \end{macrocode} +% "A8 = 168 +% \begin{macrocode} +\DeclareTextComposite{\'}{T1}{l}{168} +\DeclareTextComposite{\v}{T1}{l}{169} +\DeclareTextComposite{\'}{T1}{n}{171} +\DeclareTextComposite{\v}{T1}{n}{172} +\DeclareTextComposite{\H}{T1}{o}{174} +\DeclareTextComposite{\'}{T1}{r}{175} +% \end{macrocode} +% "B0 = 176 +% \begin{macrocode} +\DeclareTextComposite{\v}{T1}{r}{176} +\DeclareTextComposite{\'}{T1}{s}{177} +\DeclareTextComposite{\v}{T1}{s}{178} +\DeclareTextComposite{\c}{T1}{s}{179} +\DeclareTextComposite{\v}{T1}{t}{180} +\DeclareTextComposite{\c}{T1}{t}{181} +\DeclareTextComposite{\H}{T1}{u}{182} +\DeclareTextComposite{\r}{T1}{u}{183} +% \end{macrocode} +% "B8 = 184 +% \begin{macrocode} +\DeclareTextComposite{\"}{T1}{y}{184} +\DeclareTextComposite{\'}{T1}{z}{185} +\DeclareTextComposite{\v}{T1}{z}{186} +\DeclareTextComposite{\.}{T1}{z}{187} +% \end{macrocode} +% "C0 = 192 +% \begin{macrocode} +\DeclareTextComposite{\`}{T1}{A}{192} +\DeclareTextComposite{\'}{T1}{A}{193} +\DeclareTextComposite{\^}{T1}{A}{194} +\DeclareTextComposite{\~}{T1}{A}{195} +\DeclareTextComposite{\"}{T1}{A}{196} +\DeclareTextComposite{\r}{T1}{A}{197} +\DeclareTextComposite{\c}{T1}{C}{199} +% \end{macrocode} +% "C8 = 200 +% \begin{macrocode} +\DeclareTextComposite{\`}{T1}{E}{200} +\DeclareTextComposite{\'}{T1}{E}{201} +\DeclareTextComposite{\^}{T1}{E}{202} +\DeclareTextComposite{\"}{T1}{E}{203} +\DeclareTextComposite{\`}{T1}{I}{204} +\DeclareTextComposite{\'}{T1}{I}{205} +\DeclareTextComposite{\^}{T1}{I}{206} +\DeclareTextComposite{\"}{T1}{I}{207} +% \end{macrocode} +% "D0 = 208 +% \begin{macrocode} +\DeclareTextComposite{\~}{T1}{N}{209} +\DeclareTextComposite{\`}{T1}{O}{210} +\DeclareTextComposite{\'}{T1}{O}{211} +\DeclareTextComposite{\^}{T1}{O}{212} +\DeclareTextComposite{\~}{T1}{O}{213} +\DeclareTextComposite{\"}{T1}{O}{214} +% \end{macrocode} +% "D8 = 216 +% \begin{macrocode} +\DeclareTextComposite{\`}{T1}{U}{217} +\DeclareTextComposite{\'}{T1}{U}{218} +\DeclareTextComposite{\^}{T1}{U}{219} +\DeclareTextComposite{\"}{T1}{U}{220} +\DeclareTextComposite{\'}{T1}{Y}{221} +% \end{macrocode} +% "E0 = 224 +% \begin{macrocode} +\DeclareTextComposite{\`}{T1}{a}{224} +\DeclareTextComposite{\'}{T1}{a}{225} +\DeclareTextComposite{\^}{T1}{a}{226} +\DeclareTextComposite{\~}{T1}{a}{227} +\DeclareTextComposite{\"}{T1}{a}{228} +\DeclareTextComposite{\r}{T1}{a}{229} +\DeclareTextComposite{\c}{T1}{c}{231} +% \end{macrocode} +% "E8 = 232 +% \begin{macrocode} +\DeclareTextComposite{\`}{T1}{e}{232} +\DeclareTextComposite{\'}{T1}{e}{233} +\DeclareTextComposite{\^}{T1}{e}{234} +\DeclareTextComposite{\"}{T1}{e}{235} +\DeclareTextComposite{\`}{T1}{i}{236} +\DeclareTextComposite{\`}{T1}{\i}{236} +\DeclareTextComposite{\'}{T1}{i}{237} +\DeclareTextComposite{\'}{T1}{\i}{237} +\DeclareTextComposite{\^}{T1}{i}{238} +\DeclareTextComposite{\^}{T1}{\i}{238} +\DeclareTextComposite{\"}{T1}{i}{239} +\DeclareTextComposite{\"}{T1}{\i}{239} +% \end{macrocode} +% "F0 = 240 +% \begin{macrocode} +\DeclareTextComposite{\~}{T1}{n}{241} +\DeclareTextComposite{\`}{T1}{o}{242} +\DeclareTextComposite{\'}{T1}{o}{243} +\DeclareTextComposite{\^}{T1}{o}{244} +\DeclareTextComposite{\~}{T1}{o}{245} +\DeclareTextComposite{\"}{T1}{o}{246} +% \end{macrocode} +% "F8 = 248 +% \begin{macrocode} +\DeclareTextComposite{\`}{T1}{u}{249} +\DeclareTextComposite{\'}{T1}{u}{250} +\DeclareTextComposite{\^}{T1}{u}{251} +\DeclareTextComposite{\"}{T1}{u}{252} +\DeclareTextComposite{\'}{T1}{y}{253} +% \end{macrocode} +% \changes{v1.99b}{2004/01/03}{Added composites for \cs{k} (pr/3532)} +% \begin{macrocode} +\DeclareTextCompositeCommand{\k}{T1}{o}{\textogonekcentered{o}} +\DeclareTextCompositeCommand{\k}{T1}{O}{\textogonekcentered{O}} +% \end{macrocode} +% +% \begin{macrocode} +%</T1> +% \end{macrocode} +% +% \changes{1.4a}{1994/05/01}{Removed the uc/lc table settings, since +% the T1 uc/lc table is now the default.} +% +% \subsection{Definitions for the OMS encoding} +% +% \changes{v1.6a}{1994/10/25}{Added the OMS encoding.} +% \changes{v1.6b}{1994/10/27}{Renamed \cs{textlbrace} to +% \cs{textbraceleft} and \cs{textrbrace} to \cs{textbraceright}.} +% \changes{v1.6b}{1994/10/27}{Added \cs{textbackslash}.} +% \changes{v1.6d}{1994/10/30}{Added \cs{textcircled}.} +% +% The definitions for the `\TeX{} math symbol' (OMS) encoding. Even +% though this is meant to be a math font, it includes some of the +% standard \LaTeX{} text symbols. +% +% Declare the encoding. +% \begin{macrocode} +%<*OMS> +\DeclareFontEncoding{OMS}{}{} +% \end{macrocode} +% Declare the symbols. +% \changes{v1.7t}{1995/11/29}{Added \cs{textbackslash} and +% \cs{textbar}.} +% \changes{v1.8c}{1996/10/27} +% {Added \cs{textasteriskcentered}} +% \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable +% (pr/3160)} +% \changes{v1.95}{2002/06/16}{Added \cs{textbardbl} (pr/3400)} +% \begin{macrocode} +% \changes{v1.99}{2004/02/02}{Added \cs{textbigcircle}} +% Note that slot 13 has in places been named |\Orb|: please root +% out and destroy this impolity wherever you find it! +% \begin{macrocode} +\DeclareTextSymbol{\textasteriskcentered}{OMS}{3} % "03 +\DeclareTextSymbol{\textbackslash}{OMS}{110} % "6E +\DeclareTextSymbol{\textbar}{OMS}{106} % "6A +\DeclareTextSymbol{\textbardbl}{OMS}{107} % "6B +\DeclareTextSymbol{\textbraceleft}{OMS}{102} % "66 +\DeclareTextSymbol{\textbraceright}{OMS}{103} % "67 +\DeclareTextSymbol{\textbullet}{OMS}{15} % "0F +\DeclareTextSymbol{\textdaggerdbl}{OMS}{122} % "7A +\DeclareTextSymbol{\textdagger}{OMS}{121} % "79 +\DeclareTextSymbol{\textparagraph}{OMS}{123} % "7B +\DeclareTextSymbol{\textperiodcentered}{OMS}{1} % "01 +\DeclareTextSymbol{\textsection}{OMS}{120} % "78 +\DeclareTextSymbol{\textbigcircle}{OMS}{13} % "0D +\DeclareTextCommand{\textcircled}{OMS}[1]{\hmode@bgroup + \ooalign{% + \hfil \raise .07ex\hbox {\upshape#1}\hfil \crcr + \char 13 % "0D + }% + \egroup} +%</OMS> +% \end{macrocode} +% +% \subsection{Definitions for the OML encoding} +% +% \changes{v1.6d}{1994/10/30}{Added the OML encoding.} +% +% The definitions for the `\TeX{} math italic' (OML) encoding. Even +% though this is meant to be a math font, it includes some of the +% standard \LaTeX{} text symbols. +% +% Declare the encoding. +% \begin{macrocode} +%<*OML> +\DeclareFontEncoding{OML}{}{} +% \end{macrocode} +% Declare the symbols. +% \changes{v1.7t}{1995/11/29}{Added \cs{textless} and +% \cs{textgreater}.} +% \changes{v1.9h}{1997/12/17}{Changed to decimal codes.} +% \changes{v1.9m}{1998/01/16}{fixed decimal codes. latex/2734} +% \begin{macrocode} +\DeclareTextSymbol{\textless}{OML}{`\<} +\DeclareTextSymbol{\textgreater}{OML}{`\>} +\DeclareTextAccent{\t}{OML}{127} % "7F +%</OML> +% \end{macrocode} +% +% \subsection{Definitions for the OT4 encoding} +% +% These definitions are for the Polish extension to the +% `\TeX\ text' (OT1) encoding. +% This encoding was created by B.~Jackowski and M.~Ry\'cko +% for use with the Polish version of Computer Modern and Computer +% Concrete. In positions 0--127 it is identical to OT1 but it +% contains some additional characters in the upper half. The \LaTeX{} +% support was developed by Mariusz Olko. +% +% The PL fonts that use it are available as follows:\\ +% Metafont sources +% \texttt{ftp://ftp.gust.org.pl/TeX/language/polish/pl-mf.zip}; +% +% Font files +% \texttt{ftp://ftp.gust.org.pl/TeX/language/polish/pl-tfm.zip}. +% +% Declare the encoding. +% \begin{macrocode} +%<*OT4> +\DeclareFontEncoding{OT4}{}{} +\DeclareFontSubstitution{OT4}{cmr}{m}{n} +% \end{macrocode} +% Declare the accents. +% \begin{macrocode} +\DeclareTextAccent{\"}{OT4}{127} +\DeclareTextAccent{\'}{OT4}{19} +\DeclareTextAccent{\.}{OT4}{95} +\DeclareTextAccent{\=}{OT4}{22} +\DeclareTextAccent{\^}{OT4}{94} +\DeclareTextAccent{\`}{OT4}{18} +\DeclareTextAccent{\~}{OT4}{126} +\DeclareTextAccent{\H}{OT4}{125} +\DeclareTextAccent{\u}{OT4}{21} +\DeclareTextAccent{\v}{OT4}{20} +\DeclareTextAccent{\r}{OT4}{23} +% \end{macrocode} +% The ogonek accent is available only under a e A \& E. But we +% have to provide some definition for \cs{k}. Some other accents +% have to be built by hand as in OT1: +% \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable +% (pr/3160)} +% \begin{macrocode} +\DeclareTextCommand{\k}{OT4}[1]{% + \TextSymbolUnavailable{\k{#1}}#1} +\DeclareTextCommand{\b}{OT4}[1] + {\hmode@bgroup\o@lign{\relax#1\crcr\hidewidth\sh@ft{29}% + \vbox to.2ex{\hbox{\char22}\vss}\hidewidth}\egroup} +\DeclareTextCommand{\c}{OT4}[1] + {\leavevmode\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1% + \else{\ooalign{\unhbox\z@\crcr\hidewidth\char24\hidewidth}}\fi} +\DeclareTextCommand{\d}{OT4}[1] + {\hmode@bgroup + \o@lign{\relax#1\crcr\hidewidth\sh@ft{10}.\hidewidth}\egroup} +% \end{macrocode} +% Declare the text symbols. +% \begin{macrocode} +\DeclareTextSymbol{\AE}{OT4}{29} +\DeclareTextSymbol{\OE}{OT4}{30} +\DeclareTextSymbol{\O}{OT4}{31} +\DeclareTextSymbol{\L}{OT4}{138} +\DeclareTextSymbol{\ae}{OT4}{26} +\DeclareTextSymbol{\guillemotleft}{OT4}{174} +\DeclareTextSymbol{\guillemotright}{OT4}{175} +\DeclareTextSymbol{\i}{OT4}{16} +\DeclareTextSymbol{\j}{OT4}{17} +\DeclareTextSymbol{\l}{OT4}{170} +\DeclareTextSymbol{\o}{OT4}{28} +\DeclareTextSymbol{\oe}{OT4}{27} +\DeclareTextSymbol{\quotedblbase}{OT4}{255} +\DeclareTextSymbol{\ss}{OT4}{25} +\DeclareTextSymbol{\textemdash}{OT4}{124} +\DeclareTextSymbol{\textendash}{OT4}{123} +\DeclareTextSymbol{\textexclamdown}{OT4}{60} +%\DeclareTextSymbol{\texthyphenchar}{OT4}{`\-} +%\DeclareTextSymbol{\texthyphen}{OT4}{`\-} +\DeclareTextSymbol{\textquestiondown}{OT4}{62} +\DeclareTextSymbol{\textquotedblleft}{OT4}{92} +\DeclareTextSymbol{\textquotedblright}{OT4}{`\"} +\DeclareTextSymbol{\textquoteleft}{OT4}{`\`} +\DeclareTextSymbol{\textquoteright}{OT4}{`\'} +% \end{macrocode} +% Definition for \r A as in OT1: +% \changes{v1.96}{2002/10/28}{% +% coding change, to follow bug fix by DEK in plain.tex (pr/3469)} +% \begin{macrocode} +\DeclareTextCompositeCommand{\r}{OT4}{A} + {\leavevmode\setbox\z@\hbox{!}\dimen@\ht\z@\advance\dimen@-1ex% + \rlap{\raise.67\dimen@\hbox{\char23}}A} +% \end{macrocode} +% In the OT4 encoding, \pounds~and \$ share a slot. +% \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable +% (pr/3160)} +% \begin{macrocode} +\DeclareTextCommand{\textdollar}{OT4}{\hmode@bgroup + \ifdim \fontdimen\@ne\font >\z@ + \slshape + \else + \upshape + \fi + \char`\$\egroup} +\DeclareTextCommand{\textsterling}{OT4}{\hmode@bgroup + \ifdim \fontdimen\@ne\font >\z@ + \itshape + \else + \fontshape{ui}\selectfont + \fi + \char`\$\egroup} +% \end{macrocode} +% Declare the composites. +% \begin{macrocode} +\DeclareTextComposite{\k}{OT4}{A}{129} +\DeclareTextComposite{\'}{OT4}{C}{130} +\DeclareTextComposite{\k}{OT4}{E}{134} +\DeclareTextComposite{\'}{OT4}{N}{139} +\DeclareTextComposite{\'}{OT4}{S}{145} +\DeclareTextComposite{\'}{OT4}{Z}{153} +\DeclareTextComposite{\.}{OT4}{Z}{155} +\DeclareTextComposite{\k}{OT4}{a}{161} +\DeclareTextComposite{\'}{OT4}{c}{162} +\DeclareTextComposite{\k}{OT4}{e}{166} +\DeclareTextComposite{\'}{OT4}{n}{171} +\DeclareTextComposite{\'}{OT4}{s}{177} +\DeclareTextComposite{\'}{OT4}{z}{185} +\DeclareTextComposite{\.}{OT4}{z}{187} +\DeclareTextComposite{\'}{OT4}{O}{211} +\DeclareTextComposite{\'}{OT4}{o}{243} +%</OT4> +% \end{macrocode} +% +% +% \subsection{Definitions for the TS1 encoding} +% +% \changes{v1.9c}{1997/05/04}{Added TS1 encoding v2.2.beta} +% \changes{v1.9g}{1997/11/23} +% {Use \cs{textperthousand}, \cs{textpertenthousand} and +% \cs{textfractionsolidus} not +% \cs{textpermill}, \cs{textpertenmill} and \cs{textfraction}. +% /2673 } +% \changes{v1.9h}{1997/12/17} +% {Removed default settings, see next section.} +% +% \begin{macrocode} +%<*TS1> +\DeclareFontEncoding{TS1}{}{} +\DeclareFontSubstitution{TS1}{cmr}{m}{n} +% \end{macrocode} +% Some accents have to be built by hand. +% Note that |\ooalign| and |\o@lign| must be inside a group. +% \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable +% (pr/3160)} +% \begin{macrocode} +\DeclareTextCommand{\capitalcedilla}{TS1}[1] + {\hmode@bgroup + \ooalign{\null#1\crcr\hidewidth\char11\hidewidth}\egroup} +\DeclareTextCommand{\capitalogonek}{TS1}[1] + {\hmode@bgroup + \ooalign{\null#1\crcr\hidewidth\char12\hidewidth}\egroup} +% \end{macrocode} +% +% Accents for capital letters. +% +% These commands can be used by the end user either directly or through +% definitions of the type +% \begin{verbatim} +% \DeclareTextCompositeCommand{\'}{T1}{X}{\capitalacute X} +% \end{verbatim} +% None of the latter definitions are provided by default, since they +% are probably rarely used. +% +% "00 = 0 +% \begin{macrocode} +\DeclareTextAccent{\capitalgrave}{TS1}{0} +\DeclareTextAccent{\capitalacute}{TS1}{1} +\DeclareTextAccent{\capitalcircumflex}{TS1}{2} +\DeclareTextAccent{\capitaltilde}{TS1}{3} +\DeclareTextAccent{\capitaldieresis}{TS1}{4} +\DeclareTextAccent{\capitalhungarumlaut}{TS1}{5} +\DeclareTextAccent{\capitalring}{TS1}{6} +\DeclareTextAccent{\capitalcaron}{TS1}{7} +% \end{macrocode} +% "08 = 8 +% \begin{macrocode} +\DeclareTextAccent{\capitalbreve}{TS1}{8} +\DeclareTextAccent{\capitalmacron}{TS1}{9} +\DeclareTextAccent{\capitaldotaccent}{TS1}{10} +% \end{macrocode} +% Tie accents. +% +% The tie accent was borrowed from the |cmmi| font. The tc fonts +% now provide four tie accents, the first two are done in the +% classical way with assymetric glyphs hanging out of their boxes; +% the new ties are centered in their boxes like all other accents. +% They need a name: please tell us if you know what to call them. +% +% " = +% \begin{macrocode} +\DeclareTextAccent{\t}{TS1}{26} +\DeclareTextAccent{\capitaltie}{TS1}{27} +\DeclareTextAccent{\newtie}{TS1}{28} +\DeclareTextAccent{\capitalnewtie}{TS1}{29} +% \end{macrocode} +% +% Compund word marks. +% +% The text companion fonts contain two compound word marks of +% different heights, one has |cap_height|, the other |asc_height|. +% +% \begin{macrocode} +\DeclareTextSymbol{\textcapitalcompwordmark}{TS1}{23} +\DeclareTextSymbol{\textascendercompwordmark}{TS1}{31} +% \end{macrocode} +% +% The text companion symbols. +% +% \begin{macrocode} +\DeclareTextSymbol{\textquotestraightbase}{TS1}{13} +% \end{macrocode} +% "10 = 16 +% \begin{macrocode} +\DeclareTextSymbol{\textquotestraightdblbase}{TS1}{18} +\DeclareTextSymbol{\texttwelveudash}{TS1}{21} +\DeclareTextSymbol{\textthreequartersemdash}{TS1}{22} +% \end{macrocode} +% "18 = 24 +% \begin{macrocode} +\DeclareTextSymbol{\textleftarrow}{TS1}{24} +\DeclareTextSymbol{\textrightarrow}{TS1}{25} +% \end{macrocode} +% "20 = 32 +% \begin{macrocode} +\DeclareTextSymbol{\textblank}{TS1}{32} +\DeclareTextSymbol{\textdollar}{TS1}{36} +\DeclareTextSymbol{\textquotesingle}{TS1}{39} +% \end{macrocode} +% "28 = 40 +% \begin{macrocode} +\DeclareTextSymbol{\textasteriskcentered}{TS1}{42} +% \end{macrocode} +% Note that '054 is a comma and '056 is a full stop: these make +% numbers using oldstyle digits easier to input. +% \begin{macrocode} +\DeclareTextSymbol{\textdblhyphen}{TS1}{45} +\DeclareTextSymbol{\textfractionsolidus}{TS1}{47} +% \end{macrocode} +% +% Oldstyle digits. +% +% "30 = 48 +% \begin{macrocode} +\DeclareTextSymbol{\textzerooldstyle}{TS1}{48} +\DeclareTextSymbol{\textoneoldstyle}{TS1}{49} +\DeclareTextSymbol{\texttwooldstyle}{TS1}{50} +\DeclareTextSymbol{\textthreeoldstyle}{TS1}{51} +\DeclareTextSymbol{\textfouroldstyle}{TS1}{52} +\DeclareTextSymbol{\textfiveoldstyle}{TS1}{53} +\DeclareTextSymbol{\textsixoldstyle}{TS1}{54} +\DeclareTextSymbol{\textsevenoldstyle}{TS1}{55} +% \end{macrocode} +% "38 = 56 +% \begin{macrocode} +\DeclareTextSymbol{\texteightoldstyle}{TS1}{56} +\DeclareTextSymbol{\textnineoldstyle}{TS1}{57} +% \end{macrocode} +% +% More text companion symbols. +% +% \begin{macrocode} +\DeclareTextSymbol{\textlangle}{TS1}{60} +\DeclareTextSymbol{\textminus}{TS1}{61} +\DeclareTextSymbol{\textrangle}{TS1}{62} +% \end{macrocode} +% "48 = 72 +% \begin{macrocode} +\DeclareTextSymbol{\textmho}{TS1}{77} +% \end{macrocode} +% +% \changes{v1.9r}{1999/01/06}{Minor documentation fix.} +% The big circle is here to define the command \cs{textcircled}. +% Formerly it was taken from the |cmsy| font. +% \changes{v1.9h}{1997/12/17}{Changed to decimal codes in \cs{ooalign}.} +% \changes{v1.9k}{1998/01/12}{Adding missing braces and \cs{ushape}.} +% \changes{v1.9y}{2000/01/30}{Use \cs{hmode@bgroup} where applicable +% (pr/3160)} +% \begin{macrocode} +\DeclareTextSymbol{\textbigcircle}{TS1}{79} +\DeclareTextCommand{\textcircled}{TS1}[1]{\hmode@bgroup + \ooalign{% + \hfil \raise .07ex\hbox {\upshape#1}\hfil \crcr + \char 79 % '117 = "4F + }% + \egroup} +% \end{macrocode} +% +% More text companion symbols. +% +% "50 = 80 +% \begin{macrocode} +\DeclareTextSymbol{\textohm}{TS1}{87} +% \end{macrocode} +% "58 = 88 +% \begin{macrocode} +\DeclareTextSymbol{\textlbrackdbl}{TS1}{91} +\DeclareTextSymbol{\textrbrackdbl}{TS1}{93} +\DeclareTextSymbol{\textuparrow}{TS1}{94} +\DeclareTextSymbol{\textdownarrow}{TS1}{95} +% \end{macrocode} +% "60 = 96 +% \begin{macrocode} +\DeclareTextSymbol{\textasciigrave}{TS1}{96} +\DeclareTextSymbol{\textborn}{TS1}{98} +\DeclareTextSymbol{\textdivorced}{TS1}{99} +\DeclareTextSymbol{\textdied}{TS1}{100} +% \end{macrocode} +% "68 = 104 +% \begin{macrocode} +\DeclareTextSymbol{\textleaf}{TS1}{108} +\DeclareTextSymbol{\textmarried}{TS1}{109} +\DeclareTextSymbol{\textmusicalnote}{TS1}{110} +% \end{macrocode} +% "78 = 120 +% \begin{macrocode} +\DeclareTextSymbol{\texttildelow}{TS1}{126} +% \end{macrocode} +% +% This glyph, |\textdblhyphenchar| is hanging, like the hyphenchar of +% the ec fonts. +% +% \begin{macrocode} +\DeclareTextSymbol{\textdblhyphenchar}{TS1}{127} +% \end{macrocode} +% "80 = 128 +% \begin{macrocode} +\DeclareTextSymbol{\textasciibreve}{TS1}{128} +\DeclareTextSymbol{\textasciicaron}{TS1}{129} +% \end{macrocode} +% +% This next glyph is \emph{not} the same as |\textquotedbl|. +% +% \changes{v1.9p}{1998/06/12}{Corrected 130 and 131, see pr/2834} +% \begin{macrocode} +\DeclareTextSymbol{\textacutedbl}{TS1}{130} +\DeclareTextSymbol{\textgravedbl}{TS1}{131} +\DeclareTextSymbol{\textdagger}{TS1}{132} +\DeclareTextSymbol{\textdaggerdbl}{TS1}{133} +\DeclareTextSymbol{\textbardbl}{TS1}{134} +\DeclareTextSymbol{\textperthousand}{TS1}{135} +% \end{macrocode} +% "88 = 136 +% \begin{macrocode} +\DeclareTextSymbol{\textbullet}{TS1}{136} +\DeclareTextSymbol{\textcelsius}{TS1}{137} +\DeclareTextSymbol{\textdollaroldstyle}{TS1}{138} +\DeclareTextSymbol{\textcentoldstyle}{TS1}{139} +\DeclareTextSymbol{\textflorin}{TS1}{140} +\DeclareTextSymbol{\textcolonmonetary}{TS1}{141} +\DeclareTextSymbol{\textwon}{TS1}{142} +\DeclareTextSymbol{\textnaira}{TS1}{143} +% \end{macrocode} +% "90 = 144 +% \begin{macrocode} +\DeclareTextSymbol{\textguarani}{TS1}{144} +\DeclareTextSymbol{\textpeso}{TS1}{145} +\DeclareTextSymbol{\textlira}{TS1}{146} +\DeclareTextSymbol{\textrecipe}{TS1}{147} +\DeclareTextSymbol{\textinterrobang}{TS1}{148} +\DeclareTextSymbol{\textinterrobangdown}{TS1}{149} +\DeclareTextSymbol{\textdong}{TS1}{150} +\DeclareTextSymbol{\texttrademark}{TS1}{151} +% \end{macrocode} +% "98 = 152 +% \begin{macrocode} +\DeclareTextSymbol{\textpertenthousand}{TS1}{152} +\DeclareTextSymbol{\textpilcrow}{TS1}{153} +\DeclareTextSymbol{\textbaht}{TS1}{154} +\DeclareTextSymbol{\textnumero}{TS1}{155} +% \end{macrocode} +% This next name may change. +% For the following sign we know only a german name, which is +% abz\"uglich. The meaning is something like ``commercial minus''. +% An ASCII ersatz is ./. (dot slash dot). +% The temporary English name is |\textdiscount|. +% \begin{macrocode} +\DeclareTextSymbol{\textdiscount}{TS1}{156} +\DeclareTextSymbol{\textestimated}{TS1}{157} +\DeclareTextSymbol{\textopenbullet}{TS1}{158} +\DeclareTextSymbol{\textservicemark}{TS1}{159} +% \end{macrocode} +% "A0 = 160 +% \begin{macrocode} +\DeclareTextSymbol{\textlquill}{TS1}{160} +\DeclareTextSymbol{\textrquill}{TS1}{161} +\DeclareTextSymbol{\textcent}{TS1}{162} +\DeclareTextSymbol{\textsterling}{TS1}{163} +\DeclareTextSymbol{\textcurrency}{TS1}{164} +\DeclareTextSymbol{\textyen}{TS1}{165} +\DeclareTextSymbol{\textbrokenbar}{TS1}{166} +\DeclareTextSymbol{\textsection}{TS1}{167} +% \end{macrocode} +% "A8 = 168 +% \begin{macrocode} +\DeclareTextSymbol{\textasciidieresis}{TS1}{168} +\DeclareTextSymbol{\textcopyright}{TS1}{169} +\DeclareTextSymbol{\textordfeminine}{TS1}{170} +\DeclareTextSymbol{\textcopyleft}{TS1}{171} +\DeclareTextSymbol{\textlnot}{TS1}{172} +% \end{macrocode} +% +% The meaning of the circled-P is ``sound recording copyright''. +% +% \changes{v1.9p}{1998/06/12}{Renamed \cs{textmacron} pr/2840} +% \begin{macrocode} +\DeclareTextSymbol{\textcircledP}{TS1}{173} +\DeclareTextSymbol{\textregistered}{TS1}{174} +\DeclareTextSymbol{\textasciimacron}{TS1}{175} +% \end{macrocode} +% "B0 = 176 +% \begin{macrocode} +\DeclareTextSymbol{\textdegree}{TS1}{176} +\DeclareTextSymbol{\textpm}{TS1}{177} +\DeclareTextSymbol{\texttwosuperior}{TS1}{178} +\DeclareTextSymbol{\textthreesuperior}{TS1}{179} +\DeclareTextSymbol{\textasciiacute}{TS1}{180} +\DeclareTextSymbol{\textmu}{TS1}{181} % micro sign +\DeclareTextSymbol{\textparagraph}{TS1}{182} +\DeclareTextSymbol{\textperiodcentered}{TS1}{183} +% \end{macrocode} +% "B8 = 184 +% \begin{macrocode} +\DeclareTextSymbol{\textreferencemark}{TS1}{184} +\DeclareTextSymbol{\textonesuperior}{TS1}{185} +\DeclareTextSymbol{\textordmasculine}{TS1}{186} +\DeclareTextSymbol{\textsurd}{TS1}{187} +\DeclareTextSymbol{\textonequarter}{TS1}{188} +\DeclareTextSymbol{\textonehalf}{TS1}{189} +\DeclareTextSymbol{\textthreequarters}{TS1}{190} +\DeclareTextSymbol{\texteuro}{TS1}{191} +% \end{macrocode} +% "E0 = 208 +% \begin{macrocode} +\DeclareTextSymbol{\texttimes}{TS1}{214} +% \end{macrocode} +% "F0 = 240 +% \begin{macrocode} +\DeclareTextSymbol{\textdiv}{TS1}{246} +%</TS1> +% \end{macrocode} +% +% \section{Package files} +% +% \changes{v1.9h}{1997/12/17}{Added section.} +% \changes{v1.9h}{1997/12/17}{Added code for textcomp.sty.} +% This file now also contains some packages that provide access to +% the more specialised encodings. +% +% \subsection{The fontenc package} +% +% \changes{v1.5c}{1994/05/14}{Added the fontenc package} +% \changes{v1.5g}{1994/05/16}{Removed the lowercasing of the filename.} +% \changes{v1.7a}{1994/11/30}{Always load the enc.def file, so that +% the default encoding for the commands will change.} +% \changes{v1.7x}{1996/05/18}{Produce error if encoding not found. +% pr/2054} +% \changes{v1.7y}{1996/05/21}{Corrected error message (CAR)} +% \changes{v1.8d}{1996/11/18} +% {(DPC) lowercase external file names. internal/1044}% +% This package allows authors to specify which encodings they will use. +% For each encoding |FOO|, the package looks to see if the encoding +% |FOO| has already been declared. If it has not, the file |fooenc.def| +% is loaded. The default encoding is set to be |FOO|. +% +% In addition the package at the moment contains extra code to extend +% the |\@uclclist| (list of upper/lower case pairs) for encodings that +% involve cyrillic characters. THIS IS A TEMPORARY SOLUTION and will not +% stay this way forever (or so we hope) but right now we are missing a +% proper interface for this and didn't wanted to rush it. +% \changes{v1.9r}{1999/01/07}{Hackery to temp support cyrillic uc/lc} +% \changes{v1.9t}{1999/02/24}{Corrected hackery cyrillic uc/lc list} +% \changes{v1.9x}{1999/12/08}{Changed \cs{CYRRHOOK} and \cs{cyrrhook} +% to\cs{CYRRHK} and \cs{cyrrhk} as name changed in the cyrillic +% bundle for naming consistency with other ``hook'' glyphs.} +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% Here we define a macro that extends the |\@uclclist| if needed and +% aferwards turns itself in a noop. +% \begin{macrocode} +\def\update@uclc@with@cyrillic{% + \expandafter\def\expandafter\@uclclist\expandafter + {\@uclclist + \cyra\CYRA\cyrabhch\CYRABHCH\cyrabhchdsc\CYRABHCHDSC\cyrabhdze + \CYRABHDZE\cyrabhha\CYRABHHA\cyrae\CYRAE\cyrb\CYRB\cyrbyus + \CYRBYUS\cyrc\CYRC\cyrch\CYRCH\cyrchldsc\CYRCHLDSC\cyrchrdsc + \CYRCHRDSC\cyrchvcrs\CYRCHVCRS\cyrd\CYRD\cyrdelta\CYRDELTA + \cyrdje\CYRDJE\cyrdze\CYRDZE\cyrdzhe\CYRDZHE\cyre\CYRE\cyreps + \CYREPS\cyrerev\CYREREV\cyrery\CYRERY\cyrf\CYRF\cyrfita + \CYRFITA\cyrg\CYRG\cyrgdsc\CYRGDSC\cyrgdschcrs\CYRGDSCHCRS + \cyrghcrs\CYRGHCRS\cyrghk\CYRGHK\cyrgup\CYRGUP\cyrh\CYRH + \cyrhdsc\CYRHDSC\cyrhhcrs\CYRHHCRS\cyrhhk\CYRHHK\cyrhrdsn + \CYRHRDSN\cyri\CYRI\cyrie\CYRIE\cyrii\CYRII\cyrishrt\CYRISHRT + \cyrishrtdsc\CYRISHRTDSC\cyrizh\CYRIZH\cyrje\CYRJE\cyrk\CYRK + \cyrkbeak\CYRKBEAK\cyrkdsc\CYRKDSC\cyrkhcrs\CYRKHCRS\cyrkhk + \CYRKHK\cyrkvcrs\CYRKVCRS\cyrl\CYRL\cyrldsc\CYRLDSC\cyrlhk + \CYRLHK\cyrlje\CYRLJE\cyrm\CYRM\cyrmdsc\CYRMDSC\cyrmhk\CYRMHK + \cyrn\CYRN\cyrndsc\CYRNDSC\cyrng\CYRNG\cyrnhk\CYRNHK\cyrnje + \CYRNJE\cyrnlhk\CYRNLHK\cyro\CYRO\cyrotld\CYROTLD\cyrp\CYRP + \cyrphk\CYRPHK\cyrq\CYRQ\cyrr\CYRR\cyrrdsc\CYRRDSC\cyrrhk + \CYRRHK\cyrrtick\CYRRTICK\cyrs\CYRS\cyrsacrs\CYRSACRS + \cyrschwa\CYRSCHWA\cyrsdsc\CYRSDSC\cyrsemisftsn\CYRSEMISFTSN + \cyrsftsn\CYRSFTSN\cyrsh\CYRSH\cyrshch\CYRSHCH\cyrshha\CYRSHHA + \cyrt\CYRT\cyrtdsc\CYRTDSC\cyrtetse\CYRTETSE\cyrtshe\CYRTSHE + \cyru\CYRU\cyrushrt\CYRUSHRT\cyrv\CYRV\cyrw\CYRW\cyry\CYRY + \cyrya\CYRYA\cyryat\CYRYAT\cyryhcrs\CYRYHCRS\cyryi\CYRYI\cyryo + \CYRYO\cyryu\CYRYU\cyrz\CYRZ\cyrzdsc\CYRZDSC\cyrzh\CYRZH + \cyrzhdsc\CYRZHDSC}% + \let\update@uclc@with@cyrillic\relax +} +% \end{macrocode} +% +% Here we process each option: +% \begin{macrocode} +\DeclareOption*{% + \let\encodingdefault\CurrentOption + \edef\reserved@f{% + \lowercase{\def\noexpand\reserved@f{\CurrentOption enc.def}}}% + \reserved@f + \InputIfFileExists\reserved@f + {}{\PackageError{fontenc}% + {Encoding file `\reserved@f' not found.% + \MessageBreak + You might have misspelt the name of the encoding}% + {Necessary code for this encoding was not + loaded.\MessageBreak + Thus calling the encoding later on will + produce further error messages.}}% + \let\reserved@f\relax +% \end{macrocode} +% +% In case the current encoding is one of a list of known +% cyrillic ones we extend the |\@uclclist|: +% \begin{macrocode} + \expandafter\in@\expandafter{\CurrentOption}% + {T2A,T2B,T2C,X2,LCY,OT2}% + \ifin@ +% \end{macrocode} +% +% But only if it hasn't already been extended. This might happen if +% there are several calls to fontenc loading one of the above +% encodings. If we don't do this check the |\@uclclist| gets +% unnecessarily big, slowing down the processing at runtime. +% \changes{v1.9v}{1999/06/12}{Extend \cs{@uclclist} only once} +% \begin{macrocode} + \expandafter\in@\expandafter\cyra\expandafter + {\@uclclist}% + \ifin@ + \else + \update@uclc@with@cyrillic + \fi + \fi +} +% \end{macrocode} +% +% \begin{macrocode} +\ProcessOptions* +% \end{macrocode} +% +% \begin{macrocode} +\fontencoding\encodingdefault\selectfont +% \end{macrocode} +% +% To save some space we get rid of the macro extending the +% |\@uclclist| (might have happened already). +% \begin{macrocode} +\let\update@uclc@with@cyrillic\relax +% \end{macrocode} +% +% Finally we pretend that the fontenc package wasn't read in. This +% allows for using it several times, e.g., in a class file and in the +% preamble (at the cost of not getting any version info). +% That kind of hackery shows that using a general purpose +% package just for loading an encoding is not the right kind +% of interface for setting up encodings --- it will get replaced at +% some point in the future. +% \changes{v1.9r}{1999/01/07}{Hackery to allow using fontenc several +% times} +% \changes{v1.9u}{1999/06/10}{Ensure that we also forget old options +% (pr/2888)} +% \begin{macrocode} +\global\expandafter\let\csname ver@fontenc.sty\endcsname\relax +\global\expandafter\let\csname opt@fontenc.sty\endcsname\relax +\global\let\@ifl@ter@@\@ifl@ter +\def\@ifl@ter#1#2#3#4#5{\global\let\@ifl@ter\@ifl@ter@@} +%</package> +% \end{macrocode} +% +% +% \subsection{The textcomp package} +% +% This one is for the |TS1| encoding which contains text symbols +% for use with the |T1|-encoded text fonts. It therefore first +% inputs the file |TS1enc.def| and then sets (or resets) the +% defaults for the symbols it contains. The result of this is that +% when one of these symbols is accessed and the current encoding +% does not provide it, the symbol will be supplied by a silent, +% local change to this encoding. +% +% \begin{macrocode} +%<*TS1sty> +% \end{macrocode} +% Since many PostScript fonts only implement a subset of |TS1| many +% commands only produce black blobs of ink. To resolve the +% resulting problems a number of options have been introduced and +% some code has been developed to distinguish sub-encodings. +% +% The sub-encodings have a numerical id and are defined as follows +% for \texttt{TS1}: +% \begin{description} +% +% \item[\#5] those \texttt{TS1} symbols that are also in the ISO-Adobe +% character set; without \verb=textcurrency=, which is often +% misused for the Euro. Older Type1 fonts from the non-\TeX{} +% world provide only this subset. +% +% \item[\#4] = \#5 + \verb=\texteuro=. Most newer fonts provide this. +% +% \item[\#3] = \#4 + \verb=\textomega=. Can also be described as +% $\texttt{TS1} \cap (\texttt{ISO-Adobe} \cup +% \texttt{MacRoman})$. (Except for the missing "currency".) + +% +% \item[\#2] = \#3 + \verb=\textestimated= + \verb=\textcurrency=. Can +% also be described as $\texttt{TS1} \cap +% \texttt{Adobe-Western-2}$. This may be relevant for OpenType +% fonts, which usually show the Adobe-Western-2 character set. +% +% \item[\#1] = \texttt{TS1} without \verb=\textcircled= and \verb=\t=. +% These two glyphs are often not implemented and if their kernel +% defaults are changed commands like \verb=\copyright= +% unnecessarily fail. +% +% \item[\#0] = full \texttt{TS1} +% \end{description} +% +% And here a summary to go in the transcript file: +% \begin{macrocode} +\PackageInfo{textcomp}{Sub-encoding information:\MessageBreak + \space\space 5 = only ISO-Adobe without \string\textcurrency\MessageBreak + \space\space 4 = 5 + \string\texteuro\MessageBreak + \space\space 3 = 4 + \string\textohm\MessageBreak + \space\space 2 = 3 + \noexpand\textestimated+ \string\textcurrency\MessageBreak + \space\space 1 = TS1 - \noexpand\textcircled- \string\t\MessageBreak + \space\space 0 = TS1 (full)\MessageBreak + Font families with sub-encoding setting implement\MessageBreak + only a restricted character set as indicated.\MessageBreak + Family '?' is the default used for unknown fonts.\MessageBreak + See the documentation for details\@gobble} +% \end{macrocode} +% +% \begin{macro}{\DeclareEncodingSubset} +% An encoding subset to which a font family belongs is declared by +% |\DeclareEncodingSubset| that take the major encoding as the +% first argument (e.g., |TS1|), the family name as the second +% argument (e.g., |cmr|), and the subset encoding id as a third, +% (e.g., |0| for |cmr|). +% +% The default encoding subset to use when nothing is known about +% the current font family is named |?|. +% \begin{macrocode} +\def\DeclareEncodingSubset#1#2#3{% + \@ifundefined{#1:#2}% + {\PackageInfo{textcomp}{Setting #2 sub-encoding to #1/#3}}% + {\PackageInfo{textcomp}{Changing #2 sub-encoding to #1/#3}}% + \@namedef{#1:#2}{#3}} +\@onlypreamble\DeclareEncodingSubset +% \end{macrocode} +% \end{macro} +% +% +% The options for the package are the following: +% \begin{description} +% \item[safe] +% for unknown font families enables only symbols that are also +% in the ISO-Adobe character set; without "currency", which is +% often misused for the Euro. Older Type1 fonts from the +% non-TeX world provide only this subset. +% +% \item[euro] +% enables the ``safe'' symbols plus the |\texteuro| +% command. Most newer fonts provide this. +% +% \item[full] enables all |TS1| commands; useful only with fonts +% like EC or CM bright. +% +% \item[almostfull] +% same as ``full'', except that |\textcircled| +% and |\t| are \emph{not} redefined from their defaults to avoid +% that commands like |\copyright| suddenly no longer work. +% +% \item[force] +% ignore all subset encoding definitions stored in the package +% itself or in the configuration file and always use the default +% subset as specifed by one of the other options (seldom useful, +% only dangerous). +% \end{description} + +% \begin{macro}{\iftc@forced} +% Switch used to implement the \texttt{force} option +% \begin{macrocode} +\newif\iftc@forced \tc@forcedfalse +% \end{macrocode} +% \end{macro} + +% This is implemented by defining the default subset: +% \begin{macrocode} +\DeclareOption{full}{\DeclareEncodingSubset{TS1}{?}{0}} +\DeclareOption{almostfull}{\DeclareEncodingSubset{TS1}{?}{1}} +\DeclareOption{euro}{\DeclareEncodingSubset{TS1}{?}{4}} +\DeclareOption{safe}{\DeclareEncodingSubset{TS1}{?}{5}} +% \end{macrocode} +% The default is ``almostfull'' which means that old documents will +% work except that |\textcircled| and |\t| will use the kernel +% defaults (with the advantage that this also works if the current +% font (as often the case) doesn't implement these glyphs. +% +% The ``force'' option simply sets the switch to true. +% \begin{macrocode} +\DeclareOption{force}{\tc@forcedtrue} +% \end{macrocode} +% +% The suggestions to user is to use the ``safe'' option always +% unless that balks in which case they could switch to +% ``almostfull'' but then better check their output manually. +% +% \begin{macrocode} +\def\tc@errorwarn{\PackageError} +\DeclareOption{warn}{\gdef\tc@errorwarn#1#2#3{\PackageWarning{#1}{#2}}} +% \end{macrocode} +% +% \begin{macrocode} +\ExecuteOptions{almostfull} +\ProcessOptions\relax +% \end{macrocode} +% +% \begin{macro}{\CheckEncodingSubset} +% The command |\CheckEncodingSubset| will check if the current font +% family has the right encoding subset to typeset a certain +% command. It takes five arguments as follows: +% first argument is either |\UseTextSymbol|, |\UseTextAccent| +% depending on whether or not the symbol is a text symbol or a text +% accent. + +% The second argument is the encoding from which this symbol should +% be fetched. +% +% The third argument is either a fake accessor command or an error +% message. the code in that argument (if ever executed) receives +% two arguments: |#2| and |#5| of |\CheckEncodingSubset|. +% +% Argument four is the subset encoding id to test against: if this +% value is higher than the subset id of the current font family +% then we typeset the symbol, i.e., execute |#1{#2}#5| otherwise +% it runs |#3#5|, e.g., to produce an error message or fake the +% glyph somehow. +% +% Argument five is the symbol or accent command that is being +% checked. +% +% For usage examples see definitions below. +% \begin{macrocode} +\iftc@forced +% \end{macrocode} +% If the ``force'' option was given we always use the default for +% testing against. +% \begin{macrocode} +\def\CheckEncodingSubset#1#2#3#4#5{% + \ifnum #4>% + 0\csname #2:?\endcsname + \relax + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi + {#1{#2}}{#3}% + #5% +} +% \end{macrocode} +% In normal circumstances the test is a bit more complicated: first +% check if there exists a macro +% |\|\meta{arg2}|:|\meta{current-family} and if so use that value +% to test against, otherwise use the default to test against. +% \begin{macrocode} +\else +\def\CheckEncodingSubset#1#2#3#4#5{% + \ifnum #4>% + \expandafter\ifx\csname #2:\f@family\endcsname\relax + 0\csname #2:?\endcsname + \else + \csname #2:\f@family\endcsname + \fi + \relax + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi + {#1{#2}}{#3}% + #5% +} +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{tc@subst} +% \begin{macrocode} +\def\tc@subst#1{% + \tc@errorwarn{textcomp}% % should be latex error if general + {Symbol \string#1 not provided by\MessageBreak + font family \f@family\space + in TS1 encoding.\MessageBreak Default family used instead}\@eha + \bgroup\fontfamily\textcompsubstdefault\selectfont#1\egroup +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\textcompsubstdefault} +% \begin{macrocode} +\def\textcompsubstdefault{cmr} +% \end{macrocode} +% \end{macro} + +% \begin{macro}{\tc@error} +% |\tc@error| is going to be used in arg |#3| of +% |\CheckEncodingSubset| when a symbol is not available in a +% certain font family. It gets pass the encoding it normally lives +% in (arg one) and the name of the symbol or accent that has a +% problem. +% +% \begin{macrocode} +% error commands take argument: +% #1 symbol to be used +\def\tc@error#1{% + \PackageError{textcomp}% % should be latex error if general + {Accent \string#1 not provided by\MessageBreak + font family \f@family\space + in TS1 encoding}\@eha +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\tc@fake@euro} +% |\tc@fake@euro| is an example of a ``fake'' definition to use in arg |#3| of +% |\CheckEncodingSubset| when a symbol is not available in a +% certain font family. Here we produce an Euro symbol by combining +% a ``C'' with a ``=''. +% \begin{macrocode} +\def\tc@fake@euro#1{% + \leavevmode + \PackageInfo{textcomp}{Faking \noexpand#1for font family + \f@family\MessageBreak in TS1 encoding}% + \valign{##\cr + \vfil\hbox to 0.07em{\dimen@\f@size\p@ + \math@fontsfalse + \fontsize{.7\dimen@}\z@\selectfont=\hss}\vfil\cr% + \hbox{C}\crcr + }% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tc@check@symbol} +% \begin{macro}{\tc@check@accent} +% These are two abbreviations that we use below to check symbols +% and accents in TS1. Only there to save some space, e.g., we can +% then write +%\begin{verbatim} +%\DeclareTextCommandDefault{\textcurrency}{\tc@check@symbol3\textcurrency} +%\end{verbatim} +% to ensure that |\textcurrency| is only typeset if the current +% font has a \texttt{TS1} subset id of less than 3. Otherwise +% |\tc@error| is called telling the user that for this font family +% |\textcurreny| is not available. +% \begin{macrocode} +\def\tc@check@symbol{\CheckEncodingSubset\UseTextSymbol{TS1}\tc@subst} +\def\tc@check@accent{\CheckEncodingSubset\UseTextAccent{TS1}\tc@error} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% We start with the commands that are ``safe'' and which can be +% unconditionally set up, first the accents\ldots +% \begin{macrocode} +\DeclareTextAccentDefault{\capitalcedilla}{TS1} +\DeclareTextAccentDefault{\capitalogonek}{TS1} +\DeclareTextAccentDefault{\capitalgrave}{TS1} +\DeclareTextAccentDefault{\capitalacute}{TS1} +\DeclareTextAccentDefault{\capitalcircumflex}{TS1} +\DeclareTextAccentDefault{\capitaltilde}{TS1} +\DeclareTextAccentDefault{\capitaldieresis}{TS1} +\DeclareTextAccentDefault{\capitalhungarumlaut}{TS1} +\DeclareTextAccentDefault{\capitalring}{TS1} +\DeclareTextAccentDefault{\capitalcaron}{TS1} +\DeclareTextAccentDefault{\capitalbreve}{TS1} +\DeclareTextAccentDefault{\capitalmacron}{TS1} +\DeclareTextAccentDefault{\capitaldotaccent}{TS1} +% \end{macrocode} +% \ldots and then the other glyphs. +% \changes{v1.9p}{1998/06/12}{Renamed \cs{textmacron} pr/2840} +% \begin{macrocode} +\DeclareTextSymbolDefault{\textcapitalcompwordmark}{TS1} +\DeclareTextSymbolDefault{\textascendercompwordmark}{TS1} +\DeclareTextSymbolDefault{\textquotestraightbase}{TS1} +\DeclareTextSymbolDefault{\textquotestraightdblbase}{TS1} +\DeclareTextSymbolDefault{\texttwelveudash}{TS1} +\DeclareTextSymbolDefault{\textthreequartersemdash}{TS1} +\DeclareTextSymbolDefault{\textdollar}{TS1} +\DeclareTextSymbolDefault{\textquotesingle}{TS1} +\DeclareTextSymbolDefault{\textasteriskcentered}{TS1} +\DeclareTextSymbolDefault{\textfractionsolidus}{TS1} +\DeclareTextSymbolDefault{\textminus}{TS1} +\DeclareTextSymbolDefault{\textlbrackdbl}{TS1} +\DeclareTextSymbolDefault{\textrbrackdbl}{TS1} +\DeclareTextSymbolDefault{\textasciigrave}{TS1} +\DeclareTextSymbolDefault{\texttildelow}{TS1} +\DeclareTextSymbolDefault{\textasciibreve}{TS1} +\DeclareTextSymbolDefault{\textasciicaron}{TS1} +\DeclareTextSymbolDefault{\textgravedbl}{TS1} +\DeclareTextSymbolDefault{\textacutedbl}{TS1} +\DeclareTextSymbolDefault{\textdagger}{TS1} +\DeclareTextSymbolDefault{\textdaggerdbl}{TS1} +\DeclareTextSymbolDefault{\textbardbl}{TS1} +\DeclareTextSymbolDefault{\textperthousand}{TS1} +\DeclareTextSymbolDefault{\textbullet}{TS1} +\DeclareTextSymbolDefault{\textcelsius}{TS1} +\DeclareTextSymbolDefault{\textflorin}{TS1} +\DeclareTextSymbolDefault{\texttrademark}{TS1} +\DeclareTextSymbolDefault{\textcent}{TS1} +\DeclareTextSymbolDefault{\textsterling}{TS1} +\DeclareTextSymbolDefault{\textyen}{TS1} +\DeclareTextSymbolDefault{\textbrokenbar}{TS1} +\DeclareTextSymbolDefault{\textsection}{TS1} +\DeclareTextSymbolDefault{\textasciidieresis}{TS1} +\DeclareTextSymbolDefault{\textcopyright}{TS1} +\DeclareTextSymbolDefault{\textordfeminine}{TS1} +\DeclareTextSymbolDefault{\textlnot}{TS1} +\DeclareTextSymbolDefault{\textregistered}{TS1} +\DeclareTextSymbolDefault{\textasciimacron}{TS1} +\DeclareTextSymbolDefault{\textdegree}{TS1} +\DeclareTextSymbolDefault{\textpm}{TS1} +\DeclareTextSymbolDefault{\texttwosuperior}{TS1} +\DeclareTextSymbolDefault{\textthreesuperior}{TS1} +\DeclareTextSymbolDefault{\textasciiacute}{TS1} +\DeclareTextSymbolDefault{\textmu}{TS1} +\DeclareTextSymbolDefault{\textparagraph}{TS1} +\DeclareTextSymbolDefault{\textperiodcentered}{TS1} +\DeclareTextSymbolDefault{\textonesuperior}{TS1} +\DeclareTextSymbolDefault{\textordmasculine}{TS1} +\DeclareTextSymbolDefault{\textonequarter}{TS1} +\DeclareTextSymbolDefault{\textonehalf}{TS1} +\DeclareTextSymbolDefault{\textthreequarters}{TS1} +\DeclareTextSymbolDefault{\texttimes}{TS1} +\DeclareTextSymbolDefault{\textdiv}{TS1} +% \end{macrocode} +% +% The |\texteuro| is only available for subsets with id 4 or +% less. Otherwise we fake the glyph using |\tc@fake@euro| +% \begin{macrocode} +\DeclareTextCommandDefault{\texteuro} + {\CheckEncodingSubset\UseTextSymbol{TS1}\tc@fake@euro5\texteuro} +% \end{macrocode} +% +% The |\textohm| is only available for subsets with id 3 or +% less. Otherwise we produce an error. +% \begin{macrocode} +\DeclareTextCommandDefault{\textohm}{\tc@check@symbol4\textohm} +% \end{macrocode} +% The |\textestimated| and |\textcurrency| are only provided for +% fonts with subset encoding with id 2 or less. +% \begin{macrocode} +\DeclareTextCommandDefault{\textestimated}{\tc@check@symbol3\textestimated} +\DeclareTextCommandDefault{\textcurrency}{\tc@check@symbol3\textcurrency} +% \end{macrocode} +% Nearly all of the remaining glyphs are provided only with fonts +% with id 1 or 0, i.e., are essentially complete. +% \begin{macrocode} +\DeclareTextCommandDefault{\capitaltie}{\tc@check@accent2\capitaltie} +\DeclareTextCommandDefault{\newtie}{\tc@check@accent2\newtie} +\DeclareTextCommandDefault{\capitalnewtie}{\tc@check@accent2\capitalnewtie} +\DeclareTextCommandDefault{\textleftarrow}{\tc@check@symbol2\textleftarrow} +\DeclareTextCommandDefault{\textrightarrow}{\tc@check@symbol2\textrightarrow} +\DeclareTextCommandDefault{\textblank}{\tc@check@symbol2\textblank} +\DeclareTextCommandDefault{\textdblhyphen}{\tc@check@symbol2\textdblhyphen} +\DeclareTextCommandDefault{\textzerooldstyle}{\tc@check@symbol2\textzerooldstyle} +\DeclareTextCommandDefault{\textoneoldstyle}{\tc@check@symbol2\textoneoldstyle} +\DeclareTextCommandDefault{\texttwooldstyle}{\tc@check@symbol2\texttwooldstyle} +\DeclareTextCommandDefault{\textthreeoldstyle}{\tc@check@symbol2\textthreeoldstyle} +\DeclareTextCommandDefault{\textfouroldstyle}{\tc@check@symbol2\textfouroldstyle} +\DeclareTextCommandDefault{\textfiveoldstyle}{\tc@check@symbol2\textfiveoldstyle} +\DeclareTextCommandDefault{\textsixoldstyle}{\tc@check@symbol2\textsixoldstyle} +\DeclareTextCommandDefault{\textsevenoldstyle}{\tc@check@symbol2\textsevenoldstyle} +\DeclareTextCommandDefault{\texteightoldstyle}{\tc@check@symbol2\texteightoldstyle} +\DeclareTextCommandDefault{\textnineoldstyle}{\tc@check@symbol2\textnineoldstyle} +\DeclareTextCommandDefault{\textlangle}{\tc@check@symbol2\textlangle} +\DeclareTextCommandDefault{\textrangle}{\tc@check@symbol2\textrangle} +\DeclareTextCommandDefault{\textmho}{\tc@check@symbol2\textmho} +\DeclareTextCommandDefault{\textbigcircle}{\tc@check@symbol2\textbigcircle} +\DeclareTextCommandDefault{\textuparrow}{\tc@check@symbol2\textuparrow} +\DeclareTextCommandDefault{\textdownarrow}{\tc@check@symbol2\textdownarrow} +\DeclareTextCommandDefault{\textborn}{\tc@check@symbol2\textborn} +\DeclareTextCommandDefault{\textdivorced}{\tc@check@symbol2\textdivorced} +\DeclareTextCommandDefault{\textdied}{\tc@check@symbol2\textdied} +\DeclareTextCommandDefault{\textleaf}{\tc@check@symbol2\textleaf} +\DeclareTextCommandDefault{\textmarried}{\tc@check@symbol2\textmarried} +\DeclareTextCommandDefault{\textmusicalnote}{\tc@check@symbol2\textmusicalnote} +\DeclareTextCommandDefault{\textdblhyphenchar}{\tc@check@symbol2\textdblhyphenchar} +\DeclareTextCommandDefault{\textdollaroldstyle}{\tc@check@symbol2\textdollaroldstyle} +\DeclareTextCommandDefault{\textcentoldstyle}{\tc@check@symbol2\textcentoldstyle} +\DeclareTextCommandDefault{\textcolonmonetary}{\tc@check@symbol2\textcolonmonetary} +\DeclareTextCommandDefault{\textwon}{\tc@check@symbol2\textwon} +\DeclareTextCommandDefault{\textnaira}{\tc@check@symbol2\textnaira} +\DeclareTextCommandDefault{\textguarani}{\tc@check@symbol2\textguarani} +\DeclareTextCommandDefault{\textpeso}{\tc@check@symbol2\textpeso} +\DeclareTextCommandDefault{\textlira}{\tc@check@symbol2\textlira} +\DeclareTextCommandDefault{\textrecipe}{\tc@check@symbol2\textrecipe} +\DeclareTextCommandDefault{\textinterrobang}{\tc@check@symbol2\textinterrobang} +\DeclareTextCommandDefault{\textinterrobangdown}{\tc@check@symbol2\textinterrobangdown} +\DeclareTextCommandDefault{\textdong}{\tc@check@symbol2\textdong} +\DeclareTextCommandDefault{\textpertenthousand}{\tc@check@symbol2\textpertenthousand} +\DeclareTextCommandDefault{\textpilcrow}{\tc@check@symbol2\textpilcrow} +\DeclareTextCommandDefault{\textbaht}{\tc@check@symbol2\textbaht} +\DeclareTextCommandDefault{\textnumero}{\tc@check@symbol2\textnumero} +\DeclareTextCommandDefault{\textdiscount}{\tc@check@symbol2\textdiscount} +\DeclareTextCommandDefault{\textopenbullet}{\tc@check@symbol2\textopenbullet} +\DeclareTextCommandDefault{\textservicemark}{\tc@check@symbol2\textservicemark} +\DeclareTextCommandDefault{\textlquill}{\tc@check@symbol2\textlquill} +\DeclareTextCommandDefault{\textrquill}{\tc@check@symbol2\textrquill} +\DeclareTextCommandDefault{\textcopyleft}{\tc@check@symbol2\textcopyleft} +\DeclareTextCommandDefault{\textcircledP}{\tc@check@symbol2\textcircledP} +\DeclareTextCommandDefault{\textreferencemark}{\tc@check@symbol2\textreferencemark} +\DeclareTextCommandDefault{\textsurd}{\tc@check@symbol2\textsurd} +% \end{macrocode} +% The |\textcircled| and |\t| are handled specially, unless the +% current font has a subset id of 0 (i.e. full \texttt{TS1}) we +% pick the symbols up from the the math font encodings, i.e., the +% third argument to |\CheckEncodingSubset| uses |\UseTextAccent| to +% get them from there. +% \begin{macrocode} +\DeclareTextCommandDefault{\textcircled} + {\CheckEncodingSubset\UseTextAccent{TS1}{\UseTextAccent{OMS}}1\textcircled} +\DeclareTextCommandDefault{\t} + {\CheckEncodingSubset\UseTextAccent{TS1}{\UseTextAccent{OML}}1\t} +% \end{macrocode} + + +% +% Finally input the encoding-specific definitions for +% \texttt{TS1} thus making the top-level definitions +% optimised for this encoding (and not for the default +% encoding, see section~\ref{sec:orderofdecls}). +% \changes{v1.9o}{1998/03/20}{Load decls after defaults for speed.} +% \begin{macrocode} +\input{ts1enc.def} +% \end{macrocode} +% Now having the new glyphs available we also want to make sure +% that they are used. For most cases this will automatically happen +% but for some glyphs there are inferior definitions already known +% to \LaTeX{} which will prevent the usage of the \texttt{TS1} +% versions (see section~\ref{sec:removeencspec} above). So we better +% get rid of them: +% \changes{v1.9o}{1998/03/20}{Added various \cs{UndeclareTextCommand} +% declarations for pr/2783} +% \begin{macrocode} +\UndeclareTextCommand{\textsterling}{OT1} +\UndeclareTextCommand{\textdollar} {OT1} +% \end{macrocode} +% Similar declarations should probably be made for other encodings +% like \texttt{OT4} if they are in use. +% \begin{macrocode} +%\UndeclareTextCommand{\textsterling}{OT4} +%\UndeclareTextCommand{\textdollar} {OT4} +% \end{macrocode} +% From the \texttt{T1} encoding there are two candidates for removal: +% \textperthousand{} and \textpertenthousand{} since these are both +% constructed from \% followed by a tiny +% `{\fontencoding{T1}\selectfont \char 24}' +% rather than being a single glyph. The problem with this +% approach is that in PostScript fonts this small zero is usually not +% available resulting in \%\rule{3pt}{3pt} rather than +% \textperthousand{} while the real glyph (at least for +% |\textperthousand|) is available in the PostScript version of +% \texttt{TS1}. So for the moment we compromise by removing the +% \texttt{T1} declaration for |\textperthousand| but keeping the one +% for |\textpertenthousand|. This will have the effect that with +% Computer Modern fonts everything will come out (although +% \textperthousand{} and \textpertenthousand{} are not taken from the +% same physical font) and with PostScript fonts \textperthousand{} +% will come out correctly while \textpertenthousand{} will most +% likely look like \%\rule{6pt}{3pt} --- which is probably an +% improvement over just getting a single `\rule{3pt}{3pt}' to +% indicate a completely missing glyph, which would happen if we +% also `undeclared' |\textpertenthousand|. +% \begin{macrocode} +\UndeclareTextCommand{\textperthousand}{T1} +%\UndeclareTextCommand{\textpertenthousand}{T1} +% \end{macrocode} +% +% +% \subsubsection{Supporting oldstyle digits} +% +% \begin{macrocode} +\DeclareRobustCommand\oldstylenums[1]{% + \begingroup + \ifmmode + \mathgroup\symletters #1% + \else + \CheckEncodingSubset\@use@text@encoding{TS1}% + {\PackageWarning{textcomp}% + {Oldstyle digits unavailable for + family \f@family.\MessageBreak + Lining digits used instead}}% + \tw@{#1}% + \fi + \endgroup +} +% \end{macrocode} +% +% \subsubsection{Subset encoding defaults} +% +% For many font families commonly used in the \TeX{} world we +% provide the subset encoding data here. Users can add additional +% font families in the file \texttt{textcomp.cfg} if they own other +% fonts. +% +% However, if the option ``forced'' was given then all subset +% encoding specifications are ignored, so there is no point in +% setting any of them up: +% \begin{macrocode} +\iftc@forced \else +% \end{macrocode} +% +% Computer modern based fonts (e.g., CM, CM-Bright, Concrete): +% \begin{macrocode} +\DeclareEncodingSubset{TS1}{cmr} {0} +\DeclareEncodingSubset{TS1}{cmss} {0} +\DeclareEncodingSubset{TS1}{cmtt} {0} +\DeclareEncodingSubset{TS1}{cmvtt} {0} +\DeclareEncodingSubset{TS1}{cmbr} {0} +\DeclareEncodingSubset{TS1}{cmtl} {0} +\DeclareEncodingSubset{TS1}{ccr} {0} +% \end{macrocode} +% +% PSNFSS fonts: +% \begin{macrocode} +\DeclareEncodingSubset{TS1}{ptm} {4} +\DeclareEncodingSubset{TS1}{pcr} {4} +\DeclareEncodingSubset{TS1}{phv} {4} +\DeclareEncodingSubset{TS1}{ppl} {3} +\DeclareEncodingSubset{TS1}{pag} {4} +\DeclareEncodingSubset{TS1}{pbk} {4} +\DeclareEncodingSubset{TS1}{pnc} {4} +\DeclareEncodingSubset{TS1}{pzc} {4} +\DeclareEncodingSubset{TS1}{bch} {4} +\DeclareEncodingSubset{TS1}{put} {5} +% \end{macrocode} +% +% Other CTAN fonts (probably not complete): +% \begin{macrocode} +\DeclareEncodingSubset{TS1}{uag} {5} +\DeclareEncodingSubset{TS1}{ugq} {5} +\DeclareEncodingSubset{TS1}{ul8} {4} +\DeclareEncodingSubset{TS1}{ul9} {4} % (LuxiSans, one day) +\DeclareEncodingSubset{TS1}{augie} {5} +\DeclareEncodingSubset{TS1}{dayrom} {3} +\DeclareEncodingSubset{TS1}{dayroms} {3} +\DeclareEncodingSubset{TS1}{pxr} {0} +\DeclareEncodingSubset{TS1}{pxss} {0} +\DeclareEncodingSubset{TS1}{pxtt} {0} +\DeclareEncodingSubset{TS1}{txr} {0} +\DeclareEncodingSubset{TS1}{txss} {0} +\DeclareEncodingSubset{TS1}{txtt} {0} +% \end{macrocode} +% +% Fourier-GUTenberg: +% \begin{macrocode} +\DeclareEncodingSubset{TS1}{futs} {4} +\DeclareEncodingSubset{TS1}{futx} {4} +\DeclareEncodingSubset{TS1}{futj} {4} +% \end{macrocode} +% +% Y\&Y's Lucida Bright +% \begin{macrocode} +\DeclareEncodingSubset{TS1}{hlh} {3} +\DeclareEncodingSubset{TS1}{hls} {3} +\DeclareEncodingSubset{TS1}{hlst} {3} +% \end{macrocode} +% The remaining settings for Lucida are conservative: the following +% fonts contain the |\textohm| character but not the |\texteuro|, +% i.e., belong to neither subset~4 nor subset~3. If you want to +% use the |\textohm| with these fonts copy these definition to +% \texttt{textcomp.cfg} and change the subset to~3. However in that +% case make sure that you do not use the |\texteuro|. +% \begin{macrocode} +\DeclareEncodingSubset{TS1}{hlct} {5} +\DeclareEncodingSubset{TS1}{hlx} {5} +\DeclareEncodingSubset{TS1}{hlce} {5} +\DeclareEncodingSubset{TS1}{hlcn} {5} +\DeclareEncodingSubset{TS1}{hlcw} {5} +\DeclareEncodingSubset{TS1}{hlcf} {5} +% \end{macrocode} +% +% Other commercial families\ldots +% \begin{macrocode} +\DeclareEncodingSubset{TS1}{pplx} {3} +\DeclareEncodingSubset{TS1}{pplj} {3} +\DeclareEncodingSubset{TS1}{ptmx} {4} +\DeclareEncodingSubset{TS1}{ptmj} {4} +% \end{macrocode} +% +% If the file \texttt{textcomp.cfg} exists it will be loaded at +% this point. This allows to define further subset encodings for +% font families not covered by default. +% +% \begin{macrocode} +\InputIfFileExists{textcomp.cfg} + {\PackageInfo{textcomp}{Local configuration file used}}{} +% \end{macrocode} +% +% \begin{macrocode} +\fi +%</TS1sty> +% \end{macrocode} +% +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/base/ltoutenc.ins b/Master/texmf-dist/source/latex/base/ltoutenc.ins new file mode 100644 index 00000000000..8212686c492 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltoutenc.ins @@ -0,0 +1,97 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\generate{ + \file{ot1enc.def}{ + \from{ltoutenc.dtx}{OT1}} + \file{omsenc.def}{ + \from{ltoutenc.dtx}{OMS}} + \file{omlenc.def}{ + \from{ltoutenc.dtx}{OML}} + \file{t1enc.def}{ + \from{ltoutenc.dtx}{T1}} + \file{ot4enc.def}{ + \from{ltoutenc.dtx}{OT4}} + \file{ts1enc.def}{ + \from{ltoutenc.dtx}{TS1}} + \file{textcomp.sty}{ + \from{ltoutenc.dtx}{TS1sty}} + \file{fontenc.sty}{ + \from{ltoutenc.dtx}{package}} +} + +\endbatchfile + + diff --git a/Master/texmf-dist/source/latex/base/ltoutput.dtx b/Master/texmf-dist/source/latex/base/ltoutput.dtx new file mode 100644 index 00000000000..d7eee068854 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltoutput.dtx @@ -0,0 +1,3963 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%%% From File: ltoutput.dtx +%<def1>\ProvidesFile{autoout1.sty} +%<flafter>\ProvidesPackage{flafter} +%<def1,flafter> [2000/07/23 v1.2i +%<def1> Output Routine autoload file] +%<flafter> Standard LaTeX floats after reference (FMi)] +% +%<*driver> +% \fi +\ProvidesFile{ltoutput.dtx} + [2004/02/07 v1.2l LaTeX Kernel (Output Routine)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltoutput.dtx} +\title{\filename} +\date{\filedate} +\author{Leslie Lamport, Frank Mittelbach, Chris Rowley} +\begin{document} +\maketitle +\DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{2764} +% +% +% \iffalse +% LATEX VERSION 2e +% Copyright (C) 1992 by Leslie Lamport +% Copyright (C) 1994-2000 by Leslie Lamport, LaTeX3 project +% +% LaTeX 2e kernel file for the output routine. +% +% Part of this file is the latest (not greatest, it still +% deserves its name) version of kludge.sty. +% +% It also contains a few enhancements and many changes (corrections +% and tidyings) to the float mechanism and other parts of the output +% routine. +% +% The tracing in the file at present is mainly to help in testing the +% code but it may well be developed into a full float tracing +% package one day. +% +% ============================ +% \fi +% +% \changes{v1.1p}{1995/08/25}{Support autoloading feature (FMi).} +% \task{CAR}{Update documentation.} +% \changes{v1.0k}{1994/02/08}{Documentation and tasks tidied.} +% \changes{v1.0l}{1994/03/15}{Driver added and further tidying.} +% \changes{v1.0l}{1994/03/15}{Some boxmaxdepth settings removed.} +% \changes{v1.0l}{1994/03/15}{Added some warnings when page gets full of +% top floats.} +% \changes{v1.0l}{1994/03/15}{Removed duplicated code and corrected +% docstrip options.} +% \changes{v1.0m}{1994/04/24}{Removed some long lines and other +% aesthetic changes.} +% \changes{v1.0m}{1994/04/24}{Corrected unverbed commands in +% documentation.} +% \changes{v1.0m}{1994/04/24}{Changed \cs{@normalsize} to +% \cs{normalsize}.} +% \changes{v1.0m}{1994/04/24}{Warning messages changed/corrected.} +% \changes{v1.0n}{1994/04/30}{Added \cs{col@number}.} +% \changes{v1.0n}{1994/04/30}{Fixed bug from \cs{dblfigrule} with +% \cs{@topnewpage}.} +% \changes{v1.0n}{1994/04/30}{Documentation tidied.} +% \changes{v1.0n}{1994/04/30}{\cs{@activechar@warning} changed to an +% info message.} +% \changes{v1.0n}{1994/04/30}{Full of floats action improved.} +% \changes{v1.0n}{1994/04/30}{Empty column action added.} +% \changes{v1.0o}{1994/05/02}{Code of \cs{@resethfps} shortened.} +% \changes{v1.0p}{1994/05/12}{\cs{normalcolor}added in various +% places (DPC).} +% \changes{v1.0q}{1994/05/16}{Changed setting of accents (FMi).} +% \changes{v1.0s}{1994/05/20}{Added setting of \cs{protect} +% during \cs{shipout}.} +% \changes{v1.0t}{1994/05/22}{Changed warnings and infos to +% new commands.} +% \changes{v1.0u}{1994/05/23}{Added \cs{MessageBreak}.} +% \changes{v1.0u}{1994/05/23}{Changed resetting of \cs{protect} after +% shipout.} +% \changes{v1.0v}{1994/05/25}{Extra documentation.} +% \changes{v1.0w}{1994/06/01}{Tidied up typesetting.} +% +% \changes{v1.1f}{1994/11/14}{Removed old definition of \cs{@testfp}.} +% \changes{v1.1h}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}.} +% \changes{v1.1m}{1995/05/07}{Use \cs{hb@xt@}.} +% +% \StopEventually{} +% +% \def \ie {i.e.~} +% \def \eg {e.g.~} +% +% \section{Output Routine} +% +% \subsection{Floats} +% +% The `2ekernel' code ensures that a |\usepackage{autoout1}| is +% essentially ignored if a `full' format is being used that has +% the autoload file mode already in the format. +% \begin{macrocode} +%<defx>\begingroup +%<defx>\makeatletter +%<defx>\nfss@catcodes +%<2ekernel>\expandafter\let\csname ver@autoout1.sty\endcsname\fmtversion +% \end{macrocode} +% +% +% \begin{oldcomments} +% \begin{macrocode} +%<*2ekernel|autoload> +\message{output,} +% \end{macrocode} +% **************************************** +% * OUTPUT * +% **************************************** +% +% +% PAGE LAYOUT PARAMETERS +% +% \topmargin : Extra space added to top of page. +% @twoside : boolean. T if two-sided printing +% \oddsidemargin : IF @twoside = T +% THEN extra space added to left of odd-numbered +% pages. +% ELSE extra space added to left of all pages. +% \evensidemargin : IF @twoside = T +% THEN extra space added to left of even-numbered +% pages. +% \headheight : height of head +% \headsep : separation between head and text +% \footskip : distance separation between baseline of last +% line of text and baseline of foot. +% Note difference between \footSKIP and \headSEP. +% \textheight : height of text on page, excluding head and foot +% \textwidth : width of printing on page +% \columnsep : IF @twocolumn = T +% THEN width of space between columns +% \columnseprule : IF @twocolumn = T +% THEN width of rule between columns (0 if none). +% \columnwidth : IF @twocolumn = T +% THEN (\textwidth - \columnsep)/2 +% ELSE \textwidth +% It is set by the \twocolumn and +% \onecolumn commands. +% \@textbottom : Command executed at bottom of vbox holding text of +% page (including figures). The \raggedbottom +% command almost \let's this to \vfil (actually sets +% it to \vskip \z@ plus.0001fil). +% Should have depth 0pt. +% +% \@texttop : Command executed at top of vbox holding text of +% page (including figures). Used by letter style; +% can also be used to produce centered pages. +% Let to \relax by \raggedbottom and \flushbottom. +% +% Page layout must initialize \@colht and \@colroom to \textheight. +% +% PAGE STYLE PARAMETERS: +% +% \floatsep : Space left between floats. +% \textfloatsep : Space between last top float or first bottom float +% and the text. +% \topfigrule : Command to place rule (or whatever) between floats +% at top of page and text. Executed in inner +% vertical mode right before the \textfloatsep skip +% separating the floats from the text. Must occupy +% zero vertical space. (See \footnoterule.) +% \botfigrule : Same as \topfigrule, but put after the +% \textfloatsep skip separating text from the +% floats at bottom of page. +% \intextsep : Space left on top and bottom of an in-text float. +% \dblfloatsep : Space between double-column floats. +% \dbltextfloatsep : Space between top double-column floats +% and text. +% \dblfigrule : Similar to \topfigrule, but for double-column +% floats. +% \@fptop : Glue to go at top of float column -- must be 0pt + +% stretch +% \@fpsep : Glue to go between floats in a float column. +% \@fpbot : Glue to go at bottom of float column +% -- must be 0pt + +% stretch +% \@dblfptop, \@dblfpsep, \@dblfpbot +% : Analogous for double-column float page in +% two-column format. +% +% FOOTNOTES: As in PLAIN, footnotes use \insert\footins. +% +% PAGE LAYOUT SWITCHES AND MACROS +% +% @twocolumn : Boolean. T if two columns per page globally. +% +% PAGE STYLE MACROS AND SWITCHES +% +% \@oddhead : IF @twoside = T +% THEN macro to generate head of odd-numbered +% pages. +% ELSE macro to generate head of all pages. +% \@evenhead : IF @twoside = T +% THEN macro to generate head of even-numbered +% pages. +% \@oddfoot : IF @twoside = T +% THEN macro to generate foot of odd-numbered +% pages. +% ELSE macro to generate foot of all pages. +% \@evenfoot : IF @twoside = T +% THEN macro to generate foot of even-numbered +% pages. +% @specialpage : boolean. T if current page is to have a special +% format. +% \@specialstyle : If its value is foo then +% IF @specialpage = T +% THEN the command \ps@foo is executed to +% temporarily reset the page style parameters +% before composing the current page. +% This command should execute only \def's and +% \edef's, making only local definitions. +% +% FLOAT PLACEMENT PARAMETERS +% +% The following parameters are set by the macro \@floatplacement. +% When \@floatplacement is called, +% \@colht is the height of the page or column being built. I.e.: +% * For single-column page it equals \textheight. +% * For double-column page it equals \textheight - height +% of double-column floats on page. +% Note that some are set globally and some locally: +% \@topnum :=G Maximum number of floats allowed on the top of a +% column. +% \@toproom :=G Maximum amount of top of column devoted to floats-- +% excluding \textfloatsep separation below the floats +% and \floatsep separation between them. For +% two-column output, should be computed as a function +% of \@colht. +% \@botnum, \@botroom +% : Analogous to above. +% \@colnum :=G Maximum number of floats allowed in a column, +% including in-text floats. +% \@textmin :=L Minimum amount of text (excluding footnotes) that +% must appear on a text page. +% %% 27 Sep 85 : made local to +% %% \@addtocurcol and \@addtonextcol +% It is now also used locally in processing double +% floats. +% \@fpmin :=L Minimum height of floats in a float column. +% +% The macro \@dblfloatplacement sets the following parameters. +% \@dbltopnum :=G Maximum number of double-column floats allowed at +% the top of a two-column page. +% \@dbltoproom :=G Maximum height of double-column floats allowed at +% top of two-column page. +% \@fpmin :=L Minimum height of floats in a float column. +% It should also perform the following local assignments where necessary +% -- i.e., where the new value differs from the old one: +% \@fptop :=L \@dblfptop +% \@fpsep :=L \@dblfpsep +% \@fpbot :=L \@dblfpbot +% +% OUTPUT ROUTINE VARIABLES +% +% \@colht : The total height of the current column. In single column +% style, it equals \textheight. In two-column style, it is +% \textheight minus the height of the double-column floats +% on the current page. MUST BE INITIALIZED TO \textheight. +% +% \@colroom : The height available in the current column for text and +% footnotes. It equals \@colht minus the height of all +% floats committed to the top and bottom of the current +% column. +% +% \@textfloatsheight : The total height of in-text floats on the +% current page. +% +% \footins : Footnote insertion number. +% +% \@maxdepth : Saved value of TeX's \maxdepth. Must be set +% when any routine sets \maxdepth. +% +% CALLING THE OUTPUT ROUTINE +% -------------------------- +% +% The output routine is called either by TeX's normal page-breaking +% mechanism, or by a macro putting a penalty < or = -10000 in the output +% list. In the latter case, the penalty indicates why the output +% routine was called, using the following code. +% +% penalty reason +% ------- ------ +% -10000 \pagebreak +% \newpage +% -10001 \clearpage (\penalty -10000 \vbox{} \penalty -10001) +% -10002 float insertion, called from horizontal mode +% -10003 float insertion, called from vertical mode. +% -10004 float insertion. +% +% Note: A float or marginpar puts the following sequence in the output +% list: (i) a penalty of -10004, +% (ii) a null \vbox +% (iii) a penalty of -10002 or -10003. +% This solves two special problems: +% 1. If the float comes right after a \newpage or \clearpage, +% then the first penalty is ignored, but the second one +% invokes the output routine. +% 2. If there is a split footnote on the page, the second 'page' +% puts out the rest of the footnote. +% +% THE OUTPUT ROUTINE +% ------------------ +% +% FUNCTIONS USED IN THE OUTPUT ROUTINE: +% +% \@outputpage : Produces an output page with the contents of box +% \@outputbox as the text part. +% Also sets \@colht :=G \textheight. +% The page style is determined as follows. +% IF @thispagestyle = true +% THEN use \thispagestyle style +% ELSE use ordinary page style. +% +% \@tryfcolumn\FLIST : Tries to form a float column composed of floats +% from \FLIST (if nonempty) with the following parameters: +% \@colht : height of box +% \@fpmin : minimum height of floats in the box +% \@fpsep : interfloat space +% \@fptop : glue at top of box +% \@fpbot : glue at bottom of box. +% If it succeeds, then it does the following: +% * \@outputbox :=L the composed float box. +% * @fcolmade :=G true +% * \FLIST :=G \FLIST - floats put in box +% * \@freelist :=G \@freelist + floats put in box +% If it fails, then: +% * @fcolmade :=G false +% NOTE: BIT MUST BE A SINGLE TOKEN! +% +% \@makefcolumn \FLIST : Same as \@tryfcolumn except that it +% fails to make a float column only if \FLIST is empty. +% Otherwise, it makes a float column containing at least +% the first box in \FLIST, disregarding \@fpmin. +% +% \@startcolumn : +% Calls \@tryfcolumn\@deferlist. If \@tryfcolumn returns with +% (globally set) @fcolmade = false, then: +% * Globally sets \@toplist and \@botlist to floats +% from \@deferlist to go at top and bottom of column, +% deleting them from \@deferlist. It does +% this using \@colht as the total height, the page +% style parameters \@floatsep and \@textfloatsep, and +% the float placement parameters \@topnum, \@toproom, +% \@botnum, \@botroom, \@colnum and \textfraction. +% * Globally sets \@colroom to \@colht minus the height +% of the added floats. +% +% \@startdblcolumn : +% Calls \@tryfcolumn\@dbldeferlist{8}. If \@tryfcolumn returns +% with (globally set) @fcolmade = false, then: +% * Globally sets \@dbltoplist to floats from +% \@dbldeferlist to go at top and bottom of column, +% deleting them from \@dbldeferlist. +% It does this using \textheight as the +% total height, and the parameters \@dblfloatsep, etc. +% * Globally sets \@colht to \textheight minus the height +% of the added floats. +% +% \@combinefloats : Combines the text from box +% \@outputbox with the floats from \@toplist and \@botlist, +% putting the new box in \@outputbox. It uses \floatsep +% and \textfloatsep for the appropriate separations. +% It puts the elements of \TOPLIST and \BOTLIST onto +% \@freelist, and makes those lists null. +% +% \@makecol : Makes the contents of \box255 plus the accumulated +% footnotes, plus the floats in \@toplist and \@botlist, +% into a single column of height \@colht (unless the page +% height has been locally changed), which it puts +% into box \@outputbox. It puts boxes in \@midlist back +% onto \@freelist and restores \maxdepth. +% +% \@opcol : Outputs a column whose text is in box \@outputbox +% If @twocolumn = false, then it calls \@outputpage, +% sets \@colht :=G \textheight, and calls \@floatplacement. +% +% If @twocolumn = true, then: +% If @firstcolumn = true, then it puts box \@outputbox +% into \@leftcolumn and sets @firstcolumn :=G false. +% +% If @firstcolumn = false, then it puts out the current +% two-column page, any possible two-column float pages, +% and determines \@dbltoplist for the next page. +% +% +% +% USER COMMANDS THAT CALL OR AFFECT THE OUTPUT ROUTINE +% ---------------------------------------------------- +% +% \newpage == BEGIN \par\vfil\penalty -10000 END +% +% \clearpage == BEGIN \newpage +% \write -1{} % Part of hack to make sure no +% \vbox{} % \write's get lost. +% \penalty -10001 +% END +% +% \cleardoublepage == BEGIN \clearpage +% if @twoside = true and c@page is even +% then \hbox{} \newpage fi +% END +% +% +% \twocolumn[BOX] : starts a new page, changing to twocolumn setting +% and puts BOX in a parbox of width \textwidth across the top. +% Useful for full-width titles for double-column pages. +% SURPRISE: The stretch from \@dbltextfloatsep will be inserted +% between the BOX and the top of the two columns. +% +% +% FLOAT-HANDLING MECHANISMS +% ------------------------- +% +% The float environment obtains an insertion number B from the +% \@freelist (see below for a description of list manipulation), puts +% the float into box B and sets \count B to a FLOAT SPECIFIER. For +% a normal (not double-column) float, it then causes a page break +% in one of the following two ways: +% - In outer hmode: \vadjust{\penalty -10002} +% - In vmode : \penalty -10003. +% For a double-column float, it puts B onto the \@dbldeferlist. +% The float specifier has two components: +% * A PLACEMENT SPECIFICATION, describing where the float may +% be placed. +% * A TYPE, which is a power of two--e.g., figures might be +% type 1 floats, tables type 2 floats, programs type 4 floats, etc. +% The float specifier is encoded as follows, where bit 0 is the least +% significant bit. +% +% Bit Meaning +% --- ------- +% 0 1 iff the float may go where it appears in the text. +% 1 1 iff the float may go on the top of a page. +% 2 1 iff the float may go on the bottom of a page. +% 3 1 iff the float may go on a float page. +% 4 1 unless the PLACEMENT incluses a ! +% 5 1 iff a type 1 float +% 6 1 iff a type 2 float +% etc. +% +% A negative float specifier is used to indicate a marginal note. +% +% MACROS AND DATA STRUCTURES FOR PROCESSING FLOATS +% ------------------------------------------------ +% +% A FLOAT LIST consisting of the floats in boxes \boxa ... \boxN has +% the form: +% \@elt \boxa ... \@elt \boxN +% where \boxI is defined by +% \newinsert\boxI +% Normally, \@elt is \let to \relax. A test can be performed on the +% entire float list by locally \def'ing \@elt appropriately and +% executing the list. +% This is a lot more efficient than looping through the list. +% +% The following macros are used for manipulating float lists. +% +% \@next \CS \LIST {NONEMPTY}{EMPTY} == %% NOTE: ASSUME \@elt = \relax +% BEGIN assume that \LIST == \@elt \B1 ... \@elt \Bn +% if n = 0 +% then EMPTY +% else \CS :=L \B1 +% \LIST :=G \@elt \B2 ... \@elt \Bn +% NONEMPTY +% fi +% END +% +% +% \@bitor\NUM\LIST : Globally sets switch @test to the disjunction for +% all I of bit log2 \NUM of the float specifiers of all the +% floats in \LIST. +% I.e., @test is set to true iff there is at least one +% float in \LIST having bit log2 \NUM of its float specifier +% equal to 1. +% +% Note: log2 [(\count I)/32] is the bit number corresponding to the +% type of float I. To see if there is any float in \LIST having +% the same type as float I, you run \@bitor with +% \NUM = [(\count I)/32] * 32. +% +% \@bitor\NUM\LIST == +% BEGIN +% @test :=G false +% { \@elt \CTR == if \NUM <> 0 then +% if \count\CTR / \NUM is odd +% then @test := true fi fi +% \LIST +% } +% END +% +% +% \@cons\LIST\NUM : Globally sets \LIST := \LIST * \@elt \NUM +% +% \@cons\LIST\NUM == +% BEGIN { \@elt == \relax +% \LIST :=G \LIST \@elt \NUM +% } +% +% BOX LISTS FOR FLOAT-PLACEMENT ALGORITHMS +% +% \@freelist : List of empty boxes for placing new floats. +% \@toplist : List of floats to go at top of current column. +% \@midlist : List of floats in middle of current column. +% \@botlist : List of floats to go at bottom of current column. +% \@deferlist : List of floats to go after current column. +% \@dbltoplist : List of double-col. floats to go at top of current +% page. +% \@dbldeferlist : List of double-column floats to go on subsequent +% pages. +% +% FLOAT-PLACEMENT ALGORITHMS +% +% +% \@addtobot : Tries to put insert \@currbox on \@botlist. +% Called only when: +% * \ht BOX < \@colroom +% * type of \@currbox not on \@deferlist +% * \@colnum > 0 +% * @insert = false +% If it succeeds, then: +% * sets @insert true +% * decrements \@botroom by \ht BOX +% * decrements \@botnum and \@colnum by 1 +% * decrements \@colroom by \ht BOX + either \floatsep +% or \textfloatsep, as appropriate. +% * sets \maxdepth to 0pt +% +% \@addtotoporbot : Tries to put insert \@currbox on \@toplist or +% \@botlist. +% Called only under same conditions as \@addtobot. +% If it succeeds, then: +% * sets @insert true +% * decrements \@toproom or \@botroom by \ht BOX +% * decrements \@colnum and either \@topnum or +% \@botnum by 1 +% * decrements \@colroom by \ht BOX + \floatsep +% or \textfloatsep, as appropriate. +% +% \@addtocurcol : Tries to add \@currbox to current column, setting +% @insert true if it succeeds, false otherwise. +% It will add \@currbox to top only if bit 0 of +% \count \@currbox is 0, and to the bottom only if +% bit 0 = 0 or an earlier float of the same type is +% put on the bottom. +% If the float is put in the text, then +% \penalty\interlinepenalty is put +% right after the float, before the following \vskip, +% and \outputpenalty :=L 0. +% +% \@addtonextcol : Tries to add \@currbox to the next column, setting +% @insert true if it succeeds, false otherwise. +% +% \@addtodblcol : Tries to add \@currbox to the next double-column page, +% adding it to \@dbltoplist if it succeeds and +% \@dbldeferlist if it fails. +% +% +% \@addmarginpar == +% BEGIN +% if \@currlist nonempty +% then remove \@marbox from \@currlist +% add \@marbox and \@currbox to \@freelist +% %% NOTE: \@currbox = left box +% else LaTeX error: ? %% shouldn't happen +% fi +% \@tempcnta := 1 %% 1 = right, -1 = left +% if @twocolumn = true +% then if @firstcolumn = true +% then \@tempcnta := -1 +% fi +% else if @mparswitch = true +% then if count0 odd +% else \@tempcnta := -1 +% fi +% fi +% if @reversemargin = true +% then \@tempcnta := -\@tempcnta +% fi +% fi +% if \@tempcnta < 0 then \box\@marbox :=G \box\@currbox +% fi +% \@tempdima :=L maximum(\@mparbottom - \@pageht +% + ht of \@marbox, 0) +% if \@tempdima > 0 then LaTeX warning: 'marginpar moved' fi +% \@mparbottom :=G \@pageht + \@tempdima + depth of \@marbox +% + \marginparpush +% \@tempdima :=L \@tempdima - ht of \@marbox +% \box\@marbox :=G \box\@currbox +% \vbox { \vskip \@tempdima +% \box\@marbox +% } +% height of \@marbox :=G depth of \@marbox :=G 0 +% \kern -\@pagedp +% \nointerlineskip +% \hbox{ if @tempcnta > 0 then \hskip \columnwidth +% \hskip \marginparsep +% else \hskip -\marginparsep +% \hskip -\marginparwidth +% fi +% \box\@marbox \hss +% } +% \nobreak +% \nointerlineskip +% \hbox{\vrule height 0 width 0 depth \@pagedp} +% END +% +% Floats and marginpars add a lot of dead cycles. +% \begin{macrocode} +\maxdeadcycles = 100 +% \end{macrocode} +% +% \begin{macrocode} +\let\@elt\relax +% \end{macrocode} +% +% \begin{macrocode} +\def\@next#1#2#3#4{\ifx#2\@empty #4\else + \expandafter\@xnext #2\@@#1#2#3\fi} +% \end{macrocode} +% +% \begin{macrocode} +\def\@xnext \@elt #1#2\@@#3#4{\def#3{#1}\gdef#4{#2}} +% \end{macrocode} +% +% \changes{v1.1v}{1996/07/26}{put \cs{global} into definition} +% \begin{macrocode} +\def\@testfalse{\global\let\if@test\iffalse} +\def\@testtrue {\global\let\if@test\iftrue} +\@testfalse +% \end{macrocode} +% +% \changes{v1.1v}{1996/07/26}{remove \cs{global} before \cs{@test...}} +% \begin{macrocode} +\def\@bitor#1#2{\@testfalse {\let\@elt\@xbitor + \@tempcnta #1\relax #2}} +% \end{macrocode} +% RmS 91/11/22: Added test for |\count#1 = 0|. +% Suggested by Chris Rowley. +% +% +% \changes{v1.1v}{1996/07/26}{remove \cs{global} before \cs{@test...}} +% \begin{macrocode} +\def\@xbitor #1{\@tempcntb \count#1 + \ifnum \@tempcnta =\z@ + \else + \divide\@tempcntb\@tempcnta + \ifodd\@tempcntb \@testtrue\fi + \fi} +% \end{macrocode} +% +% DEFINITION OF FLOAT BOXES: +% \begin{macrocode} +\newinsert\bx@A +\newinsert\bx@B +\newinsert\bx@C +\newinsert\bx@D +\newinsert\bx@E +\newinsert\bx@F +\newinsert\bx@G +\newinsert\bx@H +\newinsert\bx@I +\newinsert\bx@J +\newinsert\bx@K +\newinsert\bx@L +\newinsert\bx@M +\newinsert\bx@N +\newinsert\bx@O +\newinsert\bx@P +\newinsert\bx@Q +\newinsert\bx@R +% \end{macrocode} +% +% \begin{macrocode} +\gdef\@freelist{\@elt\bx@A\@elt\bx@B\@elt\bx@C\@elt\bx@D\@elt\bx@E + \@elt\bx@F\@elt\bx@G\@elt\bx@H\@elt\bx@I\@elt\bx@J + \@elt\bx@K\@elt\bx@L\@elt\bx@M\@elt\bx@N + \@elt\bx@O\@elt\bx@P\@elt\bx@Q\@elt\bx@R} +% \end{macrocode} +% +% \begin{macrocode} +\gdef\@toplist{} +\gdef\@botlist{} +\gdef\@midlist{} +\gdef\@currlist{} +\gdef\@deferlist{} +\gdef\@dbltoplist{} +\gdef\@dbldeferlist{} +% \end{macrocode} +% +% PAGE LAYOUT PARAMETERS +% \begin{macrocode} +\newdimen\topmargin +\newdimen\oddsidemargin +\newdimen\evensidemargin +\let\@themargin=\oddsidemargin +\newdimen\headheight +\newdimen\headsep +\newdimen\footskip +\newdimen\textheight +\newdimen\textwidth +\newdimen\columnwidth +\newdimen\columnsep +\newdimen\columnseprule +\newdimen\marginparwidth +\newdimen\marginparsep +\newdimen\marginparpush +% \end{macrocode} +% \end{oldcomments} +% +% \begin{macro}{\AtBeginDvi} +% \changes{v1.1c}{1994/11/05} +% {Added macro} +% \begin{macro}{\@begindvibox} +% \changes{v1.1c}{1994/11/05} +% {Added macro} +% \changes{v1.1f}{1994/11/14}{Use normal box register: why a box?} +% \changes{v1.1l}{1995/04/24}{Add \cs{vbox} latex/1392} +% +% We use a box register in which to put +% stuff that must appear before anything else in the +% |.dvi| file. +% +% The stuff in the box should not add any typeset material to the +% page when it is unboxed. +% \begin{macrocode} +\newbox\@begindvibox +\def \AtBeginDvi #1{% + \global \setbox \@begindvibox + \vbox{\unvbox \@begindvibox #1}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@maxdepth} +% This is not the right place to set this; it needs to be set in a +% class/style file when |\maxdepth| is set. +% +% Also, many settings to |\maxdepth| should be to |\@maxdepth|, +% probably? +% \task{All}{Sort out maxdepth: both should be set in the class files.} +% \begin{macrocode} +\newdimen\@maxdepth +\@maxdepth = \maxdepth +% \end{macrocode} +% \end{macro} +% \begin{macro}{\paperheight} +% \changes{v0.1a}{1993/11/23}{Register added} +% \begin{macro}{\paperwidth} +% \changes{v0.1a}{1993/11/23}{Register added} +% New |\paper|\ldots\ registers. +% \begin{macrocode} +\newdimen\paperheight +\newdimen\paperwidth +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\if@insert} +% \begin{macro}{\if@fcolmade} +% \begin{macro}{\if@specialpage} +% \begin{macro}{\if@firstcolumn} +% \begin{macro}{\if@twocolumn} +% \begin{macro}{\if@twoside} +% \begin{macro}{\if@reversemarginpar} +% \begin{macro}{\if@mparswitch} +% \begin{macro}{\col@number} +% \changes{v1.0n}{1994/04/30}{Added \cs{col@number}} +% Local switches first: +% \begin{macrocode} +\newif \if@insert +% \end{macrocode} +% These should definitely be global: +% \begin{macrocode} +\newif \if@fcolmade +\newif \if@specialpage \@specialpagefalse +% \end{macrocode} +% These should be global but are not always set globally in other +% files. +% \begin{macrocode} +\newif \if@firstcolumn \@firstcolumntrue +\newif \if@twocolumn \@twocolumnfalse +% \end{macrocode} +% Not sure about these: two questions. +% Should things which must apply to a whole doument be local or +% global (they probably should be `preamble only' commands)? +% Are these three such things? +% \begin{macrocode} +\newif \if@twoside \@twosidefalse +\newif \if@reversemargin \@reversemarginfalse +\newif \if@mparswitch \@mparswitchfalse +% \end{macrocode} +% This counter has been imported from `multicol'. +% \begin{macrocode} +\newcount \col@number +\col@number \@ne +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{oldcomments} +% INTERNAL REGISTERS +% +% \begin{macrocode} +\newcount\@topnum +\newdimen\@toproom +\newcount\@dbltopnum +\newdimen\@dbltoproom +\newcount\@botnum +\newdimen\@botroom +\newcount\@colnum +\newdimen\@textmin +\newdimen\@fpmin +\newdimen\@colht +\newdimen\@colroom +\newdimen\@pageht +\newdimen\@pagedp +\newdimen\@mparbottom \@mparbottom\z@ +\newcount\@currtype +\newbox\@outputbox +\newbox\@leftcolumn +\newbox\@holdpg +% \end{macrocode} +% +% \begin{macrocode} +\def\@thehead{\@oddhead} % initialization +\def\@thefoot{\@oddfoot} +% \end{macrocode} +% \end{oldcomments} +% +% \begin{macro}{\clearpage} +% \changes{v1.1r}{1995/10/11}{Added a check so that it does not lose +% the argument of \cs{twocolumn[...]}} +% +% The tests at the beginning are an experimental attempt to avoid a +% completely empty page after a |\twocolumn[...]|. This prevents the +% text from the argument vanishing into a float box, never to be seen +% again. We hope that it does not produce wrong formatting in other +% cases. +% \changes{v1.1v}{1996/07/26}{add number of missing percents} +% \begin{macrocode} +\def\clearpage{% + \ifvmode + \ifnum \@dbltopnum =\m@ne + \ifdim \pagetotal <\topskip + \hbox{}% + \fi + \fi + \fi + \newpage + \write\m@ne{}% + \vbox{}% + \penalty -\@Mi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\cleardoublepage} +% +% \begin{macrocode} +\def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else + \hbox{}\newpage\if@twocolumn\hbox{}\newpage\fi\fi\fi} +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\onecolumn} +% \changes{v1.0n}{1994/04/30}{Added setting of \cs{col@number}} +% \begin{macrocode} +%<*2ekernel|autoload|fltrace> +\def\onecolumn{% + \clearpage + \global\columnwidth\textwidth + \global\hsize\columnwidth + \global\linewidth\columnwidth + \global\@twocolumnfalse + \col@number \@ne + \@floatplacement} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\newpage} +% \changes{v1.1x}{1996/09/29}{Checks for noskipsec and inlabel added} +% \changes{v1.1x}{1996/09/29}{Checks for noskipsec and inlabel added} +% \changes{v1.1y}{1996/09/30}{Checks for noskipsec and inlabel removed +% pending further tests} +% \changes{v1.1z}{1996/10/24}{Better checks for noskipsec and +% inlabel added, plus nobreak} +% \changes{v1.2a}{1996/10/25}{Reset all flags explicitly} +% The two checks at the beginning ensure that an item label or +% run-in section title immediately before a |\newpage| get printed +% on the correct page, the one before the page break. +% +% All three tests are largely to make error processing more robust; +% that is why they all reset the flags explicitly, even when it +% would appear that this would be done by a |\leavevmode|. +% \begin{macrocode} +\def \newpage {% + \if@noskipsec + \ifx \@nodocument\relax + \leavevmode + \global \@noskipsecfalse + \fi + \fi + \if@inlabel + \leavevmode + \global \@inlabelfalse + \fi + \if@nobreak \@nobreakfalse \everypar{}\fi + \par + \vfil + \penalty -\@M} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@emptycol} +% \changes{v1.0n}{1994/04/30}{Empty column action added: +% \cs{@emptycol}} +% It may be better to use an invisible rule rather than an empty +% box here. +% \begin{macrocode} +\def \@emptycol {\vbox{}\penalty -\@M} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\twocolumn} +% \begin{macro}{\@topnewpage} +% \changes{v1.0f}{1993/12/05}{Commands changed} +% \changes{v1.0g}{1993/12/06}{\cs{@floatplacement} placement bug +% fixed} +% \changes{v1.0j}{1993/12/17}{check for vsize too small added} +% \changes{v1.2c}{1997/11/09}{Documentation of vsize check enhanced} +% There are several bug fixes to the two-column stuff here. +% +% \changes{v1.0n}{1994/04/30}{Added setting of \cs{col@number}} +% \begin{macrocode} +\def \twocolumn {% + \clearpage + \global\columnwidth\textwidth + \global\advance\columnwidth-\columnsep + \global\divide\columnwidth\tw@ + \global\hsize\columnwidth + \global\linewidth\columnwidth + \global\@twocolumntrue + \global\@firstcolumntrue + \col@number \tw@ +% \end{macrocode} +% There is no reason to put a |\@dblfloatplacement| here since +% |\@topnewpage| ignores these settings. +% The |\@floatplacement| is needed in case this comes after some +% changes. +% \changes{v1.0h}{1993/12/12}{braces removed} +% \begin{macrocode} + \@ifnextchar [\@topnewpage\@floatplacement +} +% \end{macrocode} +% +% Note that here, getting a box from the freelist can assume +% success since this comes just after a |\clearpage|. +% \changes{v1.0n}{1994/04/30}{Added setting of \cs{col@number}} +% \changes{v1.1a}{1994/10/31} +% {(DPC/CAR) Use \cs{color@begingroup} for colour} +% \changes{v1.1a}{1994/10/31} +% {(DPC/CAR) Use \cs{normalcolor}} +% \changes{v1.1a}{1994/10/31} +% {(DPC/CAR) Extra box added to remove colour resetting from vmode} +% \changes{v1.1b}{1994/11/05} +% {Use new \cs{color@hbox} concept.} +% \changes{v1.1i}{1994/11/21}{Changed to \cs{color@vbox}} +% \changes{v1.1z}{1996/10/24}{Added \cs{@nodocument} to trap +% \cs{twocolumn} in the preamble} +% \begin{macrocode} +\long\def \@topnewpage [#1]{% + \@nodocument + \@next\@currbox\@freelist{}{}% + \global \setbox\@currbox + \color@vbox + \normalcolor + \vbox {% + \hsize\textwidth + \@parboxrestore + \col@number \@ne + #1% + \vskip -\dbltextfloatsep + }% + \color@endbox +% \end{macrocode} +% Added size test and warning message; perhaps we should use +% an error message. +% \changes{v1.0l}{1994/03/15}{Corrected and amended warning message} +% \changes{v1.0m}{1994/04/24}{Warning message removed as it will be +% generated later} +% \begin{macrocode} + \ifdim \ht\@currbox>\textheight + \ht\@currbox \textheight + \fi +% \end{macrocode} +% This next line is not essential but it is more robust to make this +% value non-zero, in case of weird errors. +% +% This next bit is what is needed from |\@addtodblcol|, plus some +% extra checks for error trapping. +% \begin{macrocode} + \global \count\@currbox \tw@ + \@tempdima -\ht\@currbox + \advance \@tempdima -\dbltextfloatsep + \global \advance \@colht \@tempdima + \ifx \@dbltoplist \@empty + \else + \@latexerr{Float(s) lost}\@ehb + \let \@dbltoplist \@empty + \fi + \@cons \@dbltoplist \@currbox +% \end{macrocode} +% This setting of |\@dbltopnum| is used only to change the +% typesetting in\\ |\@combinedblfloats|. +% \begin{macrocode} + \global \@dbltopnum \m@ne +%<*trace> + \tr@ce{dbltopnum set to -1 (= \the \@dbltopnum) (topnewpage)}% +%</trace> +% \end{macrocode} +% At points such as this we need to check that there is still a +% minimal amount of room left on the page; this uses an arbitrary +% small value at present; but note that this value is larger than +% that used when checking that page is too full of normal floats. +% +% If there is little room left we just force a page-break, OK? +% This involves producing two empty columns. The second empty +% column may be produced by |\output|, in which case an extra, +% misleading, warning will be generated, OK? (This happens only +% when there is too little room left on the page for any float.) +% Otherwise (\ie if the size is such that it is allowed as a normal +% float) the extra |\@emptycol| will be invoked in the second +% column by the conditional code guarded by the |\if@firstcolumn| +% test. +% +% I now think that the cut-off point here should be |3\baselineskip|, +% but we make it a bit less so that 3 lines of text will be +% allowed, OK? +% +% Since this happens only when there is nothing on the page but the +% `top-box', the empty box should not cause any problem other than +% some overfull box messages, which is not entirely misleading. +% +% Here we need two page-ends since both columns need to be empty. +% \task{???}{Make it less arbitrary?} +% \changes{v1.0j}{1993/12/17}{Page room test added} +% \changes{v1.0l}{1994/03/15}{Warning added: it should be improved} +% \changes{v1.0m}{1994/04/24}{Message changed to give more info} +% \changes{v1.0n}{1994/04/30}{Message changed for Frank} +% \changes{v1.0n}{1994/04/30}{Empty column action added: +% \cs{@emptycol}} +% \changes{v1.0n}{1994/04/30}{Cut-off point changed to +% 3\cs{baselineskip}} +% \changes{v1.1t}{1996/05/24}{Cut-off point changed to +% 2.5\cs{baselineskip}} +% \begin{macrocode} + \ifdim \@colht<2.5\baselineskip + \@latex@warning@no@line {Optional argument of \noexpand\twocolumn + too tall on page \thepage}% + \@emptycol + \if@firstcolumn + \else + \@emptycol + \fi + \else + \global \vsize \@colht + \global \@colroom \@colht + \@floatplacement + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\output} +% \changes{v1.0f}{1993/12/05}{Command changed} +% \begin{macro}{\@specialoutput} +% \changes{v0.1c}{1993/11/23}{Command changed} +% \changes{v1.0f}{1993/12/06}{Unboxing of 255 added to rescue writes} +% This needs some small adjustments. We cannot +% guarantee that the float mechanism will interact correctly with +% this stuff, but that mechanism does not always work properly +% with footnotes already. +% +% RmS 91/09/29: +% +% added reset of |\par| to the output routine. +% This avoids problems when the output routine is +% called within a list where |\par| may be a no-op. +% +% \begin{macrocode} +\output {% + \let \par \@@par + \ifnum \outputpenalty<-\@M + \@specialoutput + \else + \@makecol + \@opcol +% \end{macrocode} +% Moved to |\@opcol|: |\@floatplacement|. +% \begin{macrocode} + \@startcolumn +% \end{macrocode} +% This loop could be replaced by an |\expandafter| tail +% recursion in |\@startcolumn|. +% \begin{macrocode} + \@whilesw \if@fcolmade \fi + {% +%<*trace> + \tr@ce{PAGE: float \if@twocolumn column \else page \fi + completed}% +%</trace> + \@opcol\@startcolumn}% + \fi + \ifnum \outputpenalty>-\@Miv +% \end{macrocode} +% At points such as this we need to check that there is still a +% minimal amount of room left on the page; this uses an arbitrary +% small value at present. If there is little room left we just +% force a page-break, OK? +% +% This bit is essential only if a float has just been processed so +% maybe it should be moved; but this is the natural place at which +% to set the vsize and a test would need to be done anyway. A +% check has been added to ensure that there really has been a +% change in the value of |\@colroom|. +% +% Since this happens only when there is nothing on the page but +% floats, the empty box should not cause any problem other than +% some overfull box messages, which is not entirely misleading. +% +% The twocolumn case does not need any extra code here since this +% is the |\output| itself; in the second column there will still +% not be enough room left so |\@emptycol| will be executed again +% when the OR is called by the-page builder when it gets to the +% penalty inserted by the first execution. (The page-builder is +% never invoked whilst the OR is being executed since it builds a +% inner vlist; thus any conditional code for the two-column case +% within |\output| may not get executed with the correct value of +% |\if@firstcolumn|. +% +% \task{???}{Make it less arbitrary?} +% \changes{v1.0j}{1993/12/17}{Page room test added} +% \changes{v1.0m}{1994/04/24}{Message changed to give more info and +% `top' removed} +% \changes{v1.0n}{1994/04/30}{Extra empty column added for +% twocolumn case (wrong, see below)} +% \changes{v1.0n}{1994/04/30}{Extra empty column added for +% twocolumn case} +% \changes{v1.0n}{1994/04/30}{Empty column action added: +% \cs{@emptycol}} +% \changes{v1.0n}{1994/04/30}{Cut-off point changed to +% 2\cs{baselineskip}} +% \changes{v1.1t}{1996/05/24}{Cut-off point changed to +% 1.5\cs{baselineskip}} +% \changes{v1.1t}{1996/05/24}{Check that \cs{@colroom} is less +% than \cs{vsize}, indicating that a float has been added} +% \changes{v1.1u}{1996/05/25}{Correct the above check} +% \changes{v1.2c}{1997/11/09}{Remove incorrect code: only one +% \cs{@emptycol} is needed here} +% \begin{macrocode} + \ifdim \@colroom<1.5\baselineskip + \ifdim \@colroom<\textheight + \@latex@warning@no@line {Text page \thepage\space + contains only floats}% + \@emptycol +% \if@twocolumn +% \if@firstcolumn +% \else +% \@emptycol +% \fi +% \fi + \else + \global \vsize \@colroom + \fi + \else + \global \vsize \@colroom + \fi + \else + \global \vsize \maxdimen + \fi +} +%</2ekernel|autoload|fltrace> +% \end{macrocode} +% +% \begin{oldcomments} +% CHANGES TO \@specialoutput: +% * \penalty\z@ changed to \penalty\interlinepenalty so \samepage +% works properly with figure and table environments. +% (Changed 23 Oct 86) +% +% * Definition of \@specialoutput changed 26 Feb 88 so \@pageht and +% \@pagedp aren't changed for a marginal note. +% (Change suggested by Chris Rowley.) +% \end{oldcomments} +% +% \begin{macrocode} +%<*2ekernel|def1|autoload|fltrace> +\gdef\@specialoutput{% + \ifnum \outputpenalty>-\@Mii + \@doclearpage + \else + \ifnum \outputpenalty<-\@Miii + \ifnum \outputpenalty<-\@MM \deadcycles \z@ \fi + \global \setbox\@holdpg \vbox {\unvbox\@cclv}% + \else +% \end{macrocode} +% Note that |\boxmaxdepth| should not be set here since we wish to +% record the natural depth of the holdpg box. +% +% This is changed so as to not lose anything, such as writes +% and marks, which may get into box 255 and should be returned to +% the list. This should only happen when the first penalty in the +% mechanism is discarded and therefore |\@holdpg| should always be +% void in this case. This can happen because a penalty is +% discarded whenever there is no box on the list. +% +% It was just: |\setbox\@tempboxa \box \@cclv|. +% +% The last box which is removed is the box put there by the +% double-penalty mechanism. The |\unskip| then removes the +% |\topskip| which is put there since the box is the first on the +% page. +% \task{CAR/FMi}{Is it more efficient to check whether the holdpg box +% is void and then act accordingly?} +% \begin{macrocode} + \global \setbox\@holdpg \vbox{% + \unvbox\@holdpg + \unvbox\@cclv +% \end{macrocode} +% We must now remove the box added by the float mechanism and the +% |\topskip| glue therefore added above it by \TeX. +% \begin{macrocode} + \setbox\@tempboxa \lastbox + \unskip + }% +% \end{macrocode} +% These two are needed as separate dimensions only by +% |\@addmarginpar|; for other purposes we put the whole size into +% |\@pageht| (see below). +% \begin{macrocode} + \@pagedp \dp\@holdpg + \@pageht \ht\@holdpg + \unvbox \@holdpg + \@next\@currbox\@currlist{% + \ifnum \count\@currbox>\z@ +% \end{macrocode} +% Putting the whole size into |\@pageht| (see above). +% \begin{macrocode} + \advance \@pageht \@pagedp + \ifvoid\footins \else + \advance \@pageht \ht\footins + \advance \@pageht \skip\footins + \advance \@pageht \dp\footins + \fi +%<*2ekernel|def1> + \ifvbox \@kludgeins +% \end{macrocode} +% We want to make the adjustment due to this insert only if the +% non-star form is used. The *-form will probably not work with +% floats, but maybe it still could make some adjustment here even +% so? +% \begin{macrocode} + \ifdim \wd\@kludgeins=\z@ + \advance \@pageht \ht\@kludgeins +%<*trace> + \tr@ce {Extra size added: \the \ht\@kludgeins}% +%</trace> + \fi + \fi +%</2ekernel|def1> +% \end{macrocode} +% This version puts the inserts back just before the additional +% material; it could be moved earlier, before unboxing the +% page-so-far. Neither is guaranteed not to put things on the wrong +% page. This version is similar to the original version. +% \begin{macrocode} + \@reinserts + \@addtocurcol + \else + \@reinserts + \@addmarginpar + \fi + }\@latexbug +% \end{macrocode} +% A 2e change: use |\addpenalty| instead of |\penalty| here. Some +% penalty is needed to create a potential break-point immediately +% after the reinserts (or the marginal). Otherwise there can be no +% possibility to break here and this can cause the reinserts or the +% marginal to appear on the next page (which is often incorrect). +% However, if the nobreak flag is true, a |\nobreak| must be +% correct. +% \changes{v1.1i}{1994/11/21}{Added \cs{if@nobreak} test} +% \changes{v1.1z}{1996/10/24}{Added \cs{nobreak} as appropriate} +% \begin{macrocode} + \ifnum \outputpenalty<\z@ + \if@nobreak + \nobreak + \else + \addpenalty \interlinepenalty + \fi + \fi + \fi + \fi +} +%</2ekernel|def1|autoload|fltrace> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@doclearpage} +% \task{CAR/FMi}{Investigate better float clearance} +% \task{CAR/FMi}{Put non-boxes back in the `right place', or nowhere?} +% This is a very much an emergency action, just dumping everything: +% footnotes first then floats. A more sophisticated version is +% needed; but even more urgent is a bug-free version (see, for +% example, pr/3528). +% +% Also, it puts any left-over non-boxes (writes, specials, etc.) back +% after any float pages created: this is a very bad bug since, +% for example, a kludge insert will be in quite the wrong place +% and, worse, be irremovable and uncancelable. +% +% \begin{macrocode} +%<*2ekernel|autoload> +\def \@doclearpage {% + \ifvoid\footins +% \end{macrocode} +% \changes{v1.2l}{2004/02/07}{Empty kludgeins box if necessary, pr/3528} +% We empty any left over kludge insert box here; this is a temporary fix. +% It should perhaps be applied to one page of cleared floats, but +% who cares? The whole of this stuff needs completely redoing for +% many such reasons. +% \begin{macrocode} + \ifvbox\@kludgeins + {\setbox \@tempboxa \box \@kludgeins}% +%<*trace> + \tr@ce {kludgeins box made void}% +%</trace> + \fi + \setbox\@tempboxa\vsplit\@cclv to\z@ \unvbox\@tempboxa + \setbox\@tempboxa\box\@cclv + \xdef\@deferlist{\@toplist\@botlist\@deferlist}% +% \end{macrocode} +% \changes{v1.0h}{1993/12/12}{defs changed to lets} +% \begin{macrocode} + \global \let \@toplist \@empty + \global \let \@botlist \@empty + \global \@colroom \@colht + \ifx \@currlist\@empty + \else + \@latexerr{Float(s) lost}\@ehb +% \end{macrocode} +% \changes{v1.0h}{1993/12/12}{defs changed to lets} +% \begin{macrocode} + \global \let \@currlist \@empty + \fi + \@makefcolumn\@deferlist + \@whilesw\if@fcolmade \fi{\@opcol\@makefcolumn\@deferlist}% + \if@twocolumn + \if@firstcolumn + \xdef\@dbldeferlist{\@dbltoplist\@dbldeferlist}% +% \end{macrocode} +% \changes{v1.0h}{1993/12/12}{defs changed to lets} +% \begin{macrocode} + \global \let \@dbltoplist \@empty + \global \@colht \textheight + \begingroup + \@dblfloatplacement + \@makefcolumn\@dbldeferlist + \@whilesw\if@fcolmade \fi{\@outputpage + \@makefcolumn\@dbldeferlist}% + \endgroup + \else + \vbox{}\clearpage + \fi + \fi + \else + \setbox\@cclv\vbox{\box\@cclv\vfil}% + \@makecol\@opcol + \clearpage + \fi +} +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@opcol} +% \changes{v1.0f}{1993/12/05}{Command changed} +% \changes{v1.0f}{1993/12/05}{Hook added} +% \changes{v1.0j}{1993/12/17}{Hook removed} +% Several changes in detail here. +% +% \begin{macrocode} +%<*2ekernel|autoload|fltrace> +\def \@opcol {% + \if@twocolumn + \@outputdblcol + \else + \@outputpage +%<*trace> + \tr@ce{PAGE: one column (float? see above) page completed}% +%</trace> +% \end{macrocode} +% Not needed since it comes after |\@outputpage|: +% \begin{macrocode} +% \global\@colht\textheight + \fi +% \end{macrocode} +% These do not need to be done every time |\@opcol| is used: they +% should be grouped together since they all need to be done at the +% end of the non-special output routine, or at the end of a clearpage +% one. +% \begin{macrocode} + \global \@mparbottom \z@ \global \@textfloatsheight \z@ + \@floatplacement +} +%</2ekernel|autoload|fltrace> +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@makecol} +% \changes{v0.1c}{1993/11/23}{Command changed} +% \changes{v1.0b}{1993/11/29}{\cs{@makespecialcolbox} added} +% We must rewrite this macro to alllow for variations in page-makeup +% required by changes in page-length. +% +% This uses a different macro if a special-length column is being +% produced. +% +% \begin{macrocode} +%<*2ekernel|def1|autoload> +\gdef \@makecol {% + \ifvoid\footins + \setbox\@outputbox \box\@cclv + \else + \setbox\@outputbox \vbox {% +% \end{macrocode} +% This |\boxmaxdepth| setting is to ensure that deep footnotes +% do not overwrite the footer (on account of the negative skip +% added later): it should use |\@maxdepth| otherwise the change is +% pointless when there are footnotes. +% \task{CAR}{Investigate providing an option to put the footnotes +% below the bottom floats.} +% +% But see also its use when combining floats. +% \changes{v1.0l}{1994/03/15}{\cs{maxdepth} changed to \cs{@maxdepth}} +% \begin{macrocode} + \boxmaxdepth \@maxdepth +% \end{macrocode} +% +% \changes{v1.2e}{1999/01/06}{Added negative vskip, as when processing +% outputbox below: suggested by Fred Bartlett pr/2892} +% \changes{1.2i}{2000/07/12}{Removed negative vskip, as it gives +% unacceptable results when the depth is large: pr/3189} +% \task{CAR}{As can be seen from the above two changes, getting a good +% layout here is difficult: fix!} +% \begin{macrocode} + \@tempdima\dp\@cclv + \unvbox \@cclv +% \vskip-\@tempdima + \vskip \skip\footins +% \end{macrocode} +% \changes{v1.1a}{1994/10/31} +% {(DPC/CAR) Colour resetting moved to here} +% \begin{macrocode} + \color@begingroup + \normalcolor + \footnoterule + \unvbox \footins + \color@endgroup + }% + \fi +% \end{macrocode} +% The h floats have now been finally committed to this page so we +% can reset their list. The top and bottom floats are then added +% to the page. +% \changes{v1.2k}{2003/12/16}{Ensure that \cs{@elt} has a defined +% state (pr/3586)} +% \begin{macrocode} + \let\@elt\relax + \xdef\@freelist{\@freelist\@midlist}% +% \end{macrocode} +% \changes{v1.0h}{1993/12/12}{defs changed to lets} +% \begin{macrocode} + \global \let \@midlist \@empty + \@combinefloats +% \end{macrocode} +% The variations start here in case |\enlargethispage| has +% been used. +% \begin{macrocode} +%<*2ekernel|def1> + \ifvbox\@kludgeins + \@makespecialcolbox + \else +%</2ekernel|def1> +% \end{macrocode} +% This extra reboxing is only needed to add the +% |\@texttop| and |\@textbotttom| but this could be done earlier, +% when the floats are added. +% +% The |\boxmaxdepth| resetting here will have no effect unless +% |\@textbottom| ends with a box or rule. So is this (or possibly +% |\@maxdepth|) the correct value? +% +% The |\vskip -\dimen@| +% ensures that the visible depth of the box does not +% affect the placement of anything on the page. +% Thus very deep pages will overprint the footer; but these should +% have been prevented by suitable settings of the maxdepths at +% appropriate times. +% +% If |\@textbottom| ends with a box or rule of non-zero depth +% then this skip adjustemnt should be done again after it. +% +% I think that the final boxing of the main text page could have a +% common ending which may make it simpler to see what is going on. +% +% This needs further investigation, especially in the `special +% case'. +% \task{CAR}{Further investigation of makecol} +% +% Also, the |\boxmaxdepth| setting here affects what happens wthin +% |\@texttop| and |\@textbottom|, should it? Is it needed at all? +% \changes{v1.0l}{1994/03/15}{Removed boxmaxdepth setting.} +% +% RmS 91/10/22: Replaced |\dimen128| by |\dimen@|. +% +% \begin{macrocode} + \setbox\@outputbox \vbox to\@colht {% +% \boxmaxdepth \maxdepth %?? + \@texttop + \dimen@ \dp\@outputbox + \unvbox \@outputbox + \vskip -\dimen@ + \@textbottom + }% +%<*2ekernel|def1> + \fi +%</2ekernel|def1> + \global \maxdepth \@maxdepth +} +%</2ekernel|def1|autoload> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@reinserts} +% \changes{v1.0e}{1993/12/01}{Command added} +% This is the code which reinserts the inserts. It puts them all +% in one place; this can make some of them come out on the wrong +% page. +% It has been put into a separate macro to expidite experimentation. +% \begin{macrocode} +%<*2ekernel|def1|autoload> +\gdef \@reinserts{% + \ifvoid\footins\else\insert\footins{\unvbox\footins}\fi +%<+2ekernel|def1> \ifvbox\@kludgeins\insert\@kludgeins +%<+2ekernel|def1> {\unvbox\@kludgeins}\fi +} +%</2ekernel|def1|autoload> +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\@makespecialcolbox} +% \changes{v1.0b}{1993/11/29}{Command added} +% This implements certain variations in page-makeup. +% \begin{macrocode} +%<*2ekernel|def1|fltrace> +\gdef \@makespecialcolbox {% +%<*trace> + \tr@ce{Kludgeins ht \the\ht\@kludgeins\space + dp \the\dp\@kludgeins\space + wd \the\wd\@kludgeins}% +%</trace> +% \end{macrocode} +% First we find the natural height of the column. +% +% See above for discussion of what is happening here. +% +% This needs further investigation, especially in this `special +% case'. +% \changes{v1.0k}{1994/02/08}{boxmaxdepth setting removed} +% \begin{macrocode} + \setbox\@outputbox \vbox {% + \@texttop + \dimen@ \dp\@outputbox + \unvbox\@outputbox + \vskip-\dimen@ + }% + \@tempdima \@colht + \ifdim \wd\@kludgeins>\z@ +% \end{macrocode} +% Note that in this case (the *-version), the height of the +% |\@kludgeins| box is not used since its value is somewhat +% arbitrary: it need only be big enough to ensure that the +% page-break is not taken prematurely. +% +% Here we calculate how much vertical space needs to be added in +% order to enable the column to fit into a box of size |\@colht| +% using the best information we have about the amount of shrink +% available (another thing which is known internally about a box, +% but cannot be accessed at the \TeX{} level!). +% +% This needs \TeX3 otherwise |\pageshrink| is zero anyway; it may +% not be exactly the figure we wish as it is the total available +% from the all the material collected before the page-break +% decision is made. It will, we think, always be an overestimate +% of the actual shrink in the box; therefore this should always +% force the shortest possible column with the possibility of an +% overfull box. +% +% This should work for bothe flush- and ragged-bottom setting since +% it makes the contents no smaller than the size (|\@colht|) of the +% box into which they are put. +% +% Their should perhaps be an upper limit, of 0pt?, on the extra +% space added to force shrinking. +% \task{CAR}{Further investigation of kludge-* space} +% +% See above for a discussion of the |\boxmaxdepth| setting here. +% +% \changes{v1.0k}{1994/02/08}{boxmaxdepth setting added} +% \changes{v1.0l}{1994/03/15}{Removed boxmaxdepth setting.} +% \begin{macrocode} + \advance \@tempdima -\ht\@outputbox + \advance \@tempdima \pageshrink +%<*trace> + \tr@ce {Natural ht of col: \the \ht\@outputbox}% + \tr@ce {\string \@colht: \the \@colht}% + \tr@ce {Pageshrink added: \the \pageshrink}% + \tr@ce {Hence, space added: \the \@tempdima}% +%</trace> + \setbox\@outputbox \vbox to \@colht {% +% \boxmaxdepth \maxdepth + \unvbox\@outputbox + \vskip \@tempdima + \@textbottom + }% +% \end{macrocode} +% For the unstarred version, the final size of the page is +% precisely specified. Therefore, at least for the flush-bottom +% case, we need to ensure that, visually, it has this size exactly. +% +% Thus we calculate this size and set the material in a box of this +% size, which is then put into a box of size |\@colht| with |\vss| +% at the bottom. +% \begin{macrocode} + \else + \advance \@tempdima -\ht\@kludgeins +%<*trace> + \tr@ce {Natural ht of col: \the \ht\@outputbox}% + \tr@ce {\string \@colht: \the \@colht}% + \tr@ce {Extra size added: -\the \ht \@kludgeins}% + \tr@ce {Hence, height of inner box: \the \@tempdima}% + \tr@ce {Max? pageshrink available: \the \pageshrink}% +%</trace> +% \end{macrocode} +% This type of final packaging could be done always; this may +% simplify all of this page-makeup. +% +% It is not necessary to set |\boxmaxdepth| here since the +% |\@outputbox| ends with glue. +% \changes{v1.0k}{1994/02/03}{correct mistakes in the documentation} +% \begin{macrocode} + \setbox \@outputbox \vbox to \@colht {% + \vbox to \@tempdima {% + \unvbox\@outputbox + \@textbottom}% + \vss}% + \fi +% \end{macrocode} +% Finally we need to explicitly make the insert box void. +% \begin{macrocode} + {\setbox \@tempboxa \box \@kludgeins}% +%<*trace> + \tr@ce {kludgeins box made void}% +%</trace> +} +%</2ekernel|def1|fltrace> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@texttop} +% \begin{macro}{\@textbottom} +% These do nothing as a default. +% \begin{macrocode} +%<*2ekernel|autoload> +\let \@texttop \relax +\let \@textbottom \relax +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@resetactivechars} +% \begin{macro}{\@activechar@info} +% +% \changes{v1.0n}{1994/04/30}{\cs{@activechar@warning} changed to +% \cs{@activechar@info}} +% RmS 93/09/06: +% added hook to protect against certain active characters in the +% output routine. Default checks are for active space and end-of-line. +% \changes{v1.0u}{1994/05/23}{Added \cs{MessageBreak}} +% \begin{macrocode} +\def\@activechar@info #1{% + \@latex@info@no@line {Active #1 character found while + output routine is active + \MessageBreak + This may be a bug in a package file + you are using}% +} +% \end{macrocode} +% +% Do not put any spaces in this next bit! +% \changes{1.2f}{1999/10/09}{Reset definition of active prime +% character (used in math mode)} +% \begin{macrocode} +\begingroup +\obeylines\obeyspaces% +\catcode`\'\active% +\gdef\@resetactivechars{% +\def^^M{\@activechar@info{EOL}\space}% +\def {\@activechar@info{space}\space}% +\let'\active@math@prime}% +\endgroup +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@outputpage} +% \changes{v1.0f}{1993/12/05}{Command changed} +% \begin{macro}{\@shipoutsetup} +% \changes{v1.0f}{1993/12/05}{Command added} +% \changes{v1.1s}{1995/11/10}{Command removed} +% \begin{macro}{\@writesetup} +% \changes{v1.1s}{1995/11/10}{Command removed} +% \changes{v1.1o}{1995/07/21}{Command added} +% \changes{v1.0f}{1993/12/05}{\cs{@startpagehook} added} +% \changes{v1.0j}{1993/12/17}{---and then removed} +% \changes{v1.0p}{1994/05/12}{\cs{normalcolor}added} +% \changes{v1.0s}{1994/05/20}{Added setting of \cs{protect} +% during \cs{shipout}.} +% \changes{v1.0u}{1994/05/23}{Changed resetting of \cs{protect} after +% shipout to use \cs{aftergroup}} +% \changes{v1.1b}{1994/11/05} +% {Use new \cs{color@hbox} concept.} +% \changes{v1.1b}{1994/11/05} +% {Change protect settings for new-style, protect-free +% aux-files.} +% \changes{v1.1c}{1994/11/05} +% {Add new \cs{AtBeginDvi} concept} +% \changes{v1.1e}{1994/11/10} +% {Modify \cs{protect} setting} +% \changes{v1.1f}{1994/11/14} +% {Modify new \cs{AtBeginDvi} concept} +% \changes{v1.1o}{1995/07/21} +% {New, experimental, versions: need in-lining} +% \changes{v1.1s}{1995/11/10}{In-lined} +% \changes{v1.1w}{1996/09/21}{Added \cs{@parboxrestore} and made +% consequent deletions: wait for the howls of protest} +% +% The |\color@hbox| hooks here are used to avoid putting just a +% colour special into an otherwise empty box (in a header or +% footer). These boxes are often set to be completely empty and so +% adding a special produces a very underfull box message. +% +% There has been extensive tidying up of the old code here; +% including the removal of a level of grouping. +% +% The setting of |\protect| immediately before the |\shipout| +% is needed so that protected commands within |\write|s are +% handled correctly. +% +% Within shipout's vbox it is reset to its default value, |\relax|. +% +% Resetting it to its default value after the shipout has been +% completed (and the contents of the writes have been expanded) +% must be done by use of |\aftergroup|. +% This is because it must have the value |\relax| +% before macros coming from other uses of |\aftergroup| within +% this box are expanded. +% +% Putting this into the |\aftergroup| token list does not affect +% the definition used in expanding the |\write|s because the +% aftergroup token list is only constructed when popping the +% save-stack, it is not expanded until after the shipout is +% completed. +% +% Question: should things from an |\aftergroup| within the shipped +% out box be executed in the environment set up for the writes, or +% after it finishes? +% +% A lot of this code has been in-lined tp prevent mis-use of +% internal commands as hooks. +% \begin{macrocode} +\def\@outputpage{% +\begingroup % the \endgroup is put in by \aftergroup +% \end{macrocode} +% Now all the set-up stuff has been in-lined for Frank. +% +% First the stuff for the writes. +% +% From here \ldots\ was in the command |\@writesetup|. +% \begin{macrocode} + \let \protect \noexpand +% \end{macrocode} +% +% RmS 93/08/19: Redefined accents to allow changes in font encoding; +% but exactly why was this needed? +% +% The |\catcode`\ = 10| was removed as it was considered useless +% (presumably because nothing gets tokenised during shipout). +% +% This was put in as some error produced active spaces in a mark, I +% think. +% +% Why was the hyphen reset? +% +% \begin{macrocode} + \@resetactivechars +% \end{macrocode} +% If a page break happens between the start of a list and its first +% item the |@newlist| will be true and this will mess up any list +% that is used in the header or footer of the page. So we have to +% reset that flag. +% \changes{v1.2h}{2000/07/19} +% {Reset and restore \cs{@if@newlist} for internal/3231} +% \changes{v1.2j}{2001/01/07} +% {And do it in the right macro! (pr/3286)} +% \begin{macrocode} + \global\let\@@if@newlist\if@newlist + \global\@newlistfalse +% \end{macrocode} +% +% \changes{v1.0q}{1994/05/16}{Changed setting of accents (FMi): +% with the new encoding setup they can use \cs{let}. +% It could also use the new internal commands?} +% \changes{v1.1l}{1995/04/24}{Reset \cmd\\ latex/1451 (DPC)} +% This next hook replaces the following: +% \begin{verbatim} +% \let\-\@dischyph +% \let\'\@acci\let\`\@accii\let\=\@acciii +% \let\\\@normalcr +% \let\par\@@par %% 15 Sep 87 (this was once inside the box) +% \end{verbatim} +% and it does more than they did; in particular it sets: +% \begin{verbatim} +% \parindent\z@ +% \parskip\z@skip +% \everypar{}% +% \leftskip\z@skip +% \rightskip\z@skip +% \parfillskip\@flushglue +% \lineskip\normallineskip +% \baselineskip\normalbaselineskip +% \sloppy +% \end{verbatim} +% +% \begin{macrocode} + \@parboxrestore +% \end{macrocode} +% \ldots\ to here was in the command |\@writesetup|. +% \begin{macrocode} + \shipout \vbox{% + \set@typeset@protect + \aftergroup \endgroup + \aftergroup \set@typeset@protect + % correct? or just restore by ending + % the group? +% \end{macrocode} +% This first bit has been moved inside the shipped out box. +% +% Now the setup inside the shipped out box; this should conatin all +% the stuff that could only affect typesetting; other stuff may need +% to be reset for the writes also. +% +% From here \ldots\ was in the command |\@shipoutsetup|. +% \begin{macrocode} + \if@specialpage + \global\@specialpagefalse\@nameuse{ps@\@specialstyle}% + \fi + \if@twoside + \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot + \let\@themargin\oddsidemargin + \else \let\@thehead\@evenhead + \let\@thefoot\@evenfoot \let\@themargin\evensidemargin + \fi + \fi +% \end{macrocode} +% +% The rest was always inside the box. +% +% RmS 91/08/15: aded this line: +% \begin{macrocode} + \reset@font +% \end{macrocode} +% RmS 93/08/06 Added |\lineskiplimit=0pt| to guard against it being +% nonzero: e.g. by |\offinterlineskip| being in effect. +% +% There are probably lots of other things that may need resetting. +% +% \begin{macrocode} + \normalsize +% \end{macrocode} +% Reset the space factors. +% \changes{v1.2b}{1997/04/14} +% {Call \cs{normalsfcodes} (from patch file) latex/2404} +% \begin{macrocode} + \normalsfcodes +% \end{macrocode} +% +% Reset these here (previously reset separately for head and foot) +% \changes{v1.2b}{1997/04/14} +% {Move \cs{label} and \cs{index} (from patch file)} +% \begin{macrocode} + \let\label\@gobble + \let\index\@gobble + \let\glossary\@gobble +% \end{macrocode} +% +% \begin{macrocode} + \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@ +% \end{macrocode} +% \ldots\ to here was in the command |\@shipoutsetup|. +% \begin{macrocode} + \@begindvi + \vskip \topmargin + \moveright\@themargin \vbox {% + \setbox\@tempboxa \vbox to\headheight{% + \vfil + \color@hbox + \normalcolor + \hb@xt@\textwidth{\@thehead}% + \color@endbox + }% %% 22 Feb 87 + \dp\@tempboxa \z@ + \box\@tempboxa + \vskip \headsep + \box\@outputbox + \baselineskip \footskip + \color@hbox + \normalcolor + \hb@xt@\textwidth{\@thefoot}% + \color@endbox + }% + }% +% \end{macrocode} +% |\endgroup| now inserted by |\aftergroup| +% +% Restore |\if@newlist| +% \begin{macrocode} + \global\let\if@newlist\@@if@newlist +% \end{macrocode} +% +% \begin{macrocode} + \global \@colht \textheight + \stepcounter{page}% +% \end{macrocode} +% It is now clear that this does something useful, thanks to Piet +% van Oostrum. It is needed because a float page is made without +% using TeX's page-builder; thus the output routine is never called +% so the marks are not updated. +% \begin{macrocode} + \let\firstmark\botmark +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@begindvi} +% \changes{v1.1c}{1994/11/05} +% {Added macro} +% \changes{v1.1f}{1994/11/14}{Use normal box register: why a box?} +% +% This unboxes stuff that must appear before anything else in the +% |.dvi| file, then returns that box register to the free list and +% cancels itself. +% +% The stuff in the box should not add any typeset material to the +% page. +% \begin{macrocode} +\def \@begindvi{% + \unvbox \@begindvibox + \global\let \@begindvi \@empty +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@combinefloats} +% \begin{macro}{\@cflt} +% \changes{v1.0h}{1993/12/12}{name changed} +% \begin{macro}{\@cflb} +% The |\boxmaxdepth| setting here was not made local to +% a box so was dangerous. It is needed only within the box made +% by |\@cflt| (and not normally even there), so it has been +% moved there; this also agrees with the original pseudcode. +% +% \changes{v1.0h}{1993/12/12}{boxmaxdepth setting moved} +% \begin{macrocode} +\def \@combinefloats {% +% \boxmaxdepth \maxdepth + \ifx \@toplist\@empty \else \@cflt \fi + \ifx \@botlist\@empty \else \@cflb \fi +} +% \end{macrocode} +% +% \changes{v1.0h}{1993/12/12}{defs changed to lets} +% \begin{macrocode} +\def \@cflt{% + \let \@elt \@comflelt + \setbox\@tempboxa \vbox{}% + \@toplist + \setbox\@outputbox \vbox{% + \boxmaxdepth \maxdepth + \unvbox\@tempboxa + \vskip -\floatsep + \topfigrule + \vskip \textfloatsep + \unvbox\@outputbox + }% + \let\@elt\relax + \xdef\@freelist{\@freelist\@toplist}% + \global\let\@toplist\@empty +} +% \end{macrocode} +% +% \begin{macrocode} +\def \@cflb {% + \let\@elt\@comflelt + \setbox\@tempboxa \vbox{}% + \@botlist + \setbox\@outputbox \vbox{% + \unvbox\@outputbox + \vskip \textfloatsep + \botfigrule + \unvbox\@tempboxa + \vskip -\floatsep + }% + \let\@elt\relax + \xdef\@freelist{\@freelist\@botlist}% + \global \let \@botlist\@empty +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@comflelt} +% \begin{macro}{\@comdblflelt} +% \begin{macro}{\@combinedblfloats} +% +% \begin{macrocode} +\def\@comflelt#1{\setbox\@tempboxa + \vbox{\unvbox\@tempboxa\box #1\vskip\floatsep}} +% \end{macrocode} +% +% \begin{macrocode} +\def\@comdblflelt#1{\setbox\@tempboxa + \vbox{\unvbox\@tempboxa\box #1\vskip\dblfloatsep}} +% \end{macrocode} +% +% \begin{macrocode} +\def \@combinedblfloats{% + \ifx \@dbltoplist \@empty + \else + \setbox\@tempboxa \vbox{}% + \let \@elt \@comdblflelt + \@dbltoplist + \let \@elt \relax + \xdef \@freelist {\@freelist\@dbltoplist}% + \global\let \@dbltoplist \@empty + \setbox\@outputbox \vbox to\textheight +% \end{macrocode} +% +% The setting of |\boxmaxdepth| here has no effect since the +% |\@outputbox| should already have depth zero. Even so, it would +% have no effect on the layout of the page. +% \changes{v1.0l}{1994/03/15}{Removed boxmaxdepth setting.} +% \begin{macrocode} + {%\boxmaxdepth\maxdepth %% probably not needed, CAR + \unvbox\@tempboxa\vskip-\dblfloatsep +% \end{macrocode} +% Here we need different typesetting if the top float comes from +% |\@topnewpage|. +% \changes{v1.0n}{1994/04/30}{Removed rule in topnewpage case} +% \begin{macrocode} + \ifnum \@dbltopnum>\m@ne + \dblfigrule + \fi + \vskip \dbltextfloatsep + \box\@outputbox + }% + \fi +} +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@startcolumn} +% \changes{v1.0f}{1993/12/05}{Command changed} +% \begin{macro}{\@startdblcolumn} +% \changes{v1.0f}{1993/12/05}{Command changed} +% +% We could combine (most of) these two into |\@startcol <list>|. +% Note that |\@xstartcol| was only used once (\ie in +% |\@startcolumn|); it has therefore been removed. This is not quite +% as efficient but it now has the same structure as +% |\@startdblcolumn|. +% +% The empty-list test has been moved to |\@tryfcolumn|. +% +% \begin{macrocode} +%<*2ekernel|autoload|fltrace> +\def \@startcolumn {% + \global \@colroom \@colht + \@tryfcolumn \@deferlist + \if@fcolmade +%<*trace> + \tr@ce{PAGE: float \if@twocolumn column \else page \fi + completed}% +%</trace> + \else +% \end{macrocode} +% \changes{v1.0h}{1993/12/12}{defs changed to lets} +% \begin{macrocode} + \begingroup + \let \reserved@b \@deferlist + \global \let \@deferlist \@empty + \let \@elt \@scolelt + \reserved@b + \endgroup + \fi +} +% \end{macrocode} +% +% This one does not need to set |\@colht|. +% +% \begin{macrocode} +\def \@startdblcolumn {% +% \end{macrocode} +% Not needed since this always comes after |\@outputpage|: +% \begin{macrocode} +% \global \@colht \textheight + \@tryfcolumn \@dbldeferlist + \if@fcolmade +%<*trace> + \tr@ce{PAGE: double float page completed}% +%</trace> + \else +% \end{macrocode} +% \changes{v1.0h}{1993/12/12}{defs changed to lets} +% \begin{macrocode} + \begingroup + \let \reserved@b \@dbldeferlist + \global \let \@dbldeferlist \@empty + \let \@elt \@sdblcolelt + \reserved@b + \endgroup + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@tryfcolumn} +% \changes{v1.0f}{1993/12/05}{Command changed} +% Now tests if its list is empty before any further exertion. +% +% \begin{macrocode} +\def \@tryfcolumn #1{% + \global \@fcolmadefalse + \ifx #1\@empty + \else +%<*trace> + \tr@ce{PAGE: try float \if@twocolumn column/page\else page\fi + ---\string #1}% + \tr@ce{----- \string #1: #1}% +%</trace> +% \end{macrocode} +% \changes{v1.0h}{1993/12/12}{defs changed to lets} +% \begin{macrocode} + \xdef\@trylist{#1}% + \global \let \@failedlist \@empty + \begingroup + \let \@elt \@xtryfc \@trylist + \endgroup + \if@fcolmade + \@vtryfc #1% + \fi + \fi +} +%</2ekernel|autoload|fltrace> +% \end{macrocode} +% +% \end{macro} +% +% \begin{macrocode} +%<*2ekernel|autoload> +% \end{macrocode} +% +% \begin{macro}{\@scolelt} +% \begin{macrocode} +\def\@scolelt#1{\def\@currbox{#1}\@addtonextcol} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@sdblcolelt} +% \begin{macrocode} +\def\@sdblcolelt#1{\def\@currbox{#1}\@addtodblcol} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@vtryfc} +% \changes{v1.2d}{1997/11/19}{Reindent code, to be understandable(DPC).} +% \begin{macrocode} +\def\@vtryfc #1{% + \global\setbox\@outputbox\vbox{}% + \let\@elt\@wtryfc + \@flsucceed + \global\setbox\@outputbox \vbox to\@colht{% + \vskip \@fptop + \vskip -\@fpsep + \unvbox \@outputbox + \vskip \@fpbot}% + \let\@elt\relax + \xdef #1{\@failedlist\@flfail}% + \xdef\@freelist{\@freelist\@flsucceed}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@wtryfc} +% \begin{macrocode} +\def\@wtryfc #1{% + \global\setbox\@outputbox\vbox{% + \unvbox\@outputbox + \vskip\@fpsep + \box #1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xtryfc} +% \changes{v1.1v}{1996/07/26}{remove \cs{global} before \cs{@test...}} +% \begin{macrocode} +\def\@xtryfc #1{% + \@next\reserved@a\@trylist{}{}% + \@currtype \count #1% + \divide\@currtype\@xxxii + \multiply\@currtype\@xxxii + \@bitor \@currtype \@failedlist + \@testfp #1% + \ifdim \ht #1>\@colht + \@testtrue + \fi + \if@test + \@cons\@failedlist #1% + \else + \@ytryfc #1% + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ytryfc} +% \begin{macrocode} +\def\@ytryfc #1{% + \begingroup + \gdef\@flsucceed{\@elt #1}% + \global\let\@flfail\@empty + \@tempdima\ht #1% + \let\@elt\@ztryfc + \@trylist + \ifdim \@tempdima >\@fpmin + \global\@fcolmadetrue + \else + \@cons\@failedlist #1% + \fi + \endgroup + \if@fcolmade + \let\@elt\@gobble + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ztryfc} +% \changes{v1.1v}{1996/07/26}{remove \cs{global} before \cs{@test...}} +% \begin{macrocode} +\def\@ztryfc #1{% + \@tempcnta \count#1% + \divide\@tempcnta\@xxxii + \multiply\@tempcnta\@xxxii + \@bitor \@tempcnta {\@failedlist \@flfail}% + \@testfp #1% + \@tempdimb\@tempdima + \advance\@tempdimb \ht#1% + \advance\@tempdimb\@fpsep + \ifdim \@tempdimb >\@colht + \@testtrue + \fi + \if@test + \@cons\@flfail #1% + \else + \@cons\@flsucceed #1% + \@tempdima\@tempdimb + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel|autoload> +% \end{macrocode} +% +% The major changes for float suppression and the changes to the float +% mechanism to make it conform to the documentation are in these next +% macros. +% +% \begin{macro}{\@addtobot} +% \changes{v1.0f}{1993/12/05}{Command changed} +% Lots of changes. +% +% \begin{macrocode} +%<*2ekernel|autoload|fltrace> +\def \@addtobot {% +%<*trace> + \tr@ce{***Start addtobot}% +%</trace> + \@getfpsbit 4\relax +%<*trace> + \tr@ce{fpstype \ifodd \@tempcnta OK \else not \fi bot: + \the \@fpstype}% +%</trace> + \ifodd \@tempcnta + \@flsetnum \@botnum + \ifnum \@botnum>\z@ + \@tempswafalse + \@flcheckspace \@botroom \@botlist + \if@tempswa +% \end{macrocode} +% This next line means that this page is produced with box 255 +% having depth zero, rather than the normal maxdepth: is this +% needed, useful? +% \task{CAR/FMi}{Investigate resetting of maxdepth: I do not think it is +% necessary here; Frank does.} +% \begin{macrocode} + \global \maxdepth \z@ + \@flupdates \@botnum \@botroom \@botlist +%<*trace> + \tr@ce{colroom (after-bot) = \the \@colroom}% + \tr@ce{colnum (after-bot) = \the \@colnum}% + \tr@ce{botnum (after-bot) = \the \@botnum}% + \tr@ce{***Success: bot}% +%</trace> + \@inserttrue + \fi +%<*trace> + \else + \tr@ce{Fail: botnum = \the \@botnum: + fpstype \the \@fpstype=ORD?}% + \ifnum \@fpstype<\sixt@@n + \tr@ce{ERROR: !b float not successful (addtobot)}% + \fi +%</trace> + \fi + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@addtotoporbot} +% \changes{v1.0f}{1993/12/05}{Command changed} +% Lots of changes. +% +% \begin{macrocode} +\def \@addtotoporbot {% +%<*trace> + \tr@ce{***Start addtotoporbot}% +%</trace> + \@getfpsbit \tw@ +%<*trace> + \tr@ce{fpstype \ifodd \@tempcnta OK \else not \fi top: + \the \@fpstype}% +%</trace> + \ifodd \@tempcnta + \@flsetnum \@topnum + \ifnum \@topnum>\z@ + \@tempswafalse + \@flcheckspace \@toproom \@toplist + \if@tempswa + \@bitor\@currtype{\@midlist\@botlist}% +%<*trace> + \tr@ce{(mid+bot)list: \@midlist, \@botlist: + (addtotoporbot-before)}% +%</trace> + \if@test +%<*trace> + \tr@ce{type already on list: mid or bot---sent to addtobot}% +%</trace> + \else + \@flupdates \@topnum \@toproom \@toplist +%<*trace> + \tr@ce{colroom (after-top) = \the \@colroom}% + \tr@ce{colnum (after-top) = \the \@colnum}% + \tr@ce{topnum (after-top) = \the \@topnum}% + \tr@ce{***Success: top}% +%</trace> + \@inserttrue + \fi + \fi +%<*trace> + \else + \tr@ce{Fail: topnum = \the \@topnum: fpstype + \the \@fpstype=ORD?}% + \ifnum \@fpstype<\sixt@@n + \tr@ce{ERROR: !t float not successful (addtotoporbot)}% + \fi +%</trace> + \fi + \fi + \if@insert + \else +%<*trace> + \tr@ce{sent to addtobot (addtotoporbot)}% +%</trace> + \@addtobot + \fi +} +%</2ekernel|autoload|fltrace> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@addtocurcol} +% \changes{v1.0f}{1993/12/05}{Command changed} +% \task{CAR}{Add rules around h floats for FMi} +% \task{CAR}{Investigate pagebreak option possibilities} +% Lots of changes. +% +% \begin{macrocode} +%<*2ekernel|autoload|fltrace|flafter> +\def \@addtocurcol {% +%<*trace> + \tr@ce{***Start addtocurcol}% +%</trace> + \@insertfalse + \@setfloattypecounts + \ifnum \@fpstype=8 +%<*trace> + \tr@ce{fpstype !p only (addtocurcol): \the \@fpstype = 8?}% +%</trace> + \else + \ifnum \@fpstype=24 +%<*trace> + \tr@ce{fpstype p only (addtocurcol): \the \@fpstype = 24?}% +%</trace> + \else + \@flsettextmin +% \end{macrocode} +% This is a new adjustment which is quite a major change in +% functionality; but it implements the documentation. +% Note that |\@reqcolroom| will include the whole of the +% page-so-far, and hence includes |\@textfloatsheight| of floats, +% so before comparing it with |\@textmin|, we add this to +% |\@textmin| also. +% \begin{macrocode} +%<*trace> + \tr@ce{textfloatsheight (before) = \the \@textfloatsheight}% +%</trace> + \advance \@textmin \@textfloatsheight + \@reqcolroom \@pageht +% \end{macrocode} +% This line must be removed since |\@specialoutput| changed. +% \begin{macrocode} +% \advance \@reqcolroom \@pagedp +%<*trace> + \tr@ce{textmin + textfloatsheight: \the \@textmin}% + \tr@ce{page-so-far: \the \@reqcolroom}% +%</trace> + \ifdim \@textmin>\@reqcolroom + \@reqcolroom \@textmin +%<*trace> + \tr@ce{ORD? textmin being used}% +%</trace> + \fi + \advance \@reqcolroom \ht\@currbox +%<*trace> + \tr@ce{float size = \the \ht \@currbox (addtocurcol)}% + \tr@ce{colroom = \the \@colroom (addtocurcol)}% + \tr@ce{reqcolroom = \the \@reqcolroom (addtocurcol)}% +%</trace> + \ifdim \@colroom>\@reqcolroom + \@flsetnum \@colnum + \ifnum \@colnum>\z@ + \@bitor\@currtype\@deferlist +%<*trace> + \tr@ce{deferlist: \@deferlist: (addtocurcol-before)}% +%</trace> + \if@test +%<*trace> + \tr@ce{type already on list: defer (addtocurcol)}% +%</trace> + \else + \@bitor\@currtype\@botlist +%<*trace> + \tr@ce{botlist: \@botlist: (addtocurcol-before)}% +%</trace> + \if@test +%<*trace> + \tr@ce{type already on list: bot---sent to addtobot}% +%</trace> + \@addtobot + \else +%<*trace> + \tr@ce{fpstype \ifodd \@tempcnta OK \else not \fi + here: \the \@fpstype}% +%</trace> + \ifodd \count\@currbox + \advance \@reqcolroom \intextsep + \ifdim \@colroom>\@reqcolroom + \global \advance \@colnum \m@ne + \global \advance \@textfloatsheight \ht\@currbox +% \end{macrocode} +% This may sometimes give an overestimate. +% \begin{macrocode} + \global \advance \@textfloatsheight 2\intextsep + \@cons \@midlist \@currbox +%<*trace> + \tr@ce{***Success: here}% + \tr@ce{textfloatsheight (after-here) = + \the \@textfloatsheight}% + \tr@ce{colnum (after-here) = \the \@colnum}% +%</trace> +% \end{macrocode} +% +% CHANGE TO |\@addtocurcol|: +% +% |\penalty\z@| changed to |\penalty\interlinepenalty| so |\samepage| +% works properly with figure and table environments. +% (Changed 23 Oct 86) +% +% There is also an |\addpenalty\interlinepenalty| above. +% +% Since in 2e |\samepage| is no longer supported, these could be +% removed. +% +% Although it is best to use |\addvspace| in case two h floats come +% together, this makes other spacing more difficult to adjust; whereas +% if a user specifies two h floats together then they can more easily +% get the spacing correct by ad hoc commands. +% +% It is necessary to adjust for the addition of |\parskip| here in +% case the float is added betweeen paragraphs (\ie when in vertical +% mode). +% +% If the nobreak switch is true we need to reset it and clear +% |\everypar| sionce the float may not reset the flag and cannot reset +% the |\everypar| globally. +% \changes{v1.0l}{1994/03/15}{Changed \cs{addvspace} to \cs{vskip}} +% \changes{v1.1i}{1994/11/21} +% {Added \cs{if@nobreak} test before float box} +% \changes{v1.1z}{1996/10/24}{Added \cs{nobreak}, etc as appropriate} +% +% Typesetting starts here (we are in vertical mode). +% \begin{macrocode} + \if@nobreak + \nobreak + \@nobreakfalse + \everypar{}% + \else + \addpenalty \interlinepenalty + \fi + \vskip \intextsep + \box\@currbox + \penalty\interlinepenalty + \vskip\intextsep + \ifnum\outputpenalty <-\@Mii \vskip -\parskip\fi +% \end{macrocode} +% Typesetting ends here. +% \begin{macrocode} + \outputpenalty \z@ + \@inserttrue +%<*trace> + \else + \tr@ce{Fail---no room at 2nd test of colroom + (addtocorcol \string\intextsep)}% +%</trace> + \fi + \fi + \if@insert + \else +%<*2ekernel|autoload|fltrace> +%<*trace> + \tr@ce{not here: sent to addtotoporbot}% +%</trace> + \@addtotoporbot +%</2ekernel|autoload|fltrace> +%<*!2ekernel&!autoload&!fltrace> +%<*trace> + \tr@ce{not here: sent to addtobot}% +%</trace> + \@addtobot +%</!2ekernel&!autoload&!fltrace> + \fi + \fi + \fi +%<*trace> + \else + \tr@ce{Fail: colnum = \the \@colnum: + fpstype \the \@fpstype=ORD?}% + \ifnum \@fpstype<\sixt@@n + \tr@ce{ERROR: BANG float not successful (addtocurcol)}% + \fi +%</trace> + \fi +%<*trace> + \else + \tr@ce{Fail---no room: fl box ht: \the \ht \@currbox + (addtocurcol)}% +%</trace> + \fi + \fi + \fi + \if@insert + \else + \@resethfps +%<*trace> + \tr@ce{put on deferlist (addtocurcol)}% +%</trace> + \@cons\@deferlist\@currbox +%<*trace> + \tr@ce{deferlist: \@deferlist: (addtocurcol-after)}% +%</trace> + \fi +} +%</2ekernel|autoload|fltrace|flafter> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@addtonextcol} +% \changes{v1.0f}{1993/12/05}{Command changed} +% Lots of changes. +% +% \begin{macrocode} +%<*2ekernel|autoload|fltrace> +\def\@addtonextcol{% + \begingroup +%<*trace> + \tr@ce{***Start addtonextcol}% +%</trace> + \@insertfalse + \@setfloattypecounts + \ifnum \@fpstype=8 +%<*trace> + \tr@ce{fpstype not curcol: \the \@fpstype = 8?}% +%</trace> + \else + \ifnum \@fpstype=24 +%<*trace> + \tr@ce{fpstype not curcol: \the \@fpstype = 24?}% +%</trace> + \else + \@flsettextmin +%<*trace> + \tr@ce{text-so-far: 0pt (top of col)}% +%</trace> + \@reqcolroom \ht\@currbox +%<*trace> + \tr@ce{float size: \the \@reqcolroom (addtonextcol)}% +%</trace> + \advance \@reqcolroom \@textmin +%<*trace> + \tr@ce{colroom = \the \@colroom (addtonextcol)}% + \tr@ce{reqcolroom = \the \@reqcolroom (addtonextcol)}% +%</trace> + \ifdim \@colroom>\@reqcolroom + \@flsetnum \@colnum + \ifnum\@colnum>\z@ + \@bitor\@currtype\@deferlist +%<*trace> + \tr@ce{deferlist: \@deferlist: (addtonextcol-before)}% +%</trace> + \if@test +%<*trace> + \tr@ce{type already on list: defer (addtonextcol)}% +%</trace> + \else +%<*trace> + \tr@ce{sent to addtotoporbot (addtonextcol)}% +%</trace> + \@addtotoporbot + \fi + \fi +%<*trace> + \else + \tr@ce{Fail---no room: fl box ht: \the \ht \@currbox + (addtonextcol)}% +%</trace> + \fi + \fi + \fi + \if@insert + \else +%<*trace> + \tr@ce{put back on deferlist (addtonextcol)}% +%</trace> + \@cons\@deferlist\@currbox +%<*trace> + \tr@ce{deferlist: \@deferlist: (addtonextcol-after)}% +%</trace> + \fi +%<*trace> + \tr@ce{End of addtonextcol -- locally counts:}% + \tr@ce{ col: \the \@colnum. top: \the \@topnum. bot: \the \@botnum.}% +%</trace> + \endgroup +%<*trace> + \tr@ce{End of addtonextcol -- globally counts:}% + \tr@ce{col: \the \@colnum. top: \the \@topnum. bot: \the \@botnum.}% +%</trace> +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@addtodblcol} +% \changes{v1.0f}{1993/12/05}{Command changed} +% Lots of changes. +% +% \begin{macrocode} +\def\@addtodblcol{% + \begingroup +%<*trace> + \tr@ce{***Start addtodblcol}% +%</trace> + \@insertfalse + \@setfloattypecounts + \@getfpsbit \tw@ +%<*trace> + \tr@ce{fpstype \ifodd \@tempcnta OK \else not \fi dbltop: + \the \@fpstype}% +%</trace> + \ifodd\@tempcnta + \@flsetnum \@dbltopnum + \ifnum \@dbltopnum>\z@ + \@tempswafalse + \ifdim \@dbltoproom>\ht\@currbox + \@tempswatrue +%<*trace> + \tr@ce{Space OK: \@dbltoproom = + \the \@dbltoproom > \the \ht \@currbox + (dbltoproom)}% +%</trace> + \else +%<*trace> + \tr@ce{fpstype: \the \@fpstype (addtodblcol)}% +%</trace> + \ifnum \@fpstype<\sixt@@n +%<*trace> + \tr@ce{BANG float ignoring \@dbltoproom}% + \tr@ce{\@spaces \@dbltoproom = \the \@dbltoproom. + Ht float: \the \ht \@currbox-BANG}% +%</trace> +% \end{macrocode} +% Need to check that there is room on the page, using the local value +% of |\@textmin| to make the necessary adjustment to |\@dbltoproom|. +% \begin{macrocode} + \advance \@dbltoproom \@textmin +%<*trace> + \tr@ce{Local value of texmin: \the\@textmin}% + \tr@ce{\@spaces space on page = \the \@dbltoproom. + Ht float: \the \ht \@currbox-BANG}% +%</trace> + \ifdim \@dbltoproom>\ht\@currbox + \@tempswatrue +%<*trace> + \tr@ce{Space OK BANG: space on page = \the \@dbltoproom > + \the \ht \@currbox}% + \else + \tr@ce{fpstype: \the \@fpstype}% + \tr@ce{Fail---no room dbltoproom-BANG?:}% + \tr@ce{\@spaces space on page = \the \@dbltoproom. + Ht float: \the \ht \@currbox}% +%</trace> + \fi + \advance \@dbltoproom -\@textmin +%<*trace> + \else + \tr@ce{fpstype: \the \@fpstype}% + \tr@ce{Fail---no room dbltoproom-ORD?:}% + \tr@ce{\@spaces \@dbltoproom = \the \@dbltoproom. + Ht float: \the \ht \@currbox}% +%</trace> + \fi + \fi + \if@tempswa + \@bitor \@currtype \@dbldeferlist +%<*trace> + \tr@ce{dbldeferlist: \@dbldeferlist: (before)}% +%</trace> + \if@test +%<*trace> + \tr@ce{type already on list: dbldefer}% +%</trace> + \else + \@tempdima -\ht\@currbox + \advance\@tempdima + -\ifx \@dbltoplist\@empty \dbltextfloatsep \else + \dblfloatsep \fi + \global \advance \@dbltoproom \@tempdima + \global \advance \@colht \@tempdima + \global \advance \@dbltopnum \m@ne + \@cons \@dbltoplist \@currbox +%<*trace> + \tr@ce{dbltopnum (after) = \the \@dbltopnum}% + \tr@ce{***Success: dbltop}% +%</trace> + \@inserttrue + \fi + \fi +%<*trace> + \else + \tr@ce{Fail: dbltopnum = \the \@dbltopnum: fpstype + \the \@fpstype=ORD?}% + \ifnum \@fpstype<\sixt@@n + \tr@ce{ERROR: !t float not successful (addtodblcol)}% + \fi +%</trace> + \fi + \fi + \if@insert + \else +%<*trace> + \tr@ce{put on dbldeferlist}% +%</trace> + \@cons\@dbldeferlist\@currbox +%<*trace> + \tr@ce{dbldeferlist: \@dbldeferlist: (after)}% +%</trace> + \fi +%<*trace> + \tr@ce{End of addtodblcol -- locally count:}% + \tr@ce{ dbltop: \the \@dbltopnum.}% +%</trace> + \endgroup +%<*trace> + \tr@ce{End of addtodblcol -- globally count:}% + \tr@ce{dbltop: \the \@dbltopnum.}% +%</trace> +} +%</2ekernel|autoload|fltrace> +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\@addmarginpar} +% \begin{macrocode} +%<*2ekernel|autoload> +\def\@addmarginpar{\@next\@marbox\@currlist{\@cons\@freelist\@marbox + \@cons\@freelist\@currbox}\@latexbug\@tempcnta\@ne + \if@twocolumn + \if@firstcolumn \@tempcnta\m@ne \fi + \else + \if@mparswitch + \ifodd\c@page \else\@tempcnta\m@ne \fi + \fi + \if@reversemargin \@tempcnta -\@tempcnta \fi + \fi + \ifnum\@tempcnta <\z@ \global\setbox\@marbox\box\@currbox \fi + \@tempdima\@mparbottom + \advance\@tempdima -\@pageht + \advance\@tempdima\ht\@marbox + \ifdim\@tempdima >\z@ + \@latex@warning@no@line {Marginpar on page \thepage\space moved}% + \else + \@tempdima\z@ + \fi + \global\@mparbottom\@pageht + \global\advance\@mparbottom\@tempdima + \global\advance\@mparbottom\dp\@marbox + \global\advance\@mparbottom\marginparpush + \advance\@tempdima -\ht\@marbox +% \end{macrocode} +% Putting box movement inside the `marbox': +% \begin{macrocode} + \global\setbox \@marbox + \vbox {\vskip \@tempdima + \box \@marbox}% + \global \ht\@marbox \z@ + \global \dp\@marbox \z@ +% \end{macrocode} +% Sticking (rather than gluing:-) the `marbox' to the line above, +% changed vskip to kern: +% \begin{macrocode} + \kern -\@pagedp + \nointerlineskip + \hb@xt@\columnwidth + {\ifnum \@tempcnta >\z@ + \hskip\columnwidth \hskip\marginparsep + \else + \hskip -\marginparsep \hskip -\marginparwidth + \fi + \box\@marbox \hss}% +% \end{macrocode} +% For this reason the following code can vanish: +%\begin{verbatim} +% \nobreak %% No longer needed. CAR92/12 +% \vskip -\@tempdima %% No longer needed. CAR92/12 +%\end{verbatim} +% \begin{macrocode} + \nointerlineskip + \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}} +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Kludgeins} +% +% This part of the file is part of the implementation of the following +% two new commands for \LaTeX2e{}. +% +% +% \begin{verbatim} +% \enlargethispage{<dim>} +% \end{verbatim} +% +% Adds |<dim>| to the height of the current column only. On the printed +% page the bottom of this column is extended downwards by exactly +% |<dim>| without having any effect on the placement of the footer; this +% may result in an overprinting. +% +% \begin{verbatim} +% \enlargethispage*{<dim>} +% \end{verbatim} +% +% Similar to |\enlargethispage| but it tries to squeeze the column to +% be printed in as small a space as possible, ie it uses any +% shrinkability in the column. If the column was not explicitly broken +% (\eg with |\pagebreak|) this may result in an overfull box message but +% execpt for this it will come out as expected (if you know what to +% expect). +% +% The star form of this command is dedicated to Leslie Lamport, the +% other we need for ourselves (FMi, CAR). +% +% These commands may well have unwanted effects if used soon +% before a \clearpage: please give keep them clear of such places. +% +% \begin{macro}{\@kludgeins} +% \changes{v0.1c}{1993/11/23}{Insert added} +% The insert which makes \TeX{} do a lot of the necessary work. +% All we need to put into it is the amount by which the pagegoal +% should be changed. +% \begin{macrocode} +%<*2ekernel|def1> +\newinsert \@kludgeins +\global\dimen\@kludgeins \maxdimen +\global\count\@kludgeins 1000 +%</2ekernel|def1> +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\enlargethispage} +% \begin{macro}{\enlargethispage*} +% \changes{v0.1c}{1993/11/23}{Commands added} +% The user command. +% \begin{macrocode} +%<*2ekernel|def1> +\gdef \enlargethispage {% + \@ifstar + {% +%<*trace> + \tr@ce{Enlarging page height * }% +%</trace> + \@enlargepage{\hbox{\kern\p@}}}% + {% +%<*trace> + \tr@ce{Enlarging page height exactly---}% +%</trace> + \@enlargepage\@empty}% +} +%</2ekernel|def1> +%<*autoload> +\def\enlargethispage{\@autoload{out1}\enlargethispage} +%</autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@enlargepage} +% \changes{v0.1c}{1993/11/23}{Command added} +% This actually inserts the insert, after checking for extreme +% values of the change. +% \begin{macrocode} +%<*2ekernel|def1> +\gdef\@enlargepage#1#2{% +%<*trace> + \tr@ce{\@spaces\@spaces by #2}% +%</trace> + \@tempskipa#2\relax + \ifdim \@tempskipa>.5\maxdimen + \@latexerr{Suggested\space extra\space height\space + (\the\@tempskipa)\space dangerously\space + large}\@eha + \else + \ifdim \vsize<.5\maxdimen +%<*trace> + \tr@ce {Kludgeins added--pagegoal before: \the\pagegoal}% +%</trace> + \@bsphack + \insert\@kludgeins{#1\vskip-\@tempskipa}% + \@esphack +% \end{macrocode} +% This next bit is for tracing only: +% \begin{macrocode} +%<*trace> + \ifvmode \par + \tr@ce {Kludgeins added--pagegoal after: \the \pagegoal}% + \fi +%</trace> + \else + \@latexerr{Page\space height\space already\space + too\space large}\@eha + \fi + \fi +} +%</2ekernel|def1> +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Float control} +% +% This part implements controllable floats and other changes +% to the float mechanism. +% +% It provides, at the doument level, the following command for +% inclusion in \LaTeX2e{}. +% +% \begin{verbatim} +% \suppressfloats +% \end{verbatim} +% +% This suppresses all further floats on the current page. +% +% With an optional argument it suppresses only floats only in certain +% positions on the current page. +% \begin{quote} +% |[t]|\quad suppresses only floats at the top of the page +% |[b]|\quad suppresses only floats at the bottom of the page +% \end{quote} +% +% It also enables the use of an extra specifier, {\tt !}, in the +% location optional argument of a float. If this is present then, +% just for this particular float, whenever it is processed by the float +% mechanism the followinhg are ignored: +% +% \begin{itemize} +% \item all restrictions on the number of floats which can appear; +% \item all explicit restrictions on the amount of space which should +% (not) be occupied by floats and/or text. +% \end{itemize} +% +% The mechanism will still attempt to ensure that pages are not +% overfull. +% +% These specifiers override, for the single float, the suppression +% commands described above. +% +% +% In its current form, it also suplies a reasonably exhaustive, and +% somewhat baroque, means of tracing some aspects of the float +% mechanism. +% +% More tracing. +% \begin{macro}{\tr@ce} +% \begin{macro}{\notrace} +% \begin{macro}{\tracefloats} +% \begin{macro}{\@traceval} +% \begin{macro}{\tracefloatvals} +% \begin{macro}{\@tracemessage} +% \changes{v1.0c}{1993/11/30}{Commands added} +% \changes{v1.0h}{1993/12/12}{Commands changed} +% \changes{v1.0j}{1993/12/17}{tracefloatvals made a document command} +% Set-up tracing for floats independent of other tracing as it +% produces mega-output. Default is no tracing. +% \changes{v1.1j}{1995/04/24} +% {Do not add to kernel unless `trace' specified} +% \task{???}{Make proper tracing module} +% +% \begin{macrocode} +%<*trace> +\def \@tracemessage #1{\typeout{LaTeX2e: #1}} +\def \tracefloats{\let \tr@ce \@tracemessage} +\def \notrace {\let \tr@ce \@gobble} +\notrace +\def \@traceval #1{\tr@ce{\string #1 = \the #1}} +\def \tracefloatvals{% + \@dblfloatplacement + \@floatplacement + \@traceval\@colnum + \@traceval\@colroom + \@traceval\@topnum + \@traceval\@toproom + \@traceval\@botnum + \@traceval\@botroom + \@traceval\@fpmin + \tr@ce{\string\textfraction = \textfraction}% + \@traceval\@dbltopnum + \@traceval\@dbltoproom +} +%</trace> +%<*flafter> +\providecommand\tr@ce[1]{} +%</flafter> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\suppressfloats} +% \begin{macro}{\@flstop} +% \changes{v1.0f}{1993/12/05}{Commands added} +% Float suppression commands: these set the relevant counter +% globally to zero. Thus they are overridden for a particular float +% by an ! specifier. +% +% \begin{macrocode} +%<*2ekernel|autoload> +\def \suppressfloats {% + \@ifnextchar [% + \@flstop + {\global \@colnum \z@}% +} +% \end{macrocode} +% Maybe this should be a loop over |#1|? +% \begin{macrocode} +\def \@flstop [#1]{% + \if t#1% + \global \@topnum \z@ + \fi + \if b#1% + \global \@botnum \z@ + \fi +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% Manipulation of float placement and type; both their strings and the +% corresponding count registers. +% +% \begin{macro}{\@fpstype} +% \begin{macro}{\@reqcolroom} +% \begin{macro}{\@textfloatsheight} +% \changes{v1.0f}{1993/12/05}{Commands added} +% First a new count register to go with |\@currtype|. +% +% Then a new skip register, for information needed to remove the +% |\@maxsep| conservatism: it is possible that this could use a +% temporary register. +% +% Finally a dimension register to hold the total height of in-text +% floats on the current page. This is needed to implement a +% major change in the functionality of |\@addtocurcol| which is, +% nevertheless, a bug fix. +% It is not local and therefore cannot be a temporary register. +% +% \begin{macrocode} +\newcount \@fpstype +\newdimen \@reqcolroom +\newdimen \@textfloatsheight +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@fpsadddefault} +% \changes{v1.0f}{1993/12/05}{Command added} +% Adds the default placement to what is already there. +% +% Should not need to change this, but could do it as follows: +% \begin{verbatim} +%\def \@fpsadddefault {% +% \@temptokena \expandafter\expandafter\expandafter +% {\csname fps@\@captype \endcsname}% +% \edef \reserved@a {\the\@temptokena}% +% \@onelevel@sanitize \reserved@a +% \edef \@fps {\@fps\reserved@a}% +%} +% \end{verbatim} +% +% \begin{macrocode} +%<*2ekernel|autoload|fltrace> +\def \@fpsadddefault {% +%<*trace> + \tr@ce{fps changed from: \@fps}% +%</trace> + \edef \@fps {\@fps\csname fps@\@captype \endcsname}% + \@latex@warning {% + No positions in optional float specifier.\MessageBreak + Default added (so using `\@fps')}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@setfloattypecounts} +% \changes{v1.0f}{1993/12/05}{Command added} +% Sets counters |\@fpstype| and |\@currtype|. +% +% BANG $==$ bit4 of $|\count\@currbox| = 0$. +% +% \begin{macrocode} +\def \@setfloattypecounts {% + \@currtype \count\@currbox + \@fpstype \count\@currbox + \divide\@currtype\@xxxii \multiply\@currtype\@xxxii + \advance \@fpstype -\@currtype +%<*trace> + \tr@ce{(mod 32) fpstype: \the \@fpstype}% + \tr@ce{(mult of 32) currtype: \the \@currtype}% +% Tracing only: but some should be changed into real errors/warnings? + \ifnum \@fpstype<\sixt@@n + \ifnum \@fpstype=\z@ + \tr@ce{ERROR: no PLACEMENT, fpstype = \the \@fpstype = 0?}% + \fi + \ifnum \@fpstype=\@ne + \tr@ce{WARNING: only h, fpstype = \the \@fpstype = 1?}% + \fi + \tr@ce{BANG float}% + \else + \ifnum \@fpstype=\sixt@@n + \tr@ce{ERROR: no PLACEMENT, fpstype = \the \@fpstype = 16?}% + \fi + \ifnum \@fpstype=17 + \tr@ce{WARNING: only h, fpstype = \the \@fpstype = 17?}% + \fi + \tr@ce{ORD float}% + \fi +%</trace> +} +%</2ekernel|autoload|fltrace> +% \end{macrocode} +% \end{macro} +% +% Macros for getting, testing and setting bits of the fps. +% +% +% \begin{macro}{\@getfpsbit} +% \changes{v1.0f}{1993/12/05}{Command added} +% Sets |\@tempcnta| to required bit of |\count\@currbox|. +% +% \begin{macrocode} +%<*2ekernel|autoload> +\def \@getfpsbit {% + \@boxfpsbit \@currbox +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@boxfpsbit} +% \changes{v1.0f}{1993/12/05}{Command added} +% Used above. +% \begin{macrocode} +\def \@boxfpsbit #1#2{% + \@tempcnta \count#1% + \divide \@tempcnta #2\relax +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@testfp} +% \changes{v1.0f}{1993/12/05}{Command added} +% New definition of the float page test. +% +% \changes{v1.1v}{1996/07/26}{remove \cs{global} before \cs{@test...}} +% \begin{macrocode} +\def \@testfp #1{% + \@boxfpsbit #18\relax % Really `#1 8' for human readers! + \ifodd \@tempcnta + \else + \@testtrue + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@setfpsbit} +% \changes{v1.0f}{1993/12/05}{Command added} +% Sets required bit of |\@tempcnta| (to 1). +% +% \begin{macrocode} +\def \@setfpsbit #1{% + \@tempcntb \@tempcnta + \divide \@tempcntb #1\relax + \ifodd \@tempcntb + \else + \advance \@tempcnta #1\relax + \fi +} +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@resethfps} +% \changes{v1.0f}{1993/12/05}{Command added} +% \changes{v1.0h}{1993/12/12}{Warnings added: minimal} +% \changes{v1.0m}{1994/04/24}{Warning changed} +% \changes{v1.0m}{1994/04/24}{Number 2 changed to \cs{tw@}} +% \changes{v1.0o}{1994/05/02}{Code shortened} +% Globally adds t as a possible location for an h or !h only placement: +% this must be done using the count. +% +% Although it will leave |\@fpstype| set to 17 even if it was +% originally 1, this does not matter since it is the last thing in +% |\@addtocurcol|. +% \begin{macrocode} +%<*2ekernel|autoload|fltrace> +\def \@resethfps {% + \let\reserved@a\@empty + \ifnum \@fpstype=\@ne + \def \reserved@a {!}% + \@fpstype 17 + \fi + \ifnum \@fpstype=17 + \global \advance \count\@currbox \tw@ + \@latex@warning@no@line {% + `\reserved@a h' float specifier changed to `\reserved@a ht'}% +%<*trace> + \tr@ce{% + `t' added to `\reserved@a h'- new Count: \the \count\@currbox}% +%</trace> + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% Special stuff for BANG floats. +% +% \begin{macro}{\@flsetnum} +% \changes{v1.0f}{1993/12/05}{Command added} +% +% Ignores any zero float counter value in case BANG. +% +% It uses a local assignment to the normally global counter: a bit +% naughty, perhaps? +% +% These assgnments are safe so long as the counter involved is only +% consulted once (\ie only for the `bang float') with the changed value. +% This is the case within |\@addtocurcol| because it is used only +% once within a call of the output routine (which forms a group). +% +% For |\@addtonextcol| this is achieved by putting a group around its +% code; this is needed because it is called (by |\@startcolumn|) for +% each float which was on the deferlist. Almost identical +% considerations pertain to |\@addtodblcol|. There may be more +% efficient ways to handle this, but the group seems to be the simplest. +% +% \changes{v1.0n}{1994/04/30}{Rogue space removed} +% \begin{macrocode} +\def \@flsetnum #1{% +%<*trace> + \tr@ce{fpstype: \the \@fpstype (flsetnum \string#1)}% +%</trace> + \ifnum \@fpstype<\sixt@@n + \ifnum #1=\z@ +%<*trace> + \tr@ce{BANG float resetting \string#1 to 1}% +%</trace> + #1\@ne + \fi + \fi +%<*trace> + \tr@ce{#1 (before) = \the #1}% +%</trace> +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@flsettextmin} +% \changes{v1.0f}{1993/12/05}{Command added} +% This ignores |\textfraction| space restriction in case BANG. +% +% \begin{macrocode} +\def \@flsettextmin {% +%<*trace> + \tr@ce{fpstype: \the \@fpstype (flsettextmin)}% +%</trace> + \ifnum \@fpstype<\sixt@@n +%<*trace> + \tr@ce{BANG ignoring textmin}% +%</trace> + \@textmin \z@ + \else + \@textmin \textfraction\@colht +%<*trace> + \tr@ce{ORD textmin = \the \@textmin}% +%</trace> + \fi +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@flcheckspace} +% \changes{v1.0f}{1993/12/05}{Command added} +% This ignores space restriction in case BANG; this is still slightly +% conervative since it does not allow for the fact that, if there is +% no text in the column then |\textfloatsep| is not needed. +% Sets |@tempswa| true if there is room for |\@currbox|. +% +% \begin{macrocode} +\def \@flcheckspace #1#2{% + \advance \@reqcolroom + \ifx #2\@empty \textfloatsep \else \floatsep \fi +%<*trace> + \tr@ce{colroom = \the \@colroom (flcheckspace \string#1 \string#2)}% + \tr@ce{reqcolroom = \the \@reqcolroom + (flcheckspace \string#1 \string#2)}% +%</trace> + \ifdim \@colroom>\@reqcolroom + \ifdim #1>\ht\@currbox + \@tempswatrue +%<*trace> + \tr@ce{Space OK: #1 = \the #1 > \the \ht \@currbox + (flcheckspace \string#1 \string#2)}% +%</trace> + \else +%<*trace> + \tr@ce{fpstype: \the \@fpstype + (flcheckspace \string#1 \string#2)}% +%</trace> + \ifnum \@fpstype<\sixt@@n +%<*trace> + \tr@ce{BANG float ignoring #1 + (flcheckspace \string#1 \string#2):}% + \tr@ce{\@spaces #1 = \the #1. Ht float: \the \ht \@currbox + BANG}% +%</trace> + \@tempswatrue +%<*trace> + \else + \tr@ce{Fail---no room (flcheckspace \string#1 \string#2) + (fpstype \the \@fpstype=ORD?):}% + \tr@ce{\@spaces #1 = \the #1. Ht float: \the \ht \@currbox + ORD?}% +%</trace> + \fi + \fi +%<*trace> + \else + \tr@ce{Fail---no room at 2nd test of colroom + (flcheckspace \string#1 \string#2)}% +%</trace> + \fi +} +%</2ekernel|autoload|fltrace> +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@flupdates} +% \changes{v1.0f}{1993/12/05}{Command added} +% This updates everything when a float is placed. +% +% \begin{macrocode} +%<*2ekernel|autoload> +\def \@flupdates #1#2#3{% + \global \advance #1\m@ne + \global \advance \@colnum \m@ne + \@tempdima -\ht\@currbox + \advance \@tempdima + -\ifx #3\@empty \textfloatsep \else \floatsep \fi + \global \advance #2\@tempdima + \global \advance \@colroom \@tempdima + \@cons #3\@currbox +} +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% +% Interesting facts about float mechanisms past and present, together +% with a summary of various features, some unresolved: +% +% \begin{enumerate} +% \item The value |\textfraction| does not affect the processing +% of doublecol floats: this seems sensible, but should be +% documented. +% \item |\twocolumn| floatplacement was wrong: dbl not needed, ord +% needed. +% \item |\@floatplacement| was not called after |\@startdblcol| +% or |\@topnewpage|. This has been changed; it is clearly a bug +% fix. +% \item The use |\@topnewpage| when |\dblfigrule| is non-trivial +% produced a rule in the wrong place. This has been fixed by not +% using |\dblfigrule| when processing the `float' from +% |\@topnewpage|. +% \item If the specifier was just h and the float could not be put +% here, it went on the deferlist and stayed there until a clearpage. +% It now gets changed to a `th': this is only an error-recovery +% action, putting just h or !h should be deprecated. +% \item |\@dblmaxsep| was `the maximum of |\dblfloatsep| and +% |\dbltexfloatsep|'. But it was never used! Now gone completely, +% like |\@maxsep|. +% \item After an h float is put on a page, it was counted as text when +% applying the |\textfraction| test; this is possibly too big a +% change although it is a bug fix? +% \item Two consecutive h floats are separated by twice |\intextsep|: +% this could be changed to one by use of |\addvspace|, OK? +% Note that it would also mean that less space is put in if an h +% float immediaiely follows other spaces. This is also possibly +% too big a change, at least for compatibility mode? +% Or it may be simply wrong! It has not been changed. +% \item Now |\@addtocurcol| checks first for just p fps. I think +% that this is an increase in efficiency, but maybe the coding +% should be made even more efficient. +% \item |\@tryfcolumn| now tests if the list is empty first, otherwise +% lots of wasted time! Thus this test has been removed from +% |\@startcolumn|. +% As Frank pointed out, this makes |\@startcolumn| less +% efficient. But it is now the same as |\@startdblcolumn|: I can +% see no reason why they should be different, but which is best? +% \item Why is |\@colroom| set in |\@doclearpage|? +% \item Footnotes. Check what |\clearpage| does when footnotes are +% left over. Footnotes are not put on float pages and, also, +% |\@addtonextcol| ignores the existence of held-over footnotes +% in deciding what floats can go on the page. Not changed. +% \item |\clearpage| can still lose non-boxes, at least when floats +% are involved. It also moves some to the `wrong page', but this +% may be a coding problem. +% \item The ! option makes it necessary to check in |\output| that +% there is enough room left on the page after adding a float. (This +% would have been necessary anyway if anyone set |\@textmin| too +% close to zero! A similar danger existed also if the text in a +% |\twocolumn[text]| entity gets too large.) +% The current implementation of this also makes the normal case a +% little less efficient, OK? +% Not enough room means, at present, less than |\baselineskip|, +% with a warning: is this OK? Should it be made generic (another +% parameter)? +% \item There are four possibilities for supporting this: +% +% |\twocolumn[\maketitle more text]| +% +% One is to change +% |\maketitle| slightly to allow this. Another is to change +% |\@topnewpage| so that more than one |\twocolumn[]| command is +% allowed; in this case |\maketitle\twoclumn[more text]| will work. +% The former is more robust from the user's viewpoint, but makes the +% code for |\maketitle| rather ad hoc (maybe it is already?). +% Another is to misuse the global twocolumn flag locally within +% |\@topnewpage|. +% Yet another is to move the column count register from the multicol +% package into the kernel. This has beeen done. +% \item Where should the reinserts be put to maximise the +% probability that footmotes come out on the correct page? +% Or should we go for as much compatibility as possible (but see +% next item)? +% \item Should we continue to support (as much as possible) +% |\samepage|? Some of its intended functionality is now advertised +% as being provided by |\enlargethispage|. Use of either is likely +% to result in wrongly placed footnotes, marginals, etc. +% Which should have priority: obeying the pagination instructions, +% or correct placement of notes/marginalia? +% \item Is the adjustment of space to cause shrinking in the +% kludge-* case correct? Should it be limited to 0pt? +% \item Is the setting of |\boxmaxdepth| in makecol and friends +% needed? It only has any effect if |\@textbottom| ends with a box +% or rule, in which case the vskip to allow for its depth should +% also be added. If it is kept, it should probably be the last +% thing in the box. It has now been removed. +% +% It would perhaps be better to document that |\@textbottom| +% and |\@texttop| must have natural height 0pt. +% \item I cannot see why the vskip adjustement for the depth +% is needed if boxmaxdepth is used to ensure that there is never +% a too deep box. +% \item The value of |\boxmaxdepth| should be explicitly set +% whenever necessary: it is too risky to assume that it has any +% particular value. Care is needed in deciding what to set it to. +% +% It is interesting to note that the value of |\boxmaxdepth| is +% unique in being read before the local settings for the box group +% are reset; all other parameter settings which affect the box +% construction use their values outside the box group. +% \item Should |\@maxdepth| store the setting of |\maxdepth| from +% lplain? Or should we provide a proper interface to class files +% for setting these? +% \end{enumerate} +% +% An analysis of various other macros. +% +% |\@opcol| should do |\@floatplacement|, but where? Right at the +% end, since it always occurs at the start of a column. +% \begin{verbatim} +% \def\@opcol{% +% % Why is this done first? +% \global \@mparbottom \z@ +% \if@twocolumn +% \@outputdblcol +% \else +% \@outputpage +% % This is not needed since it is done at the end of +% % |\@outputpage|: +% \global \@colht \textheight +% \fi} +% \end{verbatim} +% +% Only tracing has been added to these. +% +% \begin{macrocode} +%<*2ekernel|autoload|fltrace> +\def\@makefcolumn #1{% + \begingroup + \@fpmin \z@ + \let \@testfp \@gobble + \@tryfcolumn #1% + \endgroup +%<*trace> + \if@fcolmade + \tr@ce{PAGE: in \string\clearpage \if@twocolumn ---twocolumn\fi---}% + \tr@ce{----- float column/page completed from \string#1}% + \fi +%</trace> +} +% \end{macrocode} +% This will line up the last baselines in the two +% columns provided they are constructed in the normal way: \ie ending +% in a skip of minus the original depth, with |\@textbottom| adding +% nothing. +% +% Thus again it is essential for |\@textbottom| to have depth 0pt. +% \changes{1.2g}{2000/07/12}{Ensure that rule is in \cs{normalcolor}} +% \begin{macrocode} +\def\@outputdblcol{% + \if@firstcolumn + \global \@firstcolumnfalse + \global \setbox\@leftcolumn \box\@outputbox +%<*trace> + \tr@ce{PAGE: first column boxed}% +%</trace> + \else + \global \@firstcolumntrue + \setbox\@outputbox \vbox {% + \hb@xt@\textwidth {% + \hb@xt@\columnwidth {% + \box\@leftcolumn \hss}% + \hfil + {\normalcolor\vrule \@width\columnseprule}% + \hfil + \hb@xt@\columnwidth {% + \box\@outputbox \hss}% + }% + }% +%<*trace> + \tr@ce{PAGE: second column also boxed}% +%</trace> + \@combinedblfloats + \@outputpage +%<*trace> + \tr@ce{PAGE: two column page completed}% +%</trace> + \begingroup + \@dblfloatplacement + \@startdblcolumn +% \end{macrocode} +% This loop could be replaced by an |\expandafter| tail +% recursion in\\ |\@startdblcolumn|. +% \begin{macrocode} + \@whilesw\if@fcolmade \fi + {\@outputpage +%<*trace> + \tr@ce{PAGE: double float page completed}% +%</trace> + \@startdblcolumn}% + \endgroup + \fi +} +%</2ekernel|autoload|fltrace> +% \end{macrocode} +% +% \subsubsection{Float placement parameters} +% \changes{v1.0i}{1993/12/14}{Section added to declare all parameters} +% +% The main purpose of this section is to ensure that all the +% float-placement parameters which need to be set in a class file or +% package have been declared. It also describes their use and sets +% values for them which are reasonable for typical douments using +% US letter or A4 sized paper. +% +% \paragraph{Limits for the placement of floating objects} +% +% \begin{macro}{\c@topnumber} +% This counter holds the maximum number of +% floats that can appear at the top of a text page or column. +% \begin{macrocode} +%<*2ekernel|autoload> +\newcount\c@topnumber +\setcounter{topnumber}{2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\topfraction} +% This macro holds the maximum proportion (as a decimal number) of +% a text page or column that can be occupied by floats at the top. +% \begin{macrocode} +\newcommand\topfraction{.7} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@bottomnumber} +% This counter holds the maximum number of +% floats that can appear at the bottom of a text page or column. +% \begin{macrocode} +\newcount\c@bottomnumber +\setcounter{bottomnumber}{1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bottomfraction} +% This macro holds the maximum proportion (as a decimal number) of +% a text page or column that can be occupied by floats at the bottom. +% \begin{macrocode} +\newcommand\bottomfraction{.3} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@totalnumber} +% This counter holds the maximum number of floats that can appear on +% any text page or column. +% \begin{macrocode} +\newcount\c@totalnumber +\setcounter{totalnumber}{3} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\textfraction} +% This macro holds the minimum proportion (as a decimal number) of +% a text page or column that must be occupied by text. +% \begin{macrocode} +\newcommand\textfraction{.2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\floatpagefraction} +% This macro holds the minimum proportion (as a decimal number) of +% a page or column that must be occupied by floating objects before a +% `float page' is produced. +% \begin{macrocode} +\newcommand\floatpagefraction{.5} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@dbltopnumber} +% This counter holds the maximum number of double-column floats that +% can appear on the top of a two-column text page. +% \begin{macrocode} +\newcount\c@dbltopnumber +\setcounter{dbltopnumber}{2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\dbltopfraction} +% This macro holds the maximum proportion (as a decimal number) of +% a two-column text page that can be occupied by double-column floats +% at the top. +% \begin{macrocode} +\newcommand\dbltopfraction{.7} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\dblfloatpagefraction} +% This macro holds the minimum proportion (as a decimal number) of +% a page that must be occupied by double-column floating objects +% before a `double-column float page' is produced. +% \begin{macrocode} +\newcommand\dblfloatpagefraction{.5} +% \end{macrocode} +% \end{macro} +% +% \paragraph{Floats on a text page} +% +% \begin{macro}{\floatsep} +% \begin{macro}{\textfloatsep} +% \begin{macro}{\intextsep} +% When a floating object is placed on a page with text, these +% parameters control the seperation between the float and the other +% objects on the page. These parameters are used for both +% one-column mode and single-column floats in two-column mode. +% They are all rubber lengths. +% +% |\floatsep| is the space between adjacent floats that are placed +% at the top or bottom of the text page or column. +% +% |\textfloatsep| is the space between the main text and floats +% at the top or bottom of the page or column. +% +% |\intextsep| is the space between in-text floats and the text. +% \begin{macrocode} +\newskip\floatsep +\newskip\textfloatsep +\newskip\intextsep +\setlength\floatsep {12\p@ \@plus 2\p@ \@minus 2\p@} +\setlength\textfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@} +\setlength\intextsep {12\p@ \@plus 2\p@ \@minus 2\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\dblfloatsep} +% \begin{macro}{\dbltextfloatsep} +% When double-column floats (floating objects that span the whole +% |\textwidth|) are placed at the top of a text page in two-column +% mode, the separation between the float and the text is controlled +% by |\dblfloatsep| and |\dbltextfloatsep|. They are rubber lengths. +% +% |\dblfloatsep| is the space between adjacent double-column floats +% placed at the top of the text page. +% +% |\dbltextfloatsep| is the space between the main text and +% double-column floats at the top of the page. +% \begin{macrocode} +\newskip\dblfloatsep +\newskip\dbltextfloatsep +\setlength\dblfloatsep {12\p@ \@plus 2\p@ \@minus 2\p@} +\setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \paragraph{Floats on their own page or column} +% +% \begin{macro}{\@fptop} +% \begin{macro}{\@fpsep} +% \begin{macro}{\@fpbot} +% When floating objects are placed on a seperate page or column, +% called a `float page', the layout of the page is controlled by +% these parameters, which are rubber lengths. +% +% At the top of the page |\@fptop| is inserted; +% typically this supplies some stretchable whitespace. +% At the bottom of the page |\@fpbot| ais inserted. +% Between adjacent floats |\@fpsep| is inserted. +% +% These parameters are used for all floating objects on a +% `float page' in one-column mode, and for single-column +% floats in two-column mode. +% +% Note that at least one of the two parameters |\@fptop| and +% |\@fpbot| should contain a |plus ...fil| so as to fill the +% remaining empty space. +% \begin{macrocode} +\newskip\@fptop +\newskip\@fpsep +\newskip\@fpbot +\setlength\@fptop{0\p@ \@plus 1fil} +\setlength\@fpsep{8\p@ \@plus 2fil} +\setlength\@fpbot{0\p@ \@plus 1fil} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@dblfptop} +% \begin{macro}{\@dblfpsep} +% \begin{macro}{\@dblfpbot} +% Double-column `float pages' in two-column mode use similar +% parameters. +% \begin{macrocode} +\newskip\@dblfptop +\newskip\@dblfpsep +\newskip\@dblfpbot +\setlength\@dblfptop{0\p@ \@plus 1fil} +\setlength\@dblfpsep{8\p@ \@plus 2fil} +\setlength\@dblfpbot{0\p@ \@plus 1fil} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\topfigrule} +% \begin{macro}{\botfigrule} +% \begin{macro}{\dblfigrule} +% The macros can be used to put in rules between floats and text; +% whatever they insert should be vertical mode material which takes +% up zero space. +% \task{CAR}{Add more rules (for Frank in addtocurcol)} +% \begin{macrocode} +\let\topfigrule=\relax +\let\botfigrule=\relax +\let\dblfigrule=\relax +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \Finale +\endinput diff --git a/Master/texmf-dist/source/latex/base/ltpage.dtx b/Master/texmf-dist/source/latex/base/ltpage.dtx new file mode 100644 index 00000000000..e7ded9e0e48 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltpage.dtx @@ -0,0 +1,334 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltpage.dtx +% +%<*driver> +% \fi +\ProvidesFile{ltpage.dtx} + [2000/06/02 v1.0k LaTeX Kernel (page style setup)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltpage.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} + +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{175} +% +% \section{Page styles and related commands} +% +% +% \changes{v1.0a}{1994/03/07}{Initial version, split from ltherest.dtx} +% \changes{v1.0b}{1994/04/19}{Improve documentation} +% \changes{v1.0i}{1996/04/18}{Improve documentation} +% +% +% \subsection{Page Style Commands} +% +% |\pagestyle|\marg{style} : sets the page style of the +% current and succeeding pages to \emph{style} +% +% |\thispagestyle|\marg{style} : sets the page style of the +% current page only to \emph{style}. +% +% To define a page style \emph{style}, you must define +% |\ps@|\emph{style} to set the page style parameters. +% +% \subsection{How a page style makes running heads and feet} +% +% The |\ps@|\ldots command defines the macros |\@oddhead|, |\@oddfoot|, +% |\@evenhead|, and |\@evenfoot| to define the running heads and feet. +% (See output routine.) To make headings determined by the sectioning +% commands, the page style defines the commands |\chaptermark|, +% |\sectionmark|, etc., where |\chaptermark|\marg{text} is called by +% |\chapter| to set a mark. The |\...mark| commands and the |\...head| +% macros are defined with the help of the following macros. +% +% (All the |\...mark| commands should be initialized to no-ops.) +% +% \subsection{marking conventions} +% +% \LaTeX\ extends \TeX's |\mark| facility by producing two kinds of marks +% a `left' and a `right' mark, using the following commands:\\ +% |\markboth|\marg{left}\marg{right} : Adds both marks.\\ +% |\markright|\marg{right} : Adds a 'right' mark.\\ +% |\leftmark| : +% Used in the output routine, gets the current `left' mark. +% Works like \TeX's |\botmark.|\\ +% |\rightmark| : +% Used in the output routine, gets the current `right' mark. +% Works like \TeX's |\firstmark|. +% The marking commands work reasonably well for right marks `numbered +% within' left marks---e.g., the left mark is changed by a |\chapter| +% command and the right mark is changed by a |\section| command. +% However, it does produce somewhat anomalous results if 2 |\markboth|'s +% occur on the same page. +% +% Commands like |\tableofcontents| that should set the marks in some +% page styles use a |\@mkboth| command, which is |\let| by the pagestyle +% command (|\ps@...|) to |\markboth| for setting the heading or to +% |\@gobbletwo| to do nothing. +% +% \StopEventually{} +% +% \begin{macrocode} +%<*2ekernel> +% \end{macrocode} +% +% \begin{macro}{\pagestyle} +% User command to set the page style for this and following pages. +% \changes{LaTeX2e}{1994/01/24} +% {(DPC) Complain if pagestyle is undefined.} +% \changes{LaTeX2e}{1994/02/01} +% {(DPC) Modify to get nicer error message} +% \begin{macrocode} +\def\pagestyle#1{% + \@ifundefined{ps@#1}% + \undefinedpagestyle + {\@nameuse{ps@#1}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\thispagestyle} +% User command to set the page style for this page only. +% \changes{LaTeX2e}{1994/02/01} +% {(DPC) Modify to get nicer error message} +% \begin{macrocode} +\def\thispagestyle#1{% + \@ifundefined{ps@#1}% + \undefinedpagestyle + {\global\@specialpagetrue\gdef\@specialstyle{#1}}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\ps@empty} +% The empty page style: No head or foot line. +% \begin{macrocode} +\def\ps@empty{% + \let\@mkboth\@gobbletwo\let\@oddhead\@empty\let\@oddfoot\@empty + \let\@evenhead\@empty\let\@evenfoot\@empty} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ps@plain} +% \changes{v1.0g}{1995/05/26}{removed \cs{rmfamily} (PR 1578)} +% The plain page style: No head, centred page number in foot. +% \begin{macrocode} +\def\ps@plain{\let\@mkboth\@gobbletwo + \let\@oddhead\@empty\def\@oddfoot{\reset@font\hfil\thepage + \hfil}\let\@evenhead\@empty\let\@evenfoot\@oddfoot} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@leftmark} +% \begin{macro}{\@rightmark} +% We implement |\@leftmark| and |\@rightmark| in terms of already +% defined commands to save token space. We can't get rid of them +% since they are sometimes used in applications. +% \begin{macrocode} +\let\@leftmark\@firstoftwo +\let\@rightmark\@secondoftwo +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\markboth} +% \begin{macro}{\markright} +% \changes{v1.0d}{1994/05/20}{Changed setting for \cs{protect}.} +% \changes{v1.0e}{1994/11/04}{Added \cs{@unexpandable@protect}. +% ASAJ.} +% +% User commands for setting \LaTeX\ marks. +% +% Test for |\@nobreak| added 15 Apr 86 in |\markboth| and |\markright| +% letting |\label| and |\index| to |\relax| added 22 Feb 86 so these +% commands can appear in sectioning command arguments +% RmS 91/06/21 Same for |\glossary| +% \changes{v1.0k}{2000/06/02}{Tidied 1.0j reimplementation, CAR} +% \changes{v1.0k}{2000/06/02}{Small adjustment to give slightly less +% expansion, CAR} +% \changes{v1.0j}{2000/05/26}{Reimplementation to fix expansion +% error (pr/3203).} +% \begin{macrocode} +\def\markboth#1#2{% + \begingroup + \let\label\relax \let\index\relax \let\glossary\relax + \unrestored@protected@xdef\@themark {{#1}{#2}}% + \@temptokena \expandafter{\@themark}% + \mark{\the\@temptokena}% + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi} +\def\markright#1{% + \begingroup + \let\label\relax \let\index\relax \let\glossary\relax +% \end{macrocode} +% Protection is handled inside |\@markright|. +% \begin{macrocode} + \expandafter\@markright\@themark {#1}% + \@temptokena \expandafter{\@themark}% + \mark{\the\@temptokena}% + \endgroup + \if@nobreak\ifvmode\nobreak\fi\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@markright} +% \changes{v1.0j}{2000/05/26}{Reimplementation to fix expansion +% error (pr/3203).} +% \changes{v1.0k}{2000/06/02}{Small adjustment to give slightly less +% expansion, CAR} +% \begin{macro}{\leftmark} +% \changes{v1.0j}{2000/05/26}{Use \cs{@empty} instead of brace group +% (pr/3203).} +% \begin{macro}{\rightmark} +% \changes{LaTeX2e}{1993/12/17}{Stopgap solution to mark \cs{leftmark} +% and \cs{rightmark} work without initializing mark until +% the problem is solved.} +% \changes{v1.0j}{2000/05/26}{Use \cs{@empty} instead of brace group +% (pr/3203).} +% \task{???}{mark initialisation solved?} +% \begin{macrocode} +\def\@markright#1#2#3{\@temptokena {#1}% + \unrestored@protected@xdef\@themark{{\the\@temptokena}{#3}}} +\def\leftmark{\expandafter\@leftmark\botmark\@empty\@empty} +\def\rightmark{\expandafter\@rightmark\firstmark\@empty\@empty} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@themark} +% Initialise \LaTeX's marks without setting a \TeX\ mark \meta{whatsit}. +% \begin{macrocode} +\def\@themark{{}{}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\mark} +% Test versions of \LaTeXe\ initialised \TeX's |\mark| system +% at this point, but this was removed before the first release. +% \changes{LaTeX2e}{1993/12/16}{Init \cs{mark} at begin document} +% \changes{LaTeX2e}{1993/12/17}{Removed init \cs{mark} at begin +% document, since it doesn't work.} +%\begin{verbatim} +%\AtBeginDocument{\mark{{}{}}} +%\end{verbatim} +% \end{macro} +% +% +% \begin{macro}{\raggedbottom} +% |\raggedbottom| typesets pages with no vertical stretch, so they have +% their natural height instead of all being exactly the +% same height. (Uses a space of .0001fil to avoid +% interfering with the 1fil space of |\newpage|.) +% +% \begin{macrocode} +\def\raggedbottom{% + \def\@textbottom{\vskip \z@ \@plus.0001fil}\let\@texttop\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\flushbottom} +% |\flushbottom|: +% Inverse of |\raggedbottom| --- makes all pages the same height. +% \begin{macrocode} +\def\flushbottom{% + \let\@textbottom\relax \let\@texttop\relax} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\sloppy} +% |\sloppy| will never (well, hardly ever) produce overfull boxes, but +% may produce underfull ones. (14 June 85) +% \changes{LaTeX2e}{1993/12/18}{Added \cs{emergencystretch}} +% \changes{v1.0h}{1994/07/20}{Save a few tokens} +% \begin{macrocode} +\def\sloppy{% + \tolerance 9999% + \emergencystretch 3em% + \hfuzz .5\p@ + \vfuzz\hfuzz} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{sloppypar} +% A sloppypar environment is equivalent to |{\par \sloppy ... \par}|. +% \begin{macrocode} +\def\sloppypar{\par\sloppy} +\def\endsloppypar{\par} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\fussy} +% \changes{v1.0f}{1995/04/24}{reset \cs{emergencystretch} latex/1344} +% Resets \TeX's parameters to their normal finicky values. +% \begin{macrocode} +\def\fussy{% + \emergencystretch\z@ + \tolerance 200% + \hfuzz .1\p@ + \vfuzz\hfuzz} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\overfullrule} +% \LaTeX\ default is no overfull box rule. Changed by document +% class option. +% \begin{macrocode} +\overfullrule 0pt +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel> +% \end{macrocode} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltpageno.dtx b/Master/texmf-dist/source/latex/base/ltpageno.dtx new file mode 100644 index 00000000000..3deb9820936 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltpageno.dtx @@ -0,0 +1,101 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltpageno.dtx +% +%<*driver> +% \fi +\ProvidesFile{ltpageno.dtx} + [1994/05/19 v1.1a LaTeX Kernel (Page Numbering)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltpageno.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} + +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{16} +% +% \changes{v1.0c}{1994/03/29} +% {Create file ltcntlen from parts of ltmiscen and ltherest.} +% \changes{v1.1a}{1994/05/19} +% {Extract file ltpageno from ltcntlen.} +% +% \section{Page Numbering} +% Page numbers are produced by a page counter, used just like any other +% counter. The only difference is that |\c@page| contains the number of +% the next page to be output (the one currently being produced), rather +% than one minus it. Thus, it is normally initialized to~1 rather +% than~0. |\c@page| is defined to be |\count0|, rather than a count +% assigned by |\newcount|. +% +% \DescribeMacro{\pagenumbering} +% The user sets the pagenumber style with the |\pagenumbering|\marg{foo} +% command, which sets the page counter to 1 and defines |\thepage| to be +% |\foo|. For example, |\pagenumbering{roman}| causes pages to be +% numbered i, ii, etc. +% +% +% \StopEventually{} +% +% \begin{macrocode} +%<*2ekernel> +\message{page nos.,} +% \end{macrocode} +% +% +% \begin{macrocode} +\countdef\c@page=0 \c@page=1 +\def\cl@page{} +\def\pagenumbering#1{% + \global\c@page \@ne \gdef\thepage{\csname @#1\endcsname + \c@page}} +% \end{macrocode} +% +% \begin{macrocode} +%</2ekernel> +% \end{macrocode} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltpar.dtx b/Master/texmf-dist/source/latex/base/ltpar.dtx new file mode 100644 index 00000000000..417d45226b2 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltpar.dtx @@ -0,0 +1,196 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltpar.dtx +% +%<*driver> +% \fi +\ProvidesFile{ltpar.dtx} + [1995/04/29 v1.1c LaTeX Kernel (paragraphs)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltpar.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Tobias Oetiker \thanks{Tobi did the documentation update}\and + Chris Rowley\and + Rainer Sch\"opf} +\begin{document} + \maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{18} +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% \changes{v1.1a}{1994/05/16}{(ASAJ) Split from ltinit.dtx.} +% \changes{v1.1b}{1995/04/29}{(TO) Comments clean-up.} +% +% \section{Paragraphs} +% +% This section of the kernel declares the commands used to set +% |\par| and |\everypar| when ever their function needs to be +% changed for a long time. +% +% \StopEventually{} +% +% \subsection{Implementation} +% +% +% There are two situations in which |\par| may be changed: +% +% \begin{itemize} +% \item Long-term changes, in which the new value is to remain in effect +% until the current environment is left. The environments that +% change |\par| in this way are the following: +% \begin{itemize} +% \item All list environments (itemize, quote, etc.) +% \item Environments that turn |\par| into a noop: +% tabbing, array and tabular. +% \end{itemize} +% \item Temporary changes, in which |\par| is restored to its previous +% value the next time it is executed. The following are all such uses. +% \begin{itemize} +% \item |\end| when preceded by |\@endparenv|, which is called by +% |\endtrivlist| +% \item The mechanism for avoiding page breaks and getting the +% spacing right after section heads. +% \end{itemize} +% \end{itemize} +% +% \DescribeMacro{\@setpar} +% To permit the proper interaction of these two situations, long-term +% changes are made by the |\@setpar{|\meta{VAL}|}| command. +% It's function is: +% \begin{quote} +% To set |\par|. It |\def|'s |\par| and |\@par| to \meta{VAL}. +% \end{quote} +% +% \DescribeMacro{\@restorepar} +% Short-term changes are made by the usual |\def\par| commands. +% The original values are restored after a short-term change +% by the |\@restorepar| commands. +% +% \DescribeMacro{\@@par} +% |\@@par| always is defined to be the original \TeX{} |\par|. +% +% \DescribeMacro{\everypar} +% |\everypar| is changed only for the short term. Whenever |\everypar| +% is set non-null, it should restore itself to null when executed. +% +% The following commands change |\everypar| in this way: +% \begin{itemize} +% \item |\item| +% \item |\end| when preceded by |\@endparenv|, which is called by +% |endtrivlist| +% \item |\minipage| +% \end{itemize} +% +% When dealing with |\par| and |\everypar| remember the following two +% warnings: +% \begin{enumerate} +% \item Commands that make short-term changes to |\par| and |\everypar| +% must take account of the possibility that the new commands and the +% ones that do the restoration may be executed inside a group. In +% particular, |\everypar| is executed inside a group whenever a new +% paragraph begins with a left brace. The |\everypar| command +% that restores its definition should be local to the current +% group (in case the command +% is inside a minipage used inside someplace where |\everypar| has +% been redefined). Thus, if |\everypar| is redefined to do an +% |\everypar{}| it could take several executions of |\everypar| +% before the restoration ``holds''. This usually causes no problem. +% However, to prevent the extra executions from doing harm, +% use a global switch to keep anything harmful in the new +% |\everypar| from being done twice. +% \item Commands that change |\everypar| should remember that +% |\everypar| might be supposed to set the following switches false: +% \begin{itemize} +% \item |@nobreak| +% \item |@minipage| +% \end{itemize} +% they should do the setting if necessary. +% \end{enumerate} +% \begin{macrocode} +%<*2ekernel> +\message{par,} +% \end{macrocode} +% +% +% \begin{macro}{\@setpar} +% \begin{macro}{\@par} +% Initiate a long-term change to |\par|. +% \begin{macrocode} +\def\@setpar#1{\def\par{#1}\def\@par{#1}} +% \end{macrocode} +% +% The default definition of |\@par| will ensure that if +% |\@restorepar| defines |\par| to execute |\@par| it will redefine +% itself to the primitive |\@@par| after one iteration. +% \begin{macrocode} +\def\@par{\let\par\@@par\par} +%</2ekernel> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@restorepar} +% Restore from a short-term change to |\par|. +% \begin{macrocode} +\def\@restorepar{\def\par{\@par}} +% \end{macrocode} +% \end{macro} +% +% \Finale +\endinput + diff --git a/Master/texmf-dist/source/latex/base/ltpictur.dtx b/Master/texmf-dist/source/latex/base/ltpictur.dtx new file mode 100644 index 00000000000..a93f3f4cd67 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltpictur.dtx @@ -0,0 +1,1487 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltpictur.dtx +%<def>\ProvidesFile{autopict.sty} +%<def> [2001/08/27 v1.1k Picture mode autoload file] +%<*driver> +% \fi + \ProvidesFile{ltpictur.dtx} + [2003/12/30 v1.1j LaTeX Kernel (Picture Mode)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltpictur.dtx} +\title{\filename} +\date{\filedate} +\author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{1528} +% +% \changes{v1.0g}{1995/05/07}{Use \cs{hb@xt@}} +% \changes{v1.1a}{1995/05/19}{Support autoloading feature} +% \changes{v1.1b}{1995/06/13}{Use \cs{ProvidesFile} in autoload} +% \changes{v1.1d}{1995/07/12}{allow 2e commands in 209 mode. latex/1737} +% \changes{v1.1e}{1995/10/03}{New autoload code} +% \changes{v1.1h}{1999/04/15}{Replaced octal numbers, CAR} +% +% \section{Picture Mode} +% Picture mode commands. In addition to the commands available in +% \LaTeX2.09, This section adds the new |\qbezier| command for +% drawing curves. +% +% \DescribeMacro{\qbezier} +% |\qbezier|\oarg{N}\parg{AX,AY}\parg{BX,BY}\parg{CX,CY} +% plots a quadratic Bezier curve from \parg{AX,AY} to \parg{CX,CY}, +% with \parg{BX,BY} as the third Bezier point, using $N+1$ points +% equally spaced parametrically. +% If $N = 0$ (the default value), then a sufficient number of points +% are used to draw a connected curve--except that at most +% $|\qbeziermax| + 1$ points are drawn. A ``point'' is a square of +% side |\@wholewidth|. +% +% \DescribeMacro{\bezier} +% In addition, to be compatible with the old |bezier| package, a +% variant of this command, |\bezier|, is defined, in which the first +% argument is not optional. +% +% \StopEventually{} +% +% +% \changes{v0.1a}{1994/03/07}{Initial version, split from latex.dtx} +% \changes{v0.1a}{1994/03/07}{Long lines wrapped to 72 columns} +% \changes{v0.1b}{1994/04/24} +% {Removed surplus spaces after \cs{hbox to } in several cases} +% \changes{v0.1d}{1994/05/13} +% {Removed surplus braces from \cs{@if..} constructions} +% \changes{v0.1e}{1994/05/22}{Use new warning cmds} +% \changes{v1.0f}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% +% \begin{oldcomments} +% +% \unitlength = value of dimension argument +% \@wholewidth = current line width +% \@halfwidth = half of current line width +% \@linefnt = font for drawing lines +% \@circlefnt = font for drawing circles +% +% \linethickness{DIM} : Sets the width of horizontal and vertical lines +% in a picture to DIM. Does not change width of slanted lines +% or circles. Width of all lines reset by \thinlines and +% \thicklines +% +% \picture(XSIZE,YSIZE)(XORG,YORG) +% BEGIN +% \@picht :=L YSIZE * \unitlength +% box \@picbox := +% \hb@xt@ XSIZE * \unitlength +% {\hskip -XORG * \unitlength +% \lower YORG * \unitlength +% \hbox{ +% \ignorespaces %% added 13 June 89 +% END +% +% \endpicture == +% BEGIN +% } \hss } +% heigth of \@picbox := \@picht +% depth of \@picbox := 0 +% \mbox{\box\@picbox} %% change 26 Aug 91 +% END +% +% \put(X, Y){OBJ} == +% BEGIN +% \@killglue +% \raise Y * \unitlength \hb@xt@ 0pt { \hskip X * \unitlength +% OBJ \hss } +% \ignorespaces +% END +% +% \multiput(X,Y)(DELX,DELY){N}{OBJ} == +% BEGIN +% \@killglue +% \@multicnt := N +% \@xdim := X * \unitlength +% \@ydim := Y * \unitlength +% while \@multicnt > 0 +% do \raise \@ydim \hb@xt@ 0pt { \hskip \@xdim +% OBJ \hss } +% \@multicnt := \@multicnt - 1 +% \@xdim := \@xdim + DELX * \unitlength +% \@ydim := \@ydim + DELY * \unitlength +% od +% \ignorespaces +% END +% +% \shortstack[POS]{TEXT} : Makes a \vbox containing TEXT stacked as +% a one-column array, positioned l, r or c as indicated by POS. +% +% \end{oldcomments} +% +% The `2ekernel' code ensures that a |\usepackage{autopict}| is +% essentially ignored if a `full' format is being used that has +% picture mode already in the format. +% \begin{macrocode} +%<2ekernel>\expandafter\let\csname ver@autopict.sty\endcsname\fmtversion +% \end{macrocode} +% +% \begin{macro}{\@wholewidth} +% \begin{macro}{\@halfwidth} +% \begin{macrocode} +%<*2ekernel|autoload> +\newdimen\@wholewidth +\newdimen\@halfwidth +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\unitlength} +% \begin{macrocode} +\newdimen\unitlength \unitlength =1pt +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@picbox} +% \begin{macro}{\@picht} +% \begin{macrocode} +\newbox\@picbox +\newdimen\@picht +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\picture} +% \changes{v0.1c}{1994/04/28}{(DPC) Ignore spaces before (} +% |#1| should be white space. +% \begin{macro}{\pictur@} +% \changes{v1.0h}{1995/05/12}{Macro added for latex/1355} +% |#1| should be a |(| (eating any white space before the bracket), +% \begin{macrocode} +%<*2ekernel|def> +\long\gdef\picture#1{\pictur@#1} +\gdef\pictur@(#1){% + \@ifnextchar({\@picture(#1)}{\@picture(#1)(0,0)}} +%</2ekernel|def> +%<*autoload> +\def\pictur@{\@autoload{pict}} +\def\picture{\pictur@\picture} +%</autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@picture} +% \begin{macrocode} +%<*2ekernel|def> +\gdef\@picture(#1,#2)(#3,#4){% + \@picht#2\unitlength + \setbox\@picbox\hb@xt@#1\unitlength\bgroup + \hskip -#3\unitlength + \lower #4\unitlength\hbox\bgroup + \ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\endpicture} +% \changes{LaTeX2.09}{1991/08/26} +% {(RmS \& FMi) extra boxing level around \cs{@picbox} +% to guard against unboxing in math mode +% (proposed by John Hobby)} +% +% \begin{macrocode} +\gdef\endpicture{% + \egroup\hss\egroup + \ht\@picbox\@picht\dp\@picbox\z@ + \mbox{\box\@picbox}} +% \end{macrocode} +% \end{macro} +% +% In the definitions of |\put| and |\multiput|, |\hskip| was replaced by +% |\kern| just in case arg |#3| = ``plus''. (Bug detected by Don Knuth. +% changed 20 Jul 87). +% +% \begin{macrocode} +\long\gdef\put(#1,#2)#3{% + \@killglue\raise#2\unitlength + \hb@xt@\z@{\kern#1\unitlength #3\hss}% + \ignorespaces} +% \end{macrocode} +% +% +% \begin{macro}{\multiput} +% \changes{v0.1c}{1994/04/28}{(DPC) Ignore spaces between )(} +% |#3| had better be a |(|. +% \begin{macrocode} +\gdef\multiput(#1,#2)#3{% + \@xdim #1\unitlength + \@ydim #2\unitlength + \@multiput(} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\multiput} +% \changes{v0.1c}{1994/04/28}{(DPC) Macro added} +% \begin{macrocode} +\long\gdef\@multiput(#1,#2)#3#4{% + \@killglue\@multicnt #3\relax + \@whilenum \@multicnt >\z@\do + {\raise\@ydim\hb@xt@\z@{\kern\@xdim #4\hss}% + \advance\@multicnt\m@ne + \advance\@xdim#1\unitlength\advance\@ydim#2\unitlength}% + \ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@killglue} +% \begin{macrocode} +\gdef\@killglue{\unskip\@whiledim \lastskip >\z@\do{\unskip}} +%</2ekernel|def> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\thinlines} +% \begin{macro}{\thicklines} +% \begin{macrocode} +%<*2ekernel|def> +\gdef\thinlines{\let\@linefnt\tenln \let\@circlefnt\tencirc + \@wholewidth\fontdimen8\tenln \@halfwidth .5\@wholewidth} +\gdef\thicklines{\let\@linefnt\tenlnw \let\@circlefnt\tencircw + \@wholewidth\fontdimen8\tenlnw \@halfwidth .5\@wholewidth} +%</2ekernel|def> +%<*autoload> +\def\thinlines{\pictur@\thinlines} +\def\thicklines{\pictur@\thicklines} +%</autoload> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\linethickness} +% \begin{macrocode} +%<*2ekernel|def> +\gdef\linethickness#1{\@wholewidth #1\relax \@halfwidth .5\@wholewidth} +%</2ekernel|def> +%<*autoload> +\def\linethickness{\pictur@\linethickness} +%</autoload> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ishortstack} +% \begin{macrocode} +%<*2ekernel|def> +\gdef\shortstack{\@ifnextchar[\@shortstack{\@shortstack[c]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ishortstack} +% \begin{macrocode} +\gdef\@shortstack[#1]{% + \leavevmode + \vbox\bgroup + \baselineskip-\p@\lineskip 3\p@ + \let\mb@l\hss\let\mb@r\hss + \expandafter\let\csname mb@#1\endcsname\relax + \let\\\@stackcr + \@ishortstack} +% \end{macrocode} +% \end{macro} +% +% +% \changes{LaTeX2.09}{1991/08/14} +% {(RmS) inserted extra braces around entry for NFSS} +% \changes{LaTeX2.09}{1993/11/03} +% {(RmS) changed \cs{halign} to \cs{ialign} to initialize +% \cs{tabskip} and \cs{everycr}} +% +% \begin{macro}{\@ishortstack} +% \begin{macrocode} +\gdef\@ishortstack#1{\ialign{\mb@l {##}\unskip\mb@r\cr #1\crcr}\egroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@stackcr} +% \begin{macro}{\@ixstackcr} +% \begin{macrocode} +\gdef\@stackcr{\@ifstar\@ixstackcr\@ixstackcr} +\gdef\@ixstackcr{\@ifnextchar[\@istackcr{\cr\ignorespaces}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@istackcr} +% \begin{macrocode} +\gdef\@istackcr[#1]{\cr\noalign{\vskip #1}\ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{oldcomments} +% \line(X,Y){LEN} == +% BEGIN +% \@xarg := X +% \@yarg := Y +% \@linelen := LEN * \unitlength +% if \@xarg = 0 +% then \@vline +% else if \@yarg = 0 +% then \@hline +% else \@sline +% if +% if +% END +% +% \@sline == +% BEGIN +% if \@xarg < 0 +% then @negarg := T +% \@xarg := -\@xarg +% \@yyarg := -\@yarg +% else @negarg := F +% \@yyarg := \@yarg +% fi +% \@tempcnta := |\@yyarg| +% if \@tempcnta > 6 +% then error: 'LATEX ERROR: Illegal \line or \vector argument.' +% \@tempcnta := 0 +% fi +% \box\@linechar := \hbox{\@linefnt \@getlinechar(\@xarg,\@yyarg) } +% if \@yarg > 0 then \@upordown = \raise +% \@clnht := 0 +% else \@upordown = \lower +% \@clnht := height of \box\@linechar +% fi +% \@clnwd := width of \box\@linechar +% if @negarg +% then \hskip - width of \box\@linechar +% \reserved@a == \hskip - 2* width of box \@linechar +% else \reserved@a == \relax +% fi +% %% Put out integral number of line segments +% while \@clnwd < \@linelen +% do \@upordown \@clnht \copy\@linechar +% \reserved@a +% \@clnht := \@clnht + ht of \box\@linechar +% \@clnwd := \@clnwd + width of \box\@linechar +% od +% +% %% Put out last segment +% \@clnht := \@clnht - height of \box\@linechar +% \@clnwd := \@clnwd - width of \box\@linechar +% \@tempdima := \@linelen - \@clnwd +% \@tempdimb := \@tempdima - width of \box\@linechar +% if @negarg then \hskip -\@tempdimb +% else \hskip \@tempdimb +% fi +% \@tempdima := 1000 * \@tempdima +% \@tempcnta := \@tempdima / width of \box\@linechar +% \@tempdima := (\@tempcnta * ht of \box\@linechar)/1000 +% \@clnht := \@clnht + \@tempdima +% if \@linelen < width of box\@linechar +% then \hskip width of box\@linechar +% else \hbox{\@upordown \@clnht \copy\@linechar} +% fi +% END +% +% \@hline == +% BEGIN +% if \@xarg < 0 then \hskip -\@linelen \fi +% \vrule height \@halfwidth depth \@halfwidth width \@linelen +% if \@xarg < 0 then \hskip -\@linelen \fi +% END +% +% \@vline == if \@yarg < 0 \@downline else \@upline fi +% +% +% \@getlinechar(X,Y) == +% BEGIN +% \@tempcnta := 8*X - 9 +% if Y > 0 +% then \@tempcnta := \@tempcnta + Y +% else \@tempcnta := \@tempcnta - Y + 64 +% fi +% \char\@tempcnta +% END +% +% \vector(X,Y){LEN} == +% BEGIN +% \@xarg := X +% \@yarg := Y +% \@linelen := LEN * \unitlength +% if \@xarg = 0 +% then \@vvector +% else if \@yarg = 0 +% then \@hvector +% else \@svector +% if +% if +% END +% +% \@hvector == +% BEGIN +% \@hline +% {\@linefnt if \@xarg < 0 then \@getlarrow(1,0) +% else \@getrarrow(1,0) +% fi} +% END +% +% \@vvector == if \@yarg < 0 \@downvector else \@upvector fi +% +% \@svector == +% BEGIN +% \@sline +% \@tempcnta := |\@yarg| +% if \@tempcnta < 5 +% then \hskip - width of \box\@linechar +% \@upordown \@clnht \hbox +% {\@linefnt +% if @negarg then \@getlarrow(\@xarg,\@yyarg) +% else \@getrarrow(\@xarg,\@yyarg) +% fi } +% else error: 'LATEX ERROR: Illegal \line or \vector argument.' +% fi +% END +% +% \@getlarrow(X,Y) == +% BEGIN +% if Y = 0 +% then \@tempcnta := '33 +% else \@tempcnta := 16 * X - 9 +% \@tempcntb := 2 * Y +% if \@tempcntb > 0 +% then \@tempcnta := \@tempcnta + \@tempcntb +% else \@tempcnta := \@tempcnta - \@tempcntb + 64 +% fi +% fi +% \char\@tempcnta +% END +% +% \@getrarrow(X,Y) == +% BEGIN +% \@tempcntb := |Y| +% case of \@tempcntb +% 0 : \@tempcnta := '55 +% 1 : if X < 3 +% then \@tempcnta := 24*X - 6 +% else if X = 3 +% then \@tempcnta := 49 +% else \@tempcnta := 58 fi +% fi +% 2 : if X < 3 +% then \@tempcnta := 24*X - 3 +% else \@tempcnta := 51 % X must = 3 +% fi +% 3 : \@tempcnta := 16*X - 2 +% 4 : \@tempcnta := 16*X + 7 +% endcase +% if Y < 0 +% then \@tempcnta := \@tempcnta + 64 +% fi +% \char\@tempcnta +% END +% \end{oldcomments} +% +% \begin{macro}{\if@negarg} +% \begin{macrocode} +\newif\if@negarg +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\line} +% \begin{macrocode} +\gdef\line(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax + \@linelen #3\unitlength + \ifdim\@linelen<\z@\@badlinearg\else + \ifnum\@xarg =\z@ \@vline + \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi + \fi + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@sline} +% \begin{macrocode} +\gdef\@sline{% + \ifnum\@xarg<\z@ \@negargtrue \@xarg -\@xarg \@yyarg -\@yarg + \else \@negargfalse \@yyarg \@yarg \fi +\ifnum \@yyarg >\z@ \@tempcnta\@yyarg \else \@tempcnta -\@yyarg \fi +\ifnum\@tempcnta>6 \@badlinearg\@tempcnta\z@ \fi +\ifnum\@xarg>6 \@badlinearg\@xarg \@ne \fi +\setbox\@linechar\hbox{\@linefnt\@getlinechar(\@xarg,\@yyarg)}% +% \end{macrocode} +% If we have something like |\line(5,5){30}| the |\@linechar| will +% not contain a char and later on we will end in an infinite loop. +% So we check the width of the box and put in something as an +% emergency fix if necessary. +% \changes{v1.1k}{2003/08/27}{check for \cs{@linechar} being empty pr/3570} +% \begin{macrocode} +\ifdim\wd\@linechar=\z@ + \setbox\@linechar\hbox{.}% + \@badlinearg +\fi +\ifnum \@yarg >\z@ \let\@upordown\raise \@clnht\z@ + \else\let\@upordown\lower \@clnht \ht\@linechar\fi +\@clnwd \wd\@linechar +\if@negarg + \hskip -\wd\@linechar \def\reserved@a{\hskip -2\wd\@linechar}% +\else + \let\reserved@a\relax +\fi +\@whiledim \@clnwd <\@linelen \do + {\@upordown\@clnht\copy\@linechar + \reserved@a + \advance\@clnht \ht\@linechar + \advance\@clnwd \wd\@linechar}% +\advance\@clnht -\ht\@linechar +\advance\@clnwd -\wd\@linechar +\@tempdima\@linelen\advance\@tempdima -\@clnwd +\@tempdimb\@tempdima\advance\@tempdimb -\wd\@linechar +\if@negarg \hskip -\@tempdimb \else \hskip \@tempdimb \fi +\multiply\@tempdima \@m +\@tempcnta \@tempdima +\@tempdima \wd\@linechar \divide\@tempcnta \@tempdima +\@tempdima \ht\@linechar \multiply\@tempdima \@tempcnta +\divide\@tempdima \@m +\advance\@clnht \@tempdima +\ifdim \@linelen <\wd\@linechar + \hskip \wd\@linechar +% \end{macrocode} +% Warn if line gets so short that it can't be printed. +% \changes{v1.1g}{1997/09/15}{Warn if lines become invisible pr/2524} +% But don't warn if it is exactly zero since that was probably +% deliberate (e.g., to get a vector head only). +% \changes{v1.1j}{2001/06/04}{Don't warn for exactly zero pr/3318} +% \begin{macrocode} + \ifdim \@linelen = \z@ + \else + \@picture@warn + \fi + \else\@upordown\@clnht\copy\@linechar\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@hline} +% \begin{macrocode} +\gdef\@hline{\ifnum \@xarg <\z@ \hskip -\@linelen \fi +\vrule \@height \@halfwidth \@depth \@halfwidth \@width \@linelen +\ifnum \@xarg <\z@ \hskip -\@linelen \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\getlinechar} +% \begin{macrocode} +\gdef\@getlinechar(#1,#2){\@tempcnta#1\relax\multiply\@tempcnta 8% + \advance\@tempcnta -9\ifnum #2>\z@ \advance\@tempcnta #2\relax\else + \advance\@tempcnta -#2\relax\advance\@tempcnta 64 \fi + \char\@tempcnta} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\vector} +% \begin{macrocode} +\gdef\vector(#1,#2)#3{\@xarg #1\relax \@yarg #2\relax + \@tempcnta \ifnum\@xarg<\z@ -\@xarg\else\@xarg\fi + \ifnum\@tempcnta<5\relax + \@linelen #3\unitlength + \ifdim\@linelen<\z@\@badlinearg\else + \ifnum\@xarg =\z@ \@vvector + \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi + \fi + \fi + \else\@badlinearg\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@hvector} +% \begin{macrocode} +\gdef\@hvector{\@hline\hb@xt@\z@{\@linefnt + \ifnum \@xarg <\z@ \@getlarrow(1,0)\hss\else + \hss\@getrarrow(1,0)\fi}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@vvector} +% \begin{macrocode} +\gdef\@vvector{\ifnum \@yarg <\z@ \@downvector \else \@upvector \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@svector} +% \begin{macrocode} +\gdef\@svector{\@sline + \@tempcnta\@yarg \ifnum\@tempcnta <\z@ \@tempcnta -\@tempcnta\fi + \ifnum\@tempcnta <5% + \hskip -\wd\@linechar + \@upordown\@clnht \hbox{\@linefnt \if@negarg + \@getlarrow(\@xarg,\@yyarg)\else \@getrarrow(\@xarg,\@yyarg)\fi}% + \else\@badlinearg\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@getlarrow} +% \changes{v1.1h}{1999/04/15}{Replaced octal number, CAR} +% \begin{macrocode} +\gdef\@getlarrow(#1,#2){\ifnum #2=\z@ \@tempcnta 27 % '33 + \else + \@tempcnta #1\relax\multiply\@tempcnta \sixt@@n + \advance\@tempcnta -9 \@tempcntb #2\relax\multiply\@tempcntb \tw@ + \ifnum \@tempcntb >\z@ \advance\@tempcnta \@tempcntb + \else\advance\@tempcnta -\@tempcntb\advance\@tempcnta 64 + \fi\fi\char\@tempcnta} +% \end{macrocode} +% \end{macro} +% +% \changes{v1.1h}{1999/04/15}{Replaced octal number, CAR} +% \begin{macro}{\@getrarrow} +% \begin{macrocode} +\gdef\@getrarrow(#1,#2){\@tempcntb #2\relax +\ifnum\@tempcntb <\z@ \@tempcntb -\@tempcntb\relax\fi +\ifcase \@tempcntb\relax \@tempcnta 45 % '55 +\or +\ifnum #1<\thr@@ \@tempcnta #1\relax\multiply\@tempcnta +24\advance\@tempcnta -6 \else \ifnum #1=\thr@@ \@tempcnta 49 +\else\@tempcnta 58 \fi\fi\or +\ifnum #1<\thr@@ \@tempcnta=#1\relax\multiply\@tempcnta +24\advance\@tempcnta -\thr@@ \else \@tempcnta 51 \fi\or +\@tempcnta #1\relax\multiply\@tempcnta +\sixt@@n \advance\@tempcnta -\tw@ \else +\@tempcnta #1\relax\multiply\@tempcnta +\sixt@@n \advance\@tempcnta 7 \fi\ifnum #2<\z@ \advance\@tempcnta 64 \fi +\char\@tempcnta} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@vline} +% \begin{macrocode} +\gdef\@vline{\ifnum \@yarg <\z@ \@downline \else \@upline\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@upline} +% \begin{macrocode} +\gdef\@upline{% + \hb@xt@\z@{\hskip -\@halfwidth \vrule \@width \@wholewidth + \@height \@linelen \@depth \z@\hss}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@downline} +% \begin{macrocode} +\gdef\@downline{% + \hb@xt@\z@{\hskip -\@halfwidth \vrule \@width \@wholewidth + \@height \z@ \@depth \@linelen \hss}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@upvector} +% \changes{v1.1h}{1999/04/15}{Replaced octal number, CAR} +% \changes{v1.1i}{2000/01/15}{Removed space at end-of-line, CAR} +% \begin{macrocode} +\gdef\@upvector{\@upline\setbox\@tempboxa\hbox{\@linefnt\char 54}% % '66 + \raise \@linelen \hb@xt@\z@{\lower \ht\@tempboxa\box\@tempboxa\hss}} +% \end{macrocode} +% \end{macro} +% +% \changes{v1.1h}{1999/04/15}{Replaced octal number, CAR} +% \begin{macro}{\@downvector} +% \begin{macrocode} +\gdef\@downvector{\@downline\lower \@linelen + \hb@xt@\z@{\@linefnt\char 63 % '77 + \hss}} +% \end{macrocode} +% \end{macro} +% +% \begin{oldcomments} +% \dashbox{D}(X,Y) == +% BEGIN +% leave vertical mode +% \hb@xt@ 0pt { +% \baselineskip := 0pt +% \lineskip := 0pt +% %% HORIZONTAL DASHES +% \@dashdim := X * \unitlength +% \@dashcnt := \@dashdim + 200 % to prevent roundoff error +% \@dashdim := D * \unitlength +% \@dashcnt := \@dashcnt / \@dashdim +% if \@dashcnt is odd +% then \@dashdim := 0pt +% \@dashcnt := (\@dashcnt + 1) / 2 +% else \@dashdim := \@dashdim / 2 +% \@dashcnt := \@dashcnt / 2 - 1 +% \box\@dashbox := \hbox{\vrule height \@halfwidth +% depth \@halfwidth width \@dashdim} +% \put(0,0){\copy\@dashbox} +% \put(0,Y){\copy\@dashbox} +% \put(X,0){\hskip -\@dashdim\copy\@dashbox} +% \put(X,Y){\hskip -\@dashdim\box\@dashbox} +% \@dashdim := 3 * \@dashdim +% fi +% \box\@dashbox := \hbox{\vrule height \@halfwidth +% depth \@halfwidth width D * \unitlength +% \hskip D * \unitlength} +% \@tempcnta := 0 +% \put(0,0){\hskip \@dashdim +% while \@tempcnta < \@dascnt +% do \copy\@dashbox +% \@tempcnta := \@tempcnta + 1 +% od +% } +% \@tempcnta := 0 +% put(0,Y){\hskip \@dashdim +% while \@tempcnta < \@dascnt +% do \copy\@dashbox +% \@tempcnta := \@tempcnta + 1 +% od +% } +% +% %% vertical dashes +% \@dashdim := Y * \unitlength +% \@dashcnt := \@dashdim + 200 % to prevent roundoff error +% \@dashdim := D * \unitlength +% \@dashcnt := \@dashcnt / \@dashdim +% if \@dashcnt is odd +% then \@dashdim := 0pt +% \@dashcnt := (\@dashcnt + 1) / 2 +% else \@dashdim := \@dashdim / 2 +% \@dashcnt := \@dashcnt / 2 - 1 +% \box\@dashbox := \hbox{\hskip -\@halfwidth +% \vrule width \@wholewidth +% height \@dashdim } +% \put(0,0){\copy\@dashbox} +% \put(X,0){\copy\@dashbox} +% \put(0,Y){\lower\@dashdim\copy\@dashbox} +% \put(X,Y){\lower\@dashdim\copy\@dashbox} +% \@dashdim := 3 * \@dashdim +% fi +% \box\@dashbox := \hbox{\vrule width \@wholewidth +% height D * \unitlength } +% \@tempcnta := 0 +% put(0,0){\hskip -\halfwidth +% \vbox{while \@tempcnta < \@dashcnt +% do \vskip D*\unitlength +% \copy\@dashbox +% \@tempcnta := \@tempcnta + 1 +% od +% \vskip \@dashdim +% } } +% \@tempcnta := 0 +% put(X,0){\hskip -\halfwidth +% \vbox{while \@tempcnta < \@dashcnt +% do \vskip D*\unitlength +% \copy\@dashbox +% \@tempcnta := \@tempcnta + 1 +% od +% \vskip \@dashdim +% } +% } +% } % END DASHES +% +% \@imakepicbox(X,Y) +% END +% \end{oldcomments} +% +% \begin{macro}{\dashbox} +% \begin{macrocode} +\gdef\dashbox#1(#2,#3){\leavevmode\hb@xt@\z@{\baselineskip \z@skip +\lineskip \z@skip +\@dashdim #2\unitlength +\@dashcnt \@dashdim \advance\@dashcnt 200 +\@dashdim #1\unitlength\divide\@dashcnt \@dashdim +\ifodd\@dashcnt\@dashdim \z@ +\advance\@dashcnt \@ne \divide\@dashcnt \tw@ +\else \divide\@dashdim \tw@ \divide\@dashcnt \tw@ +\advance\@dashcnt \m@ne +\setbox\@dashbox \hbox{\vrule \@height \@halfwidth \@depth \@halfwidth +\@width \@dashdim}\put(0,0){\copy\@dashbox}% +\put(0,#3){\copy\@dashbox}% +\put(#2,0){\hskip-\@dashdim\copy\@dashbox}% +\put(#2,#3){\hskip-\@dashdim\box\@dashbox}% +\multiply\@dashdim \thr@@ +\fi +\setbox\@dashbox \hbox{\vrule \@height \@halfwidth \@depth \@halfwidth +\@width #1\unitlength\hskip #1\unitlength}\@tempcnta\z@ +\put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt +\do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@ +\put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt +\do{\copy\@dashbox\advance\@tempcnta \@ne }}% +\@dashdim #3\unitlength +\@dashcnt \@dashdim \advance\@dashcnt 200 +\@dashdim #1\unitlength\divide\@dashcnt \@dashdim +\ifodd\@dashcnt \@dashdim \z@ +\advance\@dashcnt \@ne \divide\@dashcnt \tw@ +\else +\divide\@dashdim \tw@ \divide\@dashcnt \tw@ +\advance\@dashcnt \m@ne +\setbox\@dashbox\hbox{\hskip -\@halfwidth +\vrule \@width \@wholewidth +\@height \@dashdim}\put(0,0){\copy\@dashbox}% +\put(#2,0){\copy\@dashbox}% +\put(0,#3){\lower\@dashdim\copy\@dashbox}% +\put(#2,#3){\lower\@dashdim\copy\@dashbox}% +\multiply\@dashdim \thr@@ +\fi +\setbox\@dashbox\hbox{\vrule \@width \@wholewidth +\@height #1\unitlength}\@tempcnta\z@ +\put(0,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt +\do{\vskip #1\unitlength\copy\@dashbox\advance\@tempcnta \@ne }% +\vskip\@dashdim}}\@tempcnta\z@ +\put(#2,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta<\@dashcnt +\do{\vskip #1\unitlength\copy\@dashbox\advance\@tempcnta \@ne }% +\vskip\@dashdim}}}\@makepicbox(#2,#3)} +% \end{macrocode} +% \end{macro} +% +% \begin{oldcomments} +% CIRCLES AND OVALS +% +% USER COMMANDS: +% +% \circle{D} : Produces the circle with the diameter as close as +% possible to D * \unitlength. \put(X,Y){\circle{D}} +% puts the circle with its center at (X,Y). +% +% \oval(X,Y) : Makes an oval as round as possible that fits in the +% rectangle of width X * \unitlength and height +% Y * \unitlength. The reference point is the center. +% +% \oval(X,Y)[POS] : Save as \oval(X,Y) except it draws only the +% half or quadrant of the oval indicated by POS. +% E.G., \oval(X,Y)[t] draws just the top half +% and \oval(X,Y)[br] draws just the bottom right +% quadrant. In all cases, the reference point is +% the same as the unqualified \oval(X,Y) command. +% +% \@ovvert {DELTA1} {DELTA2} : Makes a vbox containing either the left +% side or the right side of the oval being constructed. The baseline +% will coincide with the outside bottom edge of the oval; the left +% side of the box will coincide with the left edge of the vertical +% rule. The width of the box will be \@tempdima. +% DELTA1 and DELTA2 are added to the character number in \@tempcnta +% to get the characters for the top and bottom quarter circle pieces. +% +% \@ovhorz : Makes an hbox containing the straight rule for either the +% top or the bottom of the oval being constructed. The baseline +% will coincide with bottom edge of the rule; the left side of +% the box will coincide with the left side of the oval. +% The width of the box will be \@ovxx. +% +% \@getcirc {DIAM} : Sets \@tempcnta to the character number +% of the top-right quarter circle with the largest +% diameter less than or equal to DIAM. +% Sets \@tempboxa to an hbox containing that character. +% Sets \@tempdima to \wd \@tempboxa, which is the distance +% from the circle's left outside edge to its right +% inside edge. +% (These characters are like those described in the +% TeXbook, pp. 389-90.) +% +% \@getcirc {DIAM} == +% BEGIN +% \@tempcnta := integer coercion of (DIAM + 2pt) +% + 2pt added 1 Nov 88 +% \@tempcnta := \@tempcnta / integer coercion of 4pt +% if \@tempcnta > 10 +% then \@tempcnta := 10 fi +% if \@tempcnta > 0 +% then \@tempcnta := \@tempcnta-1 +% else LaTeX Warning: Oval too small. +% fi +% \@tempcnta := 4 * \@tempcnta +% \@tempboxa := \hbox{\@circlefnt \char \@tempcnta} +% \@tempdima := \wd \@tempboxa +% END +% +% \@put{X}{Y}{OBJ} == +% BEGIN +% \raise Y \hb@xt@ 0pt{\hskip X OBJ \hss} +% END +% +% \@oval(X,Y)[POS] == +% BEGIN +% \begingroup +% \boxmaxdepth := \maxdimen +% @ovt := @ovb := @ovl := @ovr := true +% for all E in POS +% do @ovE := false od +% \@ovxx := X * \unitlength +% \@ovyy := Y * \unitlength +% \@tempdimb := min(\@ovxx,\@ovyy) +% \@getcirc{\@tempdimb-2pt} %% "-2pt" added 7 Dec 89 +% \@ovro := \ht \@tempboxa +% \@ovri := \dp \@tempboxa +% \@ovdx := \@ovxx - \@tempdima +% \@ovdx := \@ovdx/2 +% \@ovdy := \@ovyy - \@tempdima +% \@ovdy := \@ovyy/2 +% \@circlefnt +% \@tempboxa := +% \hbox{ +% if @ovr +% then \@ovvert{3}{2} \kern -\@tempdima +% fi +% if @ovl +% then \kern \@ovxx \@ovvert{0}{1} \kern -\@tempdima +% \kern -\@ovxx +% fi +% if @ovt +% then \@ovhorz \kern -\@ovxx +% fi +% if @ovb +% then \raise \@ovyy \@ovhorz +% fi +% } +% \@ovdx := \@ovdx + \@ovro +% \@ovdy := \@ovdy + \@ovro +% \ht\@tempboxa := \dp\@tempboxa := 0 +% \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa} +% \endgroup +% END +% +% \@ovvert {DELTA1} {DELTA2} == +% BEGIN +% \vbox to \@ovyy { +% if @ovb +% then \@tempcntb := \@tempcnta + DELTA1 +% \kern -\@ovro +% \hbox { \char \@tempcntb } +% \nointerlineskip +% else \kern \@ovri \kern \@ovdy +% fi +% \leaders \vrule width \@wholewidth \vfil +% \nointerlineskip +% if @ovt +% then \@tempcntb := \@tempcnta + DELTA2 +% \hbox { \char \@tempcntb } +% else \kern \@ovdy \kern \@ovro +% fi +% } +% END +% +% \@ovhorz == +% BEGIN +% \hb@xt@ \@ovxx{ +% \kern \@ovro +% if @ovr +% then +% else \kern \@ovdx +% fi +% \leaders \hrule height \@wholewidth \hfil +% if @ovl +% then +% else \kern \@ovdx +% fi +% \kern \@ovri +% } +% END +% +% \circle{DIAM} == +% BEGIN +% \begingroup +% \boxmaxdepth := maxdimen +% \@tempdimb := DIAM *\unitlength +% if \@tempdimb > 15.5pt +% then \@getcirc{\@tempdimb} +% \@ovro := \ht \@tempboxa +% \@tempboxa := \hbox{ +% \@circlefnt +% \@tempcnta := \@tempcnta + 2 +% \char \@tempcnta +% \@tempcnta := \@tempcnta - 1 +% \char \@tempcnta +% \kern -2\@tempdima +% \@tempcnta := \@tempcnta + 2 +% \raise \@tempdima \hbox { \char \@tempcnta } +% \raise \@tempdima \box\@tempboxa +% } +% \ht\@tempboxa := \dp\@tempboxa := 0 +% \@put{-\@ovro}{-\@ovro}{\@tempboxa} +% else +% \@circ{\@tempdimb}{96} +% fi +% \endgroup +% END +% +% \circle*{DIAM} == \@dot{DIAM} == \@circ{DIAM*\unitlength}{112} +% +% \@circ{DIAM}{CHAR} == +% BEGIN +% \@tempcnta := integer coercion of (DIAM + .5pt)/1pt. +% if \@tempcnta > 15 then \@tempcnta := 15 fi +% if \@tempcnta > 1 then \@tempcnta := \@tempcnta - 1 fi +% \@tempcnta := \@tempcnta + CHAR +% \@circlefnt +% \char \@tempcnta +% END +% \end{oldcomments} +% +% +% \begin{macro}{\if@ovt} +% \begin{macro}{\if@ovb} +% \begin{macro}{\if@ovl} +% \begin{macro}{\if@ovr} +% If producing the Top Bottom Left or Right of an oval. +% \begin{macrocode} +\newif\if@ovt +\newif\if@ovb +\newif\if@ovl +\newif\if@ovr +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel|def> +%<*2ekernel|autoload> +% \end{macrocode} +% +% \begin{macro}{\@ovxx} +% \begin{macro}{\@ovyy} +% \begin{macro}{\@ovdx} +% \begin{macro}{\@ovdy} +% \begin{macro}{\@ovro} +% \begin{macro}{\@ovri} +% \begin{macrocode} +\newdimen\@ovxx +\newdimen\@ovyy +\newdimen\@ovdx +\newdimen\@ovdy +\newdimen\@ovro +\newdimen\@ovri +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel|autoload> +% \end{macrocode} +% +% |\advance\@tempdima 2pt\relax| added 1 Nov 88 to fix bug in which +% size of drawn circle not monotonic function of argument of |\circle|, +% caused by different rounding for dimensions of large and small +% circles. +% +% \begin{macrocode} +%<*2ekernel|def> +% \end{macrocode} +% +% \begin{macro}{\@getcirc} +% \changes{v1.1j}{2003/12/30}{issue warning if circle size can't be met pr/3473} +% \begin{macrocode} +\gdef\@getcirc#1{\@tempdima #1\relax \advance\@tempdima 2\p@ + \@tempcnta\@tempdima + \@tempdima 4\p@ \divide\@tempcnta\@tempdima + \ifnum \@tempcnta >10\relax + \@picture@warn + \@tempcnta 10\relax + \fi + \ifnum \@tempcnta >\z@ \advance\@tempcnta\m@ne +% \end{macrocode} +% Warn if requirements for oval or circle can't be met. +% \changes{v1.1g}{1997/09/15}{Warn if lines become invisible pr/2524} +% \begin{macrocode} + \else \@picture@warn \fi + \multiply\@tempcnta 4\relax + \setbox \@tempboxa \hbox{\@circlefnt + \char \@tempcnta}\@tempdima \wd \@tempboxa} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@picture@warn} +% Generic warning for lines, vectors (used in |\@sline|) and +% oval or circle (used un |\@getcirc|) are not available at +% right size. +% \changes{v1.1g}{1997/09/15}{Macro added pr/2524} +% \begin{macrocode} +\def\@picture@warn{\@latex@warning{% + \string\oval, \string\circle, or \string\line\space + size unavailable}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@put} +% \begin{macrocode} +\gdef\@put#1#2#3{\raise #2\hb@xt@\z@{\hskip #1#3\hss}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\oval} +% \begin{macrocode} +\gdef\oval(#1,#2){\@ifnextchar[{\@oval(#1,#2)}{\@oval(#1,#2)[]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@oval} +% \begin{macrocode} +\gdef\@oval(#1,#2)[#3]{\begingroup\boxmaxdepth \maxdimen + \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue + \@tfor\reserved@a :=#3\do{\csname @ov\reserved@a false\endcsname}% + \@ovxx + #1\unitlength \@ovyy #2\unitlength + \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx\else \@ovyy \fi + \advance \@tempdimb -2\p@ + \@getcirc \@tempdimb + \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa + \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@ + \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@ + \@circlefnt \setbox\@tempboxa + \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi + \if@ovl \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx \fi + \if@ovt \@ovhorz \kern -\@ovxx \fi + \if@ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro + \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@ + \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}% + \endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ovvert} +% \begin{macrocode} +\gdef\@ovvert#1#2{\vbox to\@ovyy{% + \if@ovb \@tempcntb \@tempcnta \advance \@tempcntb #1\relax + \kern -\@ovro \hbox{\char \@tempcntb}\nointerlineskip + \else \kern \@ovri \kern \@ovdy \fi + \leaders\vrule \@width \@wholewidth\vfil \nointerlineskip + \if@ovt \@tempcntb \@tempcnta \advance \@tempcntb #2\relax + \hbox{\char \@tempcntb}% + \else \kern \@ovdy \kern \@ovro \fi}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ovhorz} +% \begin{macrocode} +\gdef\@ovhorz{\hb@xt@\@ovxx{\kern \@ovro + \if@ovr \else \kern \@ovdx \fi + \leaders \hrule \@height \@wholewidth \hfil + \if@ovl \else \kern \@ovdx \fi + \kern \@ovri}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\circle} +% \changes{LaTeX2.09}{1993/08/05} +% {(RMS) Added error message if \cs{circle} is used in math mode.} +% \begin{macrocode} +\gdef\circle{\@inmatherr\circle\@ifstar\@dot\@circle} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@circle} +% \begin{macrocode} +\gdef\@circle#1{% + \begingroup \boxmaxdepth \maxdimen \@tempdimb #1\unitlength + \ifdim \@tempdimb >15.5\p@ \@getcirc\@tempdimb + \@ovro\ht\@tempboxa + \setbox\@tempboxa\hbox{\@circlefnt + \advance\@tempcnta\tw@ \char \@tempcnta + \advance\@tempcnta\m@ne \char \@tempcnta \kern -2\@tempdima + \advance\@tempcnta\tw@ + \raise \@tempdima \hbox{\char\@tempcnta}\raise \@tempdima + \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@ + \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}% + \else \@circ\@tempdimb{96}\fi\endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@dot} +% Internal form of |\circle*|. +% \begin{macrocode} +\gdef\@dot#1{\@tempdimb #1\unitlength \@circ\@tempdimb{112}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@circ} +% \begin{macrocode} +\gdef\@circ#1#2{\@tempdima #1\relax \advance\@tempdima .5\p@ + \@tempcnta\@tempdima \@tempdima \p@ + \divide\@tempcnta\@tempdima + \ifnum\@tempcnta >15\relax \@tempcnta 15\relax \fi + \ifnum \@tempcnta >\z@ \advance\@tempcnta\m@ne\fi + \advance\@tempcnta #2\relax + \@circlefnt \char\@tempcnta} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel|def> +% \end{macrocode} +% +% \begin{macrocode} +%<*2ekernel|autoload> +% \end{macrocode} +% +% \begin{macro}{\@xarg} +% \begin{macro}{\@yarg} +% \begin{macro}{\@yyarg} +% Counters used for manipulating the `slope' arguments. +% \begin{macrocode} +\newcount\@xarg +\newcount\@yarg +\newcount\@yyarg +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@multicnt} +% Counter used in |\multiput|, and also |\multicolumn|. +% \begin{macrocode} +\newcount\@multicnt +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xdim} +% \begin{macro}{\yxdim} +% Length registers. +% \begin{macrocode} +\newdimen\@xdim +\newdimen\@ydim +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@linechar} +% Box for holding a line segment character, for sloping lines. +% \begin{macrocode} +\newbox\@linechar +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@linelen} +% Length of the line currently being built. +% \begin{macrocode} +\newdimen\@linelen +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@clnwd} +% \begin{macro}{\@clnht} +% Height and width of current line segment. +% \begin{macrocode} +\newdimen\@clnwd +\newdimen\@clnht +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@dashdim} +% \begin{macro}{\@dashbox} +% \begin{macro}{\@dashcnt} +% |\dashbox| internal registers. +% \begin{macrocode} +\newdimen\@dashdim +\newbox\@dashbox +\newcount\@dashcnt +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% Initialization: ``|\thinlines|'' +% \changes{v1.1f}{1995/10/27} +% {Move initialisation to kernel from autoload file} +% \begin{macrocode} +\let\@linefnt\tenln +\let\@circlefnt\tencirc +\@wholewidth\fontdimen8\tenln +\@halfwidth .5\@wholewidth +% \end{macrocode} +% +% \begin{macrocode} +%</2ekernel|autoload> +% \end{macrocode} +% +% +% \subsection{Curves} +% The new |\qbezier| command, based on the old |\bezier| defined in +% |bezier.sty|. +% \changes{v0.1c}{1994/04/28}{bezier curves added} +% +% \begin{oldcomments} +% +% \qbezier[N] == \bezier{N} +% +% \bezier{N}(AX,AY)(BX,BY)(CX,CY) == +% BEGIN +% IF N = 0 +% THEN \@xdima := |BX - AX| +% \@xb := |CX - BX| +% \@xa := Max(\@xa, \@xb) +% \@ya := |BY - AY| +% \@yb := |CY - BY| +% \@ya := Max(\@ya, \@yb) +% @sc := Max(\@xa, \@ya) +% %% The coefficient .5 below is the degree of overlap of +% %% successive points, where 1 is no overlap and 0 is +% %% complete overlap. A coefficient of C multiplies +% %% the number of points plotted by 1/C. +% %% +% \@xa := .5 * \@halfwidth +% @sc := @sc / \@halfwidth +% @sc := Max(@sc, qbeziermax) +% ELSE @sc := N +% @scp := @sc+1 +% \@xb := 2 * (BX - AX) * \unitlength +% \@xa := ((CX-AX)*\unitlength - \@xb)/@sc +% \@yb := 2 * (BY - AY) * \unitlength +% \@ya := ((CY-AY)*\unitlength - \@yb)/@sc +% \@pictdot := square rule of width \@wholewidth +% \count@ := 0 +% WHILE \count@ < @scp +% DO \@xdim := ((\count@*\@xa + @xb) / @sc) * \count@ +% \@ydim := ((\count@*\@ya + @yb) / @sc) * \count@ +% plot pt with relative coords (\@xdim,\@ydim) +% \count@ := \count@+1 +% OD +% +% \end{oldcomments} +% +% \begin{macro}{\qbeziermax} +% The maximum number of points to plot. +% \begin{macrocode} +%<*2ekernel|def> +%<def>\ifx\qbeziermax\@undefined +\gdef\qbeziermax{500} +%<def>\fi +% \end{macrocode} +% \end{macro} +% +% +% In the code below, to save registers |\@a| \ldots\ are not used. +% Instead other registers are reused. +% +% |\newcounter{@sc} -> \c@multicnt|\par +% |\newcounter{@scp} -> \@tempcnta|\par +% |\newdimen\@xa -> \@ovxx|\par +% +% |\newdimen\@xb -> \@ovdx| +% +% |\newdimen\@ya -> \@ovyy|\par +% |\newdimen\@yb -> \@ovdy| +% +% |\newsavebox{\@pictdot} -> \@tempboxa| +% +% \begin{macro}{\qbezier} +% Main user-level command to plot quadratic bezier curves. +% |#2| should be |(|. +% \begin{macrocode} +\newcommand\qbezier[2][0]{\bezier{#1}#2} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bezier} +% Form of |\bezier| compatible with 2.09 |bezier.sty|, but modified to +% ignore spaces between its arguments. +% |#2| should be white space, and |#4| should be |(|. +% \begin{macrocode} +\gdef\bezier#1)#2(#3)#4({\@bezier#1)(#3)(} +% \end{macrocode} +% +% \begin{macro}{\@bezier} +% \begin{macrocode} +\gdef\@bezier#1(#2,#3)(#4,#5)(#6,#7){% + \ifnum #1=\z@ + \@ovxx #4\unitlength + \advance\@ovxx -#2\unitlength + \ifdim \@ovxx<\z@ \@ovxx -\@ovxx \fi + \@ovdx #6\unitlength + \advance\@ovdx -#4\unitlength + \ifdim \@ovdx<\z@ \@ovdx -\@ovdx \fi + \ifdim \@ovxx<\@ovdx \@ovxx \@ovdx \fi + \@ovyy #5\unitlength + \advance\@ovyy -#3\unitlength + \ifdim \@ovyy<\z@ \@ovyy -\@ovyy \fi + \@ovdy #7\unitlength + \advance\@ovdy -#5\unitlength + \ifdim \@ovdy<\z@ \@ovdy -\@ovdy \fi + \ifdim \@ovyy<\@ovdy \@ovyy \@ovdy \fi + \@multicnt + \ifdim \@ovxx>\@ovyy \@ovxx \else \@ovyy \fi + \@ovxx .5\@halfwidth \divide\@multicnt\@ovxx + \ifnum \qbeziermax<\@multicnt \@multicnt\qbeziermax\relax \fi + \else \@multicnt#1\relax \fi + \@tempcnta\@multicnt \advance\@tempcnta\@ne + \@ovdx #4\unitlength \advance\@ovdx -#2\unitlength + \multiply\@ovdx \tw@ + \@ovxx #6\unitlength \advance\@ovxx -#2\unitlength + \advance\@ovxx -\@ovdx \divide\@ovxx\@multicnt + \@ovdy #5\unitlength \advance\@ovdy -#3\unitlength + \multiply\@ovdy \tw@ + \@ovyy #7\unitlength \advance\@ovyy -#3\unitlength + \advance\@ovyy -\@ovdy \divide\@ovyy\@multicnt +% \end{macrocode} +% +% \changes{v1.1k}{2003/08/27}{added missing displacement pr/3566} +% \begin{macrocode} + \setbox\@tempboxa\hbox{% + \hskip -\@halfwidth + \vrule \@height\@halfwidth + \@depth \@halfwidth + \@width \@wholewidth}% + \put(#2,#3){% + \count@\z@ + \@whilenum{\count@<\@tempcnta}\do + {\@xdim\count@\@ovxx + \advance\@xdim\@ovdx + \divide\@xdim\@multicnt + \multiply\@xdim\count@ + \@ydim\count@\@ovyy + \advance\@ydim\@ovdy + \divide\@ydim\@multicnt + \multiply\@ydim\count@ + \raise \@ydim + \hb@xt@\z@{\kern\@xdim + \unhcopy\@tempboxa\hss}% + \advance\count@\@ne}}} +%</2ekernel|def> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltplain.dtx b/Master/texmf-dist/source/latex/base/ltplain.dtx new file mode 100644 index 00000000000..0b172df540b --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltplain.dtx @@ -0,0 +1,1112 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +%%% From File: ltplain.dtx +% +%<*driver> +% \fi +\ProvidesFile{ltplain.dtx} + [2004/02/24 v1.1x LaTeX Kernel (Plain TeX)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltplain.dtx} +\begin{document} +\title{\filename\\(The file plain.tex, modified for \LaTeX)} +\author{Donald~E.~Knuth\\ + Modified by + Leslie Lamport, Frank Mittelbach,\\ + Rainer Sch\"opf, David Carlisle} +\date{\filedate} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{756} +% +% \changes{v1.0a}{1994/03/08} +% {Remove need for a driver file.} +% \changes{v1.0b}{1994/03/12} +% {Name changed from lplain. The end of an era} +% \changes{v1.0e}{1994/03/12}{Replaced remaining width, height, depth +% by \LaTeX{} macro names to save tokens.} +% \changes{v1.1a}{1994/10/14} +% {Moved code to other files.} +% \changes{v1.1b}{1994/11/10} +% {(CAR) added patch to \cs{loop}.} +% \changes{v1.1f}{1994/11/25} +% {(DPC) Comment out lots of obsolete code} +% \changes{v1.1g}{1994/12/01} +% {(DPC) More doc changes} +% \changes{v1.1j}{1995/05/07}{Use \cs{hb@xt@}} +% \changes{v1.1j}{1995/05/21}{Moved some code to other files} +% \changes{v1.1n}{1995/07/02}{Removed surplus `by' and `\quotechar=' in +% various places} +% \changes{v1.1o}{1995/09/14}{Moved \cs{multispan} to lttab.dtx} +% \changes{v1.1r}{1995/10/10}{Autoload tracing code} +% \changes{v1.1u}{1996/10/28}{(CAR) More doc changes} +% +% \section{Plain \TeX} +% +% \LaTeX\ includes almost all of the functionality of Knuth's original +% `Basic Macros' That is, the plain \TeX\ format described in Appendix~B +% of the \TeX{}Book. However, some of the user commands are not much +% use so, in order to save memory, we may remove them from the kernel +% into a package. Here is a list of the commands that may be removed +% (PROBABLY NOT COMPLETE). +% \begin{verbatim} +% \magstep \magstephalf +% \mathhexbox +% \vglue \vgl@ +% \hglue \hgl@ +% \end{verbatim} +% +% This file is by now very small as most of it has been moved to more +% appropriate kernel files: it may disappear completely one day. +% +% \LaTeX\ font definitions are done using NFSS2 so none of PLAIN's +% font definitions are in \LaTeX. +% +% \LaTeX\ has its own tabbing environment, so PLAIN's is disabled. +% +% \LaTeX{} uses its own output routine, so most of the plain one was +% removed. +% +% \StopEventually{} +% +% \iffalse +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +% \fi +% +% \begin{macrocode} +%<*2ekernel|autoload> +\catcode`\{=1 % left brace is begin-group character +\catcode`\}=2 % right brace is end-group character +\catcode`\$=3 % dollar sign is math shift +\catcode`\&=4 % ampersand is alignment tab +\catcode`\#=6 % hash mark is macro parameter character +\catcode`\^=7 % circumflex and uparrow are for superscripts +\catcode`\_=8 % underline and downarrow are for subscripts +\catcode`\^^I=10 % ascii tab is a blank space +\chardef\active=13 \catcode`\~=\active % tilde is active +\catcode`\^^L=\active \outer\def^^L{\par}% ascii form-feed is \outer\par +% \end{macrocode} +% +% \begin{macrocode} +\message{catcodes,} +% \end{macrocode} +% +% We had to define the |\catcodes| right away, before the message line, +% since |\message| uses the |{| and |}| characters. +% When INITEX (the \TeX\ initializer) starts up, +% it has defined the following |\catcode| values:\\ +% |\catcode`\^^@=9 % | ascii null is ignored\\ +% |\catcode`\^^M=5 % | ascii return is end-line\\ +% |\catcode`\\=0 % | backslash is TeX escape character\\ +% |\catcode`\%=14 % | percent sign is comment character\\ +% |\catcode`\ =10 % | ascii space is blank space\\ +% |\catcode`\^^?=15 %| ascii delete is invalid\\ +% |\catcode`\A=11 ... \catcode`\Z=11 %| uppercase letters\\ +% |\catcode`\a=11 ... \catcode`\z=11 %| lowercase letters\\ +% all others are type 12 (other) +% +% Here is a list of the characters that have been specially catcoded: +% \begin{macrocode} +\def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\_\do\%\do\~} +% \end{macrocode} +% (not counting ascii null, tab, linefeed, formfeed, return, delete) +% Each symbol in the list is preceded by \do, which can be defined +% if you want to do something to every item in the list. +% +% We make |@| signs act like letters, temporarily, to avoid conflict +% between user names and internal control sequences of plain format. +% \begin{macrocode} +\catcode`@=11 +% \end{macrocode} +% +% To make the plain macros more efficient in time and space, +% several constant values are declared here as control sequences. +% If they were changed, anything could happen; +% so they are private symbols. +% \begin{macro}{\@ne} +% \begin{macro}{\tw@} +% \begin{macro}{\thr@@} +% \begin{macro}{\sixt@@n} +% \begin{macro}{\@cclv} +% Small constants are defined using |\chardef|. +% \begin{macrocode} +\chardef\@ne=1 +\chardef\tw@=2 +\chardef\thr@@=3 +\chardef\sixt@@n=16 +\chardef\@cclv=255 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@cclvi} +% \begin{macro}{\@m} +% \begin{macro}{\@M} +% \begin{macro}{\@MM} +% Constants above 255 defined using |\mathchardef|. +% \begin{macrocode} +\mathchardef\@cclvi=256 +\mathchardef\@m=1000 +\mathchardef\@M=10000 +\mathchardef\@MM=20000 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% Allocation of registers +% +% Here are macros for the automatic allocation of |\count|, |\box|, +% |\dimen|, |\skip|, |\muskip|, and |\toks| registers, as well as +% |\read| and |\write| stream numbers, |\fam| codes, |\language| codes, +% and |\insert| numbers. +% +% \begin{macrocode} +\message{registers,} +% \end{macrocode} +% +% When a register is used only temporarily, it need not be allocated; +% grouping can be used, making the value previously in the register +% return after the close of the group. The main use of these macros is +% for registers that are defined by one macro and used by others, +% possibly at different nesting levels. All such registers should be +% defined through these macros; otherwise conflicts may occur, +% especially when two or more macro packages are being used at +% the same time. +% +% \begin{oldcomments} +% The following counters are reserved: +% 0 to 9 page numbering +% 10 count allocation +% 11 dimen allocation +% 12 skip allocation +% 13 muskip allocation +% 14 box allocation +% 15 toks allocation +% 16 read file allocation +% 17 write file allocation +% 18 math family allocation +% 19 language allocation +% 20 insert allocation +% 21 the most recently allocated number +% 22 constant -1 +% \end{oldcomments} +% +% New counters are allocated starting with 23, 24, etc. Other registers +% are allocated starting with 10. This leaves 0 through 9 for the user +% to play with safely, except that counts 0 to 9 are considered to be +% the page and subpage numbers (since they are displayed during +% output). In this scheme, |\count| 10 always contains the number of the +% highest-numbered counter that has been allocated, |\count| 14 the +% highest-numbered box, etc. Inserts are given numbers 254, 253, etc., +% since they require a |\count|, |\dimen|, |\skip|, and |\box| all with +% the same number; |\count| 20 contains the lowest-numbered insert that +% has been allocated. Of course, |\box|255 is reserved for |\output|; +% |\count|255, |\dimen|255, and |\skip|255 can be used freely. +% +% It is recommended that macro designers always use +% |\global| assignments with respect to registers numbered\\ +% 1, 3, 5, 7, 9,\\ +% and always non-|\global| assignments with respect to registers\\ +% 0, 2, 4, 6, 8, 255.\\ +% This will prevent ``save stack buildup'' that might otherwise occur. +% +% \begin{macrocode} +\count10=22 % allocates \count registers 23, 24, ... +\count11=9 % allocates \dimen registers 10, 11, ... +\count12=9 % allocates \skip registers 10, 11, ... +\count13=9 % allocates \muskip registers 10, 11, ... +\count14=9 % allocates \box registers 10, 11, ... +\count15=9 % allocates \toks registers 10, 11, ... +\count16=-1 % allocates input streams 0, 1, ... +\count17=-1 % allocates output streams 0, 1, ... +\count18=3 % allocates math families 4, 5, ... +\count19=0 % allocates \language codes 1, 2, ... +\count20=255 % allocates insertions 254, 253, ... +% \end{macrocode} +% +% \begin{macro}{\insc@unt} +% \begin{macro}{\allocationnumber} +% The insertion counter and most recent allocation. +% \begin{macrocode} +\countdef\insc@unt=20 +\countdef\allocationnumber=21 +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\m@ne} +% The constant $-1$. +% \begin{macrocode} +\countdef\m@ne=22 \m@ne=-1 +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\wlog} +% Write on log file (only) +% \begin{macrocode} +\def\wlog{\immediate\write\m@ne} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\count@} +% \begin{macro}{\dimen@} +% \begin{macro}{\dimen@i} +% \begin{macro}{\dimen@ii} +% \begin{macro}{\skip@} +% \begin{macro}{\toks@} +% Here are abbreviations for the names of scratch registers +% that don't need to be allocated. +% \begin{macrocode} +\countdef\count@=255 +\dimendef\dimen@=0 +\dimendef\dimen@i=1 % global only +\dimendef\dimen@ii=2 +\skipdef\skip@=0 +\toksdef\toks@=0 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\newcount} +% \begin{macro}{\newdimen} +% \begin{macro}{\newskip} +% \begin{macro}{\newmuskip} +% \begin{macro}{\newbox} +% \begin{macro}{\newhelp} +% \begin{macro}{\newtoks} +% \changes{v1.0c}{1994/03/28} +% {Remove some \cs{outer} declarations.} +% \changes{v1.1h}{1995/04/24} +% {Remove remaining \cs{outer} declarations.} +% Now, we define |\newcount|, |\newbox|, etc. so that you can say +% |\newcount\foo| and |\foo| will be defined (with |\countdef|) to +% be the next counter. +% +% To find out which counter |\foo| is, you can look at +% |\allocationnumber|. +% +% Since there's no |\boxdef| command, |\chardef| is used to define a +% |\newbox|, |\newinsert|, |\newfam|, and so on. +% +% \LaTeX\ change: remove |\outer| from |\newcount| and |\newdimen| (FMi) +% This is necessary to use |\newcount| inside |\if...| +% later on. Also remove from |\newskip|, |\newbox| +% |\newwrite| and |\newfam| (DPC) to save later redefinition. +% \begin{macrocode} +\def\newcount{\alloc@0\count\countdef\insc@unt} +\def\newdimen{\alloc@1\dimen\dimendef\insc@unt} +\def\newskip{\alloc@2\skip\skipdef\insc@unt} +\def\newmuskip{\alloc@3\muskip\muskipdef\@cclvi} +\def\newbox{\alloc@4\box\chardef\insc@unt} +\def\newhelp#1#2{\newtoks#1#1\expandafter{\csname#2\endcsname}} +\def\newtoks{\alloc@5\toks\toksdef\@cclvi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\newread} +% \begin{macro}{\newwrite} +% \begin{macrocode} +\def\newread{\alloc@6\read\chardef\sixt@@n} +\def\newwrite{\alloc@7\write\chardef\sixt@@n} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \LaTeX\ defines |\newfam| in |ltfss.dtx|. +%\begin{verbatim} +%\def\newfam{\alloc@8\fam\chardef\sixt@@n} +%\end{verbatim} +% +% \begin{macro}{\newlanguage} +% \begin{macrocode} +\def\newlanguage{\alloc@9\language\chardef\@cclvi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\alloc@} +% \begin{macrocode} +\def\alloc@#1#2#3#4#5{\global\advance\count1#1\@ne + \ch@ck#1#4#2% make sure there's still room + \allocationnumber\count1#1% + \global#3#5\allocationnumber + \wlog{\string#5=\string#2\the\allocationnumber}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\newinsert} +% \begin{macrocode} +\def\newinsert#1{\global\advance\insc@unt \m@ne + \ch@ck0\insc@unt\count + \ch@ck1\insc@unt\dimen + \ch@ck2\insc@unt\skip + \ch@ck4\insc@unt\box + \allocationnumber\insc@unt + \global\chardef#1\allocationnumber + \wlog{\string#1=\string\insert\the\allocationnumber}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ch@ck} +% \begin{macrocode} +%</2ekernel|autoload> +%<*2ekernel|autoload|autoerr> +\gdef\ch@ck#1#2#3{% + \ifnum\count1#1<#2\else +%<!autoload> \errmessage{No room for a new #3}% +%<autoload> \@autoerr\ch@ck#1#2#3% + \fi} +%</2ekernel|autoload|autoerr> +%<*2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\maxdimen} +% \begin{macro}{\hideskip} +% Here are some examples of allocation. +% \begin{macrocode} +\newdimen\maxdimen \maxdimen=16383.99999pt % the largest legal <dimen> +\newskip\hideskip \hideskip=-1000pt plus 1fill % negative but can grow +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\p@} +% \begin{macro}{\z@} +% \begin{macro}{\z@skip} +% \begin{macro}{\voidb@x} +% \begin{macrocode} +\newdimen\p@ \p@=1pt % this saves macro space and time +\newdimen\z@ \z@=0pt % can be used both for 0pt and 0 +\newskip\z@skip \z@skip=0pt plus0pt minus0pt +\newbox\voidb@x % permanently void box register +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \changes{v1.1p}{1995/10/02}{Move \cs{newif} to ltdefns} +% +% \begin{macrocode} +\message{compatibility for TeX 2, } +% \end{macrocode} +% +% If this file is used in an old \TeX\ we define the new features +% of \TeX\ 3.0 as simple macros or counters so that files that uses +% these features can be processed in such an environment +% (They will however produce some other results). +% +% \begin{macrocode} +\ifx\@undefined\inputlineno + \newcount\inputlineno +% \end{macrocode} +% This could be used to detect that an old \TeX\ is in force +% \begin{macrocode} + \inputlineno-1 +% \end{macrocode} +% Extra test for MLTeX 2, RmS 91/11/07. +% \begin{macrocode} + \ifx\@undefined\language + \newcount\language + \fi + \newcount\lefthyphenmin + \newcount\righthyphenmin + \newcount\errorcontextlines + \newcount\holdinginserts + \newdimen\emergencystretch + \newcount\badness + \let\noboundary\relax + \newcount\setlanguage +\fi +% \end{macrocode} +% +% Assign initial values to \TeX's parameters +% +% \begin{macrocode} +\message{parameters,} +% \end{macrocode} +% +% All of \TeX's numeric parameters are listed here, +% but the code is commented out if no special value needs to be set. +% INITEX makes all parameters zero except where noted. +% +% \begin{oldcomments} +% \begin{macrocode} +\pretolerance=100 +\tolerance=200 % INITEX sets this to 10000 +\hbadness=1000 +\vbadness=1000 +\linepenalty=10 +\hyphenpenalty=50 +\exhyphenpenalty=50 +\binoppenalty=700 +\relpenalty=500 +\clubpenalty=150 +\widowpenalty=150 +\displaywidowpenalty=50 +\brokenpenalty=100 +\predisplaypenalty=10000 +% \end{macrocode} +% \postdisplaypenalty=0 +% \interlinepenalty=0 +% \floatingpenalty=0, set during \insert +% \outputpenalty=0, set before TeX enters \output +% \begin{macrocode} +\doublehyphendemerits=10000 +\finalhyphendemerits=5000 +\adjdemerits=10000 +% \end{macrocode} +% \looseness=0, cleared by TeX after each paragraph +% \pausing=0 +% \holdinginserts=0 +% \tracingonline=0 +% \tracingmacros=0 +% \tracingstats=0 +% \tracingparagraphs=0 +% \tracingpages=0 +% \tracingoutput=0 +% \begin{macrocode} +\tracinglostchars=1 +% \end{macrocode} +% \tracingcommands=0 +% \tracingrestores=0 +% \language=0 +% \begin{macrocode} +\uchyph=1 +% \end{macrocode} +% \lefthyphenmin=2 \righthyphenmin=3 set below +% \globaldefs=0 +% \maxdeadcycles=25 % INITEX does this +% \hangafter=1 % INITEX does this, also TeX after each paragraph +% \fam=0 +% \mag=1000 % INITEX does this +% \escapechar=`\\ % INITEX does this +% \begin{macrocode} +\defaulthyphenchar=`\- +\defaultskewchar=-1 +% \end{macrocode} +% \endlinechar=`\^^M % INITEX does this +% \newlinechar=-1 \LaTeX\ sets this in ltdefns.dtx. +% \begin{macrocode} +\delimiterfactor=901 +% \end{macrocode} +% \time=now % TeX does this at beginning of job +% \day=now % TeX does this at beginning of job +% \month=now % TeX does this at beginning of job +% \year=now % TeX does this at beginning of job +% +% \end{oldcomments} +% In \LaTeX{} we don't want box information in the transcript +% unless we do a full tracing. +% \changes{v1.0g}{1994/04/28}{Turn off overfull box tracing in log} +% +% \begin{macrocode} +\showboxbreadth=-1 +\showboxdepth=-1 +\errorcontextlines=-1 +% \end{macrocode} +% +% \begin{macrocode} +\hfuzz=0.1pt +\vfuzz=0.1pt +\overfullrule=5pt +\maxdepth=4pt +\splitmaxdepth=\maxdimen +\boxmaxdepth=\maxdimen +% \end{macrocode} +% +% \begin{oldcomments} +% \lineskiplimit=0pt, changed by \normalbaselines +% \begin{macrocode} +\delimitershortfall=5pt +\nulldelimiterspace=1.2pt +\scriptspace=0.5pt +% \end{macrocode} +% \mathsurround=0pt +% \predisplaysize=0pt, set before TeX enters $$ +% \displaywidth=0pt, set before TeX enters $$ +% \displayindent=0pt, set before TeX enters $$ +% \begin{macrocode} +\parindent=20pt +% \end{macrocode} +% \hangindent=0pt, zeroed by TeX after each paragraph +% \hoffset=0pt +% \voffset=0pt +% +% \baselineskip=0pt, changed by \normalbaselines +% \lineskip=0pt, changed by \normalbaselines +% \begin{macrocode} +\parskip=0pt plus 1pt +\abovedisplayskip=12pt plus 3pt minus 9pt +\abovedisplayshortskip=0pt plus 3pt +\belowdisplayskip=12pt plus 3pt minus 9pt +\belowdisplayshortskip=7pt plus 3pt minus 4pt +% \end{macrocode} +% \leftskip=0pt +% \rightskip=0pt +% \begin{macrocode} +\topskip=10pt +\splittopskip=10pt +% \end{macrocode} +% \tabskip=0pt +% \spaceskip=0pt +% \xspaceskip=0pt +% \begin{macrocode} +\parfillskip=0pt plus 1fil +% \end{macrocode} +% \end{oldcomments} +% +% +% \begin{macro}{\normalbaselineskip} +% \begin{macro}{\normallineskip} +% \begin{macro}{\normallineskiplimit} +% We also define special registers that function like parameters: +% \begin{macrocode} +\newskip\normalbaselineskip \normalbaselineskip=12pt +\newskip\normallineskip \normallineskip=1pt +\newdimen\normallineskiplimit \normallineskiplimit=0pt +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\interfootlinepenalty} +% \begin{macrocode} +\newcount\interfootnotelinepenalty \interfootnotelinepenalty=100 +% \end{macrocode} +% \end{macro} +% +% Definitions for preloaded fonts +% +% \begin{macro}{\magstephalf} +% \begin{macro}{\magstep} +% \begin{macrocode} +\def\magstephalf{1095 } +\def\magstep#1{\ifcase#1 \@m\or 1200\or 1440\or 1728\or + 2074\or 2488\fi\relax} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% Macros for setting ordinary text +% +% \begin{macro}{\frenchspacing} +% \begin{macro}{\nonfrenchspacing} +% \begin{macrocode} +\def\frenchspacing{\sfcode`\.\@m \sfcode`\?\@m \sfcode`\!\@m + \sfcode`\:\@m \sfcode`\;\@m \sfcode`\,\@m} +\def\nonfrenchspacing{\sfcode`\.3000\sfcode`\?3000\sfcode`\!3000% + \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\normalbaselines} +% \begin{macrocode} +\def\normalbaselines{\lineskip\normallineskip + \baselineskip\normalbaselineskip \lineskiplimit\normallineskiplimit} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\M} +% \begin{macro}{\I} +% \changes{v1.1m}{1995/09/01}{Use \cs{let} to save space} +% Save a bit of space by using |\let| here. +% \begin{macrocode} +\def\^^M{\ } % control <return> = control <space> +\let\^^I\^^M % same for <tab> +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\lq} +% \begin{macro}{\rq} +% \begin{macrocode} +\def\lq{`} +\def\rq{'} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\lbrack} +% \begin{macro}{\rbrack} +% \begin{macrocode} +\def\lbrack{[} +\def\rbrack{]} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\aa} +% \begin{macro}{\AA} +% These are not from plain.tex but they are similar to other commands +% found here and nowhere else, being alternate input forms for +% characters. +% \begin{macrocode} +\def \aa {\r a} +\def \AA {\r A} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\endgraf} +% \begin{macro}{\endline} +% \begin{macrocode} +\let\endgraf=\par +\let\endline=\cr +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\space} +% \begin{macrocode} +\def\space{ } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\empty} +% \changes{v1.1m}{1995/09/01}{Use \cs{let} to save space} +% This probably ought to go altogether, but let it to the \LaTeX\ +% version to save space. +% \begin{macrocode} +\let\empty\@empty +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\null} +% \begin{macrocode} +\def\null{\hbox{}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bgroup} +% \begin{macro}{\egroup} +% \begin{macrocode} +\let\bgroup={ +\let\egroup=} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\obeylines} +% \begin{macro}{\obeyspaces} +% In |\obeylines|, we say |\let^^M=\par| instead of |\def^^M{\par}| +% since this allows, for example, |\let\par=\cr \obeylines \halign{...| +% \begin{macrocode} +{\catcode`\^^M=\active % these lines must end with % + \gdef\obeylines{\catcode`\^^M\active \let^^M\par}% + \global\let^^M\par} % this is in case ^^M appears in a \write +\def\obeyspaces{\catcode`\ \active} +{\obeyspaces\global\let =\space} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\loop} +% \changes{v1.0h}{1994/05/16}{Use Kabelschacht method} +% \begin{macro}{\iterate} +% \changes{v1.1b}{1994/11/10} +% {(CAR) added extra \cs{relax}} +% \changes{v1.1m}{1994/05/26} +% {(CAR) added \cs{long}} +% \begin{macro}{\repeat} +% We use Kabelschacht's method of doing loops, see TUB 8\#2 (1987). +% (unless that breaks something :-). It turned out to need an +% extra |\relax|: see pr/642 (|\loop| could do one iteration too much +% in certain cases). +% \begin{macrocode} +\long\def \loop #1\repeat{% + \def\iterate{#1\relax % Extra \relax + \expandafter\iterate\fi + }% + \iterate + \let\iterate\relax +} +% \end{macrocode} +% This setting of |\repeat| is needed to make |\loop...\if...\repeat| +% skippable within another |\if...|. +% \begin{macrocode} +\let\repeat=\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \LaTeX\ defines |\smallskip|, etc.\ in |ltspace.dtx|. +% +% \begin{macro}{\nointerlineskip} +% \begin{macro}{\offinterlineskip} +% \changes{v1.1n}{1995/07/02}{Replaced 1000 by \cs{@m}} +% \begin{macrocode} +\def\nointerlineskip{\prevdepth-\@m\p@} +\def\offinterlineskip{\baselineskip-\@m\p@ + \lineskip\z@ \lineskiplimit\maxdimen} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\vglue} +% \begin{macro}{\hglue} +% \begin{macrocode} +\def\vglue{\afterassignment\vgl@\skip@=} +\def\vgl@{\par \dimen@\prevdepth \hrule \@height\z@ + \nobreak\vskip\skip@ \prevdepth\dimen@} +\def\hglue{\afterassignment\hgl@\skip@=} +\def\hgl@{\leavevmode \count@\spacefactor \vrule \@width\z@ + \nobreak\hskip\skip@ \spacefactor\count@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \LaTeX\ defines |~| in |ltdefns.dtx|. +% +% \begin{macro}{\slash} +% \begin{macrocode} +\def\slash{/\penalty\exhyphenpenalty} % a `/' that acts like a `-' +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\break} +% \begin{macro}{\nobreak} +% \begin{macro}{\allowbreak} +% \begin{macrocode} +\def\break{\penalty-\@M} +\def\nobreak{\penalty \@M} +\def\allowbreak{\penalty \z@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\filbreak} +% \begin{macro}{\goodbreak} +% \begin{macrocode} +\def\filbreak{\par\vfil\penalty-200\vfilneg} +\def\goodbreak{\par\penalty-500 } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\eject} +% \changes{v1.1s}{1995/10/17}{Move \cs{supereject} to compat file} +% Define |\eject| as in plain \TeX\ but define |\supereject| only in +% the compatibility file. +% \begin{macrocode} +\def\eject{\par\break} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\removelastskip} +% \begin{macrocode} +\def\removelastskip{\ifdim\lastskip=\z@\else\vskip-\lastskip\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\smallbreak} +% \begin{macro}{\medbreak} +% \begin{macro}{\bigbreak} +% \begin{macrocode} +\def\smallbreak{\par\ifdim\lastskip<\smallskipamount + \removelastskip\penalty-50\smallskip\fi} +\def\medbreak{\par\ifdim\lastskip<\medskipamount + \removelastskip\penalty-100\medskip\fi} +\def\bigbreak{\par\ifdim\lastskip<\bigskipamount + \removelastskip\penalty-200\bigskip\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\m@th} +% \changes{v1.0h}{1994/05/16}{Remove unnecssary space} +% \begin{macrocode} +\def\m@th{\mathsurround\z@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\underbar} +% Due to \LaTeX's redefinition of |\underline| plain \TeX's +% |\underbar| can be done in a simpler fashion (but do we +% need it at all?). +% \changes{v1.1m}{1994/05/26} +% {(CAR/FMi) changed to use box \cs{tw@}} +% \changes{v1.1p}{1994/05/26} +% {(DPC) changed to use \cs{sbox}} +% \begin{macrocode} +\def\underbar#1{\underline{\sbox\tw@{#1}\dp\tw@\z@\box\tw@}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\strutbox} +% \begin{macro}{\strut} +% \LaTeX\ sets |\strutbox| in |\set@fontsize|. +% \begin{macrocode} +\newbox\strutbox +\def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\hidewidth} +% For alignment entries that can stick out. +% \begin{macrocode} +\def\hidewidth{\hskip\hideskip} +% \end{macrocode} +% \end{macro} +% +% \changes{v1.0h}{1994/05/16}{Remove unnecessary def for \cs{item}} +% \changes{v1.1i}{1995/04/27} +% {Move \cs{hang} and \cs{textindent} to latex209.def} +% \changes{RmS}{1991/11/04}{Removed \cs{itemitem} since never +% needed/useful with \LaTeX.} +% +% \begin{macro}{\narrower} +% \begin{macrocode} +\def\narrower{% + \advance\leftskip\parindent + \advance\rightskip\parindent} +% \end{macrocode} +% \end{macro} +% +% \changes{v1.1c}{1994/11/12}{Comment out more encoding specific +% commands} +% \LaTeX\ defines |\ae| and similar commands elsewhere. +% +% \begin{macrocode} +\chardef\%=`\% +\chardef\&=`\& +\chardef\#=`\# +% \end{macrocode} +% +% Most text commands are actually encoding specific and therefore +% defined later, so commented out or removed from this file. +% \changes{v1.0h}{1994/05/16}{Comment out encoding specific commands} +% +% \begin{macro}{\leavevmode} +% begins a paragraph, if necessary +% \begin{macrocode} +\def\leavevmode{\unhbox\voidb@x} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\mathhexbox} +% \begin{macrocode} +\def\mathhexbox#1#2#3{\mbox{$\m@th \mathchar"#1#2#3$}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\ialign} +% \begin{macrocode} +\def\ialign{\everycr{}\tabskip\z@skip\halign} % initialized \halign +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\oalign} +% \begin{macro}{\o@lign} +% \begin{macro}{\ooalign} +% \begin{macrocode} +\def\oalign#1{\leavevmode\vtop{\baselineskip\z@skip \lineskip.25ex% + \ialign{##\crcr#1\crcr}}} +\def\o@lign{\lineskiplimit\z@ \oalign} +\def\ooalign{\lineskiplimit-\maxdimen \oalign} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\sh@ft} +% \changes{v1.1t}{1996/07/26}{replace \cs{dimen}\cs{z@} by +% \cs{dimen@}} +% \begin{macrocode} +\def\sh@ft#1{\dimen@.00#1ex\multiply\dimen@\fontdimen1\font + \kern-.0156\dimen@} % compensate for slant in lowered accents +% \end{macrocode} +% \end{macro} +% +% \LaTeX\ change: |\d|, |\b|, |\c|, |\copyright|, |\TeX| +% defined elsewhere. +% +% \changes{LaTeX2e} +% {1993/11/29}{All accents in decimals; suggested by Paul Taylor} +% \changes{v1.0d}{1994/04/12} +% {Define \cs{@acci}} +% \changes{v1.0h}{1994/05/16}{Remove \cs{@acci} and friends again} +% +% \LaTeX{} change: Make |\t| work in a moving argument. +% Now defined elsewhere. +% +% \begin{macro}{\hrulefill} +% \begin{macro}{\dotfill} +% \LaTeX\ change: |\kern\z@| added to end of +% |\hrulefill| and |\dotfill| +% to make them work in `tabular' and `array' environments. +% (Change made 24 July 1987). +% \LaTeX\ change: |\leavevmode| added at begining of +% |\dotfill| and |\hrulefill| +% so that they work as expected in vertical mode. +% \begin{macrocode} +\def\hrulefill{\leavevmode\leaders\hrule\hfill\kern\z@} +% \end{macrocode} +% The box in |\dotfill| originally contained (in plain.tex): +% |\mkern 1.5mu .\mkern 1.5mu|; the width of .44em differs from this +% by .04pt which is probably an acceptable difference within leaders. +% \changes{v1.1u}{1996/10/28}{Removed math mode} +% \changes{v1.1v}{1996/10/29}{Got arithmetic correct (CAR)} +% \changes{v1.1w}{1996/11/03}{Saved tokens by using \cs{hb@xt@}} +% \begin{macrocode} +\def\dotfill{% + \leavevmode + \cleaders \hb@xt@ .44em{\hss.\hss}\hfill + \kern\z@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% INITEX sets |\sfcode x=1000| for all x, except that |\sfcode`X=999| +% for uppercase letters. The following changes are needed: +% \begin{macrocode} +\sfcode`\)=0 \sfcode`\'=0 \sfcode`\]=0 +% \end{macrocode} +% The |\nonfrenchspacing| macro will make further changes to +% |\sfcode| values. +% +% +% Definitions related to output +% +% +% \changes{v1.1k}{1995/05/22}{Definitions of \cs{footins} and +% \cs{footnoterule} moved to ltfloat.} +% +% +% |\magnification| doesn't work in \LaTeX. +%\begin{verbatim} +%\def\magnification{\afterassignment\m@g\count@} +%\def\m@g{\mag\count@ +% \hsize6.5truein\vsize8.9truein\dimen\footins8truein} +%\end{verbatim} +% +% \begin{macro}{\showoverfull} +% \changes{v0.1k ltfinal}{1994/05/19}{used \cs{@ne} not 1} +% The following commands are used in debugging: +% \begin{macrocode} +\def\showoverfull{\tracingonline\@ne} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\showoutput} +% \changes{v0.1k ltfinal}{1994/05/19} +% {used \cs{maxdimen} not 99999} +% \changes{v1.1n}{1995/07/02}{Use \cs{showoverfull} to save space} +% \changes{v1.1x}{2002/02/24}{Use newly added \cs{loggingoutput}} +% \begin{macro}{\loggingoutput} +% \changes{v1.1x}{2002/02/24}{Macro added} +% \begin{macrocode} +%</2ekernel|autoload> +%<*2ekernel|autoerr> +\gdef\loggingoutput{\tracingoutput\@ne + \showboxbreadth\maxdimen\showboxdepth\maxdimen\errorstopmode} +\gdef\showoutput{\loggingoutput\showoverfull} +%</2ekernel|autoerr> +%<autoload>\def\showoutput{\@autoerr\showoutput} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\tracingall} +% \changes{LaTeX209}{1991/08/26}{Added +% \cs{errorcontextlines}!=\cs{maxdimen}, suggested by J. Schrod} +% \changes{v1.1n}{1995/07/02}{Use \cs{showoutput} to save space} +% \changes{v1.1x}{2002/02/24}{Use newly added \cs{loggingoutput}} +% \begin{macro}{\loggingall} +% \changes{v1.1x}{2002/02/24}{Macro added} +% \begin{macrocode} +%<*2ekernel|autoerr> +\gdef\loggingall{\tracingcommands\tw@\tracingstats\tw@ + \tracingpages\@ne\tracinglostchars\@ne + \tracingmacros\tw@\tracingparagraphs\@ne\tracingrestores\@ne + \errorcontextlines\maxdimen\loggingoutput} +\gdef\tracingall{\loggingall\showoverfull} +%</2ekernel|autoerr> +%<autoload>\def\tracingall{\@autoerr\tracingall} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \LaTeX\ change: |\showhyphens| Defined later. +% +% Punctuation affects the spacing. +% \begin{macrocode} +%<*2ekernel|autoload> +\nonfrenchspacing +%</2ekernel|autoload> +% \end{macrocode} +% +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltsect.dtx b/Master/texmf-dist/source/latex/base/ltsect.dtx new file mode 100644 index 00000000000..6f66a92755b --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltsect.dtx @@ -0,0 +1,866 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltsect.dtx +%<*driver> +% \fi +\ProvidesFile{ltsect.dtx}[1996/12/20 v1.0z LaTeX Kernel (Sectioning)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltsect.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Tobias Oetiker\thanks{Tobi updated + the comments to `doc' conventions}\and + Rainer Sch\"opf} + +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{363} +% +% \changes{v1.0o}{1995/05/07}{Use \cs{hb@xt@}} +% \changes{v1.0y}{1996/10/31}{Corrected and tidied documentation; +% removed long lines} +% +% +% \section{Sectioning Commands} +% +% This file defines the declarations such as |\author| which are used +% by |\maketitle|. |\maketitle| itself is defined by each class, not +% in the \LaTeX{} kernel. +% +% The second part of the file defines the generic commands used for +% defining sectioning commands such as |\chapter|. Again the actual +% document level commands are defined in the class files, in terms of +% these commands. +% +% \StopEventually{} +% +% +% \changes{v1.0a}{1994/03/04}{Initial version, split from latex.dtx} +% \changes{v1.0b}{1994/03/28}{Split further from ltherest.dtx} +% \changes{v1.0d}{1994/05/21}{Use new error commands} +% \changes{v1.0f}{1994/10/12}{Doc. typos} +% \changes{v1.0g}{1994/10/18}{Added \cs{normalcolor}} +% \changes{v1.0i}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% \changes{v1.0m}{1995/05/03}{TO: Promoted documentation to doc.sty +% standard} +% +% \begin{macrocode} +%<*2ekernel> +\message{title,} +% \end{macrocode} +% +% \subsection{The Title} +% +% \DescribeMacro{\title} +% The user defines the title and author by the declarations +% |\title|\marg{name}, +% \DescribeMacro{\author} +% |\author|\marg{name} +% +% \DescribeMacro{\date} +% Similarly the date is declared with +% |\date|\marg{date}. +% +% \DescribeMacro{\thanks} +% Inside these, the |\thanks|\marg{footnote text} command may be used +% to make acknowledgements, notice of address, etc.\ in a footnote. +% \DescribeMacro{\and} +% If there are multiple authors, they have to be separated with the +% |\and| command. +% +% \DescribeMacro{\maketitle} +% And finally, the |\maketitle| command produces the actual title, +% using the information previously saved with the other commands. +% +% \begin{macro}{\title} +% \begin{macro}{\@title} +% \changes{LaTeX2e}{1993/12/11}{Added default} +% |\title| for use in |\maketitle|. If not given |\maketitle| will +% produce an error message. +% \begin{macrocode} +\def\title#1{\gdef\@title{#1}} +\def\@title{\@latex@error{No \noexpand\title given}\@ehc} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\author} +% \begin{macro}{\@author} +% \changes{LaTeX2e}{1993/12/11}{Added default} +% +% |\author| for use in |\maketitle|. If not given |\maketitle| will +% produce a warning message. +% +% \begin{macrocode} +\def\author#1{\gdef\@author{#1}} +\def\@author{\@latex@warning@no@line{No \noexpand\author given}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\date} +% \begin{macro}{\@date} +% |\date| for use in |\maketitle|. If not given |\maketitle| will +% produce |\today| as the default. +% \begin{macrocode} +\def\date#1{\gdef\@date{#1}} +\gdef\@date{\today} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \changes{1.0h}{1994/11/04}{(ASAJ) Added \cs{protected@xdef} to +% \cs{thanks}.} +% \begin{macro}{\thanks} +% \begin{macrocode} +\def\thanks#1{\footnotemark + \protected@xdef\@thanks{\@thanks + \protect\footnotetext[\the\c@footnote]{#1}}% +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@thanks} +% \begin{macrocode} +\let\@thanks\@empty +% \end{macrocode} +% \end{macro} +% \begin{macro}{\and} +% \begin{macrocode} +\def\and{% % \begin{tabular} + \end{tabular}% + \hskip 1em \@plus.17fil% + \begin{tabular}[t]{c}}% % \end{tabular} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\message{sectioning,} +% \end{macrocode} +% \subsection{Sectioning} +% +% +% \begin{macro}{\@secpenalty} +% \begin{macrocode} +\newcount\@secpenalty +\@secpenalty = -300 +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@noskipsec} +% \begin{macro}{\@noskipsectrue} +% \changes{1.0w}{1996/09/29}{Added documentation} +% Way back in 1991 (08/26) FMi \& RmS set the |\@noskipsec| switch +% to true for the preamble and to false in |\document|. +% This was done to trap lists and related text in the preamble but it +% does not catch everything. +% \begin{macrocode} +\newif\if@noskipsec \@noskipsectrue +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@startsection} +% +% The |\@startsection{|\meta{name}|}{|\meta{level}|}{|% +% \meta{indent}|}{|\meta{beforeskip}|}|\\ +% |{|\meta{afterskip}|}{|\meta{style}|}*[|\meta{altheading}% +% |]{|\meta{heading}|}| +% command is the mother of all the user level sectioning commands. +% The part after the |*|, including the |*| is optional. +% +% \begin{description} +% \item[name:] e.g., 'subsection' +% \item[level:] a number, denoting depth of section -- e.g., chapter=1, +% section = 2, etc. +% \item[indent:] Indentation of heading from left margin +% \item[beforeskip:] Absolute value = skip to leave above the heading. +% If negative, then paragraph indent of text following +% heading is suppressed. +% \item[afterskip:] if positive, then skip to leave below heading, else +% negative of skip to leave to right of run-in heading. +% \item[style:] Commands to set style. Since June 1996 release the +% \emph{last} command in this argument may be a command +% such as |\MakeUppercase| or |\fbox| that takes an +% argument. The section heading will be supplied as the +% argument to this command. So setting |#6| to, say, +% |\bfseries\MakeUppercase| would produce bold, +% uppercase headings. +% \end{description} +% +% If `|*|' is missing, then increment the counter. If it is +% present, then there should be no |[|\meta{altheading}|]| argument. +% The command uses the counter 'secnumdepth'. It contains a pointer +% to the highest section level that is to be numbered. +% +% \textbf{Warning:} +% The |\@startsection| command should be at the same or higher +% grouping level as the text that follows it. For example, you should +% \emph{not} do something like +% \begin{verbatim} +% \def\foo{ \begingroup ... +% \paragraph{...} +% \endgroup} +% \end{verbatim} +% +% Pseudocode for the |\@startsection| command +% \begin{oldcomments} +% \@startsection {NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE} == +% BEGIN +% IF @noskipsec = T THEN \leavevmode FI +% % true if previous section had no body. +% +% \par +% \@tempskipa := BEFORESKIP +% @afterindent := T +% IF \@tempskipa < 0 THEN \@tempskipa := -\@tempskipa +% @afterindent := F +% FI +% IF @nobreak = true +% THEN \everypar == null +% ELSE \addpenalty{\@secpenalty} +% \addvspace{\@tempskipa} +% FI +% IF * next +% THEN \@ssect{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE} +% ELSE \@dblarg{\@sect +% {NAME}{LEVEL}{INDENT} +% {BEFORESKIP}{AFTERSKIP}{STYLE}} +% FI +% END +% \end{oldcomments} +% +% \begin{macrocode} +\def\@startsection#1#2#3#4#5#6{% + \if@noskipsec \leavevmode \fi + \par + \@tempskipa #4\relax + \@afterindenttrue + \ifdim \@tempskipa <\z@ + \@tempskipa -\@tempskipa \@afterindentfalse + \fi + \if@nobreak + \everypar{}% + \else + \addpenalty\@secpenalty\addvspace\@tempskipa + \fi + \@ifstar + {\@ssect{#3}{#4}{#5}{#6}}% + {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@sect} +% Pseudocode for the |\@sect| command +% \begin{oldcomments} +% \@sect{NAME}{LEVEL}{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}[ARG1]{ARG2} +% == +% BEGIN +% IF LEVEL > \c@secnumdepth +% THEN \@svsec :=L null +% ELSE \refstepcounter{NAME} +% \@svsec :=L BEGIN \@seccntformat{#1}\relax END +% FI +% IF AFTERSKIP > 0 +% THEN \begingroup +% STYLE +% \@hangfrom{\hskip INDENT\@svsec} +% {\interlinepenalty 10000 ARG2\par} +% \endgroup +% \NAMEmark{ARG1} +% \addcontentsline{toc}{NAME} +% { IF LEVEL > \c@secnumdepth +% ELSE \protect\numberline{\theNAME} FI +% ARG1 } +% ELSE \@svsechd == BEGIN STYLE +% \hskip INDENT\@svsec +% ARG2 +% \NAMEmark{ARG1} +% \addcontentsline{toc}{NAME} +% { IF LEVEL > \c@secnumdepth +% ELSE +% \protect\numberline{\theNAME} +% FI +% ARG1 } +% END +% FI +% \@xsect{AFTERSKIP} +% END +% \end{oldcomments} +% +% \changes{LaTeX2.09}{1992/08/25} +% {(FMi) replaced explicit setting of \cs{@svsec} +% by call to \cs{@seccntformat}} +% \changes{LaTeX2.09}{1993/08/05} +% {(RmS) Made sure that \cs{protect} works correctly in +% expansion of \cs{the} counter} +% \changes{1.0h}{1994/11/04} +% {(ASAJ) Added \cs{protected@edef}.} +% \begin{macrocode} +\def\@sect#1#2#3#4#5#6[#7]#8{% + \ifnum #2>\c@secnumdepth + \let\@svsec\@empty + \else + \refstepcounter{#1}% +% \end{macrocode} +% Since |\@seccntformat| might end with an improper |\hskip| which +% is scanning forward for |plus| or |minus| we end the definition +% of |\@svsec| with |\relax| as a precaution. +% \changes{1.0n}{1995/05/06}{Added \cs{relax} after +% \cs{@seccntformat} just in case} +% \begin{macrocode} + \protected@edef\@svsec{\@seccntformat{#1}\relax}% + \fi + \@tempskipa #5\relax + \ifdim \@tempskipa>\z@ + \begingroup +% \end{macrocode} +% \changes{v1.0s}{1996/05/21} +% {(DPC) Moved brace to allow commands like +% \cs{MakeUppercase} in 6th argument. +% Changed \cs{par} to \cs{endgraf} to allow non-long +% commands. internal/2148} +% \changes{v1.0t}{1996/06/10} +% {(DPC) Changed \cs{endgraf} to \cs{@@par}} +% This |{| used to be after the argument to |\@hangfrom| but was moved +% here to allow commands such as |\MakeUppercase| to be used at the end +% of |#6|. +% \begin{macrocode} + #6{% + \@hangfrom{\hskip #3\relax\@svsec}% + \interlinepenalty \@M #8\@@par}% + \endgroup + \csname #1mark\endcsname{#7}% + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \protect\numberline{\csname the#1\endcsname}% + \fi + #7}% + \else +% \end{macrocode} +% |\relax| added 2 May 90 +% \changes{v1.0s}{1996/05/21} +% {(DPC) Added extra braces for internal/2148} +% \begin{macrocode} + \def\@svsechd{% + #6{\hskip #3\relax + \@svsec #8}% + \csname #1mark\endcsname{#7}% + \addcontentsline{toc}{#1}{% + \ifnum #2>\c@secnumdepth \else + \protect\numberline{\csname the#1\endcsname}% + \fi + #7}}% + \fi + \@xsect{#5}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xsect}% +% Pseudocode for the |\@xsect| command +% \begin{oldcomments} +% \@xsect{AFTERSKIP} == +% BEGIN +% IF AFTERSKIP > 0 +% THEN \par \nobreak +% \vskip AFTERSKIP +% \@afterheading +% ELSE @nobreak :=G F +% @noskipsec :=G T +% \everypar{ IF @noskipsec = T +% THEN @noskipsec :=G F +% \clubpenalty :=G 10000 +% \hskip -\parindent +% \begingroup +% \@svsechd +% \endgroup +% \unskip +% \hskip -AFTERSKIP \relax +% %% relax added 14 Jan 91 +% ELSE \clubpenalty :=G \@clubpenalty +% \everypar := NULL +% FI +% } +% FI +% +% END +% \end{oldcomments} +% +% \changes{0.0}{1992/08/19} +% {(RmS) corrected bug: stretch and shrink in argument to +% \cs{hskip} previously not negated} +% \begin{macrocode} +\def\@xsect#1{% + \@tempskipa #1\relax + \ifdim \@tempskipa>\z@ +% \end{macrocode} +% Why not combine |\@sect| and |\@xsect| and save doing the +% same test twice? It is not possible to change this now as these +% have become hooks! +% +% This |\par| seems unnecessary. +% \begin{macrocode} + \par \nobreak + \vskip \@tempskipa + \@afterheading + \else +% \end{macrocode} +% \changes{v1.0u}{1996/07/26}{Removed \cs{global} before +% \cs{@nobreak...}} +% \changes{v1.0x}{1996/10/23}{Replaced \cs{hskip...} with \cs{setbox...} +% as used in \cs{@afterheading}} +% \begin{macrocode} + \@nobreakfalse + \global\@noskipsectrue + \everypar{% + \if@noskipsec + \global\@noskipsecfalse + {\setbox\z@\lastbox}% + \clubpenalty\@M + \begingroup \@svsechd \endgroup + \unskip + \@tempskipa #1\relax + \hskip -\@tempskipa + \else + \clubpenalty \@clubpenalty + \everypar{}% + \fi}% + \fi + \ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@seccntformat} +% This command formats the section number including the space +% following it. +% \changes{1.0n}{1995/05/06}{Use \cs{quad} instead of \cs{hskip}} +% \begin{macrocode} +\def\@seccntformat#1{\csname the#1\endcsname\quad} +% \end{macrocode} +% \end{macro} +% +% Pseudocode for the |\@ssect| command +% \begin{oldcomments} +% \@ssect{INDENT}{BEFORESKIP}{AFTERSKIP}{STYLE}{ARG} == +% BEGIN +% IF AFTERSKIP > 0 +% THEN \begingroup +% STYLE +% \@hangfrom{\hskip INDENT}{\interlinepenalty 10000 ARG\par} +% \endgroup +% ELSE \@svsechd == BEGIN STYLE +% \hskip INDENT +% ARG +% END +% FI +% \@xsect{AFTERSKIP} +% END +% \end{oldcomments} +% +% Pseudocode for the |\@afterheading| command +% \begin{oldcomments} +% \@afterheading == +% BEGIN +% @nobreak :=G true +% \everypar := BEGIN IF @nobreak = T +% THEN @nobreak :=G false +% \clubpenalty :=G 10000 +% IF @afterindent = F +% THEN remove \lastbox +% FI +% ELSE \clubpenalty :=G \@clubpenalty +% \everypar := NULL +% FI +% END +% END +% \end{oldcomments} +% +% +% \begin{macro}{\@ssect} +% \begin{macrocode} +\def\@ssect#1#2#3#4#5{% + \@tempskipa #3\relax + \ifdim \@tempskipa>\z@ + \begingroup +% \end{macrocode} +% \changes{v1.0s}{1996/05/21} +% {(DPC) Moved brace to allow commands like +% \cs{MakeUppercase} in 4th argument. +% Changed \cs{par} to \cs{endgraf} to allow non-long +% commands. internal/2148} +% \changes{v1.0t}{1996/06/10} +% {(DPC) Changed \cs{endgraf} to \cs{@@par}} +% This |{| used to be after the argument to |\@hangfrom| but was moved +% here to allow commands such as |\MakeUppercase| to be used at the end +% of |#4|. +% \begin{macrocode} + #4{% + \@hangfrom{\hskip #1}% + \interlinepenalty \@M #5\@@par}% + \endgroup + \else +% \end{macrocode} +% \changes{v1.0s}{1996/05/21} +% {(DPC) Added extra braces for internal/2148} +% \begin{macrocode} + \def\@svsechd{#4{\hskip #1\relax #5}}% + \fi + \@xsect{#3}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@afterindent} +% \begin{macro}{\@afterindenttrue} +% \begin{macrocode} +\newif\if@afterindent \@afterindenttrue +% \end{macrocode} +% \end{macro}\end{macro} +% +% \begin{macro}{\@afterheading} +% \changes{v1.0v}{1996/08/02}{Removed \cs{global} +% before \cs{@nobreak...}} +% +% This hook is used in setting up custom-built headings in classes.dtx. +% +% \begin{macrocode} +\def\@afterheading{% + \@nobreaktrue + \everypar{% + \if@nobreak + \@nobreakfalse + \clubpenalty \@M + \if@afterindent \else + {\setbox\z@\lastbox}% + \fi + \else + \clubpenalty \@clubpenalty + \everypar{}% + \fi}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@hangfrom} +% +% |\@hangfrom{|\meta{text}|}| : Puts \meta{text} in a box, and makes a +% hanging indentation of the following material up to the first +% |\par|. Should be used in vertical mode. +% +% \changes{v1.0a}{1994/03/07}{(DPC)Extra groups for colour} +% \begin{macrocode} +\def\@hangfrom#1{\setbox\@tempboxa\hbox{{#1}}% + \hangindent \wd\@tempboxa\noindent\box\@tempboxa} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@secnumdepth} +% \begin{macro}{\c@tocdepth} +% \begin{macrocode} +\newcount\c@secnumdepth +\newcount\c@tocdepth +% \end{macrocode} +% \end{macro}\end{macro} +% +% \begin{macro}{\secdef} +% +% |\secdef{|\meta{unstarcmds}|}{|\meta{unstarcmds}|}{|% +% \meta{starcmds}|}|\\ +% When defining a |\chapter| or |\section| command without using +% |\@startsection|, you can use |\secdef| as follows: +% \begin{enumerate} +% \item |\def\chapter{| \ldots |\secdef| +% |\|\meta{starcmd} |\|\meta{unstarcmd} |}| +% \item |\def\|\meta{starcmd}|[#1]#2{| \ldots |}| +% |%| Command to define |\chapter[|\ldots|]{|\ldots|}| +% \item |\def\|\meta{unstarcmd}|#1{| \ldots |}| +% |%| Command to define |\chapter*{|\ldots|}| +% \end{enumerate} +% +% \begin{macrocode} +\def\secdef#1#2{\@ifstar{#2}{\@dblarg{#1}}} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Initializations} +% \begin{macro}{\sectionmark} +% \begin{macro}{\subsectionmark} +% \begin{macro}{\subsubsectionmark} +% \begin{macro}{\paragraphmark} +% \begin{macro}{\subparagraphmark} +% \changes{v1.0q}{1995/10/25}{Use \cs{let} not \cs{def} to save space.} +% \begin{macrocode} +\let\sectionmark\@gobble +\let\subsectionmark\@gobble +\let\subsubsectionmark\@gobble +\let\paragraphmark\@gobble +\let\subparagraphmark\@gobble +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +\message{contents,} +% \end{macrocode} +% +% \subsection{Table of Contents etc.} +% +% \subsubsection{Convention} +% |\tf@|\meta{foo} = file number for output for table foo. +% The file is opened only if |@filesw| = |true|. +% +% \subsubsection{Commands} +% +% +% A |\l@|\meta{type}|{|\meta{entry}|}{|\meta{page}|}| Macro needs to +% defined by document style for making an entry of type \meta{type} +% in a table of contents, etc. E.g., the document style +% should define |\l@chapter|, |\l@section|, etc. +% +% \textbf{Note:} When the |\protect| command is +% used in the \meta{entry} or \meta{text} of one of the commands +% below, it causes the following control sequence to be written on +% the file without being expanded. The sequence will be expanded +% when the table of contents entry is processed. +% +% \textbf{Surprise:} Inside an |\addcontentsline| or |\addtocontents| +% command argument, the commands: |\index|, |\glossary|, and |\label| +% are no-ops . This could cause a problem if the user puts an +% |\index| or |\label| into one of the commands he writes, or into the +% optional `short version' argument of a |\section| or |\caption| +% command. +% +% \begin{macro}{\@starttoc} +% The |\@starttoc|\marg{ext} command is used to define the commands:\\ +% |\tableofcontents|, |\listoffigures|, etc. +% +% For example: +% |\@starttoc{lof}| is used in |\listoffigures|. This command +% reads the |.|\meta{ext} file and sets up to write the new +% |.|\meta{ext} file. +% +% \begin{oldcomments} +% \@starttoc{EXT} == +% BEGIN +% \begingroup +% \makeatletter +% read file \jobname.EXT +% IF @filesw = true +% THEN open \jobname.EXT as file \tf@EXT +% FI +% @nobreak :=G FALSE %% added 24 May 89 +% \endgroup +% END +% \end{oldcomments} +% +% \changes{0.0}{1992/01/14}{(RmS) added \cs{immediate} to \cs{openout} +% as all \cs{write} commands +% are also executed \cs{immediate}} +% \changes{v1.0u}{1996/07/26}{removed \cs{global} +% before \cs{@nobreak...}} +% \begin{macrocode} +\def\@starttoc#1{% + \begingroup + \makeatletter + \@input{\jobname.#1}% + \if@filesw + \expandafter\newwrite\csname tf@#1\endcsname + \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax + \fi + \@nobreakfalse + \endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\addcontentsline} +% The |\addcontentsline{|\meta{table}|}{|\meta{type}|}{|% +% \meta{entry}|}| command allows the user to add +% his/her own entry to a table of contents, etc. The command adds the +% entry |\contentsline{|\meta{type}|}{|\meta{entry}|}{|\meta{page}|}| +% to the |.|\meta{table} file. +% +% This macro is implemented as an aplication of |\addtocontents|. +% Note that |\thepage| is not expandable during |\protected@write| +% therefore one gets the page number at the time of the |\shipout|. +% +% \changes{v1.0c}{1994/05/20}{Correct setting of \cs{protect}.} +% \changes{v1.0j}{1995/04/23}{Use \cs{contentsline} internally.} +% \changes{v1.0h}{1994/11/04}{Added \cs{protected@write} to +% \cs{addcontentsline}. ASAJ.} +% \begin{macrocode} +\def\addcontentsline#1#2#3{% + \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}}} +% \end{macrocode} +% \end{macro} +% +% \changes{v1.0c}{1994/05/20}{Correct setting of \cs{protect}.} +% \changes{v1.0h}{1994/11/04}{Added \cs{protected@write} to +% \cs{addtocontents}. ASAJ.} +% \begin{macro}{\addtocontents} +% +% The |\addtocontents{|\meta{table}|}{|\meta{text}|}| command +% adds \meta{text} to the |.|\meta{table} file, with no +% page number. +% +% \begin{macrocode} +\long\def\addtocontents#1#2{% + \protected@write\@auxout + {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}% + {\string\@writefile{#1}{#2}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\contentsline} +% The |\contentsline{|\meta{type}|}{|\meta{entry}|}{|\meta{page}|}| +% macro produces a \meta{type} entry in a table of contents, etc. +% It will appear in the |.toc| or other file. For example, +% The entry for subsection 1.4.3 in the table of contents for +% example, might be produced by: +% +% \begin{verbatim} +% \contentsline{subsection} +% {\makebox{30pt}[r]{1.4.3} Gnats and Gnus}{22} +% \end{verbatim} +% +% The |\protect| command causes command sequences to be written +% without expanding them. +% +% \begin{macrocode} +\def\contentsline#1{\csname l@#1\endcsname} +% \end{macrocode} +% \end{macro} +% +% |\@dottedtocline{|\meta{level}|}{|\meta{indent}|}{|\meta{numwidth}% +% |}{|\meta{title}|}{|\meta{page}|}|: +% Macro to produce a table of contents line with the following +% parameters: +% \begin{description} +% \item[level] If \meta{level} $>$ |\c@tocdepth|, then no line +% produced. +% \item[indent] Total indentation from the left margin. +% \item[numwidth] Width of box for number if the \meta{title} has a +% |\numberline| command. +% As of 25 Jan 1988, this is also the amount of extra +% indentation added to second and later lines of a +% multiple line entry. +% \item[title] Contents of entry. +% \item[page] Page number. +% \end{description} +% +% Uses the following parameters, which must be set by the document +% style. They should be defined with |\def|'s. +% \begin{description} +% \item[|\@pnumwidth|] Width of box in which page number is set. +% \item[|\@tocrmarg|] Right margin indentation for all but last line +% of multiple-line entries. +% \item[|\@dotsep|] Separation between dots, in mu units. +% Should be |\def|'d to a number like 2 or 1.7 +% \end{description} +% +% \begin{macro}{\@dottedtocline} +% \changes{LaTeX2.09}{1991/09/29} +% {(RmS) added \cs{reset@font} for page number} +% \changes{v1.0e}{1994/05/25}{Put braces around argument 4 +% (the actual toc entry) to avoid font (and possibly other) +% changes leaking out to the leaders.} +% \changes{v1.0g}{1994/10/18}{Added \cs{normalcolor} for page number} +% \changes{v1.0z}{1996/12/20}{Added \cs{nobreak} for latex/2343} +% \begin{macrocode} +\def\@dottedtocline#1#2#3#4#5{% + \ifnum #1>\c@tocdepth \else + \vskip \z@ \@plus.2\p@ + {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip + \parindent #2\relax\@afterindenttrue + \interlinepenalty\@M + \leavevmode + \@tempdima #3\relax +% \end{macrocode} +% \changes{v1.0z}{1996/12/20}{Added \cs{nobreak} for latex/2343} +% \begin{macrocode} + \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip + {#4}\nobreak + \leaders\hbox{$\m@th +% \end{macrocode} +% If a document uses fonts other than computer modern, the use of a +% dot from math can be very disturbing despite the fact that this +% might be the only place in a document that then uses computer +% modern. +% Therefore we surround the dot with an |\hbox| to escape to the +% surrounding text font. +% \changes{v1.0k}{1995/04/25}{Added \cs{hbox} around dots.} +% \changes{v1.0l}{1995/05/02}{Don't reset to \cs{rmfamily}} +% \begin{macrocode} + \mkern \@dotsep mu\hbox{.}\mkern \@dotsep + mu$}\hfill + \nobreak + \hb@xt@\@pnumwidth{\hfil\normalfont \normalcolor #5}% + \par}% + \fi} +% \end{macrocode} +% \end{macro} +% +% \textbf{Note:} |\nobreak|'s added 7 Jan 86 to prevent bad line break +% that left the page number dangling by itself at left edge of a new +% line. +% +% Changed 25 Jan 88 to use |\leftskip| instead of |\hangindent| so +% leaders of multiple-line contents entries would line up properly. +% \begin{macro}{\numberline} +% |\numberline{|\meta{number}|}|: For use in a |\contentsline| command. +% It puts \meta{number} flushleft in a box of width |\@tempdima| +% (Before 25 +% Jan 88 change, it also added |\@tempdima| to the hanging +% indentation.) +% +% \begin{macrocode} +\def\numberline#1{\hb@xt@\@tempdima{#1\hfil}} +%</2ekernel> +% \end{macrocode} +% \end{macro} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltspace.dtx b/Master/texmf-dist/source/latex/base/ltspace.dtx new file mode 100644 index 00000000000..e455958dc24 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltspace.dtx @@ -0,0 +1,1000 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltspace.dtx +%<*driver> +% \fi +\ProvidesFile{ltspace.dtx} + [2004/02/15 v1.3a LaTeX Kernel (spacing)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltspace.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{459} +% +% \changes{v1.1a}{1994/05/16}{(ASAJ) Split from ltinit.dtx.} +% \changes{v1.2f}{1995/05/25}{Macros moved to ltlists.dtx} +% \changes{v1.2n}{1996/04/22}{Documentation Improvements} +% \changes{v1.2o}{1996/06/22}{Documentation of problems added} +% \changes{v1.2q}{1996/07/27}{Further documentation of problems} +% \changes{v1.2r}{1996/07/27}{Correct documentation of problems} +% \changes{v1.2w}{1998/08/17}{Documentation fixes.} +% +% +% \section{Spacing} +% +% This section deals with spacing, and line- and page-breaking. +% +% \subsection{User Commands} +% +% \DescribeMacro\nopagebreak\oarg{i} : \meta{i} = 0,...,4. +% +% Default argument = 4. Puts a penalty into the vertical list +% output as follows:\\ +% 0 : penalty = 0\\ +% 1 : penalty = |\@lowpenalty|\\ +% 2 : penalty = |\@medpenalty|\\ +% 3 : penalty = |\@highpenalty|\\ +% 4 : penalty = 10000 +% +% \DescribeMacro\pagebreak\oarg{i} : +% same as \nopagebreak except negatives of its penalty +% +% \DescribeMacro\linebreak\oarg{i} : analog of the above +% +% \DescribeMacro\nolinebreak\oarg{i} : analog of the above +% +% \DescribeMacro\samepage : +% inhibits page breaking most places by setting the +% following penalties to 10000:\\ +% |\interlinepenalty|\\ +% |\postdisplaypenalty|\\ +% |\interdisplaylinepenalty|\\ +% |\@beginparpenalty|\\ +% |\@endparpenalty|\\ +% |\@itempenalty|\\ +% |\@secpenalty|\\ +% |\interfootnotelinepenalty| +% +% \DescribeMacro{\\} : initially defined to be |\newline| +% +% |\\|\oarg{length} : initially defined to be +% |\vspace|\marg{length}|\newline|\\ +% Note: |\\*| adds a |\vadjust{\penalty 10000}| +% +% OBSOLETE COMMANDS (which never made it into the manual): +% +% |\obeycr| : defines <CR> == |\\\relax|\\ +% |\restorecr| : restores <CR> to its usual meaning. +% +% +% \StopEventually{} +% +% \subsection{Chris' comments} +% +% There are several aspects of the handling of space in horizontal +% mode that are inconsistent or do not work well in some cases. +% These are largely concerned with ignoring the effect of space +% tokens that would otherwise typeset an inter-word space. +% +% Negating the effect of such space tokens is achieved by two +% mechanisms: +% \begin{itemize} +% \item |\unskip| is used to remove the glue just added by +% a space that has already had its effect; it is sometimes +% invoked after an |\ifdim| test on |\lastskip| (see below); +% \item |\ignorespaces| is used to ignore space-tokens yet to come. +% \end{itemize} +% +% The test done on |\lastskip| is sometimes for equality with zero and +% sometimes for being positive. Recall also that the test is only on +% the natural length of the glue and that no glue cannot be +% distinguished from glue whose natural length is zero: to summarise, +% a pretty awful test. It is not clear why these tests are not all +% the same; I think that they should all be for equality. One place +% where |\unskip| is often used is just before a |\par| (which itself +% internally does an |\unskip|) and one bit of code (in |\@item|) even +% has two |\unskips| before a |\par|. These uses may be fossil code +% but if they are necessary, maybe |\@killglue| would be even safer. +% +% Such removal of glue by |\unskip| may sometimes have the wrong result, +% removing not the glue from a space-token but other explicit glue; +% this is sometimes not what is intended. +% +% A common way to prevent such removal is to add an |\hskip\z@| after +% the glue that should not be removed. This protects that glue +% against one |\unskip| with no test but not against more than one. +% It does work for `tested |\unskip|s'. This is used +% by |\hspace*| but not by |\hspace|; this is inconsistent as the star +% is supposed to prevent removal only at the beginning of a line, not +% at the end, or in a tabular, etc. +% +% If this reason for removing glue were the only consideration then a +% tested-|\unskip| and protection by |\hskip\z@| would suffice but +% would need to be consistently implemented. +% +% However, the class of invisibles, commands and environments tries to +% be even cleverer: one of these tries to leave only one inter-word +% space whenever there is one before it and one after it; and it does +% this quite well. +% +% But problems can arise when there is not a space-token on +% both sides of it; in particular, when an invisible appears at the +% beginning or end of a piece of text the method still leaves one space +% token whereas usually in these cases it should leave none. +% +% Also, the current rules do not work well when more than one such +% command appears consecutively, separated by space-tokens; it leaves +% glue between every other invisible. +% +% There is also a question about what these commands should do when +% they occur next to spaces that do not come from space tokens but, +% for example, from |\hspace|. Should they still produce `just one +% space'? If so, which one? It is good to note that the manual +% is sufficiently cautious about invisibles that we are not obliged to +% make anything work. +% +% Another interesting side-road to explore is whether the space-tokens +% either side of an |\hspace{...}| should be ignored. +% +% One alternative to the current algorithm that is often suggested is +% that all glue around the invisible should be consolidated into a +% space after it (usually without stating how much glue should be put +% there). The command |\nolinebreak| is implemented this way (and +% |\linebreak| should also be). This does not work correctly for the +% following common case: +% \begin{verbatim} +% ... some text +% \index{some-word} +% some-word and more text. +% \end{verbatim} +% This is optimal coding since it is normal to index a word that gets +% split across a page-break on its starting page. This would, on the +% other hand, fix another common (and documented) failure of the +% current system: when the invisible is the last thing in a paragraph +% the space before it is not removed and, worse, it is also hidden +% from the paragraph-ending mechanism so that an `empty' line can be +% created at the end of the paragraph. +% +% Another deficiency (I think) of the current system is that the +% following is treated as having the |\index| command between the +% paragraphs, which is probably not what the author intended (since +% there is no empty line after it). +% \begin{verbatim} +% +% \index{beginnings} +% Beginnings of paragraphs ... +% \end{verbatim} +% +% I know of no algorithm that will handle satisfactorily even +% all the most common cases; note that it could be that the best +% algorithm may be different for different invisibles since, +% for example, the common uses and expected behaviour of +% |\index|, |\marginpar|, |\linebreak|, |\pagebreak| and +% |\vspace| are somewhat different. [For example, is +% |\vspace| ever used in the middle of a paragraph?] +% +% One method that can (and is) used to make invisible commands produce +% no space when used at the beginning of text is to put in some glue +% that is nearly enough the same as no glue or glue of zero length in +% all respects except for the precise test for not being exactly equal +% to zero; examples of such glue are |\hskip 1sp| and, possibly better +% but more complex, |\hskip -1sp \hskip 1sp|. However, this only works +% when it is known that user-supplied text is about to start. +% +% Some similar concerns apply to the handling of space and penalties +% in vertical mode; there is an extra hurdle here as |\unskip| does +% not work on the main vertical list. The complexity of the tests done +% by |\addvspace| have never been explained. +% +% The implementation of space hacks etc for vertical mode is another +% major area that needs further attention; my earlier experiments +% did not produce much improvement over the current unsatisfactory +% situation. +% +% One particular problem is what happens when the following very +% natural coding is used (part of the problem here is that this looks +% like an hmode problem, but it is not): +% \begin{verbatim} +% ... end of text. +% +% \begin{enumerate} +% \item \label{item:xxx} Item text. +% \end{enumerate} +% \end{verbatim} +% +% \subsection{Some immediate actions} +% +% \begin{itemize} +% \item Fix bug in |\linebreak|. +% \item Fix bug in |\\*|. +% \item Reimplement |\\|, etc, removing extra |\vadjust|s and getting +% better error trapping (this seems to involve a lot more tokens). +% \item Investigate whether |\\|, etc need to be errors in vmode; I +% think that they could be noops (maybe with a warning). +% \item Make all(?) |\unskips| include test for zero skip (rather than +% other tests or no test). +% \item Consider replacing |\hskip 1sp| by something better (here +% called an `infinitesimal' skip). +% \item Look at all |\hskip\z@| (or similar) to see if they should be +% changed to an `infinitesimal' skip. +% \item Resolve the inconsistency between |\hspace| and |\hspace*|. +% \item Remove unnecessary |\unskips|. +% \item Investigate and rationalise the `newline' code. +% \item Find better algorithms for all sorts of things or, easier(?), +% fix \TeX{} itself. +% \end{itemize} +% +% \subsection{The code} +% +% \begin{macrocode} +%<*2ekernel> +\message{spacing,} +% \end{macrocode} +% +% \begin{macro}{\pagebreak} +% \begin{macro}{\nopagebreak} +% \changes{v1.2h}{1995/07/05}{Reimplemented both using \cs{@no@pgbk}} +% \changes{v1.2j}{1995/10/16}{(DPC) Use \cs{@testopt} /1911} +% \begin{macrocode} +\def\pagebreak{\@testopt{\@no@pgbk-}4} +\def\nopagebreak{\@testopt\@no@pgbk4} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@no@pgbk} +% \changes{v1.2h}{1995/07/05}{Macro replaces \cs{@pgbk} +% and \cs{@nopgbk}} +% \begin{macrocode} +\def\@no@pgbk #1[#2]{% + \ifvmode + \penalty #1\@getpen{#2}% + \else + \@bsphack + \vadjust{\penalty #1\@getpen{#2}}% + \@esphack + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\linebreak} +% \begin{macro}{\nolinebreak} +% \changes{v1.2u}{1996/10/29}{Reimplemented both using \cs{@no@lnbk}} +% \changes{v1.2j}{1995/10/16}{(DPC) Use \cs{@testopt} /1911} +% \begin{macrocode} +\def\linebreak{\@testopt{\@no@lnbk-}4} +\def\nolinebreak{\@testopt\@no@lnbk4} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\@no@lnbk} +% \changes{v1.2u}{1996/10/29}{Macro replaces \cs{@lnbk} +% and \cs{@nolnbk}} +% \begin{macrocode} +\def\@no@lnbk #1[#2]{% + \ifvmode + \@nolnerr + \else + \@tempskipa\lastskip + \unskip + \penalty #1\@getpen{#2}% + \ifdim\@tempskipa>\z@ + \hskip\@tempskipa + \ignorespaces + \fi + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\samepage} +% \begin{macrocode} +\def\samepage{\interlinepenalty\@M + \postdisplaypenalty\@M + \interdisplaylinepenalty\@M + \@beginparpenalty\@M + \@endparpenalty\@M + \@itempenalty\@M + \@secpenalty\@M + \interfootnotelinepenalty\@M} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\\} +% \changes{v1.2a}{1994/11/11}{(DPC) Make robust} +% \changes{v1.2d}{1994/11/14}{(DPC) Macro modified} +% +% \changes{v1.2u}{1996/10/29}{Corrected and rationalised code} +% The purpose of the new code is to fix a few bugs; however, it also +% attempts to optimize the following, in order of priority: +% \begin{enumerate} +% \item efficient execution of plain |\\|; +% \item efficient execution of |\\[...]|; +% \item memory use; +% \item name-space use. +% \end{enumerate} +% The changes should make no difference to the typeset output. +% It appears to be safe to use |\reserved@e| and |\reserved@f| here +% (other reserved macros are somewhat disastrous). +% +% These changes made |\newline| even less robust than it had been, +% so now it is explicitly robust, like |\\|. +% \begin{macro}{\@normalcr} +% The internal definition of the `normal' definition of |\\|. +% \begin{macrocode} +\DeclareRobustCommand\\{% + \let \reserved@e \relax + \let \reserved@f \relax + \@ifstar{\let \reserved@e \vadjust \let \reserved@f \nobreak + \@xnewline}% + \@xnewline} +\expandafter\let\expandafter\@normalcr + \csname\expandafter\@gobble\string\\ \endcsname +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\newline} +% A simple form of the `normal' definition of |\\|. +% \changes{v1.2v}{1997/05/07}{Made completely robust.} +% \begin{macrocode} +\DeclareRobustCommand\newline{\@normalcr\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xnewline} +% \begin{macrocode} +\def\@xnewline{\@ifnextchar[% ] bracket matching + \@newline + {\@gnewline\relax}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@newline} +% \begin{macrocode} +\def\@newline[#1]{\let \reserved@e \vadjust + \@gnewline {\vskip #1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@gnewline} +% \changes{v1.2u}{1996/10/29}{Added macro} +% The |\nobreak| added to prevent null lines when |\\| +% ends an overfull line. Change made 24 May 89 as suggested by +% Frank Mittelbach and Rainer Sch\"opf +% \changes{v1.2h}{1995/07/05}{Use \cs{break}} +% \begin{macrocode} +\def\@gnewline #1{% + \ifvmode + \@nolnerr + \else + \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break + \fi} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@getpen} +% \begin{macrocode} +\def\@getpen#1{\ifcase #1 \z@ \or \@lowpenalty\or + \@medpenalty \or \@highpenalty + \else \@M \fi} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\if@nobreak} +% \changes{v1.2p}{1996/07/26}{put \cs{global} inside definition} +% Switch used to avoid page breaks caused by |\label| after a +% section heading, etc. It should be \textbf{GLOBALLY} set true +% after the |\nobreak| and \textbf{globally} set false by the +% next invocation of |\everypar|. +% +% Commands that reset |\everypar| should globally set it false if +% appropriate. +% \begin{macrocode} +\def\@nobreakfalse{\global\let\if@nobreak\iffalse} +\def\@nobreaktrue {\global\let\if@nobreak\iftrue} +\@nobreakfalse +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\@savsk} +% \begin{macro}{\@savsf} +% Registers used to save the space factor and last skip. +% \begin{macrocode} +\newdimen\@savsk +\newcount\@savsf +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% +% +% \begin{macro}{\@bsphack} +% \changes{LaTeX2e}{1993/12/08} +% {Command reimplemented; late birthday present for Chris} +% \changes{LaTeX2e}{1993/12/08}{Command reimplemented} +% \changes{LaTeX2e}{1993/12/16}{Corrected optimisation :-)} +% |\@bsphack| and |\@esphack| +% used by macros such as |\index| and +% |\begin{@float}| \ldots |\end{@float}| +% that want to be invisible --- i.e., +% not leave any extra space when used in the middle of text. Such +% a macro should begin with |\@bsphack| and end with |\@esphack| +% The macro in question should not create any text, nor change the +% mode. +% +% Before giving the current definition we give an extended definition +% that is currently not used (because it doesnt work as advertised:-) +% +% These are generalised hacks which attempt to do sensible things +% when `invisible commands' appear in vmode too. +% +% They need to cope with space in both hmode (plus spacefactor) and +% vmode, and also cope with breaks etc. In vmode this means +% ensuring that any following |\addvspace|, etc sees the correct +% glue in |\lastskip|. +% +% In fact, these improved versions should be used for other cases +% of `whatsits, thingies etc' which should be invisible. They are +% only for commands, not environments (see notes on |\@Esphack|). +% +% BTW, anyone know why the standard hacks are surrounded by +% |\ifmmode\else| rather than simply |\ifhmode|? +% +% And are there any cases where saving the spacefactor is +% essential? I have some extensions where it is, but it does not +% appear to be so in the standard uses. +%\begin{verbatim} +%\def \@bsphack{% +% \relax \ifvmode +% \@savsk \lastskip +% \ifdim \lastskip=\z@ +% \else +% \vskip -\lastskip +% \fi +% \else +% \ifhmode +% \@savsk \lastskip +% \@savsf \spacefactor +% \fi +% \fi +%} +%\end{verbatim} +% I think that, in vmode, it is the safest to put +% in a |\nobreak| immediately after such things since writes, +% inserts etc followed by glue give valid breakpoints and, in +% general, it is possible to create breaks but impossible to +% destroy them. +%\begin{verbatim} +%\def \@esphack{% +% \relax \ifvmode +% \nobreak +% \ifdim \@savsk=\z@ +% \else +% \vskip\@savsk +% \fi +% \else +% \ifhmode +% \spacefactor \@savsf +% \ifdim \@savsk>\z@ +% \ignorespaces +% \fi +% \fi +% \fi +%} +%\end{verbatim} +% For the moment we are going to ignore the vertical versions until +% they are correct. +% \changes{LaTeX2e}{1993/12/19}{There seem to be problems with selfmade +% birthday presents} +% \begin{macrocode} +\def\@bsphack{% + \relax + \ifhmode + \@savsk\lastskip + \@savsf\spacefactor + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@esphack} +% Companion to |\@bsphack|. +% \begin{macrocode} +\def\@esphack{% + \relax + \ifhmode + \spacefactor\@savsf + \ifdim\@savsk>\z@ + \ignorespaces + \fi + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@Esphack} +% A variant of |\@esphack| that sets the |@ignore| switch to +% true (as |\@esphack| used to do previously). +% This is currently used only for floats and similar environments. +% \changes{v1.2s}{1996/08/02}{Remove \cs{global} before \cs{@ignore...}} +% \begin{macrocode} +\def\@Esphack{% + \relax + \ifhmode + \spacefactor\@savsf + \ifdim\@savsk>\z@ + \@ignoretrue + \ignorespaces + \fi + \fi} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@vbsphack} +% \changes{LaTeX2e}{1993/12/08}{Command added} +% Another variant which is useful for invisible things which should +% not live in vmode (this is how some people feel about marginals). +% +% If it occurs in vmode then it enters hmode and ensures that +% |\@savsk| is nonzero so that the |\ignorespaces| is put in later. +% It is not used at present. +% \changes{v1.2f}{1995/05/25}{(CAR) not used so `removed'.} +%\begin{verbatim} +% \def \@vbsphack{ % +% \relax \ifvmode +% \leavevmode +% \@savsk 1sp +% \@savsf \spacefactor +% \else +% \ifhmode +% \@savsk \lastskip +% \@savsf \spacefactor +% \fi +% \fi +% } +%\end{verbatim} +% \end{macro} +% +% +% \subsection{Vertical spacing} +% +% +% \LaTeX\ supports the plain \TeX\ commands +% |\smallskip|, |\medskip| and |\bigskip|. +% However, it redefines them using |\vspace| instead of |\vskip|. +% +% Extra vertical space is added by the command +% |\addvspace|\marg{skip}, +% which adds a vertical skip of \meta{skip} to the document. +% The sequence\\ +% |\addvspace|\marg{s1} |\addvspace|\marg{s2} +% is equivalent to\\ +% |\addvspace|\marg{maximum of s1, s2}. +% +% |\addvspace| should be used only in vertical mode, and gives an +% error if it's not. The |\addvspace| command does \emph{not} add +% vertical space if |@minipage| is true. The minipage environment uses +% this to inhibit the addition of extra vertical space at the beginning. +% +% Penalties are put into the vertical list with the +% |\addpenalty|\marg{penalty} +% command. It works properly when |\addpenalty| and |\addvspace| +% commands are mixed. +% +% The |@nobreak| switch is set true used when in vertical mode and no +% page break should occur. (Right now, it is used only by the section +% heading commands to inhibit page breaking after a heading.) +% +% +%\begin{verbatim} +% \addvspace{SKIP} == +% BEGIN +% if vmode +% then if @minipage +% else if \lastskip =0 +% then \vskip SKIP +% else if \lastskip < SKIP +% then \vskip -\lastskip +% \vskip SKIP +% else if SKIP < 0 and \lastskip >= 0 +% then \vskip -\lastskip +% \vskip \lastskip + SKIP +% fi fi fi fi +% else useful error message (CAR). +% fi +% END +%\end{verbatim} +% +% \begin{macro}{\@xaddvskip} +% Internal macro for |\vspace| handling the case that space has +% previously been added. +% \begin{macrocode} +\def\@xaddvskip{% + \ifdim\lastskip<\@tempskipb + \vskip-\lastskip + \vskip\@tempskipb + \else + \ifdim\@tempskipb<\z@ + \ifdim\lastskip<\z@ + \else + \advance\@tempskipb\lastskip + \vskip-\lastskip + \vskip \@tempskipb + \fi + \fi + \fi} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\addvspace} +% \changes{v1.2b}{1994/11/12}{Corrected error message} +% \changes{v1.2c}{1994/11/13}{Recorrected error message} +% Add vertical space taking into account space already added, as +% described above. +% \begin{macrocode} +\def\addvspace#1{% + \ifvmode + \if@minipage\else + \ifdim \lastskip =\z@ + \vskip #1\relax + \else + \@tempskipb#1\relax + \@xaddvskip + \fi + \fi + \else + \@noitemerr + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\addpenalty} +% \changes{v1.2b}{1994/11/12}{Corrected error message} +% \changes{v1.2c}{1994/11/13}{Recorrected error message} +% \begin{macrocode} +\def\addpenalty#1{% + \ifvmode + \if@minipage + \else + \if@nobreak + \else + \ifdim\lastskip=\z@ + \penalty#1\relax + \else + \@tempskipb\lastskip + \vskip -\lastskip + \penalty#1% + \vskip\@tempskipb + \fi + \fi + \fi + \else + \@noitemerr + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\vspace} +% \changes{v1.2m}{1996/01/20}{Made robust} +% \begin{macro}{\@vspace} +% \begin{macro}{\@vspacer} +% \changes{v1.2f}{1995/05/25} +% {(CAR) macros modified to be more efficient} +% \changes{v1.2f}{1995/05/25}{(CAR) \cs{@restorepar} added to avoid +% possible infinite tail recursion caused by a typo in the argument.} +% The new code for these commands depends on the following facts: +% \begin{itemize} +% \item The value of prevdepth is changed only when a box or rule +% is created and added to a vertical list; +% \item The value of prevdepth is used only when a box is created +% and added to a vertical list; +% \item The value of prevdepth is always local to the building of +% one vertical list. +% \end{itemize} +% \begin{macrocode} +\DeclareRobustCommand\vspace{\@ifstar\@vspacer\@vspace} +\def\@vspace #1{% + \ifvmode + \vskip #1 + \vskip\z@skip + \else + \@bsphack + \vadjust{\@restorepar + \vskip #1 + \vskip\z@skip + }% + \@esphack + \fi} +% \end{macrocode} +% +% \begin{macrocode} +\def\@vspacer#1{% + \ifvmode + \dimen@\prevdepth + \hrule \@height\z@ + \nobreak + \vskip #1 + \vskip\z@skip + \prevdepth\dimen@ + \else + \@bsphack + \vadjust{\@restorepar + \hrule \@height\z@ + \nobreak + \vskip #1 + \vskip\z@skip}% + \@esphack + \fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\smallskip} +% \begin{macro}{\medskip} +% \begin{macro}{\bigskip} +% \begin{macrocode} +\def\smallskip{\vspace\smallskipamount} +\def\medskip{\vspace\medskipamount} +\def\bigskip{\vspace\bigskipamount} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\smallskipamount} +% \begin{macro}{\medskipamount} +% \begin{macro}{\bigskipamount} +% \begin{macrocode} +\newskip\smallskipamount \smallskipamount=3pt plus 1pt minus 1pt +\newskip\medskipamount \medskipamount =6pt plus 2pt minus 2pt +\newskip\bigskipamount \bigskipamount =12pt plus 4pt minus 4pt +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% +% \subsection{Horizontal space (and breaks)} +% +% \begin{macro}{\nobreakdashes} +% \changes{v1.3}{2004/02/04}{(Macro added} +% \changes{v1.3a}{2004/02/15}{(Added spacefactor setting} +% This idea is borrowed from the \textsf{amsmath} package but +% here we define a robust command. +% +% This command is a low-level command designed for use only before +% hyphens or dashes (such as |-|, |--|, or |---|). +% +% It could probably be better implemented: it may need its own +% private token register and temporary commmand. +% +% Setting the hyphen in a box and then unboxing it means that the +% normal penalty will not be added after it---and if the penalty is +% not there a break will not be taken (unless an explicit penalty +% or glue follows, thus the final \verb=\nobreak=). +% +% Note that even if it is not followed by a `-', it still leaves +% vmode and sets the spacefactor; so use it carefully! +% +% \begin{macrocode} +\DeclareRobustCommand{\nobreakdashes}{% + \leavevmode + \toks@{}% + \def\reserved@a##1{\toks@\expandafter{\the\toks@-}% + \futurelet\@let@token \reserved@b}% + \def\reserved@b {\ifx\@let@token -% + \expandafter\reserved@a + \else + \setbox\z@ \hbox{\the\toks@\nobreak}% + \unhbox\z@ + \spacefactor\sfcode`\- + \fi}% + \futurelet\@let@token \reserved@b +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\nobreakspace} +% \changes{v1.2k}{1995/12/04}{(Macro added} +% \begin{macro}{\@xobeysp} +% \changes{v1.2t}{1996/09/28}{Moved from ltmiscen.dtx and redefined to +% use \cs{nobreakspace }} +% +% This is a robust command that produces a horizontal space at +% which, in paragraph-mode, a line-break is not possible. We then +% define an active |~| to expand to it since this is the documented +% behaviour of |~|. One reason for introducing this is that some +% 8-bit input encodings have a slot for such a space and we do not +% want to use active characters as the \LaTeX{} internal commands. +% +% The braces in the definition of |~| are needed to ensure that a +% following space is preserved when reading to/from internal files. +% \changes{v1.2l}{1995/12/04}{(braces added to definition of tilde} +% +% We need to keep \cs{@xobeysp} as it is widely used; so here it is +% let to the non-robust command \cs{nobreakspace }. +% +% \begin{macrocode} +\DeclareRobustCommand{\nobreakspace}{% + \leavevmode\nobreak\ } +\catcode `\~=13 +\def~{\nobreakspace{}} +\expandafter\let\expandafter\@xobeysp\csname nobreakspace \endcsname +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +% \end{macrocode} +% +% +% \begin{macro}{\,} +% Used in paragraph mode produces a |\thinspace|. It has the +% ordinary definition in math mode. Useful for quotes inside quotes, +% as in |``\,`Foo', he said.''| +% \changes{v1.0o}{1994/05/11}{Use \cs{DeclareRobustCommand}. ASAJ.} +% \begin{macrocode} +\DeclareRobustCommand{\,}{% + \relax\ifmmode\mskip\thinmuskip\else\thinspace\fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@} +% Placed before a '.', makes it a sentence-ending period. Does the +% right thing for other punctuation marks as well. Does this by +% setting spacefactor to 1000. +% \begin{macrocode} +\def\@{\spacefactor\@m} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\hspace} +% \changes{v1.0o}{1994/05/11}{Use \cs{DeclareRobustCommand}. ASAJ.} +% \begin{macrocode} +\DeclareRobustCommand\hspace{\@ifstar\@hspacer\@hspace} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@hspace} +% \changes{LaTeX2e}{1993/08/05} +% {(RmS) Removed superfluous \cs{leavevmode} in \cs{@hspace} and +% \cs{@hspacer}, as suggested by CAR.} +% \begin{macrocode} +\def\@hspace#1{\hskip #1\relax} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\@hspacer} +% extra |\hskip 0pt| added 1985/17/12 to guard +% against a following |\unskip| +% |\relax| added 13 Oct 88 for usual \TeX\ lossage +% replaced both changes by |\hskip\z@skip| 27 Nov 91 +% \begin{macrocode} +\def\@hspacer#1{\vrule \@width\z@\nobreak + \hskip #1\hskip \z@skip} +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\fill} +% \begin{macrocode} +\newskip\fill +\fill = 0pt plus 1fill +% \end{macrocode} +% \end{macro} +% +% +% +% \begin{macro}{\stretch} +% \begin{macrocode} +\def\stretch#1{\z@ \@plus #1fill\relax} +% \end{macrocode} +% \end{macro} +% +% +% +% +% \begin{macro}{\thinspace} +% \begin{macro}{\negthinspace} +% \begin{macro}{\enspace} +% \begin{macrocode} +\def\thinspace{\kern .16667em } +\def\negthinspace{\kern-.16667em } +\def\enspace{\kern.5em } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\enskip} +% \begin{macro}{\quad} +% \begin{macro}{\qquad} +% \begin{macrocode} +\def\enskip{\hskip.5em\relax} +\def\quad{\hskip1em\relax} +\def\qquad{\hskip2em\relax} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\obeycr} +% \begin{macro}{\restorecr} +% The following definitions will probably get deleted or moved to +% compatibility mode soon. +% +% \changes{v1.2g}{1995/06/11} +% {(CAR) \cs{relax} added to stop silent eating of *.} +% \begin{macrocode} +{\catcode`\^^M=13 \gdef\obeycr{\catcode`\^^M13 \def^^M{\\\relax}% + \@gobblecr}% +{\catcode`\^^M=13 \gdef\@gobblecr{\@ifnextchar +\@gobble\ignorespaces}} +\gdef\restorecr{\catcode`\^^M5 }} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel> +% \end{macrocode} +% +% \Finale +\endinput + diff --git a/Master/texmf-dist/source/latex/base/lttab.dtx b/Master/texmf-dist/source/latex/base/lttab.dtx new file mode 100644 index 00000000000..501e9455faa --- /dev/null +++ b/Master/texmf-dist/source/latex/base/lttab.dtx @@ -0,0 +1,1621 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: lttab.dtx +%<def>\ProvidesFile{autotabg.sty} +%<def> [1998/11/13 v1.1m tabbing autoload file] +%<*driver> +% \fi +\ProvidesFile{lttab.dtx}[1998/11/13 v1.1m LaTeX Kernel (Columns)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{lttab.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} + +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% +% \CheckSum{1131} +% +% \changes{v1.0l}{1995/05/07}{Use \cs{hb@xt@}} +% \changes{v1.1a}{1995/05/22}{Support autoloading feature} +% \changes{v1.1b}{1995/06/14}{Use \cs{ProvidesFile} in autoload} +% \changes{v1.1d}{1995/10/04}{Modify autoload support} +% \changes{v1.1k}{1998/06/18}{Small addition to documentation} +% \changes{v1.1l}{1998/07/06}{Small correction to documentation} +% +% \section{Tabbing, Tabular and Array Environments} +% This section deals with `Lining It Up in Columns'. First the +% |tabbing| environment is defined, and then in second part, |tabular| +% together with its variants, |tabular*| and |array|. +% +% Note that the |tabular| defined here is essentially the original +% \LaTeX~2.09 version, not the extended version described in \emph{The +% \LaTeX\ Companion}. Use the |array| package to obtain the extended +% version. +% +% \StopEventually{} +% +% +% \changes{v1.0a}{1994/03/04}{Initial version, split from latex.dtx} +% \changes{v1.0a}{1994/03/07}{Long lines wrapped to 72 columns} +% \changes{v1.0b}{1994/03/28}{Improve documentation} +% \changes{v1.0c}{1994/05/07}{Removed definition of \cs{+}} +% \changes{v1.0c}{1994/05/07}{Removed surplus braces from +% \cs{@ifnextchar} constructs} +% \changes{v1.0f}{1994/05/21}{Use new error commands} +% \changes{v1.0j}{1994/11/17} +% {\cs{@tempa} to \cs{reserved@a}} +% +% \subsection{tabbing} +% +% \begin{oldcomments} +% +% \dimen(\@firsttab + i) = distance of tab stop i from left margin +% 0 <= i <= 15 (?). +% +% \dimen\@firsttab is initialized to \@totalleftmargin, so it starts +% at the prevailing left margin. +% +% \@maxtab = number of highest defined tab register +% probably = \@firsttab + 12 +% \@nxttabmar = tab stop number of next line's left margin +% \@curtabmar = tab stop number of current line's left margin +% \@curtab = number of the current tab. At start of line, +% it equals \@curtabmar +% \@hightab = largest tab number currently defined. +% \@tabpush = depth of \pushtab's +% +% \box\@curline = contents of current line, excluding left margin +% skip, and excluding contents of current field +% \box\@curfield = contents of current field +% +% @rjfield = switch: T iff the last field of the line should +% be right-justified at the right margin. +% +% \tabbingsep = distance left by the \' command between the +% current position and the field that is +% ``left-shifted''. +% +% UTILITY MACROS +% \@stopfield : closes the current field +% \@addfield : adds the current field to the current line. +% \@contfield : continues the current field +% \@startfield : begins the next field +% \@stopline : closes the current line and outputs it +% \@startline : starts the next line +% \@ifatmargin : an \if that is true iff the current line. +% has width zero +% +% \@startline == +% BEGIN +% \@curtabmar :=G \@nxttabmar +% \@curtab :=G \@curtabmar +% \box\@curline :=G null +% \@startfield +% \strut +% END +% +% \@stopline == +% BEGIN +% \unskip +% \@stopfield +% if @rjfield = T +% then @rjfield :=G F +% \@tempdima := \@totalleftmargin + \linewidth +% \hb@xt@ \@tempdima{\@itemfudge +% \hskip \dimen\@curtabmar +% \box\@curline +% \hfil +% \box\@curfield} +% else \@addfield +% \hbox {\@itemfudge +% \hskip \dimen\@curtabmar +% \box\@curline} +% fi +% END +% +% \@startfield == +% BEGIN +% \box\@curfield :=G \hbox { +% END +% +% \@stopfield == +% BEGIN +% } +% END +% +% \@contfield == +% BEGIN +% \box\@curfield :=G \hbox { \unhbox\@currfield %%} brace matching +% END +% \@addfield == +% BEGIN +% \box\@curline :=G \unbox\@curline * \unbox\@curfield +% END +% +% \@ifatmargin == +% BEGIN +% if dim of box\@curline = 0pt then +% END +% +% +% \tabbing == +% BEGIN +% \lineskip :=L 0pt +% \> == \@rtab +% \< == \@ltab +% \= == \@settab +% \+ == \@tabplus +% \- == \@tabminus +% \` == \@tabrj +% \' == \@tablab +% \\ == BEGIN \@stopline \@startline END +% \\[DIST] == BEGIN +% \@stopline \vskip DIST \@startline\ignorespaces END +% \\* == BEGIN \@stopline \penalty 10000 \@startline END +% \\*[DIST] == BEGIN \@stopline \penalty 10000 \vskip DIST +% \@startline\ignorespaces END +% \@hightab := \@nxttabmar :=G \@firsttab +% \@tabpush :=G 0 +% \dimen\@firsttab := \@totalleftmargin +% @rjfield :=G F +% \trivlist \item\relax +% if @minipage = F then \vskip \parskip fi +% \box\@tabfbox = \rlap{\indent\the\everypar} +% % note: \the\everypar sets @inlabel :=G F +% \@itemfudge == BEGIN \box\@tabfbox END +% \@startline +% \ignorespaces +% END +% +% \@endtabbing == +% BEGIN +% \@stopline +% if \@tabpush > 0 then error message: ''unmatched \poptabs'' fi +% \endtrivlist +% END +% +% \@rtab == +% BEGIN +% \@stopfield +% \@addfield +% if \@curtab < \@hightab +% then \@curtab :=G \@curtab + 1 +% else error message ``Undefined Tab'' fi +% \@tempdima := \dimen\@curtab - \dimen\@curtabmar +% - width of box \@curline +% \box\@curline :=G \hbox{\unhbox\@curline + \hskip\@tempdima} +% \@startfield +% END +% +% \@settab == +% BEGIN +% \@stopfield +% \@addfield +% if \@curtab < \@maxtab +% then \@curtab :=G \@curtab+1 +% else error message: ``Too many tabs'' fi +% if \@curtab > \@hightab +% then \@hightab :=L \@curtab fi +% \dimen\@curtab :=L \dimen\@curtabmar + width of \box\@curline +% \@startfield +% END +% +% \@ltab == +% BEGIN +% \@ifatmargin +% then if \@curtabmar > \@firsttab +% then \@curtab :=G \@curtab - 1 +% \@curtabmar :=G \@curtabmar - 1 +% else error message ``Too many untabs'' fi +% else error message ``Left tab in middle of line'' +% fi +% END +% +% \@tabplus == +% BEGIN +% if \@nxttabmar < \@hightab +% then \@nxttabmar :=G \@nxttabmar+1 +% else error message ``Undefined tab'' +% fi +% END +% +% \@tabminus == +% BEGIN +% if \@nxttabmar > \@firsttab +% then \@nxttabmar :=G \@nxttabmar-1 +% else error message ``Too many untabs'' +% fi +% END +% +% \@tabrj == +% BEGIN \@stopfield +% \@addfield +% @rjfield :=G T +% \@startfield +% END +% +% \@tablab == +% BEGIN \@stopfield +% \box\@curline G:= \hbox{\box\@curline %% `G' added 17 Jun 86 +% \hskip - width of \box\@curfield +% \hskip -\tabbingsep +% \box\@curfield +% \hskip \tabbingsep } +% \@startfield +% END +% +% \pushtabs == +% BEGIN +% \@stopfield +% \@tabpush :=G \@tabpush + 1 +% \begingroup +% \@contfield +% END +% +% \poptabs == +% BEGIN +% \@stopfield +% if \@tabpush > 0 +% then \endgroup +% \@tabpush :=G \@tabpush - 1 +% else error message: ``Too many \poptabs'' +% fi +% \@contfield +% END +% +% \end{oldcomments} +% +% \begin{macro}{\a} +% The accents |\`| , |\'| , and |\=| that have been redefined inside a +% tabbing environment can be called by typing |\a`| , |\a'| , and |\a=|. +% The macro |\a| is defined in |ltoutenc.dtx|. +% \changes{v1.0d}{1994/05/13} +% {moved to ltoutenc} +% \end{macro} +% +% +% The `2ekernel' code ensures that a |\usepackage{autotabg}| is +% essentially ignored if a `full' format is being used that has +% picture mode already in the format. +% \begin{macrocode} +%<2ekernel>\expandafter\let\csname ver@autotabg.sty\endcsname\fmtversion +% \end{macrocode} +% +% \begin{macro}{\@firsttab} +% \begin{macro}{\@maxtab} +% \changes{v1.0c}{1994/05/07}{Changed \cs{@firsttab} to \cs{chardef}} +% \changes{v1.0c}{1994/05/07}{Changed \cs{@maxtab} to \cs{chardef}} +% \begin{macrocode} +%<*2ekernel|autoload> +\newdimen\@gtempa +\chardef\@firsttab=\the\allocationnumber +\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa +\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa +\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa\newdimen\@gtempa +\newdimen\@gtempa +\chardef\@maxtab=\the\allocationnumber +\dimen\@firsttab=0pt +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@nxttabmar} +% \begin{macro}{\@curtabmar} +% \begin{macro}{\@curtab} +% \begin{macro}{\@hightab} +% \begin{macro}{\@tabpush} +% \begin{macrocode} +\newcount\@nxttabmar +\newcount\@curtabmar +\newcount\@curtab +\newcount\@hightab +\newcount\@tabpush +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@curline} +% \begin{macro}{\@curfield} +% \begin{macro}{\@tabfbox} +% \begin{macrocode} +\newbox\@curline +\newbox\@curfield +\newbox\@tabfbox +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel|autoload> +%<*2ekernel|def> +% \end{macrocode} +% +% \begin{macro}{\if@rjfield} +% \begin{macrocode} +\newif\if@rjfield +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@startline} +% \changes{v1.1f}{1995/10/23}{(CAR)Ensure that \cs{@nxttabmar} is never +% larger than \cs{@hightab}} +% It is, in some sense, an error if the current margin +% tab setting is higher than the value of |\@hightab| (which is +% a local variable). That this is allowed is a fundamental design +% flaw which is not going to be corrected now. +% \begin{macrocode} +\gdef\@startline{% + \ifnum \@nxttabmar >\@hightab + \@badtab + \global\@nxttabmar \@hightab + \fi + \global\@curtabmar \@nxttabmar + \global\@curtab \@curtabmar + \global\setbox\@curline \hbox {}% + \@startfield + \strut} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@stopline} +% \begin{macrocode} +\gdef\@stopline{% + \unskip + \@stopfield + \if@rjfield + \global\@rjfieldfalse + \@tempdima\@totalleftmargin + \advance\@tempdima\linewidth + \hb@xt@\@tempdima{% + \@itemfudge\hskip\dimen\@curtabmar + \box\@curline + \hfil + \box\@curfield}% + \else + \@addfield + \hbox{\@itemfudge\hskip\dimen\@curtabmar\box\@curline}% + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@startfield} +% \changes{v1.0d}{1994/05/13} +% {Colour support} +% \begin{macrocode} +\gdef\@startfield{% + \global\setbox\@curfield\hbox\bgroup\color@begingroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@stopfield} +% \changes{v1.0d}{1994/05/13} +% {Colour support} +% \begin{macrocode} +\gdef\@stopfield{% + \color@endgroup\egroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@contfield} +% \changes{v1.0d}{1994/05/13} +% {Colour support} +% \begin{macrocode} +\gdef\@contfield{% + \global\setbox\@curfield\hbox\bgroup\color@begingroup + \unhbox\@curfield} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@addfield} +% \begin{macrocode} +\gdef\@addfield{\global\setbox\@curline\hbox{\unhbox + \@curline\unhbox\@curfield}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ifatmargin} +% \begin{macrocode} +\gdef\@ifatmargin{\ifdim \wd\@curline =\z@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@tabcr} +% \begin{macrocode} +\gdef\@tabcr{\@stopline \@ifstar{\penalty \@M \@xtabcr}\@xtabcr} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xtabcr} +% \begin{macrocode} +\gdef\@xtabcr{\@ifnextchar[\@itabcr{\@startline\ignorespaces}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@itabcr} +% \begin{macrocode} +\gdef\@itabcr[#1]{\vskip #1\@startline\ignorespaces} +% \end{macrocode} +% +% \begin{macrocode} +\gdef\kill{\@stopfield\@startline\ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tabbing} +% \changes{v1.1f}{1995/10/23}{(CAR)Make \cs{@hightab} consistently a +% local variable} +% \changes{latex2e}{1993/12/13}{Removed optional argument of \cs{item}} +% We use |\relax| to prevent |\item| from scanning too far. +% \begin{macrocode} +\gdef\tabbing{\lineskip \z@skip\let\>\@rtab\let\<\@ltab\let\=\@settab + \let\+\@tabplus\let\-\@tabminus\let\`\@tabrj\let\'\@tablab + \let\\=\@tabcr + \@hightab\@firsttab + \global\@nxttabmar\@firsttab + \dimen\@firsttab\@totalleftmargin + \global\@tabpush\z@ \global\@rjfieldfalse + \trivlist \item\relax + \if@minipage\else\vskip\parskip\fi +% \end{macrocode} +% \changes{v1.1i}{1996/10/21}{Moved the \cs{indent} so that the +% \cs{everypar} can remove it when necessary; this is needed because +% the code for items in lists has changed (see pr/22111)} +% \begin{macrocode} + \setbox\@tabfbox\hbox{% + \rlap{\hskip\@totalleftmargin\indent\the\everypar}}% + \def\@itemfudge{\box\@tabfbox}% + \@startline\ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\endtabbing} +% \begin{macrocode} +\gdef\endtabbing{% + \@stopline\ifnum\@tabpush >\z@ \@badpoptabs \fi\endtrivlist} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@rtab} +% Omitted |\global| added to |\@rtab| 17 Jun 86 +% \begin{macrocode} +\gdef\@rtab{\@stopfield\@addfield\ifnum \@curtab<\@hightab + \global\advance\@curtab \@ne \else\@badtab\fi + \@tempdima\dimen\@curtab + \advance\@tempdima -\dimen\@curtabmar + \advance\@tempdima -\wd\@curline + \global\setbox\@curline\hbox{\unhbox\@curline\hskip\@tempdima}% + \@startfield\ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@settab} +% \changes{v1.1f}{1995/10/23}{(CAR)Ensure that \cs{@hightab} increases +% by at most one} +% \begin{macrocode} +\gdef\@settab{\@stopfield\@addfield + \ifnum \@curtab <\@maxtab + \ifnum\@curtab =\@hightab + \advance\@hightab \@ne + \fi + \global\advance\@curtab \@ne + \else + \@latex@error{Tab overflow}\@ehd + \fi + \dimen\@curtab \dimen\@curtabmar + \advance\dimen\@curtab \wd\@curline + \@startfield + \ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ltab} +% \begin{macrocode} +\gdef\@ltab{\@ifatmargin\ifnum\@curtabmar >\@firsttab + \global\advance\@curtab \m@ne \global\advance\@curtabmar\m@ne\else + \@badtab\fi\else + \@latex@error{\string\<\space in mid line}\@ehd\fi\ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@tabplus} +% \begin{macrocode} +\gdef\@tabplus{% + \ifnum\@nxttabmar<\@hightab + \global\advance\@nxttabmar\@ne + \else + \@badtab + \fi + \ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@tabminus} +% \begin{macrocode} +\gdef\@tabminus{% + \ifnum\@nxttabmar>\@firsttab + \global\advance\@nxttabmar\m@ne + \else + \@badtab + \fi + \ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@tabrj} +% \begin{macrocode} +\gdef\@tabrj{% + \@stopfield\@addfield\global\@rjfieldtrue\@startfield\ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@tablab} +% |\setbox\@curline| made |\global| in |\@tablab|. 17 Jun 86 +% \begin{macrocode} +\gdef\@tablab{% + \@stopfield + \global\setbox\@curline\hbox{% + \box\@curline + \hskip-\wd\@curfield \hskip-\tabbingsep + \box\@curfield + \hskip\tabbingsep}% + \@startfield + \ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\pushtabs} +% \begin{macrocode} +\gdef\pushtabs{% + \@stopfield\@addfield\global\advance\@tabpush \@ne \begingroup + \@contfield} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\poptabs} +% \changes{v1.1f}{1995/10/23}{(CAR)Ensure that \cs{@curtab} is never +% larger than \cs{@hightab}} +% It is, in some sense, an error if, after the endgroup, the current +% tab setting is higher than the new value of |\@hightab| (which is +% a local variable). That this is allowed is a fundamental design +% flaw which is not going to be corrected now. +% \begin{macrocode} +\gdef\poptabs{\@stopfield\@addfield + \ifnum \@tabpush >\z@ + \endgroup + \global\advance\@tabpush \m@ne + \ifnum \@curtab >\@hightab + \global \@curtab \@hightab + \@badtab + \fi + \else + \@badpoptabs + \fi + \@contfield} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel|def> +% \end{macrocode} +% +% \begin{macro}{\tabbingsep} +% \begin{macrocode} +%<*2ekernel|autoload> +\newdimen\tabbingsep +%</2ekernel|autoload> +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tabbing} +% \begin{macrocode} +%<*autoload> +\def\tabbing{\@autoload{tabg}\tabbing} +%</autoload> +% \end{macrocode} +% \end{macro} +% +% +% \subsection{array and tabular environments} +% +% \begin{oldcomments} +% +% ARRAY PARMETERS: +% \arraycolsep +% : half the width separating columns in an array environment +% \tabcolsep +% : half the width separating columns in a tabular environment +% \arrayrulewidth +% : width of rules +% \doublerulesep +% : space between adjacent rules in array or tabular +% \arraystretch +% : line spacing in array and tabular environments is done by +% placing a strut in every row of height and depth +% \arraystretch times the height and depth of the strut +% produced by an ordinary \strut commmand. +% +% PREAMBLE: +% The PREAMBLE argument of an array or tabular environment can +% contain the following: +% l,r,c : indicate where entry is to be placed. +% | : for vertical rule +% @{EXP} : inserts the text EXP in every column. +% \arraycolsep or \tabcolsep spacing is suppressed. +% *{N}{PRE} : equivalent to writing N copies of PRE in the preamble. +% PRE may contain *{N'}{EXP'} expressions. +% p{LEN} : makes entry in parbox of width LEN. +% +% SPECIAL ARRAY COMMANDS: +% \multicolumn{N}{FORMAT}{ITEM} : replaces the next N column +% items by ITEM, formatted according to FORMAT. +% FORMAT should contain at most one l,r or c. +% If it contains none, then ITEM is ignored. +% +% \vline : draws a vertical line the height of the current row. May +% appear in an array element entry. +% \hline : draws a horizontal line between rows. Must appear either +% before the first entry (to appear above the first row) or +% right after a \\ command. If followed by another \hline, +% then adds a \vskip of \doublerulesep. +% +% \cline[i-j] : draws horizontal lines between rows covering columns +% i through j, inclusive. Multiple commands may follow +% one another to provide lines covering several disjoint +% columns +% \extracolsep{WIDTH} : for use inside an @ in the preamble. Causes +% a WIDTH space to be added between columns for the rest +% of the columns. This is in addition to the ordinary +% intercolumn space. +% +% \array == +% BEGIN +% \@acol == \@arrayacol +% \@classz == \@arrayclassz +% \@classiv == \@arrayclassiv +% \\ == \@arraycr +% \@halignto == NULL +% \@tabarray +% END +% +% \endarray{NAME} == BEGIN \crcr }} END +% +% \tabular == +% BEGIN +% \@halignto == NULL +% \@tabular +% END +% +% \tabular*{WIDTH} == +% BEGIN +% \@halignto == to WIDTH +% \@tabular +% END +% +% \@tabular == +% BEGIN +% \leavevmode +% \hbox { $ +% \@acol == \@tabacol +% \@classz == \@tabclassz +% \@classiv == \@tabclassiv +% \\ == \@tabularcr +% \@tabarray +% END +% +% \endtabular == BEGIN \crcr}} $} END +% +% \@tabarray == if next char = [ then \@array else \@array[c] fi +% +% \@array[POS]{PREAMBLE} == +% BEGIN +% define \@arstrutbox to make \@arstrut produce strut of height +% and depth \arraystretch times the height and +% depth of a normal strut. +% \@mkpream{PREAMBLE} +% \@preamble == \halign \@halignto {\tabskip=0pt\@arstrut +% eval{\@preamble}\tabskip = 0pt\cr %%} +% \@startpbox == \@@startpbox +% \@endpbox == \@@endpbox +% if POS = t then \vtop +% else if POS = b then \vbox +% else \vcenter +% fi fi +% { +% \par ==L {} % changed 92/09/18 +% \@sharp == # +% \protect == \relax +% \lineskip :=L 0pt +% \baselineskip :=L 0pt +% \@preamble +% END +% +% +% \@arraycr == +% BEGIN +% $ %% Prevents extra space at end of row's last entry. +% if next char = [ +% then \@argarraycr +% else $ \cr %% Needed to balance $ +% END +% +% \@argarraycr[LENGTH] == +% BEGIN +% $ %% Needed to balance $ of \@arraycr +% if LENGTH > 0 +% then \@tempdima := depth of \@arstrutbox + LENGTH +% \vrule height 0pt width 0pt depth \@tempdima +% \cr +% else \cr \noalign{\vskip LENGTH} +% END +% +% \@tabularcr and \@argtabularcr same as \@arraycr and \@argarraycr +% except without the extra $'s. +% \end{oldcomments} +% +% \begin{macrocode} +%<*2ekernel|autoload> +% \end{macrocode} +% +% \begin{macro}{\extracolsep} +% \begin{macrocode} +\def\extracolsep#1{\tabskip #1\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\array} +% \begin{macrocode} +\def\array{\let\@acol\@arrayacol \let\@classz\@arrayclassz + \let\@classiv\@arrayclassiv + \let\\\@arraycr\let\@halignto\@empty\@tabarray} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\endarray} +% \begin{macro}{\endtabular} +% \begin{macro}{\endtabular*} +% \begin{macrocode} +\def\endarray{\crcr\egroup\egroup} +\def\endtabular{\crcr\egroup\egroup $\egroup} +\expandafter \let \csname endtabular*\endcsname = \endtabular +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\tabular} +% \begin{macrocode} +\def\tabular{\let\@halignto\@empty\@tabular} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tabular*} +% \changes{v1.1j}{1998/05/18}{Use \cs{setlength}, so that +% calc extensions apply.} +% Note that the change to use |\setlength| slightly alters the +% timing of the expansion and use of the length in |#1| but this is +% very unlikely to have any practical effect. +% \changes{latex2e}{1993/08/05}{Replaced \cs{expandafter}\cs{def} +% by \cs{@namedef}.} +% \begin{macrocode} +\@namedef{tabular*}#1{% + \setlength\dimen@{#1}% + \edef\@halignto{to\the\dimen@}\@tabular} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@tabular} +% \begin{macrocode} +\def\@tabular{\leavevmode \hbox \bgroup $\let\@acol\@tabacol + \let\@classz\@tabclassz + \let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@tabarray} +% RmS 91/11/04 added |\m@th|. +% \begin{macrocode} +\def\@tabarray{\m@th\@ifnextchar[\@array{\@array[c]}} +% \end{macrocode} +% \end{macro} +% +% RmS 1993/11/03 changed |\halign| to |\ialign| and removed superfluous +% |\tabskip| assignment +% +% +% \changes{v1.1i}{1996/10/21}{Moved the code associated with +% \cs{@mkpream} into the group provided by the box, for robustness +% (latex/2183)} +% \begin{macro}{\@array} +% \begin{macrocode} +\def\@array[#1]#2{% + \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi +% \end{macrocode} +% \changes{LaTeX2.09}{1992/09/18} +% {Changed \cs{par} to \cs{@empty} to avoid starting new row +% e.g. after \cs{hline}} +% \begin{macrocode} + \bgroup +% \end{macrocode} +% This next bit of code sets up the strut and then builds the halign +% and its preamble according to the specification in the second +% argument. +% +% This code has been moved inside the box. +% A side effect of this has been to expose what was a buglet in the +% previous version: since the |\@arstrut| below is expanded and +% contains an |\ifmmode| then it could produce an unnecessary extra +% box in every row, thus wasting `lots of' main memory. +% \begin{macrocode} + \setbox\@arstrutbox\hbox{% + \vrule \@height\arraystretch\ht\strutbox + \@depth\arraystretch \dp\strutbox + \@width\z@}% + \@mkpream{#2}% + \edef\@preamble{% + \ialign \noexpand\@halignto + \bgroup \@arstrut \@preamble \tabskip\z@skip \cr}% +% \end{macrocode} +% That is the end of setting up the preamble; now we reset +% things before executing the halign built-up in |\@preamble|. +% The restorations could be done by introducing an extra group, +% thus saving tokens. +% \changes{v1.0k}{1994/12/08}{Add \cs{tabularnewline}} +% \changes{v1.1i}{1996/10/21}{Use \cs{set@typeset@protect}} +% \begin{macrocode} + \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox + \let\tabularnewline\\% + \let\par\@empty + \let\@sharp##% + \set@typeset@protect + \lineskip\z@skip\baselineskip\z@skip +% \end{macrocode} +% If the parsing of the preamble goes wrong there my be some +% characters left which \TeX{} then tries to typeset, i.e., we +% would be in horizontal mode. That would produce an endless loop +% because the |\halign| expects vertical mode thus issues a |\par| +% but that is a no-op at this point. So we better test this case +% issue some error message and make a crude recovery by ending that +% horizontal mode with force. +% A better fix would be to ensure that we never pick up more than a +% single character token (not done). +% \changes{v1.1m}{1998/11/13}{Check for hmode to see if something +% went wrong during parsing (pr/2884)} +% \begin{macrocode} + \ifhmode \@preamerr\z@ \@@par\fi + \@preamble} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@arraycr} +% Array version of |\\|. +% \begin{macrocode} +\def\@arraycr{% + ${\ifnum0=`}\fi\@ifstar\@xarraycr\@xarraycr} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@arraycr} +% \begin{macrocode} +\def\@xarraycr{\@ifnextchar[\@argarraycr{\ifnum0=`{\fi}${}\cr}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@argarraycr} +% \begin{macrocode} +\def\@argarraycr[#1]{% + \ifnum0=`{\fi}${}\ifdim #1>\z@ \@xargarraycr{#1}\else + \@yargarraycr{#1}\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tabularnewline} +% \changes{v1.0i}{1994/11/14}{(DPC) Macro added} +% \changes{v1.0k}{1994/12/08}{(DPC) Made it \cs{relax}} +% Tabular version of |\\|. +% \begin{macrocode} +\let\tabularnewline\relax +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@tabularcr} +% \begin{macrocode} +\def\@tabularcr{% + {\ifnum0=`}\fi\@ifstar\@xtabularcr\@xtabularcr} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xtabularcr} +% \begin{macrocode} +\def\@xtabularcr{\@ifnextchar[\@argtabularcr{\ifnum0=`{\fi}\cr}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@argtabularcr} +% \begin{macrocode} +\def\@argtabularcr[#1]{% + \ifnum0=`{\fi}% + \ifdim #1>\z@ + \unskip\@xargarraycr{#1}% + \else + \@yargarraycr{#1}% + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xargarraycr} +% \begin{macrocode} +\def\@xargarraycr#1{\@tempdima #1\advance\@tempdima \dp \@arstrutbox + \vrule \@height\z@ \@depth\@tempdima \@width\z@ \cr} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@yargarraycr} +% \begin{macrocode} +\def\@yargarraycr#1{\cr\noalign{\vskip #1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\multicolumn} +% \begin{oldcomments} +% \multicolumn{NUMBER}{FORMAT}{ITEM} == +% BEGIN +% \multispan{NUMBER} +% \begingroup +% \@addamp == null +% \@mkpream{FORMAT} +% \@sharp == ITEM +% \protect == \relax +% \@startpbox == \@@startpbox +% \@endpbox == \@@endpbox +% \@arstrut +% \@preamble +% \endgroup +% END +% \end{oldcomments} +% +% The command |\def\@addamp{}| was removed from |\multicolumn| on +% 6 Dec 86 because it caused embedded array environments not to work. I +% think that it was included originally to prevent an error message if +% the 2nd argument to the |\multicolumn| command had two column +% specifiers. +% +% 8 Feb 89 --- |\hbox{}| added after |\@preamble| to correct bug that +% occurred if |\multicolumn| preceded |\\[D]| with |D > 0|, +% caused by |\\[]| command doing an |\unskip|, which removed +% |\tabcolsep| glue inserted by |\multicolumn|. +% +% +% \changes{v1.0h}{1994/11/04}{(ASAJ) added \cs{set@typeset@protect}.} +% \changes{v1.1i}{1996/10/21}{Make \cs{multicolumn} long (latex/2180)} +% This has been made long so that, for example, a |p|-column can +% contain multiple paragraphs; maybe the arguments of |@|-expressions +% should also be able to contain multiple paragraphs. +% \begin{macrocode} +\long\def\multicolumn#1#2#3{\multispan{#1}\begingroup + \@mkpream{#2}% + \def\@sharp{#3}\set@typeset@protect + \let\@startpbox\@@startpbox\let\@endpbox\@@endpbox + \@arstrut \@preamble\hbox{}\endgroup\ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \begin{oldcomments} +% Codes for classes and character numbers of array, tabular and +% multicolumn arguments. +% +% Character Class Number +% --------- ----- ------ +% c 0 0 +% l 0 1 +% r 0 2 +% +% | 1 - +% @ 2 - +% p 3 - +% {@-exp} 4 - +% {p-arg} 5 - +% +% \@testpach \foo : expands \foo, which should be an array parameter +% token, and sets \@chclass and \@chnum to its class and +% number. Uses \@lastchclass to distinguish 4 and 5 +% +% Preamble error codes +% 0: 'illegal character' +% 1: 'Missing @-exp' +% 2: 'Missing p-arg' +% +% \@addamp == +% BEGIN if @firstamp = true then @firstamp := false +% else & fi +% END +% +% \@mkpream TOKENLIST == +% BEGIN +% @firstamp := T +% \@lastchclass := 6 +% \@preamble == null +% \@sharp == \relax +% \protect == BEGIN \noexpand\protect\noexpand END +% \@startpbox == \relax +% \@endpbox == \relax +% \@expast{TOKENLIST} +% for \@nextchar := expand(\reserved@a) +% do \@testpach{\@nextchar} +% case of \@chclass +% 0 -> \@classz +% 1 -> \@classi +% ... +% 5 -> \@classv +% end case +% \@lastchclass := \@chclass +% od +% case of \@lastchclass +% 0 -> \hskip \arraycolsep % lrc +% 1 -> % | +% 2 -> \@preamerr1 % 'Missing @-exp' % @ +% 3 -> \@preamerr2 % 'Missing p-arg' % p +% 4 -> % @-exp +% 5 -> \hskip \arraycolsep % p-exp +% end case +% END +% +% \@arrayclassz == +% BEGIN +% \@preamble := \@preamble * +% case of \@lastchclass +% 0 -> \hskip \arraycolsep \@addamp \hskip \arraycolsep +% 1 -> \@addamp \hskip \arraycolsep +% 2 -> % impossible +% 3 -> % impossible +% 4 -> \@addamp +% 5 -> \hskip \arraycolsep \@addamp \hskip \arraycolsep +% 6 -> \@addamp \hskip \arraycolsep +% end case +% * case of \@chnum +% 0 -> \hfil$\relax\@sharp$\hfil +% 1 -> $\relax\@sharp$\hfil +% 2 -> \hfil$\relax\@sharp$ +% end case +% END +% +% \@tabclassz == similar to \@arrayclassz +% +% \@classi == +% BEGIN +% \@preamble := \@preamble * +% case of \@lastchclass +% 0 -> \hskip \arraycolsep \@arrayrule +% 1 -> \hskip \doublerulesep \@arrayrule +% 2 -> % impossible +% 3 -> % impossible +% 4 -> \@arrayrule +% 5 -> \hskip \arraycolsep \@arrayrule +% 6 -> \@arrayrule +% end case +% END +% +% \@classii == +% BEGIN +% \@preamble := \@preamble * +% case of \@lastchclass +% 0 -> +% 1 -> \hskip .5\arrayrulewidth +% 2 -> % impossible +% else -> +% end case +% END +% +% \@classiii == +% BEGIN +% \@preamble := \@preamble * +% case of \@lastchclass +% 0 -> \hskip \arraycolsep \@addamp \hskip \arraycolsep +% 1 -> \@addamp \hskip \arraycolsep +% 2 -> % impossible +% 3 -> % impossible +% 4 -> \@addamp +% 5 -> \hskip \arraycolsep \@addamp \hskip \arraycolsep +% 6 -> \@addamp \hskip \arraycolsep +% end case +% END +% +% \@arrayclassiv == +% BEGIN \@preamble := \@preamble * $ \@nextchar$ END +% +% \@tabclassiv == same as \@arrayclassv except without the $ ... $ +% +% \@classv == +% BEGIN +% \@preamble := +% \@preamble * \@startpbox{\@nextchar}\ignorespaces\@sharp +% \@endpbox +% END +% +% \@expast{S}: +% Sets \reserved@a := S with all instances of *{N}{STRING} +% replaced by N copies of STRING, where N > 0. An * +% appearing inside braces is ignored, but *-expressions +% inside STRING are expanded, so nested *-expressions are +% handled properly. +% +% \@expast{S} == BEGIN \@xexpast S *0x\@@ END +% +% \@xexpast S1 *{N}{S2} S3 \@@ == +% BEGIN +% \reserved@a := S1 +% \@tempcnta := N +% if \@tempcnta > 0 +% then while \@tempcnta > 0 do \reserved@a := \reserved@a S2 +% \@tempcnta := \@tempcnta - 1 od +% \reserved@b == \@xexpast +% else \reserved@b == \@xexnoop +% fi +% \expandafter \reserved@b \reserved@a S3 \@@ +% END +% \end{oldcomments} +% +% +% \begin{macro}{\@xexnoop} +% \begin{macrocode} +\def\@xexnoop #1\@@{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@expast} +% \begin{macrocode} +\def\@expast#1{\@xexpast #1*0x\@@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xexpast} +% \begin{macrocode} +\def\@xexpast#1*#2#3#4\@@{% + \edef\reserved@a{#1}% + \@tempcnta#2\relax + \ifnum\@tempcnta>\z@ + \@whilenum\@tempcnta>\z@\do + {\edef\reserved@a{\reserved@a#3}\advance\@tempcnta \m@ne}% + \let\reserved@b\@xexpast + \else + \let\reserved@b\@xexnoop + \fi + \expandafter\reserved@b\reserved@a #4\@@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\if@firstamp} +% \begin{macro}{\@addamp} +% \begin{macrocode} +\newif\if@firstamp +% \end{macrocode} +% +% \begin{macrocode} +\def\@addamp{% + \if@firstamp + \@firstampfalse + \else + \edef\@preamble{\@preamble &}% + \fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@arrayacol} +% \begin{macro}{\@tabacol} +% \begin{macro}{\@ampacol} +% \begin{macro}{\@acolampacol} +% \begin{macrocode} +\def\@arrayacol{\edef\@preamble{\@preamble \hskip \arraycolsep}} +\def\@tabacol{\edef\@preamble{\@preamble \hskip \tabcolsep}} +\def\@ampacol{\@addamp \@acol} +\def\@acolampacol{\@acol\@addamp\@acol} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@mkpream} +% \changes{v1.0h}{1994/11/04}{(ASAJ) Added \cs{@unexpandable@protect} +% to \cs{@mkpream}.} +% \begin{macrocode} +\def\@mkpream#1{\@firstamptrue\@lastchclass6 + \let\@preamble\@empty + \let\protect\@unexpandable@protect + \let\@sharp\relax + \let\@startpbox\relax\let\@endpbox\relax + \@expast{#1}% + \expandafter\@tfor \expandafter + \@nextchar \expandafter:\expandafter=\reserved@a\do + {\@testpach\@nextchar + \ifcase \@chclass \@classz \or \@classi \or \@classii \or \@classiii + \or \@classiv \or\@classv \fi\@lastchclass\@chclass}% + \ifcase \@lastchclass \@acol + \or \or \@preamerr \@ne\or \@preamerr \tw@\or \or \@acol \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@arrayclassz} +% \begin{macrocode} +\def\@arrayclassz{\ifcase \@lastchclass \@acolampacol \or \@ampacol \or + \or \or \@addamp \or + \@acolampacol \or \@firstampfalse \@acol \fi +\edef\@preamble{\@preamble + \ifcase \@chnum + \hfil$\relax\@sharp$\hfil \or $\relax\@sharp$\hfil + \or \hfil$\relax\@sharp$\fi}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@tabclassz} +% RmS 91/08/14 inserted extra braces around entry for NFSS +% \begin{macrocode} +\def\@tabclassz{% + \ifcase\@lastchclass + \@acolampacol + \or + \@ampacol + \or + \or + \or + \@addamp + \or + \@acolampacol + \or + \@firstampfalse\@acol + \fi + \edef\@preamble{% + \@preamble{% + \ifcase\@chnum + \hfil\ignorespaces\@sharp\unskip\hfil + \or +% \end{macrocode} +% \changes{v1.1g}{1996/04/22} +% {(DPC) Extra \cs{hskip} keeps tabcolsep in empty columns +% internal/2122} +% \changes{v1.1h}{1996/06/14} +% {(DPC) Change both\cs{z@skip} to 1sp for latex/2160} +% \begin{macrocode} + \hskip1sp\ignorespaces\@sharp\unskip\hfil + \or + \hfil\hskip1sp\ignorespaces\@sharp\unskip + \fi}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@classi} +% \begin{macrocode} +\def\@classi{% + \ifcase\@lastchclass + \@acol\@arrayrule + \or + \@addtopreamble{\hskip \doublerulesep}\@arrayrule + \or + \or + \or + \@arrayrule + \or + \@acol\@arrayrule + \or + \@arrayrule + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@classii} +% \begin{macrocode} +\def\@classii{% + \ifcase\@lastchclass + \or + \@addtopreamble{\hskip .5\arrayrulewidth}% + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@classiii} +% \begin{macrocode} +\def\@classiii{\ifcase \@lastchclass \@acolampacol \or + \@addamp\@acol \or + \or \or \@addamp \or + \@acolampacol \or \@ampacol \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@tabclassiv} +% \begin{macrocode} +\def\@tabclassiv{\@addtopreamble\@nextchar} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@arrayclassiv} +% \begin{macrocode} +\def\@arrayclassiv{\@addtopreamble{$\@nextchar$}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@classv} +% \begin{macrocode} +\def\@classv{\@addtopreamble{\@startpbox{\@nextchar}\ignorespaces +\@sharp\@endpbox}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@addtopreamble} +% \begin{macrocode} +\def\@addtopreamble#1{\edef\@preamble{\@preamble #1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@chclass} +% \begin{macro}{\@lastchclass} +% \begin{macro}{\@chnum} +% \begin{macrocode} +\newcount\@chclass +\newcount\@lastchclass +\newcount\@chnum +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\arraycolsep} +% \begin{macro}{\tabcolsep} +% \begin{macro}{\arrayrulewidth} +% \begin{macro}{\doublerulesep} +% \begin{macrocode} +\newdimen\arraycolsep +\newdimen\tabcolsep +\newdimen\arrayrulewidth +\newdimen\doublerulesep +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\arraystretch} +% \begin{macrocode} +\def\arraystretch{1} % Default value. +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@arstrutbox} +% \begin{macro}{\@arstrut} +% \begin{macrocode} +\newbox\@arstrutbox +% \end{macrocode} +% +% \begin{macrocode} +\def\@arstrut{% + \relax\ifmmode\copy\@arstrutbox\else\unhcopy\@arstrutbox\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@arrayrule} +% \begin{macrocode} +\def\@arrayrule{\@addtopreamble{\hskip -.5\arrayrulewidth + \vrule \@width \arrayrulewidth\hskip -.5\arrayrulewidth}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@testpatch} +% \begin{macrocode} +\def\@testpach#1{\@chclass \ifnum \@lastchclass=\tw@ 4 \else + \ifnum \@lastchclass=3 5 \else + \z@ \if #1c\@chnum \z@ \else + \if #1l\@chnum \@ne \else + \if #1r\@chnum \tw@ \else + \@chclass \if #1|\@ne \else + \if #1@\tw@ \else + \if #1p3 \else \z@ \@preamerr 0\fi + \fi \fi \fi \fi \fi \fi +\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\hline} +% \begin{macrocode} +\def\hline{% + \noalign{\ifnum0=`}\fi\hrule \@height \arrayrulewidth \futurelet + \reserved@a\@xhline} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xhline} +% \begin{macrocode} +\def\@xhline{\ifx\reserved@a\hline + \vskip\doublerulesep +% \end{macrocode} +% Measure from the middle of the rules. +% \changes{latex2e}{1993/12/16}{Measure from middle of vertical rules} +% \begin{macrocode} + \vskip-\arrayrulewidth + \fi + \ifnum0=`{\fi}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\vline} +% \begin{macrocode} +\def\vline{\vrule \@width \arrayrulewidth} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\cline} +% \changes{v1.1c}{1995/09/14} +% {(DPC) New implementation} +% \begin{macro}{\@cline} +% The old \LaTeX2.09 implementation of |\cline| used up quite +% a lot of memory and two precious count registers. +% This new (1995/09/14) implementation does not use any count registers. +% It is coded in a way that depends heavily on the definition of +% |\multispan| so that command has been moved here from the file +% |ltplain.dtx|. +% +% These counters are no longer declared. +%\begin{verbatim} +% \newcount\@cla +% \newcount\@clb +%\end{verbatim} +% +% \begin{macrocode} +\def\cline#1{\@cline#1\@nil} +% \end{macrocode} +% +% \changes{v1.1e}{1995/10/17} +% {(DPC) Use \cs{@multicnt}} +% \begin{macrocode} +\def\@cline#1-#2\@nil{% + \omit +% \end{macrocode} +% Use the counter from |\multispan|. +% \begin{macrocode} + \@multicnt#1% + \advance\@multispan\m@ne + \ifnum\@multicnt=\@ne\@firstofone{&\omit}\fi + \@multicnt#2% + \advance\@multicnt-#1% + \advance\@multispan\@ne +% \end{macrocode} +% The original had |\unskip| at this point, +% but how could a skip get here ??? +% \begin{macrocode} + \leaders\hrule\@height\arrayrulewidth\hfill + \cr +% \end{macrocode} +% This is back spacing is fairly horrible, +% but it is what happened in the old version\ldots\ +% An alternative would be to make |\cline| look ahead for a following +% |\cline| as does |\hline|. This would alter the spacing in existing +% documents so keep the old version in the kernel. Perhaps a package +% should do this differently. +% \begin{macrocode} + \noalign{\vskip-\arrayrulewidth}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\mscount} +% The |\mscount| counter is no longer declared, saving a csname and a +% register. It is declared in compatibility mode. +% \end{macro} +% +% \begin{macro}{\multispan} +% \begin{macro}{\@multispan} +% \changes{v1.1e}{1995/10/17} +% {(DPC) Macro added.} +% \begin{macro}{\sp@n} +% Modify |\multispan| slightly from its plain \TeX\ definition +% to allow more efficient code sharing with |\multicolumn|. +% Also share a count register with |\multiput|. +% \begin{macrocode} +\def\multispan{\omit\@multispan} +% \end{macrocode} +% +% \begin{macrocode} +\def\@multispan#1{% + \@multicnt#1\relax + \loop\ifnum\@multicnt>\@ne \sp@n\repeat} +% \end{macrocode} +% +% \begin{macrocode} +\def\sp@n{\span\omit\advance\@multicnt\m@ne} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@startpbox} +% \begin{macro}{\@endpbox} +% Helper macros for `p' columns. +% +% |\@startpbox|\marg{width} \emph{text} |\egroup| is essentially +% |\parbox|\marg{width}\marg{text} +% +% |\@endpbox| is essentially |\unskip \strut \par \egroup\hfil| +% (Changed 14 Jan 89) (changed again 1994/05/13) +% +% \changes{v1.0d}{1994/05/03} +% {Use \cs{@finalstrut} based on depth of \cs{@arstrutbox}} + +% \changes{v1.1j}{1998/05/18}{Use \cs{setlength} to set \cs{hsize}, +% so that the changes in the calc package apply here.} +% \begin{macrocode} +\def\@startpbox#1{\vtop\bgroup \setlength\hsize{#1}\@arrayparboxrestore} +% \end{macrocode} +% +% \begin{macrocode} +\def\@endpbox{\@finalstrut\@arstrutbox\par\egroup\hfil} +% \end{macrocode} +% +% 14 Jan 89: Def of |\@endpbox| changed from\\ +% |\def\@endpbox{\par\vskip\dp\@arstrutbox\egroup\hfil}|\\ +% so vertical spacing works out right if the last line of a `p' entry +% has a descender. +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@@startpbox} +% \begin{macro}{\@@endpbox} +% \begin{macrocode} +\let\@@startpbox=\@startpbox +\let\@@endpbox=\@endpbox +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel|autoload> +% \end{macrocode} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltthm.dtx b/Master/texmf-dist/source/latex/base/ltthm.dtx new file mode 100644 index 00000000000..5290fea8bd5 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltthm.dtx @@ -0,0 +1,289 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltthm.dtx +%<*driver> +% \fi +\ProvidesFile{ltthm.dtx} + [1995/10/10 v1.0f LaTeX Kernel (Theorems)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltthm.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} + +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{115} +% +% \section{Theorem Environments} +% +% +% The user creates his own theorem-like environments with the command\\ +% |\newtheorem|\marg{name}\marg{text}\oarg{counter} or\\ +% |\newtheorem|\marg{name}\oarg{oldname}\marg{text}\\ +% This defines the environment \meta{name} to be just as one would +% expect a theorem environment to be, except that it prints \meta{text} +% instead of ``Theorem''. +% +% If \meta{oldname} is given, then environments \meta{name} and +% \meta{oldname} use the same counter, so using a \meta{name} +% environment advances the number of the next \meta{name} environment, +% and vice-versa. +% +% If \meta{counter} is given, then environment \meta{name} is numbered +% within \meta{counter}. +% +% E.g., if \meta{counter} = |subsection|, then the first \meta{name} in +% subsection 7.2 is numbered \meta{text} 7.2.1. +% +% The way \meta{name} environments are numbered can be changed by +% redefining |\the|\meta{name}. +% +% \StopEventually{} +% +% +% \changes{v1.0a}{1994/03/28}{Initial version, split from latex.dtx} +% \changes{v1.0c}{1994/05/25}{Modify documentation} +% \changes{v1.0f}{1995/10/10}{Make \cs{newtheorem} `only preamble'} +% \changes{v1.0g}{1995/10/16} +% {Revert to previous \cs{newtheorem} behaviour} +% +% \begin{oldcomments} +% +% DOCUMENT STYLE PARAMETERS +% +% \@thmcounter{COUNTER} : A command such that +% \edef\theCOUNTER{\@thmcounter{COUNTER}} +% defines \theCOUNTER to produce a number for a theorem environment. +% The default is: +% BEGIN \noexpand\arabic{COUNTER} END +% +% \@thmcountersep : A separator placed between a theorem number and +% the number of the counter within which it is numbered. +% E.g., to make the third theorem of section 7.2 be numbered +% 7.2-3, \@thmcountersep should be \def'ed to '-'. Its +% default is '.'. +% +% \@begintheorem{NAME}{NUMBER} : A command that begins a theorem +% environment for a 'theorem' named 'NAME NUMBER' -- +% e.g., \@begintheorem{Lemma}{3.7} starts Lemma 3.7. +% +% \@opargbegintheorem{NAME}{NUMBER}{OPARG} : +% A command that begins a theorem +% environment for a 'theorem' named 'NAME NUMBER' with optional +% argument OPARG -- e.g., \@begintheorem{Lemma}{3.7}{Jones} +% starts `Lemma 3.7 (Jones):'. +% +% \@endtheorem : A command that ends a theorem environment. +% +% \newtheorem{NAME}{TEXT}[COUNTER] == +% BEGIN +% if \NAME is definable +% then \@definecounter{NAME} +% if COUNTER present +% then \@newctr{NAME}[COUNTER] fi +% \theNAME == BEGIN \theCOUNTER \@thmcountersep +% eval\@thmcounter{NAME} END +% else \theNAME == BEGIN eval\@thmcounter{NAME} END +% \NAME == \@thm{NAME}{TEXT} +% \endNAME == \@endtheorem +% else error +% fi +% END +% +% \newtheorem{NAME}[OLDNAME]{TEXT}== +% BEGIN +% if counter OLDNAME nonexistant +% then ERROR +% else +% if \NAME is definable +% then BEGIN +% \theNAME == \theOLDNAME +% \NAME == \@thm{OLDNAME}{TEXT} +% \endNAME == \@endtheorem +% END +% else error +% fi +% fi +% END +% +% \@thm{NAME}{TEXT} == +% BEGIN +% \refstepcounter{NAME} +% if next char = [ +% then \@ythm{NAME}{TEXT} +% else \@xthm{NAME}{TEXT} +% fi +% END +% +% \@xthm{NAME}{TEXT} == +% BEGIN +% \@begintheorem{TEXT}{\theNAME} +% \ignorespaces +% END +% +% \@ythm{NAME}{TEXT}[OPARG] == +% BEGIN +% \@opargbegintheorem{TEXT}{\theNAME}{OPARG} +% \ignorespaces +% END +% \end{oldcomments} +% +% \begin{macro}{\newtheorem} +% |\newtheorem| ought really be allowed only in the preamble +% Which would be good document style, and allow some main memory to be +% saved by declaring these commands to be +% |\@onlypreamble|. Unfortunately the \LaTeX\ book indicates that +% |\newtheorem| may be used anywhere in the document\ldots +% \begin{macrocode} +%<*2ekernel> +\def\newtheorem#1{% + \@ifnextchar[{\@othm{#1}}{\@nthm{#1}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@nthm} +% \begin{macrocode} +\def\@nthm#1#2{% + \@ifnextchar[{\@xnthm{#1}{#2}}{\@ynthm{#1}{#2}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xnthm} +% +% 92/09/18 RmS: Changed |\@addtoreset| to |\@newctr| to produce error +% message if counter |#3| does not exist (to be +% consistent with behaviour of |\newcounter|) +% \begin{macrocode} +\def\@xnthm#1#2[#3]{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}\@newctr{#1}[#3]% + \expandafter\xdef\csname the#1\endcsname{% + \expandafter\noexpand\csname the#3\endcsname \@thmcountersep + \@thmcounter{#1}}% + \global\@namedef{#1}{\@thm{#1}{#2}}% + \global\@namedef{end#1}{\@endtheorem}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ynthm} +% \begin{macrocode} +\def\@ynthm#1#2{% + \expandafter\@ifdefinable\csname #1\endcsname + {\@definecounter{#1}% + \expandafter\xdef\csname the#1\endcsname{\@thmcounter{#1}}% + \global\@namedef{#1}{\@thm{#1}{#2}}% + \global\@namedef{end#1}{\@endtheorem}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@othm} +% \changes{LaTeX2.09}{1992/01/10} +% {(RmS) Check for existence of theorem environment} +% \changes{LaTeX2.09}{1992/08/19} +% {(RmS) Changed error message to complain about undefined +% counter} +% \changes{v1.0b}{1994/04/09}{Use standard counter error message (FMi)} +% \changes{v1.0c}{1994/04/17}{Use new std counter error message (FMi)} +% \begin{macrocode} +\def\@othm#1[#2]#3{% + \@ifundefined{c@#2}{\@nocounterr{#2}}% + {\expandafter\@ifdefinable\csname #1\endcsname + {\global\@namedef{the#1}{\@nameuse{the#2}}% + \global\@namedef{#1}{\@thm{#2}{#3}}% + \global\@namedef{end#1}{\@endtheorem}}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@thm} +% \begin{macrocode} +\def\@thm#1#2{% + \refstepcounter{#1}% + \@ifnextchar[{\@ythm{#1}{#2}}{\@xthm{#1}{#2}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@xthm} +% \begin{macro}{\@ythm} +% \begin{macrocode} +\def\@xthm#1#2{% + \@begintheorem{#2}{\csname the#1\endcsname}\ignorespaces} +\def\@ythm#1#2[#3]{% + \@opargbegintheorem{#2}{\csname the#1\endcsname}{#3}\ignorespaces} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% Default values +% \begin{macro}{\@thmcounter} +% \begin{macro}{\@thmcountersep} +% \begin{macrocode} +\def\@thmcounter#1{\noexpand\arabic{#1}} +\def\@thmcountersep{.} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@begintheorem} +% \begin{macro}{\@opargbegintheorem} +% \begin{macro}{\@endtheorem} +% \changes{LaTeX2.09}{1991/08/14} +% {Moved \cs{itshape} after \cs{item} to make it work with +% NFSS} +% Providing theorem defaults. +% \task{???}{add `reset@font?} +% \begin{macrocode} +\def\@begintheorem#1#2{\trivlist + \item[\hskip \labelsep{\bfseries #1\ #2}]\itshape} +\def\@opargbegintheorem#1#2#3{\trivlist + \item[\hskip \labelsep{\bfseries #1\ #2\ (#3)}]\itshape} +\def\@endtheorem{\endtrivlist} +%</2ekernel> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltvers.dtx b/Master/texmf-dist/source/latex/base/ltvers.dtx new file mode 100644 index 00000000000..d4ad7af5f8b --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltvers.dtx @@ -0,0 +1,146 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltvers.dtx +% +%<*driver> +% \fi +\ProvidesFile{ltvers.dtx} + [2004/01/28 v1.0k LaTeX Kernel (Version Info)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltvers.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{48} +% +% \section{Version Identification} +% First we identify the date and version number of this release of +% \LaTeX, and set |\everyjob| so that it is printed at the start of +% every \LaTeX\ run. +% +% \StopEventually{} +% +% \changes{v1.0g}{1996/11/28} +% {Check for old format modified /2319} +% \changes{v1.0f}{1996/11/20} +% {Check for old format modified /2319} +% \changes{v1.0e}{1995/05/12} +% {Add autoload docstrip guards} +% \changes{v1.0e}{1995/05/12} +% {Check for format older than 1 year} +% \changes{v1.0d}{1994/05/25} +% {Remove PRELIMINARY TEST RELEASE from startup banner +% (spring is here)} +% \changes{v1.0b}{1994/04/12} +% {Have version info generated automatically.} +% \changes{v1.0a}{1994/03/04} +% {Initial version, split from latex.dtx} +% +% \begin{macro}{\fmtname} +% \begin{macro}{\fmtversion} +% \begin{macrocode} +%<*2ekernel> +\def\fmtname{LaTeX2e} +\edef\fmtversion{2003/12/01} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% Check that the format being made is not too old. +% The error message complains about `more than 5 years' +% but in fact the error is not triggered until 65 months. +% +% This code is currently not activated as we don't know if we already +% got to the last official 2e version (due to staff shortage or due to +% a successor (think positive:-)). +% \changes{v1.0i}{2001/06/04}{Check for old format disabled} +% \changes{v1.0k}{2004/01/28}{Check for old format made 5 years (pr/3601)} +% \begin{macrocode} +\iftrue +\def\reserved@a#1/#2/#3\@nil{% + \count@\year + \advance\count@-#1\relax + \multiply\count@ by 12\relax + \advance\count@\month + \advance\count@-#2\relax} +\expandafter\reserved@a\fmtversion\@nil +% \end{macrocode} +% |\count@| is now the age of this file in months. Take a generous +% definition of `year' so this message is not generated too often. +% \begin{macrocode} +\ifnum\count@>65 + \typeout{^^J% +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J% +! You are attempting to make a LaTeX format from a source file^^J% +! That is more than five years old.^^J% +!^^J% +! If you enter <return> to scroll past this message then the format^^J% +! will be built, but please consider obtaining newer source files^^J% +! before continuing to build LaTeX.^^J% +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!^^J% +} + \errhelp{To avoid this error message, obtain new LaTeX sources.} + \errmessage{LaTeX source files more than 5 years old!} +\fi +\let\reserved@a\relax +\fi +% \end{macrocode} +% +% This startup banner may be further modified by the code in +% |ltfinal.dtx| if a patch file is present. +% \begin{macrocode} +\everyjob{\typeout{\fmtname +%<autoload>\space(autoload version)% + \space<\fmtversion>}} +\immediate\write16{\fmtname +%<autoload>\space(autoload version)% + \space<\fmtversion>} +%</2ekernel> +% \end{macrocode} +% +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/base/ltxdoc.dtx b/Master/texmf-dist/source/latex/base/ltxdoc.dtx new file mode 100644 index 00000000000..80390a76fcf --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltxdoc.dtx @@ -0,0 +1,518 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \iffalse +% +%<class>\NeedsTeXFormat{LaTeX2e} +%<class>\ProvidesClass{ltxdoc} +%<class> [1999/08/08 v2.0u Standard LaTeX documentation class] +% +%<*driver> +\documentclass{ltxdoc} +\GetFileInfo{ltxdoc.cls} +\providecommand\dst{\expandafter{\normalfont\scshape docstrip}} +\title{The file \texttt{ltxdoc.dtx} for use with + \LaTeXe.\thanks{This file has version + number \fileversion, dated \filedate.}\\[2pt] + It contains the code for \texttt{ltxdoc.cls}} +\date{\filedate} +\author{David Carlisle} +\begin{document} +\maketitle + \DocInput{ltxdoc.dtx} +\end{document} +%</driver> +% +% \fi +% +% \CheckSum{415} +% +% \changes{v2.0i}{1994/04/29}{Update the documentation.} +% \changes{v2.0s}{1998/08/17}{(RmS) Documentation fixes.} +% +% \section{Documentation of the \LaTeX\ sources} +% +% This class file is designed for documenting the \LaTeX\ source files. +% You may however find it generally useful as a class for typesetting +% the documentation of files produced in `doc' format. +% +% Each documented file in the standard distribution comes with extension +% |dtx|. The appropriate class package or initex file will be extracted +% from the source by the docstrip system. Each |dtx| file may be +% directly processed with \LaTeXe, for example +%\begin{verbatim} +% latex2e docclass.dtx +%\end{verbatim} +% would produce the documentation of the Class and package interface. +% +% Each file that is used in producing the \LaTeXe\ format (ie not +% including the standard class and packages) will be printed together in +% one document if you \LaTeX\ the file |sources2e.tex|. This has the +% advantage that one can produce a full index of macro usage across all +% the source files. +% +% If you need to customise the typesetting of any of these files, there +% are two options: +% \begin{itemize} +% \item You can use \dst\ with the module `driver' to extract a small +% \LaTeX\ file that you may edit to use whatever class or package +% options you require, before inputting the source file. +% \item You can create a file |ltxdoc.cfg|. This configuration file will +% be read whenever the |ltxdoc| class is used, and so can be used to +% customise the typesetting of all the source files, without having to +% edit lots of small driver files. +%\end{itemize} +% +% The second option is usually more convenient. Various possibilities +% are discussed in the next section. +% +% \section{Customisation} +% +% The simplest form of customisation is to pass more options to the +% |article| class which is loaded by |ltxdoc|. For instance if you wish +% all the documentation to be formated for A4 paper, add the following +% line to |ltxdoc.cfg|: +%\begin{verbatim} +% \PassOptionsToClass{a4paper}{article} +%\end{verbatim} +% +% All the source files are in two parts, separated by |\StopEventually|. +% The first part (should) contain `user' documentation. The second part +% is a full documented listing of the source code. The |doc| package +% provides the command |\OnlyDescription| which suppresses the code +% listings. This may also be used in the configuration file, but as the +% |doc| package is read later, you must delay the execution of +% |\OnlyDescription| until after the |doc| package has been read. The +% simplest way is to use |\AtBeginDocument|. Thus you could put the +% following in your |ltxdoc.cfg|. +%\begin{verbatim} +% \AtBeginDocument{\OnlyDescription} +%\end{verbatim} +% +% +% If the full source listing |sources2e.tex| is processed, then an index +% and change history are produced by default, however indices are not +% normally produced for individual files. +% +% As an example, consider |ltclass.dtx|, which contains the sources for +% the new class and package interface commands. With no |cfg| +% file, a 19~page document is produced. With the above configuration +% a slightly more readable document (4~pages) is produced. +% +% Conversely, if you really want to read the source listings in detail, +% you will want to have an index. Again the index commands provided by +% the doc package may be used, but their execution must be delayed. +%\begin{verbatim} +% \AtBeginDocument{\CodelineIndex\EnableCrossrefs} +% \AtEndDocument{\PrintIndex} +%\end{verbatim} +% +% The |doc| package writes index files to be sorted using MakeIndex with +% the |gind| style, so one would then use a command such as +%\begin{verbatim} +% makeindex -s gind.ist ltclass.idx +%\end{verbatim} +% and re-run \LaTeX. +% +% Similarly to print a Change history, you would add +%\begin{verbatim} +% \AtBeginDocument{\RecordChanges} +% \AtEndDocument{\PrintChanges} +%\end{verbatim} +% to |ltxdoc.cfg|, and use MakeIndex with a comand such as +%\begin{verbatim} +% makeindex -s gglo.ist -o ltclass.gls ltclass.glo +%\end{verbatim} +% +% Finally if you do not want to list all the sections of |source2e.tex|, +% you can use |\includeonly| in the |cfg| file: +%\begin{verbatim} +% \includeonly{ltvers,ltboxes} +%\end{verbatim} +% +% \StopEventually{} +% +% +% \section{Options} +% +% \begin{macrocode} +%<*class> +\DeclareOption{a5paper}{\@latexerr{Option not supported}% + {}} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareOption*{% + \PassOptionsToClass {\CurrentOption}{article}} +% \end{macrocode} +% +% \section{Configuration} +% Input a local configuration file, if it exists. +% \begin{macrocode} +\InputIfFileExists{ltxdoc.cfg} + {\typeout{*************************************^^J% + * Local config file ltxdoc.cfg used^^J% + *************************************}} + {} +% \end{macrocode} +% +% +% \section{Option Processing} +% +% \begin{macrocode} +\ProcessOptions +% \end{macrocode} +% +% \section{Loading article and doc} +% +% \begin{macrocode} +\LoadClass{article} +% \end{macrocode} +% +% \begin{macrocode} +\RequirePackage{doc} +% \end{macrocode} +% +% Make \verb+|+ be a `short verb' character, but not in the document +% preamble, where an active character may interfere with packages that +% are loaded. +% \begin{macrocode} +\AtBeginDocument{\MakeShortVerb{\|}} +% \end{macrocode} +% +% As `doc' documents tend to have a lot of monospaced material, +% Set up some |tt| substitutions to occur silently. +% \changes{v2.0p}{1995/11/02}{Add font substitutions} +% \changes{v2.0t}{1999/04/17}{Replaced octal number, CAR} +% \begin{macrocode} +\DeclareFontShape{OT1}{cmtt}{bx}{n}{<-> ssub * cmtt/m/n}{} +\DeclareFontFamily{OMS}{cmtt}{\skewchar\font 48} % '60 +\DeclareFontShape{OMS}{cmtt}{m}{n}{<-> ssub * cmsy/m/n}{} +\DeclareFontShape{OMS}{cmtt}{bx}{n}{<-> ssub * cmsy/b/n}{} +% \end{macrocode} +% This substitution is in the standard fd file, but not silent. +% \begin{macrocode} +\DeclareFontShape{OT1}{cmss}{m}{it}{<->ssub*cmss/m/sl}{} +% \end{macrocode} +% +% \begin{macrocode} +\CodelineNumbered +\DisableCrossrefs +% \end{macrocode} +% +% Increase the text width slightly so that width the standard fonts +% 72 columns of code may appear in a |macrocode| environment. +% \changes{v2.0c}{1994/03/15}{Set \cs{textwidth}.} +% \begin{macrocode} +\setlength{\textwidth}{355pt} +% \end{macrocode} +% +% Increase the marginpar width slightly, for long command names. +% And increase the left margin by a similar amount +% \changes{v2.0l} +% {1994/05/25}{Increase \cs{marginparwidth}} +% \changes{v2.0q}{1995/11/28} +% {Increase \cs{marginparwidth} and page margin.} +% \begin{macrocode} +\addtolength\marginparwidth{30pt} +\addtolength\oddsidemargin{20pt} +\addtolength\evensidemargin{20pt} +% \end{macrocode} +% +% +% \begin{macrocode} +\setcounter{StandardModuleDepth}{1} +% \end{macrocode} +% +% \section{Useful abbreviations} +% +% |\cmd{\foo}| Prints |\foo| verbatim. It may be used inside moving +% arguments. |\cs{foo}| also prints |\foo|, for those who prefer that +% syntax. (This second form may even be used when |\foo| is |\outer|). +% \begin{macro}{\cmd} +% \changes{v2.0k}{1994/05/21}{New definition, so \cmd\{ works.} +% \begin{macro}{\cs} +% \changes{v2.0d}{1994/03/17}{Add \cs{cs}} +% \begin{macrocode} +\def\cmd#1{\cs{\expandafter\cmd@to@cs\string#1}} +\def\cmd@to@cs#1#2{\char\number`#2\relax} +\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \changes{v2.0r}{1996/01/11}{Removed \cs{star} since useless pr/2039} +% +% \begin{macro}{\marg} +% \changes{v2.0d}{1994/03/17}{Add \cs{marg}} +% |\marg{text}| prints \marg{text}, `mandatory argument'. +% \begin{macrocode} +\providecommand\marg[1]{% + {\ttfamily\char`\{}\meta{#1}{\ttfamily\char`\}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\oarg} +% |\oarg{text}| prints \oarg{text}, `optional argument'. +% \begin{macrocode} +\providecommand\oarg[1]{% + {\ttfamily[}\meta{#1}{\ttfamily]}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\parg} +% |\parg{te,xt}| prints \parg{te,xt}, `picture mode argument'. +% \changes{v2.0h}{1994/04/28}{Add \cs{parg}} +% \changes{v2.0o}{1995/08/09}{Use \cs{meta} when showing arguments} +% \begin{macrocode} +\providecommand\parg[1]{% + {\ttfamily(}\meta{#1}{\ttfamily)}} +% \end{macrocode} +% \end{macro} +% +% +% \section{Old Comments} +% +% The \LaTeXe\ sources contain a lot of code inherited from +% \LaTeX2.09. The comments in this code were not designed to be +% typeset, and do not contain the necessary \LaTeX\ markup. The +% \texttt{oldcomments} environment typesets these comments, +% automatically sensing when any control sequence appears, and +% implicitly adding the |\verb|. This procedure does not produce +% particularly beautiful pages, but it allows us to fully document new +% sections, and have some form of typeset comments on all the old +% code. +% \changes{v2.0e}{1994/03/18}{Use a fixed font.} +% +% Scan control names and put them in tt. +% will actually (incorrectly) scan past |\\| but this does not matter as +% this is almost never followed by a letter in practice. +% (ie |\\foo|) would put |foo| in |\ttfamily|. +% \begin{macrocode} +\def\oc@scan#1{% + \ifx\oc@bslash#1% + \egroup\let\next\oc@bslash\else + \ifcat a\noexpand#1% + #1\let\next\oc@scan\else + \ifx\oc@percent#1% + \def\next{\char`\%\egroup}% + \else + #1\let\next\egroup + \fi\fi\fi\next} +% \end{macrocode} +% +% \begin{macrocode} +\def\oc@bslash{\bgroup\oc@ttf\char`\\\oc@scan}% +% \end{macrocode} +% +% \begin{macrocode} +\def\oc@verb#1{% + \catcode`#1\active + \uccode`\~`#1% + \uppercase{\def~{{\oc@ttf\char`#1}}}} +% \end{macrocode} +% +% \begin{macrocode} +\begingroup + \obeyspaces% + \catcode`\/=\catcode`\\ + /catcode`/\/active + /catcode`<=/catcode`{% + /catcode`>=/catcode`}% + /catcode`/{/active% + /catcode`/}/active% + /gdef/oldc< \end{oldcomments}>% + /gdef/begmac< \begin{macrocode}>% + /gdef/obs</def <</oc@ttf/ >>>% +/endgroup% +% \end{macrocode} +% +% \begin{macrocode} +\begingroup + \catcode`\/=\catcode`\\ + \catcode`\\=13 + /catcode`/|=/catcode`/% + /catcode`/%=13 + /gdef/oldcomments{| + /makeatletter + /let/do/oc@verb/dospecials + /frenchspacing/@vobeyspaces/obs + /raggedright + /oc@verb/>| + /oc@verb/<| + /let\/oc@bslash + /let%/oc@percent + /obeylines + /parindent/z@ + /ttfamily/expandafter/let/expandafter/oc@ttf/the/font + /rmfamily + /hfuzz/maxdimen + } +/endgroup +% \end{macrocode} +% +% \begin{macrocode} +\begingroup + \sloppy% + \obeylines% + \gdef\oc@percent#1^^M{% + \ifvmode% + \def\commentline{#1}% + \ifx\commentline\oldc% + \end{oldcomments}% + \else% + \ifx\commentline\begmac% + \begin{macrocode}% + \else% + \leavevmode% + #1^^M% + \fi\fi% + \else% + {\oc@ttf\char`\%}#1^^M% + \fi}% +\endgroup% +% \end{macrocode} +% +% +% \section{DocInclude} +% +% \begin{macrocode} +\@addtoreset{CodelineNo}{part} +% \end{macrocode} +% +% \begin{macro}{\DocInclude} +% More or less exactly the same as |\include|, but uses |\DocInput| +% on a |dtx| file, not |\input| on a |tex| file. +% \changes{v2.0b}{1994/03/14}{Rename from \cs{docinclude}} +% \changes{v2.0f}{1994/03/25}{Use \cs{part}} +% \changes{v2.0u}{1999/08/08}{Also works for .fdd (M. Schroeder)} +% \begin{macrocode} +\def\partname{File} +% \end{macrocode} +% +% \begin{macrocode} +\newcommand*{\DocInclude}[1]{% + \relax + \clearpage + \docincludeaux + \IfFileExists{#1.fdd}{\def\currentfile{#1.fdd}}{\def\currentfile{#1.dtx}}% + \ifnum\@auxout=\@partaux + \@latexerr{\string\include\space cannot be nested}\@eha + \else \@docinclude#1 \fi} +\def\@docinclude#1 {\clearpage +\if@filesw \immediate\write\@mainaux{\string\@input{#1.aux}}\fi +\@tempswatrue\if@partsw \@tempswafalse\edef\@tempb{#1}\@for +\@tempa:=\@partlist\do{\ifx\@tempa\@tempb\@tempswatrue\fi}\fi +\if@tempswa \let\@auxout\@partaux \if@filesw +\immediate\openout\@partaux #1.aux +\immediate\write\@partaux{\relax}\fi +% \end{macrocode} +% We need to save (and later restore) various index-related +% commands which might be changed by the included file. +% \begin{macrocode} +\let\@ltxdoc@PrintIndex\PrintIndex +\let\PrintIndex\relax +\let\@ltxdoc@PrintChanges\PrintChanges +\let\PrintChanges\relax +\let\@ltxdoc@theglossary\theglossary +\let\@ltxdoc@endtheglossary\endtheglossary +\part{\currentfile}% + {\let\ttfamily\relax + \xdef\filekey{\filekey, \thepart={\ttfamily\currentfile}}}% +\DocInput{\currentfile}% +\let\PrintIndex\@ltxdoc@PrintIndex +\let\PrintChanges\@ltxdoc@PrintChanges +\let\theglossary\@ltxdoc@theglossary +\let\endtheglossary\@ltxdoc@endtheglossary +\clearpage +\@writeckpt{#1}\if@filesw \immediate\closeout\@partaux \fi +\else\@nameuse{cp@#1}\fi\let\@auxout\@mainaux} +% \end{macrocode} +% +% \begin{macrocode} +\gdef\codeline@wrindex#1{\if@filesw + \immediate\write\@indexfile + {\string\indexentry{#1}% + {\filesep\number\c@CodelineNo}}\fi}% +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\let\filesep\@empty +% \end{macrocode} +% +% +% \begin{macro}{\aalph} +% Special form of |\alph| as currently |source2e.tex| +% includes more than 26 files +% \changes{v2.0n}{1994/05/27}{Use uppercase letters, for makeindex}. +% \begin{macrocode} +\def\aalph#1{\@aalph{\csname c@#1\endcsname}} +\def\@aalph#1{% + \ifcase#1\or a\or b\or c\or d\or e\or f\or g\or h\or i\or + j\or k\or l\or m\or n\or o\or p\or q\or r\or s\or + t\or u\or v\or w\or x\or y\or z\or A\or B\or C\or + D\or E\or F\or G\or H\or I\or J\or K\or L\or M\or + N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or + X\or Y\or Z\else\@ctrerr\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\docincludeaux} +% \changes{v2.06}{1994/03/31}{Use \cs{footnotesize} in file key.} +% \changes{v2.0k}{1994/05/21}{Use \cs{aalph}} +% \begin{macrocode} +\def\docincludeaux{% + \def\thepart{\aalph{part}}\def\filesep{\thepart-}% + \let\filekey\@gobble + \g@addto@macro\index@prologue{% + \gdef\@oddfoot{\parbox{\textwidth}{\strut\footnotesize + \raggedright{\bfseries File Key:} \filekey}}% + \let\@evenfoot\@oddfoot}% + \global\let\docincludeaux\relax + \gdef\@oddfoot{% + \expandafter\ifx\csname ver@\currentfile\endcsname\relax + File \thepart: {\ttfamily\currentfile} % + \else + \GetFileInfo{\currentfile}% + File \thepart: {\ttfamily\filename} % + Date: \filedate\ % + Version \fileversion + \fi + \hfill\thepage}% + \let\@evenfoot\@oddfoot}% +% \end{macrocode} +% \end{macro} +% +% +% \begin{macrocode} +\def\task#1#2{} +%</class> +% \end{macrocode} +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/ltxref.dtx b/Master/texmf-dist/source/latex/base/ltxref.dtx new file mode 100644 index 00000000000..f0435c49261 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/ltxref.dtx @@ -0,0 +1,341 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: ltxref.dtx +% +%<*driver> +% \fi +\ProvidesFile{ltxref.dtx} + [2001/02/16 v1.1k LaTeX Kernel (Cross Referencing)] +% \iffalse +\documentclass{ltxdoc} +\GetFileInfo{ltxref.dtx} +\title{\filename} +\date{\filedate} + \author{% + Johannes Braams\and + David Carlisle\and + Alan Jeffrey\and + Leslie Lamport\and + Frank Mittelbach\and + Chris Rowley\and + Rainer Sch\"opf} + +\begin{document} +\maketitle + \DocInput{\filename} +\end{document} +%</driver> +% \fi +% +% \CheckSum{92} +% +% \changes{v1.0c}{1994/03/29} +% {Create file ltcntlen from parts of ltmiscen and ltherest.} +% \changes{v1.1a}{1994/05/19} +% {Extract file ltxref from ltcntlen.} +% \changes{v1.1b}{1994/05/21}{Use new warning commands} +% \changes{v1.1c}{1994/05/25}{Modify documentation} +% +% \section{Cross Referencing} +% The user writes |\label|\marg{foo} to define the following +% cross-references: +% +% |\ref|\marg{foo}: value of most recently incremented referencable +% counter. in the current environment. (Chapter, section, +% theorem and enumeration counters counters are +% referencable, footnote counters are not.) +% +% |\pageref|\marg{foo}: page number at which |\label{foo}| command +% appeared. where foo can be any string of characters not +% containing `|\|', `|{|' or `|}|'. +% +% Note: The scope of the |\label| command is delimited by environments, +% so\\ +% |\begin{theorem} \label{foo} ... \end{theorem} \label{bar}|\\ +% defines |\ref{foo}| to be the theorem number and |\ref{bar}| to be +% the current section number. +% +% Note: |\label| does the right thing in terms of spacing -- i.e., +% leaving a space on both sides of it is equivalent to leaving +% a space on either side. +% +% +% \StopEventually{} +% +% \subsection{Cross Referencing} +% +% \begin{oldcomments} +% \begin{macrocode} +%<*2ekernel> +\message{x-ref,} +% \end{macrocode} +% +% This is implemented as follows. A referencable counter CNT is +% incremented by the command \refstepcounter{CNT} , which sets +% \@currentlabel == {CNT}{eval(\p@cnt\theCNT)}. The command +% \label{FOO} then writes the following on file \@auxout : +% \newlabel{FOO}{{eval(\@currentlabel)}{eval(\thepage)}} +% +% \ref{FOO} == +% BEGIN +% if \r@foo undefined +% then @refundefined := G T +% ?? +% Warning: 'reference foo on page ... undefined' +% else \@car \eval(\r@FOO)\@nil +% fi +% END +% +% \pageref{foo} = +% BEGIN +% if \r@foo undefined +% then @refundefined := G T +% ?? +% Warning: 'reference foo on page ... undefined' +% else \@cdr \eval(\r@FOO)\@nil +% fi +% END +% +% \end{oldcomments} +% +% \begin{macro}{\G@refundefinedtrue} +% \changes{v1.1i}{1995/12/07}{Renamed (back) from \cs{G@refundefined}} +% \begin{macro}{\@refundefined} +% \changes{v1.1h}{1995/10/24}{Switch for refundefined replaced} +% This does not save on name-space (since \cs{G@refundefinedfalse} +% was never needed) but it does make the implmentation of such +% one-way switches more consistent. The extra macro to make the +% change is used since this change appears several times. +% +% \textbf{Note} despite its name, |\G@refundefinedtrue| does +% \emph{not} correspnd to an |\if| command, and there is no +% matching \ldots|false|. It would be more natural to call the +% command |\G@refundefined| (as inspection of the change log will +% reveal) but unfortunately such a change would break any package +% that had defined a |\ref|-like command that mimicked the +% definition of |\ref|, calling |\G@refundefinedtrue|. Inspection +% of the \TeX\ archives revealed several such packages, and so this +% command has been named \ldots|true| so that the definition of +% |\ref| need not be changed, and the packages will work without +% change. +% \begin{macrocode} +% \newif\ifG@refundefined +% \def\G@refundefinedtrue{\global\let\ifG@refundefined\iftrue} +% \def\G@refundefinedfalse{\global\let\ifG@refundefined\iffalse} +\def\G@refundefinedtrue{% + \gdef\@refundefined{% + \@latex@warning@no@line{There were undefined references}}} +\let\@refundefined\relax +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +% \end{macrocode} +% \begin{macro}{\ref} +% \changes{LaTeX2e}{1993/12/11}{Macro reimplemented} +% \begin{macro}{\pageref} +% \changes{LaTeX2e}{1993/12/11}{Macro reimplemented} +% \begin{macro}{\@setref} +% \changes{LaTeX2e}{1993/12/11}{Macro added} +% \changes{v1.1h}{1995/10/24}{Switch for refundefined renamed} +% \changes{v1.1i}{1995/12/07}{Switch for refundefined restored} +% Referencing a |\label|. +% RmS 91/10/25: added a few extra |\reset@font|, +% as suggested by Bernd Raichle +% +% RmS 92/08/14: made |\ref| and |\pageref| robust +% +% RmS 93/09/08: Added setting of refundefined switch. +% \begin{macrocode} +\def\@setref#1#2#3{% + \ifx#1\relax + \protect\G@refundefinedtrue + \nfss@text{\reset@font\bfseries ??}% + \@latex@warning{Reference `#3' on page \thepage \space + undefined}% + \else + \expandafter#2#1\null + \fi} +\def\ref#1{\expandafter\@setref\csname r@#1\endcsname\@firstoftwo{#1}} +\def\pageref#1{\expandafter\@setref\csname r@#1\endcsname + \@secondoftwo{#1}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\newlabel} +% \changes{v1.1b}{1994/05/21}{Use new warning commands} +% \changes{v1.1e}{1995/04/24}{Make \cs{@onlypreamble} for /1388.} +% \changes{v1.1e}{1995/06/19} +% {Use \cs{@newl@bel} to share code with \cs{bibcite}} +% \changes{v1.1g}{1995/07/14} +% {Remove \cs{@onlypreamble} so still defined in new \cs{enddocument}} +% This command will be written to the \texttt{.aux} file to +% pass label information from one run to another. +% \begin{macro}{\@newl@bel} +% The internal form of |\newlabel| and |\bibcite|. Note that this +% macro does it's work inside a group. That way the local +% assignments it needs to do don't clutter the save stack. This +% prevents large documents with many labels to run out of save +% stack. +% \changes{v1.1h}{1995/10/24}{Switch for multiplelabels replaced by +% inline code} +% \changes{v1.1k}{2001/02/16}{Added an extra grouplevel (PR3250), jlb} +% \begin{macrocode} +\def\@newl@bel#1#2#3{{% + \@ifundefined{#1@#2}% + \relax + {\gdef \@multiplelabels {% + \@latex@warning@no@line{There were multiply-defined labels}}% + \@latex@warning@no@line{Label `#2' multiply defined}}% + \global\@namedef{#1@#2}{#3}}} +% \end{macrocode} +% +% \begin{macrocode} +\def\newlabel{\@newl@bel r} +% \end{macrocode} +% +% \begin{macrocode} +\@onlypreamble\@newl@bel +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\if@multiplelabels} +% \changes{v1.1h}{1995/10/24}{Macro removed} +% \begin{macro}{\@multiplelabels} +% \changes{v1.1h}{1995/10/24}{Switch for multiplelabels removed} +% This is redefined to produce a warning if at least one label is +% defined more than once. It is executed by the |\enddocument| +% command. +% \begin{macrocode} +\let \@multiplelabels \relax +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\label} +% \changes{v1.1d}{1994/11/04}{(ASAJ)Added \cs{protected@write}} +% \begin{macro}{\refstepcounter} +% \changes{v1.1d}{1994/11/04}{(ASAJ)Added \cs{protected@edef}} +% The commands |\label| and |\refstepcounter| have been changed to +% allow |\protect|'ed commands to work properly. For example, +%\begin{verbatim} +% \def\thechapter{\protect\foo{\arabic{chapter}.\roman{section}}} +%\end{verbatim} +% will cause a |\label{bar}| command to define |\ref{bar}| to expand +% to something like |\foo{4.d}|. Change made 20 Jul 88. +% +% \begin{macrocode} +\def\label#1{\@bsphack + \protected@write\@auxout{}% + {\string\newlabel{#1}{{\@currentlabel}{\thepage}}}% + \@esphack} +% \end{macrocode} +% +% \begin{macrocode} +\def\refstepcounter#1{\stepcounter{#1}% + \protected@edef\@currentlabel + {\csname p@#1\endcsname\csname the#1\endcsname}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@currentlabel} +% For |\label| commands that come before any environment +% +% \begin{macrocode} +\def\@currentlabel{} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</2ekernel> +% \end{macrocode} +% +% \subsection{An extension of counter referencing} +% +% +% At the moment a reference to a counter |foo| will generate the +% equivalent of |\p@foo\thefoo| although not quite in this form. For +% some applications it would be nice of one could have |\thefoo| being +% an argument to |\p@foo| to be able to put material before and after +% the number generated by |\thefoo|. This can be easily achieved with +% a small change to one of the kernel commands as follows: +% +%\begin{verbatim} +%\def\refstepcounter#1{\stepcounter{#1}% +% \protected@edef\@currentlabel +% {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}% +%} +%\end{verbatim} +% +% The trick is to ensure that |\csname the#1\endcsname| is turned into +% a single token before |\p@...| is expanded further. This way, if the +% |\p@...| command is a macro with one argument it will receive +% |\the...|. With the kernel code (i.e., without the |\expandafter|) +% it will instead pick up |\csname| which would be disastrous. +% +% Using |\expandafter| instead of braces delimiting the argument is +% better because, assuming that the |\p@...| command is not defined as +% a macro with one argument, the braces will stay and prohibit kerning +% that might otherwise happen between the glyphs generated by +% |\the...| and surrounding glyphs. +% +% We have refrained from making this change in the kernel code +% although for exisiting documents it would be 100\% backward +% compatible. The reason being that any class or package making use of +% this functionality would then horribly fail with older \LaTeX{} +% installations. +% +% Instead we suggest that people who are interested in using this +% functionality in a document class or package add the redefinition to +% the class file. To ensure that this redefinition is properly applied +% they might want to test for the original definition first, e.g. +% +%\begin{verbatim} +%\CheckCommand*\refstepcounter[1]{\stepcounter{#1}% +% \protected@edef\@currentlabel +% {\csname p@#1\endcsname\csname the#1\endcsname}% +%} +%\renewcommand*\refstepcounter[1]{\stepcounter{#1}% +% \protected@edef\@currentlabel +% {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}% +%} +%\end{verbatim} +% +% \Finale +% diff --git a/Master/texmf-dist/source/latex/base/makeindx.dtx b/Master/texmf-dist/source/latex/base/makeindx.dtx new file mode 100644 index 00000000000..563058817f2 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/makeindx.dtx @@ -0,0 +1,313 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +%\CheckSum{178} +%\iffalse +% Copyright (C) 1985 by Leslie Lamport +% Copyright (C) 1994-98 by \LaTeX3 Project and Johannes Braams +%\fi +% +% \changes{1.0b}{1994/01/21}{added a missing \cs{end\{macro\}}, a +% missing docstrip end of module and corrected a few typos} +% \changes{1.0d}{1994/02/11}{Corrected a few documentation errors; +% added \cs{Checksum}} +% \changes{1.0e}{1994/02/22}{Another documentation flaw fixed} +% \changes{1.0f}{1994/03/01}{Moved driver further up; corrected a few +% errors} +% \changes{1.0f}{1994/03/01}{Added overview of {\sc docstrip} modules} +% \changes{1.0i}{1994/11/11}{(DPC) Removed spurious \cs{wlog}} +% \changes{1.0k}{1998/08/17}{(RmS) Minor documentation corrections.} +% \changes{1.0m}{2000/03/29}{(RmS) Added macros \cs{seealso} and \cs{alsoname}.} +% +%\title{Standard \LaTeXe\ packages \texttt{makeidx} and +% \texttt{showidx}} +% +% \author{% +% Johannes Braams\and +% David Carlisle\and +% Alan Jeffrey\and +% Leslie Lamport\and +% Frank Mittelbach\and +% Chris Rowley\and +% Rainer Sch\"opf} +% +% \date{1994/11/11} +% \maketitle +% +% \section{Description} +% +% \subsection{Makeidx} +% +% The package \texttt{makeidx} provides two new commands, |\see| +% and |\printindex|. +% +% \DescribeMacro\see +% The command |\see| can used in the index to cross reference to +% other items. +% +% \DescribeMacro\printindex +% This command can be used to include the sorted and formatted +% index in the document. +% +% \subsection{Showidx} +% +% The package \texttt{showidx} changes a number of internal +% \LaTeXe\ commands in such a way that each index entry is shown in +% the margin on the page where the entry appears. This package was +% originally meant to be used with the \texttt{report} and +% \texttt{book} document classes, but works with other classes as +% well. It makes |\flushbottom| the default. +% +% \StopEventually{} +% +% \section{The {\sc docstrip} modules} +% +% The following modules are used in the implementation to direct +% {\sc docstrip} in generating the external files: +% \begin{center} +% \begin{tabular}{ll} +% makeidx & produce makeidx.sty\\ +% showidx & produce showidx.sty\\ +% driver & produce a documentation driver file \\ +% \end{tabular} +% \end{center} +% +% \section{The documentation driver file} +% +% The next bit of code contains the documentation driver file for +% \TeX{}, i.e., the file that will produce the documentation you are +% currently reading. It can be extracted from this file by the +% {\sc docstrip} program. +% \begin{macrocode} +%<*driver> +\documentclass{ltxdoc} +\begin{document} +\DocInput{makeindx.dtx} +\end{document} +%</driver> +% \end{macrocode} +% +% \section{Implementation} +% +% \subsection{Identification} +% +% Announce the package and its version: +% \changes{v1.0h}{1994/05/01}{Removed use of variables} +% \begin{macrocode} +%<makeidx>\ProvidesPackage{makeidx} +%<showidx>\ProvidesPackage{showidx} + [2000/03/29 v1.0m Standard LaTeX package] +% \end{macrocode} +% +% \subsection{Makeidx} +% +% \begin{macro}{\see} +% This macro discards its second argument (typically a page number) +% and just prints |\seename| together with the entry the reader is +% pointed to. +% \changes{v1.0j}{1995/04/19}{Use \cs{emph} instead of \cs{em}} +% \changes{v1.0j}{1995/04/19}{Disallow \cs{par} in argument} +% \begin{macrocode} +%<*makeidx> +\newcommand*\see[2]{\emph{\seename} #1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\seealso} +% \changes{v1.0m}{2000/03/29}{Macro added (see PR 3133).} +% This macro discards its second argument (typically a page number) +% and just prints |\alsoname| together with the entry the reader is +% pointed to. We use |\providecommand| to retain compatibility with +% existing files that define this macro. +% \begin{macrocode} +\providecommand*\seealso[2]{\emph{\alsoname} #1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\printindex} +% This command simply inputs the (formatted) index if it exists, +% otherwise a warning is issued. +% \changes{1.0c}{1994/02/08}{Use \cs{@input@} instead of \cs{@input} to +% get the index listed by \cs{listfiles}} +% \begin{macrocode} +\newcommand\printindex{\@input@{\jobname.ind}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\seename} +% This package is for documents prepared in the English language. +% To prepare a version for another language, various English words +% must be replaced. All the English words that require replacement +% are% defined below in command names. +% \changes{1.0g}{1994/03/07}{Replaced \cs{newcommand} by \cs{providecommand}.} +% \begin{macrocode} +\providecommand\seename{see} +% \end{macrocode} +% We used |\providecommand| in case the command is already defined +% by a package loaded earlier. +% \end{macro} +% +% \begin{macro}{\alsoname} +% \changes{v1.0m}{2000/03/29}{Macro added (see PR 3133).} +% This macro discards its second argument (typically a page number) +% and just prints |\alsoname| together with the entry the reader is +% pointed to. We use |\providecommand| to retain compatibility with +% existing files that define this macro. +% \begin{macrocode} +\providecommand*\alsoname{see also} +%</makeidx> +% \end{macrocode} +% \end{macro} +% +% \subsection{showidx} +% +% \begin{macro}{\indexbox} +% This package uses \TeX's insert mechanism, therefore it needs to +% allocate an insert register. +% \begin{macrocode} +%<*showidx> +\newinsert\indexbox +\dimen\indexbox=\maxdimen +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\index} +% This is a modified default definition for the user level |\index| +% command. The difference is the change of the category code of the +% space character. +% \begin{macrocode} +\renewcommand\index{\@bsphack\begingroup + \@sanitize\catcode32=10\relax\@index} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\makeindex} +% The same change has to be included in the user level |\makeindex| +% command, which changes the definition of |\index| to actually +% write index entries to an external file. +% \begin{macrocode} +\renewcommand\makeindex{\if@filesw \newwrite\@indexfile + \immediate\openout\@indexfile=\jobname.idx + \def\index{\@bsphack\begingroup + \def\protect####1{\string####1\space}\@sanitize + \catcode32=10 \@wrindex\@indexfile}\typeout + {Writing index file \jobname.idx }\fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@wrindex} +% This macro takes care of writing the index entries to a file. The +% definition is modified to call |\@showidx|. +% \begin{macrocode} +\def\@wrindex#1#2{\let\thepage\relax + \xdef\@gtempa{\write#1{\string + \indexentry{#2}{\thepage}}}\endgroup\@gtempa + \@showidx{#2}\if@nobreak \ifvmode\nobreak\fi\fi\@esphack} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@index} +% When the user didn't use the |\makeindex| command, the |\index| +% macro calls |\@index|, which normally does basically nothing. +% This package changes the definition to call |\@showidx|, which +% includes the entry in the list of indexentries on the current page. +% \begin{macrocode} +\def\@index#1{\@showidx{#1}\endgroup\@esphack} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@showidx} +% This macro adds the current index entry to the insert +% |\indexbox|. The |\indexbox| is typeset as a flushleft paragraph. +% \begin{macrocode} +\def\@showidx#1{% + \insert\indexbox{\small + \hsize\marginparwidth + \hangindent\marginparsep \parindent\z@ + \everypar{}\let\par\@@par \parfillskip\@flushglue + \lineskip\normallineskip + \baselineskip .8\normalbaselineskip\sloppy + \raggedright \leavevmode + \vrule \@height .7\normalbaselineskip \@width \z@\relax + #1\relax + \vrule \@height \z@ \@depth .3\normalbaselineskip \@width \z@}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\raggedbottom} +% \begin{macro}{\flushbottom} +% The definition of these macros from \texttt{latex.dtx} is changed +% here to add the execution of |\@mkidx| to |\@texttop|, which is +% executed at the top of each page. +% \begin{macrocode} +\renewcommand\raggedbottom{\def\@textbottom{\vskip + \z@ plus.0001fil}\let\@texttop\@mkidx} +\renewcommand\flushbottom{\let\@textbottom\relax + \let\@texttop\@mkidx} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@mkidx} +% This macro actually typesets the box containing all the index +% entries on the current page. They will occur on the left or the +% right side of the text, or both, depending on the setting of the +% switches |\if@twocolumn| and |\if@twoside|. +% \begin{macrocode} +\def\@mkidx{\vbox to \z@{\hbox{\if@twocolumn + \if@firstcolumn \@leftidx \else \@rightidx \fi + \else \if@twoside \ifodd\c@page \@rightidx + \else \@leftidx \fi + \else \@rightidx \fi + \fi + \box\indexbox}\vss}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@leftidx} +% \begin{macro}{\@rightidx} +% These macros give the amount of displacemant for the |\indexbox|. +% \begin{macrocode} +\def\@leftidx{\hskip-\marginparsep \hskip-\marginparwidth} +\def\@rightidx{\hskip\columnwidth \hskip\marginparsep} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% To make this work we have to execute either |\raggedbottom| or +% |\flushbottom|. Assuming this package is used most often with the +% document classes \texttt{report} and \texttt{book}, we execute +% |\flushbottom|. +% \begin{macrocode} +\flushbottom +%</showidx> +% \end{macrocode} +% +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/base/makeindx.ins b/Master/texmf-dist/source/latex/base/makeindx.ins new file mode 100644 index 00000000000..73e45c3f7c4 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/makeindx.ins @@ -0,0 +1,96 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\generate{\file{makeidx.sty}{\from{makeindx.dtx}{makeidx}} + \file{showidx.sty}{\from{makeindx.dtx}{showidx}} + } + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space makeidx.sty} +\Msg{* \space\space showidx.sty} +\Msg{*} +\Msg{* To produce the documentation run the files ending with} +\Msg{* `.dtx' through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} +} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/newdc.ins b/Master/texmf-dist/source/latex/base/newdc.ins new file mode 100644 index 00000000000..1e02efda6f7 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/newdc.ins @@ -0,0 +1,122 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +In particular, permission is granted to customize the declarations in +this file to serve the needs of your installation. + +However, NO PERMISSION is granted to distribute a modified version +of this file under its original name. + +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\Msg{*** Generating font defs for Cork encoded + and Text Companion fonts ***} + +\generate{ + \file{t1cmfib.fd}{ + \from{cmfonts.fdd}{fd,T1cmfib,new}} + \file{t1cmfr.fd}{ + \from{cmfonts.fdd}{fd,T1cmfr,new}} + \file{t1cmdh.fd}{ + \from{cmfonts.fdd}{fd,T1cmdh,new}} + \file{t1cmr.fd}{ + \from{cmfonts.fdd}{fd,T1cmr,new}} + \file{t1cmss.fd}{ + \from{cmfonts.fdd}{fd,T1cmss,new}} + \file{t1cmtt.fd}{ + \from{cmfonts.fdd}{fd,T1cmtt,tt,new,nowarn}} + \file{t1cmvtt.fd}{ + \from{cmfonts.fdd}{fd,T1cmvtt,tt,new}} + \file{ts1cmr.fd}{ + \from{cmfonts.fdd}{fd,TS1cmr,new}} + \file{ts1cmss.fd}{ + \from{cmfonts.fdd}{fd,TS1cmss,new}} + \file{ts1cmtt.fd}{ + \from{cmfonts.fdd}{fd,TS1cmtt,new,tt}} + \file{ts1cmvtt.fd}{ + \from{cmfonts.fdd}{fd,TS1cmvtt,new,tt}} +} + + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space All *.fd} +\Msg{*} +\Msg{* To produce the documentation run the files ending with} +\Msg{* `.fdd' through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} +} + +\endbatchfile + diff --git a/Master/texmf-dist/source/latex/base/newlfont.dtx b/Master/texmf-dist/source/latex/base/newlfont.dtx new file mode 100644 index 00000000000..e400850f680 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/newlfont.dtx @@ -0,0 +1,219 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +%\iffalse % this is a METACOMMENT ! +% +%% File `newlfont.dtx'. +%% Copyright (C) 1989-1998 Frank Mittelbach and Rainer Sch\"opf, +%% all rights reserved. +% +%<*dtx> + \ProvidesFile{newlfont.dtx} +%</dtx> +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{newlfont} +%<driver> \ProvidesFile{newlfont.drv} +% \fi +% \ProvidesFile{newlfont.dtx} + [1998/08/17 v2.2m Standard LaTeX package] +% +% \iffalse +%<*driver> +\documentclass{ltxdoc} +\begin{document} +\DocInput{newlfont.dtx} +\end{document} +%</driver> +% \fi +% +% \CheckSum{88} +% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% +% \changes{v2.2a}{1994/01/17}{Added missing definitions to support +% newlfont in compat mode} +% \changes{v2.2b}{1994/01/27}{Removed if@compat test since +% these settings need also be executed in 2e mode.} +% \changes{v2.2c}{1994/03/06}{Added def for \cs{cal} and \cs{mit}} +% \changes{v2.2l}{1995/11/29}{Remove duplicate driver code.} +% \changes{v2.2m}{1998/08/17}{(RmS) Minor documentation fixes.} +% +% \providecommand\dst{\expandafter{\normalfont\scshape docstrip}} +% +% +% \GetFileInfo{newlfont.dtx} +% +% \title{The file \texttt{newlfont.dtx} for use with +% \LaTeXe.\thanks{This file has version +% number \fileversion, dated \filedate.}\\[2pt] +% It contains the code for \texttt{newlfont.sty}} +% +% \author{Frank Mittelbach} +% +% \maketitle +% +% \section{Introduction} +% +% This file contains the code for the \texttt{newlfont} package +% which provides defines commands like |\rm| to behave as with +% NFSS1, i.e., to change one font attribute without resetting the +% other attributes. +% +% \StopEventually{} +% +% +% \section{The Code} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% We define the font commands for selecting the typeface. They are +% probably defined by the document class/style but we want to force +% the old meaning from NFSS1. +% +% \changes{v2.2g}{1994/05/11}{DPC Remove definitions of \cs{prm} etc.} +% \begin{macrocode} +\let\rm\rmfamily +\let\sf\sffamily +\let\tt\ttfamily +\let\bf\bfseries +\let\sl\slshape +\let\sc\scshape +\let\it\itshape +% \end{macrocode} +% We also have to define the \emph{emphasize} font change command +% (i.e.\ |\em|). This command will look whether the current font is +% sloped (i.e.\ has a positive |\fontdimen1|) and will then select +% either an upright or italic font. +% \changes{v2.2g}{1994/05/11}{DPC use \cs{DeclareProtectedCommand}} +% \changes{v2.2h}{1994/05/13}{DPC renamed to \cs{DeclareRobustCommand}} +% \begin{macrocode} +\DeclareRobustCommand\em{% + \@nomath\em + \ifdim \fontdimen\@ne\font >\z@\upshape \else \itshape \fi} +% \end{macrocode} +% +% For compatibility with old sources we should define the following +% commands although their use in new documents is discouraged. +% \begin{macrocode} +\let\mediumseries\mdseries +\let\normalshape\upshape +% \end{macrocode} +% +% In case \texttt{newlfont} is used in compatibility mode, eg +%\begin{verbatim} +% \documentstyle[newlfont]{article} +%\end{verbatim} +% or with the \texttt{oldlfont} package already loaded +% we have to undo a number of settings changed by the compatibility +% mode for \LaTeX~2.09 documents. +% +% |\@setfontsize| should not have a |\reset@font| included. +% \changes{v2.2j}{1994/11/06}{Use \cs{@typeset@protect}} +% \begin{macrocode} +\def\@setfontsize#1#2#3{\@nomath#1% + \ifx\protect\@typeset@protect + \let\@currsize#1% + \fi + \fontsize{#2}{#3}\selectfont} +% \end{macrocode} +% Math alphabet identifiers should have an argument. +% \changes{v2.2d}{1994/03/10}{Changed \cs{begingroup}/\cs{endgroup} to +% \cs{bgroup}/\cs{egroup}.} +% \changes{v2.2f}{1994/05/05}{Added saved versions of the +% math-groupers, CAR} +% \begin{macrocode} +\let\math@bgroup\bgroup +\def\math@egroup#1{#1\egroup} +\let \@@math@bgroup \math@bgroup +\let \@@math@egroup \math@egroup +% \end{macrocode} +% Warn again, if text font commands are used in math +% (same macro as in \texttt{lfonts.dtx}). +% \changes{v2.2e}{1994/04/21}{Changed error message} +% \changes{v2.2k}{1995/04/02}{add \cs{noexpand} to second part of message} +% \begin{macrocode} +\def\not@math@alphabet#1#2{% + \relax + \ifmmode + \@latex@error{Command \noexpand#1invalid in math mode}% + {% + Please + \ifx#2\relax + define a new math alphabet^^J% + if you want to use a special font in math mode% + \else +% \end{macrocode} +% We have to add |\noexpand| below to prevent expansion of |#2|. In +% case of |#1| we can omit this (due to the current definition of +% robust commands since they do come out right there :-). +% \begin{macrocode} + use the math alphabet \noexpand#2instead of + the #1command% + \fi + . + }% + \fi} +% \end{macrocode} +% +% In NFSS1 math alphabets had arguments so we have to change |\cal| +% and |\mit| which by default are defined to behave like in +% \LaTeX209. +% \begin{macrocode} +\let\pcal\@undefined +\let\cal\mathcal +\let\pmit\@undefined +\let\mit\mathnormal +% \end{macrocode} +% +% The NFSS1 version of \texttt{newlfont} included the \LaTeX{} +% symbols. And that is probably all there is. +% \begin{macrocode} +\RequirePackage{latexsym} +%</package> +% \end{macrocode} +% +% +% \Finale +\endinput diff --git a/Master/texmf-dist/source/latex/base/nfssfont.dtx b/Master/texmf-dist/source/latex/base/nfssfont.dtx new file mode 100644 index 00000000000..02da5a8db9d --- /dev/null +++ b/Master/texmf-dist/source/latex/base/nfssfont.dtx @@ -0,0 +1,445 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +\def\nfssfontfileversion{v2.1a} +\def\nfssfontfiledate{2003/01/12} + +% \CheckSum{1182} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \iffalse +% Copyright (C) 1994 Donald E. Knuth +% Copyright (C) 1994-94,2003 Frank Mittelbach, +% all rights reserved. +% \fi +% +% +% \title{The program \texttt{nfssfont}} +% \author{Frank Mittelbach\thanks{Adapted from code written +% by Donald E.~Knuth}} +% \date{\nfssfontfiledate} +% +% +% \def\dst{{\normalfont\scshape docstrip}} +% \def\NFSS{\textsf{NFSS}} +% \setcounter{StandardModuleDepth}{1} +% +% +% \maketitle +% +% \section{Introduction} +% +% Within the \NFSS{} distribution there is a \LaTeX{} file +% \texttt{nfssfont.tex} which can be used to test new fonts, produce +% font tables showing all characters, etc. This is an addaption of a +% program originally written by Don Knuth. + +% When you run this file through \LaTeX{} you will be asked to enter +% the name of the font to test. Your answer should be the external +% font name without any extension, e.g.\ \texttt{cmr10} (Computer +% Modern Roman 10pt) or \texttt{yinit} (Yannis Haralambous' Initial +% font). +% +% Alternatively (since version 2.1), you can press \meta{return} at +% this point. In that case a dialog is started that asks you for the +% font characteristics in \NFSS{} notation, i.e., first for the +% encoding scheme (default \texttt{T1}), then for the family name +% (default \texttt{cmr}), then for the series (default \texttt{m}), +% then for the shape (default \texttt{n}), and finally for the size +% (default \texttt{10pt}). +% +% You are then requested to enter a command. Probably the most +% important one is |\table|, which will produce a font chart. To +% switch to a new test font, type |\init|; to finish the test, type +% |\bye|; and to learn about all the other possible tests type +% |\help|. +% +% This is at +% the moment only a crude addaption of the test program for the +% Computer Modern fonts by Donald Knuth. +% +% \StopEventually{} +% +% \section{A driver for this document} +% +% The next bit of code contains the documentation driver file for +% \TeX{}, i.e., the file that will produce the documentation you are +% currently reading. It will be extracted from this file by the +% \dst{} program. +% \begin{macrocode} +%<*driver> +\documentclass{ltxdoc} + % \OnlyDescription % comment out for implementation details +\begin{document} + \DocInput{nfssfont.dtx} +\end{document} +%</driver> +% \end{macrocode} +% +% \section{The code} +% +% A testbed for font evaluation (see The METAFONTbook, Appendix H) +% changed for \LaTeX{} with \NFSS. +% +% This program should get a complete rewrite some day or at least some +% code documentation. Any volunteers? +% \begin{macrocode} +%<*code> +\documentclass{article} %FMi +\nofiles %FMi +\textwidth=470pt %FMi +\oddsidemargin=0pt %FMi +\textheight=1000pt %FMi +\def\sevenrm{\fontsize{7}{9pt}\rmfamily} %FMi + +\typeout{**********************************************} +\typeout{* NFSS font test program version <\nfssfontfileversion>} +\typeout{*} +\typeout{* Follow the instructions} +\typeout{**********************************************} +\typeout{} + +\tracinglostchars=0 +\tolerance=1000 +\raggedbottom +\parindent=0pt +%\newlinechar=`@ %FMi +\hyphenpenalty=200 +\doublehyphendemerits=30000 +% \end{macrocode} +% +% \begin{macrocode} +\newcount\m \newcount\n \newcount\p \newdimen\dim +\chardef\other=12 + +\def\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} +\def\hours{\n=\time \divide\n 60 + \m=-\n \multiply\m 60 \advance\m \time + \twodigits\n\twodigits\m} +\def\twodigits#1{\ifnum #1<10 0\fi \number#1} +% \end{macrocode} +% +% We first ask for a real external font name\ldots +% \begin{macrocode} +\def\init{% + \typein[\currfontname]% + {Input external font name, e.g., cmr10^^J% + (or <enter> for NFSS classification of font):}% +% \end{macrocode} +% If the user answers with ``return'' we ask for the \NFSS{} +% classification of the font in form of encoding, family, series, +% shape, and size offering a default each time. +% \begin{macrocode} + \ifx\currfontname\empty + \begingroup + \typein[\encoding]{^^J^^J*** NFSS classification + ***^^J^^JFont encoding [T1]:}% + \ifx\encoding\empty + \fontencoding{T1}% + \else +% \end{macrocode} +% The requested encoding might not be loaded, so we pretend that it +% was loaded here to avoid an error, after all we only need it to +% find out the external font name. +% \begin{macrocode} + \expandafter\let\csname T@\encoding\endcsname\empty + \fontencoding\encoding + \fi + \typein[\family]{Font family [cmr]:}% + \relax + \ifx\family\empty + \fontfamily{cmr}% + \else + \fontfamily\family + \fi + \typein[\series]{Font series [m]:}% + \ifx\series\empty + \fontseries{m}% + \else + \fontseries\series + \fi + \typein[\shape]{Font shape [n]:}% + \ifx\shape\empty + \fontshape{n}% + \else + \fontshape\shape + \fi + \typein[\size]{Font size [10pt]:}% + \ifx\size\empty + \fontsize{10}{10}% + \else + \fontsize\size\size + \fi +% \end{macrocode} +% Finally select the font and globally assign it to |\currfontname|. +% \begin{macrocode} + \selectfont\xdef\currfontname{\fontname\font}% + \endgroup + \fi + \startfont + \message{Now type a test command (\string\help\space for help):}} +% \end{macrocode} +% +% \begin{macrocode} +\def\startfont{\font\testfont=\currfontname + \leftline{\sevenrm Test of \currfontname\unskip\ on \today\ at \hours} + \medskip + \testfont \setbaselineskip + \ifdim\fontdimen6\testfont<10pt \rightskip=0pt plus 20pt + \else\rightskip=0pt plus 2em \fi + \spaceskip=\fontdimen2\testfont % space between words (\raggedright) + \xspaceskip=\fontdimen2\testfont \advance\xspaceskip + by\fontdimen7\testfont} +% \end{macrocode} +% +% \begin{macrocode} +{\catcode`\|=0 \catcode`\\=\other +|gdef|help{|message{% +\init switches to another font;^^J% +\stop or \bye finishes the run;^^J% +\table prints the font layout in tabular format;^^J% +\text prints a sample text, assuming TeX text font conventions;^^J% +\sample combines \table and \text;^^J% +\mixture mixes a background character with a series of others;^^J% +\alternation interleaves a background character with a series;^^J% +\alphabet prints all lowercase letters within a given background;^^J% +\ALPHABET prints all uppercase letters within a given background;^^J% +\series prints a series of letters within a given background;^^J% +\lowers prints a comprehensive test of lowercase;^^J% +\uppers prints a comprehensive test of uppercase;^^J% +\digits prints a comprehensive test of numerals;^^J% +\math prints a comprehensive test of TeX math italic;^^J% +\names prints a text that mixes upper and lower case;^^J% +\punct prints a punctuation test;^^J% +\bigtest combines many of the above routines;^^J% +\help repeats this message;^^J% +and you can use ordinary TeX commands (e.g., to \input a file).}}} + +\def\setbaselineskip{\setbox0=\hbox{\n=0 +\loop\char\n \ifnum \n<255 \advance\n 1 \repeat} +\baselineskip=6pt \advance\baselineskip\ht0 \advance\baselineskip\dp0 } +% \end{macrocode} +% +% \begin{macrocode} +\def\setchar#1{{\escapechar-1\message{\string#1 character = }% + \def\do##1{\catcode`##1=\other}\dospecials + \read-1 to\next + \expandafter\finsetchar\next\next#1}} +\def\finsetchar#1#2\next#3{\global\chardef#3=`#1 + \ifnum #3=`\# \global\chardef#3=#2 \fi} +\def\promptthree{\setchar\background + \setchar\starting \setchar\ending} + +\def\mixture{\promptthree \domix\mixpattern} +\def\alternation{\promptthree \domix\altpattern} +\def\mixpattern{\0\1\0\0\1\1\0\0\0\1\1\1\0\1} +\def\altpattern{\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0\1\0} +\def\domix#1{\par\chardef\0=\background \n=\starting + \loop \chardef\1=\n #1\endgraf + \ifnum \n<\ending \advance\n 1 \repeat} + +\def\!{\discretionary{\background}{\background}{\background}} +\def\series{\promptthree \!\doseries\starting\ending\par} +\def\doseries#1#2{\n=#1\loop\char\n\!\ifnum\n<#2\advance\n 1 \repeat} +\def\complower{\!\doseries{`a}{`z}\doseries{'31}{'34}\par} +\def\compupper{\!\doseries{`A}{`Z}\doseries{'35}{'37}\par} +\def\compdigs{\!\doseries{`0}{`9}\par} +\def\alphabet{\setchar\background\complower} +\def\ALPHABET{\setchar\background\compupper} + +\def\lowers{\docomprehensive\complower{`a}{`z}{'31}{'34}} +\def\uppers{\docomprehensive\compupper{`A}{`Z}{'35}{'37}} +\def\digits{\docomprehensive\compdigs{`0}{`4}{`5}{`9}} +\def\docomprehensive#1#2#3#4#5{\par\chardef\background=#2 + \loop{#1} \ifnum\background<#3\m=\background\advance\m 1 + \chardef\background=\m \repeat \chardef\background=#4 + \loop{#1} \ifnum\background<#5\m=\background\advance\m 1 + \chardef\background=\m \repeat} +% \end{macrocode} +% +% \begin{macrocode} +\def\names{ {\AA}ngel\aa\ Beatrice Claire + Diana \'Erica Fran\c{c}oise Ginette H\'el\`ene Iris + Jackie K\=aren {\L}au\.ra Mar{\'\i}a N\H{a}ta{\l}{\u\i}e {\O}ctave + Pauline Qu\^eneau Roxanne Sabine T\~a{\'\j}a Ur\v{s}ula + Vivian Wendy Xanthippe Yv{\o}nne Z\"azilie\par} +\def\punct{\par\dopunct{min}\dopunct{pig}\dopunct{hid} + \dopunct{HIE}\dopunct{TIP}\dopunct{fluff} + \$1,234.56 + 7/8 = 9\% @ \#0\par} +\def\dopunct#1{#1,\ #1:\ #1;\ `#1'\ ?`#1?\ !`#1!\ (#1)\ [#1]\ + #1*\ #1.\par} + +\def\bigtest{\sample + hamburgefonstiv HAMBURGEFONSTIV\par + \names \punct \lowers \uppers \digits} + +\def\math{\textfont1=\testfont \skewchar\testfont=\skewtrial + \mathchardef\Gamma="100 \mathchardef\Delta="101 + \mathchardef\Theta="102 \mathchardef\Lambda="103 \mathchardef\Xi="104 + \mathchardef\Pi="105 \mathchardef\Sigma="106 \mathchardef\Upsilon="107 + \mathchardef\Phi="108 \mathchardef\Psi="109 \mathchardef\Omega="10A + \def\ii{i} \def\jj{j} + \def\\##1{|##1|+}\mathtrial + \def\\##1{##1_2+}\mathtrial + \def\\##1{##1^2+}\mathtrial + \def\\##1{##1/2+}\mathtrial + \def\\##1{2/##1+}\mathtrial + \def\\##1{##1,{}+}\mathtrial + \def\\##1{d##1+}\mathtrial + \let\ii=\imath \let\jj=\jmath \def\\##1{\hat##1+}\mathtrial} +\newcount\skewtrial \skewtrial='177 +\def\mathtrial{$\\A \\B \\C \\D \\E \\F \\G \\H \\I \\J \\K \\L \\M \\N + \\O \\P \\Q \\R \\S \\T \\U \\V \\W \\X \\Y \\Z \\a \\b \\c \\d \\e \\f + \\g \\h \\\ii \\\jj \\k \\l \\m \\n \\o \\p \\q \\r \\s \\t \\u \\v \\w + \\x \\y \\z \\\alpha \\\beta \\\gamma \\\delta \\\epsilon \\\zeta + \\\eta \\\theta \\\iota \\\kappa \\\lambda \\\mu \\\nu \\\xi \\\pi + \\\rho \\\sigma \\\tau \\\upsilon \\\phi \\\chi \\\psi \\\omega + \\\vartheta \\\varpi \\\varphi \\\Gamma \\\Delta \\\Theta \\\Lambda + \\\Xi \\\Pi \\\Sigma \\\Upsilon \\\Phi \\\Psi \\\Omega \\\partial + \\\ell \\\wp$\par} +\def\mathsy{\begingroup\skewtrial='060 % for math symbol font tests + \def\mathtrial{$\\A \\B \\C \\D \\E \\F \\G \\H \\I \\J \\K \\L + \\M \\N \\O \\P \\Q \\R \\S \\T \\U \\V \\W \\X \\Y \\Z$\par} + \math\endgroup} +% \end{macrocode} +% +% \begin{macrocode} +\def\oct#1{\hbox{\rmfamily\'{}\kern-.2em\itshape + #1\/\kern.05em}} % octal constant +\def\hex#1{\hbox{\rmfamily\H{}\ttfamily#1}} % hexadecimal constant +\def\setdigs#1"#2{\gdef\h{#2}% \h=hex prefix; \0\1=corresponding octal + \m=\n \divide\m by 64 \xdef\0{\the\m}% + \multiply\m by-64 \advance\m by\n \divide\m by 8 \xdef\1{\the\m}} +\def\testrow{\setbox0=\hbox{\penalty 1\def\\{\char"\h}% + \\0\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\B\\C\\D\\E\\F% + \global\p=\lastpenalty}} % \p=1 if none of the characters exist +\def\oddline{\cr + \noalign{\nointerlineskip} + \multispan{19}\hrulefill& + \setbox0=\hbox{\lower 2.3pt\hbox{\hex{\h x}}}\smash{\box0}\cr + \noalign{\nointerlineskip}} +\newif\ifskipping +\def\evenline{\loop\skippingfalse + \ifnum\n<256 \m=\n \divide\m 16 \chardef\next=\m + \expandafter\setdigs\meaning\next \testrow + \ifnum\p=1 \skippingtrue \fi\fi + \ifskipping \global\advance\n 16 \repeat + \ifnum\n=256 \let\next=\endchart\else\let\next=\morechart\fi + \next} +\def\morechart{\cr\noalign{\hrule\penalty5000} + \chartline \oddline \m=\1 \advance\m 1 \xdef\1{\the\m} + \chartline \evenline} +\def\chartline{&\oct{\0\1x}&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&\:&&} +\def\chartstrut{\lower4.5pt\vbox to14pt{}} +\def\table{$$\global\n=0 + \halign to\hsize\bgroup + \chartstrut##\tabskip0pt plus10pt& + &\hfil##\hfil&\vrule##\cr + \lower6.5pt\null + &&&\oct0&&\oct1&&\oct2&&\oct3&&\oct4&&\oct5&&\oct6&&\oct7&\evenline} +\def\endchart{\cr\noalign{\hrule} + \raise11.5pt\null&&&\hex 8&&\hex 9&&\hex A&&\hex B& + &\hex C&&\hex D&&\hex E&&\hex F&\cr\egroup$$\par} +\def\:{\setbox0=\hbox{\char\n}% + \ifdim\ht0>7.5pt\reposition + \else\ifdim\dp0>2.5pt\reposition\fi\fi + \box0\global\advance\n 1 } +\def\reposition{\setbox0=\vbox{\kern2pt\box0}\dim=\dp0 + \advance\dim 2pt \dp0=\dim} +\def\centerlargechars{ + \def\reposition{\setbox0=\hbox{$\vcenter{\kern2pt\box0\kern2pt}$}}} +% \end{macrocode} +% +% \begin{macrocode} +\def\text{{\advance\baselineskip-4pt +\setbox0=\hbox{abcdefghijklmnopqrstuvwxyz} +\ifdim\hsize>2\wd0 + \ifdim 15pc>2\wd0 \hsize=15pc \else \hsize=2\wd0 \fi +\fi +On November 14, 1885, Senator \& Mrs.~Leland Stanford called together +at their San Francisco mansion the 24~prominent men who had been +chosen as the first trustees of The Leland Stanford Junior University. +They handed to the board the Founding Grant of the University, which +they had executed three days before. This document---with various +amendments, legislative acts, and court decrees---remains as the +University's charter. In bold, sweeping language it stipulates that +the objectives of the University are ``to qualify students for +personal success and direct usefulness in life; and to promote the +publick welfare by exercising an influence in behalf of humanity and +civilization, teaching the blessings of liberty regulated by law, and +inculcating love and reverence for the great principles of government +as derived from the inalienable rights of man to life, liberty, and +the pursuit of happiness.'' \moretext +(!`THE DAZED BROWN FOX QUICKLY GAVE 12345--67890 JUMPS!)\par}} +\def\moretext{?`But aren't Kafka's Schlo{\ss} and {\AE}sop's +{\OE}uvres often na{\"\i}ve vis-\`a-vis the d{\ae}monic ph{\oe}nix's +official r\^ole in fluffy souffl\'es? } +\def\omitaccents{\let\moretext=\relax} + +\def\sample{\table\text} +% \end{macrocode} +% +% \begin{macrocode} +\def\bye{\end{document}} %FMi +% \end{macrocode} +% +% The redefinition of |\typeout| around the |\begin{document}| +% prevents \LaTeX{} from reporting that there is no |.aux| file. +% This is a bad hack, I agree :-) +% \begin{macrocode} +\let\oldtypeout\typeout %FMi +\def\typeout#1{} %FMi +\begin{document} %FMi +\let\typeout\oldtypeout %FMi + +\ifx\noinit!\else\init\fi +%</code> +% \end{macrocode} +% +% +% \DeleteShortVerb{\|} +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/base/nfssfont.ins b/Master/texmf-dist/source/latex/base/nfssfont.ins new file mode 100644 index 00000000000..1c08e06029b --- /dev/null +++ b/Master/texmf-dist/source/latex/base/nfssfont.ins @@ -0,0 +1,79 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\generateFile{nfssfont.tex}{t}{% + \from{nfssfont.dtx}{code}} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/olddc.ins b/Master/texmf-dist/source/latex/base/olddc.ins new file mode 100644 index 00000000000..fb79a18f460 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/olddc.ins @@ -0,0 +1,113 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +In particular, permission is granted to customize the declarations in +this file to serve the needs of your installation. + +However, NO PERMISSION is granted to distribute a modified version +of this file under its original name. + +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\Msg{*** Generating font defs for Cork encoded fonts ***} + +\generate{ + \file{t1cmfib.fd}{ + \from{cmfonts.fdd}{fd,T1cmfib,old}} + \file{t1cmfr.fd}{ + \from{cmfonts.fdd}{fd,T1cmfr,old}} + \file{t1cmdh.fd}{ + \from{cmfonts.fdd}{fd,T1cmdh,old}} + \file{t1cmr.fd}{ + \from{cmfonts.fdd}{fd,T1cmr,old}} + \file{t1cmss.fd}{ + \from{cmfonts.fdd}{fd,T1cmss,old}} + \file{t1cmtt.fd}{ + \from{cmfonts.fdd}{fd,T1cmtt,old}} + \file{t1cmvtt.fd}{ + \from{cmfonts.fdd}{fd,T1cmvtt,old}} +} + + + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space All *.fd} +\Msg{*} +\Msg{* To produce the documentation run the files ending with} +\Msg{* `.fdd' through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} +} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/oldlfont.dtx b/Master/texmf-dist/source/latex/base/oldlfont.dtx new file mode 100644 index 00000000000..08856eac7f7 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/oldlfont.dtx @@ -0,0 +1,267 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +%\iffalse % this is a METACOMMENT ! +% +%% File `oldlfont.dtx'. +%% Copyright (C) 1989-1995 Frank Mittelbach and Rainer Sch\"opf, +%% all rights reserved. +% +%<*dtx> + \ProvidesFile{oldlfont.dtx} +%</dtx> +%<package>\NeedsTeXFormat{LaTeX2e} +%<package>\ProvidesPackage{oldlfont} +%<driver> \ProvidesFile{oldlfont.drv} +%<*!latex209> +% \fi +% \ProvidesFile{oldlfont.dtx} + [1994/11/29 v2.2k Standard LaTeX package] +% +% \iffalse +%</!latex209> +%<*driver> +\documentclass{ltxdoc} +\begin{document} +\DocInput{oldlfont.dtx} +\end{document} +%</driver> +% \fi +% +% \CheckSum{117} +% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% +% +% \providecommand\dst{\expandafter{\normalfont\scshape docstrip}} +% +% \GetFileInfo{oldlfont.dtx} +% +% \title{The file \texttt{oldlfont.dtx} for use with +% \LaTeXe.\thanks{This file has version +% number \fileversion, dated \filedate.}\\[2pt] +% It contains the code for \texttt{oldlfont.sty}} +% +% \author{Frank Mittelbach} +% +% \maketitle +% +% \section{Introduction} +% +% This file contains the code for the \texttt{oldlfont} package +% which emulates the following \LaTeX~2.09 font commands: +% \begin{itemize} +% \item The two-letter font-changing commands |\rm|, etc.~are +% defined to cancel each other out as they did in \LaTeX~2.09. +% \item The two-letter font-changing commands are allowed in math +% mode. +% \item The |latexsym| package is loaded. +% \end{itemize} +% For full compatibility mode, the file |latex209.def| is loaded by +% |\documentstyle|. +% +% The following modules are used in the implementation to direct +% \dst{} in generating the external files: +% \begin{center} +% \begin{tabular}{ll} +% driver & produce a documentation driver file \\ +% package & produce |oldlfont.sty| \\ +% latex209 & produce part of |latex209.def| +% \end{tabular} +% \end{center} +% +% \StopEventually{} +% +% \changes{v2.2k}{1995/11/29}{Remove duplicate driver code.} +% +% \section{The Code} +% +% +% \begin{macro}{\math@bgroup} +% \begin{macro}{\math@egroup} +% To make \meta{math alphabet identifier} work like simple font +% switches we change the meaning of |\math@bgroup| and +% |\math@egroup| to |\@empty|. This emulates the behavior of +% \texttt{oldlfont.sty} in NFSS1 setups. These definitions are not +% part of \texttt{latex209} automatically, since to emulate 2.09 +% they are not necessary (all standard fonts are declared as math +% symbol fonts). +% \changes{v2.2f}{1994/05/05}{Added saved versions of the +% math-groupers, CAR} +% \changes{v2.2g}{1994/05/09}{Moved outside latex209 part} +% \begin{macrocode} +\let\math@bgroup\@empty +\let\math@egroup\@empty +\let \@@math@bgroup \math@bgroup +\let \@@math@egroup \math@egroup +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% The rest of this document describes code that is used in +% |oldlfont.sty| and |latex209.def|. +% \begin{macrocode} +%<*package|latex209> +% \end{macrocode} +% +% When emulating the old settings we don't want a lot of NFSS +% information being displayed. Thus we required that the +% \texttt{tracefnt} package is loaded with the option +% \texttt{errorshow}. +% \begin{macrocode} +\RequirePackage[errorshow]{tracefnt} +% \end{macrocode} +% +% We define math \emph{alphabet} identifiers for the typefaces +% described in the \LaTeX{} manual. This is straightforward. Some +% are already defined by the kernel code. +% And here are the other ones defined by the old \LaTeX{}. They all +% get declared as math symbol font alphabets. Thus we first +% allocate the additional symbol fonts. +% \begin{macrocode} +\DeclareSymbolFont{bold}{OT1}{cmr}{bx}{n} +\DeclareSymbolFont{sans}{OT1}{cmss}{m}{n} +\DeclareSymbolFont{typewriter}{OT1}{cmtt}{m}{n} +\DeclareSymbolFont{italic}{OT1}{cmr}{m}{it} +\DeclareSymbolFont{smallcaps}{OT1}{cmr}{m}{sc} +\DeclareSymbolFont{slanted}{OT1}{cmr}{m}{sl} +% \end{macrocode} +% And here are the corresponding math identifiers. +% \begin{macrocode} +\DeclareSymbolFontAlphabet\mathbf{bold} +\DeclareSymbolFontAlphabet\mathsf{sans} +\DeclareSymbolFontAlphabet\mathtt{typewriter} +\DeclareSymbolFontAlphabet\mathsc{smallcaps} +\DeclareSymbolFontAlphabet\mathsl{slanted} +% \end{macrocode} +% We undefine the old |\mit| and |\cal| macros (whatever meaning +% they have) and reallocate them as symbol font alphabets. +% \begin{macrocode} +\let\mit\undefined +\let\cal\undefined +\let\mathit\undefined +\DeclareSymbolFontAlphabet\mathit{italic} +\DeclareSymbolFontAlphabet{\mit}{letters} +\DeclareSymbolFontAlphabet{\cal}{symbols} +% \end{macrocode} +% +% We define the font commands for selecting the typeface. They are +% probably defined by the document class/style but we want to force +% the old meaning. +% +% And here are the definition as they were in \LaTeX~2.09 but +% translated into NFSS2 language. +% \changes{v2.2h}{1994/05/11}{DPC use \cs{DeclareProtectedCommand}} +% \changes{v2.2i}{1994/05/13}{DPC renamed to \cs{DeclareRobustCommand}} +% \begin{macrocode} +\DeclareRobustCommand\rm{\normalfont\rmfamily\mathgroup\symoperators} +\DeclareRobustCommand\sf{\normalfont\sffamily\mathgroup\symsans} +\DeclareRobustCommand\sl{\normalfont\slshape\mathgroup\symslanted} +\DeclareRobustCommand\bf{\normalfont\bfseries\mathgroup\symbold} +\DeclareRobustCommand\sc{\normalfont\scshape\mathgroup\symsmallcaps} +\DeclareRobustCommand\it{\normalfont\itshape\mathgroup\symitalic} +\DeclareRobustCommand\tt{\normalfont\ttfamily\mathgroup\symtypewriter} +% \end{macrocode} +% We also have to define the \emph{emphasize} font change command +% (i.e.\ |\em|). This command will look whether the current font is +% sloped (i.e.\ has a positive |\fontdimen1|) and will then select +% either |\rm| or |\it|. +% \begin{macrocode} +\DeclareRobustCommand\em{% + \@nomath\em + \ifdim \fontdimen\@ne\font>\z@\rm\else\it\fi} +% \end{macrocode} +% +% \begin{macro}{\@setfontsize} +% Font size changes are handled using the |\@setfontsize| command +% (in new class files) or by the |@setsize| command in old document +% style files. The latter is now defined to call |\@setfontsize| in +% the NFSS2 kernel code. +% Thus to make all size changing commands automatically return to +% the normal font of the document we only have to slightly modify +% the definition of |\@setfontsize| by adding a |\normalfont| +% command to it. +% \changes{v2.2j}{1994/11/06}{Use \cs{@typeset@protect}} +% \begin{macrocode} +\def\@setfontsize#1#2#3{\@nomath#1% + \ifx\protect\@typeset@protect + \let\@currsize#1% + \fi + \fontsize{#2}{#3}\normalfont} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\non@alpherr} +% Since we emulate the old syntax we also have to silently ignore +% uses of a math alphabet outside math mode. Since we now use the +% |\sym...| switches the following setting is not longer necessary. +% \begin{macrocode} +%\let\non@alpherr\@gobble +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\not@math@alphabet} +% But we need to disable the error message that is generated from +% |\bfseries| etc. +% \begin{macrocode} +\let\not@math@alphabet\@gobbletwo +% \end{macrocode} +% \end{macro} +% +% +% We left out the special \LaTeX{} fonts which are not automaticly +% included in the base version of the font selection since these +% fonts contain only a few characters which are also included in +% the AMS fonts so anybody who is using these fonts doesn't need +% them. But for compatiblity reasons we will define these symbols. +% +% \begin{macrocode} +\RequirePackage{latexsym} +%</package|latex209> +% \end{macrocode} +% +% \DeleteShortVerb{\|} +% \Finale +\endinput diff --git a/Master/texmf-dist/source/latex/base/preload.dtx b/Master/texmf-dist/source/latex/base/preload.dtx new file mode 100644 index 00000000000..20415b73b4d --- /dev/null +++ b/Master/texmf-dist/source/latex/base/preload.dtx @@ -0,0 +1,284 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%%% From File: preload.dtx +%<*dtx> + \ProvidesFile{preload.dtx} +%</dtx> +%<*preload> +%<*!tex> +%<+cm> \ProvidesFile{cmpreloa.% +%<+dc> \ProvidesFile{dcpreloa.% +%<+xpt> xpt} +%<+xipt> xip} +%<+xiipt> xii} +%<+min> \ProvidesFile{preload.min} +%<+ori> \ProvidesFile{preload.ori} +%</!tex> +%<+tex> \ProvidesFile{preload.ltx} +% \fi +% \ProvidesFile{preload.dtx} + [1998/08/17 v2.1g LaTeX Kernel (Font Preloading)] +% +% \CheckSum{41} +% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +%\iffalse This is a META comment +% +% File `preload.dtx'. +% Copyright (C) 1989-1994 Frank Mittelbach and Rainer Sch\"opf, +% all rights reserved. +% +% \fi +% +% \GetFileInfo{preload.dtx} +% \title{The \texttt{preload.dtx} file\thanks {This file has version +% number \fileversion, dated \filedate}\\ for use with \LaTeXe} +% \date{\filedate} +% \author{Frank Mittelbach \and Rainer Sch\"opf} +% +% \changes{v2.0b}{1993/03/08}{Added 12pt preloads} +% \changes{v2.1e}{1994/11/07}{(DPC) Updated to use \cs{ProvidesFile}} +% \changes{v2.1g}{1998/08/17}{(RmS) Minor documentation fixes.} +% +% \def\dst{\expandafter{\normalfont\scshape docstrip}} +% +% \setcounter{StandardModuleDepth}{1} +% +% \maketitle +% +% \section{Overview} +% +% This file contains an number of possible settings for preloading +% fonts during installation of NFSS2 (which is used by \LaTeXe). It +% will be used to generate the following files: +% \begin{center} +% \begin{tabular}{ll} +% preload.min & minimal subset of fonts necessary to run NFSS2 \\ +% preload.ori & preload of CM fonts similar to the old +% \texttt{lfonts.tex} \\ +% preload.ltx & The standard selection of preloads \\ +% cmpreloa.xpt & preload of CM fonts for 10pt document size\\ +% cmpreloa.xip & preload of CM fonts for 11pt document size\\ +% cmpreloa.xii & preload of CM fonts for 12pt document size\\ +% dcpreloa.xpt & preload of DC fonts for 10pt size \\ +% dcpreloa.xip & preload of DC fonts for 11pt size \\ +% dcpreloa.xii & preload of DC fonts for 12pt size \\ +% \end{tabular} +% \end{center} +% +% These files are for installations that make use of Computer +% Modern fonts either old encoding (OT1) or Cork encoding (T1). The +% Computer Modern fonts with Cork encoding are known as DC-fonts. +% +% Most important is \texttt{preload.ltx} which is used during +% format generation. You are \emph{not} allowed to change this file. +% +% \section{Customization} +% +% You can customize the preloaded fonts in your \LaTeXe{} system by +% installing a file with the name \texttt{preload.cfg}. If this +% file exists it will be used in place of the system file +% \texttt{preload.ltx}. You can, for example, copy one of the +% files mentioned above (that can be generated from this source) to +% \texttt{preload.cfg}. +% +% Or you can define completely other preloads. In that case start +% from \texttt{preload.min} since that contains the fonts that have +% to be preloaded by *all* \LaTeXe{} sytems. +% +% Avoid using \texttt{preload.ori}, it will load so many fonts that +% on most installations it is nearly impossible to load other font +% families afterwards. This file is only generated to show what +% fonts have been preloaded by \LaTeX~2.09. +% +% If you normally use other fonts than Computer Modern +% \texttt{preload.min} might be best. +% +% \begin{quote} \textbf{Warning:} If you preload fonts with +% encodings other than the normally supported encodings you have to +% declare that encoding in a \texttt{fontdef.cfg} configuration +% file (see the documentation in the file \texttt{fontdef.dtx}). +% Adding an extra encoding to the format might produce non-portable +% documents, thus this should be avoided if possible. +% \end{quote} +% +% +% \StopEventually{} +% +% \section{Module switches for the \dst{} program} +% +% The \dst{} will generate the above file from this source using the +% following module directives: +% \begin{center} +% \begin{tabular}{ll} +% driver & produce a documentation driver file \\ +% preload& produce a preload\ldots file \\[2pt] +% cm & for OT1 encoded Computer Modern \\ +% dc & for T1 encoded Computer Modern \\[2pt] +% min & produce minimal subset \\ +% xpt & produce 10pt preloads \\ +% xipt & produce 11pt preloads \\ +% xiipt & produce 12pt preloads \\ +% ori & produce preloads similar to old \texttt{lfonts.tex}\\ +% tex & produce preload.ltx\\ +% \end{tabular} +% \end{center} +% A typical \dst{} command file would then have entries like: +% \begin{verbatim} +%\generateFile{preload.min}{t}{\from{preload.dtx}{preload,min}} +%\end{verbatim} +% for generating preload files. +% +% \section{A driver for this document} +% +% The next bit of code contains the documentation driver file for +% \TeX{}, i.e., the file that will produce the documentation you +% are currently reading. It will be extracted from this file by the +% \dst{} program. +% \begin{macrocode} +%<*driver> +\documentclass{ltxdoc} +%\OnlyDescription % comment out for implementation details +\begin{document} + \DocInput{preload.dtx} +\end{document} +%</driver> +% \end{macrocode} +% +% +% \section{The code} +% +% We begin by loading the math extension font (cmex10) +% and the \LaTeX{} line and circle fonts. +% It is necessary to do this explicitly since these are +% used by \texttt{lplain.tex} and \texttt{latex.tex}. +% Since the internal font name contains |/| characters +% and digits we construct the name via |\csname|. +% These are the only fonts (!) that must be loaded in this file. +% +% All |\DeclarePreloadSizes| can be removed or others can be added, +% they only influence the processing speed. +% \changes{v2.0c}{1993/08/13}{Added \cs{relax} at end of font names.} +% \begin{macrocode} +\expandafter\font\csname OMX/cmex/m/n/10\endcsname=cmex10\relax +\font\tenln =line10 \font\tenlnw =linew10\relax +\font\tencirc=lcircle10 \font\tencircw=lcirclew10\relax +% \end{macrocode} +% The above fonts should not be touched but anything below this +% point here in the preload suggestions can be modified without any +% problems. +% \begin{macrocode} +%<-tex>%******************************************* +%<-tex>% Start any modification below this point ** +%<-tex>%******************************************* +%<-tex> +%% +%% Computer Modern Roman: +%%----------------------- +%<*ori> +\DeclarePreloadSizes{OT1}{cmr}{m}{n} + {5,6,7,8,9,10,10.95,12,14.4,17.28,20.74,24.88} +\DeclarePreloadSizes{OT1}{cmr}{bx}{n}{9,10,10.95,12,14.4,17.28} +\DeclarePreloadSizes{OT1}{cmr}{m}{sl}{10,10.95,12} +\DeclarePreloadSizes{OT1}{cmr}{m}{it}{7,8,9,10,10.95,12} +%</ori> +%<+xpt&cm> \DeclarePreloadSizes{OT1}{cmr}{m}{n}{5,7,10} +%<+xpt&dc> \DeclarePreloadSizes{T1}{cmr}{m}{n}{5,7,10} +%<+xipt&cm> \DeclarePreloadSizes{OT1}{cmr}{m}{n}{6,8,10.95} +%<+xipt&dc> \DeclarePreloadSizes{T1}{cmr}{m}{n}{6,8,10.95} +%<+xiipt&cm> \DeclarePreloadSizes{OT1}{cmr}{m}{n}{6,8,12} +%<+xiipt&dc> \DeclarePreloadSizes{T1}{cmr}{m}{n}{6,8,12} +%% +%% Computer Modern Sans: +%%---------------------- +%<+ori> \DeclarePreloadSizes{OT1}{cmss}{m}{n}{10,10.95,12} +%% +%% Computer Modern Typewriter: +%%---------------------------- +%<+ori> \DeclarePreloadSizes{OT1}{cmtt}{m}{n}{9,10,10.95,12} +%% +%% Computer Modern Math: +%%---------------------- +%<*ori> +\DeclarePreloadSizes{OML}{cmm}{m}{it} + {5,6,7,8,9,10,10.95,12,14.4,17.28,20.74} +\DeclarePreloadSizes{OMS}{cmsy}{m}{n} + {5,6,7,8,9,10,10.95,12,14.4,17.28,20.74} +%</ori> +% \end{macrocode} +% +% The math fonts are the same for both DC and CM fonts. So far +% there isn't an agreed on standard. +% \changes{v2.4e}{1995/12/04} +% {Ulrik Vieth. added 12pt OMS and OML preloads /1989} +% \begin{macrocode} +%<*xpt> +\DeclarePreloadSizes{OML}{cmm}{m}{it}{5,7,10} +\DeclarePreloadSizes{OMS}{cmsy}{m}{n}{5,7,10} +%</xpt> +%<*xipt> +\DeclarePreloadSizes{OML}{cmm}{m}{it}{6,8,10.95} +\DeclarePreloadSizes{OMS}{cmsy}{m}{n}{6,8,10.95} +%</xipt> +%<*xiipt> +\DeclarePreloadSizes{OML}{cmm}{m}{it}{6,8,12} +\DeclarePreloadSizes{OMS}{cmsy}{m}{n}{6,8,12} +%</xiipt> +%% +%% LaTeX symbol fonts: +%%-------------------- +%<*ori> +\DeclarePreloadSizes{U}{lasy}{m}{n} + {5,6,7,8,9,10,10.95,12,14.4,17.28,20.74} +%</ori> +%</preload> +% \end{macrocode} +% +% +% +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/base/proc.dtx b/Master/texmf-dist/source/latex/base/proc.dtx new file mode 100644 index 00000000000..9ecc070aa7b --- /dev/null +++ b/Master/texmf-dist/source/latex/base/proc.dtx @@ -0,0 +1,456 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \CheckSum{173} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \iffalse +% Copyright (C) 1991,1992 by Leslie Lamport \and +% Copyright (C) 1994,1995 by the \LaTeX3 project \and Johannes Braams +% +% \changes{v1.1}{1994/01/25}{Made `proc' a document class and provide +% a .sty file for compatibility mode} +% \changes{v1.2}{1994/01/26}{Removed the setting of a number of +% variables that became superfluous by passing the twocolumn option +% to the article class} +% \changes{v1.3}{1994/03/01}{Moved driver further up; added overview +% of docstrip modules; added \cs{CheckSum}, \cs{StopEventually} and +% \cs{Finale}} +% \changes{v1.3e}{1994/05/22}{Use new warning and error commands} +% \changes{v1.3f}{1994/05/26}{Inserted missing 'v's in \cs{changes} +% entries} +% \changes{v1.3f}{1994/05/26}{Moved identification and driver to the +% front of the file; these sections now no longer print} +% +% \subsection{Identification} +% +% This document class can only be used with \LaTeXe, so it is made +% sure that an appropiate message is displayed when another \TeX{} +% format is used. +% \changes{v1.3l}{1995/11/30}{Added date of \LaTeX\ format to argument +% of \cs{NeedsTeXFormat}} +% \begin{macrocode} +%<+class|style>\NeedsTeXFormat{LaTeX2e}[1995/12/01] +% \end{macrocode} +% +% Announce the document class and its version. +% \changes{v1.3c}{1994/04/15}{Added missing / guard} +% \changes{v1.3d}{1994/05/01}{Removed the use of variables such as +% \cs{fileversion}} +% \changes{v1.3b}{1994/03/16}{Removed use of \cs{wlog}, no longer +% needed} +% \changes{v1.3f}{1994/05/26}{Removed \cs{typeout} from .sty file; +% changed description} +% \changes{v1.3h}{1994/05/26}{The second argument to \cs{ProvidesFile} +% wasn't closed in the driver and the style file} +% +% \begin{macrocode} +%<*driver> +\ProvidesFile{proc.drv} +%</driver> +%<+class>\ProvidesClass{proc} +%<+style>\ProvidesFile{proc.sty} + [1995/11/30 v1.3l +%<+class> Standard LaTeX document class] +%<+style> LaTeX 2.09 compatibility style option `proc'] +% \end{macrocode} +% +% \subsection{The documentation driver file} +% +% This bit of code contains the documentation driver file for +% \TeX{}, i.e., the file that will produce the documentation you +% are currently reading. It can be extracted from this file by the +% {\sc docstrip} program. +% \begin{macrocode} +%<*driver> +] +\documentclass{ltxdoc} +\GetFileInfo{proc.drv} +\begin{document} +\newcommand\Lopt[1]{\textsf {#1}} +\DocInput{proc.dtx} +\end{document} +%</driver> +% \end{macrocode} +% \fi +% +% \title{Producing proceedings articles with \LaTeXe\thanks +% {File version \fileversion, dated \filedate}} +% +% \author{% +% Johannes Braams\and +% David Carlisle\and +% Alan Jeffrey\and +% Leslie Lamport\and +% Frank Mittelbach\and +% Chris Rowley\and +% Rainer Sch\"opf} +% +% \date{\filedate} +% +% \maketitle +% +% \section{Description} +% +% This \LaTeXe\ document class is designed to produce camera-ready +% conference proceedings. It is based upon the document class +% \texttt{article}, but modifies some of its layout decisions. +% It also adds one command. +% +% For compatibility with \LaTeX2.09 a \texttt{.sty} version is +% provided because \texttt{proc} used to be a style file. The +% \texttt{.sty} file can \emph{not} be used as a package however. +% +% \DescribeMacro\copyrightspace +% The |\copyrightspace| command is used to produce a blank space in +% the first column where a copyright notice belongs. Note that it +% should appear after any |\footnote| commands that produce +% footnotes for the first column. +% +% \StopEventually{} +% +% \section{The {\sc docstrip} modules} +% +% The following modules are used in the implementation to direct +% {\sc docstrip} in generating the external files: +% \begin{center} +% \begin{tabular}{ll} +% class & produce the proc document class\\ +% sty & produce proc.sty for compatibility mode\\ +% driver & produce a documentation driver file \\ +% \end{tabular} +% \end{center} +% +% \section{Implementation} +% +% In this case a check is needed to see wether \LaTeXe\ runs in +% compatibility mode. +% \changes{v1.3i}{1994/05/27}{Added missing docstrip guard} +% \begin{macrocode} +%<*style> +\if@compatibility +% \end{macrocode} +% In this case processing silently continues, but in the |\else| +% case a warning is issued and reading of this file stops. +% \begin{macrocode} +\else + \ClassWarningNoLine{proc}{^^J\@spaces% + You requested the use of `proc' as a package^^J\@spaces% + but it has been turned into a document class.^^J\@spaces% + Please change your file to use `proc' as a class.^^J} + \expandafter\endinput +\fi +%</style> +% \end{macrocode} +% +% Paper sizes smaller than A4 are not supported. +% \begin{macrocode} +%<*class> +\DeclareOption{a5paper} + {\ClassError{proc}{Option `a5paper' not supported}{}} +\DeclareOption{b5paper} + {\ClassError{proc}{Option `b5paper' not supported}{}} +% \end{macrocode} +% +% Also the \Lopt{onecolumn} option is disabled in this document +% class. +% \begin{macrocode} +\DeclareOption{onecolumn}% + {\ClassError{proc}{Option `onecolumn' not supported}{}} +% \end{macrocode} +% +% Proceedings articles never have separate titlepages, therefore +% this option is disabled. +% \begin{macrocode} +\DeclareOption{titlepage}% + {\ClassError{proc}{Option `titlepage' not supported}{}} +% \end{macrocode} +% +% Always print in two column mode. +% \begin{macrocode} +\PassOptionsToClass{twocolumn}{article} +% \end{macrocode} +% +% Any other options are passed on to the article class on which +% this document class is based. +% \begin{macrocode} +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} +% \end{macrocode} +% +% Now we can process the options +% \begin{macrocode} +\ProcessOptions +% \end{macrocode} +% +% and load the article document class. +% \begin{macrocode} +\LoadClass{article} +%</class> +% \end{macrocode} +% +% \section{Document Layout} +% +% Proceedings articles have a different layout than normal +% articles. Therefore some of the layout parameters are given +% different values here. +% +% \subsection{Page Layout} +% +% \subsubsection{Vertical spacing} +% +% \begin{macro}{\footskip} +% The distance from the baseline of the box which contains the +% running footer to the baseline of last line of text is controlled +% by the |\footskip|. +% \begin{macrocode} +%<*class|style> +\setlength\footskip{75\p@} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{The dimension of text} +% +% \begin{macro}{\textwidth} +% When \LaTeXe\ runs in compatibility mode it has to be made sure +% that the dimensions of the printed area are not different from +% what the user was used to see. +% +% \begin{macrocode} +\if@compatibility + \setlength\textwidth{6.75in} +\else + \setlength\textwidth{\paperwidth} + \addtolength\textwidth{-126\p@} + \@settopoint\textwidth +\fi +% \end{macrocode} +% +% Here the width of the text a little is modified to be a whole +% number of points. +% \begin{macrocode} +\if@compatibility +\else + \@settopoint\textwidth +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\textheight} +% Now that we have computed the width of the text, we have to take +% care of the height. The |\textheight| is the height of text +% (including footnotes and figures, excluding running head and +% foot). +% +% \begin{macrocode} +\if@compatibility + \setlength\textheight{9in} +\else + \ifcase\@ptsize + \setlength\textheight{53\baselineskip} + \or + \setlength\textheight{47\baselineskip} + \or + \setlength\textheight{44\baselineskip} + \fi +\fi +% \end{macrocode} +% +% The first line on the page has a height of |\topskip|. +% \begin{macrocode} +\advance\textheight by \topskip +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Margins} +% +% \begin{macro}{\oddsidemargin} +% \begin{macro}{\evensidemargin} +% The width of the text is quite large, therefore the margins +% have a negative width. +% \begin{macrocode} +\setlength\oddsidemargin{-10\p@} +\setlength\evensidemargin{-10\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\marginparwidth} +% Because we have such a large |\textwidth| there is no real room +% for notes in the margins. +% \begin{macrocode} +\setlength\marginparwidth {\z@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\topmargin} +% The |\topmargin| is the distance between the top of `the +% printable area' --which is 1 inch below the top of the paper-- +% and the top of the box which contains the running head. +% \begin{macrocode} +\setlength\topmargin{-47\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\columnsep} +% Proceedings articles are always set in |\twocolumn| mode, +% therefore the distance between the two columns (|\columnsep|)is +% set to a non zero value. +% \begin{macrocode} +\setlength\columnsep{.375in} +% \end{macrocode} +% \end{macro} +% +% \subsection{The page style} +% +% The user can use |\markright| (or |\markboth|) to put an +% identification in the lower left side of the page. The page +% number is printed in the lower right side of the page. +% +% This works as long as he doesn't use either |\pagestyle| or +% |\thispagestyle| comands. +% \changes{v1.3f}{1994/05/26}{changed \cs{rm} to +% \cs{normalfont}\cs{rmfamily}} +% \changes{v1.3j}{1995/05/26}{Removed \cs{rmfamily} (PR 1578)} +% \begin{macrocode} +\let\@oddhead\@empty +\let\@evenhead\@empty +\def\@oddfoot{\normalfont\rightmark \hfil + \pagename{} \thepage} +\def\@evenfoot{\@oddfoot} +% \end{macrocode} +% +% +% \section{Document Markup} +% +% \subsection{The title} +% +% \begin{macro}{\maketitle} +% \changes{v1.3k}{1995/07/18}{Modify footnote handling (PR 1735)} +% The defintion of |\maketitle| here is basically the same as the +% one in the document class \texttt{article}, but the pagestyle is +% \emph{not} set to \texttt{plain}. +% +% \begin{macrocode} +\def\maketitle{\par + \begingroup + \renewcommand\thefootnote{\fnsymbol{footnote}}% + \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}% + \long\def\@makefntext##1{\parindent 1em\noindent + \hb@xt@1.8em{% + \hss\@textsuperscript{\normalfont\@thefnmark}}##1}% +% \end{macrocode} +% This document class always uses two column mode but the title is +% set to the full width of the text. +% \begin{macrocode} + \twocolumn[\@maketitle]% + \@thanks + \endgroup + \setcounter{footnote}{0}% + \let\maketitle\relax + \let\@maketitle\relax + \gdef\@thanks{}\gdef\@author{}\gdef\@title{}\let\thanks\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@maketitle} +% This macro takes care of formatting the title information. +% +% The information is set inside |\vbox| with a width of +% |\textwidth| and a hight of 2.25in. The text is vertically and +% hirizontally centered. +% \begin{macrocode} +\def\@maketitle{% + \vbox to 2.25in{% + \hsize\textwidth + \linewidth\hsize + \vfil + \centering + {\LARGE \@title \par} + \vskip 2em + {\large \begin{tabular}[t]{c}\@author \end{tabular}\par} + \vfil}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\copyrightspace} +% The |\copyrightspace| command is used to produce a blank space in +% the first column where a copyright notice belongs. It works by +% producing a blank footnote of the appropriate size. +% +% \begin{macrocode} +\def\copyrightspace{% + \footnotetext[0]{\mbox{}\vrule \@height 97\p@ \@width \z@}} +% \end{macrocode} +% \end{macro} +% +% \subsection{Modifying environments} +% +% \subsubsection{Abstract} +% +% \begin{macro}{\abstract} +% For this document class the definition of the abstract +% environment is quit simple. +% +% \begin{macrocode} +\renewenvironment{abstract}% + {\section*{\abstractname}} + {\par} +% \end{macrocode} +% \end{macro} +% +% \section{Initialization} +% +% \subsection{Words} +% +% \begin{macro}{\pagename} +% This document class is for documents prepared in the English +% language. To prepare a version for another language, one English +% word must be replaced. It is defined below in a command name. +% \begin{macrocode} +\newcommand\pagename{Page} +%</class|style> +% \end{macrocode} +% \end{macro} +% +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/base/proc.ins b/Master/texmf-dist/source/latex/base/proc.ins new file mode 100644 index 00000000000..38d5985202c --- /dev/null +++ b/Master/texmf-dist/source/latex/base/proc.ins @@ -0,0 +1,97 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\generate{ + \file{proc.cls}{\from{proc.dtx}{class}} + \file{proc.sty}{\from{proc.dtx}{style}} + } + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space proc.cls} +\Msg{* \space\space proc.sty} +\Msg{*} +\Msg{* To produce the documentation run the files ending with} +\Msg{* `.dtx' through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} +} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/slides.dtx b/Master/texmf-dist/source/latex/base/slides.dtx new file mode 100644 index 00000000000..2582a414d83 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/slides.dtx @@ -0,0 +1,2724 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% \CheckSum{2704} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +% \iffalse +% Copyright (C) 1994-97 LaTeX3 project, Frank Mittelbach +% and Rainer Sch\"opf, all rights reserved. +% +% \begin{macrocode} +%<+class>\NeedsTeXFormat{LaTeX2e}[1997/06/01] +% \end{macrocode} +% +% Announce the Class name and its version: +% \changes{v2.3b}{1994/05/01}{Removed the use of \cs{fileversion} +% c.s.} +% \changes{v2.3b}{1994/05/01}{Added \cs{ProvidesFile} to slides.def.} +% \changes{v2.3o}{1995/05/17}{Replaced all \cs{hbox to} with +% \cs{hb@xt@}.} +% \changes{v2.3o}{1995/05/17}{Cleaned up the \cs{changes} entries.} +% \changes{v2.3p}{1995/05/23}{Corrected some brace mismatches.} +% \changes{v2.3q}{1995/09/20}{Replaced \cs{@tempa} by \cs{reserved@a}.} +% \changes{v2.3r}{1995/09/27}{Globally replaced scale factor 19.91 by +% 19.907 in \cs{DeclareFontShape}, as this gives better +% rounded font sizes at 600dpi (suggested by Denis Roegel).} +% \begin{macrocode} +%<+class>\ProvidesClass{slides} +%<+cmd>\ProvidesFile{slides.def} +%<*driver> + \ProvidesFile{slides.drv} +%</driver> + [1997/08/15 v2.3z +%<+class> Standard LaTeX document class] +%<+cmd> SLiTeX definitions] +% \end{macrocode} +% +% \section{A driver for this document} +% +% \changes{v2.3f}{1994/05/26}{Moved the driver to the front of the +% file; it doesn't print any longer} +% +% The next bit of code contains the documentation driver file for +% \TeX{}, i.e., the file that will produce the documentation you are +% currently reading. It can be extracted from this file by the +% \dst{} program. +% \begin{macrocode} +%<*driver> +] +\documentclass{ltxdoc} +% \end{macrocode} +% The following command retrieves the date and version information +% from the file. +% \begin{macrocode} +\GetFileInfo{slides.drv} +% \end{macrocode} +% Some commonly used abbreviations: +% \changes{v2.3h}{1994/06/01}{Added definition of \cs{SLiTeX}.} +% \begin{macrocode} +\DeclareRobustCommand{\SLiTeX}{{% + \normalfont S\kern -.06em + {\scshape l\kern -.035emi}\kern -.06em + \TeX +}} +\newcommand*{\Lopt}[1]{\textsf {#1}} +\newcommand*{\file}[1]{\texttt {#1}} +\newcommand*{\Lcount}[1]{\textsl {\small#1}} +\newcommand*{\pstyle}[1]{\textsl {#1}} +\newcommand*{\dst}{{\normalfont\scshape docstrip}} +% +% \end{macrocode} +% Now start the document and input this file. +% \changes{v2.3d}{1994/05/12}{Added a missing \cs{begin\{macrocode\}}} +% \begin{macrocode} +\begin{document} + \DocInput{slides.dtx} +\end{document} +%</driver> +% \end{macrocode} +%\fi +% +% +% \changes{v2.1b}{1993/12/13}{Removed \cs{CodelineIndex} from the +% driver code.} +% \changes{v2.1e}{1993/12/16}{Removed again different definitions for +% font commands font commands in non-compatibility mode.} +% +% \changes{v2.2}{1993/12/18}{Changes to make it work with +% compatibility mode.} +% \changes{v2.2a}{1993/12/19}{Removed float parms} +% \changes{v2.2d}{1994/01/31}{Removed \cs{@normalsize definition}} +% \changes{v2.2g}{1994/03/01}{Removed option makeidx.} +% \changes{v2.2g}{1994/03/01}{Moved driver up front.} +% \changes{v2.2g}{1994/03/01}{Renamed files \file{slides.ltx} and +% \file{sfontdef.ltx} to \file{slides.def} and \file{sfonts.def}.} +% \changes{v2.2l}{1994/03/16}{Removed \cs{typeouts}} +% \changes{v2.3}{1994/03/16}{Removed root/slide-file structure except +% for compatibility mode. (LL)} +% \changes{v2.3}{1994/03/16}{Added clock option (LL)} +% \changes{v2.3}{1994/03/16}{Modified slide, overlay, note +% environments. (LL)} +% \changes{v2.3}{1994/03/16}{Added titlepage option and +% \cs{maketitle}. (LL)} +% \changes{v2.3c}{1994/05/06}{Changed documentation to use +% `environment' instead of `macro' environment for environments} +% \changes{v2.3f}{1994/05/26}{Wrapped two long lines} +% \changes{v2.3l}{1994/12/16}{Use \cs{newcommand*} to define commands +% with an argument} +% \changes{v2.3n}{1995/04/02}{a slight documentation fix (PR 1517)} +% +% \title{Producing slides with \LaTeXe{}} +% \author{Frank Mittelbach} +% \date{\filedate} +% +% \maketitle +% +% \section{Introduction} +% +% With \LaTeXe{} it is now no longer necessary to maintain a special +% format for producing overhead slides. Instead the standard format +% may be used and internally only different font definition files come +% into play. +% +% \section{Usage} +% +% For producing slides you have to use |slides| as the +% document class. This class is very similar to the |slides| style +% that came with \SliTeX{}, in fact it is basically a copy changed to +% work under \LaTeXe{}.\footnote{Therefore you should compare the +% new class with old \SliTeX{} styles +% in case you have local slide classes to see what you have to change +% in order to use them with \LaTeXe{}.} Thus you have to say something +% like +% \begin{verbatim} +% \documentclass[...]{slides} +% \end{verbatim} +% and process this with \LaTeXe. +% +% \section{Fonts} +% +% Note, that that with NFSS you can easily produce slides with special +% fonts just by calling an appropriate style file (like |times|) in a +% |\usepackage| command. This works, for example, with all +% fonts that are defined to be scaleable (e.g., PostScript fonts) since +% they can be used at any size by NFSS. +% +% However, packages like |pandora| won't work because the standard +% |.fd| files shipped with NFSS only contain small sizes. You can, of +% course, produce additional sizes and change the |.fd| files +% accordingly so that they would be useable for slides as well. +% +% \section{Invisible text and color separation} +% +% In the original \SliTeX{} it was possible to produce invisible text +% using the |\invisible| command, so that one was able to put several +% slides on top of each other (with each slides showing additional +% details, etc.). It was also possible to produce `color' slides. This +% was done by producing individual slides one for each color and +% placing them on top of each other. +% +% The availability of color printers and the |color| package make +% color separation obsolete, so it has been removed. Although the +% |color| has also made |\invisible| obsolete, the command is +% retained in the \LaTeXe{} implementation, but there +% are a few restrictions. Invisible fonts are implemented as special +% shapes where the shape names are build by prefixing the normal shape +% name with an uppercase |I|. For example, the `normal invisible +% shape' would be |In|. When \LaTeX{} is requested to typeset +% invisible it will thus change the current shape attribute in this +% manner. To make this work it is necessary that the resulting font +% shape group is defined. If not, the normal font substitution +% mechanism of \LaTeXe{} will change the attribute until it finds a +% usable font shape group with the result that the text may become +% visible. +% +% As long as you use the standard fonts for slides this is not a +% problem because all the visible font shape groups have invisible +% counterparts. However, if you decide on using special fonts, e.g., +% PostScript fonts, your |\DeclareFontShape| settings may not contain +% invisible font shape groups and thus you may be unable to use these +% features without adding additional |\DeclareFontShape| commands to +% your |.fd| files or the preamble of your document. +% +% \StopEventually{} +% +% +% \section{The Implementation} +% +% \begin{quote} +% \textbf{Warning:} The implementation is still very experimental and +% may change internally very much. It currently basically consists of a +% slightly modified copy of |slides.sty| (which then forms +% |slides.cls|) followed by a slightly changed copy of |slitex.tex|. +% Documentation is practically +% non-existing. Everybody is invited to help changing this! +% \end{quote} +% +% The code is divided into two parts, we first implement the class +% related functions and declarations and then define lowlevel stuff +% that is necessary within every class. By placing such commands into +% a separate file it will be possible to share it with other slide +% classes. +% +% \subsection{The class code} +% +% At this point we input the redefinitions that are necessary for +% \SLiTeX. +% \changes{v2.3g}{1994/05/26}{Use \cs{input} instead of \cs{@@input}} +% \begin{macrocode} +%<*class> +\input{slides.def} +% \end{macrocode} +% +% +% Now we are ready for setting up the font tables. As usual, we first +% look for a local configuration file |sfonts.cfg|. If there isn't +% one, we fall back to the default one (|sfonts.def|). +% \changes{v2.2i}{1994/03/08}{Corrected first argument of +% \cs{IfFileExists}: \file{sfonts.def} to \file{sfonts.cfg}.} +% \changes{v2.3g}{1994/05/26}{Use \cs{InputIfFileExists} instead of +% \cs{IfFileExists} and \cs{input} instead of \cs{@@input}} +% \begin{macrocode} +\InputIfFileExists{sfonts.cfg} + {\typeout{**************************************^^J% + *^^J% + * Local config file sfonts.cfg used^^J% + *^^J% + **************************************}}% + {\input{sfonts.def}} +% \end{macrocode} +% +% \section{Declaration of Options} +% +% We declare a few options as illegal. +% +% +% \subsection{Setting Paper Sizes} +% +% The variables |\paperwidth| and |\paperheight| should reflect the +% physical paper size after trimming. For desk printer output this +% is usually the real paper size since there is no post-processing. +% Classes for real book production will probably add other paper +% sizes and additionally the production of crop marks for trimming. +% \changes{v2.1d}{1993/12/14}{Corrected typo, A4 is not 279 mm high} +% \begin{macrocode} +\DeclareOption{a4paper} + {\setlength\paperheight {297mm}% + \setlength\paperwidth {210mm}} +\DeclareOption{a5paper} + {\setlength\paperheight {210mm}% + \setlength\paperwidth {148mm}} +\DeclareOption{b5paper} + {\setlength\paperheight {250mm}% + \setlength\paperwidth {176mm}} +\DeclareOption{letterpaper} + {\setlength\paperheight {11in}% + \setlength\paperwidth {8.5in}} +\DeclareOption{legalpaper} + {\setlength\paperheight {14in}% + \setlength\paperwidth {8.5in}} +\DeclareOption{executivepaper} + {\setlength\paperheight {10.5in}% + \setlength\paperwidth {7.25in}} +% \end{macrocode} +% +% The option \Lopt{landscape} switches the values of |\paperheight| +% and |\paperwidth|, assuming the dimensions wer given for portrait +% paper. +% \begin{macrocode} +\DeclareOption{landscape} + {\setlength\@tempdima {\paperheight}% + \setlength\paperheight {\paperwidth}% + \setlength\paperwidth {\@tempdima}} +% \end{macrocode} +% +% \subsection{The clock option} + +% The option \Lopt{clock} prints the time at the bottom of each note. +% We also define here the commands and counters used to keep track of +% time. +% \begin{macrocode} +\newif\if@clock \@clockfalse +\DeclareOption{clock}{\@clocktrue + \AtEndDocument{\typeout{\@arabic\c@minutes\space minutes}} +}% +\newcounter{minutes}% +\newcounter{seconds}% +\newcommand*{\settime}[1]{\setcounter{seconds}{0}\addtime{#1}}% +\newcommand*{\addtime}[1]{\addtocounter{seconds}{#1}% + \setcounter{minutes}{\value{seconds}}% + \global \divide \value{minutes} by 60\relax} + +% \end{macrocode} +% +% \subsection{Two-side or one-side printing} +% +% Two-sided printing is not allowed, so don't declare an option. +% But it is necessary to initialize the switch. +% \changes{v2.2h}{1994/03/07}{Removed declared option twoside.} +% \begin{macrocode} +\@twosidefalse +% \end{macrocode} +% +% +% \subsection{Draft option} +% +% If the user requests \Lopt{draft} we show any overfull boxes. +% We could probably add some more interesting stuff to this option. +% \begin{macrocode} +\DeclareOption{draft}{\setlength\overfullrule{5pt}} +\DeclareOption{final}{\setlength\overfullrule{0pt}} +% \end{macrocode} +% +% \subsection{Titlepage option} +% The default is for a |\maketitle| command to make a new page. +% \begin{macrocode} +\newif\if@titlepage +\@titlepagetrue +\DeclareOption{titlepage}{\@titlepagetrue} +\DeclareOption{notitlepage}{\@titlepagefalse} +% \end{macrocode} +% +% \subsection{Twocolumn printing} +% +% Two-column printing is again forbidden. +% \changes{v2.3e}{1994/05/22}{twocolumn produces only a warning} +% \begin{macrocode} +\DeclareOption{onecolumn}{} +\DeclareOption{twocolumn}{% + \ClassWarning{slides}{No 'twocolumn' layout for slides}} +% \end{macrocode} +% +% \subsection{Equation numbering on the left} +% +% The option \Lopt{leqno} can be used to get the equation numbers +% on the left side of the equation. +% \changes{v2.2g}{1994/03/01}{Option leqno loads \file{leqno.clo} +% file.} +% \begin{macrocode} +\DeclareOption{leqno}{\input{leqno.clo}} +% \end{macrocode} +% +% \subsection{Flush left displays} +% +% The option \Lopt{fleqn} redefines the displayed math environmens +% in such a way that they come out flush left, with an indentation +% of |\mathindent| from the prevailing left margin. +% \changes{v2.2g}{1994/03/01}{Added fleqn option.} +% \begin{macrocode} +\DeclareOption{fleqn}{\input{fleqn.clo}} +% \end{macrocode} +% +% +% \section{Executing Options} +% +% Here we execute the default options to initialize certain +% variables. +% \begin{macrocode} +\ExecuteOptions{letterpaper,final} +% \end{macrocode} +% +% The |\ProcessOptions| command causes the execution of the code +% for every option \Lopt{FOO} +% which is declared and for which the user typed +% the \Lopt{FOO} option in his +% |\documentclass| command. For every option \Lopt{BAR} he typed, +% which is not declared, the option is assumed to be a global option. +% All options will be passed as document options to any +% |\usepackage| command in the document preamble. +% \begin{macrocode} +\ProcessOptions +% \end{macrocode} +% +% \section{Loading Packages} +% +% The standard class files do not load additional packages. +% +% +% \section{Document Layout} +% +% +% In this section we are finally dealing with the nasty typographical +% details. +% +% +% +% \subsection{Fonts} +% +% \begin{macrocode} +% FMi: +\def\rmdefault{lcmss} % no roman +\def\sfdefault{lcmss} +\def\ttdefault{lcmtt} +\def\itdefault{sl} +\def\sldefault{sl} +\def\bfdefault{bx} +% \end{macrocode} +% +% +% Since the number of parameters to set are very large it seems +% reasonable to set up one command |\@setfontsize@parms| which will +% do the work for us. +% +% \LaTeX\ offers the user commands to change the size of the font, +% relative to the `main' size. Each relative size changing command +% |\size| executes the command +% |\@setfontsize||\size|\meta{font-size}\meta{baselineskip} where: +% +% \begin{description} +% \item[\meta{font-size}] The absolute size of the font to use from +% now on. +% +% \item[\meta{baselineskip}] The normal value of |\baselineskip| +% for the size of the font selected. (The actual value will be +% |\baselinestretch| * \meta{baselineskip}.) +% \end{description} +% +% A number of commands, defined in the \LaTeX{} kernel, shorten the +% following definitions and are used throughout. They are: +% \begin{center} +% \begin{tabular}{ll@{\qquad}ll@{\qquad}ll} +% \verb=\@vpt= & 5 & \verb=\@vipt= & 6 & \verb=\@viipt= & 7 \\ +% \verb=\@viiipt= & 8 & \verb=\@ixpt= & 9 & \verb=\@xpt= & 10 \\ +% \verb=\@xipt= & 10.95 & \verb=\@xiipt= & 12 & \verb=\@xivpt= & 14.4\\ +% ... +% \end{tabular} +% \end{center} +% +% \begin{macro}{\ifourteenpt} +% \begin{macro}{\iseventeenpt} +% \begin{macro}{\itwentypt} +% \begin{macro}{\itwentyfourpt} +% \begin{macro}{\itwentyninept} +% \begin{macro}{\ithirtyfourpt} +% \begin{macro}{\ifortyonept} +% For \SLiTeX{}, however, these are not sufficient, and we therefore +% need to add a few extra, larger, sizes. +% \begin{macrocode} +\def\ifourteenpt{13.82} +\def\iseventeenpt{16.59} +\def\itwentypt{19.907} +\def\itwentyfourpt{23.89} +\def\itwentyninept{28.66} +\def\ithirtyfourpt{34.4} +\def\ifortyonept{41.28} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@setfontsize@parms} +% This routine is used in \SliTeX{} to interface font size setting +% it is modeled after the settings I found in \texttt{slides.sty}, so +% it probably needs an update. But any class is free to redefine +% it, as it is used only as an abbreviation. +% It's syntax is: +% \begin{quote} +% |\@setfontsize@parms| \\ +% | |\meta{lineskip} \\ +% | |\meta{parskip} \\ +% | |\meta{abovedisplayskip} \\ +% | |\meta{belowdisplayskip} \\ +% | |\meta{abovedisplayshortskip} \\ +% | |\meta{belowdisplayshortskip} \\ +% | |\meta{strut ht} \meta{strut dp} (without pt) +% \end{quote} +% +% For NFSS1 a similar style existed which did run both with a +% \SliTeX{} with old font selection or with NFSS1. But when no +% separate format is made this doesn't make much sense. +% So the following note is history and would only be true if all NFSS +% stuff would be removed from the file and placed into the format. +% \begin{quote}\small +% Note: To interface the old \texttt{sfonts.tex} the \meta{size} must be +% hidden in commands denoting the size by its name prefixed with +% `i', i.e.\ 20pt size is called |\itwentypt| at this point. The +% NFSS interface will define those sizes to expand to the internal +% size, e.g.\ 20 but for the old sfonts the command name, e.g. +% |\itwentypt|, will be used to construct the name |\twentypt| etc. +% +% This is a crude interface to the old \texttt{sfonts.tex}. It will +% be a bit slower than the old one because it must define |\@tiny| +% etc.\ every time a size changes. +% \end{quote} +% +% If classes are set up that are only for use with NFSS then the second +% argument may be an ordinary font size! +% \changes{v2.0d}{1993/11/12}{Replaced all pt by \cs{p@}, corrected +% definition for \cs{tiny}.} +% +% \begin{macrocode} +\def\@setfontsize@parms#1#2#3#4#5#6#7#8{% + \lineskip #1\relax% + \parskip #2\relax + \abovedisplayskip #3\relax + \belowdisplayskip #4\relax + \abovedisplayshortskip #5\relax + \belowdisplayshortskip #6\relax +% +% \end{macrocode} +% I don't see a reason why the |\strutbox| has a dim different from +% |\baselineskip| but we will leave it for the moment +% \begin{macrocode} + \setbox\strutbox=\hbox{\vrule \@height#7\p@\@depth#8\p@\@width\z@}% + \baselineskip\baselinestretch\baselineskip + \normalbaselineskip\baselineskip} +% \end{macrocode} +% \end{macro} +% +% Setting size relations for math scripts: +% \changes{v2.2e}{1994/02/07}{Corrected entry for size 23.89.} +% \begin{macrocode} +\DeclareMathSizes{13.82}{13.82}{10}{7} +\DeclareMathSizes{16.59}{16.59}{12}{7} +\DeclareMathSizes{19.907}{19.907}{16.59}{13.82} +\DeclareMathSizes{23.89}{23.89}{19.907}{16.59} +\DeclareMathSizes{28.66}{28.66}{23.89}{19.907} +\DeclareMathSizes{34.4}{34.4}{28.66}{23.89} +\DeclareMathSizes{41.28}{41.28}{34.4}{28.66} +% \end{macrocode} +% +% \begin{macro}{\normalsize} +% \begin{macrocode} +\def\normalsize{% + \@setfontsize\normalsize\itwentypt{28\p@ plus3\p@ minus4\p@}% +% {20}{30\p@ plus3\p@ minus3\p@}% made a bit shorter + \@setfontsize@parms + {2pt}% + {30\p@ plus18\p@ minus9\p@}% + {15\p@ plus3\p@ minus3\p@}% + {10\p@ plus3\p@ minus3\p@}% + {10\p@ plus3\p@} + \abovedisplayshortskip + {17}{7}} +% \end{macrocode} +% \end{macro} +% +% +% We initially choose the normalsize font. +% \begin{macrocode} +\normalsize +% \end{macrocode} +% +% \begin{macro}{\small} +% \begin{macrocode} +\def\small{\@setfontsize\small\iseventeenpt{19\p@ plus3\p@ minus\p@}% + \@setfontsize@parms + {2\p@}% + {15\p@ plus15\p@ minus7\p@}% + {12\p@ plus3\p@ minus3\p@}% + {9\p@ plus3\p@ minus3\p@}% + {6\p@ plus3\p@}% + \abovedisplayshortskip + {13.5}{5.6}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\footnotesize} +% \begin{macro}{\scriptsize} +% \begin{macrocode} +\let\footnotesize=\small +\let\scriptsize=\small +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\tiny} +% \begin{macrocode} +\def\tiny{\@setfontsize\tiny\ifourteenpt{16\p@ plus2\p@ minus\p@}% + \@setfontsize@parms + {2pt}% + {14\p@ plus3\p@ minus10\p@}% + {11\p@ plus3\p@ minus10\p@}% + \abovedisplayskip + {8\p@ plus3\p@ minus5\p@}% + {\z@ plus3\p@}% + {10}{4}} +% \end{macrocode} +% \end{macro} +% +% Actually copying the code above would be better because this would +% correct the error message. Maybe one should remove the first +% argument of |\set@font@size@parms|. +% +% \begin{macro}{\large} +% \begin{macro}{\Large} +% \begin{macro}{\LARGE} +% \begin{macro}{\huge} +% \begin{macro}{\Huge} +% \begin{macrocode} +\def\large{\@setfontsize\large\itwentyfourpt{42\p@ plus8\p@ minus5\p@}% + \@setfontsize@parms + {2\p@}% + {40\p@ plus20\p@ minus4\p@}% + {20\p@ plus8\p@ minus3\p@}% + \abovedisplayskip + {10\p@ plus5\p@}% + \abovedisplayshortskip + {20}{8.5}} + +\def\Large{\@setfontsize\Large\itwentyninept{48\p@ plus10\p@ minus6\p@}% + \@setfontsize@parms + {2\p@}% + {48\p@ plus30\p@ minus6\p@}% + {24\p@ plus10\p@ minus6\p@}% + \abovedisplayskip + {12\p@ plus8\p@}% + \abovedisplayshortskip + {27}{11}} + +\def\LARGE{\@setfontsize\LARGE\ithirtyfourpt{52\p@ plus10\p@ minus6\p@}% + \@setfontsize@parms + {2\p@}% + {52\p@ plus30\p@ minus6\p@}% + {24\p@ plus10\p@ minus6\p@}% + \abovedisplayskip + {12\p@ plus8\p@}% + \abovedisplayshortskip + {27}{11}} + +\def\huge{\@setfontsize\huge\ifortyonept{60\p@ plus10\p@ minus6\p@}% + \@setfontsize@parms + {2\p@}% + {60\p@ plus30\p@ minus6\p@}% + {24\p@ plus10\p@ minus6\p@}% + \abovedisplayskip + {12\p@ plus8\p@}% + \abovedisplayshortskip + {27}{11}} + +\let\Huge\huge +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Paragraphing} +% +% \begin{macro}{\baselinestretch} +% This is used as a multiplier for |\baselineskip|. The default is +% to {\em not\/} stretch the baselines. +% \begin{macrocode} +\renewcommand\baselinestretch{} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\parindent} +% |\parindent| is the width of the paragraph indentation. +% \begin{macrocode} +\setlength\parindent{\z@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@lowpenalty} +% \begin{macro}{\@medpenalty} +% \begin{macro}{\@highpenalty}% +% The commands |\nopagebreak| and |\nolinebreak| put in penalties +% to discourage these breaks at the point they are put in. +% They use |\@lowpenalty|, |\@medpenalty| or |\@highpenalty|, +% dependant on their argument. +% \begin{macrocode} +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\clubpenalty} +% \begin{macro}{\widowpenalty} +% These penalties are use to discourrage club and widow lines. +% Because we use their default values we only show them here, +% commented out. +% \begin{macrocode} +% \clubpenalty 150 +% \widowpenalty 150 +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\displaywidowpenalty} +% \begin{macro}{\predisplaypenalty} +% \begin{macro}{\postdisplaypenalty} +% Discourrage (but not so much) widows in front of a math display +% and forbid breaking directly in front of a display. Allow break +% after a display without a penalty. Again the default values are +% used, therefore we only show them here. +% \begin{macrocode} +% \displaywidowpenalty 50 +% \predisplaypenalty 10000 +% \postdisplaypenalty 0 +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\interlinepenalty} +% Allow the breaking of a page in the middle of a paragraph. +% \begin{macrocode} +% \interlinepenalty 0 +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\brokenpenalty} +% We allow the breaking of a page after a hyphenated line. +% \begin{macrocode} +% \brokenpenalty 0 +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Page Layout} +% +% All margin dimensions are measured from a point one inch from the +% top and lefthand side of the page. +% +% \subsubsection{Vertical spacing} +% +% \begin{macro}{\headheight} +% \begin{macro}{\headsep} +% \begin{macro}{\topskip} +% The |\headheight| is the height of the box that will contain the +% running head. The |\headsep| is the distance between the bottom +% of the running head and the top of the text. |\topskip| is the +% |\baselineskip| for the first line on a page. +% \begin{macrocode} +\setlength\headheight{14\p@} +\setlength\headsep {15\p@} +\setlength\topskip {30\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\footskip} +% The distance from the baseline of the box which contains the +% running footer to the baseline of last line of text is controlled +% by the |\footskip|. +% Bottom of page: +% \begin{macrocode} +\setlength\footskip{25\p@} % +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\maxdepth} +% \begin{macro}{\@maxdepth} +% \changes{v2.3c}{1994/05/06}{Added setting of \cs{maxdepth} and +% \cs{@maxdepth}} +% The \TeX\ primitive register |\maxdepth| has a function that is +% similar to that of |\topskip|. The register |\@maxdepth| should +% always contain a copy of |\maxdepth|. In both plain \TeX\ and +% \LaTeX~2.09 |\maxdepth| had a fixed value of \texttt{4pt}; in +% native \LaTeX2e\ mode we let the value depend on the typesize. We +% set it so that |\maxdepth| $+$ |\topskip| $=$ typesize $\times +% 1.5$. As it happens, in these classes |\topskip| is equal to the +% typesize, therefor we set |\maxdepth| to half the value of +% |\topskip|. +% \begin{macrocode} +\if@compatibility + \setlength\maxdepth{4\p@} +\else + \setlength\maxdepth{.5\topskip} +\fi +\setlength\@maxdepth\maxdepth +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsubsection{The dimension of text} +% +% \begin{macro}{\textwidth} +% When we are in compatibility mode we have to make sure that the +% dimensions of the printed area are not different from what the +% user was used to see. +% +% \begin{macrocode} +\if@compatibility + \setlength\textwidth{460\p@} +% \end{macrocode} +% When we are not in compatibility mode we can set some of the +% dimensions differently, taking into account the paper size for +% instance. +% \begin{macrocode} +\else +% \end{macrocode} +% First, we calculate the maximum textwidth, which depends on the +% papersize. Then we calculate the approximate length of 65 +% characters, which should be the maximum length of a line of text. +% The calculated values are stored in |\@tempdima| and |\@tempdimb|. +% \begin{macrocode} + \setlength\@tempdima{\paperwidth} + \addtolength\@tempdima{-2in} + \setbox\@tempboxa\hbox{\rmfamily im} + \setlength\@tempdimb{.5\wd\@tempboxa} + \setlength\@tempdimb{65\@tempdimb} +% \end{macrocode} +% +% Now we can set the |\textwidth|, depending on whether we will be +% setting one or two columns. +% +% The text should not be wider than the minimum +% of the paperwidth (minus 2 inches for the margins) and the +% maximum length of a line as defined by the number of characters. +% \begin{macrocode} + \ifdim\@tempdima>\@tempdimb\relax + \setlength\textwidth{\@tempdimb} + \else + \setlength\textwidth{\@tempdima} + \fi +\fi +% \end{macrocode} +% +% Here we modify the width of the text a little to be a whole +% number of points. +% \begin{macrocode} +\@settopoint\textwidth +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\columnwidth} +% \begin{macro}{\columnsep} +% \begin{macro}{\columnseprule} +% \begin{macrocode} +\columnwidth \textwidth +\columnsep 10pt +\columnseprule \z@ +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\textheight} +% Now that we have computed the width of the text, we have to take +% care of the height. The |\textheight| is the height of text +% (including footnotes and figures, excluding running head and +% foot). +% +% First make sure that the compatibility mode gets the same +% dimensions as we had with \LaTeX2.09. The number of lines was +% calculated as the floor of the old |\textheight| minus +% |\topskip|, divided by |\baselineskip| for |\normalsize|. The +% old value of |\textheight| was 528pt. +% +% \begin{macrocode} +\if@compatibility + \setlength\textheight{600\p@} +% \end{macrocode} +% +% Again we compute this, depending on the papersize and depending +% on the baselineskip that is used, in order to have a whole number +% of lines on the page. +% \begin{macrocode} +\else + \setlength\@tempdima{\paperheight} +% \end{macrocode} +% +% We leave at least a 1 inch margin on the top and the bottom of +% the page. +% \begin{macrocode} + \addtolength\@tempdima{-2in} +% \end{macrocode} +% +% We also have to leave room for the running headers and footers. +% \begin{macrocode} + \addtolength\@tempdima{-1in} +% \end{macrocode} +% +% Then we divide the result by the current |\baselineskip| and +% store this in the count register |\@tempcnta|, which then +% contains the number of lines that fit on this page. +% \begin{macrocode} + \divide\@tempdima\baselineskip + \@tempcnta=\@tempdima +% \end{macrocode} +% +% From this we can calculate the height of the text. +% \begin{macrocode} + \setlength\textheight{\@tempcnta\baselineskip} +\fi +% \end{macrocode} +% +% The first line on the page has a height of |\topskip|. +% \begin{macrocode} +\advance\textheight by \topskip +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Margins} +% +% \begin{macro}{\oddsidemargin} +% \begin{macro}{\evensidemargin} +% \begin{macro}{\marginparwidth} +% First we give the values for the compatibility mode. +% +% Values for two-sided printing: +% \begin{macrocode} +\if@compatibility + \setlength\oddsidemargin {17\p@} + \setlength\evensidemargin {17\p@} + \setlength\marginparwidth {20\p@} +\else +% \end{macrocode} +% +% When we are not in compatibility mode we can take the dimensions +% of the selected paper into account. +% +% We center the text on the page, by +% calculating the difference between |textwidth| and +% |\paperwidth|$-$|2in|. Half of that difference is then used for +% the margin. The amount of space that can be used for marginal +% notes is at least 0.8~inch, to which we add any `leftover' space. +% \begin{macrocode} + \setlength\@tempdima {\paperwidth} + \addtolength\@tempdima {-2in} + \addtolength\@tempdima {-\textwidth} + \setlength\oddsidemargin {.5\@tempdima} + \setlength\marginparwidth {.8in} + \addtolength\marginparwidth {.5\@tempdima} +% \end{macrocode} +% +% The |\evensidemargin| can now be computed from the values set +% above. +% \begin{macrocode} +\setlength\evensidemargin {\paperwidth} +\addtolength\evensidemargin{-2in} +\addtolength\evensidemargin{-\textwidth} +\addtolength\evensidemargin{-\oddsidemargin} +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\marginparsep} +% \begin{macro}{\marginparpush} +% The horizontal space between the main text and marginal notes is +% determined by |\marginparsep|, the minimum vertical separation +% between two marginal notes is controlled by |\marginparpush|. +% \begin{macrocode} +\setlength\marginparsep {5\p@} +\setlength\marginparpush{5\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\topmargin} +% The |\topmargin| is the distance between the top of `the +% printable area' --which is 1 inch below the top of the paper-- +% and the top of the box which contains the running head. +% +% It can now be computed from the values set above. +% \begin{macrocode} +\if@compatibility + \setlength\topmargin{-10pt} +\else + \setlength\topmargin{\paperheight} + \addtolength\topmargin{-2in} + \addtolength\topmargin{-\headheight} + \addtolength\topmargin{-\headsep} + \addtolength\topmargin{-\textheight} + \addtolength\topmargin{-\footskip} % this might be wrong! +% \end{macrocode} +% By changing the factor in the next line the complete page +% can be shifted vertically. +% \begin{macrocode} + \addtolength\topmargin{-.5\topmargin} +\fi +\@settopoint\topmargin +% \end{macrocode} +% \end{macro} +% +% +% \subsubsection{Footnotes} +% +% \begin{macro}{\footnotesep} +% |\footnotesep| is the height of the strut placed at the beginning +% of every footnote. It equals the height of a normal +% |\footnotesize| strut in this +% class, thus no extra space occurs between footnotes. +% \begin{macrocode} +\setlength\footnotesep{20\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\footins} +% |\skip\footins| is the space between the last line of the main +% text and the top of the first footnote. +% \begin{macrocode} +\setlength{\skip\footins}{10\p@ \@plus 2\p@ \@minus 4\p@} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Page Styles} +% +% The page style \pstyle{foo} is defined by defining the command +% |\ps@foo|. This command should make only local definitions. +% There should be no stray spaces in the definition, since they +% could lead to mysterious extra spaces in the output (well, that's +% something that should be always avoided). +% +% \begin{macro}{\@evenhead} +% \begin{macro}{\@oddhead} +% \begin{macro}{\@evenfoot} +% \begin{macro}{\@oddfoot} +% The |\ps@...| command defines the macros |\@oddhead|, +% |\@oddfoot|, |\@evenhead|, and |\@evenfoot| to define the running +% heads and feet---e.g., |\@oddhead| is the macro to produce the +% contents of the heading box for odd-numbered pages. It is called +% inside an |\hbox| of width |\textwidth|. +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% +% The page styles of slides is determined by the 'slide' page style, +% the slide environment executing a |\thispagestyle{slide}| command. +% The page styles of overlays and notes are similarly determined by +% 'overlay' and 'note' page styles. The command standard 'headings', +% 'plain' and 'empty' page styles work by redefining the 'slide', +% 'overlay', and 'note' styles. +% +% \changes{v2.3q}{1995/09/20}{Wrap some long lines, and use \cs{null}.} +% \begin{macro}{\ps@headings} +% \begin{macrocode} +\if@compatibility +\def\ps@headings{% +\def\ps@slide{\def\@oddfoot{\@mainsize +\hfil\hb@xt@3em{\theslide + \hss}}% + \def\@oddhead{\@mainsize +\hfil +}% + \def\@evenfoot{\@mainsize +\hfil\hb@xt@3em{\theslide\hss}}% + \def\@evenhead{\@mainsize +\hfil +}} + +\def\ps@overlay{\def\@oddfoot{\@mainsize +\hfil\hb@xt@3em{\theoverlay + \hss}}% + \def\@oddhead{\@mainsize +\hfil +}% + \def\@evenfoot{\@mainsize +\hfil\hb@xt@3em{\theoverlay\hss}}% + \def\@evenhead{\@mainsize +\hfil +}} +\def\ps@note{\def\@oddfoot{\@mainsize \hbox{}\hfil\thenote}% + \def\@oddhead{}% + \def\@evenfoot{\@mainsize \hbox{}\hfil\thenote}% + \def\@evenhead{}}} +% +\else %%if@compatibility +% +\def\ps@headings{% + \def\ps@slide{% + \def\@oddfoot{\@mainsize \mbox{}\hfil\hb@xt@3em{\theslide\hss}}% + \def\@oddhead{}% + \def\@evenfoot{\@mainsize \mbox{}\hfil\hb@xt@3em{\theslide\hss}}% + \def\@evenhead{}} + + \def\ps@overlay{% + \def\@oddfoot{\@mainsize \mbox{}\hfil\hb@xt@3em{\theoverlay\hss}}% + \def\@oddhead{}% + \def\@evenfoot{\@mainsize \mbox{}\hfil\hb@xt@3em{\theoverlay\hss}}% + \def\@evenhead{}} + + \def\ps@note{% + \def\@oddfoot{% + \@mainsize + \if@clock + \fbox{\large \@arabic\c@minutes\space min}% + \else + \null + \fi + \hfil\thenote}% + \def\@oddhead{}% + \def\@evenfoot{% + \@mainsize + \if@clock + \fbox{\large \@arabic\c@minutes\space min}% + \else + \null + \fi + \hfil\thenote}% + \def\@evenhead{}}} +\fi %% if@compatibility +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ps@plain} +% \begin{macrocode} +\def\ps@plain{\def\ps@slide{% + \def\@oddfoot{\@mainsize \mbox{}\hfil\hb@xt@3em{\theslide\hss}}% + \def\@oddhead{}% + \def\@evenfoot{\@mainsize \mbox{}\hfil\hb@xt@3em{\theslide\hss}}% + \def\@evenhead{}} +\def\ps@overlay{\def\@oddfoot{\@mainsize + \mbox{}\hfil\hb@xt@3em{\theoverlay\hss}}% + \def\@oddhead{}% + \def\@evenfoot{\@mainsize \mbox{}\hfil\hb@xt@3em{\theoverlay\hss}}% + \def\@evenhead{}} +\def\ps@note{\def\@oddfoot{\@mainsize \hbox{}\hfil\thenote}% + \def\@oddhead{}% + \def\@evenfoot{\@mainsize \hbox{}\hfil\thenote}% + \def\@evenhead{}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ps@empty} +% \begin{macrocode} +\def\ps@empty{% +\def\ps@slide{\def\@oddhead{}\def\@oddfoot{}% +\def\@evenhead{}\def\@evenfoot{}}% +\def\ps@overlay{\def\@oddhead{}\def\@oddfoot{}% +\def\@evenhead{}\def\@evenfoot{}}% +\def\ps@note{\def\@oddhead{}\def\@oddfoot{}% +\def\@evenhead{}\def\@evenfoot{}}} +% \end{macrocode} +% \end{macro} +% +% Default definition the 'slide', 'overlay', and 'note' page styles. +% \begin{macrocode} +\ps@headings +% \end{macrocode} +% Set ordinary page style to 'empty' +% \begin{macrocode} +\let\@oddhead\@empty\let\@oddfoot\@empty +\let\@evenhead\@empty\let\@evenfoot\@empty +% \end{macrocode} +% +% +% \subsection{Providing math {\em versions}} +% +% \LaTeX{} provides two {\em versions\/}. We call them +% \textsf{normal} and \textsf{bold}, respectively. +% \SliTeX{} does not have a \textsf{bold} version. But we treat the +% invisible characters as a version. The only thing we have to take +% care of is to ensure that we have exactly the same fonts in both +% versions available. +% +% \begin{macrocode} +\DeclareMathVersion{invisible} +% \end{macrocode} +% +% Now we define the basic {\em math groups\/} used by \LaTeX{}. Later +% on, in packages some other {\em math groups}, e.g., the AMS +% symbol fonts, will be defined. +% +% As a default I used serif fonts for mathgroup 0 to get things like +% \verb+\log+ look right. +% \begin{macrocode} +\SetSymbolFont{operators}{normal} + {OT1}{lcmss}{m}{n} + +\SetSymbolFont{letters}{normal} + {OML}{lcmm}{m}{it} +\SetSymbolFont{symbols}{normal} + {OMS}{lcmsy}{m}{n} +\SetSymbolFont{largesymbols}{normal} + {OMX}{lcmex}{m}{n} + +\SetSymbolFont{operators}{invisible} + {OT1}{lcmss}{m}{In} +\SetSymbolFont{letters}{invisible} + {OML}{lcmm}{m}{Iit} +\SetSymbolFont{symbols}{invisible} + {OMS}{lcmsy}{m}{In} +\SetSymbolFont{largesymbols}{invisible} + {OMX}{lcmex}{m}{In} + + +\def\@mainsize{\visible\tiny} +% \end{macrocode} +% +% +% \subsection{Environments} +% +% \begin{environment}{titlepage} +% This environment starts a new page, with pagestyle \pstyle{empty} +% and sets the page counter to 0. +% \begin{macrocode} +\newenvironment{titlepage} + {\newpage + \thispagestyle{empty}% + \setcounter{page}{\z@}} + {\newpage} +% \end{macrocode} +% \end{environment} +% +% \subsubsection{General List Parameters} +% +% The following commands are used to set the default values for the +% list environment's parameters. See the \LaTeX{} manual for an +% explanation of the meaning of the parameters. +% +% \begin{macro}{\leftmargini} +% \begin{macro}{\leftmarginii} +% \begin{macro}{\leftmarginiii} +% \begin{macro}{\leftmarginiv} +% \begin{macro}{\leftmarginv} +% \begin{macro}{\leftmarginvi} +% \begin{macrocode} +\setlength\leftmargini {38\p@} +\setlength\leftmarginii {30\p@} +\setlength\leftmarginiii {20\p@} +\setlength\leftmarginiv {15\p@} +\setlength\leftmarginv {15\p@} +\setlength\leftmarginvi {10\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@listi} +% \begin{macro}{\@listii} +% \begin{macro}{\@listiii} +% \begin{macro}{\@listiv} +% \begin{macro}{\@listv} +% \begin{macro}{\@listvi} +% These commands set the values of |\leftmargin|, |\parsep|, +% |\topsep|, and |\itemsep| for the various levels of lists. +% \changes{v2.3z}{1997/08/15}{Add initialization of \cs{leftmargin} to +% \cs@listi.} +% It is even necessary to initialize |\leftmargin| in |\@listi|, +% i.e. for a level one list, as a list environment may appear +% inside a \texttt{trivlist}, for example inside a \texttt{theorem} +% environment. +% \begin{macrocode} +\def\@listi{\leftmargin\leftmargini + \parsep .5\parskip + \topsep \parsep + \itemsep\parskip + \partopsep \z@} + +\def\@listii{\leftmargin\leftmarginii + \labelwidth\leftmarginii + \advance\labelwidth-\labelsep + \parsep .5\parskip + \topsep \parsep + \itemsep\parskip} +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii + \advance\labelwidth-\labelsep} +\def\@listiv{\leftmargin\leftmarginiv + \labelwidth\leftmarginiv + \advance\labelwidth-\labelsep} +\def\@listv{\leftmargin\leftmarginv + \labelwidth\leftmarginv + \advance\labelwidth-\labelsep} +\def\@listvi{\leftmargin\leftmarginvi + \labelwidth\leftmarginvi + \advance\labelwidth-\labelsep} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% Here we initialize |\leftmargin| and |\labelwidth|. +% \begin{macrocode} +\leftmargin\leftmargini +\labelwidth\leftmargini\advance\labelwidth-\labelsep +% \end{macrocode} +% +% +% \subsubsection{Paragraph-formatting environments} +% +% \begin{environment}{verse} +% Inside a |verse| environment, |\\| ends a line, and +% line continuations are indented further. +% A blank line makes new paragraph with |\parskip| space. +% \begin{macrocode} +\newenvironment{verse}{\let\\=\@centercr + \list{}{\itemsep \z@ + \itemindent -15\p@ + \listparindent \itemindent + \rightmargin \leftmargin + \advance\leftmargin 15\p@}% + \item[]} + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \begin{environment}{quotation} +% The |quotation| environment fills lines, indents paragraphs. +% \begin{macrocode} +\newenvironment{quotation}{\list{}{\listparindent 20\p@ + \itemindent\listparindent + \rightmargin\leftmargin}% + \item[]} + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \begin{environment}{quote} +% The |quote| environment is the same as the |quotation| environment, +% except that there is no paragraph indentation. +% \begin{macrocode} +\newenvironment{quote}{\list{}{\rightmargin\leftmargin}\item[]} + {\endlist} +% \end{macrocode} +% \end{environment} +% +% +% \subsubsection{List-making environments} +% +% +% \begin{environment}{description} +% The description environment is defined here -- while the itemize +% and enumerate environments are defined in \file{latex.dtx}. +% +% \begin{macrocode} +\newenvironment{description}{\list{}{\labelwidth\z@ + \itemindent-\leftmargin + \let\makelabel\descriptionlabel}} + {\endlist} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\descriptionlabel} +% To change the formatting of the label, you must redefine +% |\descriptionlabel|. +% \begin{macrocode} +\newcommand*{\descriptionlabel}[1]{\hspace\labelsep + \normalfont\bfseries #1} + +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Enumerate} +% +% The enumerate environment uses four counters: \Lcount{enumi}, +% \Lcount{enumii}, \Lcount{enumiii} and \Lcount{enumiv}, where +% \Lcount{enumN} controls the numbering of the Nth level +% enumeration. +% +% \begin{macro}{\theenumi} +% \begin{macro}{\theenumii} +% \begin{macro}{\theenumiii} +% \begin{macro}{\theenumiv} +% The counters are already defined in \file{latex.dtx}, but their +% representation is changed here. +% +% \begin{macrocode} +\renewcommand\theenumi{\@arabic\c@enumi} +\renewcommand\theenumii{\@alph\c@enumii} +\renewcommand\theenumiii{\@roman\c@enumiii} +\renewcommand\theenumiv{\@Alph\c@enumiv} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\labelenumi} +% \begin{macro}{\labelenumii} +% \begin{macro}{\labelenumiii} +% \begin{macro}{\labelenumiv} +% The label for each item is generated by the four commands +% |\labelenumi| \ldots\ |\labelenumiv|. +% \changes{v2.3k}{1994/12/12}{Handle the \cs{label...} commands as in +% the other class files} +% \begin{macrocode} +\newcommand\labelenumi{\theenumi.} +\newcommand\labelenumii{(\theenumii)} +\newcommand\labelenumiii{\theenumiii.} +\newcommand\labelenumiv{\theenumiv.} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\p@enumii} +% \begin{macro}{\p@enumiii} +% \begin{macro}{\p@enumiv} +% The expansion of |\p@enumN||\theenumN| defines the output of a +% |\ref| command when referencing an item of the Nth level of an +% enumerated list. +% \begin{macrocode} +\renewcommand\p@enumii{\theenumi} +\renewcommand\p@enumiii{\theenumi(\theenumii)} +\renewcommand\p@enumiv{\p@enumiii\theenumiii} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsubsection{Itemize} +% +% +% \begin{macro}{\labelitemi} +% \begin{macro}{\labelitemii} +% \changes{v2.3x}{1996/08/25}{replaced -{}- with \cs{textendash}} +% \begin{macro}{\labelitemiii} +% \begin{macro}{\labelitemiv} +% Itemization is controlled by four commands: |\labelitemi|, +% |\labelitemii|, |\labelitemiii|, and |\labelitemiv|, which\ +% define the labels of the various itemization levels. +% \begin{macrocode} +\newcommand\labelitemi{$\m@th\bullet$} +\newcommand\labelitemii{\normalfont\bfseries \textendash} +\newcommand\labelitemiii{$\m@th\ast$} +\newcommand\labelitemiv{$\m@th\cdot$} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Setting parameters for existing environments} +% +% \subsubsection{Array and tabular} +% +% \begin{macro}{\arraycolsep} +% The columns in an array environment are separated by +% 2|\arraycolsep|.% Array and tabular environment parameters +% \begin{macrocode} +\setlength\arraycolsep{8\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\tabcolsep} +% The columns in an tabular environment are separated by +% 2|\tabcolsep|. +% \begin{macrocode} +\setlength\tabcolsep{10\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\arrayrulewidth} +% The width of rules in the array and tabular environments is given +% by the length parameter|\arrayrulewidth|. +% \begin{macrocode} +\setlength\arrayrulewidth{.6\p@} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\doublerulesep} +% The space between adjacent rules in the array and tabular +% environments is given by |\doublerulesep|. +% \begin{macrocode} +\setlength\doublerulesep{3\p@} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Tabbing} +% +% \begin{macro}{\tabbingsep} +% This controls the space that the |\'| command puts in. (See +% \LaTeX{} manual for an explanation.) +% \begin{macrocode} +\labelsep 10pt +\setlength\tabbingsep{\labelsep} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Minipage} +% +% \begin{macro}{\@minipagerestore} +% The macro |\@minipagerestore| is called upon entry to a minipage +% environment to set up things that are to be handled differently +% inside a minipage environment. In the current styles, it does +% nothing. +% \end{macro} +% +% \begin{macro}{\@mpfootins} +% Minipages have their own footnotes; |\skip||\@mpfootins| plays +% same r\^ole for footnotes in a minipage as |\skip||\footins| does +% for ordinary footnotes. +% +% \begin{macrocode} +\skip\@mpfootins = \skip\footins +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Framed boxes} +% +% \begin{macro}{\fboxsep} +% The space left by |\fbox| and |\framebox| between the box and the +% text in it. +% \begin{macro}{\fboxrule} +% The width of the rules in the box made by |\fbox| and |\framebox|. +% \begin{macrocode} +\setlength\fboxsep{5\p@} +\setlength\fboxrule{.6\p@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\theequation} +% The equation number will be typeset as arabic numerals. +% \begin{macrocode} +\def\theequation{\@arabic\c@equation} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\jot} +% |\jot| is the extra space added between lines of an eqnarray +% environment. The default value is used. +% \begin{macrocode} +% \setlength\jot{3pt} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@eqnnum} +% The macro |\@eqnnum| defines how equation numbers are to appear in +% equations. Again the default is used. +% +% \begin{macrocode} +% \def\@eqnnum{(\theequation)} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{Font changing} +% +% \changes{v2.3j}{1994/11/10}{fixed a few typos} +% +% Here we supply the declarative font changing commands that were +% common in \LaTeX\ version 2.09 and earlier. These commands work +% in text mode \emph{and} in math mode. They are provided for +% compatiblity, but one should start using the |\text...| and +% |\math...| commands instead. These commands are redefined using +% |\DeclareOldFontCommand|, a command with three arguments: the +% user command to be defined, \LaTeX\ commands to execute in text +% mode and \LaTeX\ commands to execute in math mode. +% +% \begin{macro}{\rm} +% \begin{macro}{\tt} +% \begin{macro}{\sf} +% \changes{v2.2}{1993/12/18}{Changed \cs{@newfontswitch} to +% \cs{@renewfontswitch}.} +% \changes{v2.3a}{1994/04/14}{\cs{@renewfontswitch} has become +% \cs{DeclareOldFontCommand}} +% +% The commands to change the family. When in compatibility mode we +% select the `default' font first, to get \LaTeX2.09 behaviour. +% \begin{macrocode} +\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm} +\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf} +\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bf} +% The command to change to the bold series. One should use +% |\mdseries| to explicitly switch back to medium series. +% \changes{v2.2}{1993/12/18}{Changed \cs{@newfontswitch} to +% \cs{@renewfontswitch}.} +% \begin{macrocode} +\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\sl} +% \begin{macro}{\it} +% \begin{macro}{\sc} +% \changes{v2.2}{1993/12/18}{Changed \cs{@newfontswitch} to +% \cs{@renewfontswitch}.} +% And the commands to change the shape of the font. The slanted and +% small caps shapes are not available by default as math alphabets, +% so those changes do nothing in math mode. One should use +% |\upshape| to explicitly change back to the upright shape. +% \begin{macrocode} +\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit} +\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\relax} +\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\relax} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\cal} +% \changes{v2.1d}{1993/12/14}{Macro added} +% \begin{macro}{\mit} +% \changes{v2.1d}{1993/12/14}{Macro added} +% +% The commands |\cal| and |\mit| should only be used in math mode, +% outside math mode they have no effect. Currently the New Font +% Selection Scheme defines these commands to generate warning +% messages. Therefore we have to define them `by hand'. +% \changes{v2.3k}{1994/12/12}{Now define \cs{cal} and \cs{mit} using +% \cs{DeclareRobustCommand*}} +% \begin{macrocode} +\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}} +\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Footnotes} +% +% +% \begin{macro}{\footnoterule} +% Usually, footnotes are separated from the main body of the text +% by a small rule. This rule is drawn by the macro |\footnoterule|. +% We have to make sure that the rule takes no vertical space (see +% \file{plain.tex}). The resulting rule will appear on all color +% layers, so it's best not to draw a rule. +% \begin{macrocode} +\renewcommand\footnoterule{} +% \let \footnoterule = \relax +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\c@footnote} +% \begin{macro}{\thefootnote} +% Footnotes are numbered within slides, overlays, and notes and +% numbered with $\ast$, $\dagger$, etc. +% \begin{macrocode} +% \newcounter{footnote} +\def\thefootnote{\fnsymbol{footnote}} +\@addtoreset{footnote}{slide} +\@addtoreset{footnote}{overlay} +\@addtoreset{footnote}{note} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% +% \begin{macro}{\@makefntext} +% \changes{v2.2i}{1994/03/08}{Always call \cs{@makefnmark}.} +% The footnote mechanism of \LaTeX{} calls the macro |\@makefntext| +% to produce the actual footnote. The macro gets the text of the +% footnote as its argument and should use |\@makefnmark| to produce +% the mark of the footnote. The macro |\@makefntext| is called when +% effectively inside a |\parbox| of width |\columnwidth| (i.e., +% with |\hsize| = |\columnwidth|). +% +% An example of what can be achieved is given by the following piece +% of \TeX\ code. +% \begin{verbatim} +% \long\def\@makefntext#1{% +% \@setpar{\@@par +% \@tempdima = \hsize +% \advance\@tempdima-10pt +% \parshape \@ne 10pt \@tempdima}% +% \par +% \parindent 1em\noindent +% \hbox to \z@{\hss\@makefnmark}#1} +% \end{verbatim} +% The effect of this definition is that all lines of the footnote +% are indented by 10pt, while the first line of a new paragraph is +% indented by 1em. To change these dimensions, just substitute the +% desired value for `10pt' (in both places) or `1em'. The mark is +% flushright against the footnote. +% +% In these document classes we use a simpler macro, in which the +% footnote text is set like an ordinary text paragraph, with no +% indentation except on the first line of a paragraph, and the +% first line of the footnote. Thus, all the macro must do is set +% |\parindent| to the appropriate value for succeeding paragraphs +% and put the proper indentation before the mark. +% +% \begin{macrocode} +\long\def\@makefntext#1{ + \noindent + \hangindent 10\p@ + \hb@xt@10\p@{\hss\@makefnmark}#1} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@makefnmark} +% The footnote markers that are printed in the text to point to the +% footnotes should be produced by the macro |\@makefnmark|. We use +% the default definition for it. +% \begin{macrocode} +%\def\@makefnmark{\hbox{$^{\@thefnmark}\m@th$}} +% \end{macrocode} +% \end{macro} +% +% +% \subsection{The title} +% The commands |\title|, |\author|, and |\date| are already +% defined, so here we just define |\maketitle|. +% +% \changes{v2.3s}{1995/10/10}{Move \cs{par} inside the scope of +% \cs{Large}, to get even line spacing.} +% \begin{macrocode} +\newcommand\maketitle{{\centering {\Large \@title \par}% + \@author \par \@date\par}% + \if@titlepage \break \fi} +% \end{macrocode} + +% \section{Initialisation} +% +% \subsection{Date} +% +% \begin{macro}{\today} +% This macro uses the \TeX\ primitives |\month|, |\day| and |\year| +% to provide the date of the \LaTeX-run. +% \begin{macrocode} +\newcommand\today{\ifcase\month\or + January\or February\or March\or April\or May\or June\or + July\or August\or September\or October\or November\or December\fi + \space\number\day, \number\year} +% \end{macrocode} +% \end{macro} +% +% +% Default initializations +% +% \begin{macrocode} +\pagenumbering{arabic} +\onecolumn +%</class> +% \end{macrocode} +% +% \subsection{Basic code} +% +% The code below is basically a copy of |slitex.tex| with some +% changes. +% +% Global changes so far: +% +% \changes{FMi}{1990/06/01}{\cs{gdef}\cs{@slidesw} ... replaced by a +% \cs{newifG} which is similar to \cs{newif} but uses \cs{global} +% inside.} +% +% +% \subsubsection{Hacks for slide macros} +% +% \begin{macrocode} +%<*cmd> +\message{hacks,} + +\outer\def\newifG#1{\count@\escapechar \escapechar\m@ne + \expandafter\expandafter\expandafter + \edef\@ifG#1{true}{\global\let\noexpand#1\noexpand\iftrue}% + \expandafter\expandafter\expandafter + \edef\@ifG#1{false}{\global\let\noexpand#1\noexpand\iffalse}% + \@ifG#1{false}\escapechar\count@} % the condition starts out false +\def\@ifG#1#2{\csname\expandafter\ifG@\string#1#2\endcsname} +{\uccode`1=`i \uccode`2=`f \uccode`3=`G \uppercase{\gdef\ifG@123{G}}} + % `ifG' is required + +\def\@gobbletoend#1{\def\@argend{#1}\@ggobtoend} + +\long\def\@ggobtoend#1\end#2{\fi\def\reserved@a{#2}% +\ifx\reserved@a\@argend\else\@ggobtoend\fi} +% \end{macrocode} +% FMi: I don't see any reason for this command since |\fi| is hidden +% anyway in the replacement text +% |\def\@xfi{\fi}| +% \begin{macrocode} + \message{slides,} +% \end{macrocode} +% +% \subsubsection{Slide macros} +% +% +% Switches:\\ +% \begin{tabular}{ll} +% |@bw| & true if making black and white slides \\ +% |@visible| & true if visible output to be produced.\\ +% |@makingslides| & true if making a slide/overlay/note +% \end{tabular} +% +% \begin{macrocode} +\newif\if@bw +\newif\if@visible +\newif\if@onlyslidesw \@onlyslideswfalse +\newif\if@onlynotesw \@onlynoteswfalse +\newif\if@makingslides +% \end{macrocode} +% FMi: |\newifG| replaces |\gdef\@slidesw{T}| stuff +% \begin{macrocode} +\newifG\ifG@slidesw +% \end{macrocode} +% Counters\\ +% \begin{tabular}{ll} +% slide & slide number\\ +% overlay & overlay number for a slide\\ +% note & note number for a slide +% \end{tabular} +% +% \begin{macrocode} +\countdef\c@slide=0 \c@slide=0 +\def\cl@slide{} +\countdef\c@overlay=1 \c@overlay=0 +\def\cl@overlay{} +\countdef\c@note=2 \c@note=0 +\def\cl@note{} +% \end{macrocode} +% Add these counters explicitly to the `ckpt list' so that the +% |\include| mechanism works. +% \changes{v2.3u}{1996/05/09}{Make include work: pr/2140(CAR)} +% \changes{v2.3y}{1997/05/09}{Make include work properly: add the +% counters in case some are already in there: pr/2140+2474(CAR)} +% \changes{v2.3v}{1996/05/11}{Do not add page counter here as it is +% added below(CAR)} +% \begin{macrocode} +\g@addto@macro\cl@@ckpt{\@elt{slide}\@elt{overlay}\@elt{note}} +\@addtoreset{overlay}{slide} +\@addtoreset{note}{slide} +% \end{macrocode} +% Redefine page counter to some other number. +% The page counter will always be zero except when putting out an +% extra page for a slide, note or overlay. +% \begin{macrocode} +\@definecounter{page} +\@addtoreset{page}{slide} +\@addtoreset{page}{note} +\@addtoreset{page}{overlay} + +\def\theslide{\@arabic\c@slide} +\def\theoverlay{\theslide-\@alph\c@overlay} +\def\thenote{\theslide-\@arabic\c@note} +% \end{macrocode} +% \begin{verbatim} +% \@setlimits \LIST \LOW \HIGH +% +% Assumes that \LIST = RANGE1,RANGE2,...,RANGEn (n>0) +% Where RANGEi = j or j-k. +% +% Then \@setlimits globally sets +% (i) \LIST := RANGE2, ... , RANGEn +% (ii) \LOW := p +% (iii) \HIGH := q +% where either RANGE1 = p-q or RANGE1 = p and q=p. +%\end{verbatim} +% \begin{macrocode} +\def\@sl@getargs#1-#2-#3\relax#4#5{\xdef#4{#1}\xdef#5{#2}} +\def\@sl@ccdr#1,#2\relax#3#4{\xdef#3{#1-#1-}\xdef#4{#2}} + +\def\@setlimits #1#2#3{\expandafter\@sl@ccdr#1\relax\@sl@gtmp #1% +\expandafter\@sl@getargs\@sl@gtmp\relax#2#3} +% \end{macrocode} +% \begin{verbatim} +% \onlyslides{LIST} ::= +% BEGIN +% @onlyslidesw := true +% \@doglslidelist :=G LIST,999999,999999 +% if @onlynotesw = true +% else @onlynotesw := true +% \@doglnotelist :=G LIST,999999,999999 +% fi +% message: Only Slides LIST +% END +%\end{verbatim} +% \begin{macrocode} +\def\onlyslides#1{\@onlyslideswtrue + \gdef\@doglslidelist{#1,999999,999999}% + \if@onlynotesw \else + \@onlynoteswtrue\gdef\@doglnotelist{999999,999999}\fi + \typeout{Only Slides #1}} +% \end{macrocode} +%\begin{verbatim} +% \onlynotes{LIST} ::= +% BEGIN +% @onlynotesw := true +% \@doglnotelist :=G LIST,999999,999999 +% if @onlyslidesw = true +% else \@onlyslidesw := true +% \@doglslidelist{999999,999999} +% fi +% message: Only Notes LIST +% END +%\end{verbatim} +% \begin{macrocode} +\def\onlynotes#1{\@onlynoteswtrue + \gdef\@doglnotelist{#1,999999,999999}% + \if@onlyslidesw \else + \@onlyslideswtrue\gdef\@doglslidelist{999999,999999}\fi + \typeout{Only Notes #1}} +% \end{macrocode} +%\begin{verbatim} +% \setupcounters ::= (similar to old \blackandwhite #1 ::= ) +% \newpage +% page counter := 0 +% @bw := T +% @visible := T +% if @onlyslidesw = true +% then \@doslidelist := \@doglslidelist +% \@setlimits\@doslidelist\@doslidelow\@doslidehigh +% fi +% if @onlynotesw = true +% then \@donotelist := \@doglnotelist +% \@setlimits\@donotelist\@donotelow\@donotehigh +% fi +% \normalsize % Note, this sets font to \rmfamily , which sets +% % \@currfont to \rmfamily +% counter slidenumber := 0 +% counter note := 0 +% counter overlay := 0 +% @makingslides := F %% \blackandwhite: @makingslides := T +% %% input #1 +% %% @makingslides := F +%\end{verbatim} +% \begin{macrocode} +\if@compatibility +% In compatibility mode, need to define \verb+\blackandwhite+, +% \verb+\colors+, \verb+\colorslides+, etc. +\def\blackandwhite#1{\newpage\setcounter{page}{0}\@bwtrue\@visibletrue +\if@onlyslidesw \xdef\@doslidelist{\@doglslidelist}% +\@setlimits\@doslidelist\@doslidelow\@doslidehigh\fi +\if@onlynotesw \xdef\@donotelist{\@doglnotelist}% +\@setlimits\@donotelist\@donotelow\@donotehigh\fi +\normalsize\setcounter{slide}{0}\setcounter{overlay}{0}% +\setcounter{note}{0}\@makingslidestrue\input #1\@makingslidesfalse} +% \end{macrocode} +%\begin{verbatim} +% \colors{COLORS} ::= +% for \@colortemp := COLORS +% do \csname \@colortemp \endcsname == \@color{\@colortemp} od +% if \@colorlist = empty +% then \@colorlist := COLORS +% else \@colorlist := \@colorlist , COLORS +% fi +%\end{verbatim} +% +% \begin{macrocode} +\def\colors#1{\@for\@colortemp:=#1\do{\expandafter + \xdef\csname\@colortemp\endcsname{\noexpand\@color{\@colortemp}}}\ifx + \@colorlist\@empty \gdef\@colorlist{#1}% + \else \xdef\@colorlist{\@colorlist,#1}\fi} + +\def\@colorlist{} +% \end{macrocode} +%\begin{verbatim} +% \colorslides{FILE} ::= +% \newpage +% page counter := 0 +% @bw := F +% for \@currcolor := \@colorlist +% do @visible := T +% if @onlyslidesw = true +% then \@doslidelist := \@doglslidelist +% \@setlimits\@doslidelist\@doslidelow\@doslidehigh +% fi +% if @onlynotesw = true +% then \@donotelist := \@doglnotelist +% \@setlimits\@donotelist\@donotelow\@donotehigh +% fi +% \normalsize +% counter slide := 0 +% counter overlay := 0 +% counter note := 0 +% type message +% generate color layer output page +% @makingslides := T +% input #1 +% @makingslides := F +% od +%\end{verbatim} +% \begin{macrocode} +\def\colorslides#1{\newpage\setcounter{page}{0}\@bwfalse +\@for\@currcolor:=\@colorlist\do +{\@visibletrue +\if@onlyslidesw \xdef\@doslidelist{\@doglslidelist}% +\@setlimits\@doslidelist\@doslidelow\@doslidehigh\fi +\if@onlynotesw \xdef\@donotelist{\@doglnotelist}% +\@setlimits\@donotelist\@donotelow\@donotehigh\fi +\normalsize\setcounter{slide}{0}\setcounter{overlay}{0}% +\setcounter{note}{0}\typeout{color \@currcolor}% +\newpage +\begin{huge}% +\begin{center}% +COLOR LAYER\\[.75in]% +\@currcolor +\end{center}% +\end{huge}% +\newpage +\@makingslidestrue +\input #1 +\@makingslidesfalse}} +% +\else %% if@compatibility +% +\def\setupcounters{\newpage\setcounter{page}{0}\@bwtrue\@visibletrue +\if@onlyslidesw \xdef\@doslidelist{\@doglslidelist}% +\@setlimits\@doslidelist\@doslidelow\@doslidehigh\fi +\if@onlynotesw \xdef\@donotelist{\@doglnotelist}% +\@setlimits\@donotelist\@donotelow\@donotehigh\fi +\normalsize\setcounter{slide}{0}\setcounter{overlay}{0}% +\setcounter{note}{0}\@makingslidesfalse} + +\AtBeginDocument{\setupcounters} +\fi %% if@compatibility +% \end{macrocode} +%\begin{verbatim} +% \slide COLORS ::= +% BEGIN +% \changes{v2.3}{1994/03/16}{Moved \cs{newpage} up front, here and in +% \cs{note} and \cs{overlay}} +% \par\break +% \stepcounter{slide} +% \setcounter{page}{0} % in case of non-slide pages +% \@slidesw :=G T +% if @onlyslidesw = true % set \@slidesw = T iff +% then % page to be output +% while \c@slide > \@doslidehigh +% do \@setlimits\@doslidelist\@doslidelow\@doslidehigh od +% if \c@slide < \@doslidelow +% then \@slidesw := F +% fi +% fi +% if \@slidesw = T +% then \@slidesw :=G F +% \begingroup +% if @bw = true +% then \@slidesw :=G T +% else \@color{COLORS} +% \if@visible then \@slidesw :=G T \fi +% fi +% \endgroup +% fi +% if \@slidesw = T +% then @makingslides := T +% \thispagestyle{slide} +% else \end{slide} +% \@gobbletoend{slide} +% fi +% END +% +% \endslide ::= +% BEGIN +% \par\break +% END +%\end{verbatim} +% \begin{macrocode} +\if@compatibility +\def\slide#1{\stepcounter{slide}\G@slideswtrue\if@onlyslidesw +\@whilenum \c@slide >\@doslidehigh\relax +\do{\@setlimits\@doslidelist\@doslidelow\@doslidehigh}\ifnum +\c@slide <\@doslidelow\relax\G@slideswfalse\fi\fi +\ifG@slidesw + \G@slideswfalse +% FMi this is only a hack at the moment to get things running. +% \begingroup + \if@bw\G@slideswtrue\else + \@color{#1}\if@visible \G@slideswtrue \fi + \fi +% \endgroup +\fi +\ifG@slidesw \newpage\thispagestyle{slide}% +% \end{macrocode} +% This will set up the last color specified in the argument to +% \verb+\slide+ as the current color. If only back and white slides +% are prepared \verb+\last@color+ will be empty and effectly +% \verb+\relax+ will be generated (hopefully). +% +% We need to reset to a default font at the beginning of a slide. +% (not done yet). +% \begin{macrocode} +\csname \last@color \endcsname +% \end{macrocode} +% \begin{macrocode} +\else\end{slide}\@gobbletoend{slide}\fi} +% +\else %% if@compatibility +% +\def\slide{\par\break +\stepcounter{slide}\setcounter{page}{0}\G@slideswtrue\if@onlyslidesw +\@whilenum \c@slide >\@doslidehigh\relax +\do{\@setlimits\@doslidelist\@doslidelow\@doslidehigh}\ifnum +\c@slide <\@doslidelow\relax\G@slideswfalse\fi\fi +\ifG@slidesw + \G@slideswfalse +% FMi this is only a hack at the moment to get things running. +% \begingroup + \if@bw\G@slideswtrue\else + \if@visible \G@slideswtrue \fi + \fi +% \endgroup +\fi +\ifG@slidesw \@makingslidestrue\thispagestyle{slide}% +% \end{macrocode} +% This will set up the last color specified in the argument to +% \verb+\slide+ as the current color. If only back and white slides +% are prepared \verb+\last@color+ will be empty and effectly +% \verb+\relax+ will be generated (hopefully). +% +% We need to reset to a default font at the beginning of a slide. +% (not done yet). +% \begin{macrocode} +\csname \last@color \endcsname +% \end{macrocode} +% \begin{macrocode} +\else\end{slide}\@gobbletoend{slide}\fi} +\fi %% if@compatibility + +\let\last@color\@empty + +\def\endslide{\par\break} +% \end{macrocode} +%\begin{verbatim} +% \overlay COLORS ::= +% BEGIN +% \par\break +% \stepcounter{overlay} +% \setcounter{page}{0} % in case of non-slide pages +% \@slidesw :=G T +% if @onlyslidesw = T % set \@slidesw = T iff +% then % page to be output +% if \c@slide < \@doslidelow +% then \@slidesw :=G F +% fi +% fi +% if \@slidesw = T +% \@slidesw :=G F +% \begingroup +% if @bw = true +% then \@slidesw :=G T +% else \@color{COLORS} +% \if@visible then \@slidesw :=G T \fi +% fi +% \endgroup +% fi +% if \@slidesw = T +% then @makingslides := T +% \thispagestyle{overlay} +% else \end{overlay} +% \@gobbletoend{overlay} +% fi +% END +% +% \endoverlay ::= +% BEGIN +% \par\break +% END +%\end{verbatim} +% \begin{macrocode} +\if@compatibility +\def\overlay#1{\stepcounter{overlay}\G@slideswtrue% +\if@onlyslidesw\ifnum \c@slide <\@doslidelow\relax +\G@slideswfalse\fi\fi +\ifG@slidesw \G@slideswfalse\begingroup\if@bw\G@slideswtrue% +\else\@color{#1}\if@visible \G@slideswtrue\fi\fi\endgroup\fi +\ifG@slidesw \newpage\thispagestyle{overlay}% +\else\end{overlay}\@gobbletoend{overlay}\fi} +% +\else %%if@compatibility +% +\def\overlay{\par\break + \stepcounter{overlay}% + \setcounter{page}{0}% + \G@slideswtrue% + \if@onlyslidesw\ifnum \c@slide <\@doslidelow\relax + \G@slideswfalse\fi\fi + \ifG@slidesw \G@slideswfalse + \begingroup\if@bw\G@slideswtrue% + \else\if@visible \G@slideswtrue\fi\fi + \endgroup\fi + \ifG@slidesw \@makingslidestrue\thispagestyle{overlay}% + \else\end{overlay}\@gobbletoend{overlay}\fi} +\fi %%if@compatibility + +\def\endoverlay{\par\break} +% \end{macrocode} +% +% \changes{v2.0d}{1993/11/12}{Removed extra blank.} +%\begin{verbatim} +% \note ::= +% BEGIN +% \par\break +% \stepcounter{note} +% \setcounter{page}{0} % in case of non-slide pages +% if @bw = T +% then +% \@slidesw :=G T +% if @onlynotesw = true % set \@notesw = T iff +% then % page to be output +% while \c@slide > \@donotehigh +% do \@setlimits\@donotelist\@donotelow\@donotehigh od +% if \c@slide < \@donotelow +% then \@slidesw :=G F +% fi +% fi +% else \@slidesw :=G F +% fi +% if \@slidesw = T +% then @makingslides := T +% \thispagestyle{note} +% else \end{note} +% \@gobbletoend{note} +% fi +% END +% +% \endnote ::= +% BEGIN +% \par\break +% END +%\end{verbatim} +% \begin{macrocode} +\if@compatibility +\def\note{\stepcounter{note}% + \if@bw + \G@slideswtrue + \if@onlynotesw\@whilenum \c@slide >\@donotehigh\relax + \do{\@setlimits\@donotelist\@donotelow\@donotehigh}\ifnum + \c@slide <\@donotelow\relax \G@slideswfalse\fi\fi + \else\G@slideswfalse\fi + \ifG@slidesw \newpage\thispagestyle{note}\else + \end{note}\@gobbletoend{note}\fi} +% +\else %%if@compatibility +% +\def\note{\par\break\stepcounter{note}\setcounter{page}{0}% + \if@bw + \G@slideswtrue + \if@onlynotesw\@whilenum \c@slide >\@donotehigh\relax + \do{\@setlimits\@donotelist\@donotelow\@donotehigh}\ifnum + \c@slide <\@donotelow\relax \G@slideswfalse\fi\fi + \else\G@slideswfalse\fi + \ifG@slidesw \@makingslidestrue\thispagestyle{note}\else + \end{note}\@gobbletoend{note}\fi} +\fi %%if@compatibility + +\def\endnote{\par\break} +% \end{macrocode} +%\begin{verbatim} +% \@color{COLORS} ::= +% BEGIN +% if math mode +% then type warning +% fi +% if @bw +% then \visible +% else \invisible +% for \last@color := COLORS +% do if \last@color = \@currcolor +% then \visible +% fi +% od +% fi +% \ignorespaces +% END +%\end{verbatim} +% FMi: |\last@color| will be used in |\slide| to set up first +% color if no color is given. +% I suppose that this is much too complicated. |\else\@tempswafalse| +% would produce the same effect I imagine. +% \begin{macrocode} +\def\@color#1{\@mmodetest + {\if@bw \@tempswatrue \else \@tempswafalse + \@for \reserved@a :=#1\do{\ifx\reserved@a\@currcolor\@tempswatrue\fi + \let\last@color\reserved@a}\fi + \if@tempswa \visible \else \invisible \fi + \ignorespaces}} + +\def\@mmodetest#1{\ifmmode\ClassWarning{slides}{Color-changing command + in math mode has been ignored}\else #1\fi} + +\def\invisible{\@mmodetest + {\if@visible + \@visiblefalse + \fontshape\f@shape\selectfont + \mathversion{invisible}% + \fi + \ignorespaces}} + +\def\visible{\@mmodetest + {\if@visible + \else + \@visibletrue +% \end{macrocode} +% Here is the \LaTeXe{} interface hidden. We use a trick to provide +% ourselves with a sort of additional attribute without making the +% current mechanism even larger. The trick is that we denote +% invisible by putting an uppercase |I| in front of the shape name +% for invisible shapes and remove it again if we want to become +% visible. +% \begin{macrocode} + \fontshape{\expandafter\@gobble\f@shape}\selectfont + \mathversion{normal}% + \fi + \ignorespaces}} + +\def\fontshape#1{\edef\f@shape{\if@visible \else I\fi #1}} +% \end{macrocode} +% +% \subsection{Macros for font handling} +% +% We let |\familydefault| point at |\sfdefault|, to make it easier +% to use the document class slides with packages that set up other +% fonts. +% \begin{macrocode} +\renewcommand{\familydefault}{\sfdefault} +% \end{macrocode} +% +% \changes{v2.3l}{1994/12/16}{Added the declaration of the lasy font +% family} +% The \texttt{latexsym} package, which is needed to be able to access +% the \LaTeX\ symbol fonts (lasy), sets things up so that for sizes +% larger then 10 point magnifications of \texttt{lasy10} are +% used. For slides we want to use magnifications of \texttt{lasy8}, +% so we set up the lasy family here to prevent \LaTeX\ from loading +% \texttt{Ulasy.fd}. +% \begin{macrocode} +\DeclareFontFamily{U}{lasy}{}{} +\DeclareFontShape{U}{lasy}{m}{n}{% + <12><13.82><16.59><19.907><23.89><28.66><34.4><41.28>lasy8 +}{} +\DeclareFontShape{U}{lasy}{m}{In}{% + <13.82><16.59><19.907><23.89><28.66><34.4><41.28>ilasy8 +}{} +% \end{macrocode} +% +% \begin{macrocode} +\message{picture,} +% \end{macrocode} +% +% \subsubsection{Modifications to the picture environment} +% +% Below are the new definitions of the picture-drawing macros +% required for SLiTeX. Only those commands that actually +% draw something must be changed so that they do not produce +% any output when the |@visible| switch is false. +% +% \changes{v2.2j}{1994/03/11}{Corrected \cs{@oval}, like previous +% change to \file{latex.dtx}.} +% \begin{macrocode} +\def\line(#1,#2)#3{\if@visible\@xarg #1\relax \@yarg #2\relax +\@linelen #3\unitlength +\ifnum\@xarg =\z@ \@vline + \else \ifnum\@yarg =\z@ \@hline \else \@sline\fi +\fi\fi} + +\def\vector(#1,#2)#3{\if@visible\@xarg #1\relax \@yarg #2\relax +\@linelen #3\unitlength +\ifnum\@xarg =\z@ \@vvector + \else \ifnum\@yarg =\z@ \@hvector \else \@svector\fi +\fi\fi} + +\def\dashbox#1(#2,#3){% +\leavevmode\if@visible\hb@xt@\z@{\baselineskip \z@ +\lineskip \z@ +\@dashdim #2\unitlength +\@dashcnt \@dashdim \advance\@dashcnt 200 +\@dashdim #1\unitlength\divide\@dashcnt \@dashdim +\ifodd\@dashcnt\@dashdim\z@ +\advance\@dashcnt \@ne \divide\@dashcnt \tw@ +\else \divide\@dashdim \tw@ \divide\@dashcnt \tw@ +\advance\@dashcnt \m@ne +\setbox\@dashbox \hbox{\vrule \@height \@halfwidth \@depth \@halfwidth +\@width \@dashdim}\put(0,0){\copy\@dashbox}% +\put(0,#3){\copy\@dashbox}% +\put(#2,0){\hskip-\@dashdim\copy\@dashbox}% +\put(#2,#3){\hskip-\@dashdim\box\@dashbox}% +\multiply\@dashdim \thr@@ +\fi +\setbox\@dashbox \hbox{\vrule \@height \@halfwidth \@depth \@halfwidth +\@width #1\unitlength\hskip #1\unitlength}\@tempcnta\z@ +\put(0,0){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt +\do{\copy\@dashbox\advance\@tempcnta \@ne }}\@tempcnta\z@ +\put(0,#3){\hskip\@dashdim \@whilenum \@tempcnta <\@dashcnt +\do{\copy\@dashbox\advance\@tempcnta \@ne }}% +\@dashdim #3\unitlength +\@dashcnt=\@dashdim \advance\@dashcnt 200 +\@dashdim #1\unitlength\divide\@dashcnt \@dashdim +\ifodd\@dashcnt \@dashdim=\z@ +\advance\@dashcnt \@ne \divide\@dashcnt \tw@ +\else +\divide\@dashdim \tw@ \divide\@dashcnt \tw@ +\advance\@dashcnt \m@ne +\setbox\@dashbox\hbox{\hskip -\@halfwidth +\vrule \@width \@wholewidth +\@height \@dashdim}\put(0,0){\copy\@dashbox}% +\put(#2,0){\copy\@dashbox}% +\put(0,#3){\lower\@dashdim\copy\@dashbox}% +\put(#2,#3){\lower\@dashdim\copy\@dashbox}% +\multiply\@dashdim \thr@@ +\fi +\setbox\@dashbox\hbox{\vrule \@width \@wholewidth +\@height #1\unitlength}\@tempcnta\z@ +\put(0,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt +\do{\vskip #1\unitlength\copy\@dashbox\advance\@tempcnta \@ne }% +\vskip\@dashdim}}\@tempcnta\z@ +\put(#2,0){\hskip -\@halfwidth \vbox{\@whilenum \@tempcnta <\@dashcnt +\relax\do{\vskip #1\unitlength\copy\@dashbox\advance\@tempcnta \@ne }% +\vskip\@dashdim}}}\fi\@makepicbox(#2,#3)} + +\def\@oval(#1,#2)[#3]{\if@visible\begingroup \boxmaxdepth \maxdimen + \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue + \@tfor\reserved@a :=#3\do + {\csname @ov\reserved@a false\endcsname}\@ovxx + #1\unitlength \@ovyy #2\unitlength + \@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx\else \@ovyy \fi + \advance \@tempdimb -2\p@ + \@getcirc \@tempdimb + \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa + \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@ + \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@ + \@circlefnt \setbox\@tempboxa + \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi + \if@ovl \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx \fi + \if@ovt \@ovhorz \kern -\@ovxx \fi + \if@ovb \raise \@ovyy \@ovhorz \fi}\advance\@ovdx\@ovro + \advance\@ovdy\@ovro \ht\@tempboxa\z@ \dp\@tempboxa\z@ + \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}% + \endgroup\fi} + +\def\@circle#1{\if@visible \begingroup \boxmaxdepth \maxdimen + \@tempdimb #1\unitlength + \ifdim \@tempdimb >15.5\p@\relax \@getcirc\@tempdimb + \@ovro\ht\@tempboxa + \setbox\@tempboxa\hbox{\@circlefnt + \advance\@tempcnta\tw@ \char \@tempcnta + \advance\@tempcnta\m@ne \char \@tempcnta \kern -2\@tempdima + \advance\@tempcnta\tw@ + \raise \@tempdima \hbox{\char\@tempcnta}\raise \@tempdima + \box\@tempboxa}\ht\@tempboxa\z@ \dp\@tempboxa\z@ + \@put{-\@ovro}{-\@ovro}{\box\@tempboxa}% + \else \@circ\@tempdimb{96}\fi\endgroup\fi} + +% \end{macrocode} +% +% \changes{v2.0d}{1993/11/12}{Removed extra blank.} +% \begin{macrocode} +\def\@dot#1{% + \if@visible\@tempdimb #1\unitlength \@circ\@tempdimb{112}\fi} +% \end{macrocode} +% \changes {v2.3m}{1994/03/20}{(DPC) Remove old \cs{@iframebox} and +% \cs{fbox} defn} +% \changes {v2.3m}{1994/03/20}{(DPC) Add \cs{@frameb@x} defn.} +% \begin{macrocode} +\def\@frameb@x#1{% + \@tempdima\fboxrule + \advance\@tempdima\fboxsep + \advance\@tempdima\dp\@tempboxa + \leavevmode + \hbox{% + \lower\@tempdima\hbox{% + \vbox{% + \if@visible\hrule\@height\else\vskip\fi\fboxrule + \hbox{% + \if@visible\vrule\@width\else\hskip\fi\fboxrule + #1% + \vbox{% + \vskip\fboxsep + \box\@tempboxa + \vskip\fboxsep}% + #1% + \if@visible\vrule\@width\else\hskip\fi\fboxrule}% + \if@visible\hrule\@height\else\vskip\fi\fboxrule}}}} + +% \end{macrocode} +% +% \begin{macrocode} +\long\def\frame#1{\if@visible\leavevmode +\vbox{\vskip-\@halfwidth\hrule \@height\@halfwidth \@depth \@halfwidth + \vskip-\@halfwidth\hbox{\hskip-\@halfwidth \vrule \@width\@wholewidth + \hskip-\@halfwidth #1\hskip-\@halfwidth \vrule \@width \@wholewidth + \hskip -\@halfwidth}\vskip -\@halfwidth\hrule \@height \@halfwidth + \@depth \@halfwidth\vskip -\@halfwidth}\else #1\fi} +% \end{macrocode} +% +% \changes{v2.0d}{1993/11/12}{Corrected \cs{@math} to \cs{m@th} in +% definition of \cs{underline}.} +% +% \begin{macrocode} +\message{mods,} +% \end{macrocode} +% +% +% \subsubsection{Other modifications to \TeX{} and \LaTeX{} commands} +% +% |\rule| +% \begin{macrocode} +\def\@rule[#1]#2#3{\@tempdima#3\advance\@tempdima #1\leavevmode + \hbox{\if@visible\vrule + \@width#2 \@height\@tempdima \@depth-#1\else +\vrule \@width \z@ \@height\@tempdima \@depth-#1\vrule + \@width#2 \@height\z@\fi}} + +% \_ (Added 10 Nov 86) + +\def\_{\leavevmode \kern.06em \if@visible\vbox{\hrule \@width.3em}\else + \vbox{\hrule \@height \z@ \@width.3em}\vbox{\hrule \@width \z@}\fi} +% \end{macrocode} +%\begin{verbatim} +% \overline, \underline, \frac and \sqrt +% +% \@mathbox{STYLE}{BOX}{MTEXT} : Called in math mode, typesets MTEXT and +% stores result in BOX, using style STYLE. +% +% \@bphant{BOX} : Creates a phantom with dimensions BOX. +% \@vbphant{BOX} : Creates a phantom with ht of BOX and zero width. +% \@hbphant{BOX} : Creates a phantom with width of BOX +% and zero ht & dp. +% \@hvsmash{STYLE}{MTEXT} : Creates a copy of MTEXT with zero height and +% width in style STYLE. +%\end{verbatim} +% \begin{macrocode} +\def\@mathbox#1#2#3{\setbox#2\hbox{$\m@th#1{#3}$}} + +\def\@vbphantom#1{\setbox\tw@\null \ht\tw@\ht #1\dp\tw@\dp #1% + \box\tw@} + +\def\@bphantom#1{\setbox\tw@\null + \wd\tw@\wd #1\ht\tw@\ht #1\dp\tw@\dp #1% + \box\tw@} + +\def\@hbphantom#1{\setbox\tw@\null \wd\tw@\wd #1\ht\tw@\z@ \dp\tw@\z@ + \box\tw@} + +\def\@hvsmash#1#2{\@mathbox#1\z@{#2}\ht\z@\z@ \dp\z@\z@ \wd\z@\z@ + \box\z@} + +\def\underline#1{\relax\ifmmode + \@xunderline{#1}\else $\m@th\@xunderline{\hbox{#1}}$\relax\fi} + +\def\@xunderline#1{\mathchoice{\@xyunderline\displaystyle{#1}}% + {\@xyunderline + \textstyle{#1}}{\@xyunderline\scriptstyle{#1}}{\@xyunderline + \scriptscriptstyle{#1}}} + +\def\@xyunderline#1#2{% + \@mathbox#1\@smashboxa{#2}\@hvsmash#1{\copy\@smashboxa}% + \if@visible \@hvsmash#1{\@@underline{\@bphantom\@smashboxa}}\fi + \@mathbox#1\@smashboxb{\@@underline{\box\@smashboxa}}% + \@bphantom\@smashboxb} + +\let\@@overline=\overline + +\def\overline#1{\mathchoice{\@xoverline\displaystyle{#1}}{\@xoverline + \textstyle{#1}}{\@xoverline\scriptstyle{#1}}{\@xoverline + \scriptscriptstyle{#1}}} + +\def\@xoverline#1#2{% + \@mathbox#1\@smashboxa{#2}\@hvsmash#1{\copy\@smashboxa}% + \if@visible \@hvsmash#1{\@@overline{\@bphantom\@smashboxa}}\fi + \@mathbox#1\@smashboxb{\@@overline{\box\@smashboxa}}% + \@bphantom\@smashboxb} +% \end{macrocode} +% +% \changes{v2.0b}{1993/04/14}{Corrected \cs{frac} command.} +% \changes{v2.0d}{1993/11/12}{Removed \cs{vcenter} in \cs{@frac}.} +% +%\begin{verbatim} +% \@frac {STYLE}{DENOMSTYLE}{NUM}{DEN}{FONTSIZE} : +% Creates \frac{NUM}{DENOM} +% in style STYLE with NUM and DENOM in style DENOMSTYLE +% FONTSIZE should be \textfont \scriptfont or \scriptscriptfont +%\end{verbatim} +% Added a group around the first argument of |\frac| to prevent +% changes (for example font changes) to modify the contents of the +% second argument. +% \changes{v2.1c}{1993/12/13}{Added group around first arg.} +% \begin{macrocode} +\def\frac#1#2{\mathchoice + {\@frac\displaystyle\textstyle{#1}{#2}\textfont}{\@frac + \textstyle\scriptstyle{#1}{#2}\textfont}{\@frac + \scriptstyle\scriptscriptstyle{#1}{#2}\scriptfont}{\@frac + \scriptscriptstyle\scriptscriptstyle{#1}{#2}\scriptscriptfont}} + +\def\@frac#1#2#3#4#5{% + \@mathbox#1\@smashboxc{{\begingroup#3\endgroup\over#4}}% + \setbox\tw@\null + \ht\tw@ \ht\@smashboxc + \dp\tw@ \dp\@smashboxc + \wd\tw@ \wd\@smashboxc + \box\if@visible\@smashboxc\else\tw@\fi} + +\def\r@@t#1#2{\setbox\z@\hbox{$\m@th#1\@xysqrt#1{#2}$}% + \dimen@\ht\z@ \advance\dimen@-\dp\z@ + \mskip5mu\raise.6\dimen@\copy\rootbox \mskip-10mu\box\z@} +% \end{macrocode} +% \changes{v2.3w}{1996/05/15}{Removed use of obsolete command +% \cs{@@sqrt} (CAR)} +% \begin{macrocode} +\def\sqrt{\@ifnextchar[{\@sqrt}{\@xsqrt}} +\def\@sqrt[#1]{\root #1\of} +\def\@xsqrt#1{\mathchoice{\@xysqrt\displaystyle{#1}}{\@xysqrt + \textstyle{#1}}{\@xysqrt\scriptstyle{#1}}{\@xysqrt + \scriptscriptstyle{#1}}} +\def\@xysqrt#1#2{\@mathbox#1\@smashboxa{#2}\if@visible + \@hvsmash#1{\sqrtsign{\@bphantom\@smashboxa}}\fi + \phantom{\sqrtsign{\@vbphantom\@smashboxa}}\box\@smashboxa} + +\newbox\@smashboxa +\newbox\@smashboxb +\newbox\@smashboxc +% \end{macrocode} +% +% array and tabular environments: changes to `\verb+|+', |\hline|, +% |\cline|, and |\vline|, +% added 8 Jun 88 +% \begin{macrocode} +\def\@arrayrule{\if@visible\@addtopreamble{\hskip -.5\arrayrulewidth + \vrule \@width \arrayrulewidth\hskip -.5\arrayrulewidth}\fi} +% \end{macrocode} +% +% \changes{v2.3t}{1996/01/31}{Change in \cs{cline} calling interface} +% \begin{macrocode} +\def\cline#1{\if@visible\@cline#1\@nil\fi} + +\def\hline{\noalign{\ifnum0=`}\fi + \if@visible \hrule \@height \arrayrulewidth + \else \hrule \@width \z@ + \fi + \futurelet \reserved@a\@xhline} + +\def\vline{\if@visible \vrule \@width \arrayrulewidth + \else \vrule \@width \arrayrulewidth \@height \z@ + \@depth \z@ \fi} +% \end{macrocode} +% +% \begin{macrocode} +\message{output,} +% \end{macrocode} +% +% \subsubsection{Changes to \LaTeX{} output routine} +% +%\begin{verbatim} +% \@makecol == +% BEGIN +% % Following test added for slides to check if extra page +% if @makingslides = T +% then if \c@page > 0 +% then if \c@note > 0 +% then type 'Note \thenote too long.' +% else if \c@overlay > 0 +% then type 'Overlay \theoverlay too long.' +% else type 'Slide \theslide too long' +% fi fi fi fi +% ifvoid \insert\footins +% then \@outputbox := \box255 +% else \@outputbox := \vbox {\unvbox255 +% \vskip \skip\footins +% \footnoterule +% \unvbox\@footinsert +% } +% fi +% \@freelist :=G \@freelist * \@midlist +% \@midlist :=G empty +% \@combinefloats +% \@outputbox := \vbox to \@colht{\boxmaxdepth := \maxdepth +% \vfil %%\vfil added for slides +% \unvbox\@outputbox +% \vfil } %%\vfil added for slides +% \maxdepth :=G \@maxdepth +% END +%\end{verbatim} +% FMi simple hack to allow none centered slides Should be revised +% of course. +% \begin{macrocode} +\let\@topfil\vfil + +\def\@makecol{\if@makingslides\ifnum\c@page>\z@ \@extraslide\fi\fi +\ifvoid\footins \setbox\@outputbox\box\@cclv \let\@botfil\vfil + \else\let\@botfil\relax\setbox\@outputbox + \vbox{\unvbox\@cclv\vfil + \vskip\skip\footins\footnoterule\unvbox\footins\vskip + \z@ plus.1fil\relax}\fi + \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats + \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth + \@topfil\unvbox\@outputbox\@botfil}\global\maxdepth\@maxdepth} + +\def\@extraslide{\ifnum\c@note>\z@ + \ClassWarning{slides}{Note \thenote\space too long}\else + \ifnum\c@overlay>\z@ + \ClassWarning{slides}{Overlay \theoverlay\space too long}\else + \ClassWarning{slides}{Slide \theslide\space too long}\fi\fi} +% \end{macrocode} +% +% \begin{macrocode} +\message{init} +% \end{macrocode} +% +% +% \subsubsection{Special \SLiTeX{} initializations} +% +%FMi why not allow for ref's ? +% \begin{macrocode} +% \nofiles + +\@visibletrue +%</cmd> +% \end{macrocode} +% +% +% \Finale +% +\endinput diff --git a/Master/texmf-dist/source/latex/base/slides.ins b/Master/texmf-dist/source/latex/base/slides.ins new file mode 100644 index 00000000000..753528f9f29 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/slides.ins @@ -0,0 +1,197 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\Msg{*** Generating slide cmd files and styles ***} + +\generate{ + \file{slides.cls}{ + \from{slides.dtx}{class}} + \file{slides.def}{ + \from{slides.dtx}{cmd}} + } + +\Msg{*** Generating default fonts setup file for slides ***} + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +Details of how to use a configuration file to modify this part of +the system are in the document `cfgguide.tex'. + + +\endpreamble + + + +\Msg{*** Generating .fd files ***} + +\declarepreamble\fdpreamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +In particular, permission is granted to customize the declarations in +this file to serve the needs of your installation. + +However, NO PERMISSION is granted to distribute a modified version +of this file under its original name. + +\endpreamble + +\usedir{tex/latex/base} + +\generate{ + \file{sfonts.def}{ + \from{slifonts.fdd}{main}} + \usepreamble\fdpreamble % change of preamble ! + \file{ot1lcmss.fd}{ + \from{slifonts.fdd}{lcmss,fd}} + \file{ot1lcmtt.fd}{ + \from{slifonts.fdd}{lcmtt,fd}} + \file{omllcmm.fd}{ + \from{slifonts.fdd}{lcmm,fd}} + \file{omslcmsy.fd}{ + \from{slifonts.fdd}{lcmsy,fd}} + \file{omxlcmex.fd}{ + \from{slifonts.fdd}{lcmex,fd}} + \file{ullasy.fd}{ + \from{slifonts.fdd}{llasy,fd}} + } + + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* files into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space All *.fd} +\Msg{* \space\space All *.def} +\Msg{* \space\space slides.cls} +\Msg{*} +\Msg{* To produce the documentation run the files ending with} +\Msg{* `.drv' through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing} +\Msg{***********************************************************} +} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/slifonts.fdd b/Master/texmf-dist/source/latex/base/slifonts.fdd new file mode 100644 index 00000000000..a3e3f3f1971 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/slifonts.fdd @@ -0,0 +1,485 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +%\iffalse This is a META comment +% +% File `slifonts.fdd'. +% Copyright (C) 1989-1998 LaTeX3 project, Frank Mittelbach and +% Rainer Sch\"opf, all rights reserved. +% +%<lcmss&!ec>\ProvidesFile{ot1lcmss.fd} +%<lcmtt&!ec>\ProvidesFile{ot1lcmtt.fd} +%<lcmss&ec>\ProvidesFile{t1lcmss.fd} +%<lcmtt&ec>\ProvidesFile{t1lcmtt.fd} +%<lcmm, >\ProvidesFile{omllcmm.fd} +%<lcmsy, >\ProvidesFile{omslcmsy.fd} +%<lcmex, >\ProvidesFile{omxlcmex.fd} +%<llasy, >\ProvidesFile{ullasy.fd} +%<main, >\ProvidesFile{sfonts.def} +%<*driver, > + \ProvidesFile{sfonts.drv} +%</driver, > + [1998/06/12 v2.2e Standard LaTeX slide font definitions] +% +%<*driver> +\documentclass{ltxdoc} +\GetFileInfo{sfonts.drv} +\providecommand\dst{\expandafter{\normalfont\scshape docstrip}} +\title{The file \texttt{slifonts.fdd} for use with + \LaTeXe.\thanks{This file has version + number \fileversion, dated \filedate.}} +\date{\filedate} +\author{Frank Mittelbach \and Rainer Sch\"opf} +\begin{document} +\maketitle + \DocInput{slifonts.fdd} +\end{document} +%</driver> +% +%\fi +% +% \CheckSum{78} +% +% +% \changes{v2.2c}{1997/05/26}{Removed spaces in and around arguments +% to \cs{DeclareFontShape} and \cs{EC@family}.} +% \changes{v2.2a}{1997/01/15} +% {ec font support added} +% \changes{v2.1m}{1996/11/20} +% {lowercase fd filenames /1044} +% \changes{v2.1l}{1996/05/17} +% {Force \cs{hyphenchar} of OT1 fonts to 45, in case +% \cs{defaulthyphenchar} has changed.} +% \changes{v2.1l}{1996/05/17} +% {Remove some spurious extra empty arguments to +% \cs{DeclareFontFamily} calls} +% \changes{v2.1j}{1995/09/27}{Globally replaced scale factor 19.91 by +% 19.907 in \cs{DeclareFontShape}, as this gives better +% rounded font sizes at 600dpi (suggested by Denis Roegel).} +% \changes{v2.1i}{1995/09/19}{Corrected names of .fd files in argument +% to \cs{ProvidesFile} commands.} +% \changes{v2.1h}{1994/05/12}{Added \cs{ProvidesFile} commands.} +% \changes{v2.1c}{1993/12/17}{Added size 8 to allow for \cs{LaTeX} +% logo.} +% \changes{v2.1a}{1993/12/13}{Removed \cs{CodelineIndex} from the +% driver code.} +% \changes{v2.1e}{1994/01/31}{Corrected extension in typeout.} +% \changes{v2.1f}{1994/02/28}{Moved driver further up.} +% +% +% \section{Introduction} +% +% This file contains the external font information for special +% variants of the the Computer Modern fonts to be used for overhead +% slides. They allow to produce slides in a similar fashion as it was +% originally done by \SliTeX{}. +% +% With \LaTeXe{} it is now no longer necessary to maintain a special +% format. Instead the standard format may be used and internally only +% different font definition files come into play. +% +% Note, that that you therefore can easily produce slides in different +% fonts just by calling an appropriate package (like |times|) in +% your |\usepackage| command. This works, for example, with all +% fonts that are defined to be scalable (eg PostScript fonts) since +% they can be scaled to any size. +% +% However, minor styles like |pandora| won't work because the standard +% |.fd| files shipped with \LaTeXe{} only contain small sizes. You can, +% of course, produce additional sizes and change the |.fd| files +% accordingly, but in this case it might be better to distinguish +% |.fd| files for normal text and for slides by prefixing the family +% name with an |l| (see below). +% +% All the standard family names for \SliTeX{} fonts start out with +% with an |l| as the first character. This will distinguish them from +% text font families with similar names. +% +% In addition, we introduce an additional convention for shapes: if +% $x$ is a shape, then |I|$x$ represents the invisible form of the +% shape. This is used by the color separation macros and the +% |\invisible| command of the slides style file. +% +% +% \StopEventually{} +% +% \section{A driver for this document} +% +% The next bit of code contains the documentation driver file for +% \TeX{}, i.e., the file that will produce the documentation you are +% currently reading. It will be extracted from this file by the +% \dst{} program. +% \changes{v2.1b}{1993/12/14}{Corrected \cs{documentclass}.} +% \begin{macrocode} +%<*driver> +\documentclass{ltxdoc} +%\DisableCrossrefs % Say \DisableCrossrefs if index is ready +\RecordChanges % Gather update information +%\OnlyDescription % comment out for implementation details +%\OldMakeindex % use if your MakeIndex is pre-v2.9 +\begin{document} + \DocInput{slifonts.fdd} +\end{document} +%</driver> +% \end{macrocode} +% +% +% \section{The \dst{} modules} +% +% The following modules are used to direct \dst{} in +% generating external files: +% \begin{center} +% \begin{tabular}{ll} +% driver & produce a documentation driver file \\ +% main & generate \texttt{sfonts.def} \\ +% fd & produce a font definition file \\ +% ec & Use the extended EC font set rather than cm \\[2pt] +% lccr & Concrete Roman slide sizes \\ +% lcmss & Computer Modern Sans slide sizes \\ +% lcmtt & Computer Modern Typewriter slide sizes \\ +% lcmm & Computer Modern Math italic slide sizes \\ +% lcmm & Computer Modern Math symbols slide sizes \\ +% lcmex & Computer Modern Math extension symbols slide sizes \\ +% llasy & \LaTeX{} symbols slide sizes \\ +% \end{tabular} +% \end{center} +% A typical \dst{} command file would then have entries like: +% \begin{verbatim} +%\generateFile{OMSlcmsy.fd}{t}{\from{slifonts.fdd}{lcmsy,fd}} +%\end{verbatim} +% +% \section{The font definition files} +% +% +% \subsection{Concrete Roman} +% +% \changes{v2.2b}{1997/02/25} +% {typo fixed in cccsc10. latex/2395} +% \begin{macrocode} +%<*lccr> +\DeclareFontFamily{OT1}{lccr}{\hyphenchar\font45 } +\DeclareFontShape{OT1}{lccr}{m}{sc}{% + <7><8><10><12><13.82><16.59><19.907><23.89><28.66><34.4><41.28>cccsc10% + }{} +\DeclareFontShape{OT1}{lccr}{m}{sl}{% + <7><8><10><12><13.82><16.59><19.907><23.89><28.66><34.4><41.28>ccslc9% + }{} +\DeclareFontShape{OT1}{lccr}{m}{n}{% + <7><8><10><12><13.82><16.59><19.907><23.89><28.66><34.4><41.28>ccr8% + }{} +\DeclareFontShape{OT1}{lccr}{m}{In}{% + <7><8><10><12><13.82><16.59><19.907><23.89><28.66><34.4><41.28>iccr8% + }{} +%</lccr> +% \end{macrocode} +% +% \subsection{Computer Modern Sans} +% +% \begin{macrocode} +%<*lcmss> +%<!ec> \DeclareFontFamily{OT1}{lcmss}{\hyphenchar\font45 } +%<ec> \DeclareFontFamily{T1}{lcmss}{} +% \end{macrocode} +% +% \begin{macrocode} +%<!ec> \DeclareFontShape{OT1}{lcmss}{m}{n}{% +%<ec> \DeclareFontShape{T1}{lcmss}{m}{n}{% + <7><8><10><12><13.82><16.59><19.907><23.89><28.66><34.4><41.28>% +%<!ec> lcmss8% +%<ec> eclq8% + }{} +% \end{macrocode} +% +% \begin{macrocode} +%<!ec> \DeclareFontShape{OT1}{lcmss}{m}{In}{% +%<ec> \DeclareFontShape{T1}{lcmss}{m}{In}{% + <7><8><10><12><13.82><16.59><19.907><23.89><28.66><34.4><41.28>% +%<!ec> ilcmss8% +%<ec> ieclq8% + }{} +% \end{macrocode} +% +% \begin{macrocode} +%<!ec> \DeclareFontShape{OT1}{lcmss}{m}{sl}{% +%<ec> \DeclareFontShape{T1}{lcmss}{m}{sl}{% + <13.82><16.59><19.907><23.89><28.66><34.4><41.28>% +%<!ec> lcmssi8% +%<ec> ecli8% + }{} +% \end{macrocode} +% +% \begin{macrocode} +%<!ec> \DeclareFontShape{OT1}{lcmss}{m}{Isl}{% +%<ec> \DeclareFontShape{T1}{lcmss}{m}{Isl}{% + <13.82><16.59><19.907><23.89><28.66><34.4><41.28>% +%<!ec> ilcmssi8% +%<ec> iecli8% + }{} +% \end{macrocode} +% +% \begin{macrocode} +%<!ec> \DeclareFontShape{OT1}{lcmss}{m}{it}{% +%<ec> \DeclareFontShape{T1}{lcmss}{m}{it}{% + <->sub*lcmss/m/sl}{} +% \end{macrocode} +% +% \begin{macrocode} +%<!ec> \DeclareFontShape{OT1}{lcmss}{m}{Iit}{% +%<ec> \DeclareFontShape{T1}{lcmss}{m}{Iit}{% + <->sub*lcmss/m/Isl}{} +% \end{macrocode} +% +% \begin{macrocode} +%<!ec> \DeclareFontShape{OT1}{lcmss}{bx}{n}{% +%<ec> \DeclareFontShape{T1}{lcmss}{bx}{n}{% + <13.82><16.59><19.907><23.89><28.66><34.4><41.28>% +%<!ec> lcmssb8% +%<ec> eclb8% + }{} +% \end{macrocode} +% +% \begin{macrocode} +%<!ec> \DeclareFontShape{OT1}{lcmss}{bx}{In}{% +%<ec> \DeclareFontShape{T1}{lcmss}{bx}{In}{% + <13.82><16.59><19.907><23.89><28.66><34.4><41.28>% +%<!ec> ilcmssb8% +%<ec> ieclb8% + }{} +% \end{macrocode} +% +% EC fonts have a bold slanted font for the slides class. +% \begin{macrocode} +%<*ec> +\DeclareFontShape{T1}{lcmss}{bx}{sl}{% + <13.82><16.59><19.907><23.89><28.66><34.4><41.28>% + eclo8% + }{} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareFontShape{T1}{lcmss}{bx}{Isl}{% + <13.82><16.59><19.907><23.89><28.66><34.4><41.28>% + ieclo8% + }{} +% \end{macrocode} +% \begin{macrocode} +\DeclareFontShape{T1}{lcmss}{bx}{it}{% + <->sub*lcmss/bx/sl}{} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareFontShape{T1}{lcmss}{bx}{Iit}{% + <->sub*lcmss/bx/Isl}{} +% \end{macrocode} +% +% \begin{macrocode} +%</ec> +% \end{macrocode} +% +% There are extra substitutions for the shape |ui| which are needed +% for |\pounds| to not come out as a \$ sign (mostly). +% \changes{v2.1k}{1995/10/31}{Added substitutions to make \cs{pounds} +% work right in slides.} +% \begin{macrocode} +%<*!ec> +\DeclareFontShape{OT1}{lcmss}{m}{ui}{% + <->sub*cmr/m/ui}{} +\DeclareFontShape{OT1}{lcmss}{bx}{ui}{% + <->sub*cmr/m/ui}{} +%</!ec> +%</lcmss> +% \end{macrocode} +% +% \subsection{Computer Modern Typewriter} +% +% \begin{macrocode} +%<*lcmtt> +%<!ec> \DeclareFontFamily{OT1}{lcmtt}{\hyphenchar\font\m@ne} +%<ec> \DeclareFontFamily{T1}{lcmtt}{\hyphenchar\font\m@ne} +% \end{macrocode} +% +% \begin{macrocode} +%<!ec> \DeclareFontShape{OT1}{lcmtt}{m}{n}{% +%<ec> \DeclareFontShape{T1}{lcmtt}{m}{n}{% + <13.82><16.59><19.907><23.89><28.66><34.4><41.28>% +%<!ec> cmtt8% +%<ec> ecltt8% + }{} +% \end{macrocode} +% +% \begin{macrocode} +%<!ec> \DeclareFontShape{OT1}{lcmtt}{m}{In}{% +%<ec> \DeclareFontShape{T1}{lcmtt}{m}{In}{% + <13.82><16.59><19.907><23.89><28.66><34.4><41.28>% +%<!ec> icmtt8% +%<ec> iecltt8% + }{} +% \end{macrocode} +% +% \begin{macrocode} +%<!ec> \DeclareFontShape{OT1}{lcmtt}{m}{it}{% +%<ec> \DeclareFontShape{T1}{lcmtt}{m}{it}{% + <13.82><16.59><19.907><23.89><28.66><34.4><41.28>% +%<!ec> cmitt10% +%<ec> ecit1000% + }{} +% \end{macrocode} +% There are extra substitutions for the shape |ui| which are needed +% for |\pounds| to not come out as a \$ sign (mostly). +% \changes{v2.1k}{1995/10/31}{Added substitutions to make \cs{pounds} +% work right in slides.} +% \begin{macrocode} +%<*!ec> +\DeclareFontShape{OT1}{lcmtt}{m}{ui}{% + <->sub*cmtt/m/it}{} +\DeclareFontShape{OT1}{lcmtt}{bx}{ui}{% + <->sub*cmtt/m/it}{} +%</!ec> +%</lcmtt> +% \end{macrocode} +% +% \subsection{Computer Modern Math} +% +% \begin{macrocode} +%<*lcmm> +\DeclareFontFamily{OML}{lcmm}{\skewchar\font'177} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareFontShape{OML}{lcmm}{m}{it}{% + <7><8><10><12><13.82><16.59><19.907><23.89><28.66><34.4><41.28>cmmi8% + }{} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareFontShape{OML}{lcmm}{m}{Iit}{% + <7><8><10><12><13.82><16.59><19.907><23.89><28.66><34.4><41.28>icmmi8% + }{} +%</lcmm> +% \end{macrocode} +% +% \subsection{Computer Modern Symbol} +% +% \begin{macrocode} +%<*lcmsy> +\DeclareFontFamily{OMS}{lcmsy}{\skewchar\font'60} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareFontShape{OMS}{lcmsy}{m}{n}{% + <7><8><10><12><13.82><16.59><19.907><23.89><28.66><34.4><41.28>cmsy8% + }{} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareFontShape{OMS}{lcmsy}{m}{In}{% + <7><8><10><12><13.82><16.59><19.907><23.89><28.66><34.4><41.28>icmsy8% + }{} +%</lcmsy> +% \end{macrocode} +% +% \subsection{Computer Modern large symbols} +% +% \changes{v2.1g}{1994/03/01}{Removed extra pair of curly braces +% at end of \cs{DeclareFontFamily} command.} +% \begin{macrocode} +%<*lcmex> +\DeclareFontFamily{OMX}{lcmex}{} +\DeclareFontShape{OMX}{lcmex}{m}{n}{% + <->sfixed*[17.28]cmex10% + }{} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareFontShape{OMX}{lcmex}{m}{In}{% + <->sfixed*[17.28]icmex10% + }{} +%</lcmex> +% \end{macrocode} +% +% \subsection{\LaTeX{} symbols} +% +% \changes{v2.2d}{1997/10/20}{Removed superfluous pair of braces at +% end of \cs{DeclareFontFamily} command.} +% \begin{macrocode} +%<*llasy> +\DeclareFontFamily{U}{llasy}{} +\DeclareFontShape{U}{llasy}{m}{n}{% + <12><13.82><16.59><19.907><23.89><28.66><34.4><41.28>lasy8% +}{} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareFontShape{U}{llasy}{m}{In}{% + <13.82><16.59><19.907><23.89><28.66><34.4><41.28>ilasy8% +}{} +%</llasy> +% \end{macrocode} +% +% \section{Setting defaults} +% +% The following statements go into the file \texttt{sfonts.def} +% which plays a r\^ole similar to \texttt{fontdef.ltx}. Thus, you may +% want to produce your own local variant of it if you intend to use +% different fonts in your slides. +% \changes{v2.0b}{1993/03/09}{Added \cs{fd@prefix} for \cs{input}} +% \changes{v2.2a}{1997/01/15}{lowercase fd file} +% \begin{macrocode} +%<*main> +\DeclareErrorFont{OT1}{lcmss}{m}{n}{19.907} +\DeclareFontSubstitution{OT1}{lcmss}{m}{n} +\input ot1lcmss.fd +%</main> +% \end{macrocode} +% +% +% The next line goes into all files and in addition prevents \dst{} +% from adding any further code from the main source file (such as a +% character table. +% \begin{macrocode} +\endinput +% \end{macrocode} +% +% \Finale +% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} diff --git a/Master/texmf-dist/source/latex/base/source2e.tex b/Master/texmf-dist/source/latex/base/source2e.tex new file mode 100644 index 00000000000..facf8547381 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/source2e.tex @@ -0,0 +1,477 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.2 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.2 or later is part of all distributions of LaTeX +% version 1999/12/01 or later. +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% \fi + +% This document will typeset the LaTeX sources as a single document. +% This will produce quite a large file (roughly 555 pages) and may +% take a long time. +% +% Some notes on processing this document are contained at the end +% of this document, after \end{document} +% +% DPC 1997/11/17 +% +% First a special index style for makeindex +% + +\begin{filecontents}{source2e.ist} +actual '=' +quote '!' +level '>' +preamble +"\n \\begin{theindex} \n \\makeatletter\\scan@allowedfalse\n" +postamble +"\n\n \\end{theindex}\n" +item_x1 "\\efill \n \\subitem " +item_x2 "\\efill \n \\subsubitem " +delim_0 "\\pfill " +delim_1 "\\pfill " +delim_2 "\\pfill " +% The next lines will produce some warnings when +% running Makeindex as they try to cover two different +% versions of the program: +lethead_prefix "{\\bfseries\\hfil " +lethead_suffix "\\hfil}\\nopagebreak\n" +lethead_flag 1 +heading_prefix "{\\bfseries\\hfil " +heading_suffix "\\hfil}\\nopagebreak\n" +headings_flag 1 + +% and just for source2e: +% Remove R so I is treated in sequence I J K not I II III +page_precedence "rnaA" +\end{filecontents} + + + +\documentclass{ltxdoc} + +\listfiles + +% Do not index some TeX primitives, and some common plain TeX commands. + +\DoNotIndex{\def,\long,\edef,\xdef,\gdef,\let,\global} +\DoNotIndex{\if,\ifnum,\ifdim,\ifcat,\ifmmode,\ifvmode,\ifhmode,% + \iftrue,\iffalse,\ifvoid,\ifx,\ifeof,\ifcase,\else,\or,\fi} +\DoNotIndex{\box,\copy,\setbox,\unvbox,\unhbox,\hbox,% + \vbox,\vtop,\vcenter} +\DoNotIndex{\@empty,\immediate,\write} +\DoNotIndex{\egroup,\bgroup,\expandafter,\begingroup,\endgroup} +\DoNotIndex{\divide,\advance,\multiply,\count,\dimen} +\DoNotIndex{\relax,\space,\string} +\DoNotIndex{\csname,\endcsname,\@spaces,\openin,\openout,% + \closein,\closeout} +\DoNotIndex{\catcode,\endinput} +\DoNotIndex{\jobname,\message,\read,\the,\m@ne,\noexpand} +\DoNotIndex{\hsize,\vsize,\hskip,\vskip,\kern,\hfil,\hfill,\hss} +\DoNotIndex{\m@ne,\z@,\z@skip,\@ne,\tw@,\p@} +\DoNotIndex{\dp,\wd,\ht,\vss,\unskip} + +% Set up the Index and Change History to use \part +\IndexPrologue{\part*{Index}% + \markboth{Index}{Index}% + \addcontentsline{toc}{part}{Index}% + The italic numbers denote the pages where the + corresponding entry is described, + numbers underlined point to the definition, + all others indicate the places where it is used.} + +\GlossaryPrologue{\part*{Change History}% +% Allow control names to be hyphenated here... + {\GlossaryParms\ttfamily\hyphenchar\font=`\-}% + \markboth{Change History}{Change History}% + \addcontentsline{toc}{part}{Change History}} + +% The standard \changes command modified slightly to better cope with +% this multiple file document. +\makeatletter +\def\changes@#1#2#3{% + \let\protect\@unexpandable@protect + \edef\@tempa{\noexpand\glossary{#2\space\currentfile\space#1\levelchar + \ifx\saved@macroname\@empty + \space + \actualchar + \generalname + \else + \expandafter\@gobble + \saved@macroname + \actualchar + \string\verb\quotechar*% + \verbatimchar\saved@macroname + \verbatimchar + \fi + :\levelchar #3}}% + \@tempa\endgroup\@esphack} +\makeatother + +% Produce a Change Log and (2 column) Index. +\RecordChanges +\CodelineIndex +\EnableCrossrefs +\setcounter{IndexColumns}{2} + +% Needed for documentation in ltoutenc.dtx +\usepackage{textcomp} + +\begin{document} + \title{The \LaTeXe\ Sources} + \author{% + Johannes Braams\\ + David Carlisle\\ + Alan Jeffrey\\ + Leslie Lamport\\ + Frank Mittelbach\\ + Chris Rowley\\ + Rainer Sch\"opf} + +% This command will be used to input the patch file +% if that file exists. +\newcommand{\includeltpatch}{% + \def\currentfile{ltpatch.ltx} + \part{ltpatch} + {\let\ttfamily\relax + \xdef\filekey{\filekey, \thepart={\ttfamily\currentfile}}}% + Things we did wrong\ldots + \IndexInput{ltpatch.ltx}} + + + +% Get the date from ltvers.dtx +\makeatletter +\let\patchdate=\@empty +\begingroup + \def\ProvidesFile#1\fmtversion#2{\date{#2}\endinput} + \input{ltvers.dtx} +\global\let\X@date=\@date + +% Add the patch version if available. + \long\def\Xdef#1#2#3\def#4#5{% + \xdef\X@date{#2}% + \xdef\patchdate{#5}% + \endinput}% + \InputIfFileExists{ltpatch.ltx} + {\let\def\Xdef}{\global\let\includeltpatch\relax} +\endgroup + +\ifx\@date\X@date + \def\Xpatch{0} + \ifx\patchdate\Xpatch\else + \edef\@date{\@date\space Patch level \patchdate} + \fi +\else + \@warning{ltpatch.ltx does not match ltvers.dtx!} + \let\includeltpatch\relax +\fi +\makeatother + + \pagenumbering{roman} + \maketitle + \renewcommand\maketitle{} + + \tableofcontents + + \clearpage + + \pagenumbering{arabic} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% Each of the following \DocInclude lines includes a file with extension +% .dtx. Each of these files may be typeset separately. For instance +% latex ltboxes.dtx +% will typeset the source of the LaTeX box commands. +% +% If this file is processed, each of these separate dtx files will be +% contained as a part of a single document. Using ltxdoc.cfg you can +% then optionally produce a combined index and/or change history for +% the entire source of the format file. Note that such a document will +% be quite large (about 555 pages). +% + + \DocInclude{ltdirchk} % System dependant initialisation + + \DocInclude{ltplain} % LaTeX version of Knuth's plain.tex + + \DocInclude{ltvers} % Current version date + + \DocInclude{ltdefns} % Initial definitions. + + \DocInclude{ltalloc} % Allocation of counters and others. + + \DocInclude{ltcntrl} % Program control macros. + + \DocInclude{lterror} % Error handling. + + \DocInclude{ltpar} % Paragraphs. + + \DocInclude{ltspace} % Spacing, line and page breaking. + + \DocInclude{ltlogos} % Logos. + + \DocInclude{ltfiles} % \input files and related commands + + \DocInclude{ltoutenc} % Output encoding interface + + \DocInclude{ltcounts} % Counters + + \DocInclude{ltlength} % Lengths + + \DocInclude{ltfssbas} % NFSS Base macros + + \DocInclude{ltfsstrc} % NFSS Tracing (and tracefnt.sty) + + \DocInclude{ltfsscmp} % NFSS1 Compatibility + + \DocInclude{ltfssdcl} % NFSS Declarative interface + + \DocInclude{ltfssini} % NFSS Initialisation + + \DocInclude{fontdef} % fonttext.ltx/fontmath.ltx + + \DocInclude{preload} % preload.ltx + + \DocInclude{ltfntcmd} % \textrm etc + + \DocInclude{ltpageno} % Page numbering + + \DocInclude{ltxref} % Cross referencing + + \DocInclude{ltmiscen} % Miscellaneous environment definitions. + + \DocInclude{ltmath} % Mathematics set up. + + \DocInclude{ltlists} % List and related environments + + \DocInclude{ltboxes} % Parbox and friends + + \DocInclude{lttab} % Tabbing tabular and array + + \DocInclude{ltpictur} % Picture mode + + \DocInclude{ltthm} % Theorem environments + + \DocInclude{ltsect} % Sectioning + + \DocInclude{ltfloat} % Floats + + \DocInclude{ltidxglo} % Index and Glossary + + \DocInclude{ltbibl} % Bibliography + + \DocInclude{ltpage} % \pagestyle \raggedbottom \sloppy + + \DocInclude{ltoutput} % Output routine + + \DocInclude{ltclass} % Package & Class interface + + \DocInclude{lthyphen} % Hyphenation (hyphen.ltx). + + \DocInclude{ltfinal} % Last minute initialisations and dump + + \includeltpatch % Corrections distributed after the full release + +% Stop here if ltxdoc.cfg says \AtEndOfClass{\OnlyDescription} +\StopEventually{\end{document}} + +\clearpage +\pagestyle{headings} + +% Make TeX shut up. +\hbadness=10000 +\newcount\hbadness +\hfuzz=\maxdimen + +\typeout{% + Produce change log with^^J% + makeindex -s gglo.ist -o source2e.gls source2e.glo} + + +\PrintChanges + +\clearpage + +% makeindex needs a symbol between the parts of composite page numbers +% but we dont want one, so: +\typeout{% + Produce index with^^J% + makeindex -s source2e.ist source2e.idx} + +\begingroup +\def\endash{--} +\catcode`\-\active +\def-{\futurelet\temp\indexdash} +\def\indexdash{\ifx\temp-\endash\fi} + +\PrintIndex +\endgroup + +% Make sure that the index is not printed twice +% (ltxdoc.cfg might have a second \PrintIndex command) +\let\PrintChanges\relax +\let\PrintIndex\relax + +\end{document} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +To use this file to produce a fully indexed source code +you need to execute the following (or equivalent) commands: + + latex source2e.tex + + makeindex -s source2e.ist source2e.idx + makeindex -s gglo.ist -o source2e.gls source2e.glo + + latex source2e.tex + latex source2e.tex + + +The makeindex style source2e.ist is used in place of the usual +doc gind.ist to ensure that I is used in the sequence I J K +not I II II, which would be the default makeindex behaviour. + +The third run with latex is only required to get the table of +contents entries for the change log and index. You may speed things up +by using the \includeonly mechanism so as not to typeset the source +files on the second run. This involves changing the file +ltxdoc.cfg +between the latex runs. + +The following unix script automates this. + (It could easily be ported to scripts for DOS or VMS, + rm is ReMove a file, and echo "..." > file writes ... to "file".) + + +After this script (after the second ==============) is a similar script +that will produce the documentation for all the files in the base +distribution that are *not* included in source2e.dvi. This second script +was requested, but before using it, beware it will take a long time! +It may however be modified as required, eg to not typeset the fdd files +or whatever... + +============== +#!/bin/sh + +rm -f source2e.gls source2e.ind source2e.toc + +# First run: +# Create new standard ltxdoc.cfg file +# Pass the (possibly empty) list of arguments supplied on the +# command line to article class. +# +# If you use A4 paper, running this script with argument +# a4paper +# may save about 30 pages. +# +echo "\PassOptionsToClass{$*}{article}" > ltxdoc.cfg + + +# Now LaTeX the file with this cfg file. +# +latex source2e.tex + + +# Make the Change log and Glossary. +# +makeindex -s source2e.ist source2e.idx +makeindex -s gglo.ist -o source2e.gls source2e.glo + + +# Second run: append \includeonly{} to ltxdoc.cfg to speed up things +# (this run needed only to get changes and index listed in .toc file) +# +# Note that the index will not be made incorrect by the insertion +# of the table of contents as the front matter uses a diferent page +# numbering scheme. +# +echo "\includeonly{}" >> ltxdoc.cfg + +latex source2e.tex + + +# Third and final run, to put everything together. +# First restore the cfg file: +# +echo "\PassOptionsToClass{$*}{article}" > ltxdoc.cfg +latex source2e.tex + + +============== +#!/bin/sh + +# Running this script will process all the dtx fdd and *guide.tex +# and ltnews*.tex files in the LaTeX distribution, except the dtx +# files included in source2e.tex. +# (The shell first script in the comments of source2e.tex will +# process those.) + +# Any command line arguments (eg a4paper) are taken as options to the +# article class. + +# This script is likely to take ages! + +echo "\PassOptionsToClass{$*}{article}" > ltxdoc.cfg +echo "\batchmode" >> ltxdoc.cfg + +# The next four lines produce full indexes and change logs +# you may not want those. +echo "\AtBeginDocument{\RecordChanges}" >> ltxdoc.cfg +echo "\AtEndDocument{\PrintChanges}" >> ltxdoc.cfg +echo "\AtBeginDocument{\CodelineIndex\EnableCrossrefs}" >> ltxdoc.cfg +echo "\AtEndDocument{\PrintIndex}" >> ltxdoc.cfg + +# If you do not want any code listings, just documentation, then instead +# of the above four lines, uncomment the following: +# echo "\AtBeginDocument{\OnlyDescription}" >> ltxdoc.cfg + +echo "\PassOptionsToClass{$*}{article}" > ltxguide.cfg +echo "\batchmode" >> ltxguide.cfg + +cp ltxguide.cfg ltnews.cfg + + +for i in *dtx *fdd *guide.tex ltnews*.tex +do +B=`basename $i .dtx` + +if (grep "Include{$B}" source2e.tex >/dev/null ; ) +then +echo In source2e: $i +else +echo latex $i + if (latex $i > /dev/null) + then + echo latex $i + latex $i > /dev/null + echo makeindex -s gind.ist $B.idx + makeindex -s gind.ist $B.idx > /dev/null 2> /dev/null + echo makeindex -s gglo.ist -o $B.gls $B.glo + makeindex -s gglo.ist -o $B.gls $B.glo > /dev/null 2> /dev/null + echo latex $i + latex $i > /dev/null + else + echo "!!! LaTeX ERROR: $i. (See $B.log.)" + fi +fi + +done diff --git a/Master/texmf-dist/source/latex/base/syntonly.dtx b/Master/texmf-dist/source/latex/base/syntonly.dtx new file mode 100644 index 00000000000..3f549590488 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/syntonly.dtx @@ -0,0 +1,289 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +%% \CheckSum{110} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +% +% +% \changes{v2.1a}{1994/03/10}{Update for \LaTeXe} +% +% \DoNotIndex{\@cclvi,\@cclv,\@gobble,\@gobbletwo,\@ifnextchar} +% \DoNotIndex{\@M,\@tempboxa,\advance,\alloc,\begingroup,\bgroup} +% \DoNotIndex{\box,\count@,\def,\do,\docdate,\egroup,\endgroup} +% \DoNotIndex{\fi,\filedate,\fileversion,\font,\fontdimen,\global} +% \DoNotIndex{\ifinner,\ifnum,\immediate,\let,\long,\loop,\m@ne} +% \DoNotIndex{\noexpand,\relax,\repeat,\scriptfont} +% \DoNotIndex{\scriptscriptfont,\setbox,\sixt@@n,\space,\textfont} +% \DoNotIndex{\toks,\toksdef,\write,\xdef,\z@}% +% +% +%\title{The file \texttt{syntonly.dtx} for use with +% \LaTeXe.\thanks{This file has version +% number \fileversion, dated \filedate.}\\[2pt] +% It contains the code for \texttt{syntonly.sty}} +% \author{Frank Mittelbach \and Rainer Sch\"opf} +% +% +% \maketitle +% +% This package implements the |\syntaxonly| declaration for \LaTeXe. +% This command can be used in the preamble for running a document +% through \LaTeX{} without actually getting any output. +% +% \StopEventually{} +% +% +% \section{Identification} +% +% We identify the package and its current version. +% \changes{v2.1b}{1995/04/22}{Removed surplus \cs{typeout} lines} +% \changes{v2.1c}{1996/06/14}{Rearange \cs{GetFileInfo} useage.} +% \changes{v2.1d}{1998/08/17}{(RmS) Minor documentation fixes.} +% +% \begin{macrocode} +%<package>\ProvidesPackage{syntonly} +%<*dtx> + \ProvidesFile{syntonly.dtx} +%</dtx> +%<*package|dtx> + [1999/09/17 v2.1e Standard LaTeX2e package] +%</package|dtx> +% \end{macrocode} +% +%\iffalse +% +% \section{The documentation driver file} +% +% The next bit of code contains the documentation driver file for +% \TeX{}, i.e., the file that will produce the documentation you are +% currently reading. It will be extracted from this file by the \dst{} +% program. +% \begin{macrocode} +%<*driver> +\documentclass{ltxdoc} +\GetFileInfo{syntonly.dtx} +\providecommand\dst{\expandafter{\normalfont\scshape docstrip}} +\begin{document} + \DocInput{syntonly.dtx} +\end{document} +%</driver> +% \end{macrocode} +%\fi +% +% +% \section{Implementation} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% \begin{macro}{\dummyft@} +% First of all we need to define the `dummy' font. +% \begin{macrocode} +\font\dummyft@=dummy \relax +% \end{macrocode} +% \end{macro} +% \changes{v2.1b}{1995/05/25}{Removed unneeded fontdimen settings for +% dummyft@} +% +% \begin{macro}{\ifsyntax@} +% Now we can define the `syntax only' feature. We define a switch +% |\if@syntax| so that any macro can always find out if it +% is really supposed to typeset text. Its default is to run in +% normal mode. +% \begin{macrocode} +\newif\ifsyntax@ +\syntax@false +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\syntaxonly} +% The |\syntaxonly| macro sets up everything for syntax +% checking. +% \begin{macrocode} +\def\syntaxonly{% +% \end{macrocode} +% First of all it sets the |syntax@| switch to \texttt{true}. +% \begin{macrocode} + \syntax@true +% \end{macrocode} +% Then it globally sets all fonts to the dummy font. These are: +% the current font outside math mode, +% \begin{macrocode} + \global\dummyft@ +% \end{macrocode} +% and the $3\times16$ math fonts for the $16$ math \emph{groups}. +% We use a loop to set these. +% \begin{macrocode} + \count@\sixt@@n + \loop + \ifnum\count@ >\z@ + \advance\count@\m@ne + \global\textfont\count@\dummyft@ + \global\scriptfont\count@\dummyft@ + \global\scriptscriptfont\count@\dummyft@ + \repeat +% \end{macrocode} +% Since all font changes occur either via |\selectfont| (in +% text or |\mathversion| (for math mode) it is sufficient +% to change these to no-ops. In addition we must prevent +% the loading of math fonts, this is done by making +% |\getanddefine@fonts| a no-op. +% \begin{macrocode} + \global\let\selectfont\relax + \global\let\mathversion\@gobble + \global\let\getanddefine@fonts\@gobbletwo +% \end{macrocode} +% We prevent \TeX{} from complaining about the dummy font +% having no characters. +% \begin{macrocode} + \tracinglostchars\z@ +% \end{macrocode} +% Then we disable the output routine, and set |\frenchspacing| +% (which is slightly faster than |\nonfrenchspacing|). +% Finally we set |\hbadness| to $10000$ to avoid overfull box +% messages. +% \begin{macrocode} + \nopages@ + \frenchspacing + \hbadness\@M} +% \end{macrocode} +% \end{macro} +% +% \changes{v2.1b}{1995/05/25}{Removed non-outer newtoks@: newtoks is no +% longer outer} +% +% \begin{macro}{\nopages@} +% \changes{v1.0b}{1990/01/14}{Rewrite of the \cs{nopages@} macro to +% correctly handle footnote insertions, floats and marginpars.} +% The |\nopages@| macro disables the \LaTeX{} output routine. +% To this end we define a very simple output routine that empties +% the output \emph{and} footnote boxes (remember that the latter +% are insertions. +% \begin{macrocode} +\def\nopages@{% + \output {\setbox\z@\box\@cclv + \setbox\z@\box\footins + \deadcycles\z@}% +% \end{macrocode} +% Then we protect it against definition by a style file. +% \changes{v2.1b}{1995/05/25}{newtoks is no longer outer} +% \begin{macrocode} + \newtoks\output +% \end{macrocode} +% But this is not enough: normally the \LaTeX{} output routine +% is responsible for dealing with floating objects. +% We therefore also redefine the internal macros for handling +% floats and marginpars. +% \begin{macrocode} + \def\@xfloat##1[##2]{% +% \end{macrocode} +% There are a few things that have to be retained: +% the definition of |\@captype| since it is used by the +% |\caption| command, +% \changes{v1.0c}{1990/01/16}{Definition of \cs{@captype} added.} +% \begin{macrocode} + \def\@captype{##1}% +% \end{macrocode} +% the error message issued when not in outer paragraph mode, +% \begin{macrocode} + \ifinner\@parmoderr\fi +% \end{macrocode} +% and the |\@parboxrestore| command for the body of the +% float. This is necessary since it restores the original +% definitions of important commands like |\par| or |\\|. +% \begin{macrocode} + \setbox\@tempboxa\vbox\bgroup\@parboxrestore}% +% \end{macrocode} +% |\end@float| must now only close the brace: +% \begin{macrocode} + \let\end@float\egroup +% \end{macrocode} +% The redefinition of the |\marginpar| command is a bit more +% complicated since we have to check for the optional argument. +% First we redefine the command itself: +% \begin{macrocode} + \def\marginpar{\ifinner\@parmoderr\fi +% \end{macrocode} +% We open a group so that everything gathered in a temporary box +% can easily be thrown away by closing it again (see below). +% \begin{macrocode} + \begingroup \@ifnextchar [\@xmpar\@ympar} +% \end{macrocode} +% |\@xmpar| and |\@ympar| are now defined similar to +% |\@xfloat| above. +% If an optional argument is present |\@xmpar| typesets +% it in a temporary box that is thrown away later. +% Then it calls up |\@ympar| to process |\marginpar|'s +% argument. +% \changes{v1.0d}{1990/01/21}{Added forgotten \cs{vbox}.} +% \begin{macrocode} + \long\def\@xmpar[##1]{% + \setbox\@tempboxa\vbox{\@parboxrestore ##1}\@ympar}% +% \end{macrocode} +% |\@ympar| gathers its argument in the same temporary box +% and throws away its contents by closing the group opened up in +% |\marginpar| above. +% \changes{v1.0d}{1990/01/21}{Added forgotten \cs{vbox}.} +% \begin{macrocode} + \long\def\@ympar##1{% + \setbox\@tempboxa\vbox{\@parboxrestore ##1}\endgroup}% +% \end{macrocode} +% And that's all we had to do. +% \begin{macrocode} +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@preamblecmds} +% We disable the use of the |\syntaxonly| command after +% |\begin{document}| +% \begin{macrocode} +\@onlypreamble\syntaxonly +%</package> +% \end{macrocode} +% \end{macro} +% +% \Finale + +\endinput diff --git a/Master/texmf-dist/source/latex/base/syntonly.ins b/Master/texmf-dist/source/latex/base/syntonly.ins new file mode 100644 index 00000000000..b4aaa71c761 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/syntonly.ins @@ -0,0 +1,80 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of docstrip commands ------------------ +%% + +\input docstrip + +\preamble + +This is a generated file. + +Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +The LaTeX3 Project and any individual authors listed elsewhere +in this file. + +This file was generated from file(s) of the LaTeX base system. +-------------------------------------------------------------- + +It may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version 1.3 +of this license or (at your option) any later version. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +This file has the LPPL maintenance status "maintained". + +This file may only be distributed together with a copy of the LaTeX +base system. You may however distribute the LaTeX base system without +such generated files. + +The list of all files belonging to the LaTeX base distribution is +given in the file `manifest.txt'. See also `legal.txt' for additional +information. + +The list of derived (unpacked) files belonging to the distribution +and covered by LPPL is defined by the unpacking scripts (with +extension .ins) which are part of the distribution. +\endpreamble + +\keepsilent +\usedir{tex/latex/base} + +\generateFile{syntonly.sty}{t}{% + \from{syntonly.dtx}{package}} + +\endbatchfile + diff --git a/Master/texmf-dist/source/latex/base/unpack.ins b/Master/texmf-dist/source/latex/base/unpack.ins new file mode 100644 index 00000000000..e2e47214875 --- /dev/null +++ b/Master/texmf-dist/source/latex/base/unpack.ins @@ -0,0 +1,128 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +%% The LaTeX3 Project and any individual authors listed elsewhere +%% in this file. +%% +%% This file is part of the LaTeX base system. +%% ------------------------------------------- +%% +%% It may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% This file has the LPPL maintenance status "maintained". +%% +%% In particular, NO PERMISSION is granted to modify the contents of this +%% file since it contains the legal notices that are placed in the files +%% it generates. +%% +%% The list of all files belonging to the LaTeX base distribution is +%% given in the file `manifest.txt'. See also `legal.txt' for additional +%% information. +%% +%% +%% +%% +%% --------------- start of bootstrap commands ------------------ +%% +%% +%% LaTeX 2e installation script (concurrent version) +\let\documentclass\undefined +\input ltdirchk.dtx +\input docstrip.dtx + +{ +\def\ProvidesFile#1\end#2{} +\def\everyjob#1\endinput{} +\@@input ltvers.dtx +\Msg{**********************************************} +\Msg{*} +\Msg{* Welcome to the Installation routine of} +\Msg{*} +\Msg{* \space\space\space\space\fmtname\space <\fmtversion>} +\Msg{*} +\Msg{* Depending on your machine the installation} +\Msg{* might take a long time --- this is the} +\Msg{* price for being able to run on all platforms.} +\Msg{* So please be patient :-)} +\Msg{*} +\Msg{**********************************************} +\Msg{} +\Msg{} +} + + +\askonceonly + +\keepsilent + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% generate main kernel file +%%% and the .ltx files that set up the default settings +%%% that may be changed by the use of .cfg files. + +\batchinput{format.ins} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% generate .def files for encoding support + +\batchinput{inputenc.ins} +\batchinput{ltoutenc.ins} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%% other classes and packages + +\batchinput{classes.ins} + +\batchinput{letter.ins} + +\batchinput{slides.ins} + +\batchinput{proc.ins} + +\batchinput{latexsym.ins} + +\batchinput{cmfonts.ins} + +\batchinput{ec.ins} + +\batchinput{latex209.ins} + +\batchinput{docstrip.ins} + +\batchinput{ifthen.ins} + +\batchinput{graphpap.ins} + +\batchinput{makeindx.ins} + +\batchinput{syntonly.ins} + +\batchinput{exscale.ins} + +\batchinput{alltt.ins} + +\batchinput{nfssfont.ins} + +\batchinput{fixltx2e.ins} + + +\Msg{} +\Msg{***********************************} +\Msg{*} +\Msg{* Now run INITEX on latex.ltx} +\Msg{*} +\Msg{***********************************} +\Msg{} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/base/utf8ienc.dtx b/Master/texmf-dist/source/latex/base/utf8ienc.dtx new file mode 100644 index 00000000000..f0c3e434ccb --- /dev/null +++ b/Master/texmf-dist/source/latex/base/utf8ienc.dtx @@ -0,0 +1,1221 @@ +% \iffalse meta-comment +% +% Copyright 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 +% The LaTeX3 Project and any individual authors listed elsewhere +% in this file. +% +% This file is part of the LaTeX base system. +% ------------------------------------------- +% +% It may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2003/12/01 or later. +% +% This file has the LPPL maintenance status "maintained". +% +% The list of all files belonging to the LaTeX base distribution is +% given in the file `manifest.txt'. See also `legal.txt' for additional +% information. +% +% The list of derived (unpacked) files belonging to the distribution +% and covered by LPPL is defined by the unpacking scripts (with +% extension .ins) which are part of the distribution. +% +% \fi +% +% \iffalse +%<*driver> +\documentclass{ltxdoc} +%% \usepackage[utf8]{inputenc} %% That looked wrong to Chris. +\GetFileInfo{utf8.def} +\title{Providing some UTF-8 support via \texttt{inputenc}} +\date{\fileversion\space\filedate{} printed \today} + \author{% + Frank Mittelbach \and Chris Rowley\thanks{Borrowing heavily from + code by David Carlisle and tables by Sebastian Rahtz; some table + and code cleanup by Javier Bezos}} +\begin{document} + \maketitle + \tableofcontents + \DocInput{utf8ienc.dtx} +\end{document} +%</driver> +% \fi +% +% \CheckSum{1068} +% +% \newpage +% +% \section{Introduction} +% +% [The whole section is rather unfinished \ldots\ just like the code, sorry!] +% +% \subsection{Background and general stuff} +% +% For many reasons what this package provides is a long way from any +% type of `Unicode compliance'. +% +% In stark contrast to 8-bit character sets, with 16 or more bits it can +% easily be very inefficient to support the full range.\footnote{In +% fact, \LaTeX's current 8-bit support does not go so far as to make +% all 8-bit characters into valid input.} Moreover, useful support of +% character input by a typesetting system overwhelmingly means finding +% an acceptable visual representation of a sequence of characters and +% this, for \LaTeX{}, means having available a suitably encoded 8-bit +% font. +% +% Unfortunately it is not possible to predict exactly what valid UTF-8 +% octet sequences will appear in a particular file so it is best to +% make all the unsupported but valid sequences produce a reasonably +% clear and noticeable error message. +% +% There are two directions from which to approach the question of what +% to load. One is to specify the ranges of Unicode characters that will +% result in some sensible typesetting; this requires the provider to +% ensure that suitable fonts are loaded and that these input characters +% generate the correct typesetting via the encodings of those fonts. The +% other is to inspect the font encodings to be used and use these to +% define which input Unicode characters should be supported. +% +% For Western European languages, at least, going in either direction +% leads to many straightforward decisions and a few that are more +% subjective. In both cases some of the specifications are \TeX{} +% specific whilst most are independent of the particular typesetting +% software in use. +% +% As we have argued elsewhere, \LaTeX{} needs to refer to characters via +% `seven-bit-text' names and, so far, these have been chosen by +% reference to historical sources such as Plain \TeX{} or Adobe encoding +% descriptions. It is unclear whether this ad hoc naming structure should +% simply be extended or whether it would be useful to +% supplement it with standardised internal Unicode character names such as +% one or more of the following:\footnote{Burkhard und Holger Mittelbach +% spielen mit mir! Sie haben etwas hier geschrieben.} +% +% \begin{verbatim} +% \ltxutwochar <4 hex digits> +% +% \ltxuchar {<hex digits>} +% B H U R R R +% +% \ltxueightchartwo <2 utf8 octets as 8-bit char tokens> +% \ltxueightcharthree <3 utf8 octets ...> +% \ltxueightcharfour <4 utf8 octets ...> +% \end{verbatim} +% +% +% \subsection{More specific stuff} +% +% In addition to setting up the mechanism for reading UTF-8 characters +% and specifying the \LaTeX-level support available, this package +% contains support for some default historically expected \TeX-related +% characters and some example `Unicode definition files' for standard +% font encodings. +% +% +% \subsection{Notes} +% +% This package does not support Unicode combining characters as \TeX{} +% is not really equipped to make this possible. +% +% No attempt is made to be useful beyond Latin, and maybe Cyrillic, +% for European languages (as of now). +% +% +% \subsection{Basic operation of the code} +% +% The \texttt{inputenc} package makes the upper 8-bit characters active and +% assigns to all of them an error message. It then waits for the +% input encoding files to change this set-up. Similarly, whenever +% |\inputencoding| is encountered in a document, first the upper +% 8-bit characters are set back to produce an error and then the +% definitions for the new input encoding are loaded, changing some of the +% previous settings. +% +% The 8-bit input encodings currently supported by \texttt{inputenc} +% all use declarations such as |\DeclareInputText| and the like to map an +% 8-bit number to some \LaTeX{} internal form, e.g.~to |\"a|. +% +% The situation when supporting UTF-8 as the input encoding is +% different, however. Here we only have to set up the actions of +% those 8-bit numbers that can be the first octet in a UTF-8 +% representation of a Unicode character. But we cannot simply set +% this to some internal \LaTeX{} form since the Unicode character +% consists of more than one octet; instead we have to define this +% starting octet to parse the right number of further octets that +% together form the UTF-8 representation of some Unicode character. +% +% Therefore when switching to \texttt{utf8} within the +% \texttt{inputenc} framework the characters with numbers (hex) +% from \texttt{"C2} to \texttt{"DF} are defined to parse for a +% second octet following, the characters from \texttt{"E0} to +% \texttt{"EF} are defined to parse for two more octets and finally +% the characters from \texttt{"F0} to \texttt{"F3} are defined to +% parse for three additional octets. These additional octets are +% always in the range \texttt{"80} to \texttt{"B9}. +% +% Thus, when such a character is encountered in the document (so +% long as expansion is not prohibited) a defined number of +% additional octets (8-bit characters) are read and from them a +% unique control sequence name is immediately constructed. +% +% This control sequence is either defined (good) or undefined +% (likely); in the latter case the user gets an error message +% saying that this UTF-8 sequence (or, better, Unicode character) +% is not supported. +% +% If the control sequence is set up to do something useful then it will +% expand to a \LaTeX{} internal form: e.g.~for the utf8 sequence of +% two octets \texttt{"C3 "A4} we get |\"a| as the +% internal form which then, depending on the font encoding, +% eventually resolves to the single glyph `latin-a-umlaut' or to +% the composite glyph `latin-a with an umlaut accent'. +% +% These mappings from (UTF-8 encoded) Unicode characters to \LaTeX{} +% internal forms are made indirectly. The code below provides a +% declaration |\DeclareUnicodeCharacter| which maps Unicode numbers +% (as hexadecimal) to \LaTeX{} internal forms. +% +% This mapping needs to be set up only once so here it is done at +% |\begin{document}| by looking at the list of font encodings that +% are loaded by the document and providing mappings related to +% those font encodings whenever these are available. Thus at most +% only those Unicode characters that can be represented by the glyphs +% available in these encodings will be defined. +% +% Technically this is done by loading one file per encoding, +% if available, that is supposed to provide the necessary mapping +% information. +% +% +% \StopEventually{} +% +% +% +% +% \section{Coding} +% +% \subsection{Housekeeping} +% +% The usual introductory bits and pieces: +% +% \begin{macrocode} +%<utf8>\ProvidesFile{utf8.def} +%<test>\ProvidesFile{utf8-test.tex} +%<+lcy> \ProvidesFile{lcyenc.dfu} +%<+ly1> \ProvidesFile{lcyenc.dfu} +%<+oms> \ProvidesFile{omsenc.dfu} +%<+ot1> \ProvidesFile{ot1enc.dfu} +%<+ot2> \ProvidesFile{ot2enc.dfu} +%<+t1> \ProvidesFile{t1enc.dfu} +%<+t2a> \ProvidesFile{t2aenc.dfu} +%<+t2b> \ProvidesFile{t2benc.dfu} +%<+t2c> \ProvidesFile{t2cenc.dfu} +%<+ts1> \ProvidesFile{ts1enc.dfu} +%<+x2> \ProvidesFile{x2enc.dfu} +%<+all> \ProvidesFile{utf8enc.dfu} + [2004/02/09 v1.1b UTF-8 support for inputenc] +% \end{macrocode} +% +% \begin{macrocode} +%<*utf8> +\makeatletter +% \end{macrocode} +% +% +% +% \subsection{Parsing UTF-8 input} +% +% \begin{macro}{\UTFviii@two@octets} +% \begin{macro}{\UTFviii@three@octets} +% \begin{macro}{\UTFviii@four@octets} +% A UTF-8 char (that is not actually a 7-bit char, i.e.~a single +% octet) is parsed as follows: each starting octet is an active +% \TeX{} character token; each of these is defined below to be a +% macro with one to three arguments nominally (depending on the +% starting octet). It calls one of |\UTFviii@two@octets|, +% |\UTFviii@three@octets|, or |\UTFviii@four@octets| which then +% actually picks up the argument(s). +% +% From the arguments a control sequence with a name of the form +% \verb=u8:#1#2...= is constructed where the |#i| ($i>1$) are the +% arguments and |#1| is the starting octet (as a \TeX{} character +% token). Since some or even all of these characters are active +% (when inputenc is loaded) we need to use |\string| when building +% the csname. +% +% The csname thus constructed can of course be undefined but to +% avoid producing an unhelpful low-level undefined command error we +% pass it to |\UTFviii@defined| which is responsible for producing +% a more sensible error message (not yet done!!). If, however, it is +% defined we simply execute the thing (which should then expand to +% an encoding specific internal \LaTeX{} form). +% \begin{macrocode} +\def\UTFviii@two@octets#1#2{\expandafter + \UTFviii@defined\csname u8:#1\string#2\endcsname} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\def\UTFviii@three@octets#1#2#3{\expandafter + \UTFviii@defined\csname u8:#1\string#2\string#3\endcsname} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\def\UTFviii@four@octets#1#2#3#4{\expandafter + \UTFviii@defined\csname u8:#1\string#2\string#3\string#4\endcsname} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\UTFviii@defined} +% This tests whether its argument is different from |\relax|: it +% either calls for a sensible error message (not done), or it gets +% the |\fi| out of the way (in case the command has arguments) and +% executes it. +% \begin{macrocode} +\def\UTFviii@defined#1{% + \ifx#1\relax +% \end{macrocode} +% The endline character has a special definition within the +% inputenc package (it is gobbling spaces). For this reason we +% can't produce multiline strings without some precaution. +% \changes{v1.1b}{2004/02/09}{no newlines in error messages allowed} +% \begin{macrocode} + \PackageError{inputenc}{Unicode char \string#1 not set up\space + for use with LaTeX}\@eha + \else\expandafter + #1% + \fi +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\UTFviii@loop} +% This wonderful bit of code from Dr Carlisle defines the starting +% octets to call |\UTFviii@two@octets| etc as appropriate. The starting +% octet itself is passed directly as the first argument, the others +% are picked up later en route. +% +% The |\UTFviii@loop| loops through the numbers starting at +% |\count@| and ending at |\@tempcnta|${} - 1$, each time executing +% the code in |\UTFviii@tmp|. +% +% All this is done in a group so that temporary catcode changes +% etc.~vanish after everything is set up. +% +% It may be a good idea to add code to deal with `illegal utf8 octets': +% at present these will be handled by whatever code was in use for 8-bit +% input before this code is executed. +% +% \begin{macrocode} +\begingroup +\catcode`\~13 +\catcode`\"12 +% \end{macrocode} +% +% \begin{macrocode} +\def\UTFviii@loop{% + \uccode`\~\count@ + \uppercase\expandafter{\UTFviii@tmp}% + \advance\count@\@ne + \ifnum\count@<\@tempcnta + \expandafter\UTFviii@loop + \fi} +% \end{macrocode} +% +% Setting up 2-byte UTF-8: +% \begin{macrocode} + \count@"C2 + \@tempcnta"E0 + \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@two@octets\string~}} +\UTFviii@loop +% \end{macrocode} +% Setting up 3-byte UTF-8: +% \begin{macrocode} + \count@"E0 + \@tempcnta"F0 + \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@three@octets\string~}} +\UTFviii@loop +% \end{macrocode} +% +% Setting up 4-byte UTF-8: +% \begin{macrocode} + \count@"F0 + \@tempcnta"F4 + \def\UTFviii@tmp{\xdef~{\noexpand\UTFviii@four@octets\string~}} +\UTFviii@loop +\endgroup +% \end{macrocode} +% \end{macro} +% +% For this case we must disable the warning generated by +% \texttt{inputenc} if it doesn't see any new |\DeclareInputText| +% commands. +% \begin{macrocode} +\@inpenc@test +% \end{macrocode} +% +% +% If this file (\texttt{utf8.def}) is not being read while setting +% up \texttt{inputenc}, i.e.~in the preamble, but when +% |\inputencoding| is called somewhere within the document, we do not +% need to input the specific Unicode mappings again. We therefore +% stop reading the file at this point. +% \begin{macrocode} +\ifx\@begindocumenthook\@undefined + \makeatother +% \end{macrocode} +% The |\fi| must be on the same line as |\endinput| or else it will +% never be seen! +% \begin{macrocode} + \endinput \fi +% \end{macrocode} +% +% +% \subsection{Mapping Unicode codes to \LaTeX{} internal forms} +% +% +% \begin{macro}{\DeclareUnicodeCharacter} +% The |\DeclareUnicodeCharacter| declaration defines a mapping from +% a Unicode character code point to a \LaTeX{} internal form. The first +% argument is the Unicode number as hexadecimal digits and the second is +% the actual \LaTeX{} internal form. +% +% We start by making sure that some characters have the right +% |\catcode| when they are used in the definitions below. +% \begin{macrocode} +\begingroup +\catcode`\"=12 +\catcode`\<=12 +\catcode`\.=12 +\catcode`\,=12 +\catcode`\;=12 +\catcode`\!=12 +\catcode`\~=13 +% \end{macrocode} +% +% \begin{macrocode} +\gdef\DeclareUnicodeCharacter#1#2{% + \count@"#1\relax + \wlog{ \space\space defining Unicode char U+#1 (decimal \the\count@)}% + \begingroup +% \end{macrocode} +% Next we do the parsing of the number stored in |\count@| and assign the +% result to |\UTFviii@tmp|. Actually all this could be done in-line, +% the macro |\parse@XML@charref| is only there to extend this code +% to parsing Unicode numbers in other contexts one day (perhaps). +% \begin{macrocode} + \parse@XML@charref +% \end{macrocode} +% +% Here is an example of what is happening, for the pair \texttt{"C2 "A3} +% (which is the utf8 represenation for the character \textsterling{}). +% After |\parse@XML@charref| we have, stored in |\UTFviii@tmp|, a +% single command with two character tokens as arguments: +% \begin{quote} +% [$t_{C2}$ and $t_{A3}$ are the characters corresponding to these +% two octets]\\ +% |\UTFviii@two@octets| $t_{\rm C2}t_{\rm A3}$ +% \end{quote} +% what we actually need to produce is a definition of the form +% \begin{quote} +% |\def\u8:|$t_{\rm C2}$$t_{\rm A3}$ |{|\textit{\LaTeX{} internal form}|}|\,. +% \end{quote} +% So here we temporarily redefine the prefix commands +% |\UTFviii@two@octets|, etc.~to +% generate the csname that we wish to define> the |\string|s are +% added in case these tokens are still active. +% \begin{macrocode} + \def\UTFviii@two@octets##1##2{\csname u8:##1\string##2\endcsname}% + \def\UTFviii@three@octets##1##2##3{\csname u8:##1% + \string##2\string##3\endcsname}% + \def\UTFviii@four@octets##1##2##3##4{\csname u8:##1% + \string##2\string##3\string##4\endcsname}% +% \end{macrocode} +% Now we simply:-) need to use the right number of |\expandafter|s to +% finally construct the definition: expanding |\UTFviii@tmp| once to get +% its contents, a second time to replace the prefix command by its +% |\csname| expansion, and a third time to turn the expansion into +% a csname after which the |\gdef| finally gets applied. +% We add an irrelevant |\IeC| and braces around the definition, in +% order to avoid any space after the command being gobbled up +% when the text is written out to an auxiliary file (see +% \texttt{inputenc} for further details +% \begin{macrocode} + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \expandafter + \gdef\UTFviii@tmp{\IeC{#2}}% + \endgroup +} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\parse@XML@charref} +% This macro parses a Unicode number (decimal) and returns its +% UTF-8 representation as a sequence of non-active \TeX{} character +% tokens. In the +% original code it had two arguments delimited by \texttt{;} here, +% however, we supply the Unicode number implicitly. +% \begin{macrocode} +\gdef\parse@XML@charref{% +% \end{macrocode} +% We need to keep a few things local, mainly the |\uccode|'s that +% are set up below. However, the group originally used here is +% actually unnecessary since we call this macro only within another +% group; but it will be important to restore the group if this +% macro gets used for other purposes. +% \begin{macrocode} +% \begingroup +% \end{macrocode} +% The original code from David supported the convention that a +% Unicode slot number could be given either as a decimal or as a +% hexadecimal (by starting with \texttt{x}). We do not do this so +% this code is also removed. This could be reactivated if one +% wants to support document commands that accept Unicode numbers +% (but then the first case needs to be changed from an error +% message back to something more useful again). +% \begin{macrocode} +% \uppercase{\count@\if x\noexpand#1"\else#1\fi#2}\relax +% \end{macrocode} +% As |\count@| already contains the right value we make +% |\parse@XML@charref| work without arguments. +% \begin{macrocode} + \ifnum\count@<"A0\relax + \PackageError{inputenc}{Cannot define Unicode char value < 00A0}\@eha +% \end{macrocode} +% Do not ask us to provide an explanation for the code below, it is +% borrowed straight from \texttt{xmltex} by David and we trust him +% totally (and we are too lazy to reread the Unicode book to see if +% this is the correct algorithm).\footnote{We were hoping to also +% find in his work the \TeX{} code for going the other way: from +% UTF-8 octets to Unicode slot number, but no luck!} +% \begin{macrocode} + \else\ifnum\count@<"800\relax + \parse@UTFviii@a,% + \parse@UTFviii@b C\UTFviii@two@octets.,% + \else\ifnum\count@<"10000\relax + \parse@UTFviii@a;% + \parse@UTFviii@a,% + \parse@UTFviii@b E\UTFviii@three@octets.{,;}% + \else + \parse@UTFviii@a;% + \parse@UTFviii@a,% + \parse@UTFviii@a!% + \parse@UTFviii@b F\UTFviii@four@octets.{!,;}% + \fi + \fi + \fi +% \endgroup +} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\parse@UTFviii@a} +% \ldots so somebody else can document this part :-) \ldots~David?:-))))! +% \changes{v1.1b}{2004/02/09}{space in the wrong place \cs{count @64}} +% \begin{macrocode} +\gdef\parse@UTFviii@a#1{% + \@tempcnta\count@ + \divide\count@ 64 + \@tempcntb\count@ + \multiply\count@ 64 + \advance\@tempcnta-\count@ + \advance\@tempcnta 128 + \uccode`#1\@tempcnta + \count@\@tempcntb} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\parse@UTFviii@b} +% \ldots same here +% \begin{macrocode} +\gdef\parse@UTFviii@b#1#2#3#4{% + \advance\count@ "#10\relax + \uccode`#3\count@ + \uppercase{\gdef\UTFviii@tmp{#2#3#4}}} +% \end{macrocode} +% +% \begin{macrocode} +\endgroup +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +\@onlypreamble\DeclareUnicodeCharacter +% \end{macrocode} +% These are preamble only as long as we don't support Unicode +% charrefs in documents. +% \begin{macrocode} +\@onlypreamble\parse@XML@charref +\@onlypreamble\parse@UTFviii@a +\@onlypreamble\parse@UTFviii@b +% \end{macrocode} +% +% +% \subsection{Loading Unicode mappings at begin document} +% +% The original plan was to set up the UTF-8 support at +% |\begin{document}|; but then any text characters used in the preamble +% (as people do even though advised against it) would fail in one way or +% the other. +% So the implementation was changed and the Unicode definition files +% for already defined encodings are loaded here. +% +% We loop through all defined font encodings +% (stored in |\cdp@list|) and for each load a file +% \textit{name}\texttt{enc.dfu} if it exist. That file is then +% supposed to contain |\DeclareUnicodeCharacter| declarations. +% \begin{macrocode} +\begingroup + \def\cdp@elt#1#2#3#4{% + \wlog{Now handling font encoding #1 ...}% + \lowercase{% + \InputIfFileExists{#1enc.dfu}} + {\wlog{... processing UTF-8 mapping file for font encoding #1}}% + {\wlog{... no UTF-8 mapping file for font encoding #1}}% + } + \cdp@list +\endgroup +% \end{macrocode} +% However, we don't know if there are font encodings still to be +% loaded (either with \texttt{fontenc} or directly with |\input| by +% some some package). Font enconding files are loaded only if the +% corresponding encoding has not been loaded yet, and they always +% begin with |\DeclareFontEncoding|. We now redefine the internal +% kernel version of the latter to load the Unicode file if available. +% +% \begin{macrocode} +\def\DeclareFontEncoding@#1#2#3{% + \expandafter + \ifx\csname T@#1\endcsname\relax + \def\cdp@elt{\noexpand\cdp@elt}% + \xdef\cdp@list{\cdp@list\cdp@elt{#1}% + {\default@family}{\default@series}% + {\default@shape}}% + \expandafter\let\csname#1-cmd\endcsname\@changed@cmd + \begingroup + \wlog{Now handling font encoding #1 ...}% + \lowercase{% + \InputIfFileExists{#1enc.dfu}}% + {\wlog{... processing UTF-8 mapping file for font encoding #1}}% + {\wlog{... no UTF-8 mapping file for font encoding #1}}% + \endgroup + \else + \@font@info{Redeclaring font encoding #1}% + \fi + \global\@namedef{T@#1}{#2}% + \global\@namedef{M@#1}{\default@M#3}% + \xdef\LastDeclaredEncoding{#1}% + } +%</utf8> +% \end{macrocode} +% +% +% +% \section{Mapping characters ---\newline based on font (glyph) encodings} +% +% This section is a first attempt to provide Unicode definitions for +% characters whose standard glyphs are currently provided by the +% standard \LaTeX{} font-encodings |T1|, |OT1|, etc. They are by +% no means completed and need checking. +% +% For example, one should check the already existing input encodings +% for glyphs that may in fact be available and required, +% e.g.~\texttt{latin4} has a number of glyphs with the |\=| +% accent. Since the |T1| encoding does not provide such glyphs, +% these characters are not listed below (yet). +% +% The list below was generated by looking at the current \LaTeX{} font +% encoding files, e.g., \texttt{t1enc.def} and using the work by +% Sebastian Rahtz in (\texttt{ucharacters.sty}), with a few +% modifications. In combinations such as |\^\i| the preferred form +% is that and not |\^i|. +% +% This list has been built from several sources, obviously including +% the Unicode Standard itself. These sources include Passive \TeX{} by +% Sebastian Rahtz, the \texttt{unicode} +% package by Dominique P. G. Unruh (mainly for Latin encodings) and +% \texttt{text4ht} by Eitan Gurari (for Cyrillic ones). +% +% Note that it strictly follows the Mittelbach principles for +% input character encodings: thus it offers no support for using utf8 +% representations of math symbols such as $\times$ or $\div$ (in math mode). +% +% +% \subsection{About the table itself} +% +% In addition to generating indivdual files, the table below is, at present, +% a one-one (we think) partial relationship between the (ill-defined) set +% of LICRs and the Unicode slots "0080 to "FFFF. At present these entries +% are used only to define a collection of partial mappings from Unicode +% slots to LICRs; each of these mappings becomes full if we add an exception +% value (`not defined') to the set of LICRs. +% +% It is probably not essential for the relationship in the full table to be +% one-one; this raises questions suach as: the exact role of LICRs; +% the formal relationships on the set of LICRs; the (non-mathematical) +% relationship between +% LICRs and Unicode (which has its own somewhat fuzzy equivalences); +% and ultimately what a character is and what a character representation +% and/or name is. +% +% Viewed this a way, the result has, perhaps puzzingly, just two (we think) +% gaps in the second 128 `Unicode slots' (00A0 and 00AD): neither of these +% is really a character, of course. +% +% It is unclear the extent to which entries in this table should +% resemble the closely related ones in the 8-bit \texttt{inputenc} files. +% The Unicode standard claims that the first 256 slots `are' ASCII and +% Latin-1. +% +% Of course, \TeX{} itself typically does not treat even many perfectly +% `normal text' 7-bit slots as text characters, so it is unclear +% whether \LaTeX{} should even attempt to deal in any consistent way with +% those Unicode slots that are not definitive text characters. +% +% +% \subsection{The mapping table} +% +% Note that the first argument must be a 4-hex-digit number greater +% than \texttt{00BF}. +% +% \begin{macrocode} +%<all,t1,ot1,ly1>\DeclareUnicodeCharacter{00A1}{\textexclamdown} +%<all,ts1,ly1>\DeclareUnicodeCharacter{00A2}{\textcent} +%<all,ts1,t1,ot1,ly1>\DeclareUnicodeCharacter{00A3}{\textsterling} +%<all,x2,ts1,t2c,t2b,t2a,ly1,lcy>\DeclareUnicodeCharacter{00A4}{\textcurrency} +%<all,ts1,ly1>\DeclareUnicodeCharacter{00A5}{\textyen} +%<all,ts1,ly1>\DeclareUnicodeCharacter{00A6}{\textbrokenbar} +%<all,x2,ts1,t2c,t2b,t2a,oms,ly1>\DeclareUnicodeCharacter{00A7}{\textsection} +%<all,ts1>\DeclareUnicodeCharacter{00A8}{\textasciidieresis} +%<all,ts1,utf8>\DeclareUnicodeCharacter{00A9}{\textcopyright} +%<all,ts1,ly1,utf8>\DeclareUnicodeCharacter{00AA}{\textordfeminine} +%<all,x2,t2c,t2b,t2a,t1,ot2,ly1,lcy>\DeclareUnicodeCharacter{00AB}{\guillemotleft} +%<all,ts1>\DeclareUnicodeCharacter{00AC}{\textlnot} +%<all,ts1,ly1,utf8>\DeclareUnicodeCharacter{00AE}{\textregistered} +%<all,ts1>\DeclareUnicodeCharacter{00AF}{\textasciimacron} +%<all,ts1,ly1>\DeclareUnicodeCharacter{00B0}{\textdegree} +%<all,ts1>\DeclareUnicodeCharacter{00B1}{\textpm} +%<all,ts1>\DeclareUnicodeCharacter{00B2}{\texttwosuperior} +%<all,ts1>\DeclareUnicodeCharacter{00B3}{\textthreesuperior} +%<all,ts1>\DeclareUnicodeCharacter{00B4}{\textasciiacute} +%<all,ts1,ly1>\DeclareUnicodeCharacter{00B5}{\textmu} % micro sign +%<all,ts1,oms,ly1>\DeclareUnicodeCharacter{00B6}{\textparagraph} +%<all,ts1,ly1>\DeclareUnicodeCharacter{00B7}{\textperiodcentered} +%<all,ot1>\DeclareUnicodeCharacter{00B8}{\c\ } +%<all,ts1>\DeclareUnicodeCharacter{00B9}{\textonesuperior} +%<all,ts1,ly1,utf8>\DeclareUnicodeCharacter{00BA}{\textordmasculine} +%<all,x2,t2c,t2b,t2a,t1,ot2,ly1,lcy>\DeclareUnicodeCharacter{00BB}{\guillemotright} +%<all,ts1,ly1>\DeclareUnicodeCharacter{00BC}{\textonequarter} +%<all,ts1,ly1>\DeclareUnicodeCharacter{00BD}{\textonehalf} +%<all,ts1,ly1>\DeclareUnicodeCharacter{00BE}{\textthreequarters} +%<all,t1,ot1,ly1>\DeclareUnicodeCharacter{00BF}{\textquestiondown} +%<all,t1,ly1>\DeclareUnicodeCharacter{00C0}{\@tabacckludge`A} +%<all,t1,ly1>\DeclareUnicodeCharacter{00C1}{\@tabacckludge'A} +%<all,t1,ly1>\DeclareUnicodeCharacter{00C2}{\^A} +%<all,t1,ly1>\DeclareUnicodeCharacter{00C3}{\~A} +%<all,t1,ly1>\DeclareUnicodeCharacter{00C4}{\"A} +%<all,t1,ot1,ly1>\DeclareUnicodeCharacter{00C5}{\r A} +%<all,t1,ot1,ly1,lcy>\DeclareUnicodeCharacter{00C6}{\AE} +%<all,t1,ly1>\DeclareUnicodeCharacter{00C7}{\c C} +%<all,t1,ly1>\DeclareUnicodeCharacter{00C8}{\@tabacckludge`E} +%<all,t1,ly1>\DeclareUnicodeCharacter{00C9}{\@tabacckludge'E} +%<all,t1,ly1>\DeclareUnicodeCharacter{00CA}{\^E} +%<all,t1,ly1>\DeclareUnicodeCharacter{00CB}{\"E} +%<all,t1,ly1>\DeclareUnicodeCharacter{00CC}{\@tabacckludge`I} +%<all,t1,ly1>\DeclareUnicodeCharacter{00CD}{\@tabacckludge'I} +%<all,t1,ly1>\DeclareUnicodeCharacter{00CE}{\^I} +%<all,t1,ly1>\DeclareUnicodeCharacter{00CF}{\"I} +%<all,t1,ly1>\DeclareUnicodeCharacter{00D0}{\DH} +%<all,t1,ly1>\DeclareUnicodeCharacter{00D1}{\~N} +%<all,t1,ly1>\DeclareUnicodeCharacter{00D2}{\@tabacckludge`O} +%<all,t1,ly1>\DeclareUnicodeCharacter{00D3}{\@tabacckludge'O} +%<all,t1,ly1>\DeclareUnicodeCharacter{00D4}{\^O} +%<all,t1,ly1>\DeclareUnicodeCharacter{00D5}{\~O} +%<all,t1,ly1>\DeclareUnicodeCharacter{00D6}{\"O} +%<all,ts1>\DeclareUnicodeCharacter{00D7}{\texttimes} +%<all,t1,ot1,ly1,lcy>\DeclareUnicodeCharacter{00D8}{\O} +%<all,t1,ly1>\DeclareUnicodeCharacter{00D9}{\@tabacckludge`U} +%<all,t1,ly1>\DeclareUnicodeCharacter{00DA}{\@tabacckludge'U} +%<all,t1,ly1>\DeclareUnicodeCharacter{00DB}{\^U} +%<all,t1,ly1>\DeclareUnicodeCharacter{00DC}{\"U} +%<all,t1,ly1>\DeclareUnicodeCharacter{00DD}{\@tabacckludge'Y} +%<all,t1,ly1>\DeclareUnicodeCharacter{00DE}{\TH} +%<all,t1,ot1,ly1,lcy>\DeclareUnicodeCharacter{00DF}{\ss} +%<all,t1,ly1>\DeclareUnicodeCharacter{00E0}{\@tabacckludge`a} +%<all,t1,ly1>\DeclareUnicodeCharacter{00E1}{\@tabacckludge'a} +%<all,t1,ly1>\DeclareUnicodeCharacter{00E2}{\^a} +%<all,t1,ly1>\DeclareUnicodeCharacter{00E3}{\~a} +%<all,t1,ly1>\DeclareUnicodeCharacter{00E4}{\"a} +%<all,t1,ly1>\DeclareUnicodeCharacter{00E5}{\r a} +%<all,t1,ot1,ly1,lcy>\DeclareUnicodeCharacter{00E6}{\ae} +%<all,t1,ly1>\DeclareUnicodeCharacter{00E7}{\c c} +%<all,t1,ly1>\DeclareUnicodeCharacter{00E8}{\@tabacckludge`e} +%<all,t1,ly1>\DeclareUnicodeCharacter{00E9}{\@tabacckludge'e} +%<all,t1,ly1>\DeclareUnicodeCharacter{00EA}{\^e} +%<all,t1,ly1>\DeclareUnicodeCharacter{00EB}{\"e} +%<all,t1,ot1,ly1>\DeclareUnicodeCharacter{00EC}{\@tabacckludge`\i} +%<all,t1,ot1,ly1>\DeclareUnicodeCharacter{00ED}{\@tabacckludge'\i} +%<all,t1,ot1,ly1>\DeclareUnicodeCharacter{00EE}{\^\i} +%<all,t1,ot1,ly1>\DeclareUnicodeCharacter{00EF}{\"\i} +%<all,t1,ly1>\DeclareUnicodeCharacter{00F0}{\dh} +%<all,t1,ly1>\DeclareUnicodeCharacter{00F1}{\~n} +%<all,t1,ly1>\DeclareUnicodeCharacter{00F2}{\@tabacckludge`o} +%<all,t1,ly1>\DeclareUnicodeCharacter{00F3}{\@tabacckludge'o} +%<all,t1,ly1>\DeclareUnicodeCharacter{00F4}{\^o} +%<all,t1,ly1>\DeclareUnicodeCharacter{00F5}{\~o} +%<all,t1,ly1>\DeclareUnicodeCharacter{00F6}{\"o} +%<all,ts1>\DeclareUnicodeCharacter{00F7}{\textdiv} +%<all,t1,ot1,ly1,lcy>\DeclareUnicodeCharacter{00F8}{\o} +%<all,t1,ly1>\DeclareUnicodeCharacter{00F9}{\@tabacckludge`u} +%<all,t1,ly1>\DeclareUnicodeCharacter{00FA}{\@tabacckludge'u} +%<all,t1,ly1>\DeclareUnicodeCharacter{00FB}{\^u} +%<all,t1,ly1>\DeclareUnicodeCharacter{00FC}{\"u} +%<all,t1,ly1>\DeclareUnicodeCharacter{00FD}{\@tabacckludge'y} +%<all,t1,ly1>\DeclareUnicodeCharacter{00FE}{\th} +%<all,t1,ly1>\DeclareUnicodeCharacter{00FF}{\"y} +%<all,t1>\DeclareUnicodeCharacter{0102}{\u A} +%<all,t1>\DeclareUnicodeCharacter{0103}{\u a} +%<all,t1>\DeclareUnicodeCharacter{0104}{\k A} +%<all,t1>\DeclareUnicodeCharacter{0105}{\k a} +%<all,t1>\DeclareUnicodeCharacter{0106}{\@tabacckludge'C} +%<all,t1>\DeclareUnicodeCharacter{0107}{\@tabacckludge'c} +%<all,t1>\DeclareUnicodeCharacter{010C}{\v C} +%<all,t1>\DeclareUnicodeCharacter{010D}{\v c} +%<all,t1>\DeclareUnicodeCharacter{010E}{\v D} +%<all,t1>\DeclareUnicodeCharacter{010F}{\v d} +%<all,t1>\DeclareUnicodeCharacter{0110}{\DJ} +%<all,t1>\DeclareUnicodeCharacter{0111}{\dj} +%<all,t1>\DeclareUnicodeCharacter{0118}{\k E} +%<all,t1>\DeclareUnicodeCharacter{0119}{\k e} +%<all,t1>\DeclareUnicodeCharacter{011A}{\v E} +%<all,t1>\DeclareUnicodeCharacter{011B}{\v e} +%<all,t1>\DeclareUnicodeCharacter{011E}{\u G} +%<all,t1>\DeclareUnicodeCharacter{011F}{\u g} +%<all,t1>\DeclareUnicodeCharacter{0130}{\.I} +%<all,t2c,t2b,t2a,t1,ot2,ot1,ly1,lcy>\DeclareUnicodeCharacter{0131}{\i} +%<all,t1>\DeclareUnicodeCharacter{0139}{\@tabacckludge'L} +%<all,t1>\DeclareUnicodeCharacter{013A}{\@tabacckludge'l} +%<all,t1>\DeclareUnicodeCharacter{013D}{\v L} +%<all,t1>\DeclareUnicodeCharacter{013E}{\v l} +%<all,t1,ot1,ly1>\DeclareUnicodeCharacter{0141}{\L} +%<all,t1,ot1,ly1>\DeclareUnicodeCharacter{0142}{\l} +%<all,t1>\DeclareUnicodeCharacter{0143}{\@tabacckludge'N} +%<all,t1>\DeclareUnicodeCharacter{0144}{\@tabacckludge'n} +%<all,t1>\DeclareUnicodeCharacter{0147}{\v N} +%<all,t1>\DeclareUnicodeCharacter{0148}{\v n} +%<all,t1>\DeclareUnicodeCharacter{014A}{\NG} +%<all,t1>\DeclareUnicodeCharacter{014B}{\ng} +%<all,t1>\DeclareUnicodeCharacter{0150}{\H O} +%<all,t1>\DeclareUnicodeCharacter{0151}{\H o} +%<all,t1,ot1,ly1,lcy>\DeclareUnicodeCharacter{0152}{\OE} +%<all,t1,ot1,ly1,lcy>\DeclareUnicodeCharacter{0153}{\oe} +%<all,t1>\DeclareUnicodeCharacter{0154}{\@tabacckludge'R} +%<all,t1>\DeclareUnicodeCharacter{0155}{\@tabacckludge'r} +%<all,t1>\DeclareUnicodeCharacter{0158}{\v R} +%<all,t1>\DeclareUnicodeCharacter{0159}{\v r} +%<all,t1>\DeclareUnicodeCharacter{015A}{\@tabacckludge'S} +%<all,t1>\DeclareUnicodeCharacter{015B}{\@tabacckludge's} +%<all,t1>\DeclareUnicodeCharacter{015E}{\c S} +%<all,t1>\DeclareUnicodeCharacter{015F}{\c s} +%<all,t1,ly1>\DeclareUnicodeCharacter{0160}{\v S} +%<all,t1,ly1>\DeclareUnicodeCharacter{0161}{\v s} +%<all,t1>\DeclareUnicodeCharacter{0162}{\c T} +%<all,t1>\DeclareUnicodeCharacter{0163}{\c t} +%<all,t1>\DeclareUnicodeCharacter{0164}{\v T} +%<all,t1>\DeclareUnicodeCharacter{0165}{\v t} +%<all,t1>\DeclareUnicodeCharacter{016E}{\r U} +%<all,t1>\DeclareUnicodeCharacter{016F}{\r u} +%<all,t1>\DeclareUnicodeCharacter{0170}{\H U} +%<all,t1>\DeclareUnicodeCharacter{0171}{\H u} +%<all,t1,ly1>\DeclareUnicodeCharacter{0178}{\"Y} +%<all,t1>\DeclareUnicodeCharacter{0179}{\@tabacckludge'Z} +%<all,t1>\DeclareUnicodeCharacter{017A}{\@tabacckludge'z} +%<all,t1>\DeclareUnicodeCharacter{017B}{\.Z} +%<all,t1>\DeclareUnicodeCharacter{017C}{\.z} +%<all,t1,ly1>\DeclareUnicodeCharacter{017D}{\v Z} +%<all,t1,ly1>\DeclareUnicodeCharacter{017E}{\v z} +%<all,ts1,ly1>\DeclareUnicodeCharacter{0192}{\textflorin} +%<all,ly1,utf8>\DeclareUnicodeCharacter{02C6}{\textasciicircum} +%<all,ts1>\DeclareUnicodeCharacter{02C7}{\textasciicaron} +%<all,ly1,utf8>\DeclareUnicodeCharacter{02CA}{\textasciitilde} +%<all,ts1>\DeclareUnicodeCharacter{02D8}{\textasciibreve} +%<all,oms>\DeclareUnicodeCharacter{02D9}{\textperiodcentered} +%<all,ts1>\DeclareUnicodeCharacter{02DD}{\textacutedbl} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0401}{\CYRYO} +%<all,x2,t2a,ot2>\DeclareUnicodeCharacter{0402}{\CYRDJE} +%<all,x2,t2a,ot2,lcy>\DeclareUnicodeCharacter{0404}{\CYRIE} +%<all,x2,t2c,t2b,t2a,ot2>\DeclareUnicodeCharacter{0405}{\CYRDZE} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0406}{\CYRII} +%<all,x2,t2a,lcy>\DeclareUnicodeCharacter{0407}{\CYRYI} +%<all,x2,t2c,t2b,t2a,ot2>\DeclareUnicodeCharacter{0408}{\CYRJE} +%<all,x2,t2b,t2a,ot2>\DeclareUnicodeCharacter{0409}{\CYRLJE} +%<all,x2,t2b,t2a,ot2>\DeclareUnicodeCharacter{040A}{\CYRNJE} +%<all,x2,t2a,ot2>\DeclareUnicodeCharacter{040B}{\CYRTSHE} +%<all,x2,t2b,t2a,lcy>\DeclareUnicodeCharacter{040E}{\CYRUSHRT} +%<all,x2,t2c,t2a,ot2>\DeclareUnicodeCharacter{040F}{\CYRDZHE} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0410}{\CYRA} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0411}{\CYRB} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0412}{\CYRV} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0413}{\CYRG} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0414}{\CYRD} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0415}{\CYRE} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0416}{\CYRZH} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0417}{\CYRZ} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0418}{\CYRI} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0419}{\CYRISHRT} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{041A}{\CYRK} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{041B}{\CYRL} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{041C}{\CYRM} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{041D}{\CYRN} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{041E}{\CYRO} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{041F}{\CYRP} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0420}{\CYRR} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0421}{\CYRS} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0422}{\CYRT} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0423}{\CYRU} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0424}{\CYRF} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0425}{\CYRH} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0426}{\CYRC} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0427}{\CYRCH} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0428}{\CYRSH} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0429}{\CYRSHCH} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{042A}{\CYRHRDSN} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{042B}{\CYRERY} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{042C}{\CYRSFTSN} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{042D}{\CYREREV} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{042E}{\CYRYU} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{042F}{\CYRYA} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0430}{\cyra} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0431}{\cyrb} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0432}{\cyrv} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0433}{\cyrg} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0434}{\cyrd} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0435}{\cyre} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0436}{\cyrzh} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0437}{\cyrz} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0438}{\cyri} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0439}{\cyrishrt} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{043A}{\cyrk} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{043B}{\cyrl} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{043C}{\cyrm} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{043D}{\cyrn} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{043E}{\cyro} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{043F}{\cyrp} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0440}{\cyrr} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0441}{\cyrs} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0442}{\cyrt} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0443}{\cyru} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0444}{\cyrf} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0445}{\cyrh} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0446}{\cyrc} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0447}{\cyrch} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0448}{\cyrsh} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0449}{\cyrshch} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{044A}{\cyrhrdsn} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{044B}{\cyrery} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{044C}{\cyrsftsn} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{044D}{\cyrerev} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{044E}{\cyryu} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{044F}{\cyrya} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0451}{\cyryo} +%<all,x2,t2a,ot2>\DeclareUnicodeCharacter{0452}{\cyrdje} +%<all,x2,t2a,ot2,lcy>\DeclareUnicodeCharacter{0454}{\cyrie} +%<all,x2,t2c,t2b,t2a,ot2>\DeclareUnicodeCharacter{0455}{\cyrdze} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{0456}{\cyrii} +%<all,x2,t2a,lcy>\DeclareUnicodeCharacter{0457}{\cyryi} +%<all,x2,t2c,t2b,t2a,ot2>\DeclareUnicodeCharacter{0458}{\cyrje} +%<all,x2,t2b,t2a,ot2>\DeclareUnicodeCharacter{0459}{\cyrlje} +%<all,x2,t2b,t2a,ot2>\DeclareUnicodeCharacter{045A}{\cyrnje} +%<all,x2,t2a,ot2>\DeclareUnicodeCharacter{045B}{\cyrtshe} +%<all,x2,t2b,t2a,lcy>\DeclareUnicodeCharacter{045E}{\cyrushrt} +%<all,x2,t2c,t2a,ot2>\DeclareUnicodeCharacter{045F}{\cyrdzhe} +%<all,x2,ot2>\DeclareUnicodeCharacter{0462}{\CYRYAT} +%<all,x2,ot2>\DeclareUnicodeCharacter{0463}{\cyryat} +%<all,x2>\DeclareUnicodeCharacter{046A}{\CYRBYUS} +%<all,x2>\DeclareUnicodeCharacter{046B}{\cyrbyus} +%<all,ot2>\DeclareUnicodeCharacter{0472}{\CYRFITA} +%<all,ot2>\DeclareUnicodeCharacter{0473}{\cyrfita} +%<all,x2,ot2>\DeclareUnicodeCharacter{0474}{\CYRIZH} +%<all,x2,ot2>\DeclareUnicodeCharacter{0475}{\cyrizh} +%<all,t2c>\DeclareUnicodeCharacter{048C}{\CYRSEMISFTSN} +%<all,t2c>\DeclareUnicodeCharacter{048D}{\cyrsemisftsn} +%<all,t2c>\DeclareUnicodeCharacter{048E}{\CYRRTICK} +%<all,t2c>\DeclareUnicodeCharacter{048F}{\cyrrtick} +%<all,x2,t2a,lcy>\DeclareUnicodeCharacter{0490}{\CYRGUP} +%<all,x2,t2a,lcy>\DeclareUnicodeCharacter{0491}{\cyrgup} +%<all,x2,t2b,t2a>\DeclareUnicodeCharacter{0492}{\CYRGHCRS} +%<all,x2,t2b,t2a>\DeclareUnicodeCharacter{0493}{\cyrghcrs} +%<all,x2,t2c,t2b>\DeclareUnicodeCharacter{0494}{\CYRGHK} +%<all,x2,t2c,t2b>\DeclareUnicodeCharacter{0495}{\cyrghk} +%<all,x2,t2b,t2a>\DeclareUnicodeCharacter{0496}{\CYRZHDSC} +%<all,x2,t2b,t2a>\DeclareUnicodeCharacter{0497}{\cyrzhdsc} +%<all,x2,t2a>\DeclareUnicodeCharacter{0498}{\CYRZDSC} +%<all,x2,t2a>\DeclareUnicodeCharacter{0499}{\cyrzdsc} +%<all,x2,t2c,t2b,t2a>\DeclareUnicodeCharacter{049A}{\CYRKDSC} +%<all,x2,t2c,t2b,t2a>\DeclareUnicodeCharacter{049B}{\cyrkdsc} +%<all,x2,t2a>\DeclareUnicodeCharacter{049C}{\CYRKVCRS} +%<all,x2,t2a>\DeclareUnicodeCharacter{049D}{\cyrkvcrs} +%<all,x2,t2c>\DeclareUnicodeCharacter{049E}{\CYRKHCRS} +%<all,x2,t2c>\DeclareUnicodeCharacter{049F}{\cyrkhcrs} +%<all,x2>\DeclareUnicodeCharacter{04A0}{\CYRKBEAK} +%<all,x2>\DeclareUnicodeCharacter{04A1}{\cyrkbeak} +%<all,x2,t2c,t2b,t2a>\DeclareUnicodeCharacter{04A2}{\CYRNDSC} +%<all,x2,t2c,t2b,t2a>\DeclareUnicodeCharacter{04A3}{\cyrndsc} +%<all,x2,t2b,t2a>\DeclareUnicodeCharacter{04A4}{\CYRNG} +%<all,x2,t2b,t2a>\DeclareUnicodeCharacter{04A5}{\cyrng} +%<all,x2,t2c>\DeclareUnicodeCharacter{04A6}{\CYRPHK} +%<all,x2,t2c>\DeclareUnicodeCharacter{04A7}{\cyrphk} +%<all,x2,t2c>\DeclareUnicodeCharacter{04A8}{\CYRABHHA} +%<all,x2,t2c>\DeclareUnicodeCharacter{04A9}{\cyrabhha} +%<all,x2,t2a>\DeclareUnicodeCharacter{04AA}{\CYRSDSC} +%<all,x2,t2a>\DeclareUnicodeCharacter{04AB}{\cyrsdsc} +%<all,x2,t2c,t2a>\DeclareUnicodeCharacter{04AC}{\CYRTDSC} +%<all,x2,t2c,t2a>\DeclareUnicodeCharacter{04AD}{\cyrtdsc} +%<all,x2,t2b,t2a>\DeclareUnicodeCharacter{04AE}{\CYRY} +%<all,x2,t2b,t2a>\DeclareUnicodeCharacter{04AF}{\cyry} +%<all,x2,t2a>\DeclareUnicodeCharacter{04B0}{\CYRYHCRS} +%<all,x2,t2a>\DeclareUnicodeCharacter{04B1}{\cyryhcrs} +%<all,x2,t2c,t2b,t2a>\DeclareUnicodeCharacter{04B2}{\CYRHDSC} +%<all,x2,t2c,t2b,t2a>\DeclareUnicodeCharacter{04B3}{\cyrhdsc} +%<all,x2,t2c>\DeclareUnicodeCharacter{04B4}{\CYRTETSE} +%<all,x2,t2c>\DeclareUnicodeCharacter{04B5}{\cyrtetse} +%<all,x2,t2c,t2b,t2a>\DeclareUnicodeCharacter{04B6}{\CYRCHRDSC} +%<all,x2,t2c,t2b,t2a>\DeclareUnicodeCharacter{04B7}{\cyrchrdsc} +%<all,x2,t2a>\DeclareUnicodeCharacter{04B8}{\CYRCHVCRS} +%<all,x2,t2a>\DeclareUnicodeCharacter{04B9}{\cyrchvcrs} +%<all,x2,t2c,t2b,t2a>\DeclareUnicodeCharacter{04BA}{\CYRSHHA} +%<all,x2,t2c,t2b,t2a>\DeclareUnicodeCharacter{04BB}{\cyrshha} +%<all,x2,t2c>\DeclareUnicodeCharacter{04BC}{\CYRABHCH} +%<all,x2,t2c>\DeclareUnicodeCharacter{04BD}{\cyrabhch} +%<all,x2,t2c>\DeclareUnicodeCharacter{04BE}{\CYRABHCHDSC} +%<all,x2,t2c>\DeclareUnicodeCharacter{04BF}{\cyrabhchdsc} +%<all,x2,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{04C0}{\CYRpalochka} +%<all,x2,t2b>\DeclareUnicodeCharacter{04C3}{\CYRKHK} +%<all,x2,t2b>\DeclareUnicodeCharacter{04C4}{\cyrkhk} +%<all,x2,t2c,t2b>\DeclareUnicodeCharacter{04C5}{\CYRLDSC} +%<all,x2,t2c,t2b>\DeclareUnicodeCharacter{04C6}{\cyrldsc} +%<all,x2,t2c,t2b>\DeclareUnicodeCharacter{04C7}{\CYRNHK} +%<all,x2,t2c,t2b>\DeclareUnicodeCharacter{04C8}{\cyrnhk} +%<all,x2,t2b>\DeclareUnicodeCharacter{04CB}{\CYRCHLDSC} +%<all,x2,t2b>\DeclareUnicodeCharacter{04CC}{\cyrchldsc} +%<all,x2,t2c>\DeclareUnicodeCharacter{04CD}{\CYRMDSC} +%<all,x2,t2c>\DeclareUnicodeCharacter{04CE}{\cyrmdsc} +%<all,x2,t2a>\DeclareUnicodeCharacter{04D4}{\CYRAE} +%<all,x2,t2a>\DeclareUnicodeCharacter{04D5}{\cyrae} +%<all,x2,t2c,t2b,t2a>\DeclareUnicodeCharacter{04D8}{\CYRSCHWA} +%<all,x2,t2c,t2b,t2a>\DeclareUnicodeCharacter{04D9}{\cyrschwa} +%<all,x2,t2c,t2b>\DeclareUnicodeCharacter{04E0}{\CYRABHDZE} +%<all,x2,t2c,t2b>\DeclareUnicodeCharacter{04E1}{\cyrabhdze} +%<all,x2,t2c,t2b,t2a>\DeclareUnicodeCharacter{04E8}{\CYROTLD} +%<all,x2,t2c,t2b,t2a>\DeclareUnicodeCharacter{04E9}{\cyrotld} +%<all,ts1>\DeclareUnicodeCharacter{0E37}{\textbaht} +%<all,x2,t2c,t2b,t2a,t1,utf8>\DeclareUnicodeCharacter{200C}{\textcompwordmark} +%<all,x2,t2c,t2b,t2a,t1,ot2,ot1,ly1,lcy>\DeclareUnicodeCharacter{2013}{\textendash} +%<all,x2,t2c,t2b,t2a,t1,ot2,ot1,ly1,lcy>\DeclareUnicodeCharacter{2014}{\textemdash} +%<all,ts1>\DeclareUnicodeCharacter{2016}{\textbardbl} +%<all,x2,t2c,t2b,t2a,t1,ot2,ot1,lcy>\DeclareUnicodeCharacter{2018}{\textquoteleft} +%<all,x2,t2c,t2b,t2a,t1,ot2,ot1,lcy>\DeclareUnicodeCharacter{2019}{\textquoteright} +%<all,t1>\DeclareUnicodeCharacter{201A}{\quotesinglbase} +%<all,x2,t2c,t2b,t2a,t1,ot2,ot1,ly1,lcy>\DeclareUnicodeCharacter{201C}{\textquotedblleft} +%<all,x2,t2c,t2b,t2a,t1,ot2,ot1,ly1,lcy>\DeclareUnicodeCharacter{201D}{\textquotedblright} +%<all,x2,t2c,t2b,t2a,t1,lcy>\DeclareUnicodeCharacter{201E}{\quotedblbase} +%<all,ts1,oms,ly1>\DeclareUnicodeCharacter{2020}{\textdagger} +%<all,ts1,oms,ly1>\DeclareUnicodeCharacter{2021}{\textdaggerdbl} +%<all,ts1,oms,ly1>\DeclareUnicodeCharacter{2022}{\textbullet} +%<all,ly1,utf8>\DeclareUnicodeCharacter{2026}{\textellipsis} +%<all,x2,ts1,t2c,t2b,t2a,t1,ly1>\DeclareUnicodeCharacter{2030}{\textperthousand} +%<all,x2,ts1,t2c,t2b,t2a,t1>\DeclareUnicodeCharacter{2031}{\textpertenthousand} +%<all,t1,ly1>\DeclareUnicodeCharacter{2039}{\guilsinglleft} +%<all,t1,ly1>\DeclareUnicodeCharacter{203A}{\guilsinglright} +%<all,ts1>\DeclareUnicodeCharacter{203B}{\textreferencemark} +%<all,ts1>\DeclareUnicodeCharacter{203D}{\textinterrobang} +%<all,ts1>\DeclareUnicodeCharacter{2044}{\textfractionsolidus} +%<all,ts1>\DeclareUnicodeCharacter{204E}{\textasteriskcentered} % LOW ASTERISK +%<all,ts1>\DeclareUnicodeCharacter{2052}{\textdiscount} +%<all,ts1>\DeclareUnicodeCharacter{20A1}{\textcolonmonetary} +%<all,ts1>\DeclareUnicodeCharacter{20A4}{\textlira} +%<all,ts1>\DeclareUnicodeCharacter{20A6}{\textnaira} +%<all,ts1>\DeclareUnicodeCharacter{20A9}{\textwon} +%<all,ts1>\DeclareUnicodeCharacter{20AB}{\textdong} +%<all,ts1>\DeclareUnicodeCharacter{20AC}{\texteuro} +%<all,ts1>\DeclareUnicodeCharacter{20B1}{\textpeso} +%<all,ts1>\DeclareUnicodeCharacter{2103}{\textcelsius} +%<all,x2,ts1,t2c,t2b,t2a,ot2,lcy>\DeclareUnicodeCharacter{2116}{\textnumero} +%<all,ts1>\DeclareUnicodeCharacter{2117}{\textcircledP} +%<all,ts1>\DeclareUnicodeCharacter{211E}{\textrecipe} +%<all,ts1>\DeclareUnicodeCharacter{2120}{\textservicemark} +%<all,ts1,ly1,utf8>\DeclareUnicodeCharacter{2122}{\texttrademark} +%<all,ts1>\DeclareUnicodeCharacter{2126}{\textohm} +%<all,ts1>\DeclareUnicodeCharacter{2127}{\textmho} +%<all,ts1>\DeclareUnicodeCharacter{212E}{\textestimated} +%<all,ts1>\DeclareUnicodeCharacter{2190}{\textleftarrow} +%<all,ts1>\DeclareUnicodeCharacter{2191}{\textuparrow} +%<all,ts1>\DeclareUnicodeCharacter{2192}{\textrightarrow} +%<all,ts1>\DeclareUnicodeCharacter{2193}{\textdownarrow} +%<all,x2,ts1,t2c,t2b,t2a>\DeclareUnicodeCharacter{2329}{\textlangle} +%<all,x2,ts1,t2c,t2b,t2a>\DeclareUnicodeCharacter{232A}{\textrangle} +%<all,ts1>\DeclareUnicodeCharacter{2422}{\textblank} +%<all,x2,t2c,t2b,t2a,t1,utf8>\DeclareUnicodeCharacter{2423}{\textvisiblespace} +%<all,ts1>\DeclareUnicodeCharacter{25E6}{\textopenbullet} +%<all,ts1>\DeclareUnicodeCharacter{25EF}{\textbigcircle} +%<all,ts1>\DeclareUnicodeCharacter{266A}{\textmusicalnote} +% \end{macrocode} +% The following definitions are in the encoding file but have no +% direct equivalent in Unicode or simply do not make sense in that +% context (or we have not yet found anything or \ldots :-). For +% example, the non-combining accent charcaters are certainly +% available somehwere but these are not equivalent to a \TeX{} +% accent command. +%\begin{verbatim} +%\DeclareTextSymbol{\j}{OT1}{17} +%\DeclareTextSymbol{\SS}{T1}{223} +%\DeclareTextSymbol{\textcompwordmark}{T1}{23} +% +%\DeclareTextAccent{\"}{OT1}{127} +%\DeclareTextAccent{\'}{OT1}{19} +%\DeclareTextAccent{\.}{OT1}{95} +%\DeclareTextAccent{\=}{OT1}{22} +%\DeclareTextAccent{\H}{OT1}{125} +%\DeclareTextAccent{\^}{OT1}{94} +%\DeclareTextAccent{\`}{OT1}{18} +%\DeclareTextAccent{\r}{OT1}{23} +%\DeclareTextAccent{\u}{OT1}{21} +%\DeclareTextAccent{\v}{OT1}{20} +%\DeclareTextAccent{\~}{OT1}{126} +%\DeclareTextCommand{\b}{OT1}[1] +%\DeclareTextCommand{\c}{OT1}[1] +%\DeclareTextCommand{\d}{OT1}[1] +%\DeclareTextCommand{\k}{T1}[1] +%\end{verbatim} +% +% +% +% \subsection{Mappings for OT1 glyphs} +% +% This is even more incomplete as again it covers only the single +% glyphs from |OT1| plus some that have been explicitly defined for +% this encoding. Everything that is provided in |T1|, and that +% could be provided as composite glyphs via |OT1|, could and +% probably should be set up as well. Which leaves the many things +% that are not provided in |T1| but can be provided in |OT1| (and +% in |T1|) by composite glyphs. + +% \begin{macrocode} +% \end{macrocode} +% Stuff not mapped (note that |\j| ($\jmath$) is not equivalent to any +% Unicode character): +%\begin{verbatim} +%\DeclareTextSymbol{\j}{OT1}{17} +%\DeclareTextAccent{\"}{OT1}{127} +%\DeclareTextAccent{\'}{OT1}{19} +%\DeclareTextAccent{\.}{OT1}{95} +%\DeclareTextAccent{\=}{OT1}{22} +%\DeclareTextAccent{\^}{OT1}{94} +%\DeclareTextAccent{\`}{OT1}{18} +%\DeclareTextAccent{\~}{OT1}{126} +%\DeclareTextAccent{\H}{OT1}{125} +%\DeclareTextAccent{\u}{OT1}{21} +%\DeclareTextAccent{\v}{OT1}{20} +%\DeclareTextAccent{\r}{OT1}{23} +%\DeclareTextCommand{\b}{OT1}[1] +%\DeclareTextCommand{\c}{OT1}[1] +%\DeclareTextCommand{\d}{OT1}[1] +%\end{verbatim} +% +% +% +% \subsection{Mappings for OMS glyphs} +% +% Characters like |\textbackslash| are not mapped as they are +% (primarily) only in the lower 127 and the code here only sets up +% mappings for UTF-8 characters that are at least 2 octets long. +%\begin{verbatim} +%\DeclareTextSymbol{\textbackslash}{OMS}{110} % "6E +%\DeclareTextSymbol{\textbar}{OMS}{106} % "6A +%\DeclareTextSymbol{\textbraceleft}{OMS}{102} % "66 +%\DeclareTextSymbol{\textbraceright}{OMS}{103} % "67 +%\end{verbatim} +% +% But the following (and some others) might actually lurk in Unicode +% somewhere\ldots +%\begin{verbatim} +%\DeclareTextSymbol{\textasteriskcentered}{OMS}{3} % "03 +%\DeclareTextCommand{\textcircled}{OMS} +%\end{verbatim} +% +% +% +% +% \subsection{Mappings for TS1 glyphs} +% +% Exercise for somebody else. +% +% +% \subsection{Mappings for \texttt{latex.ltx} glyphs} +% +% There is also a collection of characters already set up in the kernel, +% one way or the other. Since these do not clearly relate to any +% particular font encoding they are mapped when the +% \texttt{utf8} support is first set up. +% +% Also there are a number of |\providecommand|s in the various input +% encoding files which may or may not go into this part. +% \changes{v1.1b}{2004/02/09}{added commands already defined in the kernel} +% \begin{macrocode} +%<*utf8> +% This space is intentionally empty ... +%</utf8> +% \end{macrocode} +% +% +% \section{A test document} +% +% Here is a very small test document which may or may not survive +% if the current document is transfered from one place to the +% other. +% \begin{macrocode} +%<*test> +\documentclass{article} + +\usepackage[latin1,utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{trace} + +\scrollmode % to run past the error below + +\begin{document} + + German umlauts in UTF-8: ^^c3^^a4^^c3^^b6^^c3^^bc %%% äöü + +\inputencoding{latin1} % switch to latin1 + + German umlauts in UTF-8 but read by latin1 (and will produce one + error since \verb=\textcurrency= is not provided): ^^c3^^a4^^c3^^b6^^c3^^bc + +\inputencoding{utf8} % switch back to utf8 + + German umlauts in UTF-8: ^^c3^^a4^^c3^^b6^^c3^^bc + + +Some codes that should produce errors as nothing is set up +for them: ^^c3F ^^e1^^a4^^b6 + +And some that are not legal utf8 sequences: ^^c3X ^^e1XY + +\showoutput +\tracingstats=2 +\stop +%</test> +% \end{macrocode} +% +% \Finale +% +\endinput |