\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}
gibt ein seltsames Ergebnis ( testing ̇things
). Wie bekomme ich testing_things
? Ich möchte grundsätzlich den wörtlichen Inhalt (mit Zeilenumbruch).
Antwort1
Das ist keineswegs merkwürdig: Wenn ich das einfache Beispiel versuche
\documentclass{article}
\begin{document}
A\char`\_B
\end{document}
Ich bekomme
weil die Standardschriften in der OT1-Kodierung den Punktakzent in dem Slot haben, den ASCII für den Unterstrich reserviert.
\usepackage[T1]{fontenc}
produziert
weil in T1-codierten Schriftarten alle ASCII-Zeichen an der richtigen Stelle sind.
Die Funktion \tl_to_str:n
ist nicht für wörtliches Schreiben gedacht, sondern für die Umwandlung von Eingaben in einen String, der aus Zeichen des Kategoriecodes 12 besteht (Leerzeichen sind immer noch Kategoriecode 10); sie verwendet den gleichen Mechanismus, den TeX für verwendet \string
, insbesondere wird nach Steuerwörtern ein Leerzeichen eingefügt, so
\tl_to_str:n {\foo\baz?}
wird drucken
\foo \baz ?
Außerdem #
werden Zeichen verdoppelt.
Sie können es als „Wortschatz für Arme“ verwenden, wenn Sie sich dieser Einschränkungen bewusst sind:
\texttt{\tl_to_str:n{some_verbatim}}
wird drucken
some_verbatim
auch wenn die Standardcodierung OT1 ist.