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

게다가 #캐릭터도 2배가 됩니다.

다음과 같은 제한 사항을 알고 있다면 "가난한 사람의 축어"로 사용할 수 있습니다.

\texttt{\tl_to_str:n{some_verbatim}}

인쇄할 것이다

some_verbatim

기본 인코딩이 OT1인 경우에도 마찬가지입니다.

관련 정보