Warum werden geschweifte Klammern falsch behandelt, wenn „commandchars“ in „Verbatim“ verwendet wird?

Warum werden geschweifte Klammern falsch behandelt, wenn „commandchars“ in „Verbatim“ verwendet wird?

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 Verbatimbehandelt die Umgebung {und }als Sonderzeichen, nicht als einfachen wörtlichen Text. Ohne das commandcharswird 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 Umgebung Verbatimder 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 wird Verbatim.
  • 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 wird Verbatim.

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:

Bildbeschreibung hier eingeben

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.

verwandte Informationen