diff options
Diffstat (limited to 'macros/latex/contrib/verbatimbox/verbatimbox.sty')
-rw-r--r-- | macros/latex/contrib/verbatimbox/verbatimbox.sty | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/macros/latex/contrib/verbatimbox/verbatimbox.sty b/macros/latex/contrib/verbatimbox/verbatimbox.sty new file mode 100644 index 0000000000..dbfda1e387 --- /dev/null +++ b/macros/latex/contrib/verbatimbox/verbatimbox.sty @@ -0,0 +1,247 @@ +\def\verbatimboxVersionNumber{v3.13 } +\ProvidesPackage{verbatimbox} + [2014/03/12 \verbatimboxVersionNumber +Routines for placing verbatim text into boxes, useful in places where +the verbatim environment is inaccessible. Secondarily, for adding +vertical buffer around an object.] +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3c or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Steven B. Segletes. +% +% verbatimbox.sty is based on boxedverbatim environment found +% in moreverb.sty. +% +% An enabling routine, \addvbuffer[]{} shares some functional +% similarities to \raisebox, but it is not the same. +% +% 2.01 -Added LPPL License info to package +% 3.0 -Added myverbbox environment +% -Corrected problem when no optional arguments are passed to +% verbbox environment +% -Added optional arguments to \addvbuffer +% -Fixed \verbfilebox so that it restored \verbatim@processline +% -Produced real documentation +% 3.01 -renamed \macro@name so as not to conflict with (I think) ltxdoc +% package +% 3.1 -Corrected default argument to \addvbuffer so that it wouldn't +% break. Also, gave better guidance in documentation to use +% of optional argument to \addvbuffer +% -Added verbnobox environment and \verbfilenobox macro +% -Improved documentation showing line-specific optional arguments +% 3.11 -Eliminated the use of the stringstrings package, which resets +% the definition of \| +% 3.12 -Corrected bug introduced in V3.11, which occured with [t] +% option to \theverbbox +% -When using two lengths in \addvbuffer optional argument, +% they MUST be individually in {}, rather than "~" or "\ " between +% 3.13 -Corrected residual bug from V3.11, when \addvbuffer called +% without an optional argument, +\NeedsTeXFormat{LaTeX2e} +\@ifundefined{verbatim@processline}{\RequirePackage{verbatim}}{} +\usepackage{readarray} + +% Following 3 lines thanks to Prof. Enrico Gregorio, from: +% http://tex.stackexchange.com/questions/42318/ +% removing-a-backslash-from-a-character-sequence +\begingroup\lccode`\|=`\\ +\lowercase{\endgroup\def\removebs#1{\if#1|\else#1\fi}} +\newcommand{\@macro@name}[1]{\expandafter\removebs\string#1} +% + +\global\newsavebox{\savedverbbox} +\newcounter{VerbboxLineNo} +%%%%%ORIGINAL FORM%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% The verbbox environment is based on +% the boxedverbatim environment found in moreverb.sty +% The optional argument allows the user to modify properties of the text +% such as fontsize +% +\newenvironment{origverbbox}[1][]{% + \def\verbatim@processline{% + {\setbox0=\hbox{\the\verbatim@line}% + \hsize=\wd0 \the\verbatim@line\par}}% + \@minipagetrue% + \@tempswatrue% + \setbox0=\vbox\bgroup #1 \verbatim +} +{% + \endverbatim + \unskip\setbox0=\lastbox % + \egroup + \global\sbox{\savedverbbox}{\box0} +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% David Carlisle provided the \verbbox@inner approach to avoid +% problem when no optional argument is provided to verbbox environment: +% http://tex.stackexchange.com/questions/109030/optional-arguments-in +% -verbatim-environments +\newcommand\verbbox@inner[1][]{{\nfss@catcodes\scantokens{\gdef\@tmp{#1}}}} +\def\@tmp{} + +\newenvironment{verbbox}{% + \setcounter{VerbboxLineNo}{-1}% +% FOR SOME REASON, USING \my@par INSTEAD OF \par PREVENTS EXTRA SPACE +% ABOVE verbbox WHEN USING OPTIONAL ARGUMENTS + \let\my@par\par% + \def\verbatim@processline{% +% FIRST \@tmp APPLIES OPTIONAL ARGUMENT TO EACH VERBATIM LINE +% SECOND \@tmp MAKES SURE ANY PRINTED MATTER OF OPTIONAL ARGUMENT +% IS ACCOUNTED FOR IN VERBATIM BOX WIDTH + {\addtocounter{VerbboxLineNo}{1}% + \@tmp\setbox0=\hbox{\@tmp\the\verbatim@line}% + \hsize=\wd0 \the\verbatim@line\my@par}}% + \@minipagetrue% + \@tempswatrue% + \setbox0=\vbox\bgroup \verbatim\verbbox@inner% +} +{% + \endverbatim% + \unskip\setbox0=\lastbox % + \egroup% + \global\sbox{\savedverbbox}{\box0}% + \global\def\@tmp{}% +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% The myverbbox environment is altered from verbbox environment +% The optional argument allows the user to modify properties of +% the text such as fontsize +% The mandatory argument is a command which is formed so as to +% regurgitate the boxed content created within the environment +% +\newenvironment{myverbbox}[2][]{% + \setcounter{VerbboxLineNo}{0}% + \def\verbatim@processline{% +% THE FIRST #1 ACCOUNTS FOR NON-PRINTING COMMANDS; THE SECOND #1 IS FOR +% PRINTED OPTIONAL MATERIAL + {\addtocounter{VerbboxLineNo}{1}% + #1\setbox0=\hbox{#1\the\verbatim@line}% + \hsize=\wd0 \the\verbatim@line\par}}% + \@minipagetrue% + \@tempswatrue% + \global\edef\sv@name{\@macro@name{#2}}% + \@ifundefined{\sv@name content}{% + \expandafter\newsavebox\expandafter{\csname\sv@name content\endcsname}% + }% + \expandafter\global\expandafter\edef\csname\sv@name\endcsname{\usebox{% + \csname\sv@name content\endcsname}}% + \setbox0=\vbox\bgroup \verbatim +} +{% + \endverbatim% + \unskip\setbox0=\lastbox % + \egroup% + \global\sbox{\csname\sv@name content\endcsname}{\box0}% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% The verbfilebox command is like the verbbox environment, but takes +% a file as input, rather than text typed into an environment. +% The optional argument allows the user to modify properties of the text +% such as fontsize +% Example: \verbfilebox[\scriptsize]{myfile} + +\let\sv@verbatim@processline\verbatim@processline + +\newcommand\verbfilebox[2][]{% + \setcounter{VerbboxLineNo}{0}% + \def\verbatim@processline{% + {\addtocounter{VerbboxLineNo}{1}% + #1\setbox0=\hbox{#1\the\verbatim@line}% + \hsize=\wd0 \the\verbatim@line\par}}% + \@minipagetrue% + \@tempswatrue% + \setbox0=\vbox\bgroup \verbatiminput{#2} + \unskip\setbox0=\lastbox % + \egroup + \global\sbox{\savedverbbox}{\box0} + \let\verbatim@processline\sv@verbatim@processline +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand\theverbbox[1][x]{% + \if #1t% +% The t option is for outputting the savedverbbox inside a tabular +% environment (else insufficent vertical space above box) + \addvbuffer[{\boxtopsep} {\boxbottomsep}]{\usebox{\savedverbbox}}% + \else% + \usebox{\savedverbbox}% + \fi% +} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \addvbuffer is based on \fbox, +% but without a frame. Empty buffer space +% is added above and below the object, making a new box. +% An optional argument can specify the buffer spaces or, if no +% optional argument is specified: +% above the box is added \boxtopsep (initially 3pt) vertical space; +% below the box is added \boxbottomsep (initially 0pt) vertical space. +% +\newdimen\boxtopsep +\newdimen\boxbottomsep +\newdimen\ps@tempdima +\newbox\ps@tempboxa +\setlength\boxtopsep{3pt} +\setlength\boxbottomsep{0pt} +\long\def\add@vbuffer#1{\leavevmode\setbox\ps@tempboxa\hbox{#1}\ps@tempdima + 0pt \advance\ps@tempdima \dp\ps@tempboxa \hbox{\lower\ps@tempdima\hbox + {\vbox{\hbox{\vbox{\vskip\boxtop@sep \box\ps@tempboxa \vskip + \boxbottom@sep}}}}}} + +\global\newlength\boxtop@sep +\global\newlength\boxbottom@sep +\newcommand\addvbuffer[2][{\boxtopsep} {\boxbottomsep}]{% + \getargsC{#1}% + \setlength\boxtop@sep{\argi}% + \if1\narg\setlength\boxbottom@sep{\argi}\else% + \setlength\boxbottom@sep{\argii}\fi% + \add@vbuffer{#2}% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% The following two "nobox" commands are basically versions of +% \verbatiminput and \verbatim that have been adapted to take the +% optional argument style of this package. No boxes are created, +% but breaking across page boundaries is not a problem here, as +% it would be with a box. + +\newcommand\verbfilenobox[2][]{% + \setcounter{VerbboxLineNo}{0}% + \def\verbatim@processline{% + {\addtocounter{VerbboxLineNo}{1}% + #1\setbox0=\hbox{#1\the\verbatim@line}% + \hsize=\wd0 \the\verbatim@line\par}}% + \verbatiminput{#2} + \let\verbatim@processline\sv@verbatim@processline +} + +\newenvironment{verbnobox}{% + \setcounter{VerbboxLineNo}{-1}% +% FOR SOME REASON, USING \my@par INSTEAD OF \par PREVENTS EXTRA SPACE +% ABOVE verbbox WHEN USING OPTIONAL ARGUMENTS + \let\my@par\par% + \def\verbatim@processline{% +% FIRST \@tmp APPLIES OPTIONAL ARGUMENT TO EACH VERBATIM LINE +% SECOND \@tmp MAKES SURE ANY PRINTED MATTER OF OPTIONAL ARGUMENT +% IS ACCOUNTED FOR IN VERBATIM BOX WIDTH + {\addtocounter{VerbboxLineNo}{1}% + \@tmp\setbox0=\hbox{\@tmp\the\verbatim@line}% + \hsize=\wd0 \the\verbatim@line\my@par}}% +\verbatim\verbbox@inner% +} +{% + \endverbatim% + \global\def\@tmp{}% +} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\endinput |