
Ich kenne mehrere Möglichkeiten, dies zu beheben (z. B. \usepackage[T1]{fontenc}
), aber ich möchte verstehen, was im folgenden Beispiel passiert.
\documentclass{article}
\begin{document}
\noindent
\$ \% \& \{ \} \_ \# \textbackslash \\
\ttfamily \$ \% \& \{ \} \_ \# \textbackslash \\
\verb+$ % & { } _ # \ +
\end{document}
Warum führt der Versuch, eine Klammer, einen Unterstrich oder einen Backslash zu erhalten,
\ttfamily
zur Ersetzung durch das normale römische Symbol? Die Glyphen fehlen offensichtlich nicht, da der Verbatim-Modus auf sie zugreifen kann.Wie genau greift der Verbatim-Modus auf diese Glyphen zu?
Das Löschen der Klammern und des Backslashs, so dass der Unterstrich das einzige verbleibende „Problem“-Zeichen ist, beseitigt die Schriftartwarnungen, obwohl immer noch eine Ersetzung stattfindet. Warum ist das so?
Antwort1
\verb
und verbatim
nehmen Sie an, dass die Schriftart diese Zeichen an ihren ASCII-Positionen hat und die Zeichen lokal in Catcode 12 (wie Satzzeichen) ohne besondere Definition umwandelt.
\textbackslash
(und Freunde) ist als kodierungsspezifischer Befehl definiert und (um einen Anschein von Vernunft gegenüber den ursprünglichen TeX-Kodierungen vorzutäuschen) geht LaTeX davon aus, dass OT1
Kodierung die Kodierung ist, cmr10
die keinen Backslash hat. Daher OT
wird die Standarddefinition verwendet (die die mathematischen Schriftarten verwendet). \ttfamily
ändert die Familie, aber nicht die Kodierung und in diesem Fall erhalten Sie die OT1-Definition, obwohl die cmtt
Schriftart tatsächlich anders kodiert ist.
Dies funktioniert besser, T1
da die als T1-codiert gekennzeichneten Schriftarten tatsächlich dieselbe Codierung aufweisen.
\_
ist anders, da \textunderscore
es eine Standarddefinition hat, die überhaupt keine Schriftart, sondern eine horizontale Linie verwendet.