% \begin{macrocode} \ProvidesPackage{newverbs}[2011/02/16 v1.2 Define new 'verb' commands and short verb. characters] % \end{macrocode} % % \subsection{Verb Definition Commands} % % \begin{macro}{\newverbcommand} % \begin{macro}{\renewverbcommand} % \begin{macro}{\provideverbcommand} % This macro calls the real macro with the to be used definition macro. % \begin{macrocode} \newcommand*\newverbcommand{\new@verbcommand\newcommand} \newcommand*\renewverbcommand{\new@verbcommand\renewcommand} \newcommand*\provideverbcommand{\new@verbcommand\providecommand} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\new@verbcommand}[4]{underlying definition macro}{macro to define}{code before}{code after} % The trailing code is inserted by patching \cs{verb@egroup} which is called by \cs{verb} % after the verbatim content. % \begin{macrocode} \def\new@verbcommand#1#2#3#4{% #1*#2{% \begingroup \newverbcommand@settings \def\verb@egroup{\verb@orig@egroup#4\endgroup}% \def\newverbs@txend{#4\endgroup}% #3\verb }% } % \end{macrocode} % \end{macro} % % \begin{macro}{\newverbs@tabularxsupport} % Enables support for the new verbatim macros inside \env{tabularx} environments. % This environment defines its own almost-verbatim form of |\verb|%^^A| % which lacks the end-macro we patch above. The following code inserts such % an end-macro. % \begin{macrocode} \def\newverbs@tabularxsupport{% \begingroup \def\orig@TX@vb##1{\def\@tempa####1##1{\toks@{####1}\edef\@tempa{\the\toks@}% \expandafter\TX@v\meaning\@tempa\\\\\ifnum0=`{\fi}}\@tempa!}% \ifx\TX@vb\orig@TX@vb \endgroup \PackageInfo{newverbs}{Patching 'TX@vb' macro of the 'tabularx' package.}% \def\TX@vb##1{\def\@tempa####1##1{\toks@{####1}\edef\@tempa{\the\toks@}% \expandafter\TX@v\meaning\@tempa\\\\\ifnum0=`{\fi}\newverbs@txend}\@tempa!}% \else \endgroup \PackageWarning{newverbs}{Couldn't patch 'TX@vb' macro of the 'tabularx' package. Definition unknown.}% \fi \let\newverbs@tabularxsupport\relax } % \end{macrocode} % The end-macro is initially empty and is set for every call of a new verb macro. % \begin{macrocode} \def\newverbs@txend{} % \end{macrocode} % The support is activated either now or at the begin of the document if the \pkg{tabularx} is loaded. % \begin{macrocode} \@ifpackageloaded{tabularx}{% \newverbs@tabularxsupport }{% \AtBeginDocument{\@ifpackageloaded{tabularx}{\newverbs@tabularxsupport}{}}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\newverbcommand@settings} % Some settings required for all new \cs{verb}-like commands. % The original end group macro from \cs{verb} is saved away. % Also the `temp box a' is provided with a user friendly name. % \begin{macrocode} \def\newverbcommand@settings{% \let\verb@orig@egroup\verb@egroup \let\verbbox\@tempboxa } % \end{macrocode} % \end{macro} % % \subsection{Provided New Verb Commands}\label{sec:impl} % % \begin{macro}{\qverb} % Quoting version of \cs{verb}. Places a quote character before and after the verbatim content: "verb". % \begin{macrocode} \provideverbcommand{\qverb}{\qverbbeginquote}{\qverbendquote} % \end{macrocode} % \end{macro} % % \begin{macro}{\qverbbeginquote} % \begin{macro}{\qverbendquote} % This macros insert the actual quotes. They can be redefined by the user to contain the required quotes. % If available the quoting macros of \pkg{csquotes} are used. % \changes{v1.1}{2010/04/13}{Added usage of 'csquotes' macros if loaded.} % \begin{macrocode} \@ifundefined{openinnerquote}{% \def\qverbbeginquote{`}% \def\qverbendquote{'}% }{% \def\qverbbeginquote{\openinnerquote}% \def\qverbendquote{\closeinnerquote}% } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}{\fverb} % A framed version of \cs{verb}. Stores the verbatim content first into a box. Then the box content is framed. % \begin{macrocode} \newverbcommand{\fverb} {\setbox\verbbox\hbox\bgroup\color@setgroup} {\color@endgroup\egroup\fbox{\box\verbbox}} % \end{macrocode} % \end{macro} % % % \subsection{Make Special Short Verbatim Characters} % % \begin{macro}{\MakeSpecialShortVerb}[1]{verbatim macro} % Uses the definition of \cs{MakeShortVerb} from \pkg{shortvrb} except with \cs{verb} replaced with the first argument. % The second argument is then read by \cs{@MakeShortVerb}. % \begin{macrocode} \newcommand*\MakeSpecialShortVerb[1]{% \@ifstar {\def\@shortvrbdef{#1*}\@MakeShortVerb}% {\def\@shortvrbdef{#1}\@MakeShortVerb}% } % \end{macrocode} % \end{macro} % % % \subsection{Collect verbatim argument} % % \begin{macro}{\collectverb} % Collects verbatim text which can be typeset. % Checks for an existing star. % \begin{macrocode} \newcommand*\collectverb{% \begingroup \verbatim@font \@ifstar \@scollectverb \@collectverb } % \end{macrocode} % \end{macro} % % % \begin{macro}{\@collectverb}[1]{} % Changes catcodes and ensures that spaces are displayed normally. % \begin{macrocode} \def\@collectverb#1{% \verb@eol@error \let\do\@makeother \dospecials \@vobeyspaces \frenchspacing \@noligs \@@collectverb{#1}% } % \end{macrocode} % \end{macro} % % % \begin{macro}{\@scollectverb}[1]{} % Changes catcodes. % \begin{macrocode} \def\@scollectverb#1{% \verb@eol@error \let\do\@makeother \dospecials \@noligs \@@collectverb{#1}% } % \end{macrocode} % \end{macro} % % % \begin{macro}{\@@collectverb}[2]{}{} % Defines \Macro\@@@collectverb to read everything to the next occurrence of \meta{char} % and feed it to the given \meta{code}. % \begin{macrocode} \def\@@collectverb#1#2{% \ifnum`#2=`\{% \catcode`\}\active \else \catcode`#2\active \fi \begingroup \ifnum`#2=`\{% \lccode`\~`\}% \else \lccode`\~`#2% \fi \lowercase{\endgroup \def\@@@collectverb##1~}{#1{##1}\endgroup}% \@@@collectverb } % \end{macrocode} % \end{macro} % % % \begin{macro}{\Collectverb} % Collects argument as plain verbatim and feeds it to the given code. % The text is suitable to be printed to auxiliary files. % \begin{macrocode} \newcommand*\Collectverb{% \begingroup \@ifstar \@sCollectverb \@Collectverb } % \end{macrocode} % \end{macro} % % % \begin{macro}{\@Collectverb} % \begin{macrocode} \def\@Collectverb#1{% \verb@eol@error \let\do\@makeother \dospecials \obeyspaces \@@Collectverb{#1}% } % \end{macrocode} % \end{macro} % % % \begin{macro}{\@sCollectverb} % \begin{macrocode} \def\@sCollectverb#1{% \verb@eol@error \let\do\@makeother \dospecials \@@Collectverb{#1}% } % \end{macrocode} % \end{macro} % % % \begin{macro}{\@@Collectverb} % \begin{macrocode} \def\@@Collectverb#1#2{% \ifnum`#2=`\{% \catcode`\}\active \else \catcode`#2\active \fi \begingroup \ifnum`#2=`\{% \lccode`\~`\}% \else \lccode`\~`#2% \fi \lowercase{\endgroup \def\@@@Collectverb##1~}{\endgroup#1{##1}}% \@@@Collectverb } % \end{macrocode} % \end{macro} % % % \begin{macro}{\Verbdef} % \begin{macrocode} \newcommand*\Verbdef{% \@ifstar {\@Verbdef*}% {\@Verbdef{}}% } % \end{macrocode} % \end{macro} % % % \begin{macro}{\@Verbdef} % \begin{macrocode} \newcommand*\@Verbdef[2]{% \Collectverb#1{\def#2}% } % \end{macrocode} % \end{macro} %