Exibindo conteúdo literal com \tl_to_str:*

Exibindo conteúdo literal com \tl_to_str:*
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\begin{document}
\tl_to_str:n { testing _ things }

\par

\tl_set:Nn \l_tmpa_tl { testing _ things }
\tl_to_str:N \l_tmpa_tl
\end{document}

dá um resultado estranho ( testing ̇things). Como posso obter testing_things? Basicamente, quero conteúdo literal (com quebra de linha).

Responder1

Isto não é de modo algum estranho: se eu tentar o exemplo simples

\documentclass{article}
\begin{document}
A\char`\_B
\end{document}

eu recebo

insira a descrição da imagem aqui

porque as fontes padrão na codificação OT1 possuem o acento de ponto no slot que o ASCII reserva para o sublinhado. Apenas adicionando

\usepackage[T1]{fontenc}

produz

insira a descrição da imagem aqui

porque as fontes codificadas em T1 possuem todos os caracteres ASCII em seus devidos lugares.

A função \tl_to_str:nnão se destina literalmente, mas a transformar a entrada em uma string que consiste em código de categoria 12 caracteres (espaços ainda são código de categoria 10); ele usa o mesmo mecanismo que o TeX usa para \string, em particular um espaço será adicionado após as palavras de controle, então

\tl_to_str:n {\foo\baz?}

irá imprimir

\foo \baz ?

Além disso, #os caracteres serão duplicados.

Você pode usá-lo como uma “verbatim da pessoa pobre”, se estiver ciente destas limitações:

\texttt{\tl_to_str:n{some_verbatim}}

irá imprimir

some_verbatim

também quando a codificação padrão é OT1.

informação relacionada