# Coloring or Bolding multiple lines in fancyvrb integration with listings

I would like to apply latex commands on a bunch of lines in a Verbatim environment with listings, especially make bold or color a block of code.

I am able to do that for a single line, but not for multiple lines.

\documentclass{beamer}

\usepackage[T1]{fontenc}
\usepackage[scaled=0.85]{beramono}%% monotype with bold variant
\usetheme{bars}

\usepackage{xcolor}
\usepackage{hyperref}
\usepackage{listings}
\usepackage{setspace}
\usepackage{graphicx}
\usepackage{alltt}
\usepackage{mathtools}
\usepackage{fancyvrb}
\usepackage[normalem]{ulem}

\lstdefinestyle{Java}{ %
basicstyle=\scriptsize\ttfamily, % the size of the fonts that are used for the code
language=Java,                % choose the language of the code
numbers=left,                   % where to put the line-numbers
numberstyle=\tiny,      % the size of the fonts that are used for the line-numbers
stepnumber=1,                   % the step between two line-numbers. If it is 1 each line will be numbered
numbersep=5pt,                  % how far the line-numbers are from the code
backgroundcolor=\color{white},  % choose the background color. You must add \usepackage{color}
showspaces=false,               % show spaces adding particular underscores
showstringspaces=false,         % underline spaces within strings
showtabs=false,                 % show tabs within strings adding particular underscores
frame=single,           % adds a frame around the code
tabsize=2,          % sets default tabsize to 2 spaces
captionpos=b,           % sets the caption-position to bottom
breaklines=true,        % sets automatic line breaking
breakatwhitespace=false,    % sets if automatic breaks should only happen at whitespace
keywordstyle=\color{red}, %keywordstyle=\color{red}\bf
variablestyle=\color{blue},
fancyvrb=true,
}

\newcommand\Red[1]{\textcolor{red}{#1}}
\newcommand\Blue[1]{\textcolor{blue}{#1}}
\newcommand\Green[1]{\textcolor{green}{#1}}

\newcommand\RB[1]{\textcolor{red}{\textbf{#1}}}
\newcommand\BB[1]{\textcolor{blue}{\textbf{#1}}}
\newcommand\GB[1]{\textcolor{green}{\textbf{#1}}}

\newenvironment{JavaCode}[1][]
{ \VerbatimEnvironment%
\lstset{style=Java}
\begin{Verbatim}[#1]}
{ \end{Verbatim}  }

\begin{document}

\begin{frame}[fragile]
\frametitle{MyActionListener}
\begin{JavaCode}[commandchars=\\!|,frame=single,numbers=left,numbersep=2pt]

public void perform() {
//Doesn't work for multiple lines
\textbf!
class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent event)
{
System.out.print("Action Performed");
}
}
|

//works for individual lines
\textbf! ActionListener listener = new MyActionListener();|
}

\end{JavaCode}
\end{frame}

\end{document}

-

There are several problems with your code:

1. You use a key called variablestyle that is defined neither by listings nor in your code.
2. You attempt to define an environment with verbatim contents using \newenvironment, which is not possible. Both fancyvrb (see 4.2.4. in the doc) and listings (see 4.16 in the doc) have mechanisms for creating custom environments with verbatim contents, though.
3. Your code isn't minimal (no need for hyperref, mathtools, etc. here)

Furthermore, I'm not sure why you're not simply using an lstlisting environment. You can easily definie delimiters that trigger bold face within your code, using listings' moredelim key, like so:

moredelim=**[is][\bfseries]{<openingdelimiter>}{<closingdelimiter>}


See below.

\documentclass{beamer}

\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[scaled=0.85]{beramono}

\usetheme{bars}

\usepackage{xcolor}
\usepackage{fancyvrb}
\usepackage{listings}

\lstdefinestyle{Java}%
{%
basicstyle          = \scriptsize\ttfamily,
language            = Java,
numbers             = left,
numberstyle         = \tiny,
stepnumber          = 1,
numbersep           = 5pt,
backgroundcolor     = \color{white},
showspaces          = false,
showstringspaces    = false,
showtabs            = false,
frame               = single,
tabsize             = 2,
captionpos          = b,
breaklines          = true,
breakatwhitespace   = false,
morestring          = [b]",
stringstyle         = \color{magenta},
keywordstyle        = \color{red},
identifierstyle     = \color{blue},
moredelim           = **[is][\bfseries]{}{},
fancyvrb            = true,
}

\begin{document}

\begin{frame}[fragile]
\frametitle{MyActionListener}
\begin{lstlisting}[style=Java]
public void perform() {
//Doesn't work for multiple lines

class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent event)
{
System.out.print("Action Performed");
}
}

ActionListener listener = new MyActionListener();

Hi Jubobs, fancyvrb gives more finegrained control. For example, in the above example, what if I want to bold and color the string "Action Performed"? But your solution is still useful for me in some cases. Thanks! –  Arjun Kumar Mar 5 '14 at 3:35
@ArjunKumar listings doesn't allow for multiple string styles. You can define multiple classes of identifiers with different styles. I think you should ask a different question with very precise specs... –  Jubobs Mar 25 '14 at 8:30