summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/fancyvrb
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-11 23:53:13 +0000
committerKarl Berry <karl@freefriends.org>2006-01-11 23:53:13 +0000
commit1b390e7c0060de46864273dd300d12affa5d9735 (patch)
tree07385aa5bf7cccb8b943820b8689295bdbdbae8d /Master/texmf-dist/source/latex/fancyvrb
parentf1ba088253f565d5cb2d934517f7c9af1a72c154 (diff)
trunk/Master/texmf-dist/source/latex/fancyvrb
git-svn-id: svn://tug.org/texlive/trunk@277 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/fancyvrb')
-rw-r--r--Master/texmf-dist/source/latex/fancyvrb/README.contrib57
-rw-r--r--Master/texmf-dist/source/latex/fancyvrb/fancyvrb.dtx4474
-rw-r--r--Master/texmf-dist/source/latex/fancyvrb/fancyvrb.ins35
-rw-r--r--Master/texmf-dist/source/latex/fancyvrb/fvrb-ex.dtx1564
-rw-r--r--Master/texmf-dist/source/latex/fancyvrb/fvrb-ex.ins41
5 files changed, 6171 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/fancyvrb/README.contrib b/Master/texmf-dist/source/latex/fancyvrb/README.contrib
new file mode 100644
index 00000000000..b3f2966f8c8
--- /dev/null
+++ b/Master/texmf-dist/source/latex/fancyvrb/README.contrib
@@ -0,0 +1,57 @@
+ -------------------------------------
+ | `fvrb-ex' |
+ | Version 1.7 |
+ | March 27, 1998 |
+ | |
+ | Denis Girou (CNRS/IDRIS - France) |
+ | <Denis.Girou@idris.fr> |
+ -------------------------------------
+
+
+ This package, built above the `fancyvrb' one (from Timothy van Zandt),
+offer several kinds of the so-called "example" environments to format some
+code both in "verbatim" mode and in the "normal" way, below or on the side.
+The advantage of such environments is that the code itself is included only
+one time in the source code, which allow to be sure of the consistence of the
+two versions shown.
+
+ Some other kinds of such environments are specially devoted to graphics,
+allowing to give the size of them. It is also possible in this case to draw
+also a grid.
+
+ Warning!
+ --------
+
+ * You must be aware that it has been reported that this package doesn't work
+at all on some platforms, due to the way the 8 bits characters are managed by
+some TeX systems.
+ You can make first the following test (courtesy Sebastian Rahtz):
+
+\documentclass{article}
+\usepackage{moreverb} % CTAN/macros/latex/contrib/supported/moreverb
+\begin{document}
+\begin{verbatimwrite}{test.txt}
+ £hello
+\end{verbatimwrite}
+\end{document}
+
+ If you got in the file "test.txt" not the exact input line but ^^a3 for
+the first character, this package has no change to really work for you...
+
+ Just try to position (courtesy Thomas Esser) LC_CTYPE=C if your system
+accept it and retry the preceding test.
+
+ * We suppose here that you already know the `fancyvrb' package. If not, look
+at it own documentation!
+
+ * The standard `color' package must be available, with a correct "color.cfg"
+file defining the dvi converter that must be used.
+
+ * Some environments, specially devoted to graphics, require PSTricks,
+but `fvrb-ex' desactivate them if PSTricks is not available so it can be used
+without it.
+
+.............................................................................
+
+ Comments, suggestions and bug reports (with version number and the
+keyword "fancyvrb" in the subject of the message) to <Denis.Girou@idris.fr>
diff --git a/Master/texmf-dist/source/latex/fancyvrb/fancyvrb.dtx b/Master/texmf-dist/source/latex/fancyvrb/fancyvrb.dtx
new file mode 100644
index 00000000000..a06cf159520
--- /dev/null
+++ b/Master/texmf-dist/source/latex/fancyvrb/fancyvrb.dtx
@@ -0,0 +1,4474 @@
+% \iffalse meta-comment, etc.
+%%
+%% Package `fancyvrb'
+%%
+%% COPYING:
+%% The files of this package "fancyvrb" are released under the Artistic
+%% License Version 2. A copy of that license is included in the file
+%% artistic2.txt. The package consists of the following files:
+%% README artistic2.txt fancyvrb.cb fancyvrb.dtx fancyvrb.ins
+%%
+%% Timothy Van Zandt <tvz@zandtwerk.kellogg.nwu.edu>
+%% July 17, 1998
+%%
+% \fi
+%
+% \changes{v2.6}{1998/07/17}{. Three bug corrected, options numberblanklines,
+% label, labelposition and leftline added and few
+% precisions.}
+% \changes{v2.5}{1998/01/28}{First public release.}
+% \changes{v2.0 Beta}{1994/03/30}{First version personally shown by Timothy
+% \textsc{van Zandt}.}
+%
+% \CheckSum{3107}
+%
+% \newif\ifPostScriptFonts
+% \IfFileExists{times.sty}{\PostScriptFontstrue}{}
+%
+% \DoNotIndex{\\,\^}
+% \DoNotIndex{\@@nil,\@M,\@MM,\@auxout,\@beginparpenalty,\@bsphack}
+% \DoNotIndex{\@currentlabel,\@currenvir,\@currenvline,\@currsize}
+% \DoNotIndex{\@defpar,\@doendpe,\@eha,\@empty,\@endparenv,\@endpefalse}
+% \DoNotIndex{\@endpetrue,\@esphack,\@fooA,\@fooB,\@footnotetext,\@gobble}
+% \DoNotIndex{\@height,\@ifnextchar,\@ifstar,\@ifundefined,\@ignorefalse}
+% \DoNotIndex{\@inlabelfalse}
+% \DoNotIndex{\@input,\@labels,\@listdepth,\@makefntext,\@makeother,}
+% \DoNotIndex{\@minipagefalse,\@namedef,\@nameuse,\@ne,\@newlistfalse,}
+% \DoNotIndex{\@nil,\@nobreakfalse,\@noparlistfalse,\@noparlisttrue}
+% \DoNotIndex{\@parboxrestore,\@sanitize,\@spaces,\@tempa,\@tempb,\@tempboxa}
+% \DoNotIndex{\@tempc,\@tempcnta,\@tempcntb,\@tempdima,\@tempdimb,\@tempdimc}
+% \DoNotIndex{\@tempg,\@temph,\@temptokena,\@thefnmark,\@toodeep}
+% \DoNotIndex{\@topsep,\@topsepadd,\@totalleftmargin,\@warning,\@width}
+% \DoNotIndex{\active,\addpenalty,\addvspace,\advance}
+% \DoNotIndex{\afterassignment,\aftergroup,\arabic}
+% \DoNotIndex{\baselineskip,\baselinestretch,\begin,\begingroup,\bf,\bgroup}
+% \DoNotIndex{\box,\c@FancyVerbLine,\catcode,\ChangeBartrue,\closein}
+% \DoNotIndex{\closeout,\clubpenalty,\CodelineIndex,\columnwidth,\cr,\csname}
+% \DoNotIndex{\date,\DeclareOption,\def,\define@booleankey,\define@key}
+% \DoNotIndex{\divide,\do,\do@noligs,\DocInput,\documentclass,\dp,\dospecials}
+% \DoNotIndex{\edef,\egroup,\else,\EnableCrossrefs,\end,\endcenter}
+% \DoNotIndex{\endcsname,\endgroup,\endinput,\endlrbox,\endpspicture}
+% \DoNotIndex{\enspace,\errhelp,\errmessage,\expandafter}
+% \DoNotIndex{\fancyvrb@loaded,\fboxrule,\fboxsep,\fi,\filedate,\fileversion}
+% \DoNotIndex{\floatingpenalty,\font,\fontdimen,\fontfamily,\fontseries}
+% \DoNotIndex{\fontshape,\footins,\footnote,\footnotesep,\footnotesize}
+% \DoNotIndex{\frenchspacing,\fvset}
+% \DoNotIndex{\gdef,\GetFileInfo,\global,\hbadness,\hbox,\hfil,\hfuzz}
+% \DoNotIndex{\hrule,\hsize,\hss,\ht,\iden,\if,\if@FV@ResetMargins,\if@filesw}
+% \DoNotIndex{\if@inlabel,\if@nobreak,\if@noparlist,\if@noskipsec,\ifcase}
+% \DoNotIndex{\ifChangeBar,\ifeof,\IfFileExists,\ifmmode,\iffalse,\ifnum}
+% \DoNotIndex{\iftrue,\ifvmode,\ifvoid,\ifx,\ignorespaces,\immediate,\input}
+% \DoNotIndex{\insert,\interfootnotelinepenalty,\interlinepenalty,\jobname}
+% \DoNotIndex{\kern,\large,\lccode,\leaders,\leavevmode,\leftmargin,\let}
+% \DoNotIndex{\lineskip,\linewidth,\long,\loop,\lowercase,\lrbox}
+% \DoNotIndex{\m@ne,\m@th,\maketitle,\mathbf,\mathit,\mathnormal}
+% \DoNotIndex{\mathsl,\mathtt,\mbox,\meaning,\message,\mid,\mskip}
+% \DoNotIndex{\multiply,\NeedsTeXFormat,\newbox,\newcommand,\newcount}
+% \DoNotIndex{\newcounter,\newenvironment,\newif,\newpsobject,\newread}
+% \DoNotIndex{\newwrite,\next,\noexpand,\normalsize,\number}
+% \DoNotIndex{\Oldmakeindex,\on@line,\OnlyDescription,\openin,\openout,\or}
+% \DoNotIndex{\outer,\pUseMVerb,\par,\parindent,\parskip,\partopsep}
+% \DoNotIndex{\penalty,\PrintChanges,\PrintIndex,\ProcessOptions,\protect}
+% \DoNotIndex{\protected@edef,\ProvidesPackage,\raise,\rangle,\read}
+% \DoNotIndex{\RecordChanges,\refstepcounter,\relax,\renewcommand}
+% \DoNotIndex{\renewenvironment,\repeat,\RequirePackage,\rightmargin,\rm}
+% \DoNotIndex{\rmfamily,\romannumeral,\rule}
+% \DoNotIndex{\scriptscriptstyle,\scriptstyle,\section,\selectfont,\setbox}
+% \DoNotIndex{\setcounter,\setkeys,\setlength,\small,\smallskip,\space}
+% \DoNotIndex{\splitmaxdepth,\splittopskip,\stepcounter,\string,\strip,\strut}
+% \DoNotIndex{\strutbox,\textbf,\textcolor,\textit,\textsc,\textsf,\textsl}
+% \DoNotIndex{\texttt,\textwidth,\the,\theFancyVerbLine,\tiny,\title,\topsep}
+% \DoNotIndex{\tt,\ttfamily,\ttyin,\tw@,\underline,\unhbox,\unitlength}
+% \DoNotIndex{\unskip,\usepackage,\valign,\vbox,\vcenter}
+% \DoNotIndex{\verbatim@nolig@list,\vfil,\voidb@x,\vrule,\vspace,\vskip}
+% \DoNotIndex{\vtop,\wd,\widowpenalty,\write,\xdef,\z@,\z@skip}
+%
+% \setcounter{IndexColumns}{2}
+%
+% \newcommand{\FBoxPackage}{`\textsf{fancybox}'}
+% \newcommand{\FVrbPackage}{`\textsf{fancyvrb}'}
+%
+% ^^A From ltugboat.cls
+%
+% ^^A 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 A list of options for a package/class
+% \newenvironment{optlist}{\begin{description}%
+% \renewcommand\makelabel[1]{%
+% \descriptionlabel{\mdseries\optname{##1}}}%
+% \itemsep0.25\itemsep}%
+% {\end{description}}
+%
+% ^^A Utility macros
+%
+% ^^A Special dashes
+% \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}
+%
+% ^^A Example macros - adapted from the `fvrb-ex' package
+% ^^A ---------------------------------------------------
+%
+% ^^A Take care that we use here the "Z" character as comment character,
+% ^^A to avoid to use an 8 bit one which can cause portability problems.
+% ^^A But we can't use any more the "Z" into the example environments
+% ^^A of this documentation.
+%
+% \makeatletter
+% \newcommand{\BeginExample}[1][0]{%
+% \parindent=0pt
+% \multiply\topsep by 2
+% \VerbatimEnvironment
+% \begin{VerbatimOut}[gobble=#1]{\jobname.tmp}}
+%
+% \newcommand{\BelowExample}[1]{%
+% \VerbatimInput[gobble=4,commentchar=Z,numbersep=3pt,frame=single,
+% numbers=left]{\jobname.tmp}
+% \catcode`\Z=9\relax%
+% #1\par}
+%
+% \newcommand{\SideBySide@Example}[1]{%
+% \@tempdimb=\FV@XRightMargin
+% \advance\@tempdimb -5mm
+% \vspace{2mm}
+% \begin{minipage}[c]{\@tempdimb}
+% \fvset{xrightmargin=0pt}
+% \catcode`\Z=9\relax%
+% #1
+% \end{minipage}%
+% \@tempdimb=\textwidth
+% \advance\@tempdimb -\FV@XRightMargin
+% \advance\@tempdimb 5mm
+% \begin{minipage}[c]{\@tempdimb}
+% \VerbatimInput[commentchar=Z,numbersep=3pt,frame=single,
+% numbers=left,xleftmargin=5mm,xrightmargin=0pt]{\jobname.tmp}
+% \end{minipage}
+% \vspace{2mm}}
+%
+% \def\Example{%
+% \catcode`\^^M=\active
+% \@ifnextchar[{\catcode`\^^M=5\Example@}{\catcode`\^^M=5\Example@@}}
+% \def\Example@[#1]{\fvset{#1}\Example@@}
+% \def\Example@@{\BeginExample}
+% \def\endExample{%
+% \end{VerbatimOut}%
+% \BelowExample{\input{\jobname.tmp}}}
+%
+% \def\CenterExample{%
+% \catcode`\^^M=\active
+% \@ifnextchar[{\catcode`\^^M=5\CenterExample@}
+% {\catcode`\^^M=5\CenterExample@@}}
+% \def\CenterExample@[#1]{\fvset{#1}\CenterExample@@}
+% \def\CenterExample@@{\BeginExample}
+% \def\endCenterExample{%
+% \end{VerbatimOut}%
+% \center
+% \BelowExample{\input{\jobname.tmp}}
+% \endcenter}
+%
+% \def\SideBySideExample{%
+% \catcode`\^^M=\active
+% \@ifnextchar[{\catcode`\^^M=5\SideBySideExample@}%
+% {\catcode`\^^M=5\SideBySideExample@@}}
+% \def\SideBySideExample@[#1]{\fvset{#1}\SideBySideExample@@}
+% \def\SideBySideExample@@{\BeginExample[4]}
+% \def\endSideBySideExample{%
+% \end{VerbatimOut}%
+% \SideBySide@Example{\input{\jobname.tmp}}}
+% \makeatother
+%
+% ^^A End of example macros from `fvrb-ex'
+%
+% ^^A For the possible index and changes log
+% \setlength{\columnseprule}{0.6pt}
+%
+% ^^A Beginning of the documentation itself
+%
+% \title{The `\textsf{fancyvrb}' package\\Fancy Verbatims in \LaTeX}
+% \author{Timothy Van Zandt\\Princeton University\\Princeton -- USA\\
+% {\footnotesize email: tvz@Princeton.EDU}\\[5mm]
+% {Packaging, documentation and support}\\
+% {\footnotesize Denis Girou (CNRS/IDRIS -- France) -- %
+% Denis.Girou@idris.fr}\\[-2mm]
+% {\footnotesize and}\\[-2mm]
+% {\footnotesize Sebastian Rahtz (Elsevier -- GB) -- %
+% s.rahtz@elsevier.co.uk}}
+% \date{Version 2.6\\July 17, 1998\\
+% {\small Documentation revised July 17, 1998}}
+%
+% \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}
+%
+% \tableofcontents
+%
+% \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}
+%
+% \ifChangeBar\begin{changebar}\fi
+% 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:
+% \ifChangeBar\end{changebar}\fi
+%
+% \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
+% \ifChangeBar\begin{changebar}\fi
+% functionalities are provided in the \LaTeX{} `\textsf{shortvrb}' package):
+% \ifChangeBar\end{changebar}\fi
+%
+% \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}
+%
+% \ifChangeBar\begin{changebar}\fi
+% The appearance of verbatim environments can be changed in many and
+% varied ways; here we list the keys that can be set.
+% \ifChangeBar\end{changebar}\fi
+%
+% \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}
+%
+% \ifChangeBar\begin{changebar}\fi
+% 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}
+% \ifChangeBar\end{changebar}\fi
+%
+% \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}
+%
+% \ifChangeBar\begin{changebar}\fi
+% 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):
+% \ifChangeBar\end{changebar}\fi
+%
+% {\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 ^^A 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
+%
+% \ifChangeBar\begin{changebar}\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}
+% \ifChangeBar\end{changebar}\fi
+%
+% \ifPostScriptFonts ^^A 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 ^^A 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 ^^A 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}
+%
+% \ifChangeBar\begin{changebar}\fi
+% \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}
+% \ifChangeBar\end{changebar}\fi
+%
+% ^^A Problem at the top of a page...
+% \ifChangeBar\leavevmode\mbox{}\begin{changebar}\fi
+% \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}
+% \ifChangeBar\end{changebar}\fi
+%
+% \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}
+%
+% \ifChangeBar\leavevmode\mbox{}\begin{changebar}\fi
+% \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
+% \ifChangeBar\end{changebar}\fi
+%
+% ^^A Problem at the top of a page...
+% \ifChangeBar\leavevmode\mbox{}\begin{changebar}\fi
+% \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}
+% \ifChangeBar\end{changebar}\fi
+%
+% ^^A Problem at the top of a page...
+% \ifChangeBar\leavevmode\mbox{}\begin{changebar}\fi
+% \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}
+% \ifChangeBar\end{changebar}\fi
+%
+% \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}
+%
+% \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.
+%
+% \begin{SideBySideExample}
+% \DefineShortVerb{\|}
+% \SaveVerb{Verb}|_verbatim_|
+% I have saved \UseVerb{Verb} and reuse
+% it later as many times as I want
+% \UseVerb{Verb}.
+% \end{SideBySideExample}
+%
+% This also provides a solution to putting verbatim text inside \LaTeX{}
+% commands which do not normally permit it:
+%
+% {\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:
+%
+% ^^A 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}
+%
+% \section{Thanks}
+%
+% For interesting comments and suggestions, we would like to thank specially
+% (alphabetic order): Philippe \textsc{Esperet}
+% \texttt{<esperet@marie.polytechnique.fr>}, Michael \textsc{Friendly}
+% \texttt{<friendly@hotspur.psych.yorku.ca>}, Rolf \textsc{Niepraschk}
+% \texttt{<niepraschk@ptb.de>} and for bug reports Mario \textsc{Hassler}
+% \relax\unskip\break
+% \texttt{<HASSLER@ippnv2.ipp.kfa-juelich.de>}, Mikhail \textsc{Kolodin}
+% \relax\unskip\break
+% \texttt{<myke@morrigan.spb.su>} and Vladimir \textsc{Volovich}
+% \verb+<vvv@vvv.vsu.ru>+.
+% \ifChangeBar\end{changebar}\fi
+%
+% \section{Conclusion}
+%
+% \ifChangeBar\begin{changebar}\fi
+% 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.
+% \ifChangeBar\end{changebar}\fi
+%
+% \begin{thebibliography}{1}
+% \bibitem{FancyBox} Timothy \textsc{van Zandt},
+% \textit{Documentation for `fancybox': Box tips and tricks for \LaTeX}.
+% Available from \texttt{CTAN:}
+% \texttt{macros/latex/contrib/supported/fancybox}, 1993.
+%
+% \bibitem{FancyVrb} Timothy \textsc{van Zandt},
+% \textit{`fancyvrb': Fancy Verbatims in \LaTeX}.
+% Available from \texttt{CTAN:}
+% \texttt{macros/latex/contrib/supported/fancyvrb}, 1998.
+%
+% \bibitem{LGrind} Various authors (current maintainer: Michael
+% \textsc{Piefel}),
+% \textit{The `LGrind' package}.
+% Available from \texttt{CTAN:} \texttt{support/lgrind}, 1998.
+%
+% \bibitem{Listings} Carsten \textsc{Heinz},
+% \textit{The `Listings' package}.
+% Available from \texttt{CTAN:}
+% \texttt{macros/latex/contrib/supported/listings}, 1996-1997.
+%\end{thebibliography}
+%
+% \StopEventually{}
+%
+% ^^A .................... End of the documentation part ....................
+%
+% \section{Driver file}
+%
+% The next bit of code contains the documentation driver file for \TeX{},
+% i.e., the file that will produce the documentation you are currently
+% reading. It will be extracted from this file by the \texttt{docstrip}
+% program.
+%
+% \begin{macrocode}
+%<*driver>
+\documentclass{ltxdoc}
+\GetFileInfo{fancyvrb.dtx}
+\usepackage{color}
+\usepackage{fancyvrb}
+\newif\ifChangeBar
+\IfFileExists{changebar.sty}%
+ {\ChangeBartrue\usepackage[dvips,rightbars]{changebar}}{}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\OnlyDescription % Comment it for implementation details
+%\Oldmakeindex % Uncomment if your MakeIndex is pre-0.9
+\hbadness=7000 % Over and under full box warnings
+\hfuzz=3pt
+\begin{document}
+ \DocInput{fancyvrb.dtx}
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% \section{\FVrbPackage{} code}
+%
+%<*fancyvrb>
+%
+% \iffalse meta-comment, etc.
+%% COPYRIGHT 1992-1999, by Timothy Van Zandt <tvz@zandtwerk.kellogg.nwu.edu>
+%%
+%% 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.0 or, at your option, any later version.
+%%
+%% DESCRIPTION:
+%% fancyvrb.sty is a LaTeX style option, containing flexible
+%% verbatim environments and commands and extensive documentation.
+%%
+%% This is a companion to the `fancybox' package.
+%%
+% \fi
+%
+% \begin{quote}
+% \emph{\textbf{\large Disclaimer (D.G./S.R.)}: This is the original
+% comments of the code by Timothy \textsc{van Zandt}. We have not change
+% them.}
+% \end{quote}
+%
+% \subsection{Preambule}
+%
+% What we need.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+% \end{macrocode}
+%
+% Who we are.
+% \begin{macrocode}
+\def\fileversion{2.6, with DG/SPQR fixes}
+\def\filedate{1998/07/17}
+\ProvidesPackage{fancyvrb}[\filedate]
+\message{Style option: `fancyvrb' v\fileversion \space <\filedate> (tvz)}
+\csname fancyvrb@loaded\endcsname
+\let\fancyvrb@loaded\endinput
+% \end{macrocode}
+%
+% \subsection{Errors}
+%
+% \begin{macrocode}
+\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.}
+% \end{macrocode}
+%
+% \subsection{Verbatim footnotes}
+%
+% Color has to be protected.
+%
+% \noindent Won't work for some definitions of \cs{@makefntext}.
+% If it weren't for \cs{@makefntext}, I would do this properly by defining a
+% footnote environment.
+%
+% \begin{macro}{\VerbatimFootnotes}
+% \begin{macrocode}
+%% 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
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\V@footnotetext}
+% \begin{macrocode}
+\long\def\V@footnotetext{%
+ \afterassignment\V@@footnotetext
+ \let\@tempa}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\V@@footnotetext}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\V@@@footnotetext}
+% \begin{macrocode}
+\def\V@@@footnotetext{\strut\egroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{key=value}
+%
+% \begin{macrocode}
+\RequirePackage{keyval}
+% \end{macrocode}
+%
+% Extensions to keyval.sty:
+%
+% \verb+\define@booleankey{<family>}{<key>}{<iftrue>}{<iffalse>}+
+%
+% Defines a \verb+<key>+ for \verb+<family>+ that executes:
+%
+% \verb+<iftrue>+ clause when value begins with `t' or `T', or is omitted.
+%
+% \verb+<iffalse>+ clause otherwise.
+%
+% \begin{macro}{\define@booleankey}
+% \begin{macrocode}
+\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}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\KV@booleankey}
+% \begin{macrocode}
+\def\KV@booleankey#1#2#3{%
+ \edef\@tempa{#1}\expandafter\KV@@booleankey\@tempa\relax\@nil{#2}{#3}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\KV@@booleankey}
+% \begin{macrocode}
+\def\KV@@booleankey#1#2\@nil#3#4{%
+ \@nameuse{KV@#3@#4@\if t#1default\else\if T#1default\else false\fi\fi}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@None}
+% \begin{macrocode}
+\def\FV@None{none}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@Auto}
+% \begin{macrocode}
+\def\FV@Auto{auto}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fvset}
+% \begin{macrocode}
+\def\fvset#1{\setkeys{FV}{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \cs{FV@Command} is for verbatim commands. Example:
+%
+% \verb+\def\VerbatimInput{\FV@Command{}{VerbatimInput}}+
+%
+% \verb+\FV@Command{<key=value>}{<name>}+:
+%
+% \begin{enumerate}
+% \item Defines \cs{FV@KeyValues} to be \verb+<key=value>+.
+% \item Looks for $*$, and adds `showspaces' to \cs{FV@KeyValues} if found.
+% \item Looks for \verb+[<key=value>]+ argument, and adds it to
+% \cs{FV@KeyValues} if found.
+% \item Executes \verb+\FVC@<name>+.
+% \end{enumerate}
+%
+% \begin{macro}{\FV@Command}
+% \begin{macrocode}
+\def\FV@Command#1#2{%
+ \@ifstar
+ {\def\FV@KeyValues{#1,showspaces}\FV@@Command{#2}}%
+ {\def\FV@KeyValues{#1}\FV@@Command{#2}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@@Command}
+% \begin{macrocode}
+\def\FV@@Command#1{%
+ \@ifnextchar[%
+ {\FV@GetKeyValues{\@nameuse{FVC@#1}}}%
+ {\@nameuse{FVC@#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@GetKeyValues}
+% \begin{macrocode}
+\def\FV@GetKeyValues#1[#2]{%
+ \expandafter\def\expandafter\FV@KeyValues\expandafter{\FV@KeyValues,#2}#1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@CustomVerbatimCommand}
+% \begin{macrocode}
+\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}}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\CustomVerbatimCommand}
+% \begin{macrocode}
+\def\CustomVerbatimCommand{\@CustomVerbatimCommand\newcommand}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RecustomVerbatimCommand}
+% \begin{macrocode}
+\def\RecustomVerbatimCommand{\@CustomVerbatimCommand\renewcommand}
+% \end{macrocode}
+% \end{macro}
+%
+% \cs{FV@Environment} is for verbatim environments. Example:
+%
+% \verb+\def\Verbatim{\FV@Environment{}{Verbatim}}+
+%
+% \verb+\@namedef{Verbatim*}{\FV@Environment{showspaces}{Verbatim}}+
+%
+% \verb+\FV@Environment{<key=value>}{<name>}+:
+%
+% \begin{enumerate}
+% \item Defines \cs{FV@KeyValues} to be \verb+<key=value>+.
+% \item Sets \verb+\catcode`\^^M=13+, checks for `[', and resets
+% \verb+\catcode``^^M=5+.
+% \item Reads \verb+[<key=value>]+ and adds it to \cs{FV@KeyValues} if `['
+% was found.
+% \item Executes \verb+\FVB@<name>+.
+% \end{enumerate}
+%
+% \cs{FV@Environment} is like \cs{FV@Command}, except:
+%
+% \begin{itemize}
+% \item It omits step 2 (looking for $*$), and
+% \item It sets \verb+\catcode`\^^M=13+ when checking for the `[' of the
+% optional argument, so that it does not skip over \verb+^^M+ if there
+% is no `['.
+% \end{itemize}
+%
+% \begin{macro}{\FV@Environment}
+% \begin{macrocode}
+\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}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\CustomVerbatimEnvironment}
+% \begin{macrocode}
+\def\CustomVerbatimEnvironment{\@CustomVerbatimEnvironment\newenvironment}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\RecustomVerbatimEnvironment}
+% \begin{macrocode}
+\def\RecustomVerbatimEnvironment{\@CustomVerbatimEnvironment\renewenvironment}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@CustomVerbatimEnvironment}
+% \begin{macrocode}
+\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}}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DefineVerbatimEnvironment}
+% \begin{macrocode}
+\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}}}
+% \end{macrocode}
+% \end{macro}
+%
+% Then commands or environments set key values with \cs{FV@UseKeyValues},
+% within a group.
+%
+% \begin{macro}{\FV@UseKeyValues}
+% \begin{macrocode}
+\def\FV@UseKeyValues{%
+ \ifx\FV@KeyValues\@empty\else
+ \def\KV@prefix{KV@FV@}%
+ \expandafter\KV@do\FV@KeyValues,\relax,%
+ \def\FV@KeyValues{}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Scanning}
+%
+% Scanning macros:
+%
+% \begin{itemize}
+% \item read a line at a time from an environment or a file,
+% \item save the line in \cs{FV@Line}, and
+% \item execute \cs{FV@PreProcessLine}.
+% \end{itemize}
+%
+% \noindent\cs{FV@PreProcessLine}:
+%
+% \begin{itemize}
+% \item Determines whether line is in a user-specified ranges, and if so,
+% \item Strips the line of a user-specified no. of tokens, and
+% \item Executes \verb+\FV@ProcessLine{<line>}+.
+% \end{itemize}
+%
+% Two things are common to scanning an environment or reading a file:
+%
+% \begin{itemize}
+% \item \cs{FV@CatCodes} $\Longrightarrow$ Change \verb+\catcode+'s.
+% \item \cs{FV@PreProcessLine} $\Longrightarrow$ See above.
+% \end{itemize}
+%
+% \subsection{Codes}
+%
+% \begin{macro}{\FV@CatCodes}
+% \begin{macrocode}
+\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.
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@ActiveWhiteSpace}
+% \begin{macrocode}
+\def\FV@ActiveWhiteSpace{%
+ \catcode`\^^M=\active % End of line
+ \catcode`\ =\active % Space
+ \catcode`\^^I=\active} % Tab
+% \end{macrocode}
+% \end{macro}
+%
+% CM Ligatures:
+%
+% \begin{tabbing}
+% Left-quote: \= \verb+--+ \= \verb+---+ \= fl \= ffi \= ffl \kill
+% Left-quote: \> `` \> !` \> ?` \\
+% Letter f: \> ff \> fi \> fl \> ffi \> ffl \\
+% Hyphen: \> \verb+--+ \> \verb+---+
+% \end{tabbing}
+%
+% \begin{macro}{\FV@CatCodesHook}
+% \begin{macrocode}
+\def\FV@CatCodesHook{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@AddToHook}
+% \begin{macrocode}
+\def\FV@AddToHook#1#2{%
+ \expandafter\def\expandafter#1\expandafter{#1#2\relax}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FancyVerbCodes}
+% \begin{macrocode}
+\define@key{FV}{codes}[]{\def\FancyVerbCodes{#1\relax}}
+\define@key{FV}{codes*}{%
+ \expandafter\def\expandafter\FancyVerbCodes\expandafter{%
+ \FancyVerbCodes#1\relax}}
+\fvset{codes}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\define@key{FV}{commandchars}[\\\{\}]%
+ {\def\@tempa{#1}%
+ \ifx\@tempa\FV@None
+ \let\FV@CommandChars\relax
+ \else
+ \FV@DefineCommandChars#1\relax\relax\relax
+ \fi}
+% \end{macrocode}
+%
+% \begin{macro}{\FV@DefineCommandChars}
+% \begin{macrocode}
+\def\FV@DefineCommandChars#1#2#3{%
+ \def\FV@CommandChars{%
+ \catcode`#1=0\relax\catcode`#2=1\relax\catcode`#3=2\relax}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\FV@AddToHook\FV@CatCodesHook\FV@CommandChars
+% \end{macrocode}
+%
+% \begin{macro}{\FV@CommentChar}
+% \begin{macrocode}
+\define@key{FV}{commentchar}[\%]{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\FV@None
+ \let\FV@CommentChar\relax
+ \else
+ \def\FV@CommentChar{\catcode`#1=14}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\FV@AddToHook\FV@CatCodesHook\FV@CommentChar
+% \end{macrocode}
+%
+% \begin{macrocode}
+\fvset{commandchars=none,commentchar=none}
+% \end{macrocode}
+%
+% \subsection{Preprocess line}
+%
+% These is tedious and takes up macro space, but it doesn't slow things
+% down much when the parameters are not used.
+%
+% \noindent\texttt{start}, \texttt{stop} and \texttt{gobble} parameters:
+%
+% \noindent if value is a number, then after the assignment the next token is
+% \cs{relax}.
+%
+% \begin{macrocode}
+\define@key{FV}{firstline}{%
+ \afterassignment\FV@ParseStart\@tempcnta=0#1\relax\@nil{#1}}
+% \end{macrocode}
+%
+% \begin{macro}{\FV@ParseStart}
+% \begin{macrocode}
+\def\FV@ParseStart#1\relax\@nil#2{%
+ \ifx\@nil#1\@nil
+ \edef\FancyVerbStartNum{\the\@tempcnta}%
+ \let\FancyVerbStartString\relax
+ \else
+ \edef\FancyVerbStartString{#2}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\KV@FV@firstline@default}
+% \begin{macrocode}
+\def\KV@FV@firstline@default{%
+ \let\FancyVerbStartNum\z@
+ \let\FancyVerbStartString\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\define@key{FV}{lastline}{%
+ \afterassignment\FV@ParseStop\@tempcnta=0#1\relax\@nil{#1}}
+% \end{macrocode}
+%
+% \begin{macro}{\FV@ParseStop}
+% \begin{macrocode}
+\def\FV@ParseStop#1\relax\@nil#2{%
+ \ifx\@nil#1\@nil
+ \edef\FancyVerbStopNum{\the\@tempcnta}%
+ \let\FancyVerbStopString\relax
+ \else
+ \edef\FancyVerbStopString{#2}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\KV@FV@lastline@default}
+% \begin{macrocode}
+\def\KV@FV@lastline@default{%
+ \let\FancyVerbStopNum\z@
+ \let\FancyVerbStopString\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fvset{firstline,lastline}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcount\FV@CodeLineNo
+% \end{macrocode}
+%
+% If \cs{FV@FindStartStop} determines the line should be printed, it
+% executes \cs{FV@@PreProcessLine}
+%
+% \begin{macro}{\FV@PreProcessLine}
+% \begin{macrocode}
+\def\FV@PreProcessLine{%
+ \global\advance\FV@CodeLineNo\@ne
+ \FV@FindStartStop}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@@PreProcessLine}
+% \begin{macrocode}
+\def\FV@@PreProcessLine{%
+ \FV@StepLineNo
+ \FV@Gobble
+ \expandafter\FV@ProcessLine\expandafter{\FV@Line}}
+% \end{macrocode}
+% \end{macro}
+%
+% The definition of \cs{FV@FindStartStop} changes, so that we don't
+% have to check irrelevant conditions with each line.
+%
+% \begin{macro}{\FV@FindStartStop}
+% \begin{macrocode}
+\def\FV@FindStartStop{\FV@DefineFindStart\FV@FindStartStop}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%% \def\FV@DefinePreProcessLine{%
+%% \setcounter{FancyVerbLine}{0}%
+%% \FV@DefineFindStart}
+% \end{macrocode}
+%
+% \begin{macro}{\FV@DefineFindStart}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@FindStartNum}
+% \begin{macrocode}
+\def\FV@FindStartNum{%
+ \ifnum\FancyVerbStartNum>\FV@CodeLineNo\else
+ \FV@DefineFindStop
+ \expandafter\FV@@PreProcessLine
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@FindStartString}
+% \begin{macrocode}
+%% SR modification begin - 1996
+\def\FV@FindStartString{%
+ \expandafter\FV@@FindStartString
+{\meaning\FV@Line}%
+{\meaning\FancyVerbStartString}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@@FindStartString}
+% \begin{macrocode}
+\def\FV@@FindStartString#1#2{%
+\edef\@fooA{#1}\edef\@fooB{#2}%
+ \ifx\@fooA\@fooB
+ \FV@DefineFindStop
+ \fi
+}
+%% SR modification end
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@DefineFindStop}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@FindStopNum}
+% \begin{macrocode}
+\def\FV@FindStopNum{%
+ \ifnum\FancyVerbStopNum=\FV@CodeLineNo
+ \let\FV@FindStartStop\relax
+ \ifeof\FV@InFile\else
+ \immediate\closein\FV@InFile
+ \fi
+ \fi
+ \FV@@PreProcessLine}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@FindStopString}
+% \begin{macrocode}
+%% SR modification begin - 1996
+\def\FV@FindStopString{%
+ \expandafter\FV@@FindStopString
+{\meaning\FV@Line}%
+{\meaning\FancyVerbStopString}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@@FindStopString}
+% \begin{macrocode}
+\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
+% \end{macrocode}
+% \end{macro}
+%
+% Gobblings. \cs{FV@Gobble} does nothing, or strips some tokens from
+% the line and stores the result in \cs{FV@Line} again. We use
+% \LaTeX's \verb+\renewcommand+ to define a command for gobbling up to
+% 9 arguments. This is not the same as removing 9 tokens, but is easier.
+%
+% \begin{macro}{\FV@@Gobble}
+% \begin{macrocode}
+\def\FV@@Gobble{%
+ \expandafter\expandafter\expandafter\FV@@@Gobble
+ \expandafter\FV@@@@Gobble\FV@Line
+ \@nil\@nil\@nil\@nil\@nil\@nil\@nil\@nil\@nil\@nil\@@nil}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@@@Gobble}
+% \begin{macrocode}
+\def\FV@@@Gobble#1\@nil#2\@@nil{\def\FV@Line{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@Gobble}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@@@@Gobble}
+% \begin{macrocode}
+\def\FV@@@@Gobble{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\KV@FV@gobble@default}
+% \begin{macrocode}
+\def\KV@FV@gobble@default{\let\FV@Gobble\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fvset{gobble}
+% \end{macrocode}
+%
+% \subsection{Scanning environments}
+%
+% \begin{macro}{\FV@Scan}
+% \begin{macrocode}
+\def\FV@Scan{%
+ \FV@CatCodes
+ \VerbatimEnvironment
+ \FV@DefineCheckEnd
+ \FV@BeginScanning}
+% \end{macrocode}
+% \end{macro}
+%
+% \cs{VerbatimEnvironment}:
+%
+% This saves the name of the current environment as
+% \cs{FV@EnvironName}, if the latter is not already defined.
+% Then \cs{FV@CheckEnd} knows how to find the end as long as either:
+% \begin{itemize}
+% \item \verb+\begin+ and \verb+\end+ are not used within the definition of
+% the environment, OR
+% \item \cs{VerbatimEnvironment} is used in the definition before the first
+% \verb+\begin+.
+% \end{itemize}
+%
+% \begin{macro}{\VerbatimEnvironment}
+% \begin{macrocode}
+\def\VerbatimEnvironment{%
+ \ifx\FV@EnvironName\relax\xdef\FV@EnvironName{\@currenvir}\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\let\FV@EnvironName\relax
+% \end{macrocode}
+%
+%\subsection{Check end}
+%
+% We have to check the argument of the first \verb+\end{}+ in each line,
+% compare it with \cs{FV@EnvironName}, and return \verb+\iftrue+ if it matches
+% and \verb+\iffalse+ otherwise.
+%
+% There are four cases (R=regular):
+%
+% \begin{tabbing}
+% catcode of \verb+{}+ \= : \= R \= 12 \= 12 \= 12 \kill
+% case \> : \> i \> ii \> iii \> iv \\
+% catcode of \verb+\+ \> : \> R \> 12 \> 12 \> R \\
+% catcode of \verb+{}+ \> : \> R \> R \> 12 \> 12
+% \end{tabbing}
+%
+% For uniformity, we use \verb+![]+ instead of \verb+\{}+ in all the
+% definitions.
+%
+% We first set the catcodes of \verb+\{}+ to those in effect in the
+% verbatim environment. Then we define:
+%
+% \verb+!def!FV@CheckEnd#1[!FV@@CheckEnd#1\end{}!@nil]+
+%
+% \noindent If {} have their usual catcodes, we define:
+%
+% \verb+!def!FV@@CheckEnd#1\end#2#3!@nil[!def!@tempa[#2]]+
+%
+% \noindent If {} have catcode 12, we define:
+%
+% \verb+!def!FV@@CheckEnd#1\end{#2}#3!@nil[!def!@tempa[#2]]+
+%
+% \begin{macrocode}
+\begingroup
+\catcode`\!=0
+\catcode`\[=1
+\catcode`\]=2
+% \end{macrocode}
+%
+% Case i:
+%
+% \begin{macrocode}
+!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{}]
+% \end{macrocode}
+%
+% Case ii:
+%
+% \begin{macrocode}
+\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{}]
+% \end{macrocode}
+%
+% Case iii:
+%
+% \begin{macrocode}
+!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{}]
+% \end{macrocode}
+%
+% Case iv:
+%
+% \begin{macrocode}
+!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{}]
+% \end{macrocode}
+%
+% \begin{macrocode}
+\endgroup
+% \end{macrocode}
+%
+% \begin{macro}{\FV@BadCodes}
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@DefineCheckEnd}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Line-by-line scanning}
+%
+% We first skip everything after the beginning of the environment.
+%
+% \begin{macro}{\FV@BeginScanning}
+% \begin{macrocode}
+\begingroup
+\catcode`\^^M=\active
+ \gdef\FV@BeginScanning#1^^M{%
+ \def\@tempa{#1}\ifx\@tempa\@empty\else\FV@BadBeginError\fi%
+ \FV@GetLine}%
+\endgroup
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@BadBeginError}
+% \begin{macrocode}
+\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.}}
+% \end{macrocode}
+% \end{macro}
+%
+% If \cs{FancyVerbGetLine} does not find a \verb+^^M+, then we are at
+% the end of the file, and \cs{FV@EOF} attempts to terminate the document.
+% Otherwise, \cs{FV@EOF} is gobbled by \cs{FancyVerbGetLine}.
+%
+% \ifChangeBar\begin{changebar}\fi
+% \begin{macro}{\FV@GetLine}
+% \begin{macrocode}
+%% 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
+% \end{macrocode}
+% \end{macro}
+% \ifChangeBar\end{changebar}\fi
+%
+% \begin{macro}{\FancyVerbGetLine}
+% \begin{macrocode}
+\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
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@BadEndError}
+% \begin{macrocode}
+\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.}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@EndScanning}
+% \begin{macrocode}
+\def\FV@EndScanning{%
+ \edef\next{\noexpand\end{\FV@EnvironName}}%
+ \global\let\FV@EnvironName\relax
+ \next}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\@ifundefined{@currenvline}{\let\@currenvline\@empty}{}
+% \end{macrocode}
+%
+% \begin{macro}{\FV@CheckScan}
+% \begin{macrocode}
+\def\FV@CheckScan#1{\@ifnextchar\@nil{\@gobble}{\FV@EOF}}
+\def\FV@CheckScan#1{\ifx\@nil#1\@empty\else\expandafter\FV@EOF\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@EOF}
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+% \end{macro}
+%
+ % \subsection{Input}
+%
+% \begin{macrocode}
+\newread\FV@InFile
+% \end{macrocode}
+%
+% \begin{macro}{\FV@Input}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \noindent\TeX{} reports EOF when reading after the last newline character.
+%
+% \noindent Thus, we read to InLine, and if \TeX{} reports EOF:
+% \begin{itemize}
+% \item If InLine=Empty, previous line was last line in file (file ends nl).
+% \item Otherwise, InLine holds last line in file (file doesn't end in nl).
+% \end{itemize}
+% \cs{FV@@Input} handles both cases correctly.
+%
+% \begin{macro}{\FV@@Input}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% We also want to handle true comment characters correctly. This means that
+% we keep accumulating text in InLine until we find a \verb+^^M+ (indicating
+% that the line did not contain a comment character).
+%
+% \begin{macro}{\FV@ReadLine}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \verb+#2+ is empty if line ends in \verb+^^M+, \verb+#2=\relax+ otherwise
+%
+% \begin{macro}{\FV@@ReadLine}
+% \begin{macrocode}
+\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
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Formatting -- Common components}
+%
+% Some things that are common to all verbatim formatting:
+%
+% \begin{macro}{\FV@FormattingPrep}
+% \begin{macrocode}
+\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).
+% \end{macrocode}
+% \end{macro}
+%
+% Fonts
+%
+% \changes{v2.6}{1998/07/17}{Correct a bug for the -- ligature in T1 encoding
+% (reported by Mario Hassler on May 12, 1998).}
+%
+% \begin{macrocode}
+\expandafter\ifx\csname selectfont\endcsname\relax
+% \end{macrocode}
+%
+% \begin{macro}{\FV@SetupFont}
+% \begin{macrocode}
+\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
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\FV@FontSize}
+% \begin{macrocode}
+\define@key{FV}{fontsize}{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\FV@Auto
+ \let\FV@FontSize\relax
+ \else
+ \def\FV@FontSize{#1}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\KV@FV@fontsize@default}
+% \begin{macrocode}
+\def\KV@FV@fontsize@default{\let\FV@FontSize\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@BaseLineStretch}
+% \begin{macrocode}
+\define@key{FV}{baselinestretch}[auto]{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\FV@Auto
+ \let\FV@BaseLineStretch\relax
+ \else
+ \def\FV@BaseLineStretch{\def\baselinestretch{#1}}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\KV@FV@baselinestretch@default}
+% \begin{macrocode}
+\def\KV@FV@baselinestretch@default{\let\FV@BaseLineStretch\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\define@key{FV}{fontfamily}{%
+ \@ifundefined{FV@fontfamily@#1}%
+ {\def\FV@FontScanPrep{}\def\FV@FontFamily{\fontfamily{#1}}}
+ {\csname FV@fontfamily@#1\endcsname}}
+% \end{macrocode}
+%
+% \begin{macro}{\FV@FontSeries}
+% \begin{macrocode}
+\define@key{FV}{fontseries}{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\FV@Auto
+ \let\FV@FontSeries\relax
+ \else
+ \def\FV@FontSeries{\fontseries{#1}}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@FontShape}
+% \begin{macrocode}
+\define@key{FV}{fontshape}{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\FV@Auto
+ \let\FV@FontShape\relax
+ \else
+ \def\FV@FontShape{\fontshape{#1}}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% Font family styles have to define \cs{FV@FontScanPrep} and
+% \cs{FV@FontFamily}.
+%
+% \begin{macro}{\FV@MakeActive}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@MakeUnActive}
+% \begin{macrocode}
+\def\FV@MakeUnActive{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\begingroup
+\catcode`\`=\active
+% \end{macrocode}
+%
+% \begin{macro}{\FV@fontfamily@tt}
+% \begin{macrocode}
+\gdef\FV@fontfamily@tt{%
+ \def\FV@FontScanPrep{\FV@MakeActive\`}%
+%% SR modification begin - 1995
+%% \def\FV@FontFamily{\tt`{{\string`}}}}
+ \def\FV@FontFamily{\ttfamily\edef`{{\string`}}}}
+%% SR modification end
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@fontfamily@cmtt}
+% \begin{macrocode}
+\gdef\FV@fontfamily@cmtt{%
+ \def\FV@FontScanPrep{\FV@MakeActive\`}%
+ \def\FV@FontFamily{\edef`{{\string`}}\fontfamily{cmtt}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\endgroup
+% \end{macrocode}
+%
+% \begin{macro}{\FV@fontfamily@cmtt-spanish}
+% \begin{macrocode}
+\@namedef{FV@fontfamily@cmtt-spanish}{%
+ \def\FV@FontScanPrep{}%
+ \def\FV@FontFamily{\fontfamily{cmtt}}}
+% \end{macrocode}
+% \end{macro}
+%
+% Fix me
+%
+% \begin{macro}{\FV@fontfamily@courier}
+% \begin{macrocode}
+\@namedef{FV@fontfamily@courier}{%
+ \def\FV@FontScanPrep{}%
+%% SR modification begin - 1995
+%% \def\FV@FontFamily{\fontfamily{rpcr}}}
+ \def\FV@FontFamily{\fontfamily{pcr}}}
+%% SR modification end
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@fontfamily@helvetica}
+% \begin{macrocode}
+\@namedef{FV@fontfamily@helvetica}{%
+ \def\FV@FontScanPrep{}%
+%% SR modification begin - 1995
+%% \def\FV@FontFamily{\fontfamily{rphv}}}
+ \def\FV@FontFamily{\fontfamily{phv}}}
+%% SR modification end
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fvset{fontfamily=tt,fontsize=auto,fontshape=auto,fontseries=auto,
+ baselinestretch=auto}
+% \end{macrocode}
+%
+% \cs{FV@DefineWhiteSpace}
+%
+% We just define the active characters to be ordinary commands, which
+% are easier to redefine. We do with any macros that use verbatim text.
+%
+% \begin{macrocode}
+\begingroup
+\catcode`\ =\active
+\catcode`\^^I=\active
+% \end{macrocode}
+%
+% \begin{macro}{\FV@DefineWhiteSpace}
+% \begin{macrocode}
+\gdef\FV@DefineWhiteSpace{\def {\FV@Space}\def^^I{\FV@Tab}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\endgroup
+% \end{macrocode}
+%
+% \begin{macro}{\FancyVerbDefineActive}
+% \begin{macrocode}
+\define@key{FV}{defineactive}[]{\def\FancyVerbDefineActive{#1\relax}}
+\define@key{FV}{defineactive*}{%
+ \expandafter\def\expandafter\FancyVerbDefineActive\expandafter{%
+ \FancyVerbDefineActive#1\relax}}
+\fvset{defineactive}
+% \end{macrocode}
+% \end{macro}
+%
+% \cs{FV@Space}:
+%
+% \begin{macro}{\FV@Space}
+% \begin{macrocode}
+\define@booleankey{FV}{showspaces}%
+ {\def\FV@Space{{\FancyVerbSpace}}}%
+ {\def\FV@Space{\ }}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+{\catcode`\ =12 \gdef\FancyVerbSpace{\tt }}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\fvset{showspaces=false}
+% \end{macrocode}
+%
+% \cs{FV@Tab}:
+%
+% \begin{macro}{\FV@Tab}
+% \begin{macrocode}
+\def\FV@Tab{\hbox to\FancyVerbTabSize\fontdimen2\font{\hss\FV@TabChar}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FancyVerbTabSize}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@TabChar}
+% \begin{macrocode}
+\define@booleankey{FV}{showtabs}%
+ {\def\FV@TabChar{\FancyVerbTab}}%
+ {\let\FV@TabChar\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fvset{tabsize=8,showtabs=false}
+% \end{macrocode}
+%
+% Here is a weak attempt at a tab character. It may exceed the width
+% of a space character when the verbatim font is small. The only proper way
+% to do this is making it part of the verbatim font.
+%
+% \begin{macro}{\FancyVerbTab}
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+% \end{macro}
+%
+% Obey Tabs:
+%
+% \begin{macrocode}
+\newbox\FV@TabBox
+% \end{macrocode}
+%
+% \begin{macro}{\FV@@ObeyTabsInit}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@@ObeyTabs}
+% \begin{macrocode}
+\def\FV@@ObeyTabs#1{\setbox\FV@TabBox=\hbox{#1}\box\FV@TabBox}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\let\FV@ObeyTabs\relax
+% \end{macrocode}
+%
+% \begin{macro}{\FV@TrueTab}
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@ObeyTabsInit}
+% \begin{macrocode}
+\define@booleankey{FV}{obeytabs}%
+ {\let\FV@ObeyTabsInit\FV@@ObeyTabsInit}%
+ {\let\FV@ObeyTabsInit\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fvset{obeytabs=false}
+% \end{macrocode}
+%
+% \cs{FancyVerbFormatCom}
+%
+% \begin{macro}{\FancyVerbFormatCom}
+% \begin{macrocode}
+\define@key{FV}{formatcom}[]{\def\FancyVerbFormatCom{#1\relax}}
+\define@key{FV}{formatcom*}{%
+ \expandafter\def\expandafter\FancyVerbFormatCom\expandafter{%
+ \FancyVerbFormatCom#1\relax}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fvset{formatcom}
+% \end{macrocode}
+%
+% \begin{macro}{\FancyVerbFormatLine}
+% \begin{macrocode}
+\def\FancyVerbFormatLine#1{\FV@ObeyTabs{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{List environments}
+%
+% Some parameters:
+%
+% \begin{macro}{\FV@XLeftMargin}
+% \begin{macrocode}
+\define@key{FV}{xleftmargin}{\def\FV@XLeftMargin{#1}}
+\let\FV@XLeftMargin\z@
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@XRightMargin}
+% \begin{macrocode}
+\define@key{FV}{xrightmargin}{\def\FV@XRightMargin{#1}}
+\let\FV@XRightMargin\z@
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@FV@ResetMargins}
+% \begin{macrocode}
+\define@booleankey{FV}{resetmargins}%
+ {\let\if@FV@ResetMargins\iftrue}
+ {\let\if@FV@ResetMargins\iffalse}
+\fvset{resetmargins=false}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@ListParameterHook}
+% \begin{macrocode}
+\define@key{FV}{listparameters}{\def\FV@ListParameterHook{#1}}
+\def\FV@ListParameterHook{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FancyVerbHFuzz}
+% \begin{macrocode}
+\define@key{FV}{hfuzz}{%
+ \@tempdima=#1\relax
+ \edef\FancyVerbHFuzz{\number\@tempdima sp}}
+\fvset{hfuzz=2pt}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@InterLinePenalty}
+% \begin{macrocode}
+\define@booleankey{FV}{samepage}%
+ {\def\FV@InterLinePenalty{\interlinepenalty\@M}}%
+ {\let\FV@InterLinePenalty\relax}
+\fvset{samepage=false}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \noindent Lists:
+%
+% \verb+\FV@List{}+ is a rewriting of \verb+\list{}{}\item[]+.
+% The rewrite gives me more control.
+% I might not get the vertical spacing exactly the same, but it
+% is more likely that it will get better than worse.
+%
+% The verbatim environment consists of a series of \verb+\hbox+'s inserted in
+% vertical mode.
+%
+% \noindent We need to take care of the following:
+% \begin{itemize}
+% \item leftmargin
+% \item rightmargin
+% \item topskip
+% \item botskip
+% \item toppenalty
+% \item botpenalty
+% \item interlinepenalties
+% \end{itemize}
+%
+% Note: A verbatim environment immediately after an \verb+\item+ starts on
+% the same line as the \verb+\item+'s label, unless we reset margins.
+% The user can instead have the environment start on a new
+% line by inserting \verb+`\ '+ between \verb+\item+ and the environment.
+%
+% \begin{macro}{\FV@List}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \noindent Cases where we need to leave vmode:
+% \begin{itemize}
+% \item After an in-line section (\verb+\if@noskipsec=T+).
+% \item After an \verb+\item+ command, if we reset margins.
+% \end{itemize}
+%
+% Then we end \verb+\vmode+, using \verb+@noparlist+ as a flag if in vmode.
+% (Not the usual meaning of \verb+@noparlist+.)
+%
+% \begin{macro}{\FV@LeaveVMode}
+% \begin{macrocode}
+\def\FV@LeaveVMode{%
+ \if@noskipsec
+ \leavevmode
+ \else
+ \if@FV@ResetMargins\if@inlabel\leavevmode\fi\fi
+ \fi
+ \ifvmode\@noparlisttrue\else\@noparlistfalse\unskip\par\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@ListNesting}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \noindent \cs{FV@ListVSpace} contains selected parts of \cs{@trivlist} and
+% \cs{@item}.
+%
+% \noindent Here are the cases:
+%
+% \noindent Vmode not in label or after \verb+@NOBREAK+:
+% \begin{tabbing}
+% \verb+<toppenalty>+ \= = \kill
+% \verb+<topskip>+ \> = \verb!\topsep + \partopsep + \parskip! \\
+% \verb+<botskip>+ \> = \verb!\topsep + \partopsep! \\
+% \verb+<toppenalty>+ \> = \verb+\@beginparpenalty+ \\
+% \verb+<botpenalty>+ \> = \verb+\@endparpenalty+
+% \end{tabbing}
+%
+% \noindent Vmode in label:
+% \begin{tabbing}
+% \verb+<toppenalty>+ \= = \verb!\topsep + \partopsep! \= \% \kill
+% \verb+<topskip>+ \> = \verb+\parskip+ \> \% Expected
+% anyway. \\
+% \verb+<botskip>+ \> = \verb!\topsep + \partopsep! \> \% Omitted
+% in \LaTeX{} -- a bug? \\
+% \verb+<toppenalty>+ \> = None \\
+% \verb+<botpenalty>+ \> = \verb+\@endparpenalty+ \> \% Ditto.
+% \end{tabbing}
+%
+% \noindent Vmode after \verb+@nobreak+:
+% \begin{tabbing}
+% \verb+<toppenalty>+ \= = \kill
+% \verb+<topskip>+ \> = \verb+\parskip+ \\
+% \verb+<botskip>+ \> = \verb!\topsep + \partopsep! \\
+% \verb+<toppenalty>+ \> = \verb+None+ \\
+% \verb+<botpenatly>+ \> = \verb+\@endparpenalty+
+% \end{tabbing}
+%
+% \noindent Hmode:
+% \begin{tabbing}
+% \verb+<toppenalty>+ \= = \kill
+% \verb+<topskip>+ \> = \verb!\topsep + \parskip! \\
+% \verb+<botskip>+ \> = \verb+\topsep+ \\
+% \verb+<toppenalty>+ \> = \verb+\@beginparpenalty+ \\
+% \verb+<botpenatly>+ \> = \verb+\@endparpenalty+
+% \end{tabbing}
+%
+% \noindent Notes:
+% \begin{itemize}
+% \item Except when in label or after nobreak, \verb+\parskip+ is added with
+% \verb+\addvspace+, so that net space is:
+%
+% \verb!MAX{\topsep (+\partopsep) + \parskip , \lastskip }!
+%
+% (The usual \verb+\@item+ works the same way.)
+% \item \verb+\parskip+ is added afterwards by a new paragraph, if any.
+% \item \verb+<botskip> == \@topsepadd+
+% \end{itemize}
+%
+% \begin{macro}{\FV@ListVSpace}
+% \begin{macrocode}
+\def\FV@ListVSpace{%
+ \@topsepadd\topsep
+ \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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{tabbing}
+% \verb+\@totalleftmargin+ \= := \kill
+% \verb+\leftmargin+ \> := totalleftmargin \\
+% \verb+\rightmargin+ \> := totalrightmargin \\
+% \verb+\@totalleftmargin+ \> := totalleftmargin of enclosing environment.
+% \end{tabbing}
+%
+% \begin{macro}{\FV@SetLineWidth}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% We have to insert the right interline penalties (\verb+\interlinepenalty+,
+% \verb+\clubpenalty+, \verb+\widowpenalty+). We could process the environment
+% as one long paragraph and let \TeX{} insert the penalties, but this
+% might cause problems for a very long environment.
+%
+% \begin{description}
+% \item[Line 1] : Insert \verb+\@labels+ (maybe) plus current\_line
+% \item[Line 2] : Save current line
+% \item[Line 3] : penalty = interline + club ; Insert last line ;
+% Save current line.
+% \item[Line 4] : penalty = interline ; Insert last line ; Save current line.
+% \end{description}
+%
+% \noindent Then at the end:
+% \begin{description}
+% \item[Next line = 1] : Add null line.
+% \item[Next line = 2] : Nothing.
+% \item[Next line = 3] : penalty = interline + club + widow ;
+% Insert last line.
+% \item[Next line = 4] : penalty = interline + widow ; Insert last line.
+% \end{description}
+%
+% \begin{macro}{\FV@ListProcessLine}
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@ListProcessLine@i}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@ListProcessLine@ii}
+% \begin{macrocode}
+\def\FV@ListProcessLine@ii#1{%
+ \setbox\@tempboxa=\FV@ListProcessLine{#1}%
+ \let\FV@ProcessLine\FV@ListProcessLine@iii}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@ListProcessLine@iii}
+% \begin{macrocode}
+\def\FV@ListProcessLine@iii#1{%
+ {\advance\interlinepenalty\clubpenalty\penalty\interlinepenalty}%
+ \box\@tempboxa
+ \setbox\@tempboxa=\FV@ListProcessLine{#1}%
+ \let\FV@ProcessLine\FV@ListProcessLine@iv}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@ListProcessLine@iv}
+% \begin{macrocode}
+\def\FV@ListProcessLine@iv#1{%
+ \penalty\interlinepenalty
+ \box\@tempboxa
+ \setbox\@tempboxa=\FV@ListProcessLine{#1}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@EndList}
+% \begin{macrocode}
+\def\FV@EndList{%
+ \FV@ListProcessLastLine
+ \FV@EndListFrame
+ \@endparenv
+ \endgroup
+ \@endpetrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@ListProcessLastLine}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% Verbatim environment:
+%
+% \DescribeEnv{Verbatim}
+% \begin{macrocode}
+\def\FV@VerbatimBegin{\FV@List\z@}
+\def\FV@VerbatimEnd{\FV@EndList}
+% \end{macrocode}
+%
+% \begin{macro}{\FVB@Verbatim}
+% \begin{macrocode}
+\def\FVB@Verbatim{\FV@VerbatimBegin\FV@Scan}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVE@Verbatim}
+% \begin{macrocode}
+\def\FVE@Verbatim{\FV@VerbatimEnd}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\DefineVerbatimEnvironment{Verbatim}{Verbatim}{}
+% \end{macrocode}
+%
+% With \cs{UseVerbatim}, we have to take care of some of the things
+% \verb+\end{}+ would do.
+%
+% \begin{macro}{\FV@UseVerbatim}
+% \begin{macrocode}
+\def\FV@UseVerbatim#1{%
+ \FV@VerbatimBegin#1\FV@VerbatimEnd
+ \@doendpe\global\@ignorefalse\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\VerbatimInput}
+% \begin{macrocode}
+\def\VerbatimInput{\FV@Command{}{VerbatimInput}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVC@VerbatimInput}
+% \begin{macrocode}
+\def\FVC@VerbatimInput#1{\FV@UseVerbatim{\FV@Input{#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% LVerbatim environment:
+%
+% \DescribeEnv{LVerbatim}
+% \begin{macrocode}
+\def\FV@LVerbatimBegin{\FV@List\@ne}
+\def\FV@LVerbatimEnd{\FV@EndList}
+% \end{macrocode}
+%
+% \begin{macro}{\FVB@LVerbatim}
+% \begin{macrocode}
+\def\FVB@LVerbatim{\FV@LVerbatimBegin\FV@Scan}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVE@LVerbatim}
+% \begin{macrocode}
+\def\FVE@LVerbatim{\FV@LVerbatimEnd}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\DefineVerbatimEnvironment{LVerbatim}{LVerbatim}{}
+% \end{macrocode}
+%
+% \begin{macro}{\FV@LUseVerbatim}
+% \begin{macrocode}
+\def\FV@LUseVerbatim#1{%
+ \FV@LVerbatimBegin#1\FV@LVerbatimEnd
+ \@doendpe\global\@ignorefalse\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LVerbatimInput}
+% \begin{macrocode}
+\def\LVerbatimInput{\FV@Command{}{LVerbatimInput}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVC@LVerbatimInput}
+% \begin{macrocode}
+\def\FVC@LVerbatimInput#1{\FV@LUseVerbatim{\FV@Input{#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% Frames:
+%
+% \begin{macro}{\FV@Frame@none}
+% \begin{macrocode}
+\def\FV@Frame@none{%
+ \let\FV@BeginListFrame\relax
+ \let\FV@LeftListFrame\relax
+ \let\FV@RightListFrame\relax
+ \let\FV@EndListFrame\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@Frame@single}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@Frame@lines}
+% \begin{macrocode}
+\def\FV@Frame@lines{%
+ \let\FV@BeginListFrame\FV@BeginListFrame@Lines
+ \let\FV@LeftListFrame\relax
+ \let\FV@RightListFrame\relax
+ \let\FV@EndListFrame\FV@EndListFrame@Lines}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@Frame@topline}
+% \begin{macrocode}
+\def\FV@Frame@topline{%
+ \let\FV@BeginListFrame\FV@BeginListFrame@Lines
+ \let\FV@LeftListFrame\relax
+ \let\FV@RightListFrame\relax
+ \let\FV@EndListFrame\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@Frame@bottomline}
+% \begin{macrocode}
+\def\FV@Frame@bottomline{%
+ \let\FV@BeginListFrame\relax
+ \let\FV@LeftListFrame\relax
+ \let\FV@RightListFrame\relax
+ \let\FV@EndListFrame\FV@EndListFrame@Lines}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v2.6}{1998/07/17}{Add ``leftline'' value for the ``frame'' parameter
+% (idea taken from a requirement of
+% Christophe Roudet on June 9, 1998).}
+%
+% \ifChangeBar\begin{changebar}\fi
+% \begin{macro}{\FV@Frame@leftline}
+% \begin{macrocode}
+%% 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}
+% \end{macrocode}
+% \end{macro}
+% \ifChangeBar\end{changebar}\fi
+%
+% \changes{v2.6}{1998/07/17}{Add the ``label'' and ``labelposition'' parameters
+% (suggested by Michael Friendly on May 15, 1998).}
+%
+% \ifChangeBar\begin{changebar}\fi
+% \begin{macro}{\FV@BeginListFrame@Single}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@Label}
+% \begin{macrocode}
+%% 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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@Label@i}
+% \begin{macrocode}
+\def\FV@Label@i{\@ifnextchar[{\FV@Label@ii}{\FV@Label@ii[]}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@Label@ii}
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fvset{label=none}
+% \end{macrocode}
+%
+% \begin{macro}{\FV@LabelPosition}
+% \begin{macrocode}
+\define@key{FV}{labelposition}[none]{%
+ \@ifundefined{FV@LabelPosition@#1}%
+ {\FV@Error{Label position `#1' not defined.}\FV@eha}%
+ {\@nameuse{FV@LabelPosition@#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@LabelPosition@none}
+% \begin{macrocode}
+\def\FV@LabelPosition@none{%
+ \let\FV@LabelPositionTopLine\relax%
+ \let\FV@LabelPositionBottomLine\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@LabelPosition@topline}
+% \begin{macrocode}
+\def\FV@LabelPosition@topline{%
+ \def\FV@LabelPositionTopLine{\@ne}%
+ \let\FV@LabelPositionBottomLine\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@LabelPosition@bottomline}
+% \begin{macrocode}
+\def\FV@LabelPosition@bottomline{%
+ \let\FV@LabelPositionTopLine\relax%
+ \def\FV@LabelPositionBottomLine{\@ne}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@LabelPosition@all}
+% \begin{macrocode}
+\def\FV@LabelPosition@all{%
+ \def\FV@LabelPositionTopLine{\@ne}%
+ \def\FV@LabelPositionBottomLine{\@ne}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fvset{labelposition=topline}
+%% DG/SR modification end
+% \end{macrocode}
+%
+% \begin{macro}{\FV@SingleFrameLine}
+% \begin{macrocode}
+%% 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}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@FrameLineWithLabel}
+% \begin{macrocode}
+%% 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
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@BeginListFrame@Lines}
+% \begin{macrocode}
+\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}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@EndListFrame@Lines}
+% \begin{macrocode}
+\def\FV@EndListFrame@Lines{%
+ \begingroup
+ \baselineskip\z@skip
+ \kern\FV@FrameSep\relax
+%% DG/SR modification begin - May. 19, 1998
+%% \FV@SingleFrameLine
+ \FV@SingleFrameLine{\@ne}%
+%% DG/SR modification end
+ \endgroup}
+% \end{macrocode}
+% \end{macro}
+% \ifChangeBar\end{changebar}\fi
+%
+% \begin{macro}{\FV@SingleFrameSep}
+% \begin{macrocode}
+\def\FV@SingleFrameSep{%
+ \hbox to \z@{%
+ \kern\leftmargin
+ \hbox to\linewidth{%
+ \FancyVerbRuleColor{%
+%% DG modification begin - June 18, 1997 (\FV@FrameSep missing)
+ \ifx\FancyVerbFillColor\relax
+ \vrule\@width 0pt\@height\FV@FrameSep\relax
+ \fi
+%% DG modification end
+ \vrule\@width\FV@FrameRule\relax
+ \ifx\FancyVerbFillColor\relax
+ \hfil
+ \else
+ {\FancyVerbFillColor\leaders\hrule\@height\FV@FrameSep\hfil}%
+ \fi
+%% DG modification begin - June 18, 1997 (\FV@FrameSep missing)
+ \ifx\FancyVerbFillColor\relax
+ \vrule\@width 0pt\@height\FV@FrameSep\relax
+ \fi
+%% DG modification end
+ \vrule\@width\FV@FrameRule\relax}}%
+ \hss}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@LeftListFrame@Single}
+% \begin{macrocode}
+\def\FV@LeftListFrame@Single{%
+ \strut
+ {\FancyVerbRuleColor{\vrule \@width\FV@FrameRule}}%
+ \FV@FrameFillLine
+%% DG modification begin - June 18, 1997 (to fill color on left side)
+%% \kern\FV@FrameSep}
+ \ifx\FancyVerbFillColor\relax
+ \kern\FV@FrameSep
+ \else
+ {\noexpand\leavevmode\FancyVerbFillColor{\vrule\@width\FV@FrameSep}}%
+ \fi}
+%% DG modification end
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@RightListFrame@Single}
+% \begin{macrocode}
+\def\FV@RightListFrame@Single{%
+%% DG modification begin - June 18, 1997 (to fill color on right side)
+%% \kern\FV@FrameSep
+ \ifx\FancyVerbFillColor\relax
+ \kern\FV@FrameSep
+ \else
+ {\noexpand\leavevmode\FancyVerbFillColor{\vrule\@width\FV@FrameSep}}%
+ \fi
+ {\noexpand\leavevmode\FancyVerbRuleColor{\vrule\@width\FV@FrameRule}}}
+%% DG modification end
+% \end{macrocode}
+% \end{macro}
+%
+% \ifChangeBar\begin{changebar}\fi
+% \begin{macro}{\FV@EndListFrame@Single}
+% \begin{macrocode}
+\def\FV@EndListFrame@Single{%
+ \penalty\@M
+ \FV@SingleFrameSep
+ \penalty\@M
+%% DG/SR modification begin - May. 19, 1998
+%% \FV@SingleFrameLine}
+ \FV@SingleFrameLine{\@ne}}
+%% DG/SR modification end
+% \end{macrocode}
+% \end{macro}
+% \ifChangeBar\end{changebar}\fi
+%
+% \begin{macro}{\FV@FrameRule}
+% \begin{macrocode}
+\define@key{FV}{framerule}{%
+ \@tempdima=#1\relax
+ \edef\FV@FrameRule{\number\@tempdima sp\relax}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\KV@FV@framerule@default}
+% \begin{macrocode}
+\def\KV@FV@framerule@default{\let\FV@FrameRule\fboxrule}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@FrameSep}
+% \begin{macrocode}
+\define@key{FV}{framesep}{%
+ \@tempdima=#1\relax
+ \edef\FV@FrameSep{\number\@tempdima sp\relax}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\KV@FV@framesep@default}
+% \begin{macrocode}
+\def\KV@FV@framesep@default{\let\FV@FrameSep\fboxsep}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fvset{framerule,framesep}
+% \end{macrocode}
+%
+% \begin{macro}{\FancyVerbRuleColor}
+% \begin{macrocode}
+\define@key{FV}{rulecolor}{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\FV@None
+ \let\FancyVerbRuleColor\relax
+ \else
+ \let\FancyVerbRuleColor\@tempa
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FancyVerbFillColor}
+% \begin{macrocode}
+\define@key{FV}{fillcolor}{%
+ \def\@tempa{#1}%
+ \ifx\@tempa\FV@None
+ \let\FancyVerbFillColor\relax
+ \else
+ \let\FancyVerbFillColor\@tempa
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fvset{rulecolor=none,fillcolor=none}
+% \end{macrocode}
+%
+% \begin{macro}{\FV@Frame@double}
+% \begin{macrocode}
+\def\FV@Frame@double{%
+ \let\FV@FrameBegin\FV@FrameBegin@double
+ \let\FV@FrameLine\FV@FrameLine@double
+ \let\FV@FrameEnd\FV@FrameEnd@double}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\define@key{FV}{frame}[none]{%
+ \@ifundefined{FV@Frame@#1}%
+ {\FV@Error{Frame style `#1' not defined.}\FV@eha}%
+ {\@nameuse{FV@Frame@#1}}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\fvset{frame=none}
+% \end{macrocode}
+%
+%
+% Code line numbers:
+%
+% \begin{macrocode}
+\newcounter{FancyVerbLine}
+% \end{macrocode}
+%
+% \begin{macro}{\FV@SetLineNo}
+% \begin{macrocode}
+\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
+%% DG/SR modification begin - Jan. 19, 1998
+%% \def\FV@SetLineNo{\c@FancyVerbLine#1}%
+ \def\FV@SetLineNo{%
+ \c@FancyVerbLine#1
+ \advance\c@FancyVerbLine\m@ne}%
+%% DG/SR modification end
+ \fi
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v2.6}{1998/07/17}{Add the ``numberblanklines'' parameter to allow
+% to don't number empty lines (suggested by
+% Philippe Esperet on April 25, 1998).}
+%
+% \ifChangeBar\begin{changebar}\fi
+% \begin{macro}{\if@FV@NumberBlankLines}
+% \begin{macrocode}
+\define@booleankey{FV}{numberblanklines}%
+ {\let\if@FV@NumberBlankLines\iftrue}
+ {\let\if@FV@NumberBlankLines\iffalse}
+\fvset{numberblanklines=true}
+% \end{macrocode}
+% \end{macro}
+% \ifChangeBar\end{changebar}\fi
+%
+% \changes{v2.6}{1998/07/17}{Correct a bug which didn't allow to use the label
+% macro in verbatim env.
+% (reported by Philippe Esperet on May 20, 1998).}
+%
+% \ifChangeBar\mbox{}\begin{changebar}\fi
+% \begin{macro}{\FV@refstepcounter}
+% \begin{macrocode}
+%% DG/SR modification begin - May. 20, 1998
+%%\def\refstepcounter#1{% Adapted from latex.ltx
+\def\FV@refstepcounter#1{%
+%% DG/SR modification end
+ \stepcounter{#1}%
+ \protected@edef\@currentlabel
+ {\csname p@#1\endcsname\arabic{FancyVerbLine}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@StepLineNo}
+% \begin{macrocode}
+\def\FV@StepLineNo{%
+ \FV@SetLineNo
+%% DG/SR modification begin - Apr. 28, 1998 and May 20, 1998
+%% \def\FV@StepLineNo{\refstepcounter{FancyVerbLine}}%
+ \def\FV@StepLineNo{%
+ \if@FV@NumberBlankLines
+ \FV@refstepcounter{FancyVerbLine}
+ \else
+ \ifx\FV@Line\empty
+ \else
+ \FV@refstepcounter{FancyVerbLine}
+ \fi
+ \fi}%
+%% DG/SR modification end
+ \FV@StepLineNo}
+% \end{macrocode}
+% \end{macro}
+% \ifChangeBar\end{changebar}\mbox{}\fi
+%
+% \begin{macro}{\theFancyVerbLine}
+% \begin{macrocode}
+%% DG/SR modification begin - 1995
+%%\def\theFancyVerbLine{\rm\tiny\arabic{FancyVerbLine}}
+\def\theFancyVerbLine{\rmfamily\tiny\arabic{FancyVerbLine}}
+%% DG/SR modification end
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\define@key{FV}{numbers}[none]{%
+ \@ifundefined{FV@Numbers@#1}%
+ {\FV@Error{Numbers style `#1' not defined.}\FV@eha}%
+ {\@nameuse{FV@Numbers@#1}}}
+% \end{macrocode}
+%
+% (D.G. -- Dec. 20, 1995 and Jan. 28, 1998):
+%
+% Add-on to allow a step when printing the lines counter
+% (``\texttt{stepnumber''} keyword)
+%
+% Add-on to allow the counter to be printed on right side
+% (\texttt{numbers=right})
+%
+% \begin{macro}{\FV@Numbers@none}
+% \begin{macrocode}
+%% DG modification begin - Dec. 20, 1995 and Jan. 28, 1998
+%%\def\FV@Numbers@none{\let\FV@LeftListNumber\relax}
+\def\FV@Numbers@none{%
+\let\FV@LeftListNumber\relax
+\let\FV@RightListNumber\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\newcount\FV@StepNumber
+\define@key{FV}{stepnumber}{\FV@StepNumber#1}
+% \end{macrocode}
+%
+% \begin{macro}{\KV@FV@stepnumber@default}
+% \begin{macrocode}
+\def\KV@FV@stepnumber@default{\FV@StepNumber\@ne}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fvset{stepnumber}
+% \end{macrocode}
+%
+% ^^A `changebar' bug... \ifChangeBar\mbox{}\begin{changebar}\fi
+% \begin{macro}{\FV@Numbers@left}
+% \begin{macrocode}
+%% DG modification begin - Dec. 20, 1995
+%%\def\FV@Numbers@left{%
+%% \def\FV@LeftListNumber{\hbox to\z@{%
+%% \hss\theFancyVerbLine\kern\FV@NumberSep}}}
+\def\FV@Numbers@left{%
+%% DG/SR modification begin - Apr. 28, 1998
+ \let\FV@RightListNumber\relax
+%% DG/SR modification end
+ \def\FV@LeftListNumber{%
+ \@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@{\hss\theFancyVerbLine\kern\FV@NumberSep}%
+ \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
+%% DG/SR modification end
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+% ^^A `changebar' bug... \ifChangeBar\end{changebar}\fi
+%
+% \ifChangeBar\begin{changebar}\fi
+% \begin{macro}{\FV@Numbers@right}
+% \begin{macrocode}
+\def\FV@Numbers@right{%
+%% DG/SR modification begin - Apr. 28, 1998
+ \let\FV@LeftListNumber\relax
+%% DG/SR modification end
+ \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
+% \end{macrocode}
+% \end{macro}
+% \ifChangeBar\end{changebar}\fi
+%
+% \begin{macro}{\FV@NumberSep}
+% \begin{macrocode}
+\define@key{FV}{numbersep}{%
+ \@tempdima=#1\relax
+ \edef\FV@NumberSep{\number\@tempdima sp\relax}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fvset{numbers=none,numbersep=12pt,firstnumber=auto}
+% \end{macrocode}
+%
+% \subsection{BVerbatim}
+%
+% \DescribeEnv{BVerbatim}
+% \begin{macrocode}
+\def\FV@BVerbatimBegin{%
+ \begingroup
+ \FV@UseKeyValues
+ \FV@BeginVBox
+ \let\FV@ProcessLine\FV@BProcessLine
+ \FV@FormattingPrep
+ \FV@ObeyTabsInit}%
+\def\FV@BVerbatimEnd{\FV@EndVBox\endgroup}
+% \end{macrocode}
+%
+% \begin{macro}{\FV@BeginVBox}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@EndVBox}
+% \begin{macrocode}
+\def\FV@EndVBox{\egroup\ifmmode$\fi\hfil\egroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@boxwidth}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\KV@FV@boxwidth@default}
+% \begin{macrocode}
+\def\KV@FV@boxwidth@default{\let\FV@boxwidth\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@baseline}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\fvset{baseline=b,boxwidth}
+% \end{macrocode}
+%
+% \begin{macro}{\FV@BProcessLine}
+% \begin{macrocode}
+\def\FV@BProcessLine#1{\hbox{\FancyVerbFormatLine{#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVB@BVerbatim}
+% \begin{macrocode}
+\def\FVB@BVerbatim{\FV@BVerbatimBegin\FV@Scan}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVE@BVerbatim}
+% \begin{macrocode}
+\def\FVE@BVerbatim{\FV@BVerbatimEnd}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\DefineVerbatimEnvironment{BVerbatim}{BVerbatim}{}
+% \end{macrocode}
+%
+% \begin{macro}{\FV@BUseVerbatim}
+% \begin{macrocode}
+\def\FV@BUseVerbatim#1{\FV@BVerbatimBegin#1\FV@BVerbatimEnd}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BVerbatimInput}
+% \begin{macrocode}
+\def\BVerbatimInput{\FV@Command{}{BVerbatimInput}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVC@BVerbatimInput}
+% \begin{macrocode}
+\def\FVC@BVerbatimInput#1{\FV@BUseVerbatim{\FV@Input{#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Save verbatim}
+%
+% \DescribeEnv{SaveVerbatim}
+% \begin{macrocode}
+\def\SaveVerbatim{\FV@Environment{}{SaveVerbatim}}
+% \end{macrocode}
+%
+% \begin{macro}{\FVB@SaveVerbatim}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVE@SaveVerbatim}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \DescribeEnv{SaveVerbatim}
+% \begin{macrocode}
+\DefineVerbatimEnvironment{SaveVerbatim}{SaveVerbatim}{}
+% \end{macrocode}
+%
+% \begin{macro}{\FV@CheckIfSaved}
+% \begin{macrocode}
+\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}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\UseVerbatim}
+% \begin{macrocode}
+\def\UseVerbatim{\FV@Command{}{UseVerbatim}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVC@UseVerbatim}
+% \begin{macrocode}
+\def\FVC@UseVerbatim#1{\FV@CheckIfSaved{#1}{\FV@UseVerbatim}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\LUseVerbatim}
+% \begin{macrocode}
+\def\LUseVerbatim{\FV@Command{}{LUseVerbatim}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVC@LUseVerbatim}
+% \begin{macrocode}
+\def\FVC@LUseVerbatim#1{\FV@CheckIfSaved{#1}{\FV@LUseVerbatim}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\BUseVerbatim}
+% \begin{macrocode}
+\def\BUseVerbatim{\FV@Command{}{BUseVerbatim}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVC@BUseVerbatim}
+% \begin{macrocode}
+\def\FVC@BUseVerbatim#1{\FV@CheckIfSaved{#1}{\FV@BUseVerbatim}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Verbatim out}
+%
+% \begin{macrocode}
+\newwrite\FV@OutFile
+% \end{macrocode}
+%
+% \begin{macro}{\VerbatimOut}
+% \begin{macrocode}
+\def\VerbatimOut{\FV@Environment{}{VerbatimOut}}
+% \end{macrocode}
+% \end{macro}
+%
+% \ifChangeBar\begin{changebar}\fi
+% \begin{macro}{\FVB@VerbatimOut}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+% \ifChangeBar\end{changebar}\fi
+%
+% \begin{macro}{\FVE@VerbatimOut}
+% \begin{macrocode}
+\def\FVE@VerbatimOut{\immediate\closeout\FV@OutFile\endgroup\@esphack}
+% \end{macrocode}
+% \end{macro}
+%
+% \DescribeEnv{VerbatimOut}
+% \begin{macrocode}
+\DefineVerbatimEnvironment{VerbatimOut}{VerbatimOut}{}
+% \end{macrocode}
+%
+% \begin{macro}{\FV@DefineTabOut}
+% \begin{macrocode}
+\def\FV@DefineTabOut{%
+ \def\FV@Tab{}%
+ \@tempcnta=\FancyVerbTabSize\relax
+ \loop\ifnum\@tempcnta>\z@
+ \edef\FV@Tab{\FV@Tab\space}%
+ \advance\@tempcnta\m@ne
+ \repeat}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Short verbatim}
+%
+% \cs{SaveVerb}
+%
+% Note ``\verb+\outer\def^^M{}+''. This is so that verbatim commands report an
+% error when encountering an end-of-line, rather than scanning to
+% the end of the file each time there is a missing verbatim delimiter.
+%
+% If scanning fails (and thus \TeX{} ignores \cs{FV@GetVerb}), \verb+#1+ is
+% defined to be empty, a group is ended, but \cs{FancyVerbAfterSave} is not
+% invoked.
+%
+% \begin{macro}{\FV@Command}
+% \begin{macrocode}
+\def\SaveVerb{\FV@Command{}{SaveVerb}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVC@SaveVerb}
+% \begin{macrocode}
+\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
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@EOL}
+% \begin{macrocode}
+\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.}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FancyVerbAfterSave}
+% \begin{macrocode}
+\define@key{FV}{aftersave}{\def\FancyVerbAfterSave{#1}}
+\fvset{aftersave=}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FV@UseVerb}
+% \begin{macrocode}
+\def\FV@UseVerb#1{\mbox{\FV@UseKeyValues\FV@FormattingPrep#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\UseVerb}
+% \begin{macrocode}
+\def\UseVerb{\FV@Command{}{UseVerb}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVC@UseVerb}
+% \begin{macrocode}
+\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}}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Verb}
+% \begin{macrocode}
+\def\Verb{\FV@Command{}{Verb}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVC@Verb}
+% \begin{macrocode}
+\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
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DefineShortVerb}
+% \begin{macrocode}
+\def\DefineShortVerb{\FV@Command{}{DefineShortVerb}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVC@DefineShortVerb}
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVC@@DefineShortVerb}
+% \begin{macrocode}
+\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}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\UndefineShortVerb}
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v2.6}{1998/07/17}{Correct a bug to undefine the macro associated
+% to short verbatim character
+% (reported by Mikhail Kolodin on June 12, 1998).}
+%
+% \ifChangeBar\begin{changebar}\fi
+% \begin{macro}{\FV@UndefineShortVerb}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+% \ifChangeBar\end{changebar}\fi
+%
+% Moving verbatim. Need to worry about using separate identifier
+% for this class of verbatim, and
+%
+% \begin{macro}{\SaveMVerb}
+% \begin{macrocode}
+\def\SaveMVerb{\FV@Command{}{SaveMVerb}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVC@SaveMVerb}
+% \begin{macrocode}
+\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
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SaveGVerb}
+% \begin{macrocode}
+\def\SaveGVerb{\FV@Command{}{SaveGVerb}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVC@SaveGVerb}
+% \begin{macrocode}
+\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
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\UseMVerb}
+% \begin{macrocode}
+\def\UseMVerb{\protect\pUseMVerb}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pUseMVerb}
+% \begin{macrocode}
+\def\pUseMVerb{\FV@Command{}{pUseMVerb}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FVC@pUseMVerb}
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\expandafter\ifx\csname documentclass\endcsname\relax
+% \end{macrocode}
+%
+% \DescribeEnv{lrbox}
+% \begin{macrocode}
+ \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}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% \begin{macrocode}
+%% DG/SR modification begin - Jan. 22, 1998
+%%\@input{fancyvrb.rc}
+\@input{fancyvrb.cfg}
+%% DG/SR modification end
+% \end{macrocode}
+%
+% \noindent Unused code - don't take care! (DG/SR)
+%
+% \noindent Error messages to void:
+%
+% \begin{verbatim}
+% \FV@CheckBadBegin
+% \FV@CheckBadEnd
+%
+% \define@key{FV}{noligs}{%
+% \def\FV@ActiveLigs{}%
+% \def\FV@DefineLigs{}%
+% \@tfor\@tempa:=#1\do{%
+% {\lccode`\~=`#1\relax\lowercase{\gdef\@tempg{~}}}%
+% \expandafter\FV@addtonoligs\@tempg}}
+% \def\FV@addtonoligs#1{%
+% \expandafter\def\expandafter\FV@ActiveLigs\expandafter{%
+% \FV@ActiveLigs\catcode`#1=\active}%
+% \expandafter\def\expandafter\FV@DefineLigs\expandafter{%
+% \FV@DefineLigs\edef#1{{\string#1}}}}
+%
+% \fvset{suppressligs=\'}
+%
+% \fvset{noligs={>,-}}
+% \fvset{suppressligs=\>}
+% \fvset{suppressligs=\<}
+%
+% \def\FV@Error#1#2{%
+% \edef\@tempc{#2}\expandafter\errhelp\expandafter{\@tempc}%
+% \typeout{%
+% ^^J** FancyVerb Error:\space\space
+% Type \space H <return> \space for immediate help. **}%
+% \errmessage{#1^^J}}
+% \end{verbatim}
+%
+%</fancyvrb>
+%
+% \Finale
+% \PrintIndex
+% \PrintChanges
+%
+\endinput
+%%
+%% End of file `fancyvrb.dtx'
diff --git a/Master/texmf-dist/source/latex/fancyvrb/fancyvrb.ins b/Master/texmf-dist/source/latex/fancyvrb/fancyvrb.ins
new file mode 100644
index 00000000000..4f6e0bae73d
--- /dev/null
+++ b/Master/texmf-dist/source/latex/fancyvrb/fancyvrb.ins
@@ -0,0 +1,35 @@
+%% `fancyvrb.ins'
+%%
+%% Docstrip installation instruction file for docstyle `fancyvrb'
+%%
+%% Timothy Van Zandt (Princeton University - USA) <tvz@Princeton.EDU>
+%% June 24, 1998
+
+\def\batchfile{fancyvrb.ins}
+\input docstrip.tex
+\keepsilent
+\Msg{*** Generating the `fancyvrb' package ***}
+\askforoverwritefalse
+\generate{\file{fancyvrb.sty}{\from{fancyvrb.dtx}{fancyvrb}}}
+
+\ifToplevel{%
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the file}
+\Msg{* fancyvrb.sty searched by TeX.}
+\Msg{*}
+\Msg{* To produce the documentation, run the file `fvrb-ex.dtx'}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* If you require the commented code, desactivating the}
+\Msg{* OnlyDescription macro, you must recompile, execute:}
+\Msg{* `makeindex -s PATH/gind.ist fancyvrb'}
+\Msg{* `makeindex -s PATH/gglo.ist -o fancyvrb.gls fancyvrb.glo'}
+\Msg{* and recompile.}
+\Msg{*}
+\Msg{***********************************************************}
+}
+
+\endinput
+%%
+%% End of file `fancyvrb.ins'
diff --git a/Master/texmf-dist/source/latex/fancyvrb/fvrb-ex.dtx b/Master/texmf-dist/source/latex/fancyvrb/fvrb-ex.dtx
new file mode 100644
index 00000000000..c50703b2b04
--- /dev/null
+++ b/Master/texmf-dist/source/latex/fancyvrb/fvrb-ex.dtx
@@ -0,0 +1,1564 @@
+% \iffalse meta-comment, etc.
+%%
+%% 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
+%%
+% \fi
+%
+% \changes{v1.7}{1998/03/26}{First public release.}
+% \changes{v0.1}{1995}{First personal version.}
+%
+% \CheckSum{1322}
+%
+% \newif\ifmulticols
+% \IfFileExists{multicol.sty}{\multicolstrue}{}
+% \newif\ifpstricks
+% \IfFileExists{pstricks.sty}{\pstrickstrue}{}
+%
+% \DoNotIndex{\\,\^,\£,\§,\µ,\¶} ^^A Unefficient...
+% \DoNotIndex{\@defpar,\@gobble,\@ifnextchar,\@tempdimb}
+% \DoNotIndex{\active,\advance,\Answer@No,\Answer@Yes,\author}
+% \DoNotIndex{\begin,\begingroup,\box}
+% \DoNotIndex{\catcode,\center,\circle,\CodelineIndex,\color,\ColorVersion}
+% \DoNotIndex{\date,\DeclareOption,\def,\DocInput,\documentclass,\dp}
+% \DoNotIndex{\else,\EnableCrossrefs,\end,\endcenter,\endgroup,\endinput}
+% \DoNotIndex{\endpspicture,\expandafter}
+% \DoNotIndex{\fboxsep,\fcolorbox,\fi,\filedate,\fileversion,\footnotesize}
+% \DoNotIndex{\FV@XRightMargin,\fvset,\GetFileInfo,\hbadness,\hbox,\hfuzz}
+% \DoNotIndex{\iden,\IfFileExists,\ifmmode,\ifpstricks,\ifx,\input}
+% \DoNotIndex{\jobname,\large}
+% \DoNotIndex{\m@th,\maketitle,\mathbf,\mathit,\mathnormal}
+% \DoNotIndex{\mathsl,\mathtt,\message,\mu,\multiply}
+% \DoNotIndex{\NeedsTeXFormat,\newcommand,\newif,\newpsobject,\newread}
+% \DoNotIndex{\Oldmakeindex,\OnlyDescription}
+% \DoNotIndex{\par,\parindent,\pounds,\PrintChanges,\PrintIndex}
+% \DoNotIndex{\ProcessOptions,\ProvidesPackage,\psellipse,\pspicture}
+% \DoNotIndex{\PSTricksLoaded,\pstrickstrue,\put}
+% \DoNotIndex{\Question@Color,\Question@Mark}
+% \DoNotIndex{\read,\RecordChanges,\RecustomVerbatimEnvironment,\relax}
+% \DoNotIndex{\RequirePackage}
+% \DoNotIndex{\section,\setbox,\setlength,\smallskip,\space,\strip}
+% \DoNotIndex{\textbf,\textcolor,\textit,\textsc,\textsf,\textsl,\texttt}
+% \DoNotIndex{\textwidth,\title,\topsep,\ttyin}
+% \DoNotIndex{\underline,\unitlength,\usepackage}
+% \DoNotIndex{\VerbatimEnvironment,\VerbatimInput,\vspace,\z@}
+%
+% \setcounter{IndexColumns}{2}
+%
+% \newcommand{\FVrbPackage}{`\textsf{fancyvrb}'}
+% \newcommand{\FVrbExPackage}{`\textsf{fvrb-ex}'}
+% \newcommand{\HbawPackage}{`\textsf{hbaw}'}
+% \newcommand{\HcolorPackage}{`\textsf{hcolor}'}
+%
+% \title{The `\textsf{fvrb-ex}' package\\
+% Example environments\\with the \FVrbPackage{} package}
+% \author{Denis Girou\\CNRS/IDRIS\\Orsay -- France\\
+% {\footnotesize email: Denis.Girou@idris.fr}}
+% \date{Version 1.7\\March 27, 1998\\
+% {\small Documentation revised March 27, 1998}}
+%
+% \maketitle
+%
+% \begin{abstract}
+% This package, built above the \FVrbPackage{} one (from Timothy
+% \textsc{van Zandt}), offer several kinds of the so-called \emph{example}
+% environments to format some code both in ``verbatim'' mode and in the
+% ``normal'' way, below or on the side. The advantage of such environments
+% is that the code itself is included only one time in the source code,
+% which allow to be sure of the consistence of the two versions shown.
+%
+% Some other kinds of such environments are specially devoted to graphics,
+% allowing to give the size of them. It is possible in this case to draw
+% also a grid.
+% \end{abstract}
+%
+% \ifmulticols
+% \setlength{\columnseprule}{0.6pt}
+% \begin{multicols}{2}
+% {\parskip 0pt ^^A We have to reset \parskip (bug in \LaTeX)
+% \fi
+% \tableofcontents
+% \ifmulticols
+% }
+% \end{multicols}
+% \fi
+%
+% \section{Introduction}
+%
+% These macros are based on some previous work of Timothy \textsc{van
+% Zandt}, adapted and developed to suit my personal needs.
+%
+% This package is built above the \FVrbPackage{} one (from Timothy
+% \textsc{van Zandt}), to offer some \emph{example} environments showing both
+% the code and it result. It main strength is that it allow to use all the
+% power of \FVrbPackage{}, with it great number of customization parameters.
+%
+% These macros can also be used in conjunction with the \HbawPackage{} and
+% \HcolorPackage{} packages, to allow to generate the verbatim code with
+% some \emph{highlighting} attributes to emphasize parts of the text.
+% It can also produce different effects according to the choice of a
+% \emph{colored} or \emph{black and white} version. This last facility was
+% developed for slides, to allow to generate them both in color for
+% projection and in black and white to distribute them as paper copy.
+%
+% Some special environments for graphic drawings allow to define directly
+% the size of them, without requiring to use also a \emph{picture}
+% environment. To be able to use them, the PSTricks package must be available,
+% even if these specialized environments can be used for graphics built with
+% another macro language than PSTricks.
+%
+% \begin{quote}
+% \textbf{\large Warning!} You must be aware that it has been reported
+% that this package doesn't work at all on some platforms, due to the way
+% the 8~bits characters are managed by some \TeX{} systems.
+% \end{quote}
+%
+% \section{User interface}
+%
+% \begin{quote}
+% \textbf{\large Warning!} We suppose here that you already know the
+% \FVrbPackage{} package. If not, look at it own documentation!
+% \end{quote}
+%
+% \subsection{Environments}
+%
+% \noindent Five new environments are defined:
+%
+% \begin{description}
+% \item[Example]: show the verbatim text and the formatted result below.
+% \item[CenterExample]: same than \texttt{Example}, but the result is
+% centered.
+% \item[SideBySideExample]: show the formatted result on the left and the
+% verbatim text on the right. The result is centered vertically according to
+% the text.
+% \item[PCenterExample]: same than \texttt{CenterExample}, but the
+% result is put inside a PSTricks \texttt{pspicture} environment. It is
+% undefined if PSTricks is not available. It is specially devoted to graphic
+% drawings, but not specially built with PSTricks itself. It require to
+% specify the dimensions of the graphic. In fact, it is the same thing than
+% to use the \texttt{CenterExample} environment and to put the material
+% inside a \LaTeX{} \texttt{picture} or PSTricks \texttt{pspicture}
+% environment, but it can be more convenient to have not to specify this
+% one explicitely.
+% \item[PSideBySideExample]: same than \texttt{SideBySideExample}, but the
+% result is put inside a PSTricks \texttt{pspicture} environment. The
+% preceding comments for \texttt{PCenterExample} are of course also valid
+% for it.
+% \end{description}
+%
+% \noindent The syntax of the first three is:
+%
+% \begin{Verbatim}
+% \begin{EnvironmentName}[optional_fancyvrb_arguments]
+% ..................................................
+% \end{EnvironmentName}
+% \end{Verbatim}
+%
+% \noindent and for the two last ones:
+%
+% \begin{Verbatim}
+% \begin{EnvironmentName}[opt_fvrb_args][(x_min,y_min)](x_max,y_max)
+% ................................................................
+% \end{EnvironmentName}
+% \end{Verbatim}
+%
+% In these last cases, default values for \verb+x_min+ and \verb+y_min+ are
+% 0.
+%
+% \subsection{Loading options}
+%
+% \begin{description}
+% \item[baw] : allow highlighting for a \emph{b}lack \emph{a}nd \emph{w}hite
+% version. In this case the \HbawPackage{} will be loaded and it definitions
+% will be active to emphasize texts.
+% \item[color] : allow highlighting for a \emph{color} version. In this case
+% the \HcolorPackage{} will be loaded and it definitions will be active to
+% emphasize texts.
+% \item[bawcolor] : doesn't specify in the file if it will be a \emph{b}lack
+% \emph{a}nd \emph{w}hite or a \emph{color} version to generate. A question
+% will be asked interactively at compile time. This allow to generate at
+% choice one of the two versions without any change in the file.
+% \item[pstricks] : require the loading of PSTricks (which of course must be
+% available on the system) to be able to use the special environments
+% devoted to graphics (but not at all mandatory PSTricks graphics).
+% \end{description}
+%
+% Of course, these three keywords are mutually exclusive. If none of the
+% \texttt{baw}, \texttt{color} or \texttt{bawcolor} keyword is specified,
+% none of the supplementary files will be loaded.
+%
+% \subsection{\FVrbPackage{} options imposed}
+%
+% \noindent The following \FVrbPackage{} parameters are imposed:
+%
+% \begin{description}
+% \item[gobble=2]: each line inside these environments is supposed to be
+% indented by 2 characters. It only concern the aspect of the source code,
+% which will be more readable like that.
+% \item[numbersep=3pt]: it will be effective only if \texttt{numbers=left}
+% or \texttt{numbers=right} will be chosen.
+% \item[commentchar=W]: it is the comment character for the source text,
+% which will not be printed in the verbatim part, but executed in the
+% formatted part. So, it allow to have the example not generated by the code
+% shown, which can be surprising for readers and must be used only with
+% care in special circumstances! Character chosen is 163 (£). If it cannot
+% be used on your system or if you have it inside your verbatim text, you
+% must change it by yourself in the package file.
+% \item[commandchars=XYZ]: respectively the \emph{escape}, \emph{beginning
+% of group} and \emph{end of group} characters, to allow escape sequences
+% (\LaTeX{} commands as font and color changes) to be applied on the
+% verbatim text, using the \HbawPackage{} or \HcolorPackage{} packages.
+% These characters are specially chosen to probably be used by nobody in
+% their codes... Characters chosen are those of codes 167, 181 and 182
+% (§µ¶). If they cannot be used on your system or if you have some of them
+% inside your verbatim text, you must made yourself the relevant changes in
+% the three files of the package.
+% \end{description}
+%
+% \section{Usage examples}
+%
+% \subsection{Usage of the environments}
+%
+% \RecustomVerbatimEnvironment{Verbatim}{Verbatim}
+% {gobble=4,commentchar=£,numbers=left,numbersep=3pt,frame=single}
+%
+% \begin{Verbatim}
+% \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}
+%
+% \vspace{5mm}
+% It is possible to customize the verbatim environments as in the standard
+% way defined by \FVrbPackage{}, locally as argument of the
+% environment\footnote{Take care that you must define these parameters
+% directly for the \texttt{Example}, \texttt{CenterExample} and
+% \texttt{SideBySideExample} environments, but that you must put them inside
+% a \cs{fvset} macro for the \texttt{PCenterExample} and
+% \texttt{PSideBySideExample} ones, as in these cases you can also specify
+% some PSTricks parameters, using the \cs{psset} macro.},
+% or globally using the \cs{fvset} command.
+%
+% \begin{Verbatim}
+% \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}
+%
+% \begin{Verbatim}
+% \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}
+%
+% \newlength\MyLength
+% \MyLength=\textwidth
+% \advance\MyLength -4.7cm
+%
+% \noindent
+% \begin{minipage}{4.7cm}
+% \begin{SideBySideExample}[xrightmargin=3cm,numbers=left]
+% First
+% Second
+% \end{SideBySideExample}
+% \end{minipage}%
+% \begin{minipage}{\MyLength}
+% \begin{Verbatim}
+% \begin{SideBySideExample}
+% [xrightmargin=3cm,numbers=left]
+% First
+% Second
+% \end{SideBySideExample}
+% \end{Verbatim}
+% \end{minipage}
+%
+% \ifpstricks ^^A If PSTricks is available
+% \vspace{5mm}
+% As explained, the \texttt{PCenterExample} and \texttt{PSideBySideExample}
+% environments, specially devoted to graphics, put their contents inside a
+% PSTricks \texttt{pspicture} environment\footnote{The $*$ convention of the
+% \texttt{pspicture} environment is not accepted here.}. So, we must define
+% the size of it.
+%
+% \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}
+% \end{Verbatim}
+%
+% \begin{PCenterExample}[frame=lines,framerule=0.5mm,numbers=left]%
+% (-0.5,-0.5)(0.5,0.5)
+% \setlength{\unitlength}{1cm}
+% \put(0,0){\circle{1}}
+% \end{PCenterExample}
+%
+% \noindent So, it is the same thing than to do:
+%
+% \begin{Verbatim}
+% \fvset{frame=lines,framerule=0.5mm,numbers=left}
+%
+% \begin{CenterExample}
+% \setlength{\unitlength}{1cm}
+% \begin{picture}(1,1)(-0.5,-0.5)
+% \put(0,0){\circle{1}}
+% \end{picture}
+% \end{CenterExample}
+% \end{Verbatim}
+%
+% \begin{CenterExample}[frame=lines,framerule=0.5mm,numbers=left]
+% \setlength{\unitlength}{1cm}
+% \begin{picture}(1,1)(-0.5,-0.5)
+% \put(0,0){\circle{1}}
+% \end{picture}
+% \end{CenterExample}
+%
+% Using the\cs{showgrid} macro, we can require to superpose the graphic
+% above a grid, which can help to built it as desired. The size of the
+% picture must be at least of 1 unit in this case, and the grid is rounded to
+% the next greater integer.
+%
+% \begin{Verbatim}
+% \showgrid
+% \begin{PCenterExample}[frame=single,numbers=left](-1,-1)(1,1)
+% \setlength{\unitlength}{1cm}
+% \put(0,0){\circle{1}}
+% \end{PCenterExample}
+% \end{Verbatim}
+%
+% {\showgrid
+% \begin{PCenterExample}[frame=single,numbers=left](-1,-1)(1,1)
+% \setlength{\unitlength}{1cm}
+% \put(0,0){\circle{1}}
+% \end{PCenterExample}
+% }
+%
+% \begin{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}
+% \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}
+% }
+%
+% \vspace{5mm}
+% The special £ character defined as the comment for \FVrbPackage{} must be
+% used with care, as it allow to change the code run in the formatted part
+% without showing these changes in the verbatim part. So, the code shown will
+% not correspond any more in this case to the one which produce the result...
+% (we must take care also to do not indent these lines, otherwise we will
+% change the formatting...).
+%
+% Nevertheless, in very special circumstances, it allow to do special tricks.
+%
+% \begin{Verbatim}[commentchar=Z]
+% \begin{CenterExample}[frame=lines,framerule=0.5mm]
+% First verbatim line.
+% £\textit{%
+% Second verbatim line.
+% £}
+% £\LARGE
+% Third verbatim line.
+% \end{CenterExample}
+% \end{Verbatim}
+%
+% \begin{CenterExample}[frame=lines,framerule=0.5mm]
+% First verbatim line.
+% £\textit{%
+% Second verbatim line.
+% £}
+% £\LARGE
+% Third verbatim line.
+% \end{CenterExample}
+%
+% \else ^^A If PSTricks is not available
+% \begin{quote}
+% \textbf{\large Warning!} The \texttt{PCenterExample} and
+% \texttt{PSideBySideExample} are not demonstrated here, because PSTricks
+% was not found on your platform.
+% \end{quote}
+% \fi
+%
+% \subsection{Usage of the \HbawPackage{} and \HcolorPackage{} packages}
+%
+% If the option \texttt{baw}, \texttt{color} or \texttt{bawcolor} is chosen,
+% we can use special commands to emphasize text in the verbatim formatting.
+% It allow mainly to change the font or the color of special parts of the text.
+%
+% \noindent Here we suppose that the package option \texttt{baw} for the
+% \FVrbExPackage{} has been chosen:
+%
+% \begin{Verbatim}
+% \begin{CenterExample}[frame=single,numbers=right]
+% §HLaµFirst¶ verbatim line.
+% §HLbµSecond¶ verbatim line.
+% §HLCBWzµThird¶ verbatim line.
+% \end{CenterExample}
+% \end{Verbatim}
+%
+% \begin{CenterExample}[frame=single,numbers=right]
+% §HLaµFirst¶ verbatim line.
+% §HLbµSecond¶ verbatim line.
+% §HLCBWzµThird¶ verbatim line.
+% \end{CenterExample}
+%
+% \ifpstricks ^^A If PSTricks is available
+% \begin{Verbatim}
+% \fvset{frame=single}
+% \begin{PSideBySideExample}[xrightmargin=5.5cm](-2,-1)(2,1)
+% \psellipse[linestyle=§HLCBWzµdashed¶](2,1)
+% \end{PSideBySideExample}
+%
+% \begin{PSideBySideExample}[xrightmargin=4.5cm](-2,-1)(2,1)
+% \psellipse[linestyle=§HLbµdotted¶](2,1)
+% \end{PSideBySideExample}
+% \end{Verbatim}
+%
+% {\fvset{frame=single}
+% \begin{PSideBySideExample}[xrightmargin=5.5cm](-2,-1)(2,1)
+% \psellipse[linestyle=§HLCBWzµdashed¶](2,1)
+% \end{PSideBySideExample}
+%
+% \begin{PSideBySideExample}[xrightmargin=4.5cm](-2,-1)(2,1)
+% \psellipse[linestyle=§HLbµdotted¶](2,1)
+% \end{PSideBySideExample}
+% }
+% \fi
+%
+% \subsection{Thanks}
+%
+% I thank you Sebastian \textsc{Rahtz} \verb+<s.rahtz@elsevier.co.uk>+,
+% Thomas \textsc{Siegel} \verb+<siegel@aix520.informatik.uni-leipzig.de>+ and
+% Rolf \textsc{Niepraschk}\break\relax \verb+<niepraschk@ptb.de>+ for their
+% tests and comments on preliminary versions of this package.
+%
+% \StopEventually{}
+%
+% ^^A .................... End of the documentation part ....................
+%
+% \section{Driver file}
+%
+% The next bit of code contains the documentation driver file for \TeX{},
+% i.e., the file that will produce the documentation you are currently
+% reading. It will be extracted from this file by the \texttt{docstrip}
+% program.
+%
+% \begin{macrocode}
+%<*driver>
+\documentclass{ltxdoc}
+\GetFileInfo{fvrb-ex.dtx}
+\IfFileExists{pstricks.sty}{\usepackage[baw,pstricks]{fvrb-ex}}%
+ {\usepackage[baw]{fvrb-ex}}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\OnlyDescription % Comment it for implementation details
+%\Oldmakeindex % Uncomment if your MakeIndex is pre-0.9
+\hbadness=7000 % Over and under full box warnings
+\begin{document}
+ % To be able to use the letter "mu"
+ \catcode`\µ=\active
+ \defµ{$\mu$}
+ % To be able to use the letter "pound"
+ \catcode`\£=\active
+ \def£{$\pounds$}
+ \DocInput{fvrb-ex.dtx}
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% \section{\FVrbExPackage{} code}
+%
+%<*fvrb-ex>
+%
+% \iffalse meta-comment, etc.
+%% Package `fvrb-ex'
+%%
+% \fi
+%
+% \subsection{Preambule and options management}
+%
+% What we need.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+% \end{macrocode}
+%
+% Who we are.
+% \begin{macrocode}
+\def\fileversion{1.7}
+\def\filedate{1998/03/26}
+\ProvidesPackage{fvrb-ex}[\filedate]
+\message{`fvrb-ex' v\fileversion, \filedate\space (Denis Girou)}
+% \end{macrocode}
+%
+% Require the \FVrbPackage{} package.
+% \begin{macrocode}
+\RequirePackage{fancyvrb}
+% \end{macrocode}
+%
+% Require PSTricks if specified (to define the \texttt{PCenterExample} and
+% \texttt{PSideBySideExample} environments).
+% \begin{macrocode}
+\DeclareOption{pstricks}{%
+\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi}
+% \end{macrocode}
+%
+% Declaration of the explicit black and white version.
+% \begin{macrocode}
+\DeclareOption{baw}{\def\ColorVersion{n}}
+% \end{macrocode}
+%
+% Declaration of the explicit color version.
+% \begin{macrocode}
+\DeclareOption{color}{\def\ColorVersion{y}}
+% \end{macrocode}
+%
+% Declaration option to choose black and white or color version.
+% \begin{macrocode}
+\DeclareOption{bawcolor}{\def\ColorVersion{?}}
+% \end{macrocode}
+%
+% Process the options.
+% \begin{macrocode}
+\ProcessOptions
+% \end{macrocode}
+%
+% To ask an interactive question if necessary (code from `docstrip').
+% \begin{macrocode}
+\newread\ttyin
+\def\iden#1{#1}
+\def\strip#1#2 \@gobble{\def #1{#2}}
+\def\@defpar{\par}
+\def\@gobble#1{}
+\def\Ask#1#2{%
+\message{#2}\read\ttyin to #1\ifx#1\@defpar\def#1{}\else
+\iden{\expandafter\strip\expandafter#1#1\@gobble\@gobble} \@gobble\fi}
+% \end{macrocode}
+%
+% To be able to ask later to choose between color and black and white version.
+% \begin{macro}{\Answer@Yes}
+% \begin{macrocode}
+\def\Answer@Yes{y}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Answer@No}
+% \begin{macrocode}
+\def\Answer@No{n}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Question@Mark}
+% \begin{macrocode}
+\def\Question@Mark{?}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Question@Color}
+% \begin{macrocode}
+\def\Question@Color{Color version? (y=yes)}
+% \end{macrocode}
+% \end{macro}
+%
+% For the highlighting style (color or black and white version), if defined.
+%
+% \begin{macro}{\Highlight@Attributes}
+% \begin{macrocode}
+\def\Highlight@Attributes{} % Default=nothing
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NoHighlight@Attributes}
+% \begin{macrocode}
+\def\NoHighlight@Attributes{} % Default=nothing
+% \end{macrocode}
+% \end{macro}
+%
+% Forced choice of the \emph{black and white} version.
+% \begin{macrocode}
+\ifx\ColorVersion\Answer@Yes
+ \RequirePackage{color} % Standard LaTeX `color' package
+ \RequirePackage{hcolor} % Color version
+\fi
+% \end{macrocode}
+%
+% Forced choice of the \emph{color} version.
+% \begin{macrocode}
+\ifx\ColorVersion\Answer@No
+ \RequirePackage{color} % Standard LaTeX `color' package
+ \RequirePackage{hbaw} % Black and white version
+\fi
+% \end{macrocode}
+%
+% Choice of the highlighting style (color, black and white or nothing).
+% \begin{macrocode}
+\ifx\ColorVersion\Question@Mark
+ \Ask\ColorVersion{^^J\Question@Color}
+ \ifx\ColorVersion\Answer@Yes
+ \RequirePackage{color} % Standard LaTeX `color' package
+ \RequirePackage{hcolor} % Color version
+ \else
+ \RequirePackage{color} % Standard LaTeX `color' package
+ \RequirePackage{hbaw} % Black and white version
+ \fi
+\fi
+% \end{macrocode}
+%
+% Verbatim example environments must be indented by two spaces, which should
+% be ignored.
+% \begin{macrocode}
+\fvset{gobble=2}
+% \end{macrocode}
+%
+% To decide later if the result must be surimpose on a grid (useful only if
+% PSTricks is available).
+% \begin{macrocode}
+\newif\ifFvrbEx@Grid
+% \end{macrocode}
+%
+% \subsection{The various example environments}
+%
+% \DescribeEnv{Example}
+% \texttt{Example} is an environment to show the verbatim code and
+% the result just below.
+% \begin{macrocode}
+\def\Example{%
+\catcode`\^^M=\active
+\@ifnextchar[{\catcode`\^^M=5\Example@}{\catcode`\^^M=5\Begin@Example}}
+% \end{macrocode}
+%
+% \cs{endExample} is a macro for the \texttt{Example} environment to close
+% the verbatim part and to put the formatted result below.
+% \begin{macrocode}
+\def\endExample{%
+\end{VerbatimOut}%
+\Below@Example{\input{\jobname.tmp}}}
+% \end{macrocode}
+%
+% \begin{macro}{\Example@}
+% \cs{Example@} is an internal macro to set locally the \FVrbPackage{} options
+% if needed (both for the \texttt{Example}, \texttt{CenterExample} and
+% \texttt{SideBySideExample} environments).
+% \begin{macrocode}
+\def\Example@[#1]{\fvset{#1}\Begin@Example}
+% \end{macrocode}
+% \end{macro}
+%
+% \DescribeEnv{CenterExample}
+% \texttt{CenterExample} is an environment to show the verbatim code and
+% the result just below, inside a \texttt{center} environment.
+% \begin{macrocode}
+\def\CenterExample{%
+\catcode`\^^M=\active
+\@ifnextchar[{\catcode`\^^M=5\Example@}{\catcode`\^^M=5\Begin@Example}}
+% \end{macrocode}
+%
+% \begin{macro}{\endCenterExample}
+% \cs{endCenterExample} is a macro for the \texttt{CenterExample}
+% environment to close the verbatim part and to put the formatted result below,
+% centering it.
+% \begin{macrocode}
+\def\endCenterExample{%
+\end{VerbatimOut}%
+\center
+\Below@Example{\input{\jobname.tmp}}
+\endcenter}
+% \end{macrocode}
+% \end{macro}
+%
+% \DescribeEnv{SideBySideExample}
+% \texttt{SideBySideExample} is an environment to show the verbatim code and
+% the result on the left, using a \texttt{minipage} environment.
+% \begin{macrocode}
+\def\SideBySideExample{%
+\catcode`\^^M=\active
+\@ifnextchar[{\catcode`\^^M=5\Example@}%
+ {\catcode`\^^M=5\Begin@Example}}
+% \end{macrocode}
+%
+% \begin{macro}{\endSideBySideExample}
+% \cs{endSideBySideExample} is a macro for the \texttt{SideBySideExample}
+% environment to close the verbatim part and to put the formatted result on
+% the left side.
+% \begin{macrocode}
+\def\endSideBySideExample{%
+\end{VerbatimOut}%
+\SideBySide@Example{\input{\jobname.tmp}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{General macros}
+%
+% \begin{macro}{\Begin@Example}
+% \cs{Begin@Example} is an internal macro to start an example environment.
+% \begin{macrocode}
+\newcommand{\Begin@Example}{%
+\parindent=0pt
+\multiply\topsep by 2
+\VerbatimEnvironment
+\begin{VerbatimOut}[codes={\catcode`\£=12\catcode`\§=12\catcode`\µ=12%
+ \catcode`\¶=12}]{\jobname.tmp}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Below@Example}
+% \cs{Below@Example} is an internal macro to insert the verbatim part and
+% to put the formatted result just below. The possible highlighting must
+% be suppressed and the comment character desactivated before to input the
+% formatted part.
+% \begin{macrocode}
+\newcommand{\Below@Example}[1]{%
+\VerbatimInput[gobble=0,commentchar=£,commandchars=§µ¶,numbersep=3pt]%
+ {\jobname.tmp}
+\catcode`\£=9\relax%
+\NoHighlight@Attributes % To suppress possible highlighting
+\ifFvrbEx@Grid\vspace{5pt}\fi
+#1%
+\ifFvrbEx@Grid\vspace{5pt}\fi
+\par}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\SideBySide@Example}
+% \cs{SideBySide@Example} is an internal macro to insert the verbatim part and
+% to put the formatted result on the left side, using a \texttt{minipage}
+% environment. The possible highlighting must be suppressed and the comment
+% character desactivated before to input the formatted part.
+% \begin{macrocode}
+\newcommand{\SideBySide@Example}[1]{%
+\@tempdimb=\FV@XRightMargin
+\advance\@tempdimb -5mm
+\begin{minipage}[c]{\@tempdimb}
+ \fvset{xrightmargin=0pt}
+ \catcode`\£=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=£,commandchars=§µ¶,numbersep=3pt,
+ xleftmargin=5mm,xrightmargin=0pt]{\jobname.tmp}
+\end{minipage}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Example environments using the \texttt{pspicture} PSTricks one}
+%
+% Of course, PSTricks must be available to be able to use them.
+% \begin{macrocode}
+\ifx\PSTricksLoaded\endinput
+% \end{macrocode}
+%
+% Grid definition (using PSTricks).
+% \begin{macrocode}
+ \newcommand{\showgrid}{\FvrbEx@Gridtrue}
+ \newpsobject{FvrbExGrid}{psgrid}{subgriddiv=0,griddots=10,gridlabels=7pt}
+% \end{macrocode}
+%
+% \DescribeEnv{PCenterExample}
+% \texttt{PCenterExample} is an environment to show the verbatim code and
+% the result just below, inside a \texttt{center} environment.
+% \begin{macrocode}
+ \def\PCenterExample{\@ifnextchar[{\Pst@Example}{\Pst@@Example}}
+% \end{macrocode}
+%
+% \begin{macro}{\endPCenterExample}
+% \cs{endPCenterExample} is a macro for the \texttt{PCenterExample}
+% environment to close the verbatim part and to put the formatted result below,
+% inside a PSTricks \texttt{pspicture} environment, and centering it.
+% \begin{macrocode}
+ \def\endPCenterExample{%
+ \end{VerbatimOut}%
+ \Below@Example{%
+ \center
+ \expandafter\pspicture\Picture@Size
+ \ifFvrbEx@Grid\FvrbExGrid\fi\relax
+ \input{\jobname.tmp}%
+ \endpspicture
+ \endcenter
+ \smallskip}}
+% \end{macrocode}
+% \end{macro}
+%
+% \DescribeEnv{PSideBySideExample}
+% \texttt{PSideBySideExample} is an environment to show the verbatim code and
+% to put the formatted result on the left side, inside a PSTricks
+% \texttt{pspicture} environment.
+% \begin{macrocode}
+ \def\PSideBySideExample{\@ifnextchar[{\Pst@Example}{\Pst@@Example}}
+% \end{macrocode}
+%
+% \begin{macro}{\endPSideBySideExample}
+% \cs{endPSideBySideExample} is a macro for the \texttt{PSideBySideExample}
+% environment to close the verbatim code and to put the formatted result on
+% the left side, inside a PSTricks \texttt{pspicture} environment.
+% \begin{macrocode}
+ \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}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Pst@Example}
+% \cs{Pst@Example} is an internal macro to set locally the \FVrbPackage{}
+% options if needed (both for \texttt{PCenterExample} and
+% \texttt{PSideBySideExample} environments).
+% \begin{macrocode}
+ \def\Pst@Example[#1]{\fvset{#1}\Pst@@Example}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Pst@@Example}
+% \cs{Pst@@Example} is an internal macro to define the starting point of the
+% \texttt{pspicture} environment to used.
+% \begin{macrocode}
+ \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)}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Pst@@@Example}
+% \cs{Pst@@@Example} is an internal macro to transmit the size of the
+% \texttt{pspicture} environment to used and to call the relevant internal
+% macro to insert the verbatim part.
+% \begin{macrocode}
+ \def\Pst@@@Example(#1,#2)(#3,#4){%
+ \def\Picture@Size{(#1,#2)(#3,#4)}%
+ \Begin@Example}
+% \end{macrocode}
+% \end{macro}
+%
+% End of the code for environments using PSTricks.
+% \begin{macrocode}
+\fi % End \ifx\PSTricksLoaded
+% \end{macrocode}
+%</fvrb-ex>
+%
+% \section{\HbawPackage{} code}
+%
+%<*hbaw>
+%
+% \iffalse meta-comment, etc.
+%% Package `hbaw'
+%%
+% \fi
+%
+% What we need.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+% \end{macrocode}
+%
+% Who we are.
+% \begin{macrocode}
+\def\fileversion{1.4}
+\def\filedate{1998/03/19}
+\ProvidesPackage{hbaw}[\filedate]
+\message{`hbaw' v\fileversion, \filedate\space (Denis Girou)}
+% \end{macrocode}
+%
+% \begin{macro}{\FvrbEx@ColoredBox}
+% \cs{FvrbEx@ColoredBox} is an internal macro to print some text in bold face
+% in a defined color, inside a colored box of another color.
+% \begin{macrocode}
+\newcommand{\FvrbEx@ColoredBox}[3]{%
+\fboxsep=1pt\fcolorbox{#2}{#2}{\textcolor{#3}{\textbf{#1}}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Highlight@Attributes}
+% \cs{Highlight@Attributes} is an internal macro to define a serie of
+% highlighting macros to emphasize text in a black and white mode.
+% All have a corresponding version in color mode, using the \HcolorPackage{}
+% package. We take care here of possible mathematic material.
+% \begin{macrocode}
+\def\Highlight@Attributes{%
+% \end{macrocode}
+% \end{macro}
+%
+% Some font changes.
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% Bold text.
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% Italic text (\verb+\textsl+ rather than \verb+\textit+ due to the problem
+% of the coding of the \$ character).
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% Small capitals text.
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% Teletype writer text.
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% Italic and teletype writer text.
+% \begin{macrocode}
+\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}
+% \end{macrocode}
+%
+% Black text inside a colored box.
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+%
+% White text inside a colored box (we replace cyan and yellow by green because
+% these colors are not well seen in black and white mode).
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+%
+% Underlined text.
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+%
+% Underlined text (same than preceding in this black and white version).
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+%
+% End of \cs{Highlight@Attributes}.
+% \begin{macrocode}
+}
+% \end{macrocode}
+%
+% \begin{macro}{\NoHighlight@Attributes}
+% \cs{NoHighlight@Attributes} is an internal macro to inhibit all
+% the highlighting macros define by \cs{Highlight@Attributes}. It is
+% necessary to call it before to insert the formatted part, as highlighting
+% process must concern only the verbatim part.
+% \end{macro}
+%
+% \begin{macrocode}
+\def\NoHighlight@Attributes{%
+% \end{macrocode}
+%
+% First, we re-establish the active catcodes for the verbatim mode.
+% \begin{macrocode}
+\catcode`\§=0\relax%
+\catcode`\µ=1\relax%
+\catcode`\¶=2\relax%
+% \end{macrocode}
+%
+% Desactivation of the highlighting macros.
+% \begin{macrocode}
+\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}%
+% \end{macrocode}
+%
+% End of \cs{NoHighlight@Attributes}.
+% \begin{macrocode}
+}
+% \end{macrocode}
+%
+% Activation of the highlighting macros.
+% \begin{macrocode}
+\Highlight@Attributes
+% \end{macrocode}
+%
+%</hbaw>
+%
+% \section{\HcolorPackage{} code}
+%
+%<*hcolor>
+%
+% \iffalse meta-comment, etc.
+%% Package `hcolor'
+%%
+% \fi
+%
+% What we need.
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+% \end{macrocode}
+%
+% Who we are.
+% \begin{macrocode}
+\def\fileversion{1.4}
+\def\filedate{1998/03/19}
+\ProvidesPackage{hcolor}[\filedate]
+\message{`hcolor' v\fileversion, \filedate\space (Denis Girou)}
+% \end{macrocode}
+%
+% \begin{macro}{\FvrbEx@ColoredUnderline}
+% \cs{FvrbEx@ColoredUnderline} is an internal macro to underline some text in
+% color.
+% \begin{macrocode}
+\newcommand{\FvrbEx@ColoredUnderline}[3]{%
+$\setbox\z@\hbox{\begingroup#3\endgroup}%
+\dp\z@\z@\m@th\color{#1}\underline{\textcolor{#2}{\box\z@}}$}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FvrbEx@ColoredBox}
+% \cs{FvrbEx@ColoredBox} is an internal macro to print some text in bold face
+% in a defined color, inside a colored box of another color.
+% \begin{macrocode}
+\newcommand{\FvrbEx@ColoredBox}[3]{%
+\fboxsep=1pt\fcolorbox{#2}{#2}{\textcolor{#3}{\textbf{#1}}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Highlight@Attributes}
+% \cs{Highlight@Attributes} is an internal macro to define a serie of
+% highlighting macros to emphasize text in a black and white mode.
+% All have a corresponding version in black and white mode, using the
+% \HbawPackage{} package. We do not take care here of possible mathematic
+% material, but it can be done...
+% \begin{macrocode}
+\def\Highlight@Attributes{%
+% \end{macrocode}
+% \end{macro}
+%
+% Some font changes.
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+%
+% Colored bold text.
+% \begin{macrocode}
+\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}}}
+% \end{macrocode}
+%
+% Colored italic text (\verb+\textsl+ rather than \verb+\textit+ due to the
+% problem of the coding of the \$ character).
+% \begin{macrocode}
+\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}}}
+% \end{macrocode}
+%
+% Colored small capitals text.
+% \begin{macrocode}
+\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}}}
+% \end{macrocode}
+%
+% Colored teletype writer text.
+% \begin{macrocode}
+\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}}}
+% \end{macrocode}
+%
+% Colored italic and teletype writer text.
+% \begin{macrocode}
+\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}}}}
+% \end{macrocode}
+%
+% Black text inside a colored box.
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+%
+% White text inside a colored box.
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+%
+% Colored underlined text.
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+%
+% Colored underlined colored text (with the same color).
+% \begin{macrocode}
+\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}}
+% \end{macrocode}
+%
+% End of \cs{Highlight@Attributes}.
+% \begin{macrocode}
+}
+% \end{macrocode}
+%
+% \begin{macro}{\NoHighlight@Attributes}
+% \cs{NoHighlight@Attributes} is an internal macro to inhibit all
+% the highlighting macros define by \cs{Highlight@Attributes}. It is
+% necessary to call it before to insert the formatted part, as highlighting
+% process must concern only the verbatim one.
+% \end{macro}
+%
+% \begin{macrocode}
+\def\NoHighlight@Attributes{%
+% \end{macrocode}
+%
+% First, we re-establish the active catcodes for the verbatim mode.
+% \begin{macrocode}
+\catcode`\§=0\relax%
+\catcode`\µ=1\relax%
+\catcode`\¶=2\relax%
+% \end{macrocode}
+%
+% Desactivation of the highlighting macros.
+% \begin{macrocode}
+\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}%
+% \end{macrocode}
+%
+% End of \cs{NoHighlight@Attributes}.
+% \begin{macrocode}
+}
+% \end{macrocode}
+%
+% Activation of the highlighting macros.
+% \begin{macrocode}
+\Highlight@Attributes
+% \end{macrocode}
+%
+%</hcolor>
+%
+% \section{Test file}
+%
+%<*t-fvrbex>
+% \iffalse meta-comment, etc.
+%% File `t-fvrbex'
+%%
+% \fi
+%
+% \begin{macrocode}
+\documentclass{article}
+
+\newif\ifpstricks
+\IfFileExists{pstricks.sty}
+{\usepackage[bawcolor,pstricks]{fvrb-ex}\pstrickstrue}
+{\usepackage[bawcolor]{fvrb-ex}}
+
+\begin{document}
+
+\title{Test file for the `\textsf{fvrb-ex}' package}
+\author{Denis Girou\\CNRS/IDRIS\\Orsay -- France\\
+ {\footnotesize email: Denis.Girou@idris.fr}}
+\date{Version 1.2\\March 27, 1998}
+
+\maketitle
+
+\RecustomVerbatimEnvironment{Verbatim}{Verbatim}
+ {gobble=2,commentchar=£,numbers=left,numbersep=3pt,frame=single}
+
+\section{\texttt{Example} environment}
+
+\begin{Verbatim}
+ \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}
+ \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}
+
+\section{\texttt{CenterExample} environment}
+
+\begin{Verbatim}
+ \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}
+
+\begin{Verbatim}
+ \begin{CenterExample}[frame=lines,numbers=left]
+ §HLaµFirst¶ verbatim line.
+ §HLbµSecond¶ verbatim line.
+ §HLCBWzµThird¶ verbatim line.
+ \end{CenterExample}
+\end{Verbatim}
+
+\begin{CenterExample}[frame=lines,numbers=left]
+ §HLaµFirst¶ verbatim line.
+ §HLbµSecond¶ verbatim line.
+ §HLCBWzµThird¶ verbatim line.
+\end{CenterExample}
+
+\section{\texttt{SideBySideExample} environment}
+
+\begin{Verbatim}
+ \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}
+
+\ifpstricks % If PSTricks is available
+
+\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}
+ \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}
+ \fvset{frame=single,xrightmargin=5cm}
+ \begin{PSideBySideExample}(-2,-1)(2,1)
+ \psellipse[linestyle=§HLCBWeµdashed¶](2,1)
+ \end{PSideBySideExample}
+ \begin{PSideBySideExample}[numbers=right](-2,-1)(2,1)
+ \psellipse[linestyle=§HLeµdotted¶](2,1)
+ \end{PSideBySideExample}
+\end{Verbatim}
+
+{\fvset{frame=single,xrightmargin=5cm}
+\begin{PSideBySideExample}(-2,-1)(2,1)
+ \psellipse[linestyle=§HLCBWeµdashed¶](2,1)
+\end{PSideBySideExample}
+\begin{PSideBySideExample}[numbers=right](-2,-1)(2,1)
+ \psellipse[linestyle=§HLeµdotted¶](2,1)
+\end{PSideBySideExample}
+
+
+\else % If PSTricks is not available
+\begin{quote}
+ \section{\texttt{PCenterExample} and \texttt{PSideBySideExample}
+environments}
+
+ \textbf{\large Warning!} These two environments are not demonstrated here,
+because PSTricks was not found on this platform.
+\end{quote}
+\fi
+
+\end{document}
+% \end{macrocode}
+%
+%</t-fvrbex>
+%
+% \Finale
+% \PrintIndex
+% \PrintChanges
+%
+\endinput
+%%
+%% End of file `fvrb-ex.dtx'
diff --git a/Master/texmf-dist/source/latex/fancyvrb/fvrb-ex.ins b/Master/texmf-dist/source/latex/fancyvrb/fvrb-ex.ins
new file mode 100644
index 00000000000..37aad57417f
--- /dev/null
+++ b/Master/texmf-dist/source/latex/fancyvrb/fvrb-ex.ins
@@ -0,0 +1,41 @@
+%% `fvrb-ex.ins'
+%%
+%% Docstrip installation instruction file for docstyle `fvrb-ex'
+%%
+%% Denis Girou (CNRS/IDRIS - France) <Denis.Girou@idris.fr>
+%% March 26, 1998
+
+\NeedsTeXFormat{LaTeX2e}
+\def\batchfile{fvrb-ex.ins}
+\input docstrip.tex
+\keepsilent
+\Msg{*** Generating the `fvrb-ex' package ***}
+\askforoverwritefalse
+\generate{\catcode`\£=12\catcode`\§=12\catcode`\µ=12\catcode`\¶=12%
+ \file{fvrb-ex.sty}{\from{fvrb-ex.dtx}{fvrb-ex}}%
+ \file{hbaw.sty}{\from{fvrb-ex.dtx}{hbaw}}%
+ \file{hcolor.sty}{\from{fvrb-ex.dtx}{hcolor}}%
+ \file{t-fvrbex.tex}{\from{fvrb-ex.dtx}{t-fvrbex}}}
+
+\ifToplevel{%
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the files}
+\Msg{* fvrb-ex.sty, hbaw.sty and hcolor.sty into a directory}
+\Msg{* searched by TeX.}
+\Msg{*}
+\Msg{* To produce the documentation, run the file `fvrb-ex.dtx'}
+\Msg{* through LaTeX.}
+\Msg{*}
+\Msg{* If you require the commented code, desactivating the}
+\Msg{* OnlyDescription macro, you must recompile, execute:}
+\Msg{* `makeindex -s PATH/gind.ist fvrb-ex'}
+\Msg{* `makeindex -s PATH/gglo.ist -o fvrb-ex.gls fvrb-ex.glo'}
+\Msg{* and recompile.}
+\Msg{*}
+\Msg{***********************************************************}
+}
+
+\endinput
+%%
+%% End of file `fvrb-ex.ins'