这就是我正在做的事情:
\documentclass{article}
\usepackage{fancyvrb}
\begin{document}
\begin{Verbatim}[commandchars=+\{\}]
Hello, \emph{world}!
Bye, +emph{world}!
\end{Verbatim}
\end{document}
第一行被渲染为Hello, \emphworld!
,这是不正确的。由于某种原因,Verbatim
环境将{
和}
视为特殊字符,而不是纯文本。如果没有commandchars
,第一行就会正确呈现。
答案1
在commandchars=+\{\}
环境中Verbatim
- 该字符
+
的类别代码为 0(转义),因此在标记化过程中,其处理方式与正常情况下/环境之外的方式相同Verbatim
具有类别代码 0(转义),因此在标记化过程中将按照在正常情况下/环境之外对反斜杠的\
。 - 人物
{
具有类别代码 1(开始组),因此在标记化过程中按照在正常情况下/环境之外的方式进行处理Verbatim
。 - 该字符
}
的类别代码为 2(结束组),因此在标记化过程中,其处理方式与在正常情况下/环境之外的处理方式相同Verbatim
。
任何其他在 TeX 中通常具有特殊功能的字符(例如反斜杠字符)都会根据逐字类别代码制度进行标记,这些特殊字符的分配方式如下:
- 类别代码为 12(其他),因此它们不再具有特殊功能,但在排版过程中用作排版字体某些字形的指令
- 或类别代码 13(活动),以便可以将它们定义为扩展为某些命令,而这些命令又会产生某些符号的排版,例如
␣
空格字符或产生回车符的换行符。
对类别 1 的字符进行标记{
而不创建控制符号标记会产生类别 1(开始组)的显式字符标记。
对字符进行标记}
类别 2 的字符而不创建控制符号标记会产生类别 2(结束组)的显式字符标记。
与类别 11(字母)和 12(其他)的显式字符标记不同,排版过程中的此类显式字符标记不是用于排版字体某些字形的指令,而是影响分组的指令 - 要么界定范围,要么界定要形成参数的标记集。
在您的Verbatim
环境中,实际上commandchars=+\{\}
,该行
Hello, \emph{world}!
被标记为。
H11e11l11l11o11,13space13\12e11m11p11h11{1w11o11r11l11d11}2!12carriage return13
\12由于类别代码 12(其他)而产生,\
不会导致 LaTeX 开始创建控制序列标记。
{1和}2影响范围,但不会产生.pdf 文件中可见的内容。
在您的Verbatim
环境中,实际上commandchars=+\{\}
,该行
Bye, +emph{world}!
被标记为
B11y11e11,13space13\emph{1w11o11r11l11d11}2!12carriage return13。
实际上commandchars=+\{\}
,您可以执行+string+{
/+string+}
来排版花括号。(只要和是平衡的,您也可以执行+string{
/ 。)+string}
{
}
答案2
以下是用户指南第 16 页的摘录幻想VRB包裹:
由于您已指定
\begin{Verbatim}[commandchars=+\{\}]
角色+
的行为就像\
在正常设置中一样,而{
和 则}
充当 TeX 组的开启者和关闭者。结果,在环境+emph{world}
内以斜体显示“world” Verbatim
。
相反,环境\emph{world}
内部Verbatim
会生成\emphworld
,所有字形都会以直立等宽字体呈现。毕竟,因为你指定了{
和}
作为 TeX 组的开启者和关闭者,因此它们具有特殊含义,并且不是打印出来。