From ea5ddec3cc1883423a98b4634ab35b64d14b1dc8 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Wed, 11 Jan 2006 23:55:15 +0000
Subject: trunk/Master/texmf-dist/source/latex/moreverb

git-svn-id: svn://tug.org/texlive/trunk@394 c570f23f-e606-0410-a88d-b1316a301751
---
 .../texmf-dist/source/latex/moreverb/moreverb.dtx  | 635 +++++++++++++++++++++
 1 file changed, 635 insertions(+)
 create mode 100644 Master/texmf-dist/source/latex/moreverb/moreverb.dtx

(limited to 'Master/texmf-dist/source/latex/moreverb/moreverb.dtx')

diff --git a/Master/texmf-dist/source/latex/moreverb/moreverb.dtx b/Master/texmf-dist/source/latex/moreverb/moreverb.dtx
new file mode 100644
index 00000000000..d4ee6d5f0d5
--- /dev/null
+++ b/Master/texmf-dist/source/latex/moreverb/moreverb.dtx
@@ -0,0 +1,635 @@
+% 
+% \iffalse
+%
+% RCS information:
+%
+% $Id: moreverb.dtx,v 1.10 2002/03/20 10:39:07 rf Exp $
+%
+% \section{Initially: identify the package}
+%
+% We use the same body for the \cs{ProvidesFile} as for the
+% \cs{ProvidesPackage} command.
+%
+%    \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+%<*dtx>
+\ProvidesFile{moreverb.dtx}
+%</dtx>
+%<moreverb>\ProvidesPackage{moreverb}
+        [1997/12/07 v2.2d.2
+%<moreverb>    `more' verbatim facilities%
+%<*dtx>
+               moreverb source file%
+%</dtx>
+                   ]
+%    \end{macrocode}
+% Code to compile the thing using LaTeX2e
+%
+%<*driver>
+\documentclass{ltxdoc}
+%
+\setcounter{errorcontextlines}{999}
+%
+\GetFileInfo{moreverb.dtx}
+%
+% The definition of \star in ltxdoc.cls is useless (bug report
+% LaTeX/2117).  \env is something I would like to have -- I'm
+% not sure this definition is entirely kosher (in any case, why aren't
+% all these things in doc.sty?)
+%
+\renewcommand\star{\texttt{*}}
+\DeclareRobustCommand\env[1]{\cs{begin\char`\{#1\char`\}}}
+%
+\begin{document}
+ \title{The \textsf{moreverb} package\thanks{This file
+        has version number \fileversion, last
+        revised \filedate}}
+    \author{Robin Fairbairns (\small\texttt{rf@cl.cam.ac.uk})\\
+            after\\
+            Angus Duggan, Rainer Sch\"opf and Victor Eijkhout}
+ \date{\the\year/\ifnum\month<10 0\fi\the\month
+                /\ifnum\day  <10 0\fi\the\day}
+ \maketitle
+ \tableofcontents
+ \DocInput{moreverb.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \CheckSum{399}
+%
+% \section{This package}
+%
+% This package uses the facilities provide by the \textsf{verbatim}
+% package in the \LaTeXe{} \emph{tools} distribution to provide a
+% number of things that were rejected as unnecessary in the
+% development of that package.  (Nevertheless, the tab-expansion code
+% in this package responds to one of the FAQs of |comp.text.tex|)
+%
+% The package provides things in three broad areas:
+% \begin{itemize}
+% \item Tab expansion and related stuff,
+% \item Line numbering,
+% \item Miscellaneous: writing verbatim to a file (for example, for
+%   later re-input), and `boxed' verbatim.
+% \end{itemize}
+%
+% \subsection*{Copyright statement}
+%
+% \noindent Program: \texttt{moreverb.dtx}\par
+% \noindent Copyright 1997 2002 Robin Fairbairns
+%
+% This program may redistributed and/or modified under the terms
+% of the LaTeX Project Public License Distributed from CTAN
+% archives in file \texttt{macros/latex/base/lppl.txt}; either
+% version 1.2 of the License, or (at your option) any later version.
+%
+% \subsection{Tab expansion}
+%
+% The package enables you to specify the expected width of the
+% tabulation, and also allows input of files containing tabs.
+%
+% \DescribeEnv{verbatimtab}
+%
+% \env{verbatimtab}\oarg{tab width}
+% reproduces its body verbatim, with the tabs expanded to the given
+% width (the default value is 8).
+%
+% \DescribeMacro{\verbatimtabinput}
+%
+% \cs{verbatimtabinput}\oarg{tab width}\marg{file name}
+% is a file input version of the \texttt{verbatimtab} environment.
+%
+% \DescribeMacro{\verbatimtabsize}
+%
+% The size of the tabs is stored in \cs{verbatimtabsize}, and persists
+% between uses of the environments.  (I.e., an optional argument to
+% one of them applies to all subsequent ones.)
+%
+% \noindent To replace the value other than by use of an optional
+% argument, you need to say:
+%
+% \cs{renewcommand}\cs{verbatimtabsize}|{|\meta{value}\cs{relax}|}|
+%
+% There are no promises offered as to the performance if you omit the
+% \cs{relax}!
+%
+% \subsection{Line numbering}
+%
+% Line numbering is often useful when reproducing code examples
+% (useful, that is, for those of us who don't want to pretty-print
+% such snippets).
+%
+% \DescribeEnv{listing}
+%
+% \env{listing}\oarg{interval}\marg{start line} numbers the lines of
+% its body.  The argument \meta{start line} specifies the starting
+% line number.  The optional argument \meta{interval} specifies the
+% number of lines between numbered lines: that is, every line whose
+% number \(=0\pmod{\mbox{\meta{interval}}}\) will be numbered in the
+% output.  (In addition, line number 1 will always be numbered.)  The
+% default value of the \meta{interval} is 1 (i.e., every line will be
+% numbered).
+%
+% \DescribeEnv{listingcont}
+%
+% \env{listingcont} continues from the place where the last
+% listing left off.
+%
+% The style in which the label is set can be altered, for either
+% environment, by re-defining \cs{listinglabel}.  Both environments
+% also expand tabs.
+%
+% `\star' versions of both the listing environments are provided;
+% these do the usual |verbatim*| thing of outputting spaces as
+% `\verb*| |', but don't expand tabs.
+%
+% \DescribeMacro{listinginput}
+%
+% \cs{listinginput}\oarg{interval}\marg{start line}\marg{filename}
+% is a file input version of listing.  There is no `\star' form.
+%
+% \subsection{Miscellanea}
+%
+% \DescribeEnv{verbatimwrite}
+%
+% \env{verbatimwrite}\marg{filename} writes all text in its body to a
+% file, the name of which it is given as an argument.
+%
+% \DescribeEnv{boxedverbatim}
+%
+% \env{boxedverbatim} puts the contents of a verbatim environment in a
+% framing box.  If you try to do this in a na\"\i ve way, you find
+% that the verbatim lines have all become the width of the page, so
+% that the box is, more often than not, a very poor fit to the text it
+% surrounds.
+%
+% \DescribeEnv{verbatimcmd}
+%
+% The |verbatimcmd| environment was provided by the \LaTeX2.09 and
+% early \LaTeXe{} versions of this package.  However, its capabilities
+% are now provided by |alltt|, which is defined by the \textsf{alltt}
+% package, now part of the \LaTeX{} base distribution, and so
+% |verbatimcmd| has been withdrawn.
+%
+% \StopEventually{}
+%
+% \section{The code of the package}
+%
+%    \begin{macrocode}
+%<*moreverb>
+%    \end{macrocode}
+%
+% \subsection{Initial code}
+%
+% Load the \textsf{verbatim} package if it's not already loaded.
+%
+%    \begin{macrocode}
+\@ifundefined{verbatim@processline}{\RequirePackage{verbatim}}{}
+%    \end{macrocode}
+%
+% \subsection{Writing to a file}
+%
+% \begin{environment}{verbatimwrite}
+% \env{verbatimwrite}\marg{filename} writes all text in its body to a
+% file, the name of which it is given as an argument. (This code was
+% written by Rainer Sch\"opf.)
+%
+%    \begin{macrocode}
+\newwrite \verbatim@out
+\def\verbatimwrite#1{%
+  \@bsphack
+  \immediate\openout \verbatim@out #1
+  \let\do\@makeother\dospecials
+  \catcode`\^^M\active \catcode`\^^I=12
+  \def\verbatim@processline{%
+    \immediate\write\verbatim@out
+      {\the\verbatim@line}}%
+  \verbatim@start}
+%    \end{macrocode}
+%    \begin{macrocode}
+\def\endverbatimwrite{%
+  \immediate\closeout\verbatim@out
+  \@esphack}
+%    \end{macrocode}
+% \end{environment}
+%
+% \subsection{Tab expansion}
+%
+% We define a few auxiliary macros and counters for expanding tabs.
+% They are used by the |listing| and |verbatimtab| environments.
+%
+%    \begin{macrocode}
+\newcount\tab@position \newcount\tab@size
+%    \end{macrocode}
+%
+% \cs{verbatimtabsize} used to be a counter, but that seems to me
+% overkill (\LaTeX{} uses too many counters as it is\dots).
+%
+%    \begin{macrocode}
+\def\verbatimtabsize{8\relax}
+%    \end{macrocode}
+%
+% \begin{macro}{\@xobeytab}
+%
+% \cs{@xobeytab} puts enough spaces in to get us to the next nominal
+% tab stop
+%    \begin{macrocode}
+\def\@xobeytab{%
+  \loop
+    \toks@\expandafter{\the\toks@\@xobeysp}%
+    \advance\tab@position-1
+  \ifnum\tab@position>0 \repeat
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@vobeytabs}
+% \cs{@vobeytabs} initialises use of \cs{@xobeytab}.  Needs to be
+% executed within a group, as mustn't be allowed to leak out into the
+% wide world.
+%
+%    \begin{macrocode}
+\begingroup
+  \catcode`\^^I=\active
+  \gdef\@vobeytabs{\catcode`\^^I\active\let^^I\@xobeytab}%
+\endgroup
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\verbatim@tabexpand}
+% \cs{verbatim@tabexpand}\meta{body of line}\cs{@nil} processes every
+% character of a line by tail recursion, counting the characters and
+% juggling things when a tab is encountered.  (What used to be called
+% `line imaging'\dots)
+%
+%    \begin{macrocode}
+\def\verbatim@tabexpand#1{%
+  \ifx#1\@nil
+%   \showthe\toks@
+    \the\toks@
+    \expandafter\par
+  \else
+    \ifx#1\@xobeytab
+      \@xobeytab
+    \else
+%    \end{macrocode}
+%
+% We can safely put \cs{@xobeysp} into the token register, since it
+% does precisely what we need
+%    \begin{macrocode}
+      \toks@\expandafter{\the\toks@#1}%
+      \advance\tab@position\m@ne
+    \fi
+    \ifnum\tab@position=0 \tab@position\tab@size \fi
+    \expandafter\verbatim@tabexpand
+  \fi
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{listing}
+% \env{listing}\oarg{interval}\marg{start line}
+% 
+% Defines a verbatim environment with numbered lines; the optional
+% argument \meta{interval} specifies the number of lines between
+% numbered lines, and the argument \meta{start line} specifies the
+% starting line.
+%
+% \begin{environment}{listingcont}
+% \env{listingcont}
+%
+% Continues from the place where listing left off.  The style in which
+% the label is set can be altered by re-defining \cs{listinglabel}.
+%
+% `\star' versions of both environments are provided.
+%
+% \begin{macro}{\listing@line}
+% \cs{listing@line} holds the current line number; its default value
+% is 1, so one can merrily use |listingcont| throughout a document if
+% there's but one stream of verbatim text being written.
+%
+%    \begin{macrocode}
+\newcount\listing@line \listing@line=1
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\listing@step}
+% \cs{listing@step} is another case where a counter used to be used,
+% to no very obvious utility, but using up a valuable count register.
+% Again, the value is modal; the trailing \cs{relax} is necessary.
+%
+%    \begin{macrocode}
+\def\listing@step{1\relax}
+%    \end{macrocode}
+% \end{macro}
+%    
+% Adding an \cs{hbox} in front of the line causes a line break, so
+% I\footnote{The personal pronoun was present in the comments in the
+%   original version of this package; I'm not sure who it relates
+%   to~--- RF} go through this rigmarole to get the lines aligned
+% nicely.  I probably missed some obvious reason why \cs{hbox}es don't
+% work\footnote{It's because an \cs{hbox} in vertical mode makes a
+%   complete paragraph in its own right; this problem could be dealt
+%   with in the fullness of time, but just now\dots}.
+%
+%    \begin{macrocode}
+\def\listinglabel#1{\llap{\small\rmfamily\the#1}\hskip\listingoffset\relax}
+\def\thelisting@line{%
+  \setbox0\hbox{\listinglabel\listing@line}%
+  \@tempcnta=\listing@line
+  \divide\@tempcnta\listing@step \multiply\@tempcnta\listing@step
+  \ifnum\listing@line=\@ne
+    \unhbox0
+  \else
+    \ifnum\@tempcnta=\listing@line
+      \unhbox0
+    \else
+      \hskip\wd0
+    \fi
+  \fi}
+%    \end{macrocode}
+%
+% \begin{macro}{\listingoffset}
+% \cs{listingoffset} is the separation between the line number and the
+% actual line being listed; default value is \verb|1.5em|
+%    \begin{macrocode}
+\providecommand\listingoffset{1.5em}
+%    \end{macrocode}
+% \end{macro}
+%
+% Define \cs{listing} simply to suck in parameters and then to use
+% \cs{listingcont}
+%
+%    \begin{macrocode}
+\newcommand\listing[2][1]{%
+  \global\listing@line=#2\relax
+  \gdef\listing@step{#1\relax}
+  \listingcont}
+%    \end{macrocode}
+%
+% \cs{listingcont} is the business end of the two environments.
+%
+%    \begin{macrocode}
+\def\listingcont{%
+  \tab@size=\verbatimtabsize
+  \def\verbatim@processline{\tab@position\tab@size
+    \thelisting@line \global\advance\listing@line1
+    \toks@{}%
+    \expandafter\verbatim@tabexpand\the\verbatim@line\@nil}%
+  \@verbatim\frenchspacing\@vobeyspaces\@vobeytabs\verbatim@start}
+%    \end{macrocode}
+%
+% Nothing special at the end of the two environments.
+%
+%    \begin{macrocode}
+\let\endlisting=\endtrivlist
+\let\endlistingcont=\endtrivlist
+%    \end{macrocode}
+%
+% Now the same rigmarole for the `\verb+*+' versions.
+%
+%    \begin{macrocode}
+\expandafter\newcommand\csname listing*\endcsname[2][1]{%
+  \global\listing@line=#2\relax
+  \gdef\listing@step{#1\relax}
+  \csname listingcont*\endcsname}
+\@namedef{listingcont*}{%
+  \def\verbatim@processline{%
+    \thelisting@line \global\advance\listing@line1
+    \the\verbatim@line\par}%
+  \@verbatim\verbatim@start}
+%    \end{macrocode}
+%
+% Nobbut a bit of hassle in the name definitions for the end of the
+% environments
+%
+%    \begin{macrocode}
+\expandafter\let\csname endlisting*\endcsname\endtrivlist
+\expandafter\let\csname endlistingcont*\endcsname\endtrivlist
+%    \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \begin{macro}{listinginput}
+% \cs{listinginput}\oarg{interval}\marg{start line}\marg{filename}
+% is a file input version of listing.
+%
+%    \begin{macrocode}
+\def\listinginput{%
+   \@ifnextchar[%]
+     {\@listinginput}%
+     {\@listinginput[1]}}
+\begingroup
+  \catcode`\~=\active \lccode`\~=`\^^M \lccode`\N=`\N
+  \lowercase{\endgroup
+    \def\@listinginput[#1]#2#3{\begingroup
+      \global\listing@line=#2
+      \gdef\listing@step{#1\relax}
+      \tab@size=\verbatimtabsize
+      \def\verbatim@processline{\tab@position\tab@size
+        \thelisting@line \global\advance\listing@line1
+        \toks@{}%
+        \expandafter\verbatim@tabexpand\the\verbatim@line\@nil}%
+      \@verbatim\frenchspacing\@vobeyspaces\@vobeytabs
+      \def\verbatim@addtoline##1~{%
+        \verbatim@line\expandafter{\the\verbatim@line##1}}%
+      \openin\verbatim@in@stream=#3
+      \ifeof\verbatim@in@stream
+        \PackageWarning{moreverb}{No file #3.}%
+      \else
+        \do@verbatimtabinput
+        \closein\verbatim@in@stream
+      \fi
+      \endtrivlist\endgroup
+    \@doendpe
+  }%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{verbatimcmd}
+% \texttt{verbatimcmd} was a verbatim environment with the exception
+% of the escape and grouping characters \verb+\+, \verb+{+, \verb+}+.
+% This is (err) exactly the specification of the \texttt{alltt}
+% environment, and that is in the \textsf{alltt} package that is now
+% part of the base distribution.
+%    \begin{macrocode}
+\def\verbatimcmd{%
+  \PackageError{moreverb}{The verbatimcmd environment is obsolete}%
+                         {Use alltt (from the LaTeX base package
+                           alltt) in place of verbatimcmd}%
+}
+\let\endverbatimcmd\relax
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{boxedverbatim}
+% \texttt{boxedverbatim} puts the contents of a verbatim environment
+% in a framing box.
+%
+% (Written by Victor Eijkhout.)
+%
+% Bug fix (supplied by David Carlisle) 1995/12/28, marked
+% \verb+%%%DPC%%%+
+%
+% First, redefine `processline' to produce only a line as wide
+% as the natural width of the line
+%
+%    \begin{macrocode}
+\def\boxedverbatim{%
+  \def\verbatim@processline{%
+    {\setbox0=\hbox{\the\verbatim@line}%
+    \hsize=\wd0 \the\verbatim@line\par}}%
+%    \end{macrocode}
+%
+% Now save the verbatim code in a box
+%
+%    \begin{macrocode}
+  \@minipagetrue%%%DPC%%%
+  \@tempswatrue%%%DPC%%%
+  \setbox0=\vbox\bgroup \verbatim
+}
+%    \end{macrocode}
+%
+% At the end of the environment, we (umm) simply have to stick the
+% results into a frame.
+%
+%    \begin{macrocode}
+\def\endboxedverbatim{%
+  \endverbatim
+  \unskip\setbox0=\lastbox %%%DPC%%%
+%    \end{macrocode}
+%
+% Now everything's in the box, so we can close it\dots
+%
+%    \begin{macrocode}
+  \egroup
+%    \end{macrocode}
+%
+% To change the code for centring, the next line needs a spot of
+% hacking.
+%
+%    \begin{macrocode}
+  \fbox{\box0}% <<<=== change here for centering,...
+}
+%    \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{verbatimtab}
+% \env{verbatimtab}\oarg{tab width}
+% is a verbatim environment which expands tab characters; the optional
+% argument specifies the distance between tab stops.
+%
+% Executing \cs{obeylines} before looking for the optional argument
+% prevents an empty first line of the environment becoming a \cs{par}
+% token (this bug was reported by Werner Lemberg).
+%    \begin{macrocode}
+\newenvironment{verbatimtab}{\obeylines\@verbatimtab}{\endtrivlist}
+%    \end{macrocode}
+%
+% Process the optional argument of the |verbatimtab|, now that we have
+% protected ourselves from the dreaded \cs{par} tokens
+%    \begin{macrocode}
+\newcommand\@verbatimtab[1][\verbatimtabsize]{%
+  \do@verbatimtab{#1}{%
+     \@verbatim\frenchspacing\@vobeyspaces\@vobeytabs\verbatim@start}%
+}
+%    \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\do@verbatimtab}
+%
+% Prepare a tabbing environment; \verb+#1+ is the value of the tab
+% size (generally, originally, an optional argument), \verb+#2+ is the
+% `startup commands' to execute once an appropriate definition of
+% \cs{verbatim@processline} has been established:
+%    \begin{macrocode}
+\def\do@verbatimtab#1#2{%
+  \tab@size=#1
+  \def\verbatim@processline{\tab@position\tab@size
+    \toks@{}%
+    \expandafter\verbatim@tabexpand\the\verbatim@line\@nil}%
+  #2%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\verbatimtabinput}
+% \cs{verbatimtabinput}\oarg{tab width}\marg{file name}
+% is a file input version of the \texttt{verbatimtab} environment.
+%
+% We use the input stream acquired by the \textsf{verbatim} package;
+% we did after all require it to be loaded.  (One has to admit that
+% the name of that stream isn't actually part of the package's defined
+% interface, but on the other hand there's no particular likelihood
+% that it will ever change.)
+%
+% We didn't (originally) use fancy features of \cs{newcommand} since
+% the definition was inside a group, and hence global.  So \dots\
+% `traditional' code to provide a command with an optional argument
+% (which may no longer be necessary):
+%
+%    \begin{macrocode}
+\def\verbatimtabinput{%
+   \@ifnextchar[%]
+     {\@verbatimtabinput}%
+     {\@verbatimtabinput[\verbatimtabsize]}}
+\begingroup
+\catcode`\~=\active \lccode`\~=`\^^M \lccode`\N=`\N
+\lowercase{\endgroup
+  \def\@verbatimtabinput[#1]#2{\begingroup
+    \do@verbatimtab{#1}{%
+      \@verbatim\frenchspacing\@vobeyspaces\@vobeytabs}%
+    \def\verbatim@addtoline##1~{%
+      \verbatim@line\expandafter{\the\verbatim@line##1}}%
+    \openin\verbatim@in@stream=#2
+    \ifeof\verbatim@in@stream
+      \PackageWarning{moreverb}{No file #2.}
+    \else
+      \@addtofilelist{#2}%
+      \do@verbatimtabinput
+      \closein\verbatim@in@stream
+    \fi
+  \endtrivlist\endgroup\@doendpe}%
+}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\do@verbatimtabinput}
+% Written-out (tail recursion) loop for reading the file
+%    \begin{macrocode}
+\def\do@verbatimtabinput{%
+  \read\verbatim@in@stream to \verbtab@line
+  \ifeof\verbatim@in@stream
+  \else
+    \expandafter\verbatim@addtoline\verbtab@line
+    \verbatim@processline
+    \verbatim@startline
+    \expandafter\do@verbatimtabinput
+  \fi
+}
+%</moreverb>
+%    \end{macrocode}
+% \end{macro}
+%
+% \Finale
+%
+\endinput
+%
+%% \CharacterTable
+%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%%   Digits        \0\1\2\3\4\5\6\7\8\9
+%%   Exclamation   \!     Double quote  \"     Hash (number) \#
+%%   Dollar        \$     Percent       \%     Ampersand     \&
+%%   Acute accent  \'     Left paren    \(     Right paren   \)
+%%   Asterisk      \*     Plus          \+     Comma         \,
+%%   Minus         \-     Point         \.     Solidus       \/
+%%   Colon         \:     Semicolon     \;     Less than     \<
+%%   Equals        \=     Greater than  \>     Question mark \?
+%%   Commercial at \@     Left bracket  \[     Backslash     \\
+%%   Right bracket \]     Circumflex    \^     Underscore    \_
+%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
+%%   Right brace   \}     Tilde         \~}
-- 
cgit v1.2.3

