%%% moreverb.sty %%% AJCD 20 Sep 91 %%% adds various verbatim environments using Rainer Sch\"opf's new verbatim %%% environment. %%% Marginal hacks (RF) to work `properly' with 2e \def\filedate{1994/12/13} \def\fileversion{v2.0} % \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{moreverb} [\filedate\space \fileversion\space LaTeX2e package for `more' verbatim enhancements] \typeout{Package: `moreverb' \fileversion \space <\filedate> (RF, after AJCD and RmS)} %\typeout{English Documentation \@spaces <\docdate>} % oh no there isn't %%% load verbatim style if not already loaded. \@ifundefined{verbatim@processline}{\RequirePackage{verbatim}}{} %%% verbatimwrite writes all text in its body to a file, the name of which it %%% is given as an argument. Written by RmS. \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} \def\endverbatimwrite{% \immediate\closeout\verbatim@out \@esphack} %%% Auxiliary macros and counters for expanding tabs. Use by listing and %%% verbatimtab environments. \newcount\tab@position \newcount\tab@size \newcount\verbatimtabsize \verbatimtabsize=8 \def\@xobeytab{\leavevmode\penalty\@M {\loop\ \global\advance\tab@position-1 \ifnum\tab@position>0 \repeat}} \begingroup \catcode`\^^I=\active \gdef\@vobeytabs{\catcode`\^^I\active\let^^I\@xobeytab}% \endgroup \def\verbatim@tabexpand#1{% \ifx#1\@nil \let\next\par \else \ifx#1\@xobeysp \@xobeysp\advance\tab@position-1 \else \ifx#1\@xobeytab \@xobeytab\else #1\advance\tab@position-1 \fi\fi \ifnum\tab@position=0 \tab@position\tab@size \fi \let\next\verbatim@tabexpand \fi\next } %%% listing defines a verbatim environment with numbered lines; it takes an %%% optional argument specifying the number of lines between numbered %%% lines, and a mandatory argument specifying the starting line. listingcont %%% continues from the place where listing left off. %%% The style in which the label is set can be altered by re-defining %%% \listinglabel. * versions are provided. \newcount\listing@line \listing@line=1 \newcount\listing@step \listing@step=1 % Adding an \hbox in front of the line causes a line break, so I go % through this rigmarole to get the lines aligned nicely. I probably % missed some obvious reason why \hboxes don't work. \def\listinglabel#1{\rlap{\small\rm\the#1}\hskip2.5em} \def\thelisting@line{% \setbox0\hbox{\listinglabel\listing@line}% \@tempcnta=\listing@line \divide\@tempcnta\listing@step \multiply\@tempcnta\listing@step \ifnum\listing@line=1 \unhbox0 \else \ifnum\@tempcnta=\listing@line \unhbox0 \else \hskip\wd0 \fi\fi} \def\listing{\@ifnextchar[{\@listing}{\@listing[1]}} \def\@listing[#1]#2{% \global\listing@line=#2\global\listing@step=#1\listingcont} \def\listingcont{% \tab@size=\verbatimtabsize \def\verbatim@processline{\tab@position\tab@size \thelisting@line \global\advance\listing@line1 \expandafter\verbatim@tabexpand\the\verbatim@line\@nil}% \@verbatim\frenchspacing\@vobeyspaces\@vobeytabs\verbatim@start} \let\endlisting=\endtrivlist \let\endlistingcont=\endtrivlist \@namedef{listing*}{\@ifnextchar[{\@listingstar}{\@listingstar[1]}} \def\@listingstar[#1]#2{% \global\listing@line=#2\global\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} \expandafter\let\csname endlisting*\endcsname =\endtrivlist \expandafter\let\csname endlistingcont*\endcsname =\endtrivlist %%% file input version of listing \def\listinginput{% \@ifnextchar[{\@listinginput}{\@listinginput[1]}} {\catcode`\~=\active \lccode`\~=`\^^M \lccode`\N=`\N \lowercase{% \gdef\@listinginput[#1]#2#3{\begingroup \global\listing@line=#2\global\listing@step=#1 \tab@size=\verbatimtabsize \def\verbatim@processline{\tab@position\tab@size \thelisting@line \global\advance\listing@line1 \expandafter\verbatim@tabexpand\the\verbatim@line\@nil}% \@verbatim\frenchspacing\@vobeyspaces\@vobeytabs \def\verbatim@addtoline##1~{% \verbatim@line\expandafter{\the\verbatim@line##1}}% \openin\verbtab@in=#3 \ifeof\verbtab@in\typeout{No file #3.}\else \verbtab@oktrue \loop \read\verbtab@in to \verbtab@line \ifeof\verbtab@in\verbtab@okfalse\else \expandafter\verbatim@addtoline\verbtab@line \verbatim@processline \verbatim@startline \fi \ifverbtab@ok\repeat \closein\verbtab@in\fi \endtrivlist\endgroup\@doendpe}}} %%% verbatimcmd is a verbatim environment with the exception of the escape and %%% grouping characters \, {, }. \def\verbatimcmd{% \@verbatim \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \frenchspacing\@vobeyspaces\verbatim@start } \def\endverbatimcmd{% \let\par\relax \def\verbatim@{\endtrivlist\endgroup}% \begingroup} %%% boxedverbatim produces a verbatim environment in a framed box. %%% written by Victor Eijkhout %%% bug fix (supplied by David Carlisle) 1995/12/28, marked %%%DPC%%% \def\boxedverbatim{% % redefine `processline' to produce only a line as wide % as the natural width of the line \def\verbatim@processline{% {\setbox0=\hbox{\the\verbatim@line}% \hsize=\wd0 \the\verbatim@line\par}}% % save the verbatim code in a box \@minipagetrue%%%DPC%%% \@tempswatrue%%%DPC%%% \setbox0=\vbox\bgroup \verbatim } \def\endboxedverbatim{% \endverbatim \unskip\setbox0=\lastbox %%%DPC%%% \egroup % close the box and `fbox' it \fbox{\box0}% <<<=== change here for centering,... } %%% verbatimtab is a verbatim environment which expands tab characters; it %%% takes an optional argument specifying the width of tab stops \def\verbatimtab{\futurelet\next\@verbatimtab} \def\@verbatimtab{\if\next[ \let\next\@@verbatimtab\else \def\next{\@@verbatimtab[\the\verbatimtabsize]}\fi\next} \def\@@verbatimtab[#1]{% \do@verbatimtab{#1}{% \@verbatim\frenchspacing\@vobeyspaces\@vobeytabs\verbatim@start}% } \def\do@verbatimtab#1#2{% \tab@size=#1 \def\verbatim@processline{\tab@position\tab@size \expandafter\verbatim@tabexpand\the\verbatim@line\@nil}#2 } \let\endverbatimtab=\endtrivlist %%% file input version of verbatimtab \newread\verbtab@in \newif\ifverbtab@ok \def\verbatimtabinput{% \@ifnextchar[{\@verbatimtabinput}{\@verbatimtabinput[\the\verbatimtabsize]}} {\catcode`\~=\active \lccode`\~=`\^^M \lccode`\N=`\N \lowercase{% \gdef\@verbatimtabinput[#1]#2{\begingroup \do@verbatimtab{#1}{% \@verbatim\frenchspacing\@vobeyspaces\@vobeytabs}% \def\verbatim@addtoline##1~{% \verbatim@line\expandafter{\the\verbatim@line##1}}% \openin\verbtab@in=#2 \ifeof\verbtab@in\typeout{No file #2.}\else \verbtab@oktrue \loop \read\verbtab@in to \verbtab@line \ifeof\verbtab@in\verbtab@okfalse\else \expandafter\verbatim@addtoline\verbtab@line \verbatim@processline \verbatim@startline \fi \ifverbtab@ok\repeat \closein\verbtab@in\fi \endtrivlist\endgroup\@doendpe}}}