In this particular case the problem is a typical one: You can't pass verbatim
content as an argument to another macro. This is indeed the case with using environ
, since content is accumulated in the macro \BODY
for processing later.
From the looks of your minimal example, it seems like you're after printing verbatim
content using a specific colour (say red). For this I'd suggest defining a new verbatim environment with this specific quality/attribute. As such, fancyvrb
can come in handy. Here's a MWE that illustrates this concept (taken, virtually verbatim, from the fancyvrb
documentation (section 4.1.3 Customization of formatting, p 5 and 4.2.4 Personalized environments, p 18)):
\documentclass{article}
\usepackage{fancyvrb,xcolor}% http://ctan.org/pkg/{fancyvrb,xcolor}
\DefineVerbatimEnvironment%
{MyVerbatim}{Verbatim}
{formatcom=\color{red}}
\begin{document}
\begin{MyVerbatim}
First verbatim line.
Second verbatim line.
\end{MyVerbatim}
\end{document}
The main problem with using your definition of myverbatim
can be defined in terms of a combination of scope and macro replacement. That is, something that starts with
\begin{<some-env>}
is expected to end with
\end{<some-env>}
If it doesn't, there's a problem, since the scope is not clearly defined. In your case, you start it with
\begin{myverbatim}
which is internally replaced with (removing the font change to \tiny
for now)
\begin{verbatim}
Now, since you're in the verbatim
environment (that is, a successful call was made to \begin{verbatim}
), LaTeX starts gobbling up contents and printing them as-is until it arrives at a single line of code that resembles
\end{verbatim}
That's just how the verbatim
environment works. It it looking for the stopping point. However, this never happens since the replacement of \end{myverbatim}
(in your code) to \end{verbatim}
(as per your definition) never occurs within the verbatim
environment; verbatim
doesn't perform the replacement of macros with their definitions. As such, TeX just keeps on scanning, producing what is considered a "Runaway argument" error.
Taking the above into account, a broad view on the replacement leaves your MWE to resemble (I've added a comment):
\documentclass{article}
\newenvironment{myverbatim}{\tiny\begin{verbatim}}{\end{verbatim}}
\begin{document}
\tiny\begin{verbatim}% Replacement text for \begin{myverbatim}
test
\end{myverbatim}% No replacement since you're in the verbatim environment
\end{document}
Clearly the above doesn't start and end with the same environment.
If you want to have more flexibility with verbatim
, use the verbatim
package which allows you to do the following:
\documentclass{article}
\usepackage{verbatim}% http://ctan.org/pkg/verbatim
\newenvironment{myverbatim}%
{\endgraf\tiny\verbatim}%
{\endverbatim}
\begin{document}
Some text before.
\begin{myverbatim}
test
test
\end{myverbatim}
Some text after.
\end{document}
The verbatim
package is a means to obtain your desired solution, just like fancyvrb
and listings
would be. Of course, a more rudimentary implementation (specific to your case) would be to merely change the font used by verbatim
- stored in the macro \verbatim@font
:
\makeatletter
\renewcommand{\verbatim@font}{\tiny\ttfamily}
\makeatother
Sure you can just precede the verbatim
environment with \tiny
and it will work just as well, but \verbatim@font
is called within the verbatim
environment, and therefore is constrained to only function there, not outside of it.
Best Answer
Adapting from code in this answer
Here's a version with additional vertical spaces. The interaction with
Verbatim
makes it somewhat difficult to guess at the right proportions, just experiment.For fancier boxes, you can have a look at
tcolorbox