打字機字體中的轉義字符

打字機字體中的轉義字符

我知道有多種方法可以解決此問題(例如\usepackage[T1]{fontenc}),但我想了解以下範例中發生的情況。

\documentclass{article}
\begin{document}
\noindent
\$ \% \& \{ \} \_ \# \textbackslash \\
\ttfamily \$ \% \& \{ \} \_ \# \textbackslash \\
\verb+$ % & { } _ # \ +
\end{document}

轉義字符

  • 為什麼嘗試取得\ttfamily大括號、底線或反斜線會導致普通羅馬符號的替換?字形顯然沒有遺失,因為逐字模式可以存取它們。

  • 逐字模式究竟如何存取這些字形?

  • 刪除大括號和反斜杠,使下劃線成為唯一剩餘的“問題”字符,從而消除字體警告,儘管替換仍在進行。為什麼是這樣?

答案1

\verbverbatim假設字體在其 ascii 位置具有這些字符,並且本地使這些字符為 catcode 12(如標點符號),沒有特殊定義。

\textbackslash(和朋友)被定義為特定於編碼的命令,並且(為了對原始 TeX 編碼表現出理智)LaTeX 假設編碼是不包含反斜杠字符OT1的編碼。cmr10因此在OT預設定義中使用(使用數學字體)。\ttfamily更改系列但不更改編碼,因此在這種情況下,即使cmtt字體實際上編碼不同,您也會獲得 OT1 定義。

效果更好,T1因為標記為 T1 編碼的字體實際上具有相同的編碼。

\_有所不同,因為\textunderscore有一個預設定義,完全不使用字體,而是使用水平線。

相關內容