diff options
author | Karl Berry <karl@freefriends.org> | 2010-02-22 00:35:53 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-02-22 00:35:53 +0000 |
commit | b1d08fe2d339951213fe6aba9c2e849df806fc06 (patch) | |
tree | 6726c2b286311951217d7072b8b35089577b51fd /Master/texmf-dist/source/latex/carlisle/fix2col.dtx | |
parent | b84acce97a2eb68fa5c4a4c9e3fae4dbf09e30de (diff) |
carlisle update: fix2col and typehtml now separated
git-svn-id: svn://tug.org/texlive/trunk@17132 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/carlisle/fix2col.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/carlisle/fix2col.dtx | 631 |
1 files changed, 0 insertions, 631 deletions
diff --git a/Master/texmf-dist/source/latex/carlisle/fix2col.dtx b/Master/texmf-dist/source/latex/carlisle/fix2col.dtx deleted file mode 100644 index 963f35e8fd1..00000000000 --- a/Master/texmf-dist/source/latex/carlisle/fix2col.dtx +++ /dev/null @@ -1,631 +0,0 @@ -% \iffalse -%% Source File: fix2col.dtx Copyright 1997 1998 David Carlisle -%% -%% This file may be distributed under the terms of the LPPL. -%% See 00readme.txt for details. -% -%<*dtx> - \ProvidesFile{fix2col.dtx} -%</dtx> -%<package>\NeedsTeXFormat{LaTeX2e} -%<package>\ProvidesPackage{fix2col} -%<driver> \ProvidesFile{fix2col.drv} -% \fi -% \ProvidesFile{fix2col.dtx} - [1998/08/17 v0.03 Output Routine fixes for two column mode (DPC,FMi)] -% -% \iffalse -%<*driver> -\documentclass{ltxdoc} -\begin{document} -\DocInput{fix2col.dtx} -\end{document} -%</driver> -% \fi -% -% \GetFileInfo{fix2col.dtx} -% \CheckSum{579} -% -% \changes{v0.01}{1997/11/07} -% {Initial version} -% -% \changes{v0.02}{1997/11/11} -% {\cs{@ztryfc}} -% -% \title{The \textsf{fix2col} package\thanks{This file -% has version number \fileversion, last -% revised \filedate.}} -% \author{David Carlisle\thanks{%^^A -% Part one is essentially a copy of the fixmarks package by -% Piet van Oostrum, itself based on earlier work by Joe Pallas. -% Part two is loosely based on the fixfloats package, originally -% by Ed Sznyter, with some modifications by Bil Kleb.}} -% -% \date{\filedate} -% -% \let\package\textsf -% \let\env\textsf -% \let\url\texttt -% -% \maketitle -% -% \section{Introduction} -% This package makes two independent changes to \LaTeX's two column -% output routine to fix the following two longstanding `features'. -% -% \begin{itemize} -% \item -% If the \TeX\ mark system is used (for example using the -% `headings' page style in the standard \LaTeX\ classes) then any marks -% that originate on the first column are `lost' as \LaTeX\ constructs -% the second column. An example document showing how this can result -% in incorrect page headings may be found in the latex bug database:\\ -% \url{http://www.uni-mainz.de/cgi-bin/ltxbugs2html?pr=latex/2613} -% -% \item -% The second feature is documented in the \LaTeX\ book. By default -% \LaTeX\ does not attempt to keep double and single column floats in -% sequence, so if `Figure 1' is a double column float produced with -% |figure*|, then it may float -% after `Figure 2' if that is a single column, |figure|, float. -% Further correspondence about this may also be found in the -% bug database:\\ -% \url{http://www.uni-mainz.de/cgi-bin/ltxbugs2html?pr=latex/2346} -% \end{itemize} -% -% \StopEventually{} -% -% \section{Notes on the Implementation Strategies} -% -% \subsection{Preserving Marks} -% -% 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{Preserving Float Order} -% -% 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. -% -% Use of the package showed that one also has to change the way -% \LaTeX{} handles star-form floats: if they are immediately deferred -% (as done normally) certain situations can still result in the float -% sequence getting out of order. This happens when a floats are placed -% in the middle of a paragraph. In that case the wide float is -% deferred immediately while a column wide float early on in the same -% paragraph might not be handled until the end of the paragraph when -% it is finally seen by the output routine. Since by that time the -% wide float is already on the |\@deferlist| the column float will -% also end up there (which is not only incorrect because it may have -% fitted onto the page but also because it is then placed at the end -% of this list). Version v0.03 now fixes this problem. -% -% -% \section{Implementation} -% \begin{macrocode} -%<*package> -% \end{macrocode} -% -% \subsection{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} -% -% \subsection{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{v0.03}{1998/08/17}{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 losing floats in certain -% circumstances a single call to the original |\doclearpage| -% will now no longer output all floats. -% \changes{v0.03}{1998/08/17}{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{v0.03}{1998/08/17}{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} -% -% \begin{macrocode} -%</package> -% \end{macrocode} -% -% \Finale -% |