% \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} % %\NeedsTeXFormat{LaTeX2e} %\ProvidesPackage{fixltx2e} %\ProvidesPackage{fix-cm} %\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} % % \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} % % \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 % % \end{macrocode} % % % \Finale % \endinput