为什么在“Verbatim”中使用“commandchars”时花括号会被错误处理?

为什么在“Verbatim”中使用“commandchars”时花括号会被错误处理?

这就是我正在做的事情:

\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 组的开启者和关闭者,因此它们具有特殊含义,并且不是打印出来。

相关内容