summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/gmverb
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-12-19 01:01:29 +0000
committerKarl Berry <karl@freefriends.org>2006-12-19 01:01:29 +0000
commitdf7778c48becf35354216fce0df5a04f4538912e (patch)
treef4486d017dd2ac7619df1b147bb8cff2f155c32a /Master/texmf-dist/tex/latex/gmverb
parent8d7729dececc6e5d1fd0d56383ee996069c6a47c (diff)
new package gmverb (18dec06)
git-svn-id: svn://tug.org/texlive/trunk@2800 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/gmverb')
-rw-r--r--Master/texmf-dist/tex/latex/gmverb/gmverb.sty664
1 files changed, 664 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/gmverb/gmverb.sty b/Master/texmf-dist/tex/latex/gmverb/gmverb.sty
new file mode 100644
index 00000000000..ccc52c4be21
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/gmverb/gmverb.sty
@@ -0,0 +1,664 @@
+%
+% \GetFileInfo{gmverb.sty}
+% \title{The \pk{gmverb} Package\thfileinfo}
+% \author{Grzegorz `Natror' Murzynowski}
+% \date{\today}
+% \maketitle
+%%
+%% This is (a~documentation of) file \pk{gmverb.sty},
+%% intended to be used with \LaTeXe\ as a~package for
+%% a~slight redefinition of the |\verb| macro and \env{verbatim}
+%% environment and for short verb marking such as \verb+|\mymacro|+.
+%% \medskip
+%%
+% \begin{copyrnote}
+%
+%%Written by Grzegorz `Natror' Murzynowski,
+%% natror at o2 dot pl
+%%
+%% \copyright\,2005, 2006 by Grzegorz `Natror' Murzynowski.
+%%
+%% This program is subject to the \LaTeX\ Project Public License.
+%% See \url{http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html} ^^A
+%% for the details of that license.
+%%
+%% LPPL status: "author-maintained".\par
+%%
+%% Many thanks to my \TeX\ Guru Marcin Woli\'nski for his \TeX nical ^^A
+%% support.\par
+%\end{copyrnote}
+%
+% \ChangesStart{}{1000/00/00}
+%
+% \chschange{v0.70}{06/8/15}{523}
+% \chschange{v0.71}{06/9/04}{596}
+% \chschange{v0.72}{06/9/05}{660}
+% \chschange{v0.73}{06/9/06}{671}
+% \chschange{v0.74}{06/9/7}{678}
+% \chschange{v0.76}{06/9/24}{679}
+% \chschange{v0.77}{06/9/28}{639}
+% \chschange{v0.78}{06/12/1}{648}
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gmverb}
+ [2006/12/01 v0.78 After shortvrb (FM) but my way (GM)]
+
+%
+% \tableofcontents
+%
+% \division{Intro, Usage}
+%
+% This package redefines the |\verb| command and the \env{verbatim}
+% environment so that the verbatim text can break into lines, with |%|
+% (or another character chosen to be the comment char) as
+% a~`hyphen'. Moreover, it allows the user to define \hisher\ own
+% \env{verbatim}-like environments provided their contents would be not
+% \emph{horribly} long (as long as a macro's argument may be at most).
+%
+% This package also allows the user to declare a chosen char(s) as
+% a `short verb' e.g., to write \verb+|\a\verbatim\example|+ instead of
+% \verb+\verb|\a\verbatim\example|+.
+% \dekmedskip
+%
+% The \pk{gmverb} package redefines the |\verb| command and the
+% \env{verbatim} environment in such a~way that | |, |{| and |\| are
+% breakable, the first with no `hyphen' and the other two with the
+% comment char as a~hyphen. I.e. |{|\<subsequent text>|}| breaks into
+% |{%|\par \<subsequent text>|}| ^^A] bal. braces for Emacs
+% and \<text>|\mymacro| breaks into \<text>|%|\par
+% |\mymacro|.
+%
+% (If you don't like linebreaking at backslash, there's the
+% \TextUsage\fixbslash\ declaration (observing the common scoping
+% rules, hence OCSR) and an analogous
+% declaration for the left brace: \TextUsage\fixlbrace.)
+% \dekmedskip
+%
+% The default `hyphen' is |%| since it's the default comment char. If
+% you wish another char to appear at the linebreak, use the
+% \TextUsage\VerbHyphen\ declaration that takes |\|\<char> as the only
+% argument. This declaration is always global.
+%
+% \stanza
+% Another difference is the \TextUsage\verbeolOK\ declaration
+% (OCSR). Within its scope, |\verb| allows an
+% end of a~line in its argument and typesets it just as a~space.
+%
+% As in the standard version(s), the plain |\verb| typesets the spaces
+% blank and |\verb*| makes them visible.
+%
+% Moreover, \pk{gmverb} provides the \TextUsage\MakeShortVerb\ macro
+% that takes a~one-char control sequence as the only argument and
+% turns the char used into a~short verbatim delimiter, e.g., after
+% \verb+\MakeShortVerb*\|+ (as you guess, the declaration has its
+% starred version, which is for visible spaces, and the non-starred for
+% the spaces blank) you may type \verb+|\mymacro|+ to achieve |\mymacro|
+% instead of typing |\verb+\mymacro+|. Because the char used in this
+% example is my favourite and used just this way by DEK in the
+% \TeXbook's format, \pk{gmverb} provides a~macro \TextUsage\dekclubs\
+% as a~shorthand for \verb+\MakeShortVerb*\|+.
+%
+% Be careful because such active chars may interfere with other
+% things, e.g., the \verb+|+ with the vertical marker in tables and
+% with the \pk{tikz} package. If this happens, you can declare e.g.,
+% \TextUsage\DeleteShortVerb\verb+\|+ and the previous meaning of the
+% char used shall be restored.
+%
+% One more difference between \pk{gmverb} and \pk{shortvrb} is that
+% the chars |\active|ated by |\MakeShortVerb| in the math mode behave
+% as if they were `other', so you may type e.g., \verb+$|$+ to achieve
+% $|$ and |+| |\active|ated this way is in the math mode typeset properly
+% etc.
+%
+% There's one more declaration provided by \pk{gmverb}:
+% \TextUsage\dekclubs, which is a~shorthand for
+% \verb+\MakeShortVerb*\|+\,.
+%
+% \stanza
+% As many good packages, this also does not support any options.
+%
+% \begin{gmlonely}
+% \subdivision{Installation}
+%
+% Just put the \pk{gmverb.sty} somewhere in the \file{texmf/\:tex/\:latex}
+% branch. Creating a~\file{texmf/\:tex/\:latex/\:gm} directory may be advisable
+% if you consider using other packages written by me.
+%
+% Then you should refresh your \TeX\ distribution's files' database
+% most probably.
+% \end{gmlonely}
+%
+% \subdivision{Contents of the \pk{gmverb.zip} Archive}
+%
+% The distribution of the \pk{gmverb} package consists of the
+% following four files.
+% \begin{verse}
+% \pk{gmverb.sty}\\
+% \pk{README}\\
+% \pk{gmverbDoc.tex}\\
+% \pk{gmverbDoc.pdf}
+% \end{verse}
+%
+% \begin{gmlonely}
+% \subdivision{Compiling the Documentation}
+%
+% The last of the above files (the \pk{.pdf}, i.e., \emph{this
+% file}) is a~documentation compiled from the \pk{.sty} file by
+% running \LaTeX\ on the \pk{gmverbDoc.tex} file twice,
+% then MakeIndex on the gmverb.idx file, and then \LaTeX\
+% on gmverbDoc.tex once more.
+%
+% MakeIndex shell command:
+%\begin{verbatim}
+%makeindex -r gmverbDoc
+%\end{verbatim}
+% The |-r| switch is to forbid MakeIndex to make implicit ranges since
+% the (code line) numbers will be hyperlinks.
+%
+% Compiling the documentation requires the packages:
+% \pk{gmdoc} (\pk{gmdoc.sty} and \pk{gmdocc.cls}), \pk{gmverb.sty},
+% \pk{gmutils.sty} and also some standard packages:
+% \pk{hyperref.sty}, \pk{color.sty}, \pk{geometry.sty},
+% \pk{multicol.sty}, \pk{lmodern.sty} and \pk{fontenc.sty} that should
+% be installed on your computer by default.
+%
+% If you had not installed the \pk{mwcls} classes (available on
+% CTAN and present in \TeX\ Live e.g.), the result of your
+% compilation might differ a~bit from the \pk{.pdf} provided in this
+% \pk{.zip} archive in formatting: If you had not installed
+% \pk{mwcls}, the standard \pk{article.cls} class would be used.
+% \end{gmlonely}
+%
+%
+% \StopEventually{\NoEOF}
+%
+%
+% \division{The Code}
+%
+% \DoIndex{\verb \verb*}
+% \subdivision{Preliminaries}
+% \CodeDefine\firstofone \CodeDefine\afterfi
+\long\def\firstofone#1{#1}
+\long\def\afterfi#1\fi{\fi#1}
+
+% The standard |\obeyspaces| command is only re|\catcode|ing of the
+% space to be \catactive. Since we'll know a~bit of where these
+% macros are used, we know we have also to (re)define such an active
+% space to be some space.
+% \CodeDefine\gmobeyspaces
+\begin{catcode}`\ \active
+\gdef\gmobeyspaces{\catcode`\ \active\let \ }
+\end{catcode}
+% (The above three preliminary definitions are present also in
+% \pk{gmutils}.)
+
+% \CodeDefine\twelvepercent
+% \begin{oldmc}
+\bgroup
+\@makeother\%
+\firstofone{\egroup
+ \def\twelvepercent{%}}
+% \end{oldmc}
+
+% Someone may want to use another char for comment, but we assume here
+% `orthodoxy'. Other assumptions in \pk{gmdoc} are made. The `knowledge'
+% what char is the comment char is used to put proper `hyphen' when
+% a~\env{verbatim} line is broken.
+% \CodeDefine\verbhyphen
+% \changes{v0.75}{06/9/8}{renamed from a~rather confusing
+% \cs{commentchar}}
+\let\verbhyphen\twelvepercent
+
+% Provide a~declaration for easy changing it. Its argument should be
+% of |\|\<char> form (of course, a~\<char>\catother is also allowed).
+% \CodeDefine\VerbHyphen
+% \changes{v0.78}{06/12/1}{added}
+\def\VerbHyphen#1{%
+ {\escapechar\m@ne
+ \expandafter\gdef\expandafter\verbhyphen\expandafter{\string#1}}}
+% As you see, it's always global.
+
+
+% \subdivision{The Breakables}
+%
+% Let's define a~|\discretionary| left brace such that if it breaks,
+% it turns |{%| at the end of line. We'll use it in almost Knuthian
+% |\ttverbatim|---it's part of this `almost'.
+% \CodeDefine\breaklbrace \CodeDefine\twelvelbrace
+\bgroup \catcode`\<=1 \@makeother\{ \catcode`\>=2 %
+\firstofone<\egroup
+ \def\breaklbrace<\discretionary<{\verbhyphen><><{>>%
+ \def\twelvelbrace<{>%^^A]]
+>% of |\firstofone|
+
+% \CodeDefIndex\dobreaklbrace
+\bgroup \catcode`\<=1 \catcode`\{=\active \catcode`\>=2
+\firstofone<\egroup
+ \def\dobreaklbrace<\catcode`\{=\active \def{<\breaklbrace>>%
+>% end of |\firstofone|. \iffalse|}}}}|\fi
+
+% The |\bslash| macro defined below I~use also in more `normal' \TeX ing, e.g.,
+% to |\typeout| some |\outer| macro's name.
+%\CodeDefine\bslash \CodeDefine\breakbslash
+{\catcode`\!=0 \@makeother\\%\CodeEscapeChar\!
+!gdef!bslash{\}%^^A]
+!gdef!breakbslash{!discretionary{!verbhyphen}{\}{\}}%^^A]]
+}
+%\CodeEscapeChar\\
+%
+% Sometimes linebreaking at a~backslash may be unwelcome. The basic
+% case, when the first CS in a~verbatim breaks at the lineend leaving
+% there |%|, is covered by line \ref{special opening bslash}. For the
+% others let's give the user a~countercrank: \CodeDefine\fixbslash
+\newcommand*\fixbslash{\let\breakbslash=\bslash}% to use due to the
+% common scoping rules. But for the special case of a~backslash
+% opening a~verbatim scope, we deal specially in the line
+% \ref{special opening bslash}.
+%
+% Analogously, let's provide a~possibility of `fixing' the left brace:
+% \CodeDefine\fixlbrace
+\newcommand*\fixlbrace{\let\breaklbrace=\twelvelbrace}
+
+% \CodeDefIndex\dobreakbslash
+{\catcode`\!=0 %\CodeEscapeChar\!^^A[
+%^^A~One rbrace is turned off for Emacs by |\{|.
+!catcode`!\=!active
+!gdef!dobreakbslash{!catcode`!\=!active !def\{!breakbslash}}%
+}
+%\CodeEscapeChar\\
+
+% The macros defined below, |\visiblebreakspaces| and |\twelveclub|
+% we'll use in the almost Knuthian macro making verbatim. This `almost'
+% makes a~difference.
+% \CodeDefine\twelvespace
+% \CodeDefIndex\breakabletwelvespace
+\bgroup\catcode`\ =12 %
+\firstofone{\egroup%
+\def\twelvespace{ }%
+\def\breakabletwelvespace{\discretionary{ }{}{ }}}
+
+\bgroup\obeyspaces% it's just re|\catcode|'ing.
+% \CodeDefine\activespace
+% \CodeDefIndex\dobreakvisiblespace
+% \CodeDefIndex\dobreakblankspace
+\firstofone{\egroup%
+\newcommand*\activespace{ }%
+\newcommand*\dobreakvisiblespace{\let =\breakabletwelvespace\obeyspaces}%^^A
+% |%\def|ing it caused a~stack overflow disaster with \pk{gmdoc}.
+\newcommand*\dobreakblankspace{\let =\space\obeyspaces}%
+}
+
+% \CodeDefine\twelveclub
+\bgroup\@makeother\|
+\firstofone{\egroup\def\twelveclub{|}}
+
+% \subdivision{Almost-Knuthian \cs{ttverbatim}}
+%
+% |\ttverbatim| comes from \TeXbook\ too, but I~add into it a~\LaTeX\
+% macro changing the |\catcode|s and make spaces visible and breakable
+% and left braces too.
+% \CodeDefine\ttverbatim
+\newcommand*\ttverbatim{%
+ \let\do=\do@noligs \verbatim@nolig@list
+ \let\do=\@makeother \dospecials
+ \dobreaklbrace\dobreakbslash
+ \dobreakspace
+ \tt}
+
+% We wish the visible spaces to be the default.
+% \CodeDefIndex\dobreakspace
+\let\dobreakspace=\dobreakvisiblespace
+%
+%^^A~|\meta| and pals moved to \pk{gmutils}
+
+% \subdivision{The Core: From \pk{shortvrb}}
+%
+% The below is copied verbatim ;-) from
+% \file{doc.pdf} and then is added my slight changes.
+% \CodeDefine\MakeShortVerb \CodeDefine*\MakeShortVerb*
+
+\def\MakeShortVerb{%
+ \@ifstar
+ {\def\@shortvrbdef{\verb*}\@MakeShortVerb}%
+ {\def\@shortvrbdef{\verb}\@MakeShortVerb}}
+
+% \CodeDefine\@MakeShortVerb
+\def\@MakeShortVerb#1{%
+ \expandafter\ifx\csname cc\string#1\endcsname\relax
+ \@shortvrbinfo{Made }{#1}\@shortvrbdef
+ \add@special{#1}%
+ \AddtoPrivateOthers#1% a~macro to be \emph{really} defined in
+ % \pk{gmdoc}.
+ \expandafter
+ \xdef\csname cc\string#1\endcsname{\the\catcode`#1}%
+ \begingroup
+ \catcode`\~\active \lccode`\~`#1%
+ \lowercase{%
+ \global\expandafter\let
+ \csname ac\string#1\endcsname~%
+ \expandafter\gdef\expandafter~\expandafter{%
+ \expandafter\ifmmode\expandafter\string\expandafter~%
+ \expandafter\else\expandafter\afterfi\@shortvrbdef~\fi}}% This
+ % terrible number of |\expandafter|s is to make the shortverb char
+ % just other in the math mode (my addition).
+ \endgroup
+ \global\catcode`#1\active
+ \else
+ \@shortvrbinfo\@empty{#1 already}{\@empty\verb(*)}%
+ \fi}
+
+% \CodeDefine\DeleteShortVerb
+\def\DeleteShortVerb#1{%
+ \expandafter\ifx\csname cc\string#1\endcsname\relax
+ \@shortvrbinfo\@empty{#1 not}{\@empty\verb(*)}%
+ \else
+ \@shortvrbinfo{Deleted }{#1 as}{\@empty\verb(*)}%
+ \rem@special{#1}%
+ \global\catcode`#1\csname cc\string#1\endcsname
+ \global \expandafter\let \csname cc\string#1\endcsname \relax
+ \ifnum\catcode`#1=\active
+ \begingroup
+ \catcode`\~\active \lccode`\~`#1%
+ \lowercase{%
+ \global\expandafter\let\expandafter~%
+ \csname ac\string#1\endcsname}%
+ \endgroup \fi \fi}
+
+% My little addition
+% \CodeDefIndex\gmv@packname
+\@ifpackageloaded{gmdoc}{%
+ \def\gmv@packname{gmdoc}}{%
+ \def\gmv@packname{gmverb}}
+
+% \CodeDefine\@shortvrbinfo
+\def\@shortvrbinfo#1#2#3{%
+ \PackageInfo{\gmv@packname}{%
+ ^^J\@empty #1\expandafter\@gobble\string#2 a short reference
+ for \expandafter\string#3}}
+
+% \CodeDefine\add@special
+\def\add@special#1{%
+ \rem@special{#1}%
+ \expandafter\gdef\expandafter\dospecials\expandafter
+ {\dospecials \do #1}%
+ \expandafter\gdef\expandafter\@sanitize\expandafter
+ {\@sanitize \@makeother #1}}
+
+% For the commentary on the below macro see the \pk{doc} package's
+% documentation. Here let's only say it's just amazing: so tricky and
+% wicked use of |\do|. The internal macro |\rem@special| defines |\do|
+% to expand to nothing if the |\do|'s argument is the one to be
+% removed and to unexpandable CSs |\do| and \<\cs{do}'s argument>
+% otherwise. With |\do| defined this way the entire list is just
+% globally expanded itself. Analogous hack is done to the |\@sanitize|
+% list.
+% \CodeDefine\rem@special
+\def\rem@special#1{%
+ \def\do##1{%
+ \ifnum`#1=`##1 \else \noexpand\do\noexpand##1\fi}%
+ \xdef\dospecials{\dospecials}%
+ \begingroup
+ \def\@makeother##1{%
+ \ifnum`#1=`##1 \else \noexpand\@makeother\noexpand##1\fi}%
+ \xdef\@sanitize{\@sanitize}%
+ \endgroup}
+
+% And now the definition of \env{verbatim} itself. As you'll see (I~hope),
+% the internal macros of it look for the name of the current
+% environment (i.e., |\@currenvir|'s meaning) to set
+% their expectation of the environment's |\end| properly. This is done
+% to allow the user to define his/her own environments with
+% |\verbatim| inside them. I.e., as with the \pk{verbatim} package,
+% you may write |\verbatim| in the begdef of your environment and then
+% necessarily |\endverbatim| in its enddef. Of course (or maybe
+% surprisingly), the commands written in the begdef after |\verbatim|
+% will also be executed at \cs{begin\marg{environment}}.
+% \CodeDefine\verbatim
+% \CodeDefine*{verbatim}
+\def\verbatim{\@beginparpenalty \predisplaypenalty \@verbatim
+ \frenchspacing \gmobeyspaces \@xverbatim}% in the \LaTeX\ version
+% there's |%\@vobeyspaces| instead of |\gmobeyspaces|.
+% \changes{v0.73}{06/09/06}{\cs{@vobeyspaces} changed to
+% \cs{obeyspaces} to make the blank \cs{verb/atim} spaces breakable}
+% \CodeDefine*{verbatim*}
+\@namedef{verbatim*}{\@beginparpenalty \predisplaypenalty \@verbatim
+ \@sxverbatim}
+
+% \CodeDefine\endverbatim
+\def\endverbatim{\@@par
+ \ifdim\lastskip >\z@
+ \@tempskipa\lastskip \vskip -\lastskip
+ \advance\@tempskipa\parskip \advance\@tempskipa -\@outerparskip
+ \vskip\@tempskipa
+ \fi
+ \addvspace\@topsepadd
+ \@endparenv}
+
+% \CodeDefine\endverbatim*
+\expandafter\let\csname endverbatim*\endcsname =\endverbatim
+
+% \CodeDefine\@xverbatim
+\begingroup \catcode `!=0 %
+\catcode `[= 1 \catcode`]=2 %
+\catcode`\{=\active
+\@makeother\}%
+\catcode`\\=\active%\CodeEscapeChar\!
+!gdef!@xverbatim[%
+ !edef!verbatim@edef[%
+ !def!noexpand!verbatim@end%
+ ####1!noexpand\end!noexpand{!@currenvir}[%
+ ####1!noexpand!end[!@currenvir]]]%
+ !verbatim@edef
+ !verbatim@end]%
+!endgroup
+% \CodeEscapeChar\\
+
+% \CodeDefine\@sxverbatim
+\let\@sxverbatim=\@xverbatim
+
+% \CodeDefine\@verbatim
+% F.\,Mittelbach says the below is copied almost verbatim from \LaTeX\
+% source, modulo |\check@percent|.\CodeDefine\@verbatim
+\def\@verbatim{%
+ % \changes{v0.71}{06/09/04}{trivlist substituted with
+ % chosen explicit macros. Analog. in endverbatim.}
+ %
+ % Originally here was just |\trivlist \item[]|, but it worked
+ % badly in my document(s), so let's take just highlights of if.
+ \parsep\parskip
+ % From |\@trivlist|:
+ \if@noskipsec \leavevmode \fi
+ \@topsepadd \topsep
+ \ifvmode
+ \advance\@topsepadd \partopsep
+ \else
+ \unskip \par
+ \fi
+ \@topsep \@topsepadd
+ \advance\@topsep \parskip
+ \@outerparskip \parskip
+ % (End of |\trivlistlist| and |\@trivlist| highlights.)
+ \@@par\addvspace\@topsep
+ \if@minipage\else\vskip\parskip\fi
+ \leftmargin\parindent% please notify me if it's a~bad idea.
+ \advance\@totalleftmargin\leftmargin
+ \raggedright
+ \leftskip\@totalleftmargin% so many assignments to preserve the
+ % \env{list} thinking for possible future changes. However, we may
+ % be sure no internal \env{list} shall use |\@totalleftmargin| as
+ % far as no inner environments are possible in \env{verbatim(*)}.
+%^^A \rightskip\z@
+%^^A \parindent\z@\parfillskip\@flushglue\parskip\z@
+ \@@par% most probably redundant.
+ \@tempswafalse
+ \def\par{% but I~don't want the terribly ugly empty lines when
+ % a~blank line is met. Let's make them \pk{gmdoc}-like
+ % i.e., let a~vertical space be added as in between stanzas
+ % of poetry. Originally |\if@tempswa\hbox{}\fi|, in my version will
+ % be
+ \ifvmode\if@tempswa\addvspace\stanzaskip\@tempswafalse\fi\fi
+ \@@par
+ \penalty\interlinepenalty \check@percent}%
+ \everypar{\@tempswatrue\hangindent\verbatimhangindent\hangafter\@ne}%^^A
+ % since several chars are breakable, there's a~possibility of
+ % breaking some lines. We wish them to be hanging indented.
+ \obeylines
+ \ttverbatim}
+
+\@ifundefined{stanzaskip}{\newlength\stanzaskip}{}
+\stanzaskip=\medskipamount
+
+% \CodeDefine\verbatimhangindent
+% \changes{v0.71}{06/09/04}{added to verbatim parameters.}
+\newlength\verbatimhangindent
+\verbatimhangindent=3em
+
+\providecommand*\check@percent{}
+% In the \pk{gmdoc} package shall it be defined to check if the next
+% line begins with a~comment char.
+%
+% Similarly, the next macro shall in \pk{gmdoc} be defined to update
+% a~list useful to that package. For now let it just gobble its
+% argument.
+\providecommand*\AddtoPrivateOthers[1]{}
+% Both of the above are |\provide|d to allow the user to load
+% \pk{gmverb} after \pk{gmdoc} (which would be redundant since
+% \pk{gmdoc} loads this package on its own, but anyway should be
+% harmless).
+
+% Let's define the `short' verbatim command.
+%
+% \CodeDefine\verb \CodeDefine*\verb*
+\def\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
+ \bgroup
+ \ttverbatim
+ \gm@verb@eol
+ \@ifstar{\@sverb@chbsl}{\gmobeyspaces\frenchspacing\@sverb@chbsl}}%^^A
+% in the \LaTeX\ version there's |\@vobeyspaces| instead of
+% |\gmobeyspaces|.
+% \CodeDefIndex\@sverb@chbsl
+\def\@sverb@chbsl#1{\@sverb#1\check@bslash}
+
+% \CodeDefIndex\@def@breakbslash
+\def\@def@breakbslash{\breakbslash}% because |\| is |\def|ined
+% as \cs{break\-b\-slash} not |\let|.
+
+% For the special case of a~backslash opening a~(short) verbatim, in
+% which it shouldn't be breakable, we define the checking macro.
+% \CodeDefine\check@bslash
+\def\check@bslash{\@ifnextchar{\@def@breakbslash}{\bslash\@gobble}{}}
+% \label{special opening bslash}
+% \changes{v0.70}{06/09/02}{Opening backslash made unbreakable.}
+
+\let\verb@balance@group\@empty
+
+% \CodeDefine\verb@egroup
+\def\verb@egroup{\global\let\verb@balance@group\@empty\egroup}
+
+% \CodeDefine\gm@verb@eol
+%\changes[\verb]{v0.74}{06/09/07}{line end forbidden inside \*}
+\let\gm@verb@eol\verb@eol@error
+% The latter is a~\LaTeXe\ kernel macro that |\active|ates line end
+% and defines it to close the verb group and to issue an error
+% message. We use a~separate CS 'cause we are not quite positive to
+% the forbidden line ends idea. (Although the allowed line ends with
+% a~forgotten closing shortverb char caused funny disasters at my
+% work a~few times.) Another reason is that \pk{gmdoc} wishes to
+% redefine it for its own queer purpose.
+%
+% However, let's leave my former `permissive' definition under the
+% |\verb@eol| name.
+%
+% \CodeDefine\verb@eolOK
+\begingroup
+\obeylines\obeyspaces%
+\gdef\verb@eolOK{\obeylines%
+\def^^M{ \check@percent}%
+}%
+\endgroup
+% The |\check@percent| macro here is |\provide|d to be |\@empty| but in
+% \pk{gmdoc} employed shall it be.
+%
+% Let us leave (give?) a~user freedom of choice:
+% \CodeDefine\verbeolOK
+% \changes{v0.74}{06/09/07}{added}
+\def\verbeolOK{\let\gm@verb@eol\verb@eolOK}
+% And back to the main matter,
+% \CodeDefIndex\@sverb \CodeDefIndex\verb@balance@group
+\def\@sverb#1{%
+ \catcode`#1\active \lccode`\~`#1%
+ \gdef\verb@balance@group{\verb@egroup
+ \@latex@error{Illegal use of \bslash verb command}\@ehc}%
+ \aftergroup\verb@balance@group
+ \lowercase{\let~\verb@egroup}}
+
+% \CodeDefine\verbatim@nolig@list
+\def\verbatim@nolig@list{\do\`\do\<\do\>\do\,\do\'\do\-}
+
+% \CodeDefine\do@noligs
+\def\do@noligs#1{%
+ \catcode`#1\active
+ \begingroup
+ \lccode`\~=`#1\relax
+ \lowercase{\endgroup\def~{\leavevmode\kern\z@\char`#1}}}
+
+% And finally, what I~thought to be so smart and clever, now is just
+% one of many possible uses of a~general almost Rainer Sch\"opf's
+% macro:
+% \CodeDefine\dekclubs
+\def\dekclubs{\MakeShortVerb*\|}
+
+%\subdivision{\pk{doc}- And \pk{shortvrb}-Compatibility}
+%
+% One of minor errors while \TeX ing \pk{doc.dtx} was caused by my
+% understanding of a~`shortverb' char: at my settings, in the math
+% mode an active `shortverb' char expands to itself's `other' version
+% thanks to |\string|. \pk{doc/shortvrb}'s concept is different, there
+% a~`shortverb' char should work as usual in the math mode. So let it
+% may be as they wish:
+% \CodeDefine\old@MakeShortVerb
+
+\def\old@MakeShortVerb#1{%
+ \expandafter\ifx\csname cc\string#1\endcsname\relax
+ \@shortvrbinfo{Made }{#1}\@shortvrbdef
+ \add@special{#1}%
+ \AddtoPrivateOthers#1% a~macro to be \emph{really} defined in
+ % \pk{gmdoc}.
+ \expandafter
+ \xdef\csname cc\string#1\endcsname{\the\catcode`#1}%
+ \begingroup
+ \catcode`\~\active \lccode`\~`#1%
+ \lowercase{%
+ \global\expandafter\let
+ \csname ac\string#1\endcsname~%
+ \expandafter\gdef\expandafter~\expandafter{%
+ \@shortvrbdef~}}%
+ \endgroup
+ \global\catcode`#1\active
+ \else
+ \@shortvrbinfo\@empty{#1 already}{\@empty\verb(*)}%
+ \fi}
+
+% \CodeDefine\OldMakeShortVerb
+\def\OldMakeShortVerb{\begingroup
+ \let\@MakeShortVerb=\old@MakeShortVerb
+ \@ifstar{\eg@MakeShortVerbStar}{\eg@MakeShortVerb}}
+
+% \CodeDefine\eg@MakeShortVerbStar \CodeDefine\eg@MakeShortVerb
+\def\eg@MakeShortVerbStar#1{\MakeShortVerb*#1\endgroup}
+\def\eg@MakeShortVerb#1{\MakeShortVerb#1\endgroup}
+
+\endinput% for the Tradition.
+
+
+
+
+% \PrintChanges \PrintIndex
+% \Finale
+
+% (For my GNU Emacs:)
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: "e:/LaTeX/TeXGuru/gmverb/gmverbDoc"
+%%% End: