使用 \tl_to_str:* 显示逐字内容

使用 \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}

给出了一个奇怪的结果 ( 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 时也是如此。

相关内容