\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 の場合も同様です。

関連情報