diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-11 23:53:13 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-11 23:53:13 +0000 |
commit | 1b390e7c0060de46864273dd300d12affa5d9735 (patch) | |
tree | 07385aa5bf7cccb8b943820b8689295bdbdbae8d /Master/texmf-dist/source/latex/fancyvrb | |
parent | f1ba088253f565d5cb2d934517f7c9af1a72c154 (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.contrib | 57 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/fancyvrb/fancyvrb.dtx | 4474 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/fancyvrb/fancyvrb.ins | 35 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/fancyvrb/fvrb-ex.dtx | 1564 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/fancyvrb/fvrb-ex.ins | 41 |
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' |