![為什麼在「Verbatim」中使用「commandchars」時,大括號的處理不正確?](https://rvso.com/image/472694/%E7%82%BA%E4%BB%80%E9%BA%BC%E5%9C%A8%E3%80%8CVerbatim%E3%80%8D%E4%B8%AD%E4%BD%BF%E7%94%A8%E3%80%8Ccommandchars%E3%80%8D%E6%99%82%EF%BC%8C%E5%A4%A7%E6%8B%AC%E8%99%9F%E7%9A%84%E8%99%95%E7%90%86%E4%B8%8D%E6%AD%A3%E7%A2%BA%EF%BC%9F.png)
這就是我正在做的:
\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 群組的開啟者和結束者,所以它們具有特殊的含義並且不是列印出來。