如下,我想測試用戶是否輸入了一些自訂文本,如果沒有,則顯示預設文字。
\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
輸入進行標記,但我將文字部分保留在“之後”,以便使用文件目錄程式碼讀取它。
另一種方法是簡單地改變 的行為,或使用分組:
\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
只將目錄代碼設定為“文檔”代碼後巨集\dostuff
已展開,但已經太晚了,無法儲存文字區塊中的空格。現在,可以使用\scantokens
LaTeX3 或等效的 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 編碼語法幹擾的格式正確的文字。