\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
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
porque as fontes codificadas em T1 possuem todos os caracteres ASCII em seus devidos lugares.
A função \tl_to_str:n
nã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.