![Warum werden geschweifte Klammern falsch behandelt, wenn „commandchars“ in „Verbatim“ verwendet wird?](https://rvso.com/image/472694/Warum%20werden%20geschweifte%20Klammern%20falsch%20behandelt%2C%20wenn%20%E2%80%9Ecommandchars%E2%80%9C%20in%20%E2%80%9EVerbatim%E2%80%9C%20verwendet%20wird%3F.png)
Folgendes mache ich:
\documentclass{article}
\usepackage{fancyvrb}
\begin{document}
\begin{Verbatim}[commandchars=+\{\}]
Hello, \emph{world}!
Bye, +emph{world}!
\end{Verbatim}
\end{document}
Die erste Zeile wird als gerendert Hello, \emphworld!
, was nicht korrekt ist. Aus irgendeinem Grund Verbatim
behandelt die Umgebung {
und }
als Sonderzeichen, nicht als einfachen wörtlichen Text. Ohne das commandchars
wird die erste Zeile korrekt gerendert.
Antwort1
Mit commandchars=+\{\}
, innerhalb der UmgebungVerbatim
- Das Zeichen
+
hat den Kategoriecode 0 (Escape) und wird daher bei der Tokenisierung so behandelt, wie unter normalen Umständen/außerhalb der UmgebungVerbatim
der Backslash\
behandelt wird. - Das Zeichen
{
hat den Kategoriecode 1 (Beginngruppe) und wird daher bei der Tokenisierung so behandelt, wie es unter normalen Umständen/außerhalb der Umgebung behandelt wirdVerbatim
. - das Zeichen
}
hat den Kategoriecode 2 (Endgruppe) und wird daher bei der Tokenisierung so behandelt, wie es unter normalen Umständen/außerhalb der Umgebung behandelt wirdVerbatim
.
Alle anderen Zeichen, die in TeX normalerweise eine spezielle Funktion haben, z. B. der Backslash, werden unter dem Coderegime der Kategorie „Verbatim“ tokenisiert, wo diese Sonderzeichen zugewiesen werden
- entweder Kategoriecode 12(other), so dass sie keine spezielle Funktion mehr haben, sondern beim Satz als Anweisungen zum Setzen bestimmter Glyphen einer Schriftart verwendet werden
- oder Kategoriecode 13 (aktiv), sodass sie zur Erweiterung auf einige Befehle definiert werden können, die wiederum den Satz einiger Symbole wie
␣
für das Leerzeichen bewirken oder einen Zeilenumbruch für das Wagenrücklaufzeichen ausführen.
Das Tokenisieren von Zeichen {
der Kategorie 1 ohne Erstellen eines Steuersymbol-Tokens ergibt explizite Zeichen-Token der Kategorie 1 (Gruppenanfang).
Das Tokenisieren von Zeichen }
der Kategorie 2 ohne Erstellen eines Steuersymbol-Tokens ergibt explizite Zeichen-Token der Kategorie 2 (Gruppenende).
Im Gegensatz zu expliziten Zeichen-Token der Kategorie 11 (Buchstabe) und 12 (Sonstige) sind solche expliziten Zeichen-Token während des Schriftsatzes keine Anweisungen zum Setzen bestimmter Glyphen einer Schriftart, sondern Anweisungen, die die Gruppierung betreffen – sie begrenzen entweder Bereiche oder Sätze von Token, die Argumente bilden sollen.
Innerhalb Ihrer Verbatim
-Umgebung, wo commandchars=+\{\}
wirksam ist,
Hello, \emph{world}!
wird die Zeile als tokenisiert .
H11e11l11l11o11,13space13\12e11m11p11h11{1w11o11r11l11d11}2!12carriage return13
\12entsteht, weil \
der Kategoriecode 12 (andere) LaTeX nicht dazu veranlasst, mit der Erstellung eines Steuersequenz-Tokens zu beginnen.
{1und beeinflussen den Umfang, führen aber zu nichts Sichtbarem in der PDF-Datei.}2
Innerhalb Ihrer Verbatim
-Umgebung, wo commandchars=+\{\}
wirksam ist,
Bye, +emph{world}!
wird die Zeile als tokenisiert .
B11y11e11,13space13\emph{1w11o11r11l11d11}2!12carriage return13
Mit commandchars=+\{\}
in effect können Sie +string+{
/ verwenden +string+}
, um geschweifte Klammern zu setzen. (Sie können auch +string{
/ verwenden, +string}
solange {
und }
ausgeglichen sind.)
Antwort2
Hier ist ein Auszug aus Seite 16 der Bedienungsanleitung desAbonnierenPaket:
Da Sie angegeben haben
\begin{Verbatim}[commandchars=+\{\}]
Das +
Zeichen verhält sich wie \
in einer normalen Umgebung, während {
und }
als Öffner und Schließer einer TeX-Gruppe fungieren. Folglich wird „Welt“ innerhalb der Umgebung +emph{world}
kursiv dargestellt .Verbatim
Im Gegensatz dazu generiert \emph{world}
die Umgebung , wobei alle Glyphen in der aufrechten monospaced Schriftart wiedergegeben werden. Da Sie und als Öffner und Schließer einer TeX-Gruppe angegeben haben, haben sie schließlich eine besondere Bedeutung undVerbatim
\emphworld
{
}
nichtausdrucken lassen.