summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/fancyvrb
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/fancyvrb
Initial commit
Diffstat (limited to 'macros/latex/contrib/fancyvrb')
-rw-r--r--macros/latex/contrib/fancyvrb/Changes23
-rw-r--r--macros/latex/contrib/fancyvrb/README39
-rw-r--r--macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.pdfbin0 -> 161872 bytes
-rw-r--r--macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.tex1397
-rw-r--r--macros/latex/contrib/fancyvrb/latex/fancyvrb-ex.sty144
-rw-r--r--macros/latex/contrib/fancyvrb/latex/fancyvrb.sty1339
-rw-r--r--macros/latex/contrib/fancyvrb/latex/hbaw.sty161
-rw-r--r--macros/latex/contrib/fancyvrb/latex/hcolor.sty164
8 files changed, 3267 insertions, 0 deletions
diff --git a/macros/latex/contrib/fancyvrb/Changes b/macros/latex/contrib/fancyvrb/Changes
new file mode 100644
index 0000000000..c1b5791665
--- /dev/null
+++ b/macros/latex/contrib/fancyvrb/Changes
@@ -0,0 +1,23 @@
+--- fancyvrb.sty
+3.2a 2019/01/15 - added missing style files (hv)
+3.2 2019/01/08 - remove the loading of package xcolor (hv)
+3.1a 2018/11/20 - small changes to the documentation (hv)
+3.1 2018/11/17 - load package xcolor only if it is not done already (hv)
+3.0 2018/11/01 - remove the example part from francyvrb (hv)
+2.9 2018/10/31 - made \UseVerb robust (hv)
+2.81 2011/04/06 - added optional argument vspace for the
+ vertical space (default \topsep) (hv)
+2.8 2010/05/14 - fixed several trailing spaces (hv)
+ - changed license to LPPL
+2.7a 2008/02/07 - NMM fixed lastline=firstline bug
+2.7 2000/03/21 - changed how fancyvrb.cfg included DG/SR
+2.6 1998/07/17 - Three bug corrected, options numberblanklines,
+ label, labelposition and leftline added and few
+ precisions.
+v2.5 1998/01/28 - First public release.
+v2.0 1994/03/30 - First version personally shown by Timothy
+ \textsc{van Zandt}
+
+
+--- fancyvrb-ex.sty
+0.01 2018/11/01 - first CTAN version \ No newline at end of file
diff --git a/macros/latex/contrib/fancyvrb/README b/macros/latex/contrib/fancyvrb/README
new file mode 100644
index 0000000000..e78fec959f
--- /dev/null
+++ b/macros/latex/contrib/fancyvrb/README
@@ -0,0 +1,39 @@
+
+ --------------------------------------------------
+ | `fancyvrb' |
+ | |
+ | Timothy Van Zandt (Princeton University - USA) |
+ | |
+ | Packaging, documentation and support |
+ | Denis Girou (CNRS/IDRIS - France) |
+ | <Denis.Girou@idris.fr> |
+ | Sebastian Rahtz (Elsevier - GB) |
+ | Herbert Voss, Berlin (hvoss@tug.org) |
+ --------------------------------------------------
+
+Report bugs to hvoss@tug.org
+
+
+ The `fancyvrb' package provides very sophisticated facilities for reading
+and writing verbatim TeX code. Users can perform common tasks like changing
+font family and size, numbering lines, framing code examples, colouring text
+and conditionally processing text.
+
+ `fancyvrb' was heavily used in the typesetting of the "LaTeX Graphics
+Companion", by Michel Goossens, Sebastian Rahtz and Frank Mittelbach, Addison
+Wesley, 1997.
+
+ It was presented March 31, 1998 for EuroTeX'98. The original paper is
+available on "Cahiers GUTenberg"
+.
+ Comments, suggestions and bug reports (with version number and the
+keyword "fancyvrb" in the subject of the message) to <hvoss@tug.org>
+
+ The `fancyvrb-ex' package provides some example environments to
+show LaTeX code and output side by side or on top on each other.
+
+
+
+%% This package may be distributed under the terms of the LaTeX Project Public
+%% License, as described in lppl.txt in the base LaTeX distribution.
+%% Either version 1.3 or, at your option, any later version.
diff --git a/macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.pdf b/macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.pdf
new file mode 100644
index 0000000000..25f66f3824
--- /dev/null
+++ b/macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.tex b/macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.tex
new file mode 100644
index 0000000000..ce6e39df8d
--- /dev/null
+++ b/macros/latex/contrib/fancyvrb/doc/fancyvrb-doc.tex
@@ -0,0 +1,1397 @@
+\documentclass{article}
+%\usepackage[T1]{fontenc}
+%\usepackage[charter]{mathdesign}
+\usepackage{libertinus}
+%\usepackage[scaled=0.84]{beramono}
+\setmonofont[Scale=MatchLowercase,FakeStretch=0.9]{AnonymousPro}
+
+\newif\ifChangeBar \ChangeBarfalse
+\usepackage{fancyvrb}
+\usepackage[pstricks]{fancyvrb-ex}
+\usepackage{xurl}
+\usepackage[colorlinks,linktocpage]{hyperref}
+\parskip=3pt plus 1pt minus 1pt
+%
+
+\newcommand\FBoxPackage{`\textsf{fancybox}'}
+\newcommand\FVrbPackage{`\textsf{fancyvrb}'}
+\newcommand\cs[1]{\texttt{\textbackslash#1}}
+%
+% From ltugboat.cls
+%
+% Typeset the name of an environment
+\providecommand\env[1]{\textsf{#1}}
+\providecommand\clsname[1]{\textsf{#1}}
+\providecommand\pkgname[1]{\textsf{#1}}
+\providecommand\optname[1]{\textsf{#1}}
+\providecommand\progname[1]{\textsf{#1}}
+%
+% A list of options for a package/class
+\newenvironment{optlist}{\begin{description}%
+ \renewcommand\makelabel[1]{%
+ \descriptionlabel{\mdseries\optname{##1}}}%
+ \itemsep0.25\itemsep}%
+ {\end{description}}
+%
+% Utility macros
+%
+% Special dashes
+
+\makeatletter
+\def\thinskip{\hskip 0.16667em\relax}
+\def\endash{--}
+\def\emdash{\endash-}
+\def\d@sh#1#2{\unskip#1\thinskip#2\thinskip\ignorespaces}
+\def\dash{\d@sh\nobreak\endash}
+\def\Dash{\d@sh\nobreak\emdash}
+\makeatother
+\newif\ifPostScriptFonts \PostScriptFontstrue
+%
+\setlength{\columnseprule}{0.6pt}
+%
+\newif\ifmulticols
+%\IfFileExists{multicol.sty}{\multicolstrue}{}
+\newif\ifpstricks
+\pstrickstrue
+%
+\title{The `\textsf{fancyvrb}' package\\Fancy Verbatims in \LaTeX}
+\author{Timothy Van Zandt\\Princeton University\\Princeton -- USA\\[5mm]
+% {\footnotesize \url{tvz@Princeton.EDU}}\\[5mm]
+ {Packaging and documentation by}\\
+ {\footnotesize Denis Girou (CNRS/IDRIS -- France),}\\[-2mm]
+ {\footnotesize Sebastian Rahtz (Elsevier -- GB)}\\[-2mm]
+ {\footnotesize and}\\[-2mm]
+ {\footnotesize Herbert Voß\ (FU Berlin -- DE)}
+ }
+\date{Version 3.2a\\ \today}
+
+\fvset{frame=single,xrightmargin=0cm,numbers=left,numbersep=3pt,commentchar=Z}
+
+\begin{document}
+\maketitle
+%
+\begin{abstract}
+ This package provides very sophisticated facilities for reading and
+ writing verbatim \TeX{} code. Users can perform common tasks like changing
+ font family and size, numbering lines, framing code examples, colouring
+ text and conditionally processing text.
+\end{abstract}
+
+\begin{center}
+Report bugs to \url{hvoss@tug.org}
+\end{center}
+
+\vfill
+Thanks to
+Philippe Esperet, %\url{esperet@marie.polytechnique.fr},
+Michael Friendly, %\url{friendly@hotspur.psych.yorku.ca},
+Mario Hassler, %\url{HASSLER@ippnv2.ipp.kfa-juelich.de},
+Mikhail Kolodin, %\url{myke@morrigan.spb.su},
+Andreas Matthias,
+Frank Mittelbach,
+Rolf Niepraschk, %\url{Rolf.Niepraschk@gmx.de},
+Ulrich M. Schwarz,
+Thomas Siegel,% \url{siegel@aix520.informatik.uni-leipzig.de},
+and
+Vladimir Volovich. %\url{vvv@vvv.vsu.ru}.
+\clearpage
+\tableofcontents
+\clearpage
+%\part{\texttt{fancyvrb} package by Timothy Van Zandt}
+
+
+\part{Package \texttt{fancyvrb}}
+
+
+\section{Introduction}
+%
+ \FVrbPackage{} is the development of the \emph{verbatim} macros of the
+\FBoxPackage{} package, Section 11 of \cite{FancyBox}. It offers six kinds
+of extended functionality, compared to the standard \LaTeX{}
+\textsf{verbatim} environment:
+
+\begin{enumerate}
+ \item verbatim commands can be used in footnotes,
+ \item several verbatim commands are enhanced,
+ \item a variety of verbatim environments are provided, with many
+ parameters to change the way the contents are printed; it is also possible
+ to define new customized verbatim environments,
+ \item a way is provided to save and restore verbatim text and environments,
+ \item there are macros to write and read files in verbatim mode, with the
+ usual versatility,
+ \item you can build \emph{example} environments (showing both result and
+ verbatim text), with the same versatility as normal verbatim.
+\end{enumerate}
+
+ The package works by scanning a line at a time from an environment or a
+file. This allows it to pre-process each line, rejecting it, removing
+spaces, numbering it, etc, before going on to execute the body of the line
+with the appropriate catcodes set.
+
+\section{Verbatim material in footnotes}
+
+ After a \cs{VerbatimFootnotes} macro declaration (to use after the
+preamble), it is possible to put verbatim commands and environments
+(the \LaTeX{} or \FVrbPackage{} ones) in footnotes, unlike in standard
+\LaTeX:
+
+\begin{Example}
+ \VerbatimFootnotes
+ We can put verbatim\footnote{\verb+_Yes!_+} text in footnotes.
+\end{Example}
+
+\section{Improved verbatim commands}
+%
+ The \cs{DefineShortVerb} macro allows us to define a special character as
+an abbreviation to enclose verbatim text and the \cs{UndefineShortVerb}
+macro suppresses the special meaning of the specified character (the same
+functionalities are provided in the \LaTeX{} `\textsf{shortvrb}' package):
+
+\fvset{xrightmargin=4.8cm}
+
+\begin{SideBySideExample}
+ \DefineShortVerb{\|}
+ We can simply write \Verb+_verbatim_+
+ material using a single |_delimiter_|
+ \UndefineShortVerb{\|}
+ \DefineShortVerb{\+}
+ And we can +_change_+ the character.
+\end{SideBySideExample}
+
+ To make matters more versatile, we can nominate \emph{escape} characters
+in verbatim text (using the \cs{Verb} macro or with a `shortverb' character
+defined), to perform formatting or similar tasks, using the
+\texttt{commandchars} parameter as shown for environments in paragraph
+\ref{sec:commandchars}.
+
+\section{Verbatim environments}
+
+Several verbatim environments are available, each with a lot of
+parameters to customize them. In the following examples we use the
+\texttt{Verbatim} environment, which is the equivalent of the standard
+\texttt{verbatim}. The parameters can be set globally using the \cs{fvset}
+macro or in an optional argument after the start of the
+environment\footnote{For clarification in this paper, note that we
+generally indent each verbatim line with two
+spaces.}$^,$\footnote{This mechanism uses the
+`\textbf{keyval}' package from the standard \LaTeX{} graphics
+distribution, written by David \textsc{Carlisle}.}.
+
+\begin{SideBySideExample}
+ \begin{Verbatim}
+ First verbatim line.
+ Second verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\subsection{Customization of verbatim environments}
+
+ The appearance of verbatim environments can be changed in many and
+varied ways; here we list the keys that can be set.
+
+\subsubsection{Comments}
+
+\begin{optlist}
+ \item[commentchar (character)]: character to define comments in the
+ verbatim code, so that lines starting with this character will not be
+ printed (\emph{Default: empty}).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[commentchar=!]
+ A comment
+ Verbatim line.
+ ! A comment that you will not see
+ \end{Verbatim}
+\end{SideBySideExample}
+
+ Take care to a special effect if the comment character is not the first
+non blank one: it is because this character is in fact managed as the \TeX{}
+comment one, that is to say that it gobble the newline character too. So, in
+this case, the current line will be joined with the next one and, more, the
+last one will be lost if it contain a comment, as \FVrbPackage{} print a
+line only after finding it end character, which will never occured in this
+case...
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[commentchar=\%]
+ First line. % First line
+ Second.
+ Third line. % Third line lost...
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\subsubsection{Initial characters to suppress}
+
+\begin{optlist}
+ \item[gobble (integer)]: number of characters to suppress at the beginning
+ of each line (up to a maximum of 9), mainly useful when environments are
+ indented
+ (\emph{Default: empty} \Dash no character suppressed).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}
+ Verbatim line.
+ \end{Verbatim}
+
+ \begin{Verbatim}[gobble=2]
+ Verbatim line.
+ \end{Verbatim}
+
+ \begin{Verbatim}[gobble=8]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\subsubsection{Customization of formatting}
+
+\begin{optlist}
+ \item[formatcom (command)]: command to execute before printing verbatim
+ text
+ (\emph{Default: empty}).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[formatcom=\color{red}]
+ First verbatim line.
+ Second verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\subsubsection{Changing individual line formatting}
+
+ The macro \cs{FancyVerbFormatLine} defines the way each line is formatted.
+Its default value is \verb+\def\FancyVerbFormatLine#1{#1}+, but we can
+redefine it at our convenience (\texttt{FancyVerbLine} is the name of the
+line counter):
+
+{\fvset{fontsize=\small}
+\begin{SideBySideExample}
+ Z\fvset{fontsize=\normalsize}
+ \renewcommand{\FancyVerbFormatLine}[1]{%
+ \makebox[0cm][l]{$\Rightarrow$}#1}
+ \begin{Verbatim}
+ First verbatim line.
+ Second verbatim line.
+ Third verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\begin{SideBySideExample}
+ \renewcommand{\FancyVerbFormatLine}[1]{%
+ \ifodd\value{FancyVerbLine}%
+ \MakeUppercase{#1}\else#1\fi}
+ \begin{Verbatim}
+ First verbatim line.
+ Second verbatim line.
+ Third verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+}
+
+\subsubsection{Fonts}
+
+\begin{optlist}
+ \item[fontfamily (family name)]: font family to use.
+ \texttt{tt}, \texttt{courier} and \texttt{helvetica} are pre-defined
+ (\emph{Default:~tt}).
+\end{optlist}
+
+\ifPostScriptFonts We can guess that PostScript fonts are available
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[fontfamily=helvetica]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\else
+\begin{quote}
+ \textbf{\large Warning!} PostScript fonts seems not available on your
+ platform (we are looking for the file \texttt{times.sty}, so we will
+ not show the examplaes using such PostScript fonts.
+\end{quote}
+\fi
+
+\begin{optlist}
+ \item[fontsize (font size)]: size of the font to use
+ (\emph{Default: auto} \Dash the same as the current font). If you use the
+ `\textsf{relsize}' package too, you can require a change of the size
+ proportional to the current one (for instance:
+ \verb+fontsize=\relsize{-2}+).
+\end{optlist}
+
+\ifPostScriptFonts We can guess that PostScript fonts are available
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[fontsize=\small]
+ Verbatim line.
+ \end{Verbatim}
+
+ \begin{Verbatim}[fontfamily=courier,
+ fontsize=\large]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\else
+\begin{SideBySideExample}
+ \begin{Verbatim}[fontsize=\small]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+\fi
+
+\begin{optlist}
+ \item[fontshape (font shape)]: font shape to use
+ (\emph{Default: auto} \Dash the same as the current font).
+\end{optlist}
+
+\ifPostScriptFonts We can guess that PostScript fonts are available
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[fontfamily=courier,
+ fontshape=it]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\else
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[fontshape=it]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+\fi
+
+\begin{optlist}
+ \item[fontseries (series name)]: \LaTeX{} font `series' to use
+ (\emph{Default: auto} \Dash the same as the current font).
+\end{optlist}
+
+\ifPostScriptFonts We can guess that PostScript fonts are available
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[fontfamily=courier,
+ fontseries=b]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\else
+\begin{SideBySideExample}
+ \begin{Verbatim}[fontseries=b]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+\fi
+
+\subsubsection{Types and characteristics of frames}
+
+\begin{optlist}
+ \item[frame
+ (none$\mid$leftline$\mid$topline$\mid$bottomline$\mid$lines$\mid$single)]:
+ type of frame around the verbatim environment
+ (\emph{Default: none} \Dash no frame). With \textsf{leftline} and
+ \textsf{single} modes, a space of a length given by the \LaTeX{}
+ \cs{fboxsep} macro is added between the left vertical line and the text.
+\end{optlist}
+
+ Problem at the top of a page...
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[frame=leftline]
+ Verbatim line.
+ \end{Verbatim}
+
+ \begin{Verbatim}[frame=topline]
+ Verbatim line.
+ \end{Verbatim}
+
+ \begin{Verbatim}[frame=bottomline]
+ Verbatim line.
+ \end{Verbatim}
+
+ \begin{Verbatim}[frame=lines]
+ Verbatim line.
+ \end{Verbatim}
+
+ \begin{Verbatim}[frame=single]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\begin{optlist}
+ \item[framerule (dimension)]: width of the rule of the frame
+ (\emph{Default: 0.4pt if framing specified}).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[frame=single,
+ framerule=1mm]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\begin{optlist}
+ \item[framesep (dimension)]: width of the gap between the frame and
+ the text (\emph{Default: \cs{fboxsep}}).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[frame=single,
+ framesep=5mm]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\begin{optlist}
+ \item[rulecolor (color command)]: color of the frame rule, expressed
+ in the standard \LaTeX{} way
+ (\emph{Default: black}).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[frame=single,
+ rulecolor=\color{red}]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\begin{optlist}
+ \item[fillcolor (color command)]: color used to fill the space
+ between the frame and the text (its thickness is given by
+ \texttt{framesep})
+ (\emph{Default: none} \Dash no color).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[frame=single,
+ framerule=1mm,framesep=3mm,
+ rulecolor=\color{red},
+ fillcolor=\color{yellow}]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\subsubsection{Label for the environment}
+
+\begingroup
+\newcommand\Vitem{\SaveVerb[aftersave={\item[\UseVerb{Vitem}]}]{Vitem}}
+\DefineShortVerb{\|}
+
+\begin{optlist}
+ \Vitem|label ({[string]string})|: label(s) to print on top, bottom or
+ both frame lines of the environment to describe it content
+ (\emph{Default: empty} \Dash no label).
+ If the label(s) contains special characters, as a comma or an equal sign,
+ it must be put inside a group. If only one string is given, it will be
+ used for both top and bottom lines (if the two are printed), but if an
+ optional first label is given too, this one will be used for the top line
+ and the second one for the bottom line. Note also that, if another value
+ than \textsf{topline}, \textsf{bottomline}, \textsf{lines} or
+ \textsf{single} is used for the \textsf{frame} parameter, the label(s)
+ will not be printed.
+\end{optlist}
+\endgroup
+
+ Problem at the top of a page...
+
+\begin{SideBySideExample}
+ \fvset{gobble=2}
+ \begin{Verbatim}[frame=single,
+ label=My text]
+ First verbatim line.
+ Second verbatim line.
+ \end{Verbatim}
+
+ \begin{Verbatim}[frame=topline,
+ framesep=4mm,
+ label=\fbox{\Large\emph{The code}}]
+ First verbatim line.
+ Second verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\begin{optlist}
+ \item[labelposition (none$\mid$topline$\mid$bottomline$\mid$all)]:
+ position where to print the label if one is defined, which must be
+ coherent with the kind of frame chosen
+ (\emph{Default: none if the label is empty, topline if one label is
+ defined and all if two are defined}).
+ Of course, some incompatible options (like
+ \textsf{frame=topline,labelposition=bottomline}) will not print the
+ label.
+\end{optlist}
+
+ Problem at the top of a page...
+
+\begin{SideBySideExample}
+ \fvset{gobble=2}
+ \begin{Verbatim}[frame=single,
+ framesep=2mm,
+ label=Text,labelposition=all]
+ First verbatim line.
+ Second verbatim line.
+ \end{Verbatim}
+
+ \begin{Verbatim}[frame=lines,
+ label=Text,labelposition=topline]
+ First verbatim line.
+ Second verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[frame=bottomline,
+ framesep=3mm,
+ label=\textit{Code included},
+ labelposition=bottomline]
+ First verbatim line.
+ Second verbatim line.
+ \end{Verbatim}
+
+ \begin{Verbatim}[frame=lines,
+ framesep=3mm,
+ label={[Beginning of code]End of code}]
+ First verbatim line.
+ Second verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\subsubsection{Line numbering}
+
+\begin{optlist}
+ \item[numbers (none$\mid$left$\mid$right)]: numbering of the verbatim lines
+ (\emph{Default: none} \Dash no numbering). If requested, this numbering is
+ done \emph{outside} the verbatim environment.
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[gobble=2,numbers=left]
+ First verbatim line.
+ Second verbatim line.
+ \end{Verbatim}
+
+ \begin{Verbatim}[gobble=2,
+ numbers=right,numbersep=0pt]
+ First verbatim line.
+ Second verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\begin{optlist}
+ \item[numbersep (dimension)]: gap between numbers and verbatim lines
+ (\emph{Default: 12pt}).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[gobble=2,
+ numbers=left,numbersep=2pt]
+ First verbatim line.
+ Second verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\begin{optlist}
+ \item[firstnumber (auto$\mid$last$\mid$integer)]: number of the first line
+ (\emph{Default: auto} \Dash numbering starts from 1). \textsf{last} means
+ that the numbering is continued from the previous verbatim environment. If
+ an integer is given, its value will be used to start the numbering.
+\end{optlist}
+
+\begin{SideBySideExample}
+ \fvset{gobble=2,
+ numbers=left,numbersep=3pt}
+ \begin{Verbatim}
+ Verbatim line.
+ \end{Verbatim}
+
+ \begin{Verbatim}[firstnumber=last]
+ Verbatim line.
+ \end{Verbatim}
+
+ \begin{Verbatim}[firstnumber=100]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\begin{optlist}
+ \item[stepnumber (integer)]: interval at which line numbers are printed
+ (\emph{Default:~1} \Dash all lines are numbered).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[gobble=2,numbers=left,
+ numbersep=3pt,stepnumber=2]
+ First verbatim line.
+ Second verbatim line.
+ Third verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+ The macro \cs{theFancyVerbLine} defines the typesetting style of the
+numbering, and the counter used is \texttt{FancyVerbLine}:
+
+\begin{SideBySideExample}
+ \renewcommand{\theFancyVerbLine}{%
+ \textcolor{red}{\small
+ 8.\alph{FancyVerbLine}}}
+ \begin{Verbatim}[gobble=2,
+ numbers=left,numbersep=2pt]
+ First verbatim line.
+ Second verbatim line.
+ Third verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\ifChangeBar\begin{changebar}\fi
+\begin{optlist}
+ \item[numberblanklines (boolean)]: to number or not the empty lines
+ (really empty or containing blank characters only)
+ (\emph{Default: true} \Dash all lines are numbered).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[gobble=2,numbers=left,
+ numbersep=3pt,
+ numberblanklines=false]
+ First verbatim line.
+
+
+ Second verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+\ifChangeBar\end{changebar}\fi
+%
+\subsubsection{Selection of lines to print}
+
+\begin{optlist}
+ \item[firstline (integer)]: first line to print
+ (\emph{Default: empty} \Dash all lines from the first are printed).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[gobble=2,firstline=2,
+ numbers=left,numbersep=2pt]
+ First verbatim line.
+ Second verbatim line.
+ Third verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\begin{optlist}
+ \item[lastline (integer)]: last line to print
+ (\emph{Default: empty} \Dash all lines until the last one are printed).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[gobble=2,lastline=1,
+ numbers=left,numbersep=2pt]
+ First verbatim line.
+ Second verbatim line.
+ Third verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+Instead of specifying a firstline at which to start printing a range
+of lines, you can define a start string; the start of the range is
+the first line that exactly equals the string. (The comparison is made
+before any characters are gobbled off the front of the line.) Similarly for a stop
+string. You can mix line-numbers and strings, e.g.\ start at
+firstline, and end at a stop string. Specifying the strings is a
+bit klunky. Initially you must define the strings with
+\cs{newcommand*} as in:
+
+\begin{SideBySideExample}[gobble=2]
+ \newcommand*\FancyVerbStartString{FROM}
+ \newcommand*\FancyVerbStopString{TO}
+ \begin{Verbatim}
+ First verbatim line.
+ FROM
+ Second verbatim line.
+ TO
+ Third verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\noindent To redefine the strings, you must use \cs{renewcommand*}.
+
+\subsubsection{Spaces and tab characters}
+
+\begin{optlist}
+ \item[showspaces (boolean)]: print a special character representing each
+ space
+ (\emph{Default: false} \Dash spaces not shown).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[showspaces=true]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+ In practice, all verbatim environments have a~\texttt{*} variant, which
+sets \texttt{showspaces=true}:
+
+\begin{SideBySideExample}
+ \begin{Verbatim*}
+ Verbatim line.
+ \end{Verbatim*}
+\end{SideBySideExample}
+
+ There are also some parameters to determine the way tab characters are
+interpreted (using tabs is in fact a rather old-fashioned style of coding):
+
+\begin{optlist}
+ \item[showtabs (boolean)]: explicitly show tab characters
+ (\emph{Default: false} \Dash tab characters not shown).
+\end{optlist}
+
+\begin{optlist}
+ \item[obeytabs (boolean)]: position characters according to the tabs
+ (\emph{Default: false} \Dash tab characters are added to the current
+ position).
+\end{optlist}
+
+\begin{optlist}
+ \item[tabsize (integer)]: number of spaces given by a tab character
+ (\emph{Default:~8}).
+\end{optlist}
+
+\subsubsection{Space between lines}
+
+\begin{optlist}
+ \item[baselinestretch (auto$\mid$dimension)]: value to give to the usual
+ `baselinestretch' \LaTeX{} parameter
+ (\emph{Default: auto} \Dash its current value just before the verbatim
+ command).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[baselinestretch=2]
+ First verbatim line.
+ Second verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\subsubsection{Escape characters for inserting commands}
+
+\begin{optlist}
+ \item[commandchars (three characters)]: characters which define the
+ character which starts a macro and marks the beginning and end of a group;
+ thus lets us introduce \emph{escape} sequences in verbatim code. Of
+ course, it is better to choose special characters which are not used in
+ the verbatim text! (\emph{Default: empty}).
+ \label{sec:commandchars}
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[commandchars=\\\{\}]
+ \textit{This is a comment}
+ First verbatim line.
+ \fbox{Second} verbatim line.
+ \textcolor{red}{Third} verbatim line.
+ \end{Verbatim}
+
+ \begin{Verbatim}[commandchars=+\[\]]
+ +textit[\textbf{Verbatim} line].
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\ifChangeBar\begin{changebar}\fi
+ Using this way, it is also possible to put labels to be able, later, to
+make reference to some lines of the verbatim environments:
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[commandchars=\\\{\},
+ numbers=left,numbersep=2pt]
+ First verbatim line.
+ Second line.\label{vrb:Important}
+ Third verbatim line.
+ \end{Verbatim}
+
+ As I previously shown
+ line~\ref{vrb:Important}, it is...
+\end{SideBySideExample}
+\ifChangeBar\end{changebar}\fi
+
+\subsubsection{Margins}
+
+\begin{optlist}
+ \item[xleftmargin (dimension)]: indentation to add at the start of each
+ line
+ (\emph{Default:~0pt} \Dash no left margin).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[frame=single,
+ xleftmargin=5mm]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\begin{optlist}
+ \item[xrightmargin (dimension)]: right margin to add after each line
+ (\emph{Default:~0pt} \Dash no right margin).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \begin{Verbatim}[frame=single,
+ xrightmargin=1cm]
+ Verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+
+\begin{optlist}
+ \item[resetmargins (boolean)]: reset the left margin, which is useful if
+ we are inside other indented environments (\emph{Default: false} \Dash no
+ reset of the margin).
+\end{optlist}
+
+{%
+\DefineVerbatimEnvironment{Verbatim}{Verbatim}{gobble=0,numbers=none}
+\begin{SideBySideExample}
+ \begin{itemize}
+ \item First item
+ \begin{Verbatim}[frame=single]
+ Verbatim line.
+ \end{Verbatim}
+ \item Second item
+ \begin{Verbatim}[frame=single,
+ resetmargins=true]
+ Verbatim line.
+ \end{Verbatim}
+ \end{itemize}
+\end{SideBySideExample}
+}
+
+\subsubsection{Overfull box messages}
+
+\begin{optlist}
+ \item[hfuzz (dimension)]: value to give to the \TeX{} \cs{hfuzz} dimension
+ for text to format. This can be used to avoid seeing some unimportant
+ \emph{Overfull box} messages (\emph{Default:~2pt}).
+\end{optlist}
+
+\subsubsection{Page breaks}
+
+\begin{optlist}
+ \item[samepage (boolean)]: in very special circumstances, we may want to
+ make sure that a verbatim environment is not broken, even if it does not
+ fit on the current page. To avoid a page break, we can set the
+ \texttt{samepage} parameter to \emph{true} (\emph{Default: false}).
+\end{optlist}
+
+\subsubsection{Catcode characters}
+
+\begin{optlist}
+ \item[codes (macro)]: to specify \emph{catcode} changes (\emph{Default:
+ empty}).
+\end{optlist}
+
+ For instance, this allows us to include formatted mathematics in verbatim
+text:
+
+{\fvset{fontsize=\small}
+\begin{SideBySideExample}
+ Z\fvset{fontsize=\normalsize}
+ \begin{Verbatim}[commandchars=\\\{\},
+ codes={\catcode`$=3\catcode`^=7}]
+ x=1/sqrt(z**2) ! $\frac{1}{\sqrt{z^2}}$
+ \end{Verbatim}
+\end{SideBySideExample}
+} %$
+
+
+\subsubsection{Active characters}
+
+\begin{optlist}
+ \item[defineactive (macro)]: to define the effect of \emph{active}
+ characters
+ (\emph{Default: empty}).
+\end{optlist}
+
+ This allows us to do some devious tricks: see the example in Section
+\ref{sec:VerbatimInclude} on page~\pageref{sec:VerbatimInclude}.
+
+\subsection{Different kinds of verbatim environments}
+
+\subsubsection{Verbatim environment}
+
+ This is the `normal' verbatim environment which we have been using up to
+now.
+
+\subsubsection{BVerbatim environment}
+
+ This environment puts the verbatim material in a \TeX{} box. Some
+parameters do not work inside this environment (notably the framing ones),
+but two new ones are available:
+
+\begin{optlist}
+ \item[boxwidth (auto$\mid$dimension)]: size of the box used
+ (\emph{Default: auto} \Dash the width of the longest line is used).
+\end{optlist}
+
+\begin{optlist}
+ \item[baseline (b$\mid$c$\mid$t)]: position of the baseline (on the
+ \texttt{baseline}, the \texttt{center} or the \texttt{top} of the box)
+ (\emph{Default: b}).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \fvset{gobble=2}
+ \begin{BVerbatim}
+ First
+ Second
+ \end{BVerbatim}
+ \begin{BVerbatim}[baseline=c]
+ First
+ Second
+ \end{BVerbatim}
+\end{SideBySideExample}
+
+\begin{SideBySideExample}
+ \begin{BVerbatim}[boxwidth=2cm]
+ First
+ Second
+ \end{BVerbatim}
+ \begin{BVerbatim}[boxwidth=2cm,
+ baseline=t]
+ First
+ Second
+ \end{BVerbatim}
+\end{SideBySideExample}
+
+\subsubsection{LVerbatim environment}
+
+ This environment puts verbatim material into \LaTeX{} `LR' mode (the
+so-called \emph{left-to-right} mode, which in fact is the same thing that
+\TeX{} itself calls \emph{restricted horizontal mode}).
+
+\subsubsection{Personalized environments}
+
+\ifChangeBar\begin{changebar}\fi
+\VerbatimFootnotes
+ It is easy to define personal customized environments. You can redefine
+the existing ones using the \cs{RecustomVerbatimEnvironment} macro or create
+your own ones, using the \cs{DefineVerbatimEnvironment} macro\footnote{%
+\ifChangeBar\begin{changebar}\fi
+For verbatim commands, the \cs{CustomVerbatimCommand} and
+\cs{RecustomVerbatimCommand} macros also exist; for instance:
+
+\noindent
+\verb+\RecustomVerbatimCommand{\VerbatimInput}{VerbatimInput}{frame=lines}+
+\ifChangeBar\end{changebar}\fi}.
+In each case, you specify the name of the new environment, the type of
+environment on which it is based, and a set of initial option values. The
+options can be overridden with an optional argument in the normal way:
+
+\begin{SideBySideExample}
+ \RecustomVerbatimEnvironment
+ {Verbatim}{Verbatim}
+ {gobble=2,frame=single}
+ \begin{Verbatim}
+ First verbatim line.
+ Second verbatim line.
+ \end{Verbatim}
+\end{SideBySideExample}
+\ifChangeBar\end{changebar}\fi
+
+\begin{SideBySideExample}
+ \DefineVerbatimEnvironment%
+ {MyVerbatim}{Verbatim}
+ {gobble=2,numbers=left,numbersep=2mm,
+ frame=lines,framerule=0.8mm}
+ \begin{MyVerbatim}
+ First verbatim line.
+ Second verbatim line.
+ \end{MyVerbatim}
+
+ \begin{MyVerbatim}[numbers=none,
+ framerule=1pt]
+ First verbatim line.
+ Second verbatim line.
+ \end{MyVerbatim}
+\end{SideBySideExample}
+
+\section{Saving and restoring verbatim text and environments}
+
+ The \cs{SaveVerb} and \cs{UseVerb} macros allow us to save and restore
+verbatim material. \cs{UseVerb} itself is robust:
+
+% \DefineShortVerb{\|}
+% \SaveVerb{Verb}|_verbatim_|
+\begin{SideBySideExample}
+ \DefineShortVerb{\|}
+ \SaveVerb{Verb}|_verbatim_|
+ I have saved \UseVerb{Verb} and reuse
+ it later as many times as I want
+ \subsection*{Using \UseVerb{Verb}}
+ \UseVerb{Verb}.
+\end{SideBySideExample}
+
+ This also provides a solution to putting verbatim text inside \LaTeX{}
+commands which do not normally permit it: % (used package \texttt{marginnote}):
+
+{\fvset{frame=single,xrightmargin=0cm}
+\begin{Example}
+ \DefineShortVerb{\|}\SaveVerb{Verb}|_OK^| \marginpar{\UseVerb{Verb}}
+\end{Example}
+}
+
+ There is a useful ability to use verbatim text as the item text in a
+description list (something not normally permitted in \LaTeX), using the
+\texttt{aftersave} parameter:
+
+\begin{optlist}
+ \item[aftersave (macro)]: macro to dynamically save some verbatim material
+ (\emph{Default: empty}).
+\end{optlist}
+
+\begin{SideBySideExample}
+ \newcommand{\Vitem}{%
+ \SaveVerb[aftersave={%
+ \item[\UseVerb{Vitem}]}]{Vitem}}
+ \DefineShortVerb{\|}
+ \begin{description}
+ \Vitem|\MyCommand|: my command
+ \end{description}
+\end{SideBySideExample}
+
+ In the same way, we can use and restore (in normal, boxed and LR mode,
+using \cs{UseVerbatim}, \cs{BUseVerbatim} and \cs{LUseVerbatim} respectively)
+entire verbatim environments:
+
+\begin{SideBySideExample}
+ Z\fvset{gobble=0,numbers=none}
+ \begin{SaveVerbatim}{VerbEnv}
+ Verbatim line.
+ \end{SaveVerbatim}
+ \UseVerbatim{VerbEnv}
+ and \UseVerbatim{VerbEnv}
+\end{SideBySideExample}
+
+\begin{SideBySideExample}
+ Z\fvset{gobble=0,numbers=none}
+ \begin{SaveVerbatim}[gobble=5]{VerbEnv}
+ First
+ Second
+ \end{SaveVerbatim}
+
+ \fbox{\BUseVerbatim{VerbEnv}}
+ and \BUseVerbatim{VerbEnv}.
+
+ \LUseVerbatim{VerbEnv} and
+ \LUseVerbatim{VerbEnv}
+\end{SideBySideExample}
+
+\section{Writing and reading verbatim files}
+\label{sec:VerbatimInclude}
+
+ The command \cs{VerbatimInput} (the variants \cs{BVerbatimInput} and
+\cs{LVerbatimInput} also exist) allows inclusion of the contents of a file
+with verbatim formatting. Of course, the various parameters which we have
+described for customizing can still be used:
+
+%The file we will use for \VerbatimInput
+
+\typeout{*************************************}
+\typeout{* Created files: hello.f90, file.txt}
+\typeout{* See fancyhdr.dvi for an explanation}
+\typeout{*************************************}
+
+\begin{VerbatimOut}{hello.f90}
+ ! A "hello" program
+
+ program hello
+ print *,"Hello world"
+ end program hello
+\end{VerbatimOut}
+
+\begin{SideBySideExample}
+ Z\RecustomVerbatimCommand{\VerbatimInput}{VerbatimInput}{gobble=4}
+ \fvset{fontsize=\small}
+ \VerbatimInput{hello.f90}
+
+ \fvset{frame=single,numbers=left,
+ numbersep=3pt}
+ \VerbatimInput{hello.f90}
+
+ \VerbatimInput[firstline=3,
+ rulecolor=\color{green}]
+ {hello.f90}
+
+ \VerbatimInput[frame=lines,
+ fontshape=sl,fontsize=\footnotesize]
+ {hello.f90}
+\end{SideBySideExample}
+
+ We can make use of the `defineactive' parameter to set the comment lines
+ in the program text in a different style:
+
+\begin{SideBySideExample}
+ Z\RecustomVerbatimCommand{\VerbatimInput}{VerbatimInput}{gobble=4}
+ \def\ExclamationPoint{\char33}
+ \catcode`!=\active
+ \VerbatimInput%
+ [defineactive=%
+ \def!{\color{cyan}\itshape
+ \ExclamationPoint}]
+ {hello.f90}
+\end{SideBySideExample}
+
+ It is important to note that if the contents of the file does not fit on
+the page, it will be automatically broken across pages as needed (unless the
+\texttt{samepage} parameter has been set to \texttt{true}).
+
+ There is also a \verb+VerbatimOut+ environment to write verbatim text to an
+output file, in the same way:
+
+\begin{SideBySideExample}
+ \begin{VerbatimOut}{file.txt}
+ I write that.
+ And that too.
+ \end{VerbatimOut}
+
+ \VerbatimInput[frame=single,
+ numbers=left,numbersep=6pt]{file.txt}
+\end{SideBySideExample}
+
+\ifChangeBar\begin{changebar}\fi
+\section{Automatic pretty printing}
+
+ Obviously, automatic \emph{pretty printing} is outside the scope of this
+package. Nevertheless, this is specially interesting for verbatim
+inclusion of programming code files or fragments. In the \LaTeX{} world
+(not speaking of the \emph{literate programming} way), there are software
+for some special languages, as the `\textsf{C++2LaTeX}' package from Norbert
+\textsc{Kiesel}, but mainly two generic ones, which use completely different
+modes (an external preprocessor written in C and a \TeX{} based solution):
+the `\textsf{LGrind}'~\cite{LGrind} system, currently maintened by Michael
+\textsc{Piefel}, and the `\textsf{listings}'~\cite{Listings} package from
+Carsten \textsc{Heinz}.
+
+ Future versions of \FVrbPackage{} and `\textsf{listings}' packages are
+planned to cooperate, which will offer great advantages to both users of the
+two actual packages, and will allow \FVrbPackage{} users to have automatic
+pretty printing of programming codes.
+
+\section{Known problems}
+
+\begin{itemize}
+ \item Vladimir \textsc{Volovich} \verb+<vvv@vvv.vsu.ru>+ reported that the
+ special character \verb+\th+, available with T1 encoding, can't be
+ included as verbatim with \FVrbPackage. It can be true for other special
+ characters too.
+\end{itemize}
+
+\iffalse
+
+\section{Thanks}
+
+ For interesting comments and suggestions, we would like to thank specially
+(alphabetic order): Philippe \textsc{Esperet}
+\url{esperet@marie.polytechnique.fr}, Michael \textsc{Friendly}
+\url{friendly@hotspur.psych.yorku.ca}, Rolf \textsc{Niepraschk}
+\url{niepraschk@gmx.de} and for bug reports Mario \textsc{Hassler}
+\relax\unskip\break
+\url{HASSLER@ippnv2.ipp.kfa-juelich.de}, Mikhail \textsc{Kolodin}
+\relax\unskip\break
+\url{myke@morrigan.spb.su}, Andreas Matthias, Ulrich M. Schwarz, and Vladimir \textsc{Volovich}
+\verb+<vvv@vvv.vsu.ru>+.
+
+
+\fi
+\section{Conclusion}
+
+ There are a few other possibilities that we have not described here.
+Note specially that it is possible to define a customization file
+(\texttt{fancyvrb.cfg}) loaded at the end of the package, to store
+definitions of your customized commands and environments and to redefine
+the attributes of existing ones.
+
+
+\clearpage
+
+
+\part{Package \texttt{fancyvrb-ex}}
+This package defines some example environments which can write input code
+and output side by side or on top of each other. They are all used for this documentation of \texttt{fancyvrb}.
+
+\section{\texttt{Example} environment}
+
+\begin{Verbatim}[gobble=2]
+ \begin{Example}
+ First verbatim line.
+ Second verbatim line.
+ Third verbatim line.
+ \end{Example}
+\end{Verbatim}
+
+\begin{Example}
+ First verbatim line.
+ Second verbatim line.
+ Third verbatim line.
+\end{Example}
+
+\begin{Verbatim}[gobble=2]
+ \begin{Example}[frame=lines,framerule=1mm,
+ numbers=left]
+ First verbatim line.
+ Second verbatim line.
+ Third verbatim line.
+ \end{Example}
+\end{Verbatim}
+
+\begin{Example}[frame=lines,framerule=1mm,numbers=left]
+ First verbatim line.
+ Second verbatim line.
+ Third verbatim line.
+\end{Example}
+
+\newpage
+
+\section{\texttt{CenterExample} environment}
+
+\begin{Verbatim}[gobble=2]
+ \begin{CenterExample}[frame=single,
+ numbers=right]
+ First verbatim line.
+ Second verbatim line.
+ Third verbatim line.
+ \end{CenterExample}
+\end{Verbatim}
+
+\begin{CenterExample}[frame=single,numbers=right]
+ First verbatim line.
+ Second verbatim line.
+ Third verbatim line.
+\end{CenterExample}
+
+
+\section{\texttt{SideBySideExample} environment}
+
+\begin{Verbatim}[gobble=2]
+ \begin{SideBySideExample}[xrightmargin=5cm,
+ frame=lines, numbers=left]
+ First verbatim line.
+ Second verbatim line.
+ Third verbatim line.
+ \end{SideBySideExample}
+\end{Verbatim}
+
+\begin{SideBySideExample}[xrightmargin=5cm,frame=single,numbers=left]
+ First verbatim line.
+ Second verbatim line.
+ Third verbatim line.
+\end{SideBySideExample}
+
+\section{\texttt{PCenterExample} environment}
+
+\begin{Verbatim}
+ \fvset{frame=lines,framerule=0.5mm,numbers=left}
+
+ \begin{PCenterExample}(-0.5,-0.5)(0.5,0.5)
+ \setlength{\unitlength}{1cm}
+ \put(0,0){\circle{1}}
+ \end{PCenterExample}
+
+ \showgrid
+ \begin{PCenterExample}(-1,-1)(1,1)
+ \setlength{\unitlength}{1cm}
+ \put(0,0){\circle{1}}
+ \end{PCenterExample}
+\end{Verbatim}
+
+{\fvset{frame=lines,framerule=0.5mm,numbers=left}
+\begin{PCenterExample}(-0.5,-0.5)(0.5,0.5)
+ \setlength{\unitlength}{1cm}
+ \put(0,0){\circle{1}}
+\end{PCenterExample}
+\showgrid
+\begin{PCenterExample}(-1,-1)(1,1)
+ \setlength{\unitlength}{1cm}
+ \put(0,0){\circle{1}}
+\end{PCenterExample}
+}
+
+\section{\texttt{PSideBySideExample} environment}
+
+\begin{Verbatim}[gobble=2]
+ \fvset{frame=single,xrightmargin=5cm}
+ \begin{PSideBySideExample}(-2,-1)(2,1)
+ \psellipse*[linecolor=yellow](2,1)
+ \end{PSideBySideExample}
+ \showgrid
+ \begin{PSideBySideExample}(-2,-1)(2,1)
+ \psellipse[linestyle=dashed](2,1)
+ \end{PSideBySideExample}
+\end{Verbatim}
+
+{\fvset{frame=single,xrightmargin=5cm}
+\begin{PSideBySideExample}(-2,-1)(2,1)
+ \psellipse*[linecolor=yellow](2,1)
+\end{PSideBySideExample}
+
+\showgrid
+\begin{PSideBySideExample}(-2,-1)(2,1)
+ \psellipse[linestyle=dashed](2,1)
+\end{PSideBySideExample}
+}
+
+\begin{Verbatim}[gobble=2]
+ \fvset{frame=single,xrightmargin=5cm}
+ \begin{PSideBySideExample}(-2,-1)(2,1)
+ \psellipse[linestyle=dashed](2,1)
+ \end{PSideBySideExample}
+ \begin{PSideBySideExample}[numbers=right](-2,-1)(2,1)
+ \psellipse[linestyle=dotted](2,1)
+ \end{PSideBySideExample}
+\end{Verbatim}
+
+{\fvset{frame=single,xrightmargin=5cm}
+\begin{PSideBySideExample}(-2,-1)(2,1)
+ \psellipse[linestyle=dashed](2,1)
+\end{PSideBySideExample}
+
+\begin{PSideBySideExample}[numbers=right](-2,-1)(2,1)
+ \psellipse[linestyle=dotted](2,1)
+\end{PSideBySideExample}
+}
+
+
+
+
+
+
+
+\begin{thebibliography}{1}
+ \bibitem{FancyBox} Timothy \textsc{van Zandt},
+ \textit{Documentation for `fancybox': Box tips and tricks for \LaTeX}.
+ Available from \url{CTAN: macros/latex/contrib/supported/fancybox}, 1993.
+
+ \bibitem{FancyVrb} Timothy \textsc{van Zandt},
+ \textit{`fancyvrb': Fancy Verbatims in \LaTeX}.
+ Available from \url{CTAN: macros/latex/contrib/supported/fancyvrb}, 1998.
+
+ \bibitem{LGrind} Various authors (current maintainer: Michael
+ \textsc{Piefel}),
+ \textit{The `LGrind' package}.
+ Available from \url{CTAN: support/lgrind}, 1998.
+
+ \bibitem{Listings} Carsten \textsc{Heinz},
+ \textit{The `Listings' package}.
+ Available from \url{CTAN: macros/latex/contrib/supported/listings}, 1996-1997.
+\end{thebibliography}
+
+
+
+
+
+
+
+
+\end{document}
diff --git a/macros/latex/contrib/fancyvrb/latex/fancyvrb-ex.sty b/macros/latex/contrib/fancyvrb/latex/fancyvrb-ex.sty
new file mode 100644
index 0000000000..054ede2ada
--- /dev/null
+++ b/macros/latex/contrib/fancyvrb/latex/fancyvrb-ex.sty
@@ -0,0 +1,144 @@
+%%
+%% This is file `fancyvrb-ex.sty',
+%%
+%% COPYRIGHT 2018-, by Herbert Voss <hvoss@tug.org>
+%%
+%% This package may be distributed under the terms of the LaTeX Project Public
+%% License, as described in lppl.txt in the base LaTeX distribution.
+%% Either version 1.3 or, at your option, any later version.
+%%
+%% DESCRIPTION:
+%% fancyvrb.sty is a LaTeX style option, containing flexible
+%% verbatim environments and commands and extensive documentation.
+%% it is based on the work of Denis Girou
+%%
+\NeedsTeXFormat{LaTeX2e}
+\def\fileversion{0.01}
+\def\filedate{2018/11/01}
+\ProvidesPackage{fancyvrb-ex}[\filedate]
+\message{Style option: `fancyvrb-ex' v\fileversion \space <\filedate> (tvz)}
+\csname fancyvrb-ex@loaded\endcsname
+\expandafter\let\csname fancyvrb-ex@loaded\endcsname\endinput
+\newif\ifEX@pstricks \EX@pstricksfalse
+\DeclareOption{pstricks}{\EX@pstrickstrue}
+\newif\ifEX@color\EX@colorfalse
+\DeclareOption{color}{\global\EX@colortrue}
+\ProcessOptions
+\RequirePackage{fancyvrb} % Standard LaTeX `color' package
+\RequirePackage{xcolor} % Standard LaTeX `color' package
+\def\FV@Error#1#2{%
+ \edef\@tempc{#2}\expandafter\errhelp\expandafter{\@tempc}%
+ \errmessage{FancyVerb Error:^^J\space\space #1^^J}}
+
+\def\FV@eha{Your command was ignored. Type <return> to continue.}
+
+% The exa part of fancyvrb
+%
+\def\Highlight@Attributes{} % Default=nothing
+\def\NoHighlight@Attributes{} % Default=nothing
+\ifEX@color
+ \RequirePackage{hcolor} % Color version
+\else
+ \RequirePackage{hbaw} % black and white version
+\fi
+\ifEX@pstricks\RequirePackage{pstricks}\fi
+%
+%\fvset{gobble=0}
+\newif\ifFvrbEx@Grid
+%
+\def\Example{%
+\catcode`\^^M=\active
+\@ifnextchar[{\catcode`\^^M=5\Example@}{\catcode`\^^M=5\Begin@Example}}
+%
+\def\endExample{%
+\end{VerbatimOut}%
+\Below@Example{\input{\jobname.tmp}}}
+%
+\def\Example@[#1]{\fvset{#1}\Begin@Example}
+%
+\def\CenterExample{%
+\catcode`\^^M=\active
+\@ifnextchar[{\catcode`\^^M=5\Example@}{\catcode`\^^M=5\Begin@Example}}
+%
+\def\endCenterExample{%
+\end{VerbatimOut}%
+\center
+\Below@Example{\input{\jobname.tmp}}
+\endcenter}
+%
+\def\SideBySideExample{%
+\catcode`\^^M=\active
+\@ifnextchar[{\catcode`\^^M=5\Example@}%
+ {\catcode`\^^M=5\Begin@Example}}
+\def\endSideBySideExample{%
+\end{VerbatimOut}%
+\SideBySide@Example{\input{\jobname.tmp}}}
+\newcommand\Begin@Example{%
+\parindent=0pt
+\multiply\topsep by 2
+\VerbatimEnvironment
+\begin{VerbatimOut}[codes={\catcode`\^^a3=12\catcode`\^^a7=12\catcode`\^^b5=12%
+ \catcode`\^^b6=12}]{\jobname.tmp}}
+\newcommand\Below@Example[1]{%
+\VerbatimInput[gobble=0,commentchar=^^a3,commandchars=^^a7^^b5^^b6,numbersep=3pt]%
+ {\jobname.tmp}
+\catcode`\^^a3=9\relax%
+\NoHighlight@Attributes % To suppress possible highlighting
+\ifFvrbEx@Grid\vspace{5pt}\fi
+#1%
+\ifFvrbEx@Grid\vspace{5pt}\fi
+\par}
+\newcommand{\SideBySide@Example}[1]{%
+\@tempdimb=\FV@XRightMargin
+\advance\@tempdimb -5mm
+\begin{minipage}[c]{\@tempdimb}
+ \fvset{xrightmargin=0pt}
+ \catcode`\^^a3=9\relax%
+ \NoHighlight@Attributes % To suppress possible highlighting
+ #1
+\end{minipage}%
+\@tempdimb=\textwidth
+\advance\@tempdimb -\FV@XRightMargin
+\advance\@tempdimb 5mm
+\begin{minipage}[c]{\@tempdimb}
+ \VerbatimInput[gobble=0,commentchar=^^a3,commandchars=^^a7^^b5^^b6,numbersep=3pt,
+ xleftmargin=5mm,xrightmargin=0pt]{\jobname.tmp}
+\end{minipage}}
+\ifx\PSTricksLoaded\endinput
+ \newcommand\showgrid{\FvrbEx@Gridtrue}
+ \newpsobject{FvrbExGrid}{psgrid}{subgriddiv=0,griddots=10,gridlabels=7pt}
+ \def\PCenterExample{\@ifnextchar[{\Pst@Example}{\Pst@@Example}}
+ \def\endPCenterExample{%
+ \end{VerbatimOut}%
+ \Below@Example{%
+ \center
+ \expandafter\pspicture\Picture@Size
+ \ifFvrbEx@Grid\FvrbExGrid\fi\relax
+ \input{\jobname.tmp}%
+ \endpspicture
+ \endcenter
+ \smallskip}}
+ \def\PSideBySideExample{\@ifnextchar[{\Pst@Example}{\Pst@@Example}}
+ \def\endPSideBySideExample{%
+ \end{VerbatimOut}%
+ \SideBySide@Example{%
+ \ifFvrbEx@Grid\vspace{5pt}\fi
+ \expandafter\pspicture\Picture@Size
+ \ifFvrbEx@Grid\FvrbExGrid\fi\relax
+ \input{\jobname.tmp}%
+ \endpspicture
+ \ifFvrbEx@Grid\vspace{5pt}\fi
+ \smallskip}}
+ \def\Pst@Example[#1]{\fvset{#1}\Pst@@Example}
+ \def\Pst@@Example#1(#2,#3){%
+ \catcode`\^^M=\active
+ \@ifnextchar({\catcode`\^^M=5\Pst@@@Example(#2,#3)}
+ {\catcode`\^^M=5\Pst@@@Example(0,0)(#2,#3)}}
+ \def\Pst@@@Example(#1,#2)(#3,#4){%
+ \def\Picture@Size{(#1,#2)(#3,#4)}%
+ \Begin@Example}
+\fi % End \ifx\PSTricksLoaded
+%%
+\endinput
+%%
+%% End of file `fancyvrb-ex.sty'.
diff --git a/macros/latex/contrib/fancyvrb/latex/fancyvrb.sty b/macros/latex/contrib/fancyvrb/latex/fancyvrb.sty
new file mode 100644
index 0000000000..e265f3965d
--- /dev/null
+++ b/macros/latex/contrib/fancyvrb/latex/fancyvrb.sty
@@ -0,0 +1,1339 @@
+%%
+%% This is file `fancyvrb.sty',
+%%
+%% COPYRIGHT 1992-1999, by Timothy Van Zandt <tvz@zandtwerk.kellogg.nwu.edu>
+%% 2010-2019, by Herbert Voss <hvoss@tug.org>
+%%
+%% This package may be distributed under the terms of the LaTeX Project Public
+%% License, as described in lppl.txt in the base LaTeX distribution.
+%% Either version 1.3 or, at your option, any later version.
+%%
+%% DESCRIPTION:
+%% fancyvrb.sty is a LaTeX style option, containing flexible
+%% verbatim environments and commands and extensive documentation.
+%%
+\NeedsTeXFormat{LaTeX2e}
+\def\fileversion{3.2a}
+\def\filedate{2019/01/15}
+\ProvidesPackage{fancyvrb}[\filedate]
+\message{Style option: `fancyvrb' v\fileversion \space <\filedate> (tvz)}
+\csname fancyvrb@loaded\endcsname
+\let\fancyvrb@loaded\endinput
+%\ProcessOptions
+%\@ifpackageloaded{xcolor}{}{\RequirePackage{xcolor}} % Standard LaTeX `color' package
+\def\FV@Error#1#2{%
+ \edef\@tempc{#2}\expandafter\errhelp\expandafter{\@tempc}%
+ \errmessage{FancyVerb Error:^^J\space\space #1^^J}}
+
+\def\FV@eha{Your command was ignored. Type <return> to continue.}
+%% DG/SR modification begin - Jan. 21, 1998
+%% Suggested by Bernard Gaulle to solve a compatibility problem with `french'
+%% (it introduce the restriction to put \VerbatimFootnotes AFTER the preambule)
+%%\def\VerbatimFootnotes{\let\@footnotetext\V@footnotetext}
+\let\V@footnote\footnote
+\def\VerbatimFootnotes{%
+\let\@footnotetext\V@footnotetext%
+\let\footnote\V@footnote}
+%% DG/SR modification end
+\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}
+\RequirePackage{keyval}
+\def\define@booleankey#1#2#3#4{%
+ \@namedef{KV@#1@#2@default}{#3}%
+ \@namedef{KV@#1@#2@false}{#4}%
+ \@namedef{KV@#1@#2}##1{\KV@booleankey{##1}{#1}{#2}}}
+\def\KV@booleankey#1#2#3{%
+ \edef\@tempa{#1}\expandafter\KV@@booleankey\@tempa\relax\@nil{#2}{#3}}
+\def\KV@@booleankey#1#2\@nil#3#4{%
+ \@nameuse{KV@#3@#4@\if t#1default\else\if T#1default\else false\fi\fi}}
+\def\FV@None{none}
+\def\FV@Auto{auto}
+\def\fvset#1{\setkeys{FV}{#1}}
+\def\FV@Command#1#2{%
+ \@ifstar
+ {\def\FV@KeyValues{#1,showspaces}\FV@@Command{#2}}%
+ {\def\FV@KeyValues{#1}\FV@@Command{#2}}}
+\def\FV@@Command#1{%
+ \@ifnextchar[%
+ {\FV@GetKeyValues{\@nameuse{FVC@#1}}}%
+ {\@nameuse{FVC@#1}}}
+\def\FV@GetKeyValues#1[#2]{%
+ \expandafter\def\expandafter\FV@KeyValues\expandafter{\FV@KeyValues,#2}#1}
+\def\@CustomVerbatimCommand#1#2#3#4{%
+ \begingroup\fvset{#4}\endgroup % If there are errors, it easier to locate.
+%% DG/SR modification begin - Jan. 13, 1998
+%% \def\@tempa##1##2\@nil{\def\@tempa{##2}}%
+%% \expandafter\@tempa\string#3\@empty\@nil
+%% \@ifundefined{FVC@\@tempa}%
+ \@ifundefined{FVC@#3}%
+%% DG/SR modification end
+ {\FV@Error{Command `\string#3' is not a FancyVerb command.}\@eha}%
+ {#1{#2}{\FV@Command{#4}{#3}}}}
+\def\CustomVerbatimCommand{\@CustomVerbatimCommand\newcommand}
+\def\RecustomVerbatimCommand{\@CustomVerbatimCommand\renewcommand}
+\def\FV@Environment#1#2{%
+ \def\FV@KeyValues{#1}%
+ \catcode`\^^M=\active
+ \@ifnextchar[%
+ {\catcode`\^^M=5 \FV@GetKeyValues{\@nameuse{FVB@#2}}}%
+ {\catcode`\^^M=5 \@nameuse{FVB@#2}}}
+\def\CustomVerbatimEnvironment{\@CustomVerbatimEnvironment\newenvironment}
+\def\RecustomVerbatimEnvironment{\@CustomVerbatimEnvironment\renewenvironment}
+\def\@CustomVerbatimEnvironment#1#2#3#4{%
+ \begingroup\fvset{#4}\endgroup % If there are errors, it easier to locate.
+ \@ifundefined{FVB@#3}%
+ {\FV@Error{`#3' is not a FancyVerb environment.}\@eha}%
+ {#1{#2}{\FV@Environment{#4}{#3}}{\@nameuse{FVE@#3}}%
+ #1{#2*}{\FV@Environment{#4,showspaces}{#3}}{\@nameuse{FVE@#3}}}}
+\def\DefineVerbatimEnvironment#1#2#3{%
+ \@namedef{#1}{\FV@Environment{#3}{#2}}%
+ \@namedef{end#1}{\@nameuse{FVE@#2}}%
+ \@namedef{#1*}{\FV@Environment{#3,showspaces}{#2}}%
+ \@namedef{end#1*}{\@nameuse{FVE@#2}}}
+\def\FV@UseKeyValues{%
+ \ifx\FV@KeyValues\@empty\else
+ \def\KV@prefix{KV@FV@}%
+ \expandafter\KV@do\FV@KeyValues,\relax,%
+ \def\FV@KeyValues{}%
+ \fi}
+\def\FV@CatCodes{%
+ \let\do\@makeother\dospecials % The usual stuff.
+ \FV@ActiveWhiteSpace % See below.
+ \FV@FontScanPrep % See below.
+ \FV@CatCodesHook % A style hook.
+ \FancyVerbCodes} % A user-defined hook.
+\def\FV@ActiveWhiteSpace{%
+ \catcode`\^^M=\active % End of line
+ \catcode`\ =\active % Space
+ \catcode`\^^I=\active} % Tab
+\def\FV@CatCodesHook{}
+\def\FV@AddToHook#1#2{%
+ \expandafter\def\expandafter#1\expandafter{#1#2\relax}}
+\define@key{FV}{codes}[]{\def\FancyVerbCodes{#1\relax}}
+\define@key{FV}{codes*}{%
+ \expandafter\def\expandafter\FancyVerbCodes\expandafter{\FancyVerbCodes#1\relax}}
+\fvset{codes}
+%
+\define@key{FV}{vspace}[\topsep]{\def\FancyVerbVspace{#1}}
+\fvset{vspace}
+%
+\define@key{FV}{commandchars}[\\\{\}]%
+ {\def\@tempa{#1}%
+ \ifx\@tempa\FV@None
+ \let\FV@CommandChars\relax
+ \else
+ \FV@DefineCommandChars#1\relax\relax\relax
+ \fi}
+\def\FV@DefineCommandChars#1#2#3{%
+ \def\FV@CommandChars{%
+ \catcode`#1=0\relax\catcode`#2=1\relax\catcode`#3=2\relax}}
+\FV@AddToHook\FV@CatCodesHook\FV@CommandChars
+\define@key{FV}{commentchar}[\%]{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\FV@None
+ \let\FV@CommentChar\relax
+ \else
+ \def\FV@CommentChar{\catcode`#1=14}%
+ \fi}
+\FV@AddToHook\FV@CatCodesHook\FV@CommentChar
+\fvset{commandchars=none,commentchar=none}
+\define@key{FV}{firstline}{%
+ \afterassignment\FV@ParseStart\@tempcnta=0#1\relax\@nil{#1}}
+\def\FV@ParseStart#1\relax\@nil#2{%
+ \ifx\@nil#1\@nil
+ \edef\FancyVerbStartNum{\the\@tempcnta}%
+ \let\FancyVerbStartString\relax
+ \else
+ \edef\FancyVerbStartString{#2}%
+ \fi}
+\def\KV@FV@firstline@default{%
+ \let\FancyVerbStartNum\z@
+ \let\FancyVerbStartString\relax}
+\define@key{FV}{lastline}{%
+ \afterassignment\FV@ParseStop\@tempcnta=0#1\relax\@nil{#1}}
+\def\FV@ParseStop#1\relax\@nil#2{%
+ \ifx\@nil#1\@nil
+ \edef\FancyVerbStopNum{\the\@tempcnta}%
+ \let\FancyVerbStopString\relax
+ \else
+ \edef\FancyVerbStopString{#2}%
+ \fi}
+\def\KV@FV@lastline@default{%
+ \let\FancyVerbStopNum\z@
+ \let\FancyVerbStopString\relax}
+\fvset{firstline,lastline}
+\newcount\FV@CodeLineNo
+\def\FV@PreProcessLine{%
+ \global\advance\FV@CodeLineNo\@ne
+ \FV@FindStartStop}
+\def\FV@@PreProcessLine{%
+ \FV@StepLineNo
+ \FV@Gobble
+ \expandafter\FV@ProcessLine\expandafter{\FV@Line}}
+\def\FV@FindStartStop{\FV@DefineFindStart\FV@FindStartStop}
+%% \def\FV@DefinePreProcessLine{%
+%% \setcounter{FancyVerbLine}{0}%
+%% \FV@DefineFindStart}
+\def\FV@DefineFindStart{%
+ \ifx\FancyVerbStartString\relax
+ \ifnum\FancyVerbStartNum<\tw@
+ \FV@DefineFindStop
+ \else
+ \let\FV@FindStartStop\FV@FindStartNum
+ \fi
+ \else
+ \let\FV@FindStartStop\FV@FindStartString
+ \fi}
+\def\FV@FindStartNum{%
+ \ifnum\FancyVerbStartNum>\FV@CodeLineNo\else
+ \FV@DefineFindStop
+ \expandafter\FV@@PreProcessLine
+ \fi}
+%% SR modification begin - 1996
+\def\FV@FindStartString{%
+ \expandafter\FV@@FindStartString
+{\meaning\FV@Line}%
+{\meaning\FancyVerbStartString}%
+}
+\def\FV@@FindStartString#1#2{%
+\edef\@fooA{#1}\edef\@fooB{#2}%
+ \ifx\@fooA\@fooB\FV@DefineFindStop\fi
+}
+%% SR modification end
+\def\FV@DefineFindStop{%
+ \ifx\FancyVerbStopString\relax
+ \ifnum\FancyVerbStopNum<\@ne
+ \let\FV@FindStartStop\FV@@PreProcessLine
+ \else
+ \let\FV@FindStartStop\FV@FindStopNum
+ \fi
+ \else
+ \let\FV@FindStartStop\FV@FindStopString
+ \fi}
+\def\FV@FindStopNum{%
+ \ifnum\FancyVerbStopNum>\FV@CodeLineNo
+ \else
+ \let\FV@FindStartStop\relax
+ \ifeof\FV@InFile\else
+ \immediate\closein\FV@InFile
+ \fi
+ \fi
+ \ifnum\FancyVerbStopNum<\FV@CodeLineNo
+ \else
+ \FV@@PreProcessLine
+ \fi}
+%% SR modification begin - 1996
+\def\FV@FindStopString{%
+ \expandafter\FV@@FindStopString
+{\meaning\FV@Line}%
+{\meaning\FancyVerbStopString}%
+}
+\def\FV@@FindStopString#1#2{%
+\edef\@fooA{#1}\edef\@fooB{#2}%
+ \ifx\@fooA\@fooB
+ \let\FV@FindStartStop\relax
+ \ifeof\FV@InFile\else
+ \immediate\closein\FV@InFile
+ \fi
+ \else
+ \expandafter\FV@@PreProcessLine
+ \fi}
+%% SR modification end
+\def\FV@@Gobble{%
+ \expandafter\expandafter\expandafter\FV@@@Gobble
+ \expandafter\FV@@@@Gobble\FV@Line
+ \@nil\@nil\@nil\@nil\@nil\@nil\@nil\@nil\@nil\@nil\@@nil}
+\def\FV@@@Gobble#1\@nil#2\@@nil{\def\FV@Line{#1}}
+\define@key{FV}{gobble}{%
+ \@tempcnta=#1\relax
+ \ifnum\@tempcnta<\@ne
+ \let\FV@Gobble\relax
+ \else
+ \ifnum\@tempcnta>9
+ \FV@Error{gobble parameter must be less than 10}\FV@eha
+ \else
+ \renewcommand{\FV@@@@Gobble}[\@tempcnta]{}%
+ \let\FV@Gobble\FV@@Gobble
+ \fi
+ \fi}
+\def\FV@@@@Gobble{}
+\def\KV@FV@gobble@default{\let\FV@Gobble\relax}
+\fvset{gobble}
+\def\FV@Scan{%
+ \FV@CatCodes
+ \VerbatimEnvironment
+ \FV@DefineCheckEnd
+ \FV@BeginScanning}
+\def\VerbatimEnvironment{%
+ \ifx\FV@EnvironName\relax\xdef\FV@EnvironName{\@currenvir}\fi}
+\let\FV@EnvironName\relax
+\begingroup
+\catcode`\!=0
+\catcode`\[=1
+\catcode`\]=2
+!gdef!FV@CheckEnd@i#1[!FV@@CheckEnd#1\end{}!@nil]
+!gdef!FV@@CheckEnd@i#1\end#2#3!@nil[!def!@tempa[#2]!def!@tempb[#3]]
+!gdef!FV@@@CheckEnd@i[\end{}]
+\catcode`!\=12
+
+!gdef!FV@CheckEnd@ii#1[!FV@@CheckEnd#1\end{}!@nil]
+!gdef!FV@@CheckEnd@ii#1\end#2#3!@nil[!def!@tempa[#2]!def!@tempb[#3]]
+!gdef!FV@@@CheckEnd@ii[\end{}]
+!catcode`!{=12
+!catcode`!}=12
+
+!gdef!FV@CheckEnd@iii#1[!FV@@CheckEnd#1\end{}!@nil]
+!gdef!FV@@CheckEnd@iii#1\end{#2}#3!@nil[!def!@tempa[#2]!def!@tempb[#3]]
+!gdef!FV@@@CheckEnd@iii[\end{}]
+!catcode`!\=0
+
+!gdef!FV@CheckEnd@iv#1[!FV@@CheckEnd#1\end{}!@nil]
+!gdef!FV@@CheckEnd@iv#1\end{#2}#3!@nil[!def!@tempa[#2]!def!@tempb[#3]]
+!gdef!FV@@@CheckEnd@iv[\end{}]
+\endgroup
+\def\FV@BadCodes#1{%
+ \FV@Error
+ {\string\catcode\space of \expandafter\@gobble\string#1 is wrong:
+ \the\catcode`#1}%
+ {Only the following catcode values are allowed:
+ ^^J\@spaces \expandafter\@gobble\string\\ \space\space --> 0 or 12.
+ ^^J\@spaces \string{ \string} --> 1 and 2, resp., or both 12.
+ ^^JTo get this error, either you are a hacker or you got bad advice.}%
+ \def\FV@CheckEnd##1{\iftrue}}
+\def\FV@DefineCheckEnd{%
+ \ifnum\catcode`\\=\z@
+ \ifnum\catcode`\{=\@ne
+ \let\FV@CheckEnd\FV@CheckEnd@i
+ \let\FV@@CheckEnd\FV@@CheckEnd@i
+ \let\FV@@@CheckEnd\FV@@@CheckEnd@i
+ \else
+ \ifnum\catcode`\{=12
+ \let\FV@CheckEnd\FV@CheckEnd@iv
+ \let\FV@@CheckEnd\FV@@CheckEnd@iv
+ \let\FV@@@CheckEnd\FV@@@CheckEnd@iv
+ \else
+ \FV@BadCodes\{%
+ \fi
+ \fi
+ \else
+ \ifnum\catcode`\\=12
+ \ifnum\catcode`\{=\@ne
+ \let\FV@CheckEnd\FV@CheckEnd@ii
+ \let\FV@@CheckEnd\FV@@CheckEnd@ii
+ \let\FV@@@CheckEnd\FV@@@CheckEnd@ii
+ \else
+ \ifnum\catcode`\{=12
+ \let\FV@CheckEnd\FV@CheckEnd@iii
+ \let\FV@@CheckEnd\FV@@CheckEnd@iii
+ \let\FV@@@CheckEnd\FV@@@CheckEnd@iii
+ \else
+ \FV@BadCodes\{%
+ \fi
+ \fi
+ \else
+ \FV@BadCodes\\%
+ \fi
+ \fi}
+\begingroup
+\catcode`\^^M=\active
+ \gdef\FV@BeginScanning#1^^M{%
+ \def\@tempa{#1}\ifx\@tempa\@empty\else\FV@BadBeginError\fi%
+ \FV@GetLine}%
+\endgroup
+\def\FV@BadBeginError#1{%
+ \expandafter\@temptokena\expandafter{\@tempa}%
+ \FV@Error
+ {Extraneous input `\the\@temptokena' between
+ \string\begin{\FV@EnvironName}[<key=value>] and line end}%
+ {This input will be discarded. Hit <return> to continue.}}
+%% DG/SR modification begin - May. 18, 1998 (added code to turn off ligatures)
+%% \def\FV@GetLine{\expandafter\FV@CheckScan\FancyVerbGetLine}
+\def\FV@GetLine{\@noligs\expandafter\FV@CheckScan\FancyVerbGetLine}
+%% DG/SR modification end
+\begingroup
+\catcode`\^^M=\active%
+\gdef\FancyVerbGetLine#1^^M{%
+ \@nil%
+ \FV@CheckEnd{#1}%
+ \ifx\@tempa\FV@EnvironName% % True if end is found
+ \ifx\@tempb\FV@@@CheckEnd\else\FV@BadEndError\fi%
+ \let\next\FV@EndScanning%
+ \else%
+ \def\FV@Line{#1}%
+ \def\next{\FV@PreProcessLine\FV@GetLine}%
+ \fi%
+ \next}%
+\endgroup
+\def\FV@BadEndError{%
+ \expandafter\@temptokena\expandafter{\@tempb}%
+ \FV@Error
+ {Extraneous input `\the\@temptokena' between
+ \string\end{\FV@EnvironName} and line end}%
+ {This input will be discarded. Type <return> to continue.}}
+\def\FV@EndScanning{%
+ \edef\next{\noexpand\end{\FV@EnvironName}}%
+ \global\let\FV@EnvironName\relax
+ \next}
+\@ifundefined{@currenvline}{\let\@currenvline\@empty}{}
+\def\FV@CheckScan#1{\@ifnextchar\@nil{\@gobble}{\FV@EOF}}
+\def\FV@CheckScan#1{\ifx\@nil#1\@empty\else\expandafter\FV@EOF\fi}
+\def\FV@EOF{%
+ \FV@Error{Couldn't find `\string\end{\FV@EnvironName}' to end
+ a verbatim environment\@currenvline.}%
+ {Probably you mistyped the environment name or included an extraneous
+ ^^Jspace, or are using an improperly defined verbatim environment.
+ ^^JHit return and I will try to terminate this job.}%
+ \FV@EndScanning
+ \end{document}}
+ % \subsection{Input}
+\newread\FV@InFile
+\def\FV@Input#1{%
+ \immediate\openin\FV@InFile #1\relax
+ \ifeof\FV@InFile
+ \FV@Error{No verbatim file #1}\FV@eha
+ \immediate\closein\FV@InFile
+ \else
+ \FV@CatCodes
+ \expandafter\FV@@Input
+ \fi}
+\def\FV@@Input{%
+ \def\FV@Line{}%
+ \FV@ReadLine
+ \ifeof\FV@InFile
+ \ifx\FV@Line\@empty\else
+ \FV@PreProcessLine
+ \fi
+ \immediate\closein\FV@InFile
+ \else
+ \FV@PreProcessLine
+ \expandafter\FV@@Input
+ \fi}
+\begingroup
+\catcode`\^^M=\active
+\gdef\FV@ReadLine{%
+ \ifeof\FV@InFile\else
+ \immediate\read\FV@InFile to\@tempa%
+ \expandafter\FV@@ReadLine\@tempa^^M\relax^^M\@nil%
+ \fi}
+\gdef\FV@@ReadLine#1^^M#2^^M#3\@nil{%
+ \expandafter\def\expandafter\FV@Line\expandafter{%
+ \FV@Line#1}%
+ \ifx\relax#2\@empty\expandafter\FV@ReadLine\fi}%
+\endgroup
+\def\FV@FormattingPrep{%
+ \global\FV@CodeLineNo\z@
+ \frenchspacing % Cancels special punctuation spacing.
+ \FV@SetupFont % See below.
+ \FV@DefineWhiteSpace % See below.
+ \FancyVerbDefineActive
+ \FancyVerbFormatCom} % A user-defined hook (formatcom parameter).
+\expandafter\ifx\csname selectfont\endcsname\relax
+\def\FV@SetupFont{%
+ \FV@BaseLineStretch
+ \ifx\@currsize\small\normalsize\else\small\fi\@currsize
+ \FV@FontSize
+ \FV@FontFamily}
+
+\else
+
+\def\FV@SetupFont{%
+ \FV@BaseLineStretch
+ \FV@FontSize
+ \FV@FontFamily
+ \FV@FontSeries
+ \FV@FontShape
+ \selectfont
+%% DG/SR modification begin - May. 18, 1998 (added code to turn off ligatures)
+ \@noligs}
+%% DG/SR modification end
+\fi
+\define@key{FV}{fontsize}{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\FV@Auto
+ \let\FV@FontSize\relax
+ \else
+ \def\FV@FontSize{#1}%
+ \fi}
+\def\KV@FV@fontsize@default{\let\FV@FontSize\relax}
+\define@key{FV}{baselinestretch}[auto]{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\FV@Auto
+ \let\FV@BaseLineStretch\relax
+ \else
+ \def\FV@BaseLineStretch{\def\baselinestretch{#1}}%
+ \fi}
+\def\KV@FV@baselinestretch@default{\let\FV@BaseLineStretch\relax}
+\define@key{FV}{fontfamily}{%
+ \@ifundefined{FV@fontfamily@#1}%
+ {\def\FV@FontScanPrep{}\def\FV@FontFamily{\fontfamily{#1}}}
+ {\csname FV@fontfamily@#1\endcsname}}
+\define@key{FV}{fontseries}{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\FV@Auto
+ \let\FV@FontSeries\relax
+ \else
+ \def\FV@FontSeries{\fontseries{#1}}%
+ \fi}
+\define@key{FV}{fontshape}{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\FV@Auto
+ \let\FV@FontShape\relax
+ \else
+ \def\FV@FontShape{\fontshape{#1}}%
+ \fi}
+\def\FV@MakeActive#1{%
+ \catcode`#1=\active
+ \def\next##1{\expandafter\def\expandafter\FV@MakeUnActive\expandafter{%
+ \FV@MakeUnActive\def##1{\string##1}}}%
+ \begingroup\lccode`~=`#1\relax\expandafter\next\expandafter~\endgroup}
+\def\FV@MakeUnActive{}
+\begingroup
+\catcode`\`=\active
+\gdef\FV@fontfamily@tt{\def\FV@FontScanPrep{\FV@MakeActive\`}\def\FV@FontFamily{\ttfamily\edef`{{\string`}}}}
+\gdef\FV@fontfamily@cmtt{\def\FV@FontScanPrep{\FV@MakeActive\`}\def\FV@FontFamily{\edef`{{\string`}}\fontfamily{cmtt}}}
+\endgroup
+\@namedef{FV@fontfamily@cmtt-spanish}{\def\FV@FontScanPrep{}\def\FV@FontFamily{\fontfamily{cmtt}}}
+\@namedef{FV@fontfamily@courier}{\def\FV@FontScanPrep{}\def\FV@FontFamily{\fontfamily{pcr}}}
+\@namedef{FV@fontfamily@helvetica}{\def\FV@FontScanPrep{}\let\FV@FontFamily\sffamily}
+% \def\FV@FontFamily{\fontfamily{phv}}}
+\def\myFont{}
+\@namedef{FV@fontfamily@myFont}{\def\FV@FontScanPrep{}\def\FV@FontFamily{\myFont}}
+\fvset{fontfamily=tt,fontsize=auto,fontshape=auto,fontseries=auto,baselinestretch=auto}
+\begingroup
+\catcode`\ =\active
+\catcode`\^^I=\active
+\gdef\FV@DefineWhiteSpace{\def {\FV@Space}\def^^I{\FV@Tab}}%
+\endgroup
+\define@key{FV}{defineactive}[]{\def\FancyVerbDefineActive{#1\relax}}
+\define@key{FV}{defineactive*}{%
+ \expandafter\def\expandafter\FancyVerbDefineActive\expandafter{%
+ \FancyVerbDefineActive#1\relax}}
+\fvset{defineactive}
+\define@booleankey{FV}{showspaces}%
+ {\def\FV@Space{{\FancyVerbSpace}}}%
+ {\def\FV@Space{\ }}
+{\catcode`\ =12 \gdef\FancyVerbSpace{\tt }}
+\fvset{showspaces=false}
+\def\FV@Tab{\hbox to\FancyVerbTabSize\fontdimen2\font{\hss\FV@TabChar}}
+\define@key{FV}{tabsize}{%
+ \@tempcnta=#1\relax
+ \ifnum\@tempcnta>100
+ \FV@Error{Tab size too large: `\the\@tempcnta'. (Max size = 100)}\FV@eha
+ \else
+ \edef\FancyVerbTabSize{\the\@tempcnta}%
+ \fi}
+\define@booleankey{FV}{showtabs}%
+ {\def\FV@TabChar{\FancyVerbTab}}%
+ {\let\FV@TabChar\relax}
+\fvset{tabsize=8,showtabs=false}
+\def\FancyVerbTab{%
+ \valign{%
+ \vfil##\vfil\cr
+ \hbox{$\scriptscriptstyle-$}\cr
+ \hbox to 0pt{\hss$\scriptscriptstyle\rangle\mskip -.8mu$}\cr
+ \hbox{$\scriptstyle\mskip -3mu\mid\mskip -1.4mu$}\cr}}
+\newbox\FV@TabBox
+\def\FV@@ObeyTabsInit{%
+ \@tempdimb=\FancyVerbTabSize\fontdimen\tw@\font
+ \edef\FV@ObeyTabSize{\number\@tempdimb}%
+ \advance\@tempdimb\fontdimen\tw@\font
+ \advance\@tempdimb-\FancyVerbTabSize sp % Allow for rounding errors.
+ \edef\FV@@ObeyTabSize{\number\@tempdimb}%
+ \let\FV@ObeyTabs\FV@@ObeyTabs
+ \let\FV@Tab\FV@TrueTab}
+\def\FV@@ObeyTabs#1{\setbox\FV@TabBox=\hbox{#1}\box\FV@TabBox}
+\let\FV@ObeyTabs\relax
+\def\FV@TrueTab{%
+ \egroup
+ \@tempdima=\FV@ObeyTabSize sp\relax
+ \@tempcnta=\wd\FV@TabBox
+ \advance\@tempcnta\FV@@ObeyTabSize\relax
+ \divide\@tempcnta\@tempdima
+ \multiply\@tempdima\@tempcnta
+ \advance\@tempdima-\wd\FV@TabBox
+ \setbox\FV@TabBox=\hbox\bgroup
+ \unhbox\FV@TabBox\kern\@tempdima\hbox to\z@{\hss\FV@TabChar}}
+\define@booleankey{FV}{obeytabs}%
+ {\let\FV@ObeyTabsInit\FV@@ObeyTabsInit}%
+ {\let\FV@ObeyTabsInit\relax}
+\fvset{obeytabs=false}
+\define@key{FV}{formatcom}[]{\def\FancyVerbFormatCom{#1\relax}}
+\define@key{FV}{formatcom*}{%
+ \expandafter\def\expandafter\FancyVerbFormatCom\expandafter{%
+ \FancyVerbFormatCom#1\relax}}
+\fvset{formatcom}
+\def\FancyVerbFormatLine#1{\FV@ObeyTabs{#1}}
+\define@key{FV}{xleftmargin}{\def\FV@XLeftMargin{#1}}
+\let\FV@XLeftMargin\z@
+\define@key{FV}{xrightmargin}{\def\FV@XRightMargin{#1}}
+\let\FV@XRightMargin\z@
+\define@booleankey{FV}{resetmargins}%
+ {\let\if@FV@ResetMargins\iftrue}
+ {\let\if@FV@ResetMargins\iffalse}
+\fvset{resetmargins=false}
+\define@key{FV}{listparameters}{\def\FV@ListParameterHook{#1}}
+\def\FV@ListParameterHook{}
+\define@key{FV}{hfuzz}{%
+ \@tempdima=#1\relax
+ \edef\FancyVerbHFuzz{\number\@tempdima sp}}
+\fvset{hfuzz=2pt}
+\define@booleankey{FV}{samepage}%
+ {\def\FV@InterLinePenalty{\interlinepenalty\@M}}%
+ {\let\FV@InterLinePenalty\relax}
+\fvset{samepage=false}
+\def\FV@List#1{%
+ \begingroup
+ \FV@UseKeyValues
+ \FV@LeaveVMode
+ \if@inlabel\else\setbox\@labels=\box\voidb@x\fi
+ \FV@ListNesting{#1}%
+ \FV@ListParameterHook
+ \FV@ListVSpace
+ \FV@SetLineWidth
+ \FV@InterLinePenalty
+ \let\FV@ProcessLine\FV@ListProcessLine@i
+ \FV@CatCodes
+ \FV@FormattingPrep
+ \FV@ObeyTabsInit
+ \FV@BeginListFrame}
+\def\FV@LeaveVMode{%
+ \if@noskipsec
+ \leavevmode
+ \else
+ \if@FV@ResetMargins\if@inlabel\leavevmode\fi\fi
+ \fi
+ \ifvmode\@noparlisttrue\else\@noparlistfalse\unskip\par\fi}
+\def\FV@ListNesting#1{%
+ \if@FV@ResetMargins
+ \@listdepth=\z@
+ \else
+ \ifnum\@listdepth>5\relax
+ \@toodeep
+ \else
+ \advance\@listdepth\@ne
+ \fi
+ \fi
+ \rightmargin\z@
+ \csname @list\romannumeral\the\@listdepth\endcsname
+ \ifnum#1=\z@
+ \rightmargin\z@
+ \leftmargin\z@
+ \fi}
+\def\FV@ListVSpace{%
+% \@topsepadd\topsep
+ \@topsepadd=\FancyVerbVspace
+ \if@noparlist\advance\@topsepadd\partopsep\fi
+ \if@inlabel
+ \vskip\parskip
+ \else
+ \if@nobreak
+ \vskip\parskip
+ \clubpenalty\@M
+ \else
+ \addpenalty\@beginparpenalty
+ \@topsep\@topsepadd
+ \advance\@topsep\parskip
+ \addvspace\@topsep
+ \fi
+ \fi
+ \global\@nobreakfalse
+ \global\@inlabelfalse
+ \global\@minipagefalse
+ \global\@newlistfalse}
+\def\FV@SetLineWidth{%
+ \if@FV@ResetMargins\else
+ \advance\leftmargin\@totalleftmargin
+ \fi
+ \advance\leftmargin\FV@XLeftMargin\relax
+ \advance\rightmargin\FV@XRightMargin\relax
+ \linewidth\hsize
+ \advance\linewidth-\leftmargin
+ \advance\linewidth-\rightmargin
+ \hfuzz\FancyVerbHFuzz\relax}
+\def\FV@ListProcessLine#1{%
+ \hbox to \hsize{%
+ \kern\leftmargin
+ \hbox to \linewidth{%
+ \FV@LeftListNumber
+ \FV@LeftListFrame
+ \FancyVerbFormatLine{#1}\hss
+%% DG/SR modification begin - Jan. 28, 1998 (for numbers=right add-on)
+%% \FV@RightListFrame}%
+ \FV@RightListFrame
+ \FV@RightListNumber}%
+%% DG/SR modification end
+ \hss}}
+\def\FV@ListProcessLine@i#1{%
+ \hbox{%
+ \ifvoid\@labels\else
+ \hbox to \z@{\kern\@totalleftmargin\box\@labels\hss}%
+ \fi
+ \FV@ListProcessLine{#1}}%
+ \let\FV@ProcessLine\FV@ListProcessLine@ii}
+\def\FV@ListProcessLine@ii#1{%
+ \setbox\@tempboxa=\FV@ListProcessLine{#1}%
+ \let\FV@ProcessLine\FV@ListProcessLine@iii}
+\def\FV@ListProcessLine@iii#1{%
+ {\advance\interlinepenalty\clubpenalty\penalty\interlinepenalty}%
+ \box\@tempboxa
+ \setbox\@tempboxa=\FV@ListProcessLine{#1}%
+ \let\FV@ProcessLine\FV@ListProcessLine@iv}
+\def\FV@ListProcessLine@iv#1{%
+ \penalty\interlinepenalty
+ \box\@tempboxa
+ \setbox\@tempboxa=\FV@ListProcessLine{#1}}%
+\def\FV@EndList{%
+ \FV@ListProcessLastLine
+ \FV@EndListFrame
+ \@endparenv
+ \endgroup
+ \@endpetrue}
+\def\FV@ListProcessLastLine{%
+ \ifx\FV@ProcessLine\FV@ListProcessLine@iv
+ {\advance\interlinepenalty\widowpenalty\penalty\interlinepenalty}%
+ \box\@tempboxa
+ \else
+ \ifx\FV@ProcessLine\FV@ListProcessLine@iii
+ {\advance\interlinepenalty\widowpenalty
+ \advance\interlinepenalty\clubpenalty
+ \penalty\interlinepenalty}%
+ \box\@tempboxa
+ \else
+ \ifx\FV@ProcessLine\FV@ListProcessLine@i
+ \FV@Error{Empty verbatim environment}{}%
+ \FV@ProcessLine{}%
+ \fi
+ \fi
+ \fi}
+\def\FV@VerbatimBegin{\FV@List\z@}
+\def\FV@VerbatimEnd{\FV@EndList}
+\def\FVB@Verbatim{\FV@VerbatimBegin\FV@Scan}
+\def\FVE@Verbatim{\FV@VerbatimEnd}
+\DefineVerbatimEnvironment{Verbatim}{Verbatim}{}
+\def\FV@UseVerbatim#1{%
+ \FV@VerbatimBegin#1\FV@VerbatimEnd
+ \@doendpe\global\@ignorefalse\ignorespaces}
+\def\VerbatimInput{\FV@Command{}{VerbatimInput}}
+\def\FVC@VerbatimInput#1{\FV@UseVerbatim{\FV@Input{#1}}}
+\def\FV@LVerbatimBegin{\FV@List\@ne}
+\def\FV@LVerbatimEnd{\FV@EndList}
+\def\FVB@LVerbatim{\FV@LVerbatimBegin\FV@Scan}
+\def\FVE@LVerbatim{\FV@LVerbatimEnd}
+\DefineVerbatimEnvironment{LVerbatim}{LVerbatim}{}
+\def\FV@LUseVerbatim#1{%
+ \FV@LVerbatimBegin#1\FV@LVerbatimEnd
+ \@doendpe\global\@ignorefalse\ignorespaces}
+\def\LVerbatimInput{\FV@Command{}{LVerbatimInput}}
+\def\FVC@LVerbatimInput#1{\FV@LUseVerbatim{\FV@Input{#1}}}
+\def\FV@Frame@none{%
+ \let\FV@BeginListFrame\relax
+ \let\FV@LeftListFrame\relax
+ \let\FV@RightListFrame\relax
+ \let\FV@EndListFrame\relax}
+\def\FV@Frame@single{%
+ \let\FV@BeginListFrame\FV@BeginListFrame@Single
+ \let\FV@LeftListFrame\FV@LeftListFrame@Single
+ \let\FV@RightListFrame\FV@RightListFrame@Single
+ \let\FV@EndListFrame\FV@EndListFrame@Single}
+\def\FV@Frame@lines{%
+ \let\FV@BeginListFrame\FV@BeginListFrame@Lines
+ \let\FV@LeftListFrame\relax
+ \let\FV@RightListFrame\relax
+ \let\FV@EndListFrame\FV@EndListFrame@Lines}
+\def\FV@Frame@topline{%
+ \let\FV@BeginListFrame\FV@BeginListFrame@Lines
+ \let\FV@LeftListFrame\relax
+ \let\FV@RightListFrame\relax
+ \let\FV@EndListFrame\relax}
+\def\FV@Frame@bottomline{%
+ \let\FV@BeginListFrame\relax
+ \let\FV@LeftListFrame\relax
+ \let\FV@RightListFrame\relax
+ \let\FV@EndListFrame\FV@EndListFrame@Lines}
+%% To define a frame with only a left line
+\def\FV@Frame@leftline{%
+ % To define the \FV@FrameFillLine macro (from \FV@BeginListFrame)
+ \ifx\FancyVerbFillColor\relax
+ \let\FV@FrameFillLine\relax
+ \else
+ \@tempdima\FV@FrameRule\relax
+ \multiply\@tempdima-\tw@
+ \edef\FV@FrameFillLine{%
+ {\noexpand\FancyVerbFillColor{\vrule\@width\number\@tempdima sp}%
+ \kern-\number\@tempdima sp}}%
+ \fi
+ \let\FV@BeginListFrame\relax
+ \let\FV@LeftListFrame\FV@LeftListFrame@Single
+ \let\FV@RightListFrame\relax
+ \let\FV@EndListFrame\relax}
+\def\FV@BeginListFrame@Single{%
+ \lineskip\z@
+ \baselineskip\z@
+ \ifx\FancyVerbFillColor\relax
+ \let\FV@FrameFillLine\relax
+ \else
+ \@tempdima\FV@FrameRule\relax
+ \multiply\@tempdima-\tw@
+ \edef\FV@FrameFillLine{%
+ {\noexpand\FancyVerbFillColor{\vrule\@width\number\@tempdima sp}%
+ \kern-\number\@tempdima sp}}%
+ \fi
+%% DG/SR modification begin - May. 19, 1998
+%% \FV@SingleFrameLine
+ \FV@SingleFrameLine{\z@}%
+%% DG/SR modification end
+ \penalty\@M
+ \FV@SingleFrameSep
+ \penalty\@M}
+%% DG/SR modification begin - May. 19, 1998
+\define@key{FV}{label}{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\FV@None
+ \let\FV@LabelBegin\relax
+ \let\FV@LabelEnd\relax
+ \else
+ \FV@Label@i#1\@nil%
+ \fi}
+\def\FV@Label@i{\@ifnextchar[{\FV@Label@ii}{\FV@Label@ii[]}}
+\def\FV@Label@ii[#1]#2\@nil{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\empty
+ \def\FV@LabelBegin{#2}%
+ \else
+ \def\FV@LabelBegin{#1}%
+ \def\FV@LabelPositionBottomLine{\@ne}%
+ \fi
+ \def\FV@LabelEnd{#2}}
+\fvset{label=none}
+\define@key{FV}{labelposition}[none]{%
+ \@ifundefined{FV@LabelPosition@#1}%
+ {\FV@Error{Label position `#1' not defined.}\FV@eha}%
+ {\@nameuse{FV@LabelPosition@#1}}}
+\def\FV@LabelPosition@none{%
+ \let\FV@LabelPositionTopLine\relax%
+ \let\FV@LabelPositionBottomLine\relax}
+\def\FV@LabelPosition@topline{%
+ \def\FV@LabelPositionTopLine{\@ne}%
+ \let\FV@LabelPositionBottomLine\relax}
+\def\FV@LabelPosition@bottomline{%
+ \let\FV@LabelPositionTopLine\relax%
+ \def\FV@LabelPositionBottomLine{\@ne}}
+\def\FV@LabelPosition@all{%
+ \def\FV@LabelPositionTopLine{\@ne}%
+ \def\FV@LabelPositionBottomLine{\@ne}}
+\fvset{labelposition=topline}
+%% DG/SR modification end
+%% DG/SR modification begin - May. 19, 1998
+%% \def\FV@SingleFrameLine{%
+\def\FV@SingleFrameLine#1{%
+%% DG/SR modification end
+ \hbox to\z@{%
+ \kern\leftmargin
+%% DG/SR modification begin - Jun. 22, 1998
+ \ifnum#1=\z@
+ \let\FV@Label\FV@LabelBegin
+ \else
+ \let\FV@Label\FV@LabelEnd
+ \fi
+ \ifx\FV@Label\relax
+%% DG/SR modification end
+ \FancyVerbRuleColor{\vrule \@width\linewidth \@height\FV@FrameRule}%
+%% DG/SR modification begin - Jun. 22, 1998
+ \else
+ \ifnum#1=\z@
+ \setbox\z@\hbox{\strut\enspace\FV@LabelBegin\enspace\strut}%
+ \else
+ \setbox\z@\hbox{\strut\enspace\FV@LabelEnd\enspace\strut}%
+ \fi
+ \@tempdimb=\dp\z@
+ \advance\@tempdimb -.5\ht\z@
+ \@tempdimc=\linewidth
+ \advance\@tempdimc -\wd\z@
+ \divide\@tempdimc\tw@
+ \ifnum#1=\z@ % Top line
+ \ifx\FV@LabelPositionTopLine\relax
+ \FancyVerbRuleColor{\vrule \@width\linewidth \@height\FV@FrameRule}%
+ \else
+ \FV@FrameLineWithLabel
+ \fi
+ \else % Bottom line
+ \ifx\FV@LabelPositionBottomLine\relax
+ \FancyVerbRuleColor{\vrule \@width\linewidth \@height\FV@FrameRule}%
+ \else
+ \FV@FrameLineWithLabel
+ \fi
+ \fi
+ \fi
+%% DG/SR modification end
+ \hss}}
+%% DG/SR modification begin - May. 19, 1998
+\def\FV@FrameLineWithLabel{%
+ \ht\z@\@tempdimb\dp\z@\@tempdimb%
+ \FancyVerbRuleColor{%
+ \vrule \@width\@tempdimc \@height\FV@FrameRule
+ \raise\@tempdimb\box\z@
+ \vrule \@width\@tempdimc \@height\FV@FrameRule}}
+%% DG/SR modification end
+\def\FV@BeginListFrame@Lines{%
+ \begingroup
+ \lineskip\z@skip
+%% DG modification begin - June 18, 1997 (effect of \baselineskip too earlier)
+%% \baselineskip\z@skip
+%% \FV@SingleFrameLine
+%% DG/SR modification begin - May. 19, 1998
+%% \FV@SingleFrameLine
+ \FV@SingleFrameLine{\z@}%
+%% DG/SR modification end
+ \kern-0.5\baselineskip\relax
+ \baselineskip\z@skip
+%% DG modification end
+ \kern\FV@FrameSep\relax
+ \endgroup}%
+\def\FV@EndListFrame@Lines{%
+ \begingroup
+ \baselineskip\z@skip
+ \kern\FV@FrameSep\relax
+ \FV@SingleFrameLine{\@ne}%
+ \endgroup}
+\def\FV@SingleFrameSep{%
+ \hbox to \z@{%
+ \kern\leftmargin
+ \hbox to\linewidth{%
+ \FancyVerbRuleColor{%
+ \ifx\FancyVerbFillColor\relax
+ \vrule\@width 0pt\@height\FV@FrameSep\relax
+ \fi
+ \vrule\@width\FV@FrameRule\relax
+ \ifx\FancyVerbFillColor\relax
+ \hfil
+ \else
+ {\FancyVerbFillColor\leaders\hrule\@height\FV@FrameSep\hfil}%
+ \fi
+ \ifx\FancyVerbFillColor\relax
+ \vrule\@width 0pt\@height\FV@FrameSep\relax
+ \fi
+ \vrule\@width\FV@FrameRule\relax}}%
+ \hss}}
+\def\FV@LeftListFrame@Single{%
+ \strut
+ {\FancyVerbRuleColor{\vrule \@width\FV@FrameRule}}%
+ \FV@FrameFillLine
+ \ifx\FancyVerbFillColor\relax
+ \kern\FV@FrameSep
+ \else
+ {\noexpand\leavevmode\FancyVerbFillColor{\vrule\@width\FV@FrameSep}}%
+ \fi}
+\def\FV@RightListFrame@Single{%
+ \ifx\FancyVerbFillColor\relax
+ \kern\FV@FrameSep
+ \else
+ {\noexpand\leavevmode\FancyVerbFillColor{\vrule\@width\FV@FrameSep}}%
+ \fi
+ {\noexpand\leavevmode\FancyVerbRuleColor{\vrule\@width\FV@FrameRule}}}
+\def\FV@EndListFrame@Single{%
+ \penalty\@M
+ \FV@SingleFrameSep
+ \penalty\@M
+ \FV@SingleFrameLine{\@ne}}
+\define@key{FV}{framerule}{%
+ \@tempdima=#1\relax
+ \edef\FV@FrameRule{\number\@tempdima sp\relax}}
+\def\KV@FV@framerule@default{\let\FV@FrameRule\fboxrule}
+\define@key{FV}{framesep}{%
+ \@tempdima=#1\relax
+ \edef\FV@FrameSep{\number\@tempdima sp\relax}}
+\def\KV@FV@framesep@default{\let\FV@FrameSep\fboxsep}
+\fvset{framerule,framesep}
+\define@key{FV}{rulecolor}{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\FV@None
+ \let\FancyVerbRuleColor\relax
+ \else
+ \let\FancyVerbRuleColor\@tempa
+ \fi}
+\define@key{FV}{fillcolor}{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\FV@None
+ \let\FancyVerbFillColor\relax
+ \else
+ \let\FancyVerbFillColor\@tempa
+ \fi}
+\fvset{rulecolor=none,fillcolor=none}
+\def\FV@Frame@double{%
+ \let\FV@FrameBegin\FV@FrameBegin@double
+ \let\FV@FrameLine\FV@FrameLine@double
+ \let\FV@FrameEnd\FV@FrameEnd@double}
+\define@key{FV}{frame}[none]{%
+ \@ifundefined{FV@Frame@#1}%
+ {\FV@Error{Frame style `#1' not defined.}\FV@eha}%
+ {\@nameuse{FV@Frame@#1}}}
+\fvset{frame=none}
+\newcounter{FancyVerbLine}
+\define@key{FV}{firstnumber}[auto]{%
+ \def\@tempa{#1}\def\@tempb{auto}%
+ \ifx\@tempa\@tempb
+ \def\FV@SetLineNo{%
+ \c@FancyVerbLine\FV@CodeLineNo%
+ \advance\c@FancyVerbLine\m@ne}%
+ \else%
+ \def\@tempb{last}%
+ \ifx\@tempa\@tempb
+ \let\FV@SetLineNo\relax%
+ \else%
+ \def\FV@SetLineNo{%
+ \c@FancyVerbLine#1%
+ \advance\c@FancyVerbLine\m@ne}%
+ \fi%
+ \fi}
+\define@booleankey{FV}{numberblanklines}%
+ {\let\if@FV@NumberBlankLines\iftrue}
+ {\let\if@FV@NumberBlankLines\iffalse}
+\fvset{numberblanklines=true}
+\def\FV@refstepcounter#1{%
+ \stepcounter{#1}%
+ \protected@edef\@currentlabel{\csname p@#1\endcsname\arabic{FancyVerbLine}}%
+}
+\def\FV@StepLineNo{%
+ \FV@SetLineNo%
+ \def\FV@StepLineNo{%
+ \if@FV@NumberBlankLines%
+ \FV@refstepcounter{FancyVerbLine}%
+ \else%
+ \ifx\FV@Line\empty%
+ \else%
+ \FV@refstepcounter{FancyVerbLine}%
+ \fi%
+ \fi}%
+ \FV@StepLineNo}
+\def\theFancyVerbLine{\rmfamily\tiny\arabic{FancyVerbLine}}
+\define@key{FV}{numbers}[none]{%
+ \@ifundefined{FV@Numbers@#1}%
+ {\FV@Error{Numbers style `#1' not defined.}\FV@eha}%
+ {\@nameuse{FV@Numbers@#1}}}
+\def\FV@Numbers@none{%
+\let\FV@LeftListNumber\relax
+\let\FV@RightListNumber\relax}
+\newcount\FV@StepNumber
+\define@key{FV}{stepnumber}{\FV@StepNumber#1}
+\def\KV@FV@stepnumber@default{\FV@StepNumber\@ne}
+\fvset{stepnumber}
+\def\FV@Numbers@left{%
+ \let\FV@RightListNumber\relax
+ \def\FV@LeftListNumber{%
+ \@tempcnta=\FV@CodeLineNo
+ \@tempcntb=\FV@CodeLineNo
+ \divide\@tempcntb\FV@StepNumber
+ \multiply\@tempcntb\FV@StepNumber
+ \ifnum\@tempcnta=\@tempcntb
+ \if@FV@NumberBlankLines
+ \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
+ \else
+ \ifx\FV@Line\empty
+ \else
+ \hbox to\z@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
+ \fi
+ \fi
+ \fi}}
+\def\FV@Numbers@right{%
+ \let\FV@LeftListNumber\relax
+ \def\FV@RightListNumber{%
+ \@tempcnta=\FV@CodeLineNo
+ \@tempcntb=\FV@CodeLineNo
+ \divide\@tempcntb\FV@StepNumber
+ \multiply\@tempcntb\FV@StepNumber
+ \ifnum\@tempcnta=\@tempcntb
+%% DG/SR modification begin - Apr. 28, 1998
+%% \hbox to \z@{\kern\FV@NumberSep\theFancyVerbLine\hss}%
+ \if@FV@NumberBlankLines
+ \hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}%
+ \else
+ \ifx\FV@Line\empty
+ \else
+ \hbox to\z@{\kern\FV@NumberSep\theFancyVerbLine\hss}%
+ \fi
+ \fi
+%% DG/SR modification end
+ \fi}}
+%% DG modification end
+\define@key{FV}{numbersep}{%
+ \@tempdima=#1\relax
+ \edef\FV@NumberSep{\number\@tempdima sp\relax}}
+\fvset{numbers=none,numbersep=12pt,firstnumber=auto}
+\def\FV@BVerbatimBegin{%
+ \begingroup
+ \FV@UseKeyValues
+ \FV@BeginVBox
+ \let\FV@ProcessLine\FV@BProcessLine
+ \FV@FormattingPrep
+ \FV@ObeyTabsInit}%
+\def\FV@BVerbatimEnd{\FV@EndVBox\endgroup}
+\def\FV@BeginVBox{%
+ \leavevmode
+ \hbox\ifx\FV@boxwidth\relax\else to\FV@boxwidth\fi\bgroup
+ \ifcase\FV@baseline\vbox\or\vtop\or$\vcenter\fi\bgroup}
+\def\FV@EndVBox{\egroup\ifmmode$\fi\hfil\egroup}
+\define@key{FV}{boxwidth}{%
+ \def\@tempa{#1}\def\@tempb{auto}%
+ \ifx\@tempa\@tempb
+ \let\FV@boxwidth\relax
+ \else
+ \@tempdima=#1\relax
+ \edef\FV@boxwidth{\number\@tempdima sp}%
+ \fi}
+\def\KV@FV@boxwidth@default{\let\FV@boxwidth\relax}
+\define@key{FV}{baseline}{%
+ \if t#1\@empty\let\FV@baseline\@ne\else
+ \if c#1\@empty\let\FV@baseline\tw@\else\let\FV@baseline\z@\fi
+ \fi}
+\fvset{baseline=b,boxwidth}
+\def\FV@BProcessLine#1{\hbox{\FancyVerbFormatLine{#1}}}
+\def\FVB@BVerbatim{\FV@BVerbatimBegin\FV@Scan}
+\def\FVE@BVerbatim{\FV@BVerbatimEnd}
+\DefineVerbatimEnvironment{BVerbatim}{BVerbatim}{}
+\def\FV@BUseVerbatim#1{\FV@BVerbatimBegin#1\FV@BVerbatimEnd}
+\def\BVerbatimInput{\FV@Command{}{BVerbatimInput}}
+\def\FVC@BVerbatimInput#1{\FV@BUseVerbatim{\FV@Input{#1}}}
+\def\SaveVerbatim{\FV@Environment{}{SaveVerbatim}}
+\def\FVB@SaveVerbatim#1{%
+ \@bsphack
+ \begingroup
+ \FV@UseKeyValues
+%% \FV@BeginVBox
+%% \let\FV@ProcessLine\FV@BProcessLine
+%% \FV@FormattingPrep
+%% \FV@ObeyTabsInit%
+%%
+ \def\SaveVerbatim@Name{#1}%
+ \gdef\FV@TheVerbatim{}%
+ \def\FV@ProcessLine##1{%
+ \expandafter\gdef\expandafter\FV@TheVerbatim\expandafter{%
+ \FV@TheVerbatim\FV@ProcessLine{##1}}}%
+ \gdef\FV@TheVerbatim{}%
+ \FV@Scan}
+\def\FVE@SaveVerbatim{%
+ \expandafter\global\expandafter\let
+ \csname FV@SV@\SaveVerbatim@Name\endcsname\FV@TheVerbatim
+%% \expandafter\gdef
+%% \csname FV@SV@\SaveVerbatim@Name\endcsname{\FV@TheVerbatim}
+%% \FV@EndVBox
+%% \endgroup}
+ \endgroup\@esphack}
+\DefineVerbatimEnvironment{SaveVerbatim}{SaveVerbatim}{}
+\def\FV@CheckIfSaved#1#2{%
+ \@ifundefined{FV@SV@#1}%
+ {\FV@Error{No verbatim text has been saved under name `#1'}\FV@eha}%
+ {#2{\csname FV@SV@#1\endcsname}}}
+\def\UseVerbatim{\FV@Command{}{UseVerbatim}}
+\def\FVC@UseVerbatim#1{\FV@CheckIfSaved{#1}{\FV@UseVerbatim}}
+\def\LUseVerbatim{\FV@Command{}{LUseVerbatim}}
+\def\FVC@LUseVerbatim#1{\FV@CheckIfSaved{#1}{\FV@LUseVerbatim}}
+\def\BUseVerbatim{\FV@Command{}{BUseVerbatim}}
+\def\FVC@BUseVerbatim#1{\FV@CheckIfSaved{#1}{\FV@BUseVerbatim}}
+\newwrite\FV@OutFile
+\def\VerbatimOut{\FV@Environment{}{VerbatimOut}}
+\def\FVB@VerbatimOut#1{%
+ \@bsphack
+ \begingroup
+ \FV@UseKeyValues
+ \FV@DefineWhiteSpace
+ \def\FV@Space{\space}%
+ \FV@DefineTabOut
+ \def\FV@ProcessLine{\immediate\write\FV@OutFile}%
+ \immediate\openout\FV@OutFile #1\relax
+ \let\FV@FontScanPrep\relax
+%% DG/SR modification begin - May. 18, 1998 (to avoid problems with ligatures)
+ \let\@noligs\relax
+%% DG/SR modification end
+ \FV@Scan}
+\def\FVE@VerbatimOut{\immediate\closeout\FV@OutFile\endgroup\@esphack}
+\DefineVerbatimEnvironment{VerbatimOut}{VerbatimOut}{}
+\def\FV@DefineTabOut{%
+ \def\FV@Tab{}%
+ \@tempcnta=\FancyVerbTabSize\relax
+ \loop\ifnum\@tempcnta>\z@
+ \edef\FV@Tab{\FV@Tab\space}%
+ \advance\@tempcnta\m@ne
+ \repeat}
+\def\SaveVerb{\FV@Command{}{SaveVerb}}
+\begingroup
+\catcode`\^^M=\active%
+\gdef\FVC@SaveVerb#1#2{%
+ \@namedef{FV@SV@#1}{}%
+ \begingroup%
+ \FV@UseKeyValues%
+ \FV@CatCodes%
+ \outer\def^^M{\FV@EOL}%
+ \global\let\@tempg\FancyVerbAfterSave%
+ \catcode`#2=12%
+ \def\@tempa{\def\FancyVerbGetVerb####1####2}%
+ \expandafter\@tempa\string#2{\endgroup\@namedef{FV@SV@#1}{##2}\@tempg}%
+ \FancyVerbGetVerb\FV@EOL}%
+\endgroup
+\def\FV@EOL{%
+ \endgroup
+ \FV@Error%
+ {Could not find the end delimiter of a short verb command}%
+ {You probably just forget the end delimiter of a \string\Verb\space or
+ \string\SaveVerb^^J%
+ command, or you broke the literal text across input lines.^^J%
+ Hit <return> to procede.}}
+\define@key{FV}{aftersave}{\def\FancyVerbAfterSave{#1}}
+\fvset{aftersave=}
+\def\FV@UseVerb#1{\mbox{\FV@UseKeyValues\FV@FormattingPrep#1}}
+\DeclareRobustCommand\UseVerb{\FV@Command{}{UseVerb}}
+\def\FVC@UseVerb#1{%
+ \@ifundefined{FV@SV@#1}%
+ {\FV@Error{Short verbatim text never saved to name `#1'}\FV@eha}%
+ {\FV@UseVerb{\@nameuse{FV@SV@#1}}}}
+\def\Verb{\FV@Command{}{Verb}}
+\begingroup
+\catcode`\^^M=\active%
+\gdef\FVC@Verb#1{%
+ \begingroup%
+ \FV@UseKeyValues%
+ \FV@FormattingPrep%
+ \FV@CatCodes%
+ \outer\def^^M{}%
+ \catcode`#1=12%
+ \def\@tempa{\def\FancyVerbGetVerb####1####2}%
+ \expandafter\@tempa\string#1{\mbox{##2}\endgroup}%
+ \FancyVerbGetVerb\FV@EOL}%
+\endgroup
+\def\DefineShortVerb{\FV@Command{}{DefineShortVerb}}
+\def\FVC@DefineShortVerb#1{%
+ \@ifundefined{FV@CC@\string#1}%
+ {\FVC@@DefineShortVerb#1}%
+ {\FV@Error{`\expandafter\@gobble\string#1' is already a short
+ verb character.}\FV@eha}}
+\def\FVC@@DefineShortVerb#1{%
+ \begingroup
+ \lccode`\~=`#1%
+ \lowercase{\gdef\@tempg{\edef~}\global\let\@temph~}%
+ \endgroup
+ \expandafter\let\csname FV@AC@\string#1\endcsname\@temph
+ \expandafter\edef\csname FV@CC@\string#1\endcsname{\the\catcode`#1}%
+ \expandafter\let\csname FV@KV@\string#1\endcsname\FV@KeyValues
+ \@tempg{%
+ \let\noexpand\FV@KeyValues\expandafter\noexpand
+ \csname FV@KV@\string#1\endcsname
+ \noexpand\FVC@Verb\expandafter\@gobble\string#1}%
+ \expandafter\def\expandafter\dospecials\expandafter{\dospecials\do#1}%
+ \expandafter\def\expandafter\@sanitize\expandafter{\@sanitize\@makeother#1}%
+ \catcode`#1=\active}%
+\def\UndefineShortVerb#1{%
+ \@ifundefined{FV@CC@\string#1}%
+ {\FV@Error{`\expandafter\@gobble\string#1' is not a short
+ verb character}\FV@eha}%
+ {\FV@UndefineShortVerb#1}}
+\def\FV@UndefineShortVerb#1{%
+ \catcode`#1=\csname FV@CC@\string#1\endcsname
+%% DG/SR modification begin - Jun. 12, 1998
+ \expandafter\let\csname FV@CC@\string#1\endcsname\relax
+%% DG/SR modification end
+ \begingroup
+ \lccode`\~=`#1%
+ \lowercase{\gdef\@tempg{\let~}}%
+ \endgroup
+ \expandafter\@tempg\csname FV@AC@\string#1\endcsname
+ \def\@tempa##1\do#1##2\@nil##3\@nil##4\@@nil{##3\def\dospecials{##1##2}\fi}%
+ \expandafter\@tempa\dospecials\@nil\iftrue\@nil\do#1\@nil\iffalse\@nil\@@nil
+ \def\@tempa##1\@makeother#1##2\@nil##3\@nil##4\@@nil{%
+ ##3\def\@sanitize{##1##2}\fi}%
+ \expandafter\@tempa\@sanitize\@nil\iftrue\@nil\do#1\@nil\iffalse\@nil\@@nil}
+\def\SaveMVerb{\FV@Command{}{SaveMVerb}}
+\begingroup
+\catcode`\^^M=\active%
+\gdef\FVC@SaveMVerb#1#2{%
+ \@ifundefined{FV@SVM@#1}{}%
+ {\FV@Error{Moving verbatim name `#1' already used}%
+ {I will overwrite the old definition. Hit <return> to continue.}}%
+ \global\@namedef{FV@SVM@#1}{}%
+ \begingroup%
+ \let\FV@SavedKeyValues\FV@KeyValues%
+ \FV@UseKeyValues%
+ \FV@CatCodes%
+ \outer\def^^M{}%
+ \global\let\@tempg\FancyVerbAfterSave%
+ \catcode`#2=12%
+ \def\@tempa{\def\FancyVerbGetVerb####1####2}%
+ \expandafter\@tempa\string#2{%
+ \if@filesw
+ \FV@DefineWhiteSpace%
+ \let\FV@Space\space%
+ \let\FV@Tab\space%
+ \FV@MakeUnActive%
+ \let\protect\string
+ \immediate\write\@auxout{%
+ \noexpand\SaveGVerb[\FV@SavedKeyValues]{#1}\string#2##2\string#2}%
+ \fi
+ \endgroup%
+ \@namedef{FV@SV@#1}{##2}%
+ \@tempg}%
+ \FancyVerbGetVerb\FV@EOL}%
+\endgroup
+\def\SaveGVerb{\FV@Command{}{SaveGVerb}}
+\begingroup
+\catcode`\^^M=\active%
+\gdef\FVC@SaveGVerb#1#2{%
+ \global\@namedef{FV@SVG@#1}{}%
+ \begingroup%
+ \FV@UseKeyValues%
+ \FV@CatCodes%
+ \outer\def^^M{}%
+ \catcode`#2=12%
+ \def\@tempa{\def\FancyVerbGetVerb####1####2}%
+ \expandafter\@tempa\string#2{\endgroup\global\@namedef{FV@SVG@#1}{##2}}%
+ \FancyVerbGetVerb\FV@EOL}%
+\endgroup
+\def\UseMVerb{\protect\pUseMVerb}
+\def\pUseMVerb{\FV@Command{}{pUseMVerb}}
+\def\FVC@pUseMVerb#1{%
+ \expandafter\ifx \csname FV@SVM@#1\endcsname\relax
+ \expandafter\ifx \csname FV@SVG@#1\endcsname\relax
+ \@warning{Moving verbatim text not defined for name `#1'}\FV@eha
+ {\bf ??}%
+ \else
+ \FV@UseVerb{\@nameuse{FV@SVG@#1}}%
+ \fi
+ \else
+ \FV@UseVerb{\@nameuse{FV@SVM@#1}}%
+ \fi}
+\expandafter\ifx\csname documentclass\endcsname\relax
+ \def\lrbox#1{%
+ \edef\@tempa{%
+ \endgroup
+ \setbox#1\hbox{%
+ \begingroup\aftergroup}%
+ \def\noexpand\@currenvir{\@currenvir}}%
+ %\def\noexpand\@currenvline{\on@line}}%
+ \@tempa
+ \@endpefalse
+ \bgroup
+ \ignorespaces}
+ \def\endlrbox{\unskip\egroup}
+\fi
+%
+%%
+\InputIfFileExists{fancyvrb.cfg}{}{}
+%%
+\endinput
+%%
+%% End of file `fancyvrb.sty'.
diff --git a/macros/latex/contrib/fancyvrb/latex/hbaw.sty b/macros/latex/contrib/fancyvrb/latex/hbaw.sty
new file mode 100644
index 0000000000..728f4fe345
--- /dev/null
+++ b/macros/latex/contrib/fancyvrb/latex/hbaw.sty
@@ -0,0 +1,161 @@
+%%
+%% This is file `hbaw.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fvrb-ex.dtx (with options: `hbaw')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from hbaw.sty.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file fvrb-ex.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+%%
+%% Package `fvrb-ex' (`fvrb-ex', `hbaw' and `hcolor')
+%%
+%% COPYING:
+%% The files of this package "fvrb-ex" are released under the Artistic
+%% License Version 2. A copy of that license is included in the file
+%% artistic2.txt inside the fancyvrb package. This package consists of
+%% the following files:
+%% README fvrb-ex.dtx fvrb-ex.ins
+%%
+%% Denis Girou (CNRS/IDRIS - France) <Denis.Girou@idris.fr>
+%% March 27, 1998
+%%
+%% Package `hbaw'
+%%
+\NeedsTeXFormat{LaTeX2e}
+\def\fileversion{1.4}
+\def\filedate{1998/03/19}
+\ProvidesPackage{hbaw}[\filedate]
+\message{`hbaw' v\fileversion, \filedate\space (Denis Girou)}
+\newcommand{\FvrbEx@ColoredBox}[3]{%
+\fboxsep=1pt\fcolorbox{#2}{#2}{\textcolor{#3}{\textbf{#1}}}}
+\def\Highlight@Attributes{%
+\def\HLa##1{\ifmmode\mathbf{##1}\else\textbf{##1}\fi}
+\def\HLb##1{\ifmmode\mathsl{##1}\else\textsl{##1}\fi}
+\def\HLc##1{##1}
+\def\HLd##1{##1}
+\def\HLe##1{\ifmmode\mathbf{##1}\else\textbf{##1}\fi}
+\def\HLf##1{##1}
+\def\HLq##1{##1}
+\def\HLr##1{##1}
+\def\HLz##1{##1}
+\def\HLBFa##1{\ifmmode\mathbf{##1}\else\textbf{##1}\fi}
+\def\HLBFb##1{\ifmmode\mathbf{##1}\else\textbf{##1}\fi}
+\def\HLBFc##1{\ifmmode\mathbf{##1}\else\textbf{##1}\fi}
+\def\HLBFd##1{\ifmmode\mathbf{##1}\else\textbf{##1}\fi}
+\def\HLBFe##1{\ifmmode\mathbf{##1}\else\textbf{##1}\fi}
+\def\HLBFf##1{\ifmmode\mathbf{##1}\else\textbf{##1}\fi}
+\def\HLBFz##1{\ifmmode\mathbf{##1}\else\textbf{##1}\fi}
+\def\HLITa##1{\ifmmode\mathnormal{##1}\else\textsl{##1}\fi}
+\def\HLITb##1{\ifmmode\mathnormal{##1}\else\textsl{##1}\fi}
+\def\HLITc##1{\ifmmode\mathnormal{##1}\else\textsl{##1}\fi}
+\def\HLITd##1{\ifmmode\mathnormal{##1}\else\textsl{##1}\fi}
+\def\HLITe##1{\ifmmode\mathnormal{##1}\else\textsl{##1}\fi}
+\def\HLITf##1{\ifmmode\mathnormal{##1}\else\textsl{##1}\fi}
+\def\HLITz##1{\ifmmode\mathnormal{##1}\else\textsl{##1}\fi}
+\def\HLSCa##1{\ifmmode\mathit{##1}\else\textsc{##1}\fi}
+\def\HLSCb##1{\ifmmode\mathit{##1}\else\textsc{##1}\fi}
+\def\HLSCc##1{\ifmmode\mathit{##1}\else\textsc{##1}\fi}
+\def\HLSCd##1{\ifmmode\mathit{##1}\else\textsc{##1}\fi}
+\def\HLSCe##1{\ifmmode\mathit{##1}\else\textsc{##1}\fi}
+\def\HLSCf##1{\ifmmode\mathit{##1}\else\textsc{##1}\fi}
+\def\HLSCz##1{\ifmmode\mathit{##1}\else\textsc{##1}\fi}
+\def\HLTTa##1{\ifmmode\mathtt{##1}\else\texttt{##1}\fi}
+\def\HLTTb##1{\ifmmode\mathtt{##1}\else\texttt{##1}\fi}
+\def\HLTTc##1{\ifmmode\mathtt{##1}\else\texttt{##1}\fi}
+\def\HLTTd##1{\ifmmode\mathtt{##1}\else\texttt{##1}\fi}
+\def\HLTTe##1{\ifmmode\mathtt{##1}\else\texttt{##1}\fi}
+\def\HLTTf##1{\ifmmode\mathtt{##1}\else\texttt{##1}\fi}
+\def\HLTTq##1{\ifmmode\mathtt{##1}\else\texttt{##1}\fi}
+\def\HLTTr##1{\ifmmode\mathtt{##1}\else\texttt{##1}\fi}
+\def\HLTTz##1{\ifmmode\mathtt{##1}\else\texttt{##1}\fi}
+\def\HLITTTa##1{\ifmmode\mathtt{##1}\else\textsl{\texttt{##1}}\fi}
+\def\HLITTTb##1{\ifmmode\mathtt{##1}\else\textsl{\texttt{##1}}\fi}
+\def\HLITTTc##1{\ifmmode\mathtt{##1}\else\textsl{\texttt{##1}}\fi}
+\def\HLITTTd##1{\ifmmode\mathtt{##1}\else\textsl{\texttt{##1}}\fi}
+\def\HLITTTe##1{\ifmmode\mathtt{##1}\else\textsl{\texttt{##1}}\fi}
+\def\HLITTTf##1{\ifmmode\mathtt{##1}\else\textsl{\texttt{##1}}\fi}
+\def\HLITTTz##1{\ifmmode\mathtt{##1}\else\textsl{\texttt{##1}}\fi}
+\def\HLCBBa##1{\FvrbEx@ColoredBox{##1}{blue}{black}}
+\def\HLCBBb##1{\FvrbEx@ColoredBox{##1}{cyan}{black}}
+\def\HLCBBc##1{\FvrbEx@ColoredBox{##1}{green}{black}}
+\def\HLCBBd##1{\FvrbEx@ColoredBox{##1}{magenta}{black}}
+\def\HLCBBe##1{\FvrbEx@ColoredBox{##1}{red}{black}}
+\def\HLCBBf##1{\FvrbEx@ColoredBox{##1}{yellow}{black}}
+\def\HLCBBz##1{\FvrbEx@ColoredBox{##1}{black}{black}}
+\def\HLCBWa##1{\FvrbEx@ColoredBox{##1}{blue}{white}}
+\def\HLCBWb##1{\FvrbEx@ColoredBox{##1}{green}{white}}
+\def\HLCBWc##1{\FvrbEx@ColoredBox{##1}{green}{white}}
+\def\HLCBWd##1{\FvrbEx@ColoredBox{##1}{magenta}{white}}
+\def\HLCBWe##1{\FvrbEx@ColoredBox{##1}{red}{white}}
+\def\HLCBWf##1{\FvrbEx@ColoredBox{##1}{green}{white}}
+\def\HLCBWz##1{\FvrbEx@ColoredBox{##1}{black}{white}}
+\def\HLSa##1{\underline{##1}}
+\def\HLSb##1{\underline{##1}}
+\def\HLSc##1{\underline{##1}}
+\def\HLSd##1{\underline{##1}}
+\def\HLSe##1{\underline{##1}}
+\def\HLSf##1{\underline{##1}}
+\def\HLSz##1{\underline{##1}}
+\def\HLSaa##1{\underline{##1}}
+\def\HLSbb##1{\underline{##1}}
+\def\HLScc##1{\underline{##1}}
+\def\HLSdd##1{\underline{##1}}
+\def\HLSee##1{\underline{##1}}
+\def\HLSef##1{\underline{##1}}
+\def\HLSez##1{\underline{##1}}
+}
+\def\NoHighlight@Attributes{%
+\catcode`\^^a7=0\relax%
+\catcode`\^^b5=1\relax%
+\catcode`\^^b6=2\relax%
+\def\HLa##1{##1}%
+\def\HLb##1{##1}%
+\def\HLc##1{##1}%
+\def\HLd##1{##1}%
+\def\HLe##1{##1}%
+\def\HLf##1{##1}%
+\def\HLBFa##1{##1}%
+\def\HLBFb##1{##1}%
+\def\HLBFc##1{##1}%
+\def\HLBFd##1{##1}%
+\def\HLBFe##1{##1}%
+\def\HLBFf##1{##1}%
+\def\HLITa##1{##1}%
+\def\HLITb##1{##1}%
+\def\HLITc##1{##1}%
+\def\HLITd##1{##1}%
+\def\HLITe##1{##1}%
+\def\HLITf##1{##1}%
+\def\HLCBBa##1{##1}%
+\def\HLCBBb##1{##1}%
+\def\HLCBBc##1{##1}%
+\def\HLCBBd##1{##1}%
+\def\HLCBBe##1{##1}%
+\def\HLCBBf##1{##1}%
+\def\HLCBBz##1{##1}%
+\def\HLCBWa##1{##1}%
+\def\HLCBWb##1{##1}%
+\def\HLCBWc##1{##1}%
+\def\HLCBWd##1{##1}%
+\def\HLCBWe##1{##1}%
+\def\HLCBWf##1{##1}%
+\def\HLCBWz##1{##1}%
+}
+\Highlight@Attributes
+\endinput
+%%
+%% End of file `hbaw.sty'.
diff --git a/macros/latex/contrib/fancyvrb/latex/hcolor.sty b/macros/latex/contrib/fancyvrb/latex/hcolor.sty
new file mode 100644
index 0000000000..64a29b5666
--- /dev/null
+++ b/macros/latex/contrib/fancyvrb/latex/hcolor.sty
@@ -0,0 +1,164 @@
+%%
+%% This is file `hcolor.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% fvrb-ex.dtx (with options: `hcolor')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from hcolor.sty.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file fvrb-ex.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+%%
+%% Package `fvrb-ex' (`fvrb-ex', `hbaw' and `hcolor')
+%%
+%% COPYING:
+%% The files of this package "fvrb-ex" are released under the Artistic
+%% License Version 2. A copy of that license is included in the file
+%% artistic2.txt inside the fancyvrb package. This package consists of
+%% the following files:
+%% README fvrb-ex.dtx fvrb-ex.ins
+%%
+%% Denis Girou (CNRS/IDRIS - France) <Denis.Girou@idris.fr>
+%% March 27, 1998
+%%
+%% Package `hcolor'
+%%
+\NeedsTeXFormat{LaTeX2e}
+\def\fileversion{1.4}
+\def\filedate{1998/03/19}
+\ProvidesPackage{hcolor}[\filedate]
+\message{`hcolor' v\fileversion, \filedate\space (Denis Girou)}
+\newcommand\FvrbEx@ColoredUnderline[3]{%
+ $\setbox\z@\hbox{\begingroup#3\endgroup}%
+ \dp\z@\z@\m@th\color{#1}\underline{\textcolor{#2}{\box\z@}}$}
+\renewcommand\FvrbEx@ColoredBox[3]{%
+ \fboxsep=1pt\fcolorbox{#2}{#2}{\textcolor{#3}{\textbf{#1}}}}
+%\catcode`\^^a7=0
+%\catcode`\^^b5=1
+%\catcode`\^^b6=2
+\def\Highlight@Attributes{%
+\def\HLa##1{\textcolor{blue}{##1}}
+\def\HLb##1{\textcolor{cyan}{##1}}
+\def\HLc##1{\textcolor{green}{##1}}
+\def\HLd##1{\textcolor{magenta}{##1}}
+\def\HLe##1{\textcolor{red}{##1}}
+\def\HLf##1{\textcolor{yellow}{##1}}
+\def\HLq##1{\textcolor{PaleGreen}{##1}}
+\def\HLr##1{\textcolor{SlateBlue}{##1}}
+\def\HLz##1{\textcolor{black}{##1}}
+\def\HLBFa##1{\textcolor{blue}{\textbf{##1}}}
+\def\HLBFb##1{\textcolor{cyan}{\textbf{##1}}}
+\def\HLBFc##1{\textcolor{green}{\textbf{##1}}}
+\def\HLBFd##1{\textcolor{magenta}{\textbf{##1}}}
+\def\HLBFe##1{\textcolor{red}{\textbf{##1}}}
+\def\HLBFf##1{\textcolor{yellow}{\textbf{##1}}}
+\def\HLBFz##1{\textcolor{black}{\textbf{##1}}}
+\def\HLITa##1{\textcolor{blue}{\textsl{##1}}}
+\def\HLITb##1{\textcolor{cyan}{\textsl{##1}}}
+\def\HLITc##1{\textcolor{green}{\textsl{##1}}}
+\def\HLITd##1{\textcolor{magenta}{\textsl{##1}}}
+\def\HLITe##1{\textcolor{red}{\textsl{##1}}}
+\def\HLITf##1{\textcolor{yellow}{\textsl{##1}}}
+\def\HLITz##1{\textcolor{black}{\textsl{##1}}}
+\def\HLSCa##1{\textcolor{blue}{\textsc{##1}}}
+\def\HLSCb##1{\textcolor{cyan}{\textsc{##1}}}
+\def\HLSCc##1{\textcolor{green}{\textsc{##1}}}
+\def\HLSCd##1{\textcolor{magenta}{\textsc{##1}}}
+\def\HLSCe##1{\textcolor{red}{\textsc{##1}}}
+\def\HLSCf##1{\textcolor{yellow}{\textsc{##1}}}
+\def\HLSCz##1{\textcolor{black}{\textsc{##1}}}
+\def\HLTTa##1{\textcolor{blue}{\texttt{##1}}}
+\def\HLTTb##1{\textcolor{cyan}{\texttt{##1}}}
+\def\HLTTc##1{\textcolor{green}{\texttt{##1}}}
+\def\HLTTd##1{\textcolor{magenta}{\texttt{##1}}}
+\def\HLTTe##1{\textcolor{red}{\texttt{##1}}}
+\def\HLTTf##1{\textcolor{yellow}{\texttt{##1}}}
+\def\HLTTq##1{\textcolor{ForestGreen}{\texttt{##1}}}
+\def\HLTTr##1{\textcolor{PineGreen}{\texttt{##1}}}
+\def\HLTTz##1{\textcolor{black}{\texttt{##1}}}
+\def\HLITTTa##1{\textcolor{blue}{\textsl{\texttt{##1}}}}
+\def\HLITTTb##1{\textcolor{cyan}{\textsl{\texttt{##1}}}}
+\def\HLITTTc##1{\textcolor{green}{\textsl{\texttt{##1}}}}
+\def\HLITTTd##1{\textcolor{magenta}{\textsl{\texttt{##1}}}}
+\def\HLITTTe##1{\textcolor{red}{\textsl{\texttt{##1}}}}
+\def\HLITTTf##1{\textcolor{yellow}{\textsl{\texttt{##1}}}}
+\def\HLITTTz##1{\textcolor{black}{\textsl{\texttt{##1}}}}
+\def\HLCBBa##1{\FvrbEx@ColoredBox{##1}{blue}{black}}
+\def\HLCBBb##1{\FvrbEx@ColoredBox{##1}{cyan}{black}}
+\def\HLCBBc##1{\FvrbEx@ColoredBox{##1}{green}{black}}
+\def\HLCBBd##1{\FvrbEx@ColoredBox{##1}{magenta}{black}}
+\def\HLCBBe##1{\FvrbEx@ColoredBox{##1}{red}{black}}
+\def\HLCBBf##1{\FvrbEx@ColoredBox{##1}{yellow}{black}}
+\def\HLCBBz##1{\FvrbEx@ColoredBox{##1}{black}{black}}
+\def\HLCBWa##1{\FvrbEx@ColoredBox{##1}{blue}{white}}
+\def\HLCBWb##1{\FvrbEx@ColoredBox{##1}{cyan}{white}}
+\def\HLCBWc##1{\FvrbEx@ColoredBox{##1}{green}{white}}
+\def\HLCBWd##1{\FvrbEx@ColoredBox{##1}{magenta}{white}}
+\def\HLCBWe##1{\FvrbEx@ColoredBox{##1}{red}{white}}
+\def\HLCBWf##1{\FvrbEx@ColoredBox{##1}{yellow}{white}}
+\def\HLCBWz##1{\FvrbEx@ColoredBox{##1}{black}{white}}
+\def\HLSa##1{\color{blue}\underline{##1}}
+\def\HLSb##1{\color{cyan}\underline{##1}}
+\def\HLSc##1{\color{green}\underline{##1}}
+\def\HLSd##1{\color{magenta}\underline{##1}}
+\def\HLSe##1{\color{red}\underline{##1}}
+\def\HLSf##1{\color{yellow}\underline{##1}}
+\def\HLSz##1{\color{black}\underline{##1}}
+\def\HLSaa##1{\FvrbEx@ColoredUnderline{blue}{black}{##1}}
+\def\HLSbb##1{\FvrbEx@ColoredUnderline{cyan}{black}{##1}}
+\def\HLScc##1{\FvrbEx@ColoredUnderline{green}{black}{##1}}
+\def\HLSdd##1{\FvrbEx@ColoredUnderline{magenta}{black}{##1}}
+\def\HLSee##1{\FvrbEx@ColoredUnderline{red}{black}{##1}}
+\def\HLSef##1{\FvrbEx@ColoredUnderline{yellow}{black}{##1}}
+\def\HLSez##1{\FvrbEx@ColoredUnderline{black}{black}{##1}}
+}
+\def\NoHighlight@Attributes{%
+\def\HLa##1{##1}%
+\def\HLb##1{##1}%
+\def\HLc##1{##1}%
+\def\HLd##1{##1}%
+\def\HLe##1{##1}%
+\def\HLf##1{##1}%
+\def\HLBFa##1{##1}%
+\def\HLBFb##1{##1}%
+\def\HLBFc##1{##1}%
+\def\HLBFd##1{##1}%
+\def\HLBFe##1{##1}%
+\def\HLBFf##1{##1}%
+\def\HLITa##1{##1}%
+\def\HLITb##1{##1}%
+\def\HLITc##1{##1}%
+\def\HLITd##1{##1}%
+\def\HLITe##1{##1}%
+\def\HLITf##1{##1}%
+\def\HLCBBa##1{##1}%
+\def\HLCBBb##1{##1}%
+\def\HLCBBc##1{##1}%
+\def\HLCBBd##1{##1}%
+\def\HLCBBe##1{##1}%
+\def\HLCBBf##1{##1}%
+\def\HLCBBz##1{##1}%
+\def\HLCBWa##1{##1}%
+\def\HLCBWb##1{##1}%
+\def\HLCBWc##1{##1}%
+\def\HLCBWd##1{##1}%
+\def\HLCBWe##1{##1}%
+\def\HLCBWf##1{##1}%
+\def\HLCBWz##1{##1}%
+}
+\Highlight@Attributes
+\endinput
+%%
+%% End of file `hcolor.sty'.