\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.