% Change bar document-style option for LaTeX. % % Copyright (C) 1990 by David B. Johnson. % % dbj@titan.rice.edu (Dave 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}\relax} \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} \newenvironment{changebar}{\chgbarbegin}{\chgbarend}