Article View: comp.text.tex
Article #1648Re: LaTeX change bars
From: Dave Johnson
Date: Thu, 31 May 1990 19:35
Date: Thu, 31 May 1990 19:35
172 lines
6921 bytes
6921 bytes
In article <136281@sun.Eng.Sun.COM> cmcmanis@stpeter.Eng.Sun.COM (Chuck McManis) writes:
>Here is a good TeXHaX question: How can I generate change bars in
>a LaTeX document...
Here's a LaTeX document-style option for doing change bars that
I wrote a while ago. It's not perfect, but I does most things right...
Dave Johnson
Dept. of Computer Science
Rice University
----------------------------------------
% Change bar document-style option for LaTeX.
%
% Copyright (C) 1990 by David B. Johnson.
% These macros draw a solid bar down the right margin of the output,
% covering a range of the input file that has been declared to be changed.
%
% The beginning and end of a change bar in the text are marked with
% \chgbarbegin and \chgbarend, respectively. For example,
%
% Here is some sample text \chgbarbegin that was
% changed\chgbarend{} and some that wasn't changed.
%
% The change bar is drawn continuously between the line of output
% containing the \chgbarbegin and the line of output containing the
% \chgbarend. These lines can end up on separate pages, and the
% division at page boundaries is handled automatically.
% Two dimensions control the size and placement of the change bars:
% \chgbarwidth The width of a change bar
% \chgbarsep The distance between the text and the change bar
% Warning: it does not appear to be possible to do this completely
% correctly, due to the time at which the verticle glue on a page is
% finally set, and the way that page breaks are decided. With
% \raggedbottom, this normally works fine. It hasn't been tested with
% \flushbottom, but will probably behave worse. In strange rare
% situations, a change bar might be drawn from the first line of a page
% up off the top of a page; this can usually be fixed by slightly moving
% the \chngbarend around, or by breaking a single change bar range
% into two ranges.
\newdimen\chgbarwidth \newdimen\chgbarsep
\chgbarwidth 4pt
\chgbarsep .25in
\def\chgbarbegin{\ifhmode\@chgbar{-2}\else\@chgbar{-3}\fi}
\def\chgbarend{\@chgbar{-4}}
\marginparpush 0pt
% The remainder of this is hacked up based on the LaTeX 2.09 latex.tex.
% copied from \marginpar
\def\@chgbar#1{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
\@floatpenalty-\@Miii\fi\ifinner
\@parmoderr\@floatpenalty\z@
\else\@next\@currbox\@freelist{\global
\count\@currbox#1}{\@floatpenalty\z@ \@fltovf
\def\@currbox{\@tempboxa}}\fi
\setbox\@tempboxa\vbox
\bgroup\end@float\@esphack}
\newdimen\@chgbarbegin
\newif\if@inchgbar \@inchgbarfalse
\def\@addmarginpar{%
\ifnum\count\@currbox = -2 % change bar begin from hmode
\global\@chgbarbegin\@pageht \global\advance\@chgbarbegin -\baselineskip
\global\@inchgbartrue
\@cons\@freelist\@currbox
\else
\ifnum\count\@currbox = -3 % change bar begin not from hmode
\global\@chgbarbegin\@pageht
\global\@inchgbartrue
\@cons\@freelist\@currbox
\else
\ifnum\count\@currbox = -4 % change bar end
\if@inchgbar\else\@latexbug\fi
\@tempdima\@pageht \advance\@tempdima -\@chgbarbegin
\nointerlineskip
\@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
\hbox to\columnwidth
{\ifnum \@tempcnta >\z@
\hskip\columnwidth \hskip\chgbarsep
\else \hskip -\chgbarsep \fi
\hbox{\vbox to 0pt{\vss
\hrule \@height\@tempdima \@width\chgbarwidth \@depth\z@
}}
\hss}
\nointerlineskip
\global\@inchgbarfalse
\@cons\@freelist\@currbox
\else
\@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@
\@warning{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
\global\ht\@marbox\z@ \global\dp\@marbox\z@
\vskip -\@pagedp \vskip\@tempdima\nointerlineskip
\hbox to\columnwidth
{\ifnum \@tempcnta >\z@
\hskip\columnwidth \hskip\marginparsep
\else \hskip -\marginparsep \hskip -\marginparwidth \fi
\box\@marbox \hss}
\vskip -\@tempdima
\nointerlineskip
\hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}
\fi\fi\fi}
\def\@makecol{\setbox\@outputbox\box\@cclv
\if@inchgbar
\@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
\@tempdima\ht\@outputbox \advance\@tempdima -\@chgbarbegin
\advance\@tempdima -\baselineskip
\setbox\@outputbox
\vbox{\boxmaxdepth \maxdepth
\unvbox\@outputbox \nointerlineskip \hbox to\columnwidth
{\ifnum \@tempcnta >\z@
\hskip\columnwidth \hskip\chgbarsep
\else \hskip -\chgbarsep \fi
\hbox{\vbox to 0pt{\vss
\hrule \@height\@tempdima \@width\chgbarwidth \@depth\z@}}\hss}}
\global\@chgbarbegin 0pt
\fi
\ifvoid\footins\else\setbox\@outputbox
\vbox{\boxmaxdepth \maxdepth
\unvbox\@outputbox\vskip\skip\footins\footnoterule\unvbox\footins}\fi
\xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
\setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
\@texttop\dimen128=\dp\@outputbox\unvbox\@outputbox
\vskip-\dimen128\@textbottom}
\global\maxdepth\@maxdepth}
----------------------------------------
--
Dave Johnson
Dept. of Computer Science
Rice University
Technical Details
Message-ID:
<8281@brazos.Rice.edu>Path:
arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!mailrus!uwm.edu!cs.utexas.edu!rice!titan.rice.edu!dbjReferences:
<136281@sun.Eng.Sun.COM>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!utgpu!news-server.csri.toronto.edu!mailrus!uwm.edu!cs.utexas.edu!rice!titan.rice.edu!dbj From: dbj@titan.rice.edu (Dave Johnson) Newsgroups: comp.text.tex Subject: Re: LaTeX change bars Message-ID: <8281@brazos.Rice.edu> Date: 31 May 90 19:35:35 GMT References: <136281@sun.Eng.Sun.COM> Sender: root@rice.edu Organization: Rice University, Houston Lines: 172