\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}
给出了一个奇怪的结果 ( testing ̇things
)。我该如何得到testing_things
?我基本上想要逐字内容(带换行符)。
答案1
这绝不奇怪:如果我尝试简单的例子
\documentclass{article}
\begin{document}
A\char`\_B
\end{document}
我明白了
因为 OT1 编码中的标准字体在 ASCII 为下划线保留的插槽中带有点重音符。只需添加
\usepackage[T1]{fontenc}
生产
因为 T1 编码字体将所有 ASCII 字符都放在了正确的位置。
该函数\tl_to_str:n
并非用于逐字翻译,而是将输入转换为由类别代码 12 个字符组成的字符串(空格仍为类别代码 10);它使用与 TeX 相同的机制\string
,特别是在控制字后会添加一个空格,因此
\tl_to_str:n {\foo\baz?}
将打印
\foo \baz ?
此外,#
角色数量将会翻倍。
您可以将其用作“穷人的逐字记录”,如果您意识到这些限制:
\texttt{\tl_to_str:n{some_verbatim}}
将打印
some_verbatim
当默认编码是 OT1 时也是如此。