summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/xelatex/xechangebar
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2017-08-04 22:08:43 +0000
committerKarl Berry <karl@freefriends.org>2017-08-04 22:08:43 +0000
commit20c00fe2385783879b2d3da5a184df0c04813b57 (patch)
treec748f94b423c99b63576f4eca8be8031beabb489 /Master/texmf-dist/tex/xelatex/xechangebar
parentf03ca248298565412ecd2313816a74ae3dc0a90a (diff)
xechangebar (4aug17)
git-svn-id: svn://tug.org/texlive/trunk@44954 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/xelatex/xechangebar')
-rw-r--r--Master/texmf-dist/tex/xelatex/xechangebar/xechangebar.sty1158
1 files changed, 1158 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/xelatex/xechangebar/xechangebar.sty b/Master/texmf-dist/tex/xelatex/xechangebar/xechangebar.sty
new file mode 100644
index 00000000000..04df4038ec3
--- /dev/null
+++ b/Master/texmf-dist/tex/xelatex/xechangebar/xechangebar.sty
@@ -0,0 +1,1158 @@
+%%
+%%
+%% 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'.