\documentclass[border=2]{standalone}
\usepackage[svgnames]{xcolor}
\usepackage{fancyvrb}
\makeatletter
\newif\ifFV@bgcolor
\newbox\FV@bgbox
\define@key{FV}{bgcolor}{\FV@bgcolortrue\def\FV@bgcolor{#1}}
\def\FV@BeginVBox{%
\leavevmode\ifFV@bgcolor\setbox\FV@bgbox=\fi
\hbox\ifx\FV@boxwidth\relax\else to\FV@boxwidth\fi\bgroup
\ifcase\FV@baseline\vbox\or\vtop\or$\vcenter\fi\bgroup}
\def\FV@EndVBox{\egroup\ifmmode$\fi\hfil\egroup
\ifFV@bgcolor\colorbox{\FV@bgcolor}{\box\FV@bgbox}\fi}
\makeatother
\begin{document}
\begin{BVerbatim}[bgcolor=LightSteelBlue]
abc
def
\end{BVerbatim}
\end{document}
Here's the result:
Add options to BVerbatim
to have a fixed width instead of the minimum one.
Change the code into
\makeatletter
\newif\ifFV@bgcolor
\newbox\FV@bgbox
\define@key{FV}{bgcolor}{\FV@bgcolortrue\def\FV@bgcolor{#1}}
\define@key{FV}{framecolor}{\FV@bgcolortrue\def\FV@framecolor{#1}}
\def\FV@framecolor{white}
\def\FV@BeginVBox{%
\leavevmode\ifFV@bgcolor\setbox\FV@bgbox=\fi
\hbox\ifx\FV@boxwidth\relax\else to\FV@boxwidth\fi\bgroup
\ifcase\FV@baseline\vbox\or\vtop\or$\vcenter\fi\bgroup}
\def\FV@EndVBox{\egroup\ifmmode$\fi\hfil\egroup
\ifFV@bgcolor\fcolorbox{\FV@framecolor}{\FV@bgcolor}{\box\FV@bgbox}\fi}
\makeatother
to get a new key framecolor
(default white, so no frame):
\begin{BVerbatim}[bgcolor=LightSteelBlue,framecolor=black]
abc
def
\end{BVerbatim}
Comments on the code
Let's look at the code for adding a background color (the extension for the frame color is very similar).
I add a conditional (\ifFV@bgcolor
) and a box register (\FV@bgbox
) and a key for the FV
family; when the user says bgcolor=somecolor
, the conditional will be set to true and somecolor
is stored in \FV@bgcolor
.
Then I redefine \FV@BeginVBox
which is responsible for starting the box for a BVerbatim
environment; its definition starts with
\leavevmode\hbox...
so what I do is to change it into
\leavevmode\ifFV@bgcolor\setbox\FV@bgbox=\fi\hbox...
In this way, when the conditional is true, the box will be stored in our new register, instead that typeset immediately.
Now the end part: \FV@EndVBox
usually ends with
...\hfil\egroup}
where this \egroup
closes the \hbox
construction; if the conditional is true, this wouldn't typeset the box, so I make it into
...\hfil\egroup
\ifFV@bgcolor\colorbox{\FV@bgcolor}{\box\FV@bgbox}\fi}
which will typeset the box over a suitably colored background.
\documentclass[x11names]{report}
\usepackage{background}
\usepackage{blindtext}
\backgroundsetup{
scale=1,
angle=0,
opacity=1,
contents={\begin{tikzpicture}[remember picture,overlay]
\path [left color = Gold2,middle color = Gold2!30, right color = white] (current page.south west)rectangle (current page.north east); % Adjust the position of the logo.
\end{tikzpicture}}
}
\begin{document}
\blinddocument
\end{document}
I have chosen a conspicuous color. You may choose any color of your choice.
Best Answer
I prefer using
tcolorbox
thinking that in future you may want the background to be fashionable. I have given many options (which are not needed for this particular case) in thetcbset
so that you can play with them to suit your needs.Here is another option using
framed
package.Without extra packages:
And convert it in to a macro: