%% %% %% Copyright (C) 1994-2005 Johannes Braams, All rights reserved. %% Copyright (C) 2017 Apostolos Syropoulos, All rights reserved. %% Modified by Apostolos Syropoulos for use with XeLaTeX %% -------------------------------------------------------------- %% %% 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 work has the LPPL maintenance status "maintained". %% %% The Current Maintainer of this work is Johannes Braams. %% %% This file may only be distributed together with a copy of the %% changebar package. You may however distribute thechangebar package %% without such generated files. %% %% The list of all files belonging to the changebar package is %% given in the file `manifest.txt. %% %% 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. \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{xechangebar} [2017/08/03 v1.0 Extends v3.5c of package changebar] \def\cb@maxpoint{80} \def\cb@minpoint{1} \def\cb@nil{0} \newcount\cb@nextpoint \cb@nextpoint=\cb@minpoint \newcount\cb@topleft \newcount\cb@topright \newcount\cb@botleft \newcount\cb@botright \newcount\cb@cnta \newcount\cb@cntb \newdimen\cb@dima \newdimen\cb@curbarwd \newcount\cb@page \newcount\cb@pagecount \cb@pagecount=0 \def\cb@barsplace{0} \newif\if@cb@trace \newif\if@cb@firstcolumn \def\cb@pdfxy#1#2#3#4#5{} \newdimen\cb@odd@left \newdimen\cb@odd@right \newdimen\cb@even@left \newdimen\cb@even@right \def\cb@positions{% \global\cb@odd@left=\hoffset \global\cb@even@left\cb@odd@left \global\advance\cb@odd@left by \oddsidemargin \global\cb@odd@right\cb@odd@left \global\advance\cb@odd@right by \textwidth \global\advance\cb@odd@right by \changebarsep \global\advance\cb@odd@right by 0.5\changebarwidth \global\advance\cb@odd@left by -\changebarsep \global\advance\cb@odd@left by -0.5\changebarwidth \if@twoside \global\advance\cb@even@left by \evensidemargin \global\cb@even@right\cb@even@left \global\advance\cb@even@left by -\changebarsep \global\advance\cb@even@left by -0.5\changebarwidth \global\advance\cb@even@right by \textwidth \global\advance\cb@even@right by \changebarsep \global\advance\cb@even@right by 0.5\changebarwidth \else \global\let\cb@even@left\cb@odd@left \global\let\cb@even@right\cb@odd@right \fi } {\catcode`\p=12\catcode`\t=12 \gdef\cb@removedim#1pt{#1}} \DeclareOption{DVItoLN03}{\global\chardef\cb@driver@setup=0\relax} \DeclareOption{dvitoln03}{\global\chardef\cb@driver@setup=0\relax} \DeclareOption{DVItoPS}{\global\chardef\cb@driver@setup=1\relax} \DeclareOption{dvitops}{\global\chardef\cb@driver@setup=1\relax} \DeclareOption{DVIps}{\global\chardef\cb@driver@setup=2\relax} \DeclareOption{dvips}{\global\chardef\cb@driver@setup=2\relax} \DeclareOption{emTeX}{\global\chardef\cb@driver@setup=3\relax} \DeclareOption{emtex}{\global\chardef\cb@driver@setup=3\relax} \DeclareOption{textures}{\global\chardef\cb@driver@setup=4\relax} \DeclareOption{Textures}{\global\chardef\cb@driver@setup=4\relax} \DeclareOption{VTeX}{\global\chardef\cb@driver@setup=5\relax} \DeclareOption{vtex}{\global\chardef\cb@driver@setup=5\relax} \DeclareOption{PDFTeX}{\cb@pdftexcheck} \DeclareOption{pdftex}{\cb@pdftexcheck} \DeclareOption{xetex}{\cb@xetexcheck} \def\cb@pdftexcheck{% \ifx\pdfsavepos\@undefined\cb@pdftexerror \else\ifx\pdfoutput\@undefined\cb@pdftexerror \else\ifnum\pdfoutput>0 \global\chardef\cb@driver@setup=6\relax \ifx\cb@writexy\@undefined \newwrite\cb@writexy \newread\cb@readxy \immediate\openout\cb@writexy=\jobname.cb2\relax \fi \gdef\cb@pdfxy##1##2##3##4##5{% \immediate\write\cb@writexy{##1.##2p##3,##4,##5}% \expandafter\gdef\csname cb@##1.##2\endcsname{##3,##4,##5}} \else\cb@pdftexerror\fi\fi\fi} \def\cb@pdftexerror{\PackageError {changebar}% {PDFTeX option cannot be used}% {You are using a LaTeX run which does not generate PDF\MessageBreak or you are using a very old version of PDFTeX}} \def\cb@xetexcheck{% \expandafter\ifx\csname XeTeXrevision\endcsname\@undefined \cb@xetexerror \else \global\chardef\cb@driver@setup=7\relax \ifx\cb@writexy\@undefined \newwrite\cb@writexy \newread\cb@readxy \immediate\openout\cb@writexy=\jobname.cb2\relax \fi \gdef\cb@pdfxy##1##2##3##4##5{% \immediate\write\cb@writexy{##1.##2p##3,##4,##5}% \expandafter\gdef\csname cb@##1.##2\endcsname{##3,##4,##5}} \gdef\sec@nd@ftw@##1 ##2{##2} \fi} \def\cb@xetexerror{\PackageError {changebar}% {XeTeX option cannot be used}% {You are not using XeLaTeX}} \DeclareOption{outerbars}{\def\cb@barsplace{1}} \DeclareOption{innerbars}{\def\cb@barsplace{0}} \DeclareOption{leftbars}{\def\cb@barsplace{2}} \DeclareOption{rightbars}{\def\cb@barsplace{3}} \DeclareOption{traceon}{\@cb@tracetrue} \DeclareOption{traceoff}{\@cb@tracefalse} \DeclareOption{tracestacks}{% \let\cb@trace@stack\cb@@show@stack \def\cb@trace@push#1{\cb@trace{% Pushed point \the\cb@topleft\space on \noexpand#1: #1}}% \def\cb@trace@pop#1{\cb@trace{% Popped point \the\cb@topleft\space from \noexpand#1: #1}}% } \DeclareOption{grey}{% \def\cb@ps@color{\thechangebargrey\space 100 div setgray}} \DeclareOption{color}{% \def\cb@ps@color{\expandafter\c@lor@to@ps\cb@current@color\@@}% \def\cb@color@pkg{color}} \DeclareOption{xcolor}{% \def\cb@ps@color{\expandafter\c@lor@to@ps\cb@current@color\@@}% \def\cb@color@pkg{xcolor}} \DeclareOption*{\OptionNotUsed\PackageError {changebar}% {Unrecognised option `\CurrentOption'\MessageBreak known options are dvitoln03, dvitops, dvips,\MessageBreak emtex, textures, pdftex, and vtex grey, color, xcolor,\MessageBreak outerbars, innerbars, leftbars and rightbars}} \ifx\VTeXversion\@undefined \expandafter\ifx\csname XeTeXrevision\endcsname\@undefined \ifx\pdfoutput\@undefined \ExecuteOptions{innerbars,traceoff,dvips,grey} \else \ifnum\pdfoutput>0 \ExecuteOptions{innerbars,traceoff,pdftex,grey} \else \ExecuteOptions{innerbars,traceoff,dvips,grey} \fi \fi \else \ExecuteOptions{innerbars,traceoff,xetex,grey} \fi \else \ExecuteOptions{innerbars,traceoff,vtex,grey} \fi \InputIfFileExists{changebar.cfg}{}{} \def\cb@@show@stack#1{% \cb@trace{% stack status at #1:\MessageBreak current stack: \cb@currentstack\MessageBreak \@spaces end stack: \cb@endstack\MessageBreak \space\space begin stack: \cb@beginstack\MessageBreak history stack: \cb@historystack }} \let\cb@trace@stack\@gobble \let\cb@trace@push\@gobble \let\cb@trace@pop\@gobble \ProcessOptions\relax \ifx\pdfsavepos\@undefined \else \ifx\pdfoutput\@undefined \else \ifnum\pdfoutput>0 \global\chardef\cb@driver@setup=6\relax \fi \fi \fi \newcommand{\cb@trace}[1]{% \if@cb@trace \GenericWarning {(changebar)\@spaces\@spaces}% {Package changebar: #1\@gobble}% \fi } \if@compatibility \def\driver#1{% \bgroup\edef\next{\def\noexpand\tempa{#1}}% \uppercase\expandafter{\next}% \def\LN{DVITOLN03}% \def\DVItoPS{DVITOPS}% \def\DVIPS{DVIPS}% \def\emTeX{EMTEX}% \def\Textures{TEXTURES}% \def\VTeX{VTEX}% \def\pdfTeX{PDFTEX} \def\xetex{XETEX} \global\chardef\cb@driver@setup=0\relax \ifx\tempa\LN \global\chardef\cb@driver@setup=0\fi \ifx\tempa\DVItoPS \global\chardef\cb@driver@setup=1\fi \ifx\tempa\DVIPS \global\chardef\cb@driver@setup=2\fi \ifx\tempa\emTeX \global\chardef\cb@driver@setup=3\fi \ifx\tempa\Textures \global\chardef\cb@driver@setup=4\fi \ifx\tempa\VTeX \global\chardef\cb@driver@setup=5\fi \ifx\tempa\pdfTeX \cb@pdftexcheck\fi \ifx\tempa\xeTeX \cb@xetexcheck\fi \egroup} {\def\do{\noexpand\do\noexpand} \xdef\@preamblecmds{\@preamblecmds \do\driver} } \fi \def\cb@trace@defpoint#1#2{% \cb@trace{% defining point \the#1 at position \the#2 \MessageBreak cb@pagecount: \the\cb@pagecount; page \thepage}} \def\cb@trace@connect#1#2#3{% \cb@trace{% connecting points \the#1 and \the#2; barwidth: \the#3 \MessageBreak cb@pagecount: \the\cb@pagecount; page \thepage}} \def\cb@setup@specials{% \ifcase\cb@driver@setup \def\cb@defpoint##1##2{% \special{ln03:defpoint \the##1(\the##2,)}% \cb@trace@defpoint##1##2} \def\cb@connect##1##2##3{% \special{ln03:connect \the##1\space\space \the##2\space \the##3}% \cb@trace@connect##1##2##3} \def\cb@resetpoints{% \special{ln03:resetpoints \cb@minpoint \space\cb@maxpoint}} \or \def\cb@defpoint##1##2{% \special{dvitops: inline \expandafter\cb@removedim\the##2\space 6.5536 mul\space /CBarX\the##1\space exch def currentpoint exch pop /CBarY\the##1\space exch def}% \cb@trace@defpoint##1##2} \def\cb@connect##1##2##3{% \special{dvitops: inline gsave \cb@ps@color\space \expandafter\cb@removedim\the##3\space 6.5536 mul\space CBarX\the##1\space\space CBarY\the##1\space\space moveto CBarX\the##2\space\space CBarY\the##2\space\space lineto stroke grestore}% \cb@trace@connect##1##2##3} \let\cb@resetpoints\relax \or \def\cb@defpoint##1##2{% \special{ps: \expandafter\cb@removedim\the##2\space Resolution\space mul\space 72.27\space div\space /CBarX\the##1\space exch def currentpoint exch pop /CBarY\the##1\space exch def}% \cb@trace@defpoint##1##2} \def\cb@connect##1##2##3{% \special{ps: gsave \cb@ps@color\space \expandafter\cb@removedim\the##3\space Resolution\space mul\space 72.27\space div\space setlinewidth CBarX\the##1\space\space CBarY\the##1\space\space moveto CBarX\the##2\space\space CBarY\the##2\space\space lineto stroke grestore}% \cb@trace@connect##1##2##3} \let\cb@resetpoints\relax \or \def\cb@defpoint##1##2{% \special{em:point \the##1,\the##2}% \cb@trace@defpoint##1##2} \def\cb@connect##1##2##3{% \special{em:line \the##1,\the##2,\the##3}% \cb@trace@connect##1##2##3} \let\cb@resetpoints\relax \or \def\cb@defpoint##1##2{% \special{postscript 0 0 transform}% leave [x,y] on the stack \special{rawpostscript \expandafter\cb@removedim\the##2\space /CBarX\the##1\space exch def itransform exch pop /CBarY\the##1\space exch def}% \if@cb@trace\cb@trace@defpoint##1##2\fi} \def\cb@connect##1##2##3{% \special{rawpostscript gsave 1 setlinecap \cb@ps@color\space \expandafter\cb@removedim\the##3\space setlinewidth CBarX\the##1\space\space CBarY\the##1\space\space moveto CBarX\the##2\space\space CBarY\the##2\space\space lineto stroke grestore}% \if@cb@trace\cb@trace@connect##1##2##3\fi} \let\cb@resetpoints\relax \or \def\cb@defpoint##1##2{% \special{pS: \expandafter\cb@removedim\the##2\space Resolution\space mul\space 72.27\space div\space /CBarX\the##1\space exch def currentpoint exch pop /CBarY\the##1\space exch def}% \cb@trace@defpoint##1##2} \def\cb@connect##1##2##3{% \special{pS: gsave \cb@ps@color\space \expandafter\cb@removedim\the##3\space Resolution\space mul\space 72.27\space div\space setlinewidth CBarX\the##1\space\space CBarY\the##1\space\space moveto CBarX\the##2\space\space CBarY\the##2\space\space lineto stroke grestore}% \cb@trace@connect##1##2##3} \let\cb@resetpoints\relax \or \immediate\closeout\cb@writexy \immediate\openin\cb@readxy=\jobname.cb2\relax \def\cb@pdfpoints{} \def\cb@pdfpagenr{0} \def\cb@findpdfpoint##1##2{% \edef\cb@temp {\noexpand\cb@@findpdfpoint{\the##1}{\the##2}}% \cb@temp } \def\cb@@findpdfpoint##1##2{% \ifnum##2<\cb@pdfpagenr\relax\else \cb@pdfreadxy{##2}% \fi \let\cb@pdfx\relax \ifx\cb@pdfpoints\@empty\else \ifnum##2<0\relax \else \edef\cb@temp{\noexpand\cb@pdffind{##1}{##2}\cb@pdfpoints\relax{}}% \cb@temp \fi \fi } \def\cb@pdffind##1##2##3.##4p##5,##6,##7pt##8\relax##9{% \def\cb@next{\cb@pdffind{##1}{##2}##8\relax{##9##3.##4p##5,##6,##7pt}}% \ifnum ##1=##3 \ifnum ##2=##4 \def\cb@pdfx{##5sp}% \def\cb@pdfy{##6sp}% \def\cb@pdfz{##7pt}% \let\cb@next\relax \gdef\cb@pdfpoints{##9##8}% \fi \fi \ifx\relax##8\relax \let\cb@next\relax \fi \cb@next }% \def\cb@pdfreadxy##1{% \let\cb@next\relax \ifeof\cb@readxy \global\let\cb@pdfpagenr\cb@maxpoint \else {\endlinechar=-1\read\cb@readxy to\cb@temp \ifx\cb@temp\@empty\else \expandafter\cb@pdfparsexy\cb@temp \ifnum\cb@pdfpg<0\else \xdef\cb@pdfpoints{\cb@pdfpoints\cb@temp}% \cb@trace{PDFpoints=\cb@pdfpoints}% \global\let\cb@pdfpagenr\cb@pdfpg \fi \ifnum\cb@pdfpg>##1\else \global\def\cb@next{\cb@pdfreadxy{##1}}% \fi \fi }% \fi \cb@next }% \def\cb@pdfparsexy##1.##2p##3,##4,##5pt{% \def\cb@pdfpg{##2}}% \def\cb@defpoint##1##2{% \if@filesw \begingroup \edef\point{{\the##1}{\the\cb@pagecount}}% \let\the=\z@ \pdfsavepos \edef\cb@temp{\write\@auxout {\string\cb@pdfxy\point {\the\pdflastxpos}{\the\pdflastypos}{\the##2}}}% \cb@temp \endgroup \fi \cb@trace@defpoint##1##2% }% \def\cb@cvtpct##1{% \ifnum##1<0 0\else \ifnum##1>99 1\else \ifnum##1<10 0.0\the##1\else 0.\the##1\fi\fi\fi} \def\cb@connect##1##2##3{% \cb@findpdfpoint{##1}\cb@pagecount \ifx\cb@pdfx\relax\cb@rerun \else \let\cb@pdftopy\cb@pdfy \cb@findpdfpoint{##2}\cb@pagecount \ifx\cb@pdfx\relax\cb@rerun \else \begingroup \cb@dima=\cb@pdfz \advance\cb@dima by-\cb@pdfx \advance\cb@dima by1in \cb@dima=0.996264009963\cb@dima\relax \ifx\cb@current@color\@undefined \def\cb@temp{\cb@cvtpct\c@changebargrey}% \pdfliteral{q \cb@temp\space g \cb@temp\space G}% \else \pdfliteral{q \cb@current@color}% \fi \edef\cb@temp{\expandafter\cb@removedim\the\cb@dima\space}% \cb@dima=\cb@pdftopy \advance\cb@dima-\cb@pdfy\relax \cb@dima=0.996264009963\cb@dima\relax ##3=0.996264009963##3\relax \pdfliteral direct{\expandafter\cb@removedim\the##3 w \cb@temp 0 m \cb@temp \expandafter\cb@removedim\the\cb@dima\space l S Q}% \endgroup \cb@cntb=##1\relax \ifodd\cb@cntb\advance\cb@cntb 1\else\advance\cb@cntb -1\fi \cb@findpdfpoint\cb@cntb\cb@pagecount \cb@cntb=##2\relax \ifodd\cb@cntb\advance\cb@cntb 1\else\advance\cb@cntb -1\fi \cb@findpdfpoint\cb@cntb\cb@pagecount \fi \fi \cb@trace@connect##1##2##3% }% \gdef\cb@checkPdfxy##1##2##3##4##5{% \cb@@findpdfpoint{##1}{##2}% \ifnum##3=\cb@pdfx\relax \ifnum##4=\cb@pdfy\relax \ifdim##5=\cb@pdfz\relax \else \cb@error \fi \else \cb@error \fi \else \cb@error \fi } \def\cb@maxpoint{9999999} \let\cb@resetpoints\relax \or %xetex \immediate\closeout\cb@writexy \immediate\openin\cb@readxy=\jobname.cb2\relax \def\cb@pdfpoints{} \def\cb@pdfpagenr{0} \def\cb@findpdfpoint##1##2{% \edef\cb@temp {\noexpand\cb@@findpdfpoint{\the##1}{\the##2}}% \cb@temp } \def\cb@@findpdfpoint##1##2{% \ifnum##2<\cb@pdfpagenr\relax\else \cb@pdfreadxy{##2}% \fi \let\cb@pdfx\relax \ifx\cb@pdfpoints\@empty\else \ifnum##2<0\relax \else \edef\cb@temp{\noexpand\cb@pdffind{##1}{##2}\cb@pdfpoints\relax{}}% \cb@temp \fi \fi } \def\cb@pdffind##1##2##3.##4p##5,##6,##7pt##8\relax##9{% \def\cb@next{\cb@pdffind{##1}{##2}##8\relax{##9##3.##4p##5,##6,##7pt}}% \ifnum ##1=##3 \ifnum ##2=##4 \def\cb@pdfx{##5sp}% \def\cb@pdfy{##6sp}% \def\cb@pdfz{##7pt}% \let\cb@next\relax \gdef\cb@pdfpoints{##9##8}% \fi \fi \ifx\relax##8\relax \let\cb@next\relax \fi \cb@next }% \def\cb@pdfreadxy##1{% \let\cb@next\relax \ifeof\cb@readxy \global\let\cb@pdfpagenr\cb@maxpoint \else {\endlinechar=-1\read\cb@readxy to\cb@temp \ifx\cb@temp\@empty\else \expandafter\cb@pdfparsexy\cb@temp \ifnum\cb@pdfpg<0\else \xdef\cb@pdfpoints{\cb@pdfpoints\cb@temp}% \cb@trace{PDFpoints=\cb@pdfpoints}% \global\let\cb@pdfpagenr\cb@pdfpg \fi \ifnum\cb@pdfpg>##1\else \global\def\cb@next{\cb@pdfreadxy{##1}}% \fi \fi }% \fi \cb@next }% \def\cb@pdfparsexy##1.##2p##3,##4,##5pt{% \def\cb@pdfpg{##2}}% \def\cb@defpoint##1##2{% \if@filesw \begingroup \edef\point{{\the##1}{\the\cb@pagecount}}% \let\the=\z@ \pdfsavepos \edef\cb@temp{\write\@auxout {\string\cb@pdfxy\point {\the\pdflastxpos}{\the\pdflastypos}{\the##2}}}% \cb@temp \endgroup \fi \cb@trace@defpoint##1##2% }% \def\cb@cvtpct##1{% \ifnum##1<0 0\else \ifnum##1>99 1\else \ifnum##1<10 0.0\the##1\else 0.\the##1\fi\fi\fi} \def\cb@connect##1##2##3{% \cb@findpdfpoint{##1}\cb@pagecount \ifx\cb@pdfx\relax\cb@rerun \else \let\cb@pdftopy\cb@pdfy \cb@findpdfpoint{##2}\cb@pagecount \ifx\cb@pdfx\relax\cb@rerun \else \begingroup \cb@dima=\cb@pdfz \advance\cb@dima by-\cb@pdfx \advance\cb@dima by1in \cb@dima=0.996264009963\cb@dima\relax \ifx\cb@current@color\@undefined \def\cb@temp{\cb@cvtpct\c@changebargrey}% \special{pdf:literal q \cb@temp\space g\space\cb@temp\space G}% \else \special{pdf:literal q \expandafter\sec@nd@ftw@\cb@current@color\space RG \expandafter\sec@nd@ftw@\cb@current@color\space rg}% \fi \edef\cb@temp{\expandafter\cb@removedim\the\cb@dima\space}% \cb@dima=\cb@pdftopy \advance\cb@dima-\cb@pdfy\relax \cb@dima=0.996264009963\cb@dima\relax ##3=0.996264009963##3\relax \special{pdf:literal \expandafter\cb@removedim\the##3 w \cb@temp 0 m \cb@temp \expandafter\cb@removedim\the\cb@dima\space l S Q}% \endgroup \cb@cntb=##1\relax \ifodd\cb@cntb\advance\cb@cntb 1\else\advance\cb@cntb -1\fi \cb@findpdfpoint\cb@cntb\cb@pagecount \cb@cntb=##2\relax \ifodd\cb@cntb\advance\cb@cntb 1\else\advance\cb@cntb -1\fi \cb@findpdfpoint\cb@cntb\cb@pagecount \fi \fi \cb@trace@connect##1##2##3% }% \gdef\cb@checkPdfxy##1##2##3##4##5{% \cb@@findpdfpoint{##1}{##2}% \ifnum##3=\cb@pdfx\relax \ifnum##4=\cb@pdfy\relax \ifdim##5=\cb@pdfz\relax \else \cb@error \fi \else \cb@error \fi \else \cb@error \fi } \def\cb@maxpoint{9999999} \let\cb@resetpoints\relax % \or \else \PackageWarning{Changebar}{changebars not supported in unknown setup} \def\cb@defpoint##1##2{\cb@trace@defpoint##1##2} \def\cb@connect##1##2##3{\cb@trace@connect##1##2##3} \let\cb@resetpoints\relax \fi \global\let\cb@setup@specials\relax} \newcommand*{\cbstart}{\@ifnextchar [%] {\cb@start}% {\cb@start[\changebarwidth]}} \newcommand*{\cbend}{\cb@end} \newcommand*{\cbdelete}{\@ifnextchar [%] {\cb@delete}% {\cb@delete[\deletebarwidth]}} \def\cb@delete[#1]{\vbox to \z@{\vss\cb@start[#1]\vskip #1\cb@end}} \newenvironment{changebar}% {\@ifnextchar [{\cb@start}% {\cb@start[\changebarwidth]}}% {\cb@end} \newcommand*{\nochangebars}{% \def\cb@start[##1]{}% \def\cb@delete[##1]{}% \let\cb@end\relax} \newlength{\changebarwidth} \setlength{\changebarwidth}{2pt} \newlength{\deletebarwidth} \setlength{\deletebarwidth}{4pt} \newlength{\changebarsep} \setlength{\changebarsep}{30pt} \newcounter{changebargrey} \setcounter{changebargrey}{65} \@ifpackagewith{changebar}{\csname cb@color@pkg\endcsname}{% \RequirePackage{\cb@color@pkg}% \DeclareRobustCommand\cbcolor{% \@ifnextchar[\@undeclaredcbcolor\@declaredcbcolor} \def\@undeclaredcbcolor[#1]#2{% \begingroup \color[#1]{#2}% \global\let\cb@current@color\current@color \endgroup \ignorespaces } \def\@declaredcbcolor#1{% \begingroup \color{#1}% \global\let\cb@current@color\current@color \endgroup \ignorespaces}% }{% \def\cbcolor{\@ifnextchar[%] \@@cbcolor\@cbcolor}% \def\@@cbcolor[#1]#2{\cb@colwarn\def\@@cbcolor[##1]##2{}}% \def\@cbcolor#1{\cb@colwarn\def\@cbcolor##1{}}% \def\cb@colwarn{\PackageWarning{Changebar}% {You didn't specify the option `color';\MessageBreak your command \string\cbcolor\space will be ignored}}% } \def\cb@start[#1]{% \cb@topleft=\cb@nextpoint \cb@curbarwd#1\relax \cb@push\cb@currentstack \cb@checkpage\z@ \cb@cnta\cb@pagecount \cb@pagecount\cb@page\advance\cb@pagecount\m@ne \ifvmode \cb@setBeginPoints \else \vbox to \z@{% \vskip -\ht\strutbox \cb@setBeginPoints \vskip \ht\strutbox}% \fi \cb@pagecount\cb@cnta \cb@advancePoint} \def\cb@advancePoint{% \global\advance\cb@nextpoint by 4\relax \ifnum\cb@nextpoint>\cb@maxpoint \global\cb@nextpoint=\cb@minpoint\relax \fi} \def\cb@end{% \cb@trace@stack{end of bar on page \the\c@page}% \cb@pop\cb@currentstack \ifnum\cb@topleft=\cb@nil \PackageWarning{Changebar}% {Badly nested changebars; Expect erroneous results}% \else \cb@checkpage\thr@@ \cb@cnta\cb@pagecount \cb@pagecount\cb@page\advance\cb@pagecount\m@ne \ifvmode \cb@setEndPoints \else \vadjust{\cb@setEndPoints}% \fi \cb@pagecount\cb@cnta \fi \ignorespaces} \def\cb@checkpage#1{% \cb@cnta\cb@topleft\relax \advance\cb@cnta by #1\relax \cb@cntb\cb@page\relax \cb@dima\cb@curbarwd\relax \cb@pop\cb@historystack \ifnum\cb@topleft=\cb@nil \else \cb@FindPageNum \ifnum\cb@topleft>\cb@maxpoint\else \cb@cntb\cb@page \fi \@whilenum\cb@topleft>\cb@nil\do{% \cb@push\cb@historystack \cb@pop\cb@tempstack}% \fi \advance\cb@cnta by -#1\relax \cb@topleft\cb@cnta\relax \cb@page\cb@cntb\relax \cb@curbarwd\cb@dima\relax } \def\cb@FindPageNum{% \ifnum\cb@topleft=\cb@cnta \else \cb@push\cb@tempstack \cb@pop\cb@historystack \ifnum\cb@topleft=\cb@nil \cb@trace{Ran out of history stack, new changebar?}% \cb@topleft\cb@maxpoint\advance\cb@topleft\@ne \else \expandafter\expandafter\expandafter\cb@FindPageNum \fi \fi }% \def\cb@setBeginPoints{% \cb@topright=\cb@topleft\advance\cb@topright by\@ne \cb@cntb=\cb@pagecount \divide\cb@cntb by\tw@ \ifodd\cb@cntb \cb@defpoint\cb@topleft\cb@even@left \cb@defpoint\cb@topright\cb@even@right \else \cb@defpoint\cb@topleft\cb@odd@left \cb@defpoint\cb@topright\cb@odd@right \fi \cb@writeAux\cb@topleft } \def\cb@setEndPoints{% \cb@topright=\cb@topleft\advance\cb@topright by\@ne \cb@botleft=\cb@topleft\advance\cb@botleft by\tw@ \cb@botright=\cb@topleft\advance\cb@botright by\thr@@ \cb@cntb=\cb@pagecount \divide\cb@cntb by\tw@ \ifodd\cb@cntb \cb@defpoint\cb@botleft\cb@even@left \cb@defpoint\cb@botright\cb@even@right \else \cb@defpoint\cb@botleft\cb@odd@left \cb@defpoint\cb@botright\cb@odd@right \fi \cb@writeAux\cb@botright \edef\cb@leftbar{% \noexpand\cb@connect{\cb@topleft}{\cb@botleft}{\cb@curbarwd}}% \edef\cb@rightbar{% \noexpand\cb@connect{\cb@topright}{\cb@botright}{\cb@curbarwd}}% \if@twocolumn \ifodd\cb@pagecount\cb@rightbar\else\cb@leftbar\fi \else \ifcase\cb@barsplace \ifodd\cb@cntb \cb@rightbar \else \if@twoside\cb@leftbar\else\cb@rightbar\fi \fi \or \ifodd\cb@cntb \cb@leftbar \else \if@twoside\cb@rightbar\else\cb@leftbar\fi \fi \or \cb@leftbar \or \cb@rightbar \fi \fi }% \def\cb@writeAux#1{% \if@filesw \begingroup \edef\point{\the#1}% \edef\level{\the\cb@curbarwd}% \let\the=\z@ \edef\cb@temp{\write\@auxout {\string\cb@barpoint{\point}{\the\cb@pagecount}{\level}}}% \cb@temp \endgroup \fi} \newif\if@cb@pagejump \def\cb@pagejumplst{-1} \def\cb@nextpagejump{-1} \def\cb@pagejump#1{\xdef\cb@pagejumplst{\cb@pagejumplst,#1}} \def\cb@writepagejump#1{ \cb@cntb=\cb@pagecount \advance\cb@cntb by#1\relax \global\setbox\@leftcolumn\vbox to\@colht{% \edef\cb@temp{\write\@auxout{\string\cb@pagejump{\the\cb@cntb}}}% \cb@temp \dimen@ \dp\@leftcolumn \unvbox \@leftcolumn \vskip -\dimen@ }% } \def\cb@poppagejump#1,#2\relax{% \gdef\cb@nextpagejump{#1}% \gdef\cb@pagejumplst{#2}} \def\cb@checkpagecount{% \if@twocolumn \if@firstcolumn \ifodd\cb@pagecount\global\advance\cb@pagecount by\@ne\fi \fi \else \ifodd\cb@pagecount\global\advance\cb@pagecount by\@ne\fi \fi \if@twoside \cb@cntb=\cb@pagecount \divide\cb@cntb by\tw@ \advance\cb@cntb by-\c@page \ifodd\cb@cntb \if@twocolumn \if@firstcolumn \@whilenum\cb@pagecount>\cb@nextpagejump\do{% \expandafter\cb@poppagejump\cb@pagejumplst\relax}% \ifnum\cb@pagecount=\cb@nextpagejump \cb@trace{Page jump: \string\cb@pagecount=\the\cb@pagecount} \global\advance\cb@pagecount by\tw@ \global\@cb@pagejumptrue \else \global\@cb@pagejumpfalse \fi \else \if@cb@pagejump \cb@writepagejump{-3}% \fi \fi \fi \else \if@twocolumn \if@firstcolumn \global\advance\cb@pagecount by\tw@ \global\@cb@pagejumpfalse \else \if@cb@pagejump \cb@trace{Page jump annulled, % \string\cb@pagecount=\the\cb@pagecount} \else \cb@writepagejump{-1}% \global\advance\cb@pagecount by\tw@ \cb@rerun \fi \fi \else \global\advance\cb@pagecount by\tw@ \fi \fi \fi } \let\ltx@makecol\@makecol \def\cb@makecol{% \if@twocolumn \cb@trace{Twocolumn: \if@firstcolumn Left \else Right \fi column}% \fi \cb@trace@stack{before makecol, page \the\c@page, \string\cb@pagecount=\the\cb@pagecount}% \let\cb@writeAux\@gobble \cb@checkpagecount \setbox\@cclv \vbox{% \cb@resetpoints \cb@startSpanBars \unvbox\@cclv \boxmaxdepth\maxdepth}% \global\advance\cb@pagecount by\@ne \cb@buildstack\cb@processActive \ltx@makecol \if@twocolumn \global\setbox\@outputbox \vbox to\@colht {% \if@firstcolumn\write\@auxout{\string\@cb@firstcolumntrue}% \else\write\@auxout{\string\@cb@firstcolumnfalse}% \fi \dimen@ \dp\@outputbox \unvbox \@outputbox \vskip -\dimen@ }% \fi \cb@trace@stack{after makecol, page \the\c@page, \string\cb@pagecount=\the\cb@pagecount}% } \let\@makecol\cb@makecol \let\ltx@vtryfc\@vtryfc \def\cb@vtryfc#1{% \cb@trace{In vtryfc, page \the\c@page, \string\cb@pagecount=\the\cb@pagecount}% \let\cb@writeAux\@gobble \cb@checkpagecount \ltx@vtryfc{#1}% \if@twocolumn \global\setbox\@outputbox \vbox to\@colht{% \if@firstcolumn\write\@auxout{\string\@cb@firstcolumntrue}% \else\write\@auxout{\string\@cb@firstcolumnfalse}% \fi \unvbox\@outputbox \boxmaxdepth\maxdepth }% \fi \global\advance\cb@pagecount by \@ne } \let\@vtryfc\cb@vtryfc \def\cb@processActive{% \cb@pop\cb@endstack \ifnum\cb@topleft=\cb@nil \else \setbox\@cclv\vbox{% \unvbox\@cclv \boxmaxdepth\maxdepth \advance\cb@pagecount by -1\relax \cb@setEndPoints}% \cb@push\cb@historystack \cb@push\cb@beginstack \expandafter\cb@processActive \fi} \def\cb@startSpanBars{% \cb@pop\cb@beginstack \ifnum\cb@topleft=\cb@nil \else \cb@setBeginPoints \cb@trace@stack{after StartSpanBars, page \the\c@page}% \expandafter\cb@startSpanBars \fi } \def\cb@buildstack{% \cb@initstack\cb@endstack \cb@pushNextActive} \def\cb@pushNextActive{% \cb@pop\cb@historystack \ifnum\cb@topleft=\cb@nil \else \ifnum\cb@page>\cb@pagecount \cb@push\cb@historystack \else \ifodd\cb@topleft \cb@push\cb@endstack \else \cb@pop\cb@endstack \fi \expandafter\expandafter\expandafter\cb@pushNextActive \fi \fi} \def\cb@initstack#1{\xdef#1{}} \cb@initstack\cb@historystack \newwrite\cb@write \newread\cb@read \immediate\openout\cb@write=\jobname.cb\relax \cb@initstack\cb@endstack \cb@initstack\cb@beginstack \cb@initstack\cb@tempstack \cb@initstack\cb@currentstack \def\cb@thehistorystack{\cb@historystack} \def\cb@pop#1{% \ifx #1\@empty \def\cb@temp{#1}% \ifx\cb@temp\cb@thehistorystack \ifeof\cb@read \else {\endlinechar=-1\read\cb@read to\cb@temp \xdef\cb@historystack{\cb@historystack\cb@temp}% }% \fi \fi \fi \ifx#1\@empty \global\cb@topleft\cb@nil \global\cb@page\z@\relax \else \expandafter\cb@carcdr#1e#1% \fi \cb@trace@pop{#1}} \def\cb@carcdr#1n#2p#3l#4e#5{% \global\cb@topleft#1\relax \global\cb@page#2\relax \global\cb@curbarwd#3\relax \xdef#5{#4}} \def\cb@push#1{% \xdef#1{\the\cb@topleft n\the\cb@page p\the\cb@curbarwd l#1}% \cb@trace@push{#1}} \def\cb@barpoint#1#2#3{\cb@cnta=#2 \if@cb@firstcolumn\advance\cb@cnta by\m@ne\fi \immediate\write\cb@write{#1n\the\cb@cnta p#3l}} \AtBeginDocument{% \cb@setup@specials \cb@pagejump{999999999,}% \cb@positions \cb@trace{% Odd left : \the\cb@odd@left\space Odd right : \the\cb@odd@right\MessageBreak Even left: \the\cb@even@left\space Even right: \the\cb@even@right }% \immediate\closeout\cb@write \immediate\openin\cb@read=\jobname.cb} \AtEndDocument{% \clearpage \cb@initstack\cb@historystack \immediate\closein\cb@read \immediate\openin\cb@read=\jobname.cb% \ifx\cb@readxy\@undefined \else \immediate\closein\cb@readxy \immediate\openin\cb@readxy=\jobname.cb2% \def\cb@pdfpoints{}% \def\cb@pdfpagenr{0}% \fi \@cb@firstcolumnfalse \cb@checkrerun \let\cb@pdfxy\cb@checkPdfxy \let\cb@pagejump\@gobble \let\cb@barpoint\cb@checkHistory} \def\cb@checkHistory#1#2#3{% \cb@pop\cb@historystack \ifnum #1=\cb@topleft\relax \cb@cnta=#2 \if@cb@firstcolumn\advance\cb@cnta by\m@ne\fi \ifnum \cb@cnta=\cb@page\relax \else \cb@error \fi \else \cb@error \fi} \def\cb@checkPdfxy#1#2#3#4#5{} \def\cb@rerun{% \global\let\cb@checkrerun\cb@error} \let\cb@checkrerun\relax \def\cb@error{% \PackageWarning{Changebar}% {Changebar info has changed.\MessageBreak Rerun to get the bars right} \gdef\cb@checkHistory##1##2##3{}% \let\cb@barpoint\cb@checkHistory \gdef\cb@checkPdfxy##1##2##3##4##5{}% \let\cb@pdfxy\cb@checkPdfxy} \let\ltx@end@float\end@float \def\cb@end@float{% \cb@trace@stack{end float on page \the\c@page}% \cb@pop\cb@currentstack \ifnum\cb@topleft=\cb@nil \else \cb@push\cb@currentstack \global\cb@curbarwd=\cb@curbarwd \@endfloatbox \global\setbox\@currbox \color@vbox \normalcolor \vbox\bgroup\cb@start[\cb@curbarwd]\unvbox\@currbox\cb@end \fi \ltx@end@float} \let\end@float\cb@end@float \let\flt@float@end\float@end \def\float@end{% \cb@trace@stack{end float on page \the\c@page}% \cb@pop\cb@currentstack \ifnum\cb@topleft=\cb@nil \else \cb@push\cb@currentstack \global\cb@curbarwd\cb@curbarwd \@endfloatbox \global\setbox\@currbox \color@vbox \normalcolor \vbox\bgroup\cb@start[\cb@curbarwd]\unvbox\@currbox\cb@end \fi \let\end@float\ltx@end@float \flt@float@end } \let\ltx@end@dblfloat\end@dblfloat \def\cb@end@dblfloat{% \if@twocolumn \cb@trace@stack{end dblfloat on page \the\c@page}% \cb@pop\cb@currentstack \ifnum\cb@topleft=\cb@nil \else \cb@push\cb@currentstack \global\cb@curbarwd=\cb@curbarwd \@endfloatbox \global\setbox\@currbox \color@vbox \normalcolor \vbox\bgroup\cb@start[\cb@curbarwd]\unvbox\@currbox\cb@end \fi \@endfloatbox \ifnum\@floatpenalty <\z@ \@largefloatcheck \@cons\@dbldeferlist\@currbox \fi \ifnum \@floatpenalty =-\@Mii \@Esphack\fi \else \end@float \fi} \let\end@dblfloat\cb@end@dblfloat \let\flt@float@dblend\float@dblend \def\float@dblend{% \cb@trace@stack{end dbl float on page \the\c@page}% \cb@pop\cb@currentstack \ifnum\cb@topleft=\cb@nil \else \cb@push\cb@currentstack \global\cb@curbarwd=\cb@curbarwd \@endfloatbox \global\setbox\@currbox \color@vbox \normalcolor \vbox\bgroup\cb@start[\cb@curbarwd]\unvbox\@currbox\cb@end \fi \let\end@dblfloat\ltx@end@dblfloat \flt@float@dblend } \let\ltx@footnotetext\@footnotetext \long\def\cb@footnotetext#1{% \cb@trace@stack{end footnote on page \the\c@page}% \cb@pop\cb@currentstack \ifnum\cb@topleft=\cb@nil \ltx@footnotetext{#1}% \else \cb@push\cb@currentstack \edef\cb@temp{\the\cb@curbarwd}% \ltx@footnotetext{\cb@start[\cb@temp]#1\cb@end}% \fi} \let\@footnotetext\cb@footnotetext \let\ltx@mpfootnotetext\@mpfootnotetext \long\def\cb@mpfootnotetext#1{% \cb@pop\cb@currentstack \ifnum\cb@topleft=\cb@nil \ltx@mpfootnotetext{#1}% \else \cb@push\cb@currentstack \edef\cb@temp{\the\cb@curbarwd}% \ltx@mpfootnotetext{\cb@start[\cb@temp]#1\cb@end}% \fi} \let\@mpfootnotetext\cb@mpfootnotetext \endinput %% %% End of file `xechangebar.sty'.