[comp.text.tex] LaTeX change bars

cmcmanis@stpeter.Eng.Sun.COM (Chuck McManis) (05/26/90)

Here is a good TeXHaX question: How can I generate change bars in 
a LaTeX document. About the closest I've come in my experimenting
it to try to put a table in a margin paragraph with a vertical column.
Any clues or an outright spoiler :-) would be appreciated. Please use
email as I don't always get to this group before it expires...Thanks,


--
--Chuck McManis						    Sun Microsystems
uucp: {anywhere}!sun!cmcmanis   BIX: <none>   Internet: cmcmanis@Eng.Sun.COM
These opinions are my own and no one elses, but you knew that didn't you.
"I tell you this parrot is bleeding deceased!"

pirx@wedel.UUCP (Jan Hinnerk Haul) (05/29/90)

cmcmanis@stpeter.Eng.Sun.COM (Chuck McManis) writes:

>Here is a good TeXHaX question: How can I generate change bars in 
>a LaTeX document. 

I assume you want a black vertical bar in the margin of your document
to indicate changes against prior versions.

Well, that's quite easy:

\marginpar{\rule[-offset]{width}{height}}

For two-sided documents, you should use

\marginpar[\hfill\rule[-offset]{width}{height}}]%
{\rule[-offset]{width}{height}}}

(the % used to invaltdate the newline, so the line fits better)

Put this in the first line of your changed paragraph.
The offset moves down the bar (because its negative), for width
I would recommend 1mm or 0.5em, and as height the height of your changed
paragraph.

Please note that a \parbox will not be cut between pages.

The information herein is taken from H.Kopka, Latex: Eine Einf\"uhrung,
Addison-Wesley (Germany). I somewhat condensed and translated it.



PLEASE do NOT send LONG MAILS - we have to pay $0,30 per kilobyte. Thanks.
-- 
Jan Hinnerk Haul

.signature wird gerade frisch gestrichen - bitte nicht anlehnen

dbj@titan.rice.edu (Dave Johnson) (06/01/90)

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