Por que as chaves são tratadas incorretamente quando "commandchars" é usado em "Verbatim"?

Por que as chaves são tratadas incorretamente quando "commandchars" é usado em "Verbatim"?

Isso é o que estou fazendo:

\documentclass{article}
\usepackage{fancyvrb}
\begin{document}
\begin{Verbatim}[commandchars=+\{\}]
Hello, \emph{world}!
Bye, +emph{world}!
\end{Verbatim}
\end{document}

A primeira linha é renderizada como Hello, \emphworld!, o que não está correto. Por alguma razão, o Verbatimambiente trata {e }como caracteres especiais, não como texto literal simples. Sem o commandchars, a primeira linha é renderizada corretamente.

Responder1

Com commandchars=+\{\}, dentro do ambienteVerbatim

  • o caractere +possui código de categoria 0 (escape) e, portanto, durante a tokenização é tratado da mesma forma que em circunstâncias normais/fora do ambiente Verbatima barra invertida \é tratada.
  • o personagem {possui código de categoria 1 (grupo inicial) e, portanto, durante a tokenização é tratado da mesma forma que é tratado em circunstâncias normais/fora do ambiente Verbatim.
  • o personagem }possui código de categoria 2 (grupo final) e, portanto, durante a tokenização é tratado da mesma forma que é tratado em circunstâncias normais/fora do ambiente Verbatim.

Qualquer outro caractere que geralmente tenha uma função especial no TeX, por exemplo, o caractere de barra invertida, é tokenizado sob o regime de código de categoria literal onde esses caracteres especiais são atribuídos

  • ou código de categoria 12 (outro) para que eles não tenham mais função especial, mas durante a composição são considerados diretivas para composição de algum glifo de uma fonte
  • ou código de categoria 13 (ativo) para que possam ser definidos para expandir para alguns comandos que, por sua vez, produzem a composição de alguns símbolos, como para o caractere de espaço, ou produzem uma quebra de linha para o caractere de retorno de carro.

Tokenizar caracteres {da categoria 1 sem criar um token de símbolo de controle produz tokens de caracteres explícitos da categoria 1 (grupo inicial).
Tokenizar caracteres }da categoria 2 sem criar um token de símbolo de controle produz tokens de caracteres explícitos da categoria 2 (grupo final).

Ao contrário dos tokens de caracteres explícitos da categoria 11 (letra) e 12 (outros), esses tokens de caracteres explícitos durante a composição não são diretivas para a composição de algum glifo de uma fonte, mas são diretivas que afetam o agrupamento - seja delimitando escopos ou delimitando conjuntos de tokens que devem ser formar argumentos.

Dentro do seu Verbatimambiente, onde commandchars=+\{\}está em vigor, a linha
Hello, \emph{world}!
é tokenizada como .
H11e11l11l11o11,13space13\12e11m11p11h11{1w11o11r11l11d11}2!12carriage return13

\12surge porque \o código de categoria 12 (outro) não faz com que o LaTeX comece a criar um token de sequência de controle.

{1e afetam o escopo, mas não produzem nada. visível no arquivo .pdf.}2

Dentro do seu Verbatimambiente, onde commandchars=+\{\}está em vigor, a linha
Bye, +emph{world}!
é tokenizada como .
B11y11e11,13space13\emph{1w11o11r11l11d11}2!12carriage return13

Com commandchars=+\{\}efeito, você pode fazer +string+{/ +string+}para compor chaves. (Você também pode fazer +string{/ +string}contanto que {e }estejam equilibrados.)

Responder2

Aqui está um trecho da página 16 do guia do usuário dofantasiavrbpacote:

insira a descrição da imagem aqui

Já que você especificou

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

o +personagem age como \faria em um ambiente normal, enquanto {atua }como abridores e fechadores de um grupo TeX. Conseqüentemente, +emph{world}renderiza “mundo” em itálico dentro do Verbatimambiente.

Em contraste, \emph{world}dentro do Verbatimambiente gera \emphworld, com todos os glifos renderizados na fonte vertical monoespaçada. Afinal, como você especificou {e }atua como abridor e fechador de um grupo TeX, eles têm um significado especial e nãonãoser impresso.

informação relacionada