%% BEGIN fancybox.sty
%%
\def\fileversion{1.0}
\def\filedate{93/02/10}
%%
%% COPYRIGHT 1993, by Timothy Van Zandt, [email protected]
%%
%% DESCRIPTION:
%% fancybox.sty is a LaTeX style option, consisting of:
%% * Variants of \fbox: \shadowbox, \doublebox, \ovalbox, \Ovalbox.
%% * Helpful tools for using box macros.
%% * Extensive documentation about how to use box macros.
%% * Flexible verbatim macros.
%%
%% INSTALLATION:
%% Put this file where your TeX looks for inputs.
%%
%% DOCUMENTATION:
%% See fancybox.doc, which might be appended to this file.
%%
%% COPYING:
%% Copying of part or all of this file is allowed under the following
%% conditions only:
%% (1) You may freely distribute unchanged copies of the file. Please
%% include the documentation when you do so.
%% (2) You may modify a renamed copy of the file, but only for personal
%% use or use within an organization.
%% (3) You may copy fragments from the file, for personal use or for
%% distribution, as long as credit is given where credit is due.
%%
%% You are NOT ALLOWED to take money for the distribution or use of
%% this file or modified versions or fragments thereof, except for
%% a nominal charge for copying etc.
%%
%% CODE:
\expandafter\ifx\csname fb@framepage\endcsname\relax\else
\expandafter\endinput
\fi
\typeout{Style option: `fancybox' v\fileversion \space <\filedate> (tvz)}
\newbox\@fancybox
\@ifundefined{@tempdimc}{\newdimen\@tempdimc}{}
%% \shadowbox
\newdimen\shadowsize
\shadowsize 4pt
\def\shadowbox{\VerbBox\@shadowbox}
\def\@shadowbox#1{%
\setbox\@fancybox\hbox{\fbox{#1}}%
\leavevmode\vbox{%
\offinterlineskip
\dimen@=\shadowsize
\advance\dimen@ .5\fboxrule
\hbox{\copy\@fancybox\kern-.5\fboxrule\lower\shadowsize\hbox{%
\vrule \@height\ht\@fancybox \@depth\dp\@fancybox \@width\dimen@}}%
\vskip-\dimen@
\moveright\shadowsize\vbox{%
\hrule \@width\wd\@fancybox \@height\dimen@}}}
% \fancyoval
\def\cornersize{\@ifstar{\@cornersize}{\@@cornersize}}
\def\@cornersize#1{%
\@tempdima=#1\relax
\edef\the@cornersize{\number\@tempdima sp}}
\def\@@cornersize#1{%
\edef\the@cornersize{#1\noexpand\@tempdimb}}
\cornersize{.5}
% This is just a simple change to \oval, making use of the \cornersize
% parameter instead of making the corner arcs are large as possible.
\def\fancyoval(#1,#2){\@ifnextchar[{\fancy@oval(#1,#2)}{\fancy@oval(#1,#2)[]}}
\def\fancy@oval(#1,#2)[#3]{%
\begingroup
\fancy@@oval{#1\unitlength}{#2\unitlength}{#3}%
\@put{-.5\wd\@tempboxa}{-.5\ht\@tempboxa}{\ht\@tempboxa=\z@\box\@tempboxa}%
\endgroup}
\def\fancy@@oval#1#2#3{%
\boxmaxdepth \maxdimen
\@ovttrue \@ovbtrue \@ovltrue \@ovrtrue
\@tfor\@tempa :=#3\do{\csname @ov\@tempa false\endcsname}%
\@ovxx#1\relax
\advance\@ovxx-\@wholewidth
\@ovyy#2\relax
\advance\@ovyy-\@wholewidth
\@tempdimb \ifdim \@ovyy >\@ovxx \@ovxx\else \@ovyy \fi
\advance\@tempdimb-2\p@
\ifdim\@tempdimb>\the@cornersize\relax
\@tempdimb=\the@cornersize
\fi
\@getcirc\@tempdimb
\@ovro\ht\@tempboxa \@ovri\dp\@tempboxa
\@ovdx\@ovxx \advance\@ovdx-\@tempdima \divide\@ovdx \tw@
\@ovdy\@ovyy \advance\@ovdy-\@tempdima \divide\@ovdy \tw@
\@circlefnt
\setbox\@tempboxa\hbox{%
\if@ovr \@ovvert32\kern -\@tempdima \fi
\if@ovl \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx \fi
\if@ovt \@ovhorz \kern -\@ovxx \fi
\if@ovb \raise \@ovyy \@ovhorz \fi}%
\advance\@ovdx\@ovro
\advance\@ovdy\@ovro
\advance\@ovxx\@wholewidth
\wd\@tempboxa=\@ovxx
\dp\@tempboxa=\z@}
% \ovalbox
\def\ovalbox{\VerbBox{\@ovalbox\thinlines}}
\def\Ovalbox{\VerbBox{\@ovalbox\thicklines}}
\def\@ovalbox#1#2{%
\begingroup
#1\relax
\setbox\@fancybox\hbox{{#2}}%
\@tempdimc\fboxsep \advance\@tempdimc\@wholewidth
\@tempdima\ht\@fancybox \advance\@tempdima\dp\@fancybox
\advance\@tempdima2\@tempdimc
\@tempdimb\wd\@fancybox \advance\@tempdimb2\@tempdimc
\fancy@@oval\@tempdimb\@tempdima{}%
\@tempdima\dp\@fancybox \advance\@tempdima\@tempdimc
\wd\@tempboxa=\z@
\leavevmode\hbox{%
\lower\@tempdima\box\@tempboxa
\kern\@tempdimc\box\@fancybox\kern\@tempdimc}%
\endgroup}
% \doublebox
\def\doublebox{\VerbBox\@doublebox}
\def\@doublebox#1{%
\begingroup
\setbox\@fancybox\hbox{{#1}}%
\fboxrule=.75\fboxrule
\setbox\@fancybox\hbox{\fbox{\box\@fancybox}}%
\fboxrule=2\fboxrule
\fboxsep=\fboxrule
\advance\fboxsep .5pt
\fbox{\box\@fancybox}%
\endgroup}
% Frames for seminar.sty:
\@ifundefined{newslideframe}{}{%
\newslideframe{shadow}{\shadowbox{#1}}
\newslideframe{double}{\doublebox{#1}}
\newslideframe{oval}{\ovalbox{#1}}
\newslideframe{Oval}{\Ovalbox{#1}}}
% Sbox environment
\newbox\@Sbox
\def\Sbox{\global\setbox\@Sbox\hbox\bgroup\ignorespaces}
\def\endSbox{%
\@testtrue\ifhmode\ifinner\@testfalse\fi\fi
\if@test\@latexerr{Misplaced \string\endSbox! Should be in LR mode}\@ehd\fi
\egroup}
\def\TheSbox{%
\ifvoid\@Sbox
\@latexerr{\string\TheSbox\space is empty!}\@ehd
\else
\box\@Sbox
\fi}
\def\beginsbox#1{\setbox#1\hbox\bgroup\ignorespaces}
\def\endsbox{\endSbox}
% \VerbBox
\newtoks\do@VerbBox
\def\VerbBox#1{%
\do@VerbBox{#1}%
\afterassignment\begin@VerbBox
\setbox\@fancybox=\hbox}
\def\begin@VerbBox{\aftergroup\end@VerbBox}
\def\end@VerbBox{\the\do@VerbBox{\box\@fancybox}}%
% \Btrivlist
\def\@Blistrestore{%
\let\par\relax
\let\-\@dischyph \let\'\@acci \let\`\@accii \let\=\@acciii
\lineskip\normallineskip \baselineskip\normalbaselineskip}
\def\Btrivlist#1{\@ifnextchar[{\@Btrivlist{#1}}{\@Btrivlist{#1}[]}}
\def\@Btrivlist#1[#2]{%
\@Blistrestore
\let\\=\@Btrivlistcr
\fb@beginvbox{#2}%
\halign\bgroup
\if#1l\else\@empty\hfil\fi
\ignorespaces##\unskip
\if#1r\@empty\else\hfil\fi\cr}
\def\endBtrivlist{\crcr\egroup\egroup\if@pboxsw$\fi}
\def\fb@beginvbox#1{%
\leavevmode
\@pboxswfalse
\if#1b\@empty\vbox\else\if#1t\@empty\vtop\else
\ifmmode\vcenter\else\@pboxswtrue$\vcenter\fi
\fi\fi\bgroup}
\def\@Btrivlistcr{\@ifstar
{\@ifnextchar[{@@Btrivlistcr}{\cr}}{\@ifnextchar[{\@@Btrivlistcr}{\cr}}}
\def\@@Btrivlistcr[#1]{\cr\noalign{\vskip #1}}
\def\Bcenter{\Btrivlist{c}}
\def\endBcenter{\endBtrivlist}
\def\Bflushleft{\Btrivlist{l}}
\def\endBflushleft{\endBtrivlist}
\def\Bflushright{\Btrivlist{r}}
\def\endBflushright{\endBtrivlist}
% \Blist
\def\Blist#1#2{\@ifnextchar[{\@Blist{#1}{#2}}{\@Blist{#1}{#2}[]}}
\def\@Blist#1#2[#3]{%
\ifnum\@listdepth>5
\@toodeep
\else
\global\advance\@listdepth\@ne
\fi
\itemindent\z@
\csname @list\romannumeral\the\@listdepth\endcsname
\def\@itemlabel{#1}%
\let\makelabel\@mklab
\@nmbrlistfalse
\@Blistrestore
\let\\=\@Blistcr
\let\item\Bitem
\@Bitemswfalse
#2\relax
\fb@beginvbox{#3}%
\halign\bgroup
\ignorespaces##&\hskip\labelsep\ignorespaces##\unskip\hfil\cr}
\def\endBlist{\endBtrivlist\global\advance\@listdepth\m@ne}
\newif\if@Bitemsw
\def\Bitem{\@ifnextchar({\@Bitemcr\Bitem@skip}{\@Bitemcr\@Bitem}}
\def\@Bitemcr{%
\if@Bitemsw
\def\next{\cr\noalign{\vskip\itemsep}}%
\else
\def\next{\global\@Bitemswtrue}%
\fi
\next}
\def\Bitem@skip(#1){\noalign{\vskip #1}\@Bitem}
\def\@Bitem{\@ifnextchar[{\Bitem@label}{\Bitem@nolabel}}
\def\Bitem@label[#1]{\makelabel{#1}&}
\def\Bitem@nolabel{%
\if@nmbrlist
\expandafter\advance\csname c@\@listctr\endcsname1 \fi
\makelabel{\@itemlabel}%
&%
\if@nmbrlist\refstepcounter{\@listctr}\fi}
\def\@Blistcr{\@ifstar
{\@ifnextchar[{@@Blistcr}{\cr&}}{\@ifnextchar[{\@@Blistcr}{\cr&}}}
\def\@@Blistcr[#1]{\cr\noalign{\vskip #1}&}
% \Bitemize
\def\Bitemize{%
\ifnum\@itemdepth>3
\@toodeep
\else
\advance\@itemdepth\@ne
\fi
\edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
\Blist{\csname\@itemitem\endcsname}{\def\makelabel####1{\hfil####1}}}
\def\endBitemize{\endBlist}
% \Bdescription
\def\Bdescription{\Blist{}{\def\makelabel####1{\bf####1\hfil}}}
\def\endBdescription{\endBlist}
% \Benumerate
\def\Benumerate{%
\ifnum\@enumdepth>3
\@toodeep
\else
\advance\@enumdepth\@ne
\fi
\edef\@enumctr{enum\romannumeral\the\@enumdepth}%
\Blist{\csname label\@enumctr\endcsname}%
{\usecounter{\@enumctr}\def\makelabel####1{\hfil####1}}}
\def\endBenumerate{\endBlist}
% Beqnarray
\def\Beqnarray{%
\stepcounter{equation}%
\let\@currentlabel\theequation
\def\@eqnnum{{\csname reset@font\endcsname\rm (\theequation)}}%
\global\@eqnswtrue\m@th
\global\@eqcnt\z@
\tabskip\@centering
\let\\\@eqncr
\vbox\bgroup
\halign\bgroup
\@eqnsel
\hskip\@centering
$\displaystyle\tabskip\z@{##}$%
&\global\@eqcnt\@ne
\hskip 2\arraycolsep
\hfil${##}$\hfil
&\global\@eqcnt\tw@
\hskip 2\arraycolsep
$\displaystyle\tabskip\z@{##}$%
\hfil
\tabskip\@centering
&\if@eqnsw\hskip 1em\fi
\hfil{##}\tabskip\z@
\cr}
\def\endBeqnarray{%
\@@eqncr
\egroup
\global\advance\c@equation\m@ne
\egroup
\global\@ignoretrue}
\@namedef{Beqnarray*}{\def\@eqncr{\nonumber\@seqncr}\Beqnarray}
\@namedef{endBeqnarray*}{\nonumber\endBeqnarray}
% \fb@outputage
% Here we insert various hooks for rotating or framing the page.
% Otherwise, it is the usual \@outputpage
\def\fb@outputpage{%
\begingroup
\catcode`\ =10
\let\-\@dischyph
\let\'\@acci
\let\`\@accii
\let\=\@acciii
\if@specialpage
\global\@specialpagefalse\@nameuse{ps@\@specialstyle}%
\fi
\if@twoside
\ifodd\count\z@
\let\@thehead\@oddhead
\let\@thefoot\@oddfoot
\let\@themargin\oddsidemargin
\else
\let\@thehead\@evenhead
\let\@thefoot\@evenfoot
\let\@themargin\evensidemargin
\fi
\fi
\csname reset@font\endcsname
\normalsize
\baselineskip\z@
\lineskip\z@
\let\par\@@par
\ifx\this@fancypage\@empty\else
\this@fancypage
\gdef\this@fancypage{}%
\fi
\ifx\the@fancypage\@empty\else
\setbox\@outputbox\hbox{\the@fancypage{\box\@outputbox}}%
\fi
\ifx\fb@@rotatepage\@empty\else
\setbox\@outputbox\hbox{\fb@@rotatepage{\box\@outputbox}}%
\fi
\setbox\@outputbox\vbox{%
\@tempdima=\wd\@outputbox
\setbox\@tempboxa=\hbox to\@tempdima{%
\let\label\@gobble
\let\index\@gobble
\let\glossary\@gobble
\@thehead}%
\ht\@tempboxa\headheight
\dp\@tempboxa\z@
\box\@tempboxa
\vskip\headsep
\box\@outputbox
\baselineskip\footskip
\hbox to\@tempdima{%
\let\label\@gobble
\let\index\@gobble
\let\glossary\@gobble
\@thefoot}}
\ifx\the@@fancypage\@empty\else
\setbox\@outputbox\hbox{\the@@fancypage{\box\@outputbox}}%
\fi
\setbox\@outputbox\vbox{%
\ifnum\fancyput@flag>-1 \do@fancyput\fi
\vskip\topmargin
\moveright\@themargin\box\@outputbox}%
\ifx\fb@rotatepage\@empty\else
\setbox\@outputbox\hbox{\lower\ht\@outputbox\box\@outputbox}%
\dp\@outputbox\z@
\wd\@outputbox\z@
\setbox\@outputbox\hbox{\fb@rotatepage{\box\@outputbox}}%
\expandafter\fb@setoffsets\fb@theoffsets
\fi
\shipout\box\@outputbox
\global\@colht\textheight
\endgroup
\stepcounter{page}%
\let\firstmark\botmark}
% \fancypage
\def\the@fancypage{}
\def\the@@fancypage{}
\def\this@fancypage{}
\def\fancypage#1#2{%
\def\the@fancypage{#1}%
\def\the@@fancypage{#2}%
\def\@outputpage{\fb@outputpage}}
\def\thisfancypage#1#2{%
\gdef\@outputpage{\fb@outputpage}%
\gdef\this@fancypage{\def\the@fancypage{#1}\def\the@@fancypage{#2}}}
% \fancyput
% Token registers used to make it easier to put definitions in argument.
% Boxes not processed until output so that contents can depend, e.g., on
% current page or marks or whatever. This makes everything slightly more
% complicated than one would expect.
\newtoks\the@fancyput
\newtoks\this@fancyput
\def\fancyput@flag{-1}%
% \fancyput@flag=-1 if no fancyput, 0 if regular fancyput, 1 if thisfancyput.
\def\fancyput{%
\def\@outputpage{\fb@outputpage}
\@ifstar{\@testtrue\@fancyput}{\@testfalse\@fancyput}}
\def\@fancyput{\@ifnextchar({\@@fancyput}{\@@fancyput(\z@,\z@)}}
\def\@@fancyput(#1,#2)#3{%
\if@test
\expandafter\the@fancyput\expandafter{\the\the@fancyput\do{#1}{#2}{#3}}%
\else
\the@fancyput{\do{#1}{#2}{#3}}%
\fi
\gdef\fancyput@flag{\z@}}
\def\thisfancyput{%
\gdef\@outputpage{\fb@outputpage}
\@ifstar{\@testtrue\@thisfancyput}{\@testfalse\@thisfancyput}}
\def\@thisfancyput{\@ifnextchar({\@@thisfancyput}{\@@thisfancyput(\z@,\z@)}}
\def\@@thisfancyput(#1,#2)#3{%
\if@test
\ifnum\fancyput@flag=\z@
\expandafter\global\expandafter\this@fancyput\expandafter{%
\the\this@fancyput\do{#1}{#2}{#3}}%
\else
\expandafter\global\expandafter\this@fancyput\expandafter{%
\the\the@fancyput\do{#1}{#2}{#3}}%
\fi
\else
\global\this@fancyput{\do{#1}{#2}{#3}}%
\fi
\gdef\fancyput@flag{1}}
\def\do@fancyput{%
\def\do##1##2##3{\raise##2\hbox to\z@{\kern##1\relax##3\hss}}%
\setbox\@tempboxa=\hbox to\z@{%
\kern-\hoffset
\raise\voffset\hbox{%
\ifnum\fancyput@flag=\z@\the\the@fancyput\else\the\this@fancyput\fi}%
\hss}%
\ht\@tempboxa=\z@ \dp\@tempboxa=\z@
\box\@tempboxa
\gdef\fancyput@flag{\z@}%
\global\this@fancyput{}}
% \Landscape
\def\UsePageParameters{%
\clearpage
\global\@colht\textheight
\onecolumn}
\def\fb@rotatepage{}
\def\Landscape{\@ifstar{\@testtrue\@Landscape}{\@testfalse\@Landscape}}
\def\@Landscape#1#2#3{%
\clearpage
\def\fb@rotatepage{#3}%
\def\@outputpage{\fb@outputpage}%
\@tempdima#1\relax
\@tempdimb#2\relax
\if@test
\edef\fb@theoffsets{{\voffset}{\hoffset}{\number\@tempdima sp}}%
\else
\edef\fb@theoffsets{{\hoffset}{\voffset}{\number\@tempdimb sp}}%
\fi
\advance\@tempdimb-\@tempdima
\advance\textwidth\@tempdimb
\advance\textheight-\@tempdimb
\UsePageParameters}
\def\endLandscape{\clearpage\aftergroup\UsePageParameters}
\def\fb@setoffsets#1#2#3{%
\@tempdima#1%
\advance#1#2%
#2#3
\advance#2-2in
\advance#2-\@tempdima}
\@namedef{Landscape*}{\@testtrue\@Landscape}
\@namedef{endLandscape*}{\endLandscape}
% \LandScape
\def\fb@@rotatepage{}
\def\LandScape#1{%
\clearpage
\def\fb@@rotatepage{#1}%
\def\@outputpage{\fb@outputpage}%
\@tempdima\textheight
\textheight\textwidth
\textwidth\@tempdima
\UsePageParameters}
\def\endLandScape{\clearpage\aftergroup\UsePageParameters}
% \GenericCaption
\def\GenericCaption#1{%
\par
\begingroup
\@parboxrestore
\normalsize
\vskip 10\p@
\setbox\@tempboxa\hbox{#1}%
\ifdim\wd\@tempboxa>\hsize
#1\par
\else
\hbox to\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\endgroup
\par}
% \landfloat
\def\landfloat#1#2{%
\gdef\curr@landfloat{#1}%
\gdef\float@rotation{#2}%
\begin{#1}[p]%
\setbox\@tempboxa\vbox\bgroup
\hsize\@colht
\@parboxrestore}
\def\endlandfloat{%
\par\vskip\z@
\egroup
\setbox\@tempboxa\hbox{\float@rotation{\box\@tempboxa}}%
\centerline{\box\@tempboxa}%
\expandafter\end\expandafter{\curr@landfloat}}
% \boxput
\def\boxput{\@ifstar{\@testtrue\@boxput}{\@testfalse\@boxput}}
\def\@boxput{\@ifnextchar({\@@boxput}{\@@boxput(0,0)}}
\long\def\@@boxput(#1,#2)#3#4{%
\setbox\@fancybox\hbox{{#4}}%
\setbox\@tempboxa\vbox to\z@{\vss\hbox to\z@{\hss{#3}\hss}\vss}%
\@tempdima=#1\wd\@fancybox
\advance\@tempdima\wd\@fancybox
\divide\@tempdima 2
\ifcat a#2\relax
\@tempdimb=\z@
\else
\@tempdimb=.5\ht\@fancybox
\advance\@tempdimb.5\dp\@fancybox
\@tempdimc=\@tempdimb
\advance\@tempdimc-\dp\@fancybox
\@tempdimb=#2\@tempdimb
\advance\@tempdimb\@tempdimc
\fi
\setbox\@tempboxa\hbox to \z@{%
\if@test\kern-\wd\@fancybox\fi
\kern\@tempdima\raise\@tempdimb\box\@tempboxa\hss}%
\ht\@tempboxa=\z@ \dp\@tempboxa=\z@
\leavevmode
\if@test
\hbox{\box\@fancybox\box\@tempboxa}%
\else
\hbox{\box\@tempboxa\box\@fancybox}%
\fi}
% \Vfootnotes
\def\VerbatimFootnotes{\let\@footnotetext\V@footnotetext}
\long\def\V@footnotetext{%
\afterassignment\V@@footnotetext
\let\@tempa}
\def\V@@footnotetext{%
\insert\footins\bgroup
\csname reset@font\endcsname
\footnotesize
\interlinepenalty\interfootnotelinepenalty
\splittopskip\footnotesep
\splitmaxdepth\dp\strutbox
\floatingpenalty \@MM
\hsize\columnwidth
\@parboxrestore
\edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}%
\@makefntext{}%
\rule{\z@}{\footnotesep}%
\bgroup
\aftergroup\V@@@footnotetext
\ignorespaces}
\def\V@@@footnotetext{\strut\egroup}
% Verbatim
% The main idea is to separate the reading and formatting of the
% verbatim listing. It's pretty simple.
\def\Verbatim@Codes{%
\let\do\@makeother
\dospecials
\Verbatim@ObeyThings
\ThisVerbCodes\relax\gdef\ThisVerbCodes{}}
\def\EveryVerbatimCodes{}
% \Verbatim is redefined temporarilly in \Get@Verbatim to scan the
% verbatim text. \Verbatim is used so that error messages are more
% enlightening. \next checks whether \Verbatim found its argument,
% and attempts to recover if not.
%
% Heuristically, if current environment is `foo' and argument of
% \Get@Verbatim is \The@Verbatim, then definition of \Verbatim is
%
% \def\Verbatim#1^^M#2^^M\the\EndVerbatimTokens\end{foo}{%
% \xdef\The@Verbatim{\noexpand\Every@VerbatimLine#2}%
% \endgroup\end{foo}}
%
% \The@Verbatim is then equal to the verbatim text, with spaces
% replaced by \Verbatim@Space, tabs replaced by \Verbatim@Tab,
% and ` replaced by \@lquote. In addition, each line begins with
% \Every@VerbatimLine, and each line but the last ends with
% \Verbatim@Par. It is then possible to redefine these when formatting
% the verbatim text. To insert each line as an argument to \foo, use
% \def\Every@VerbatimLine#1\Verbatim@Par{\foo{#1}}
% \The@Verbatim\Verbatim@Par
%
\newtoks\EndVerbatimTokens
\begingroup
\catcode`\|=0
\catcode`\[=1
\catcode`\]=2
\catcode`\{=12
\catcode`\}=12
\catcode`\^^M=13%
\catcode`\\=12%
|gdef|Get@Verbatim#1[%
|begingroup%
|Verbatim@Codes|EveryVerbatimCodes%
|let|protect|noexpand%
|VerbatimEnvironment%
|edef|next[|noexpand|def|noexpand|Verbatim####1|noexpand^^M####2%
|noexpand^^M|the|EndVerbatimTokens\end{|@VerbEnvir}]%
|edef|endVerbatim[|noexpand|endgroup|noexpand|end[|@VerbEnvir]]%
|global|let|@VerbEnvir|relax%
|next[|@nil|xdef#1[|noexpand|Every@VerbatimLine##2]|endVerbatim]%
|def|next[|@ifnextchar|@nil[|@gobble]% If \@nil is there, then
[|gdef#1[]|endVerbatim|end[document]]]% \Verbatim found its argument.
|expandafter|next|Verbatim]% Otherwise, try to recover.
|gdef|AltGet@Verbatim#1[%
|begingroup%
|Verbatim@Codes|EveryVerbatimCodes%
|def^^M##1^^M##2[%
|ifx|@nil##2|@empty|else%
|noexpand|Verbatim@Par|noexpand|Every@VerbatimLine##1%
|expandafter^^M|expandafter##2%
|fi]%
|let|protect|noexpand%
|VerbatimEnvironment%
|edef|next[|noexpand|def|noexpand|Verbatim####1|noexpand^^M####2%
\end{|@VerbEnvir}]%
|edef|endVerbatim[|noexpand|endgroup|noexpand|end[|@VerbEnvir]]%
|global|let|@VerbEnvir|relax%
|next[|@nil|xdef#1[|noexpand|Every@VerbatimLine##2^^M|@nil]|endVerbatim]%
|def|next[|@ifnextchar|@nil[|@gobble]%
[|gdef#1[]|endVerbatim|end[document]]]%
|expandafter|next|Verbatim]%
|endgroup
\def\AltGetVerbatim{\let\Get@Verbatim\AltGet@Verbatim}
% It is enough to not use \begin or \end when defining new verbatim
% environments, as the default is for \Get@Verbatim to look for the
% end of the current environment, but using \VerbatimEnvironment
% is easier to explain to users.
\def\VerbatimEnvironment{%
\ifx\@VerbEnvir\relax\xdef\@VerbEnvir{\@currenvir}\fi}
\let\@VerbEnvir\relax
\def\The@VerbatimErr{%
\gdef\The@Verbatim{\@latexerr{Misplaced \string\end{Verbatim}}\@ehd}}
\The@VerbatimErr
\begingroup
\catcode`\^^M=\active%
\catcode`\ =\active%
\catcode`\^^I=\active%
\gdef\Verbatim@ObeyThings{%
\catcode`\^^M=\active%
\catcode`\ =\active%
\catcode`\^^I=\active%
\catcode``=\active%
\def^^M{\noexpand\Verbatim@Par\noexpand\Every@VerbatimLine}%
\def^^I{\noexpand\Verbatim@Tab}%
\def {\noexpand\Verbatim@Space}%
\Verbatim@NoLigs}%
\gdef\Verbatim@DontObeyLines{\outer\def^^M{}}%
\endgroup
\def\SaveVerbatim{\@bsphack\Get@Verbatim}
\def\endSaveVerbatim{\@esphack}
{\catcode``13 \gdef\Verbatim@NoLigs{\def`{\noexpand\@lquote}}}
\def\Verbatim@Prep{%
\frenchspacing
\ThisVerb\relax\gdef\ThisVerb{}%
\VerbatimFont
\EveryVerbatim
\let\Every@VerbatimLine\EveryVerbatimLine
\def\Verbatim@Space{\leavevmode\penalty\@M\VerbatimSpace}%
\def\Verbatim@Tab{\leavevmode\penalty\@M\VerbatimTab}}%
\def\Verb@Prep{%
\frenchspacing
\ThisVerb\relax\gdef\ThisVerb{}%
\VerbFont
\EveryVerb
\let\Every@VerbatimLine\EveryVerbatimLine
\def\Verbatim@Space{\leavevmode\penalty\@M\VerbSpace}%
\def\Verbatim@Tab{\leavevmode\penalty\@M\VerbTab}}%
\def\Verbatim@Par{\leavevmode\null\@@par\penalty\interlinepenalty}
% Parameter initialization:
\def\VerbatimSpace{\ }
{\catcode`\ =12\gdef\ttspace{{\tt }}}
\def\VerbSpace{\ }
\def\VerbatimTab{\ \ \ \ \ \ \ \ }
\def\VerbTab{\ }
\def\EveryVerbatim{}
\def\EveryVerb{}
\def\ThisVerb{}
\def\EveryVerbatimLine{}%
\def\EveryVerbOutLine{}
\def\VerbatimFont{\tt}
\def\VerbFont{\tt}
\def\VerbatimFuzz{2pt}%
\def\EveryVerbatimCodes{}
\def\EveryVerbCodes{}
\def\EveryVerbOutCodes{}
\def\ThisVerbCodes{}
\def\Verbatim@List#1{%
\if@minipage\else\vskip\parskip\fi
\leftskip\@totalleftmargin
\@rightskip\@flushglue \rightskip\@rightskip
\parindent\z@
\parskip\z@
\parfillskip\@flushglue
\hfuzz\VerbatimFuzz\relax
\@@par
\global\@inlabelfalse %Prevents vspace from being inserted when
\Verbatim@Prep %first line exceeds \hsize.
#1%
\Verbatim@Par}%
\def\UseVerbatim#1{%
\begingroup\trivlist\item[]\Verbatim@List{#1}\endtrivlist\endgroup}
\def\Verbatim{\Get@Verbatim\The@Verbatim}
\def\endVerbatim{\UseVerbatim\The@Verbatim\The@VerbatimErr}
\def\LUseVerbatim#1{%
\begingroup\list{}{}\item[]\Verbatim@List{#1}\endlist\endgroup}
\def\LVerbatim{\Get@Verbatim\The@Verbatim}
\def\endLVerbatim{\LUseVerbatim\The@Verbatim\The@VerbatimErr}
\def\BUseVerbatim{%
\@ifnextchar[{\@BUseVerbatim}{\@BUseVerbatim[]}}
\def\@BUseVerbatim[#1]#2{%
\begingroup
\Verbatim@Prep
\let\Verbatim@Par\@Btrivlistcr
\@Btrivlist{l}[#1]%
#2%
\endBtrivlist
\endgroup}%
\def\BVerbatim{%
\catcode`\^^M=13\relax
\@ifnextchar[{\@BVerbatim}{\@BVerbatim[]}}
\def\@BVerbatim[#1]{\def\@tempa{[#1]}\Get@Verbatim\The@Verbatim}
\def\endBVerbatim{
\expandafter\@BUseVerbatim\@tempa\The@Verbatim\The@VerbatimErr}
\newwrite\Verbatim@Outfile
\def\VerbatimOut#1{%
\@bsphack
\begingroup
\immediate\openout\Verbatim@Outfile #1\relax
\def\EveryVerbatimCodes{\EveryVerbOutCodes}%
\Get@Verbatim\The@Verbatim}
\def\endVerbatimOut{%
\Verbatim@ObeyThings
\def\Verbatim@Par{^^J}%
\def\Verbatim@Space{\space}%
\def\Verbatim@Tab{\space}%
\def\@lquote{\string`}%
\ThisVerb\relax\gdef\ThisVerb{}%
\let\Every@VerbatimLine\EveryVerbOutLine
\immediate\write\Verbatim@Outfile{\The@Verbatim}%
\immediate\closeout\Verbatim@Outfile
\endgroup
\The@VerbatimErr
\@esphack}
% This one is a little tricky because:
% * we want to ignore the ^^M at the end of the last line,
% * we want to handle files that end with newline and files that don't
% * we want comment characters to work properly,
% * we want to expand each line before inserting \Every@VerbatimLine and
% \Verbatim@Par,
%
% \The@GVerbatim is used as scratch with global redefinition.
\newread\Verbatim@Infile
\def\Verbatim@Input#1#2{%
\begingroup
\Verbatim@Codes\EveryVerbatimCodes
\immediate\openin\Verbatim@Infile #1\relax
\ifeof\Verbatim@Infile
\@latexerr{No verbatim file #1}\@ehd
\else
\def\The@GVerbatim{}\Verbatim@NextLine
\ifeof\Verbatim@Infile
\@latexerr{Verbatim file #1 is empty}\@ehd
\else
\let\The@Verbatim\The@GVerbatim
\def\The@GVerbatim{}\Verbatim@NextLine
#2{\Verbatim@@Input}%
\fi
\fi
\immediate\closein\Verbatim@Infile
\endgroup}
\def\Verbatim@@Input{%
\let\protect\noexpand
\edef\The@Verbatim{%
\noexpand\Every@VerbatimLine
\The@Verbatim
\ifeof\Verbatim@Infile\else\noexpand\Verbatim@Par\fi}%
\let\protect\relax
\The@Verbatim
\ifeof\Verbatim@Infile\else
\let\The@Verbatim\The@GVerbatim
\def\The@GVerbatim{}\Verbatim@NextLine
\expandafter\Verbatim@@Input
\fi}%
\begingroup\catcode`\^^M=\active%
\gdef\Verbatim@NextLine{%
\ifeof\Verbatim@Infile\else%
\immediate\read\Verbatim@Infile to\@tempa%
\expandafter\Verbatim@@NextLine\@tempa^^M\relax^^M\@nil%
\fi}%
% #2 is empty if line ends in ^^M, #2=\relax otherwise.
\gdef\Verbatim@@NextLine#1^^M#2^^M#3\@nil{%
\expandafter\gdef\expandafter\The@GVerbatim\expandafter{\The@GVerbatim#1}%
\ifx#2\@empty\@empty\else\expandafter\Verbatim@NextLine\fi}%
\endgroup%
\def\UseVerb#1{\begingroup\Verb@Prep#1\endgroup}
\def\SaveVerb{\@ifnextchar[{\Save@Verb}{\Save@Verb[]}}
\long\def\Save@Verb[#1]#2{%
\begingroup
\Verbatim@Codes\Verbatim@DontObeyLines\EveryVerbCodes
\Save@@Verb{#1}{#2}}
\long\def\Save@@Verb#1#2#3{%
\let\protect\noexpand
\def\next{\@ifnextchar\@nil{\@gobble}{\endgroup}}%
\long\def\Verb##1#3{\@nil\xdef#2{##1}\endgroup#1}%
\expandafter\next\Verb}
\def\Verb{\Save@Verb[\UseVerb{\The@Verbatim}]{\The@Verbatim}}
\def\VerbatimInput#1{\begingroup\Verbatim@Input{#1}\UseVerbatim\endgroup}
\def\LVerbatimInput#1{\begingroup\Verbatim@Input{#1}\LUseVerbatim\endgroup}
\def\BVerbatimInput{\@ifnextchar[{\@BVerbatimInput}{\@BVerbatimInput[]}}
\def\@BVerbatimInput[#1]#2{%
\begingroup\Verbatim@Input{#2}{\@BUseVerbatim[#1]}\endgroup}
\endinput
%% END fancybox.sty
|