Почему фигурные скобки обрабатываются неправильно при использовании «commandchars» в «Verbatim»?

Почему фигурные скобки обрабатываются неправильно при использовании «commandchars» в «Verbatim»?

Вот что я делаю:

\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 (escape) и, таким образом, во время токенизации обрабатывается так же, как в обычных обстоятельствах/вне среды обрабатывается 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=+\{\}in effect вы можете сделать +string+{/ +string+}для набора фигурных скобок. (Вы также можете сделать +string{/ , +string}пока {и }сбалансированы.)

решение2

Вот отрывок со страницы 16 руководства пользователяfancyvrbупаковка:

введите описание изображения здесь

Поскольку вы указали

\begin{Verbatim}[commandchars=+\{\}]

персонаж +действует так, как \и в обычной обстановке, в то время как {и }действуют как открыватели и закрывающие TeX-группы. В результате, +emph{world}отображает "мир" курсивом внутри Verbatimсреды.

В противоположность этому, \emph{world}внутри Verbatimсреды генерируется \emphworld, со всеми глифами, отображаемыми в прямом моноширинном шрифте. В конце концов, поскольку вы указали {и }действовать как открыватели и закрыватели группы TeX, они имеют особое значение и делаютнетраспечатать.

Связанный контент