為什麼在「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反斜線的\處理方式相同。
  • 此角色{具有類別代碼 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並影響範圍,但不會產生某種結果。在 .pdf 檔案中可見。}2

在您的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}中將“世界”渲染為斜體Verbatim

相較之下,在環境\emph{world}內部Verbatim生成\emphworld,所有字形均以直立等寬字體呈現。畢竟,因為您已指定{}充當 TeX 群組的開啟者和結束者,所以它們具有特殊的含義並且不是列印出來。

相關內容