From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/newvbtm/README | 36 + macros/latex/contrib/newvbtm/newvbtm-man.pdf | Bin 0 -> 82006 bytes macros/latex/contrib/newvbtm/newvbtm.dtx | 1280 ++++++++++++++++++++++++++ macros/latex/contrib/newvbtm/newvbtm.ins | 7 + 4 files changed, 1323 insertions(+) create mode 100644 macros/latex/contrib/newvbtm/README create mode 100644 macros/latex/contrib/newvbtm/newvbtm-man.pdf create mode 100644 macros/latex/contrib/newvbtm/newvbtm.dtx create mode 100644 macros/latex/contrib/newvbtm/newvbtm.ins (limited to 'macros/latex/contrib/newvbtm') 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 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 Binary files /dev/null and b/macros/latex/contrib/newvbtm/newvbtm-man.pdf 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 +%%% Style file `newvbtm'. +%%% Style file `varvbtm'. +%% Copyright (C) 1999-2002 Hiroshi Nakashima +%% (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} +% +%\newif\ifnvb@LaTeXe +%\def\next{LaTeX2e} +%\ifx\fmtname\next \nvb@LaTeXetrue +%\def\next{ +%\NeedsTeXFormat{LaTeX2e}[1994/12/01] +%\ProvidesPackage{newvbtm}} +%\ProvidesPackage{varvbtm}} +%\else \nvb@LaTeXefalse +%\def\next[#1]{}\fi +%\next +%\ProvidesFile{newvbtm-man.tex} +% \fi +% \ProvidesFile{newvbtm.dtx} +[2002/04/08 v1.1 ] +% \iffalse +%<*driver> +\documentclass{ltxdoc} +\usepackage{varvbtm} +\DisableCrossrefs +\PageIndex +\CodelineNumbered +\RecordChanges +% +%\OnlyDescription +%\def\ONLYDESCRIPTION{} +%<*driver> +\advance\textwidth4em +\begin{document} +\DocInput{newvbtm.dtx} +\end{document} +% +% \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 || is not what you get because || 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 || 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 || 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 || 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 || (or |^L|) in |verbatim| caused a +% mysterious error; +% +%\begin{iverbatim} +%! Forbidden control sequence found while scanning use of \@xverbatim. +%\end{iverbatim} +% +% This is because || 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 || 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 || 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 || +% 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 +% +% \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 +% +% \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 +% +% \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 -- cgit v1.2.3