如何在 Verbatim 环境中使用逗号分隔的参数列表?

如何在 Verbatim 环境中使用逗号分隔的参数列表?

当我尝试这个时:

\documentclass{article}
\usepackage{fancyvrb}
\usepackage{xcolor}
\begin{document}
\begin{Verbatim}[commandchars=\\\{\}]
\textcolor[RGB]{255,0,0}{test}
\end{Verbatim}
\end{document}

... 我得到的不是红色的“测试”,而是难以理解的\unhbox\voidb@x\kern,\z@,\char,‘\protect,\relax,\kern,.16667em,0\unhbox,\voidb@x,\kern,\z@,\...

我怀疑这与“活跃”角色有关......

我要做什么才能让它成功?

理想情况下,这应该只通过改变事物来实现里面环境Verbatim,因为我的用例,环境是由我无法控制的外部模板提供的。

答案1

是的,你是对的:逗号被激活是为了打破连字(,,是在 T1 编码字体中定义的连字)。

由于这是作为逐字环境初始化的一部分完成的,因此无法用 撤消codes={\catcode`,=12 },而需要不同的处理(参见检查逐字环境中的特殊字符

由于不希望全局重新定义\verbatim@nolig@list,因此这里有一个“局部”解决方案。

\documentclass{article}
\usepackage{fancyvrb}
\usepackage{xcolor}

\makeatletter
\newenvironment{Cverbatim}% C for "commands"
  {\VerbatimEnvironment
   \def\verbatim@nolig@list{\do\`\do\<\do\>\do\'\do\-}% no comma
   \fvset{commandchars=\\\{\}}%
   \begin{Verbatim}}
  {\end{Verbatim}}
\makeatother

\begin{document}
\begin{Cverbatim}
\textcolor[RGB]{255,0,0}{test}
\end{Cverbatim}
\end{document}

,,但是,如果你不打算在逐字文本中打破连字符,那么

\makeatletter
\def\verbatim@nolig@list{\do\`\do\<\do\>\do\'\do\-}% no comma
\makeatother

在序言中就可以了。

如果你可以控制辅助程序如何编写逐字文本,你可以这样做

\documentclass{article}
\usepackage{fancyvrb}
\usepackage{xcolor}
\usepackage{xparse}

\NewDocumentCommand{\verbatimtextcolor}{o>{\SplitArgument{2}{/}}mm}{%
  \makeverbatimtextcolor#2{#3}%
}
\NewDocumentCommand{\makeverbatimtextcolor}{mmmm}{%
  \textcolor[RGB]{#1,#2,#3}{#4}%
}

\begin{document}

\begin{Verbatim}[commandchars=\\\{\}]
\verbatimtextcolor{255/0/0}{test}
\end{Verbatim}
\end{document}

也可以进行超载\textcolor,但是独立的宏似乎更好。

实际上,无需外部代码就可以做到这一点,只要您使用非常笨拙的输入:

\documentclass{article}
\usepackage{fancyvrb}
\usepackage{xcolor}

\begin{document}

\begin{Verbatim}[commandchars=\\\{\}]
\def\tcRGB{\textcolor[RGB]}\expandafter\tcRGB\expandafter{\detokenize{255,0,0}}{test}
\end{Verbatim}
\end{document}

相关内容