[Tex/LaTex] fancyvrb alternate commandchars and \textcolor

fancyvrbverbatim

The following works:

\documentclass{article}
\usepackage{fancyvrb}
\usepackage{color}
\begin{document}

\begin{Verbatim}[commandchars=\\\{\}]
test\textcolor{red}{foo}test
\end{Verbatim}

\end{document}

but the following does not:

\documentclass{article}
\usepackage{fancyvrb}
\usepackage{color}
\begin{document}

\begin{Verbatim}[commandchars=&<>]
test&textcolor<red><foo>test
\end{Verbatim}

\end{document}

I get this error message:

ERROR: Argument of \textcolor has an extra }.

--- TeX said ---
<inserted text> 
                \par 
l.7 test&textcolor<red><foo>test

--- HELP ---
From the .log file...

I've run across a `}' that doesn't seem to match anything.
For example, `\def\a#1{...}' and `\a}' would produce
this error. If you simply proceed now, the `\par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your `}' was spurious, just type `2' and it will go away.

I've tried all combinations of backslash-escaping the command chars but no luck. How can I use &, <, and > as the command characters? (Or if it's not possible, why?)

Best Answer

The problem is that \textcolor expects an actual brace after it, not just a "group open" token: its definition is

\def\textcolor#1#{...}

(here #1 would be the possible "color model" allowed by the syntax). You can do with another command defined in terms of \textcolor:

\newcommand*{\fvtextcolor}[2]{\textcolor{#1}{#2}}

This should work:

\begin{Verbatim}[commandchars=&\[\]]
test&fvtextcolor[red][foo]test
\end{Verbatim}

Not with <>, I'm afraid: these two characters can't be used as delimiters in fancyvrb commandchars (I've already been bitten by this "feature").