现有一个需求,欲往甲乙丙丁
这四个字中,在甲
、乙
、丙
后面添加一个\quad
,而丁
后面不管。
一个命令设想是\AddMyTextSpace{<arg1>}{<arg2>}
,
其中<arg1>
是要添加的东西,例如上面提到的\quad
,
而<arg2>
是要排版的文本,例如上面提到的甲乙丙丁
。它通常只是很短的数个连续的汉字,不带标点符号、非汉字字符、数学公式、用命令排版的文本(例如:使用\def\textlipsuma{Aa}
然后把\texlipsuma
写到正文区中)等。
一个希望的效果是:输入\AddMyTextSpace{\quad }{甲乙丙丁}
,其效果等同于甲\quad 乙\quad 丙\quad 丁
。
最小工作示例:
% !TeX program = xelatex
\documentclass{ctexart}
\usepackage[scale=.85,showframe,papersize={10.5cm,14.85cm},centering]{geometry}
\NewDocumentCommand{\AddMyTextSpace}{mm}{???}
\begin{document}
\AddMyTextSpace{\quad }{甲乙丙丁}。
甲\quad 乙\quad 丙\quad 丁。
\end{document}
\documentclass{ctexart}
\usepackage[scale=.85,showframe,papersize={10.5cm,14.85cm},centering]{geometry}
\ExplSyntaxOn
\NewDocumentCommand{\AddMyTextSpace}{mm}{
\int_step_inline:nn { \tl_count:n { #2 } } {
\tl_item:nn { #2} { ##1 }
\int_compare:nF { ##1 = \tl_count:n { #2 } }{ #1 }
}
}
\ExplSyntaxOff
\begin{document}
\AddMyTextSpace{\quad }{甲乙丙丁}。
\end{document}
原问题特别指出了
<arg2>
强调了原问题的具体情况。但是,实际的情况是:
延伸开去,在一些情况下,用命令排版的文本,似乎很有用。
例如,在标准文档类中,
\maketitle
命令就会调用某些内部(TeX系统、文档类等)的文本宏,而这些文本宏很可能就是用一个内部命令来排版的,例如\@title
。又如,在某些模板开发过程中,可能就会存在类似的\makemytitle
的需求。回到原问题中,如果在MWE中增加
\def\zhlipsuma{甲乙丙丁}
,然后使用\AddMyTextSpace{\quad }{\zhlipsuma}
,其得到的结果不会增加任何空格。如果要使回答中的命令
\AddMyTextSpace{<arg1>}{<arg2>}
对文本宏也生效,该如何进一步处理呢?是否跟展开顺序有关系?@u101077
S老师指出
可以试试这个