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