summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/newvbtm
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/newvbtm
Initial commit
Diffstat (limited to 'macros/latex/contrib/newvbtm')
-rw-r--r--macros/latex/contrib/newvbtm/README36
-rw-r--r--macros/latex/contrib/newvbtm/newvbtm-man.pdfbin0 -> 82006 bytes
-rw-r--r--macros/latex/contrib/newvbtm/newvbtm.dtx1280
-rw-r--r--macros/latex/contrib/newvbtm/newvbtm.ins7
4 files changed, 1323 insertions, 0 deletions
diff --git a/macros/latex/contrib/newvbtm/README b/macros/latex/contrib/newvbtm/README
new file mode 100644
index 0000000000..bf19bd015d
--- /dev/null
+++ b/macros/latex/contrib/newvbtm/README
@@ -0,0 +1,36 @@
+newvbtm (v1.1): The package for your own verbatim-like environments
+ containing two style files;
+ newvbtm.sty: To define your own verbatim-like environments
+ varvbtm.sty: To make some variants of verbatim
+
+[How to "make"]
+
+ % tex newvbtm.ins # you'll have pfnote.sty, fnpos.sty, dblfnote.sty
+ # and newvbtm-man.tex
+# to have user's manual
+ % latex newvbtm-man
+ % makeindex -s gind.ist -o newvbtm-man.ind newvbtm-man.idx
+ % latex newvbtm-man
+
+# to have implementation document
+ % latex newvbtm.dtx
+ % makeindex -s gind.ist -o newvbtm.ind newvbtm.idx
+ % makeindex -s gglo.ist -o newvbtm.gls newvbtm.glo
+ % latex newvbtm.dtx
+
+[Features]
+
++ newvbtm.sty gives you \(re)newverbatim command to define your own
+ verbatim-like environment.
+
++ varvbtm.sty defines macros for;
+ - tab emulation
+ - form-feed character handling
+ - non-verbatim stuff insertion in verbatim-like environment
+ - verbatim input file
+
++ A small bug causing trouble with LaTeX 2.09 is fixed in v1.1.
+
+Enjoy!
+
+Hiroshi Nakashima <nakasima@tutics.tut.ac.jp>
diff --git a/macros/latex/contrib/newvbtm/newvbtm-man.pdf b/macros/latex/contrib/newvbtm/newvbtm-man.pdf
new file mode 100644
index 0000000000..4865423a69
--- /dev/null
+++ b/macros/latex/contrib/newvbtm/newvbtm-man.pdf
Binary files differ
diff --git a/macros/latex/contrib/newvbtm/newvbtm.dtx b/macros/latex/contrib/newvbtm/newvbtm.dtx
new file mode 100644
index 0000000000..7e85cd2ec6
--- /dev/null
+++ b/macros/latex/contrib/newvbtm/newvbtm.dtx
@@ -0,0 +1,1280 @@
+% \iffalse
+%<newvbtm>%% Style file `newvbtm'.
+%<varvbtm>%% Style file `varvbtm'.
+%% Copyright (C) 1999-2002 Hiroshi Nakashima <nakasima@tutics.tut.ac.jp>
+%% (Toyohashi Univ. of Tech.)
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License distributed from CTAN
+%% archives in directory macros/latex/base/lppl.txt; either
+%% version 1 of the License, or any later version.
+%%
+% \fi
+%
+% \CheckSum{578}
+%% \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 \~}
+%%
+% \iffalse
+%%
+%<*dtx>
+\ProvidesFile{newvbtm.dtx}
+%</dtx>
+%<newvbtm|varvbtm>\newif\ifnvb@LaTeXe
+%<newvbtm|varvbtm>\def\next{LaTeX2e}
+%<newvbtm|varvbtm>\ifx\fmtname\next \nvb@LaTeXetrue
+%<newvbtm|varvbtm>\def\next{
+%<newvbtm|varvbtm>\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+%<newvbtm>\ProvidesPackage{newvbtm}}
+%<varvbtm>\ProvidesPackage{varvbtm}}
+%<newvbtm|varvbtm>\else \nvb@LaTeXefalse
+%<newvbtm|varvbtm>\def\next[#1]{}\fi
+%<newvbtm|varvbtm>\next
+%<driver>\ProvidesFile{newvbtm-man.tex}
+% \fi
+% \ProvidesFile{newvbtm.dtx}
+[2002/04/08 v1.1 ]
+% \iffalse
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{varvbtm}
+\DisableCrossrefs
+\PageIndex
+\CodelineNumbered
+\RecordChanges
+%</driver>
+%<driver>\OnlyDescription
+%<driver>\def\ONLYDESCRIPTION{}
+%<*driver>
+\advance\textwidth4em
+\begin{document}
+\DocInput{newvbtm.dtx}
+\end{document}
+%</driver>
+% \fi
+% \changes{v0.1}{1991/12/18}
+% {The macros for tabbing verbatim etc. has already been born.}
+% \changes{v0.2}{1992/03/26}
+% {The style defverbatim is born.}
+% \changes{v0.3}{1992/10/27}
+% {The style newverbatim has already been born.}
+% \changes{v1.0}{1999/07/14}
+% {The Style and macros are merged into newvbtm.dtx and rewritten.}
+% \changes{v1.1}{2002/04/08}
+% {The following are to fix the bug revealed in LaTeX-2.09.}
+%
+% \errorcontextlines10000
+% \GetFileInfo{newvbtm.dtx}
+% \setcounter{IndexColumns}{2}
+%
+% \def\bottomfraction{.9}
+% \def\cs#1{\hbox{\tt\char\escapechar#1}}
+% \def\Item{\vskip-\itemsep\vskip-\parsep\vskip0pt\item}
+%
+% \makeatletter
+% \def\nosv{\catcode`\|12}
+%
+% \def\eqnarray{\stepcounter{equation}\let\@currentlabel=\theequation
+% \global\@eqnswtrue
+% \global\@eqcnt\z@\tabskip\@centering\let\\=\@eqncr
+% $$\halign to \displaywidth\bgroup\hskip\@centering
+% $\displaystyle\tabskip\z@{##}$\@eqnsel&\global\@eqcnt\@ne
+% \hfil$\;{##}\;$\hfil
+% &\global\@eqcnt\tw@ $\displaystyle\tabskip\z@{##}$\hfil
+% \tabskip\@centering&\llap{##}\tabskip\z@\cr}
+%
+% \def\Meta#1{\penalty\@highpenalty
+% \hbox{{\tt\char`\{}{\it\meta{#1}}{\tt\char`\}}}}
+% \def\opt#1{{\tt[}{\it\meta{#1}}{\tt]}}
+% \def\optn#1{{\tt[#1]}}
+% \def\arg#1{{\tt\char`\{#1\char`\}}}
+%
+% \let\latex@addmarginpar\@addmarginpar
+% \let\latex@latex@warning@no@line\@latex@warning@no@line
+% \def\@addmarginpar{\let\@latex@warning@no@line\@gobble
+% \latex@addmarginpar
+% \let\@latex@warning@no@line\latex@latex@warning@no@line}
+% \let\@font@warning\@gobble
+%
+% \long\def\m@cro@#1#2{\endgroup \topsep\MacroTopsep \trivlist
+% \edef\saved@macroname{\string#2}
+% \def\makelabel##1{\llap{##1\hskip\@totalleftmargin}}
+% \if@inlabel
+% \let\@tempa\@empty \count@\macro@cnt
+% \loop \ifnum\count@>\z@
+% \edef\@tempa{\@tempa\hbox{\strut}}\advance\count@\m@ne \repeat
+% \edef\makelabel##1{\llap{\vtop to\baselineskip
+% {\@tempa\hbox{##1}\vss}
+% \hskip\@totalleftmargin}}
+% \advance \macro@cnt \@ne
+% \else \macro@cnt\@ne \fi
+% \edef\@tempa{\noexpand\item[
+% #1
+% \noexpand\PrintMacroName
+% \else
+% \noexpand\PrintEnvName
+% \fi
+% {\string#2}]}
+% \@tempa
+% \global\advance\c@CodelineNo\@ne
+% #1
+% \SpecialMainIndex{#2}\nobreak
+% \DoNotIndex{#2}
+% \else
+% \SpecialMainEnvIndex{#2}\nobreak
+% \fi
+% \global\advance\c@CodelineNo\m@ne
+% \ignorespaces}
+%
+% \def\dummymacro{\topsep\MacroTopsep \trivlist \item[]}
+% \let\enddummymacro\endtrivlist
+%
+% \def\DescribeOpt{\leavevmode\@bsphack\begingroup\MakePrivateLetters
+% \Describe@Opt}
+% \def\Describe@Opt#1{\endgroup \Describe@pt{#1}}
+% \def\Describe@pt#1#2{
+% \marginpar{\raggedleft\PrintDescribeMacro{#1}}
+% \SpecialOptUsageIndex{#1}{#2}}
+% \def\SpecialOptUsageIndex#1#2{
+% \index{#1\actualchar{\protect\ttfamily#1} (#2)\encapchar usage}
+% \index{#2s:\levelchar{\protect\ttfamily#1}\encapchar usage}
+% \@esphack\ignorespaces}
+% \def\SpecialOptMainIndex#1#2{
+% \index{#1\actualchar{\protect\ttfamily#1} (#2)\encapchar main}
+% \index{#2s:\levelchar{\protect\ttfamily#1}\encapchar main}
+% \@esphack\ignorespaces}
+% \def\SpecialOptIndex#1#2{
+% \index{#1\actualchar{\protect\ttfamily#1} (#2)}
+% \index{#2s:\levelchar{\protect\ttfamily#1}}
+% \@esphack\ignorespaces}
+% \def\SpecialOptIndexS#1#2{
+% \index{#1\actualchar{\protect\ttfamily#1} (#2)}
+% \index{#2es:\levelchar{\protect\ttfamily#1}}
+% \@esphack\ignorespaces}
+%
+% \begingroup
+% \gdef\@sverbcat{\catcode`\@\active\catcode`\#\active}
+% \catcode`\@\active \gdef@{\char`\@\penalty\exhyphenpenalty}
+% \catcode`\#\active \gdef#{\penalty\exhyphenpenalty}
+% \endgroup
+% \let\latex@sverb\@sverb
+% \def\@sverb{\@sverbcat\latex@sverb}
+%
+% \def\theglossary{\onecolumn \glossary@prologue
+% \GlossaryParms \let\item\@idxitem \ignorespaces}
+% \def\endtheglossary{\relax}
+%
+%
+%
+% \def\bracepair{`{\tt\char`\{\char`\}'}}
+%
+% \ifx\ONLYDESCRIPTION\undefined\else
+% \let\SpecialUsageIndex\SpecialMainIndex
+% \let\SpecialOptUsageIndex\SpecialOptMainIndex
+% \fi
+% \newverbatim{iverbatim}{\begin{itemize}\item[]\ttfamily}{}{}{\end{itemize}}
+%
+%
+%
+% \title{\textsf{newvbtm} and \textsf{varvbtm}\\
+% Packages for Variants of \texttt{verbatim} Environment\thanks{
+% This file has version number \fileversion, last revised \filedate.}}
+% \author{Hiroshi Nakashima\\(Toyohashi Univ. of Tech.)}
+% \date{\filedate}
+% \maketitle
+%
+% \begin{abstract}
+% This file provides two style files; \textsf{newvbtm} to define
+% |verbatim|-like environments; \textsf{varvbtm} to provide set of macros
+% for variants of |verbatim|, e.g.\ in which \texttt{\char`\^I} acts as a tab.
+% \end{abstract}
+%
+% \tableofcontents
+% \newpage
+%
+%
+%
+% \section{Introduction}
+% \label{sec:intro}
+%
+% \SpecialOptIndex{verbatim}{environment}
+% \LaTeX{} users often have trouble when they wish to have their own
+% customized |verbatim|-like environment. Probably you once wished to have
+% an indented-footnotesize-|verbatim| instead of always typing;
+%
+%\begin{iverbatim}
+%\begin{itemize}\item[]\footnotesize
+%\begin{verbatim}
+%...
+%\end{verbatim}
+%\end{itemize}
+%\end{iverbatim}
+%
+% and tried the following just to know it does not work.
+%
+%\begin{iverbatim}
+%\newenvironment{myverbatim}{\begin{itemize}\item[]\footnotesize
+% \begin{verbatim}}%
+% {\end{verbatim}\end{itemize}}
+%\end{iverbatim}
+%
+% Another trouble you probablly have had is that what you see in |verbatim|
+% text with |<TAB>| is not what you get because |<TAB>| does not acts as an
+% tab but a space.
+%
+% Of course it is possible to define your own |verbatim|-like environments
+% if you have enough knowledge of the implementation of |verbatim| including
+% dirty tricks with |\catcode|. However, even a \TeX{}pert should be bored
+% with typing a dirty code like;
+%
+%\begin{iverbatim}
+%\begingroup \catcode`\|=0 \catcode`\[=1 \catcode`\]=2
+%\catcode`\{=12 \catcode`\}=12 \catcode`\\=12
+%|long|def|@myxverbatim##1\end{myverbatim}[##1|end[myverbatim]]
+%|endgroup
+%\end{iverbatim}
+%
+% \DescribeOpt{newvbtm}{style file}
+% \DescribeOpt{varvbtm}{style file}
+% The style files distributed with this document will solve these problems.
+% You will have two style files, \textsf{newvbtm.sty} and
+% \textsf{varvbtm.sty}, by processing \textsf{newvbtm.dtx} with
+% \textsf{docstrip}, or simply doing the following.
+%
+%\begin{iverbatim}
+%% tex newvbtm.ins
+%\end{iverbatim}
+%
+% The former style provides you |\(re)newverbatim| command to (re)define
+% your own |verbatim|-like environment easily. The latter gives you a set
+% of various macros for tab-emulation, page break control, etc.
+%
+%
+%
+% \section{Usage}
+% \label{sec:usage}
+% \subsection{Loading Style Files}
+% \label{sec:usage-load}
+%
+% Both style files are usable to both \LaTeXe{} and \LaTeX-2.09
+% users with their standard package loading declaration. If you use
+% \LaTeXe{} and wish to load, for example, \textsf{newvbtm}, simply do the
+% following.
+%
+% \SpecialUsageIndex{\usepackage}
+%\begin{iverbatim}
+%\usepackage{newvbtm}
+%\end{iverbatim}
+%
+% If you still love \LaTeX-2.09, the following is what you have to do.
+%
+% \begin{quote}
+% \SpecialUsageIndex{\documentstyle}
+% |\documentstyle[..,newvbtm,...]|\Meta{main-style}
+% \end{quote}
+%
+% Note that loading \textsf{varvbtm} automatically loads \textsf{newvbtm}
+% too. Thus you may not load both though doing so is safe.
+%
+%
+%
+% \subsection{\textsf{newvbtm}: Define \texttt{verbatim}-like Environments}
+% \label{sec:usage-new}
+%
+% \SpecialOptIndex{newvbtm}{style file}
+% \DescribeMacro{\newverbatim}
+% The command;
+%
+% \begin{quote}
+% |\newverbatim|\Meta{env}\opt{n-args}
+% \Meta{beg-def-outer}\Meta{beg-def-inner}|%|\\
+% \phantom{\texttt{+newverbatim}\Meta{env}\opt{n-args}}
+% \Meta{end-def-inner}\Meta{end-def-outer}
+% \end{quote}
+%
+% defines an environment named \meta{env} with \meta{n-args} arguments
+% (optionally), and acting conceptually as follows:
+%
+% \begin{quote}
+% \meta{beg-def-outer}|\begin{verbatim}|\meta{beg-def-inner}\\
+% \meta{body-of-environment}\\
+% \meta{end-def-inner}|\end{verbatim}|\meta{end-def-outer}
+% \end{quote}
+%
+% Thus to have indented-footnotesize-|verbatim| named, say |indfnsverbatim|,
+% you may simply do the following.
+%
+%\begin{iverbatim}
+%\newverbatim{indfnsverbatim}{\begin{itemize}\item[]\footnotesize}{}{}%
+% {\end{itemize}}
+%\end{iverbatim}
+%
+% Since |\newverbatim| defines not only \meta{env} but also its starred
+% counterpart \meta{env}\texttt{*} that acts like |verbatim*|, the
+% definition above also defines |indfnsverbatim*| environment.
+%
+% If you use \LaTeXe{}, you may make \meta{env} have an optional argument
+% whose default value is \meta{default} by;
+%
+% \begin{itemize}\item[]
+% |\newverbatim|\Meta{env}\opt{n-args}\opt{default}
+% \Meta{beg-def-outer}\Meta{beg-def-inner}|%|\\
+% \phantom{\texttt{+newverbatim}\Meta{env}\opt{n-args}\opt{default}}
+% \Meta{end-def-inner}\Meta{end-def-outer}
+% \end{itemize}
+%
+% For example, our |indfnsverbatim| environment can have an optional
+% argument to specify a font size other than |\footnotesize| by the
+% following definition.
+%
+%\begin{iverbatim}
+%\newverbatim{indfnsverbatim}[1][\footnotesize]%
+% {\begin{itemize}\item[]#1}{}{}{\end{itemize}}
+%\end{iverbatim}
+%
+% The argument \meta{beg-def-inner} is for \TeX{}perts who wish to do
+% something overriding what \LaTeX's |\verbatim| does. Even if you don't
+% have much confidence in your \TeX{}pertise, however, you can do some
+% useful thing with this argument. For example, the following is obtained
+% by itself.
+%
+% \begin{itemize}\item[]
+%\newverbatim{slverbatim}{\ttfamily}{\slshape}{}{}
+%\begin{slverbatim}
+%\newverbatim{slverbatim}{}{\slshape}{}{}
+%\end{slverbatim}
+% \end{itemize}
+%
+% Also you will find a few commands for this argument in
+% \S\ref{sec:usage-var}.
+%
+% The needs of \meta{end-def-inner} is much more limited. One example is to
+% check if |\end{verbatim}| is at the beginning of a line. This examination
+% is done by;
+%
+% \begin{quote}
+% |\newverbatim{myverbatim}{...}{...}%|\\
+% | {\ifvmode |\meta{at-bol}| \else |\meta{not-at-bol}| \fi}{...}|
+% \end{quote}
+%
+% \DescribeMacro{\renewverbatim}
+% You may redefine your own |verbatim|-like environment, or even |verbatim|
+% itself, by |\renewverbatim| whose arguments are same as those of
+% |\newenvironment|.
+%
+%
+%
+% \subsection{\textsf{varvbtm}: To Make Variants of \texttt{verbatim}}
+% \label{sec:usage-var}
+%
+% \subsubsection{Tab Emulation}
+% \label{sec:usage-var-tab}
+%
+% \DescribeMacro{\newtabverbatim}
+% \DescribeMacro{\renewtabverbatim}
+% The commands |\(re)newtabverbatim| is to (re)define a |verbatim|-like
+% environment in which |<TAB>| acts as a tab. The syntax of the command is
+% same as that of |\(re)newverbatim|, and its operation is equivalent to;
+%
+% \begin{itemize}\item[]
+% |\(re)newverbatim|\Meta{env}\opt{n-args}\opt{default}\\
+% \mbox{}\qquad\qquad\Meta{beg-def-outer}|%|\\
+% \mbox{}\qquad\qquad|{|\meta{beg-def-inner}\meta{beg-def-for-tab}|}%|\\
+% \mbox{}\qquad\qquad|{|\meta{end-def-for-tab}\meta{end-def-inner}|}%|\\
+% \mbox{}\qquad\qquad\Meta{end-def-outer}
+% \end{itemize}
+%
+% For example;
+%
+%\begin{iverbatim}
+%\newtabverbatim{tabverbatim}{}{}{}{}
+%\end{iverbatim}
+%
+% defines |tabverbatim| environment just to make |<TAB>| act as a tab.
+% Another example to have tab emulation version of |indfnsverbatim| with
+% optional argument, say |indfnstabverbatim| is;
+%
+%\begin{iverbatim}
+%\newtabverbatim{indfnstabverbatim}[1][\footnotesize]%
+% {\begin{itemize}\item[]#1}{}{}{\end{itemize}}
+%\end{iverbatim}
+%
+% Note that in the starred version, e.g. |tabverbatim*|, a |<TAB>| is
+% translated into a sequence of \verb*! !.
+%
+% \DescribeOpt{VVBtabwidth}{counter}
+% The distance between tab stops is the width of eight characters of the
+% font used in the environment, i.e. typewriter font usually. If you want
+% to change this default value, set the counter |VVBtabwidth| to the number
+% of characters of the distance.
+%
+% \DescribeMacro{\VVBbegintab}
+% \DescribeMacro{\VVBendtab}
+% The magical stuff for \meta{beg-def-for-tab} and \meta{end-def-for-tab}
+% is also accessible through commands |\VVBbegintab| and |\VVBendtab| for
+% \TeX{}perts who wish to do something with |\(re)newverbatim| rather than
+% |\(re)newtabverbatim|.
+%
+%
+%
+% \subsubsection{Form Feed Character}
+% \label{sec:usage-var-ff}
+%
+% \DescribeMacro{\VVBprintFF}
+% \DescribeMacro{\VVBprintFFas}
+% You might have found that |<FF>| (or |^L|) in |verbatim| caused a
+% mysterious error;
+%
+%\begin{iverbatim}
+%! Forbidden control sequence found while scanning use of \@xverbatim.
+%\end{iverbatim}
+%
+% This is because |<FF>| is not {\em verbatimized}. Giving the command
+% |\VVBprintFF| to $\langle$\textit{beg-def-}\allowbreak
+% \textit{outer}$\rangle$ (or \meta{beg-def-inner}) of |\newverbatim| does
+% it for you and makes |<FF>| printed as |^L| in default. You may change
+% this default print image by;
+%
+% \begin{quote}
+% |\VVBprintFFas|\Meta{str}
+% \end{quote}
+% where \meta{str} is a sequence of any printable characters other than |{|
+% and |}|. Note that this command is very {\em fragile} as |\verb| and
+% |\index|, and thus should not be used in an argument of other commands
+% including |\(re)newverbatim|.
+%
+% \DescribeMacro{\VVBbreakatFF}
+% \DescribeMacro{\VVBbreakatFFonly}
+% The other way to make |<FF>| acceptable is to give it a useful and natural
+% job, i.e.\ page breaking. This is done by giving |\VVBbreakatFF| to
+% \meta{beg-def-inner} (not {\em outer}). Its more powerful relative,
+% |\VVBbreakatFFonly|, is also available to allow page breaking at |<FF>|
+% only. Unfortunately, these two commands are incompatible with
+% |\(re)newtabverbatim| and thus you have to use |\(re)newverbatim| with
+% |\VVBbegintab| {\em followed by} them.
+%
+%
+%
+% \subsubsection{Non-Verbatim Stuff in \texttt{verbatim}-like Environment}
+% \label{sec:usage-var-nonverb}
+%
+% \DescribeMacro{\VVBnonverb}
+% You might have once wished to insert a few non-verbatim stuff, for example
+% math stuff. The command, to be given to \meta{beg-def-outer};
+%
+%\begin{quote}
+%\newverbatim{verbatimwithnv}{\VVBnonverb{\!}\ttfamily}{}{}{}
+%\begin{verbatimwithnv}
+%\VVBnonverb{\!$\langle\mbox{\textit{char}}\rangle$!}
+%\end{verbatimwithnv}
+%\end{quote}
+%
+% makes it possible. For example, the author just did the following to
+% produce the result shown above.
+%
+%\begin{iverbatim}
+%\newverbatim{verbatimwithnv}{\VVBnonverb{\!}}{}{}{}
+%\begin{verbatimwithnv}
+%\VVBnonverb{\!$\langle\mbox{\textit{char}}\rangle$!}
+%\end{verbatimwithnv}
+%\end{iverbatim}
+%
+% As shown in the example above, the non-verbatim staff is surrounded by
+% a pair of \meta{char}, the letter `|!|' in this case. Note that
+% \meta{char} has to be preceded by `|\|' when it is given as the argument of
+% |\VVBnonbverb|, and \meta{char} should not be `|\|'. Also note that the
+% default font for the non-verbatim part % is not that for verbatim part,
+% but the font used outside the environment
+%
+% \footnote{Strictly speaking, the font used when \cs{VVBnonverb} is
+% invoked. Thus if \cs{VVBnonverb} is preceded by a font changing command,
+% the fond chosen by the command will be used.}.
+%
+% \DescribeMacro{\VVBnonverbmath}
+% As mentioned above, math stuffs will be most desirable to be
+% non-verbatim. Thus the macro;
+%
+%\begin{quote}
+%\newverbatim{verbatimwithnv}{\VVBnonverbmath\ttfamily}{}{}{}
+%\begin{verbatimwithnv}
+%\VVBnonverbmath[\$\langle\mbox{\textit{char}}\rangle$]
+%\end{verbatimwithnv}
+%\end{quote}
+% gives you a shorthand to typeset the stuff surrounded by a pair of
+% \meta{char} in math mode. Since the default of \meta{char} is |$| as
+% expected, the example above may be;
+%
+%\begin{iverbatim}
+%\newverbatim{verbatimwithnv}{\VVBnonverbmath}{}{}{}
+%\begin{verbatimwithnv}
+%\VVBnonverb{\$\langle\mbox{\textit{char}}\rangle$}
+%\end{verbatimwithnv}
+%\end{iverbatim}
+%
+%
+%
+% \subsubsection{Verbatim Input}
+% \label{sec:usage-var-input}
+%
+% The last thing \textsf{varvbtm} gives you is;
+%
+% \begin{itemize}\item[]
+% |\(re)newverbatiminput|\Meta{command}\opt{n-args}\opt{default}|%|\\
+% \phantom{\texttt{+(re)newverbatiminput}}
+% \Meta{beg-def-outer}\Meta{beg-def-inner}|%|\\
+% \phantom{\texttt{+(re)newverbatiminput}}
+% \Meta{end-def-inner}\Meta{end-def-outer}
+% \end{itemize}
+%
+% to define a \meta{command} to |\input| a file. Since this define a
+% \meta{command} instead of an environment, \meta{command} should have `|\|'
+% as its prefix. The \meta{command} has at least one mandatory argument,
+% \meta{file} to be input, which can be referred as first argument if
+% \opt{default} is not supplied, or as second otherwise. Note that,
+% however, if the \meta{command} does not have any other arguments, you can
+% omit \opt{n-arg}.
+%
+% For example;
+%
+%\begin{iverbatim}
+%\newverbatiminput{\vinput}{}{}{}{}
+%\end{iverbatim}
+%
+% defines |\vinput|\Meta{file} (and |\vinput*|) that |\input| a \meta{file}
+% as if the \meta{file} has |\begin|\slash|\end{verbatim}| at its first and
+% last lines. A little bit more complicated example;
+%
+%\begin{iverbatim}
+%\newverbatiminput{\indfnsvinput}[2][\footnotesize]%
+% {\begin{itemize}\item[]#1}{}{}{\end{itemize}}
+%\end{iverbatim}
+%
+% defines a indented-footnotesize-by-default version of |\vinput|.
+%
+%
+%
+% \IndexPrologue{\newpage\section*{Index}
+% Underlined number refers to the page where the specification of
+% corresponding entry is described.}
+% \StopEventually{
+% \section*{Acknowledgments}
+%
+% The author thanks to Noboru Matsuda and Carlos Puchol whose posts to
+% news groups triggered writing very first version of macros in
+% \textsf{newvbtm} and \textsf{varvbtm}.
+%
+% For the implementation of these style files, the author refers the base
+% implementations of the macros for \texttt{verbatim} environment.
+% These macros are written by Leslie Lamport as a part of
+% \LaTeX-2.09 and \LaTeXe{} (1997/12/01) to which Johannes Braams and other
+% authors also contributed.
+%
+% \PrintIndex}
+%
+%
+%
+% \newpage
+% \section{Implementation}
+% \label{sec:imp}
+% \subsection{Tricks for Compatibility}
+% \label{sec:imp-compat}
+%
+% \begin{macro}{\ifnvb@LaTeXe}
+% At the very beginning of each style file, we check whether it is loaded by
+% \LaTeXe{} or \LaTeX-2.09, declare the flag |\ifnvb@LaTeXe| and set it to
+% true or false, and then declare |\NeedsTeXFormat| and |\ProvidesPackage|
+% if \LaTeXe{}. This part is embedded at the beginning of
+% \textsf{newvbtm.dtx} in a tricky manner to let \textsf{docstrip} produce
+% the following code, for example for \textsf{newvbtm}.
+% \SpecialIndex{\NeedsTeXFormat}
+% \SpecialIndex{\ProvidesPackage}
+% \end{macro}
+%
+%\begin{itemize}\item[]
+%\begin{verbatim}
+%\newif\ifnvb@LaTeXe
+%\def\next{LaTeX2e}
+%\ifx\fmtname\next \nvb@LaTeXetrue
+%\def\next{
+%\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+%\ProvidesPackage{newvbtm}}
+%\else \nvb@LaTeXefalse
+%\def\next[#1]{}\fi
+%\next
+%[2002/04/08 v1.1 ]
+%\end{verbatim}
+%\end{itemize}
+%
+% \SpecialIndex{\RequirePackage}
+% In \textsf{varvbtm}, loading \textsf{newvbtm} also takes care of the
+% compatibility. That is, \textsf{newvbtm} is loaded by |\RequirePackage| if
+% \LaTeXe, while simply by |\input| otherwise. Since \textsf{newvbtm} does
+% not modifies any existential macros nor declares anything by |\new| except
+% for |\newif|\footnote{
+%
+% Multiple \cs{newif} for a flag is safe, and thus we do it for
+% \cs{nvb@LaTeXe} both in \textsf{newvbtm} and \textsf{varvbtm}.},
+%
+% it is safe even if |\newvbtm| is loaded multiple times in \LaTeX-2.09.
+%
+% \iffalse
+%<*varvbtm>
+% \fi
+% \begin{macrocode}
+
+\ifnvb@LaTeXe
+\RequirePackage{newvbtm}
+\else
+\input{newvbtm.sty}
+\fi
+% \end{macrocode}
+% \iffalse
+%</varvbtm>
+% \fi
+%
+%
+%
+% \subsection{\textsf{newvbtm}}
+% \label{sec:imp-new}
+%
+% \iffalse
+%<*newvbtm>
+% \fi
+% \begin{macro}{\newverbatim}
+% \begin{macro}{\renewverbatim}
+% \begin{macro}{\nvb@newenv}
+% \begin{macro}{\nvb@Xnewverbatim}
+% The macros |\newverbatim| and |\renewverbatim| call a macro
+% |\nvb@newverbatim| after |\nvb@newenv| and |\nvb@Xnewverbatim| are made
+% |\let|-equal to appropriate macros. That is, |\nvb@newenv| is either
+% |\newenvironment| or |\renewenvironment|, and |\nvb@Xnewverbatim| is, in
+% both cases, |\nvb@xnewverbatim| that is the body of our environment
+% definition as explained later. Note that |\nvb@Xnewverbatim| will be set
+% differently in the macros defined in \textsf{varvbtm}.
+% \end{macro}\end{macro}\end{macro}\end{macro}
+%
+% \begin{macro}{\nvb@newverbatim}
+% \begin{macro}{\nvb@inewverbatim}
+% The common macro |\nvb@newverbatim| checks the existence of \opt{n-args}
+% and then calls |\nvb@inewverbatim| to check that of \opt{default}. Note
+% that since \LaTeX-2.09's |\(re)newenvironment| does not have
+% \opt{default}, these macros have definitions slightly different from those
+% for \LaTeXe{} to pass an empty argument to |\nvb@Xnewverbatim| always.
+% \end{macro}\end{macro}
+%
+% \begin{macrocode}
+
+\def\newverbatim{\let\nvb@newenv\newenvironment
+ \let\nvb@Xnewverbatim\nvb@xnewverbatim \nvb@newverbatim}
+\def\renewverbatim{\let\nvb@newenv\renewenvironment
+ \let\nvb@Xnewverbatim\nvb@xnewverbatim \nvb@newverbatim}
+
+\ifnvb@LaTeXe
+\def\nvb@newverbatim#1{\@ifnextchar[%]
+ {\nvb@inewverbatim{#1}}{\nvb@inewverbatim{#1}[0]}}
+\def\nvb@inewverbatim#1[#2]{\@ifnextchar[%]
+ {\nvb@Xnewverbatim{#1}[#2]}{\nvb@Xnewverbatim{#1}[#2][]}}
+\else
+\def\nvb@newverbatim#1{\@ifnextchar[%]
+ {\nvb@inewverbatim{#1}}{\nvb@Xnewverbatim{#1}[0][]}}
+\def\nvb@inewverbatim#1[#2]{\nvb@Xnewverbatim{#1}[#2][]}
+\fi
+
+% \end{macrocode}
+%
+% \begin{macro}{\nvb@xnewverbatim}
+% \changes{v1.1}{2002/04/05}
+% {\cs{@tempa} is replaced by \cs{nvb@tempa} to avoid conflict in 2.09.}
+% \begin{macro}{\nvb@currenvir}
+% \begin{macro}{\nvb@defxverbatim}
+% \begin{macro}{\nvb@xverbatim}
+% \begin{macro}{\nvb@beginhook}
+% \begin{macro}{\nvb@endinhook}
+% \begin{macro}{\nvb@endouthook}
+% The macro |\nvb@xnewverbatim| performs the essential part of the function
+% to define a verbatim-like environment. First it checks if \meta{default}
+% is empty so that this optional argument is not passed to
+% |\(re)newenvironment|, especially of \LaTeX-2.09. Then it calls
+% |\(re)newenvironment| to define \meta{env} which performs the following in
+% \meta{beg-def} part.
+%
+% \begin{enumerate}
+% \def\labelenumi{b\arabic{enumi}.}
+% \item
+% |\def|-ine |\nvb@currenvir| to let it have \meta{env} as its body, so that
+% the name of environment can be referred by the macros in \textsf{varvbtm}.
+%
+% \item
+% Execute \meta{beg-def-outer}.
+%
+% \item
+% Open a group to localize assignments in \LaTeX's |\@verbatim|, especially
+% those of flags referred in |\list|-related macros.
+%
+% \item
+% Perform what \LaTeX's |\verbatim| does, i.e.\ |\@verbatim| etc., except for
+% |\@xverbatim|. In starred-version, only |\@verbatim| is called in this
+% step.
+%
+% \item
+% Call |\nvb@defxverbatim| to define |\nvb@xverbatim| that performs what
+% \LaTeX's \hbox{|\@xverbatim|} does but its argument terminator is
+% ``|\end|\Meta{env}''. The definition of |\nvb@defxverbatim| is done in a
+% group in which `|\|', `|{|' and `|}|' have ``other'' |\catcode| with the
+% well-known technique using `\verb!|!', `|[|' and `|]|'.
+%
+% \item
+% Call |\nvb@beginhook|, which is usually |\relax| but will not be if
+% |\VVBnonverb| is executed in \meta{beg-def-outer} as described in
+% \S\ref{sec:imp-var-nonverb}.
+%
+% \item
+% Execute \meta{beg-def-inner}.
+%
+% \item
+% Call |\nvb@xverbatim| to typeset the body of environment verbatim.
+% \end{enumerate}
+%
+% The \meta{end-def} part for \meta{env} performs the following.
+%
+% \begin{enumerate}
+% \def\labelenumi{e\arabic{enumi}.}
+% \item
+% Execute \meta{end-def-inner}.
+%
+% \item
+% Call |\nvb@endinhook|, which is |\relax| now but could do something if
+% necessary.
+%
+% \item
+% Call |\endverbatim| to close the |\trivlist| opened by |\@verbatim|.
+%
+% \item
+% Close the group opened by \meta{beg-def}.
+%
+% \item
+% Execute \meta{end-def-outer}.
+%
+% \item
+% Call |\nvb@endouthook|, which is also |\relax| now but might not be.
+%
+% \item
+% Turn |\if@endpe| true to tell |\end| that \meta{env} is list-like.
+% \end{enumerate}
+% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
+%
+% \begin{macrocode}
+\long\def\nvb@xnewverbatim#1[#2][#3]#4#5#6#7{\def\nvb@tempa{#3}%
+ \ifx\nvb@tempa\@empty \def\nvb@tempa{[#2]}%
+ \else \def\nvb@tempa{[#2][#3]}\fi
+ \def\@tempb{\nvb@newenv{#1}}%
+ \expandafter\@tempb\nvb@tempa
+ {\def\nvb@currenvir{#1}%
+ #4\begingroup \@verbatim \frenchspacing \@vobeyspaces
+ \nvb@defxverbatim{#1}\nvb@beginhook #5\nvb@xverbatim}%
+ {#6\nvb@endinhook \endverbatim \endgroup
+ #7\nvb@endouthook \@endpetrue}%
+ \def\@tempb{\nvb@newenv{#1*}}%
+ \expandafter\@tempb\nvb@tempa
+ {\def\nvb@currenvir{#1*}%
+ #4\begingroup \@verbatim
+ \nvb@defxverbatim{#1*}\nvb@beginhook #5\nvb@xverbatim}%
+ {\@nameuse{end#1}}}
+\let\nvb@beginhook\relax
+\let\nvb@endinhook\relax
+\let\nvb@endouthook\relax
+
+\begingroup \catcode`\|\z@ \catcode`\[\@ne \catcode`\]\tw@
+\@makeother\{ \@makeother\} \@makeother\\
+|gdef|nvb@defxverbatim#1[|long|def|nvb@xverbatim##1\end{#1}[##1|end[#1]]]
+|endgroup
+% \end{macrocode}
+%
+% \iffalse
+%</newvbtm>
+% \fi
+%
+%
+%
+% \subsection{\textsf{varvbtm}}
+% \label{sec:imp-var}
+%
+% \iffalse
+%<*varvbtm>
+% \fi
+%
+% \subsubsection{Tab Emulation}
+% \label{sec:imp-var-tab}
+%
+% For tab emulation, we declare the following registers.
+%
+% \begin{itemize}
+% \item
+% \begin{macro}{\c@VVBtabwidth}
+% The count register |\c@VVBtabwidth| that has the number of characters
+% between tab stops. The default value 8 is set.
+% \end{macro}
+%
+% \item
+% \begin{macro}{\vvb@tabwidth}
+% The dimen register |\vvb@tabwidth| that has the distance between tab
+% stops.
+% \end{macro}
+%
+% \item
+% \begin{macro}{\vvb@everypar}
+% The toks register |\vvb@everypar| to save the contents of |\everypar|,
+% though it is usually ineffective.
+% \end{macro}
+%
+% \item
+% \begin{macro}{\vvb@tabbox}
+% The box register |\vvb@tabbox| that contains stuffs between the beginning
+% of line or a tab stop and the end of line or another tab stop.
+% \end{macro}
+% \end{itemize}
+%
+% \begin{macrocode}
+
+%% Tab Emulation
+
+\newcounter{VVBtabwidth}\c@VVBtabwidth8
+\newdimen\vvb@tabwidth
+\newtoks\vvb@everypar
+\newbox\vvb@tabbox
+
+% \end{macrocode}
+%
+% \begin{macro}{\VVBbegintab}
+% \begin{macro}{\vvb@tabfil}
+% \begin{macro}{\vvb@tabdef}
+% The macro |\VVBbegintab|, which should be called from \meta{beg-def-inner}
+% part, performs a few preprocessing for tabbing some of which override the
+% definition in |\@verbatim|.
+%
+% A line in a tabbing verbatim environment is
+% enclosed in a box |\vvb@tabbox| so that we can know the horizontal
+% position of a tab. Thus, we let |\everypar| call |\vvb@tabbol| to
+% open the box, and |\par| be |\vvb@tabeol| to close. Note that
+% |\obeylines| after the |\let| for |\par| is necessary to make `|^M|'
+% |\let|-equal to our own |\par|.
+%
+% Then we set |\vvb@tabwidth| to
+% $|\c@VVBtabwidth|\times\hbox{\meta{width-of-\texttt{A}}}$. We also
+% |\def|-ine |\vvb@tabfil| to produce a sequence of `\verb*! !' in the case
+% of starred environment, i.e.\ the |\catcode| of space is not |\active|.
+%
+% Finally, we make |^I| active and |\let|-equal to |\vvb@tab| by
+% |\vvb@tabdef|.
+% \end{macro}\end{macro}\end{macro}
+%
+% \begin{macro}{\VVBendtab}
+% The macro |\VVBendtab|, which should be called from \meta{end-def-inner}
+% part, closes the box |\vvb@tabbox| if necessary, i.e.\ |\end|\Meta{env} is
+% not at the beginning of a line and thus not in vertical mode.
+% \end{macro}
+%
+% \begin{macrocode}
+\def\VVBbegintab{\vvb@everypar\everypar
+ \everypar{\vvb@tabbol \the\vvb@everypar}%
+ \let\par\vvb@tabeol \obeylines
+ \settowidth\vvb@tabwidth{A}\multiply\vvb@tabwidth\c@VVBtabwidth
+ \ifnum\catcode`\ =\active \let\vvb@tabfil\relax
+ \else \def\vvb@tabfil{\leaders\hbox{\char`\ }}\fi
+ \catcode`\^^I\active \vvb@tabdef}
+{\catcode`\^^I\active \gdef\vvb@tabdef{\let^^I\vvb@tab}}
+\def\VVBendtab{\ifvmode\else \par \fi}
+
+% \end{macrocode}
+%
+% \begin{macro}{\vvb@tabbol}
+% \begin{macro}{\vvb@tabeol}
+% The macro |\vvb@tabbol| opens the box |\vvb@tabbox|, while |\vvb@tabeol|
+% closes it after |\leavevmode| to ensure the box is opened and puts the
+% contents of the box as the last (and maybe only one) element of a
+% paragraph terminated by |\@@par|. The flag |\if@tempswa|, which |\@verbatim|
+% initiated to false, is examined in order to prevent |^M| just
+% following |\begin|\Meta{env} from making an empty line. Since the flag is
+% turned true by both |\vvb@tabbol| and |\vvb@tabeol|, a |^M| is in effect
+% in other cases.
+% \end{macro}\end{macro}
+%
+% \begin{macrocode}
+\def\vvb@tabbol{\@tempswatrue \setbox\vvb@tabbox\hbox\bgroup}
+\def\vvb@tabeol{\if@tempswa
+ \leavevmode \egroup \box\vvb@tabbox \@@par \penalty\interlinepenalty
+ \fi \@tempswatrue}
+
+% \end{macrocode}
+%
+% \begin{macro}{\vvb@tab}
+% The macro |\vvb@tab|, to which |^I| is made |\let|-equal, is the heart of
+% tabbing. It first closes |\vvb@tabbox| after |\leavevmode| to ensure its
+% opening. Then it moves to the next tab stop by putting a box of $(\lfloor
+% w/t\rfloor+1)\times t$ wide, where $w$ is the width of |\vvb@tabbox| and
+% $t$ is |\vvb@tabwidth|. In the box, the contents of |\vvb@tabbox| is
+% flushed left by |\vvb@tabfil#\hfil|, which makes invisible space in
+% non-starred environment because |\vvb@tabfil| is relax, while produces a
+% sequence of `\verb*! !' by |\leaders| in starred environment. After the
+% box is put, it opens |\vvb@tabbox| again by |\vvb@tabbol|.
+% \end{macro}
+%
+% \begin{macrocode}
+\def\vvb@tab{\leavevmode \egroup
+ \@tempdima\wd\vvb@tabbox \divide\@tempdima\vvb@tabwidth
+ \multiply\@tempdima\vvb@tabwidth \advance\@tempdima\vvb@tabwidth
+ \hbox to\@tempdima{\unhbox\vvb@tabbox \vvb@tabfil\hfil}\vvb@tabbol}
+
+% \end{macrocode}
+%
+% \begin{macro}{\newtabverbatim}
+% \begin{macro}{\renewtabverbatim}
+% \begin{macro}{\vvb@xnewtabverbatim}
+% Finally, we define |\newtabverbatim| and |\renewtabverbatim| for tabbing
+% verbatim environment definition. They call the common macro
+% |\nvb@newverbatim| described in \S\ref{sec:imp-new} to check the existence
+% of optional arguments as |\(re)newverbatim| does, but |\nvb@Xnewverbatim|
+% is made |\let|-equal to |\vvb@xnewtabverbatim| that simply calls
+% |\nvb@xnewverbatim| attaching |\VVBbegintab| and |\VVBendtab| to
+% \meta{beg-def-inner} and \meta{end-def-inner} respectively.
+% \end{macro}\end{macro}\end{macro}
+%
+% \begin{macrocode}
+\def\newtabverbatim{\let\nvb@newenv\newenvironment
+ \let\nvb@Xnewverbatim\vvb@xnewtabverbatim \nvb@newverbatim}
+\def\renewtabverbatim{\let\nvb@newenv\renewenvironment
+ \let\nvb@Xnewverbatim\vvb@xnewtabverbatim \nvb@newverbatim}
+\def\vvb@xnewtabverbatim#1[#2][#3]#4#5#6{%
+ \nvb@xnewverbatim{#1}[#2][#3]{#4}{#5\VVBbegintab}{\VVBendtab#6}}
+
+%%^L
+% \end{macrocode}
+%
+%
+%
+% \subsubsection{Form Feed Character}
+% \label{sec:imp-var-ff}
+%
+% \begin{macro}{\VVBprintFF}
+% \begin{macro}{\vvb@printFF}
+% \begin{macro}{\VVBprintFFas}
+% \begin{macro}{\vvb@printFFas}
+% The macro |\VVBprintFF| simply makes |^L| |\let|-equal to |\vvb@printFF|
+% whose body is print image of |^L| and is defined by |\VVBprintFFas|.
+% Since the body of |\VVBprintFF| has |^L| that usually cannot appear in
+% the body of a macro because of its |\active|-ness and {\em outerness}, its
+% |\def|-inition is enclosed in a group in which |^L| is made |\relax|
+% together with that of |\VVBbreakatFF|.
+%
+% The macro |\VVBprintFFas|, cooperating with |\VVB@printFFas|, defines its
+% argument \meta{str} verbatim as the body of |\vvb@printFF| by a well-known
+% trick with grouping and \hbox{|\@sanitize|} used in, for example, |\index|.
+% The default print image ``|^L|'' is also defined by |\VVBprintFFas|.
+% \end{macro}\end{macro}\end{macro}\end{macro}
+%
+% \begin{macro}{\VVBbreakatFF}
+% \begin{macro}{\vvb@FFpar}
+% \begin{macro}{\vvb@breakFF}
+% \begin{macro}{\vvb@parafterFF}
+% The macro |\VVBbreakatFF| makes |^L| |\let|-equal to |\vvb@breakFF| and
+% saves the definition of |\par| in |\vvb@FFpar| because it will be modified
+% by |\vvb@breakFF|\@. The macro |\vvb@breakFF| breaks the current page and
+% then makes |\par|, and |^M| by |\obeylines|, |\let|-equal to
+% |\vvb@parafterFF|\@. Since |\vvb@parafterFF| will do |\par| saved in
+% |\vvb@FFpar| only when horizontal mode, |^M| just following |^L| will not
+% produce an empty line at the beginning of the new page. After the first
+% |^M| in the page, |\par| and |^M| regain their original definitions.
+% \end{macro}\end{macro}\end{macro}\end{macro}
+%
+% \begin{macro}{\VVBbreakatFFonly}
+% \begin{macro}{\vvb@FF@par}
+% \begin{macro}{\vvb@FFpenalty}
+% \begin{macro}{\vvb@parnobreak}
+% The macro |\VVBbreakatFFonly| does what |\VVBbreakatFF| by calling it but
+% before that it makes |\par| |\let|-equal to |\vvb@parnobreak| saving its
+% definition in |\vvb@FF@par|. The macro |\vvb@parnobreak| temporarily
+% makes |\penalty| |\let|-equal to |\@tempcnta| in order that
+% |\penalty|\meta{num} in original |\par| saved in |\vvb@FF@par| do
+% nothing. Then it restores |\penalty| from |\vvb@FFpenalty| and inserts
+% |\nobreak| to inhibit page break at |^M|. The temporary modification of
+% |\penalty| is done |\global|-ly because of the compatibility with the
+% tabbing verbatim.
+% \end{macro}\end{macro}\end{macro}\end{macro}
+%
+% \begin{macrocode}
+
+%% Form Feed Character
+
+\begingroup \let^^L\relax
+\gdef\VVBprintFF{\let^^L\vvb@printFF}
+\gdef\VVBbreakatFF{\let^^L\vvb@breakFF \let\vvb@FFpar\par}
+\endgroup
+
+\def\VVBprintFFas{\begingroup \@sanitize \vvb@printFFas}
+\def\vvb@printFFas#1{\endgroup \def\vvb@printFF{#1}}
+\VVBprintFFas{^L}
+
+\def\vvb@breakFF{\par \vfil \break \let\par\vvb@parafterFF \obeylines}
+\def\vvb@parafterFF{\ifhmode \vvb@FFpar \fi \let\par\vvb@FFpar \obeylines}
+
+\gdef\VVBbreakatFFonly{\let\vvb@FF@par\par
+ \let\par\vvb@parnobreak \obeylines \VVBbreakatFF}
+\let\vvb@FFpenalty\penalty
+\def\vvb@parnobreak{\global\let\penalty\@tempcnta \vvb@FF@par
+ \global\let\penalty\vvb@FFpenalty \nobreak}
+
+%%^L
+% \end{macrocode}
+%
+%
+%
+% \subsubsection{Non-Verbatim}
+% \label{sec:imp-var-nonverb}
+%
+% \begin{macro}{\VVBnonverb}
+% \begin{macro}{\vvb@nvfont}
+% \begin{macro}{\vvb@currsize}
+% \begin{macro}{\vvb@beginhook}
+% The macro |\VVBnonverb| saves the current font in |\vvb@nvfont|. If
+% \LaTeXe, its body will be a sequence of |\fontencoding|\meta{curr-encoding}
+% and its relatives followed by |\selectfont|. Otherwise, its body will be
+% the current font size command saved in |\vvb@currsize| followed by the
+% current font produced by |\the\font|. Then |\VVBnonverb| defines
+% |\nvb@beginhook| so as to call |\vvb@nonverb| with the argument
+% |\|\meta{char} just before \meta{beg-def-inner} is executed.
+% \end{macro}\end{macro}\end{macro}\end{macro}
+%
+% \begin{macro}{\VVBnonverbmath}
+% \begin{macro}{\vvb@nonverbmath}
+% \begin{macro}{\vvb@@bnonverb}
+% \begin{macro}{\vvb@@enonverb}
+% The macro |\VVBnonverbmath| examines the existence of its optional
+% argument |\|\meta{char} and calls |\VVBnonverb| via |\vvb@nonverbmath|
+% with it or with |\$| if omitted. Prior to the call, it makes both
+% |\vvb@@bnonverb| and |\vvb@@enonverb| |\let|-equal to `|$|' so that the
+% non-verbatim part is surrounded by them.
+% \end{macro}\end{macro}\end{macro}\end{macro}
+%
+% \begin{macrocode}
+
+%% Non-Verbatim
+
+\def\VVBnonverb#1{\ifnvb@LaTeXe
+ \edef\vvb@nvfont{\noexpand\fontencoding{\f@encoding}%
+ \noexpand\fontfamily{\f@family}%
+ \noexpand\fontseries{\f@series}%
+ \noexpand\fontshape{\f@shape}%
+ \noexpand\fontsize{\f@size}{\noexpand\f@baselineskip}%
+ \noexpand\selectfont}%
+ \else
+ \let\vvb@currsize\@currsize
+ \edef\vvb@nvfont{\noexpand\vvb@currsize \the\font}\fi
+ \def\nvb@beginhook{\vvb@nonverb#1}}
+\def\VVBnonverbmath{\@ifnextchar[%]
+ {\vvb@nonverbmath}{\vvb@nonverbmath[\$]}}
+\def\vvb@nonverbmath[#1]{\let\vvb@@bnonverb$\let\vvb@@enonverb$\VVBnonverb#1}
+
+% \end{macrocode}
+%
+% \begin{macro}{\vvb@nonverb}
+% \begin{macro}{\vvb@bnonverb}
+% \begin{macro}{\vvb@enonverb}
+% \begin{macro}{\vvb@@bnonverb}
+% \begin{macro}{\vvb@@enonverb}
+% \begin{macro}{\do}
+% \begin{macro}{\vvb@regaincat}
+% The macro |\vvb@nonverb| defines the |\active| \meta{char} to open a
+% |\hbox| after |\leavevmode| and then to call |\vvb@bnonverb| to do the
+% following. First it selects the font saved in |\vvb@nvfont| and then
+% restores |\catcode| of special characters by |\vvb@regaincat|. Since the
+% body of |\vvb@regaincat| is the expansion result of |\dospecials| with the
+% defintion of |\do| as;
+%
+%\begin{iverbatim}
+%\def\do#1{\catcode`\noexpand#1\number\catcode`#1\relax}
+%\end{iverbatim}
+%
+% it should be the sequence of ``\verb*!\catcode`\ 10!'' and so on. The
+% macro |\vvb@bnoverb| also set |\catcode| of characters in
+% |\verbatim@nolig@list| if exists or `|`|' otherwise to 12 (other). Then
+% the |\catcode| of \meta{char} is made |\active| because it might not be by
+% the preceding |\catcode| modification. Finaly it calls |\vvb@enonverb| to
+% get non-verbatim stuff.
+%
+% The macro |\vvb@enonverb|, which is also defined in |\vvb@nonverb|, gets
+% everything before \meta{char}, puts it in the |\hbox| surrounding it by
+% |\vvb@@bnonverb| and |\vvb@@enonverb|, which are both `|$|' in the case of
+% |\VVBnonverbmath| but |\relax| otherwise, and then closes the |\hbox|.
+%
+% Since the definitions of the \meta{char} and |\vvb@enonverb| should have
+% |\active| \meta{char}, we use the trick with |\lowercase| in which the
+% |\lccode| of `|~|' is the code of \meta{char}.
+%
+% After the definitions, the character `|\|' is made |\active| and
+% |\let|-equal to |\vvb@esc| by |\vvb@escdef| so that we can find
+% ``|end|\Meta{env}'', stored in |\vvb@endenvir| by |\vvb@enddef|, following
+% `|\|'. Note that we cannot use the conventional scheme to get everything
+% in the body of \meta{env} by |\nvb@xverbatim| because the |\catcode| of
+% special characters are modified in non-verbatim part. Thus we make `|\|'
+% active and |\vvb@xverbatim| |\relax|.
+% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}
+%
+% \begin{macrocode}
+\def\vvb@nonverb#1{\catcode`#1\active \begingroup \lccode`\~`#1\relax
+ \lowercase{\endgroup
+ \def~{\leavevmode \hbox\bgroup \vvb@bnonverb#1}%
+ \def\vvb@enonverb##1~{\vvb@@bnonverb
+ ##1\vvb@@enonverb \egroup}}%
+ \catcode`\\\active \vvb@escdef \vvb@enddef \let\nvb@xverbatim\relax}
+\def\vvb@bnonverb#1{\vvb@nvfont \vvb@regaincat
+ \ifx\verbatim@nolig@list\undefined \@makeother\`\relax
+ \else \let\do\@makeother \verbatim@nolig@list \fi
+ \catcode`#1\active \vvb@enonverb}
+\let\vvb@@bnonverb\relax
+\let\vvb@@enonverb\relax
+\def\do#1{\catcode`\noexpand#1\number\catcode`#1\relax}
+\edef\vvb@regaincat{\dospecials}
+
+% \end{macrocode}
+%
+% \begin{macro}{\vvb@escdef}
+% \begin{macro}{\vvb@enddef}
+% \begin{macro}{\vvb@endenvir}
+% The macro |\vvb@escdef| simply let |\active| character `|\|' act as the
+% macro |\vvb@esc|, while |\vvb@enddef| defines the macro |\vvb@endenvir| as
+% ``|end|\Meta{env}'' referring the environment name saved in
+% |\vvb@currenvir|. Since these two macros has `|\|', `|{|' and `|}|' of
+% ``other'' category, the well-known technique replacing them is used.
+% \end{macro}\end{macro}\end{macro}
+%
+% \begin{macrocode}
+\begingroup \catcode`\|\z@ \catcode`\[\@ne \catcode`\]\tw@
+\@makeother\{ \@makeother\} \catcode`\\|active
+|gdef|vvb@escdef[|let\|vvb@esc]
+|gdef|vvb@enddef[|edef|vvb@endenvir[end{|nvb@currenvir}]]
+|endgroup
+
+% \end{macrocode}
+%
+% \begin{macro}{\vvb@esc}
+% \begin{macro}{\vvb@checkend}
+% The macro |\vvb@esc| for `|\|' in |\active| examines if it is followed by
+% |end|\Meta{env} stored in |\vvb@endenvir|. The examination is done in
+% character-by-character manner by |\vvb@checkend| because we might have a
+% partially matching sequence followed by non-verbatim stuff which cannot be
+% picked before the |\catcode| modification. The comparison for the
+% examination is done by |\ifx| because we might have an |\active| character.
+%
+% If we find the terminator, we call |\end|\Meta{env} to close the
+% environment. Otherwise, the |\char|-acter `|\|' followed by the partial
+% matched (possibly empty) sequence followed by the unmatched character are
+% inserted back.
+% \end{macro}\end{macro}
+%
+% \begin{macrocode}
+\def\vvb@esc{\let\@tempa\vvb@endenvir \let\@tempb\@empty \vvb@checkend}
+\def\vvb@checkend#1{\edef\@tempc{\expandafter\@car\@tempa\@nil}%
+ \def\@tempd{#1}\ifx\@tempc\@tempd
+ \edef\@tempa{\expandafter\@cdr\@tempa\@nil}%
+ \ifx\@tempa\@empty
+ \edef\next{\noexpand\end{\nvb@currenvir}}%
+ \else
+ \edef\@tempb{\@tempb#1}\let\next\vvb@checkend \fi
+ \else \def\next{\char`\\\@tempb#1}\fi
+ \next}
+
+%%^L
+% \end{macrocode}
+%
+%
+%
+% \subsubsection{Verbatim Input}
+% \label{sec:imp-var-input}
+%
+% \begin{macro}{\newverbatiminput}
+% \begin{macro}{\renewverbatiminput}
+% \begin{macro}{\vvb@Xnewverbatim}
+% The macros |\newverbatiminput| and |\renewverbatiminput| call the common
+% macro |\nvb@newverbatim| described in \S\ref{sec:imp-new} to check the
+% existence of optional arguments, making |\nvb@Xnewverbatim| |\let|-equal
+% to their own version, |\nvb@xnewvinput|.
+% \end{macro}\end{macro}\end{macro}
+%
+% \begin{macrocode}
+
+%% Verbatim Input
+
+\def\newverbatiminput{\let\nvb@newenv\newenvironment
+ \let\nvb@Xnewverbatim\vvb@xnewvinput \nvb@newverbatim}
+\def\renewverbatiminput{\let\nvb@newenv\renewenvironment
+ \let\nvb@Xnewverbatim\vvb@xnewvinput \nvb@newverbatim}
+
+% \end{macrocode}
+%
+% \begin{macro}{\nvb@xnewvinput}
+% \begin{macro}{\nvb@xnewvinputnodef}
+% \begin{macro}{\nvb@xnewvinputdefault}
+% The macro |\nvb@xnewvinput| defines environments of weird names,
+% \meta{command} name followed by a space and a `|*|' for starred-version.
+% The \meta{command} itself is defined to call |\begin|\Meta{env} or
+% |\begin{|\meta{env}|*}|, where \meta{env} is what we now define, according
+% to the existence of `|*|' following the \meta{command}.
+%
+% Prior to defining \meta{env}, we check if the optional \meta{n-args} is
+% zero, and makes it one if so for the argument \meta{file}. We also check
+% the existence of the \meta{default} argument, because if omitted
+% \meta{file} is the first argument as |\vvb@xnewvinputnodef| defines, while
+% the second otherwise as |\vvb@xnewvinputdefault| does. The core of the
+% definition is in the \meta{beg-def-inner} part given to
+% |\nvb@xnewverbatim|. In this part, we redefine |\nvb@xverbatim| as
+% |\end|\Meta{env} and then |\input| the \meta{file} so that the environment
+% is immediately closed after the \meta{file} is read verbatim.
+% \end{macro}\end{macro}\end{macro}
+%
+% \begin{macrocode}
+\def\vvb@xnewvinput#1[#2][#3]{%
+ \edef\@tempa{\expandafter\@cdr\string#1\@nil\space}
+ \edef#1{\noexpand\@ifstar{\noexpand\begin{\@tempa*}}%
+ {\noexpand\begin{\@tempa}}}%
+ \ifnum#2=\z@
+ \edef\@tempa{\noexpand\nvb@xnewverbatim{\@tempa}[1]}
+ \else
+ \edef\@tempa{\noexpand\nvb@xnewverbatim{\@tempa}[#2]}\fi
+ \def\@tempb{#3}\ifx\@tempb\@empty \let\@tempb\vvb@xnewvinputnodef
+ \else \let\@tempb\vvb@xnewvinputdefault \fi
+ \@tempb[#3]}
+\def\vvb@xnewvinputnodef[#1]#2#3{%
+ \@tempa[#1]{#2}{#3%
+ \edef\nvb@xverbatim{\noexpand\end{\nvb@currenvir}}\input{##1}}}
+\def\vvb@xnewvinputdefault[#1]#2#3{%
+ \@tempa[#1]{#2}{#3%
+ \edef\nvb@xverbatim{\noexpand\end{\nvb@currenvir}}\input{##2}}}
+% \end{macrocode}
+%
+% \iffalse
+%</varvbtm>
+% \fi
+%
+%
+%
+% \IndexPrologue{\newpage\section*{Index}
+% Italicized number refers to the page where the specification and usage of
+% corresponding entry is described, while underlined is for the
+% implementation of the entry.}
+% \Finale
+% \GlossaryPrologue{\newpage\section*{Revision History}}
+% \PrintChanges
+\endinput
diff --git a/macros/latex/contrib/newvbtm/newvbtm.ins b/macros/latex/contrib/newvbtm/newvbtm.ins
new file mode 100644
index 0000000000..04d71c8994
--- /dev/null
+++ b/macros/latex/contrib/newvbtm/newvbtm.ins
@@ -0,0 +1,7 @@
+\input docstrip.tex
+\keepsilent
+\askonceonly
+\generate{\file{newvbtm.sty}{\from{newvbtm.dtx}{newvbtm}}
+ \file{varvbtm.sty}{\from{newvbtm.dtx}{varvbtm}}
+ \file{newvbtm-man.tex}{\from{newvbtm.dtx}{driver}}}
+\endbatchfile