使用 \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 時也是如此。

相關內容