아래와 같이 사용자가 사용자 정의 텍스트를 입력했는지 테스트하고, 그렇지 않은 경우 기본 텍스트를 표시하고 싶습니다.
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l_empty_tl
\NewDocumentCommand{\dostuff}{}{
\tl_if_empty:NTF \l_empty_tl
{Here is a large block of default text that I would like use.}
{\tl_use:N \l_empty_tl}
}
\ExplSyntaxOff
\begin{document}
\dostuff
\end{document}
나는 입력하지 않는 것을 선호하며 Here~is~a~large...
공백을 인식하는 간단한 방법이 있는지 궁금합니다. 나는 시도했다
{\cctab_begin:N \c_document_cctab Here is a large..\cctab_end:}
소용이 없습니다. 나는 이것이 속일 수 있다고 생각하지만 관련 질문을 찾을 수 없는 것 같습니다.
답변1
사용할 수 있는 몇 가지 접근 방식이 있습니다. 해당 텍스트만 원하는 간단한 원샷이라면 다음과 같습니다.
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l_my_tl
\NewDocumentCommand { \dostuff } { }
{
\tl_if_empty:NTF \l_my_tl
{ \tl_use:N \c_my_tl }
{ \tl_use:N \l_my_tl }
}
\use:n
{
\ExplSyntaxOff
\tl_const:Nn \c_my_tl
}
{Here is a large block of default text that I would like use.}
\begin{document}
\dostuff
\end{document}
아마도 가장 쉬울 것입니다. 여기서의 아이디어는 \use:n
입력을 토큰화하지만 문서 catcode로 읽을 수 있도록 텍스트 부분을 '뒤'에 남겨두는 것입니다.
또 다른 접근 방식은 그룹화를 사용하여 단순히 의 동작을 변경하는 것입니다 .
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l_my_tl
\NewDocumentCommand { \dostuff } { }
{
\tl_if_empty:NTF \l_my_tl
{ \tl_use:N \c_my_tl }
{ \tl_use:N \l_my_tl }
}
\group_begin:
\char_set_catcode_space:n {`\ }%
\tl_const:Nn\c_my_tl{Here is a large block of default text that I would like use.}%
\group_end:
\ExplSyntaxOff
\begin{document}
\dostuff
\end{document}
또는 그렇지 않은 경우:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l_my_tl
\NewDocumentCommand { \dostuff } { }
{
\tl_if_empty:NTF \l_my_tl
{ \tl_use:N \c_my_tl }
{ \tl_use:N \l_my_tl }
}
\char_set_catcode_space:n {`\ }%
\tl_const:Nn\c_my_tl{Here is a large block of default text that I would like use.}%
\char_set_catcode_ignore:n{`\ }%
\ExplSyntaxOff
\begin{document}
\dostuff
\end{document}
(요청한 텍스트가 상수인지는 확실하지 않습니다. 그렇지 않은 경우 위의 내용을 수정하겠습니다.)
나는 강력히 추천하고 싶다~ 아니다재검색 방법을 사용합니다. 솔직히 말해서 재스캔이 문제를 해결하는 좋은 방법이라는 것을 알았습니다.극도로사용에 주의하세요.어느새로운 코드(가족을 완전히 삭제하면 아마도 행복할 것 같습니다 \tl_rescan:
!).
답변2
\cctab_begin:N \c_document_cctab
Catcode를 "문서" 코드로만 설정하기 때문에 작동하지 않습니다.~ 후에매크로가 \dostuff
확장되었으며 텍스트 블록에 공백을 저장하기에는 이미 너무 늦었습니다. 이제 \scantokens
또는 LaTeX3와 동등한 것을 사용하여 이 문제를 해결할 수 있지만 expl3
구문 외부에서 생성된 매크로에 텍스트를 저장하는 것을 제안할 수도 있습니다.
\usepackage{xparse,expl3}
\NewDocumentCommand \mytext { } {%
Here is a large...%
}
\ExplSyntaxOn
\tl_new:N \l_empty_tl
\NewDocumentCommand{\dostuff}{}{
\tl_if_empty:NTF \l_empty_tl
{\mytext}
{\tl_use:N \l_empty_tl}
}
\ExplSyntaxOff
그런 다음 \mytext
LaTeX3 코딩 구문에 의해 방해받지 않는 올바른 형식의 텍스트를 포함합니다.