定義一個宏將操作應(yīng)用于\\
分隔的文本我希望定義這樣一個命令(比如說\test)將操作(比如說\action)應(yīng)用于\\分隔的文本,例如\test{a\\B\\C}將變成\action{a}\\\ action{B}\\\ action{C}
解答動態(tài)
\etoolbox中的DeclareListParser就是為此而設(shè)計(jì)的,它允許您定義一個帶有自定義列表分隔符的列表解析器。(編輯:修復(fù)了一個缺點(diǎn),感謝cgnieder。
\
\
\\文獻(xiàn)資料收集{文章}\\資料收集{{文章}\\元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元元{{{{^ A\\B\\C}\更新命令{\action}[1]{\emph{1}!}%\test{A\\B\\C}\end{document}
有一種基于TeX p的經(jīng)典(可能是最簡單的)方法基本體:
\def\test#1{\testA#1\\\end\\}\def\testA#1\\{\ifx\end#1\empty\else\action{1}\expandafter\testA\fi}\def\action#1{參數(shù)為:#1\par}\test{A\\B\\C} 如果需要在操作之間插入一些內(nèi)容,例如\actionbetween,則宏稍微復(fù)雜一些,但完全可以擴(kuò)展太:
\def\test#1{\testA#1\\\ end\\\}\def\testA#1\\\ 2\\{\ifx\end#1\empty\else\action{1}\ifx\end#2\empty\else\actionbetween\fi\afterfi{\testA#2\\}\fi}\def\afterfi#1#2\fi#1}\def\action{參數(shù)為#1\par}\def\actionbetween{\string\\}\test{A\\B\\C} \documentclass{arlticle}\usepackage{listofitems}\newcommand\action[1]{%\setsepchar{\\\}%\readlist\myparse{1}%\foreachitem\z\in\myparse[]{%\expandafter\theaction\expandafter{\z}\myparsep[\zcnt]}%}\newcommand\theaction{\textit}\begin{document}\action{A\\B\\C pluore}\renewcommand\theaction{\textsc}\action{A\\B\\C plus more}\end{document}
要使其更通用,還可以將其設(shè)置為指定分隔符。注意,在第二個例子中,分隔符標(biāo)記不受小型大寫操作的約束。
\documentclass{arlticle}\usepackage{listofitems}\newcommand\action[1]{%\readlist\myparse{{1}%\foreachitem\z\in\myparse[]{%\expandafter\theaction\expandafter{\z}\myparseep[\zcnt]%}\setsepchar{\\}\newcommand\theaction{\textit}\begin{document}\action{A\\B\\C pluore}\renewcommand\theaction{\textsc}\setsepchar{(Hi-Mom)\\}\action{A(Hi-Mom)\\B(Hi-Mom)\\C plus more}\end{document}
基于expl3.
,有一個相當(dāng)通用的方法來滿足您的需要。
輸入按指定的分隔符進(jìn)行拆分(并修剪項(xiàng)目周圍的空格);每個項(xiàng)目按模板的指定進(jìn)行“修飾”,其中當(dāng)前項(xiàng)用#1表示;最后,“裝飾項(xiàng)”是用它們之間指定的分隔符(任何有效代碼)輸出的。
請注意,如果在另一個命令的定義中使用了\actonlist,則template參數(shù)應(yīng)具有##1。
\documentclass{article}\ExplSyntaxOn\NewDocumentCommand{\actonlist}{m+m}{%#1=輸入分隔符%#2=template%#3=輸出separator%#4=列表\jinwen_動作列表:nnnn{1}{2}{3}{4}}\seq_新:N\金文演員名單_新:N\金文演員名單_受保護(hù):Nn\金文_動作列表:nnnn{\序列集_拆分:Nnn\列在{1}{4}\列中_地圖:NNn\我是金文演員,我是金文演員,我是金文演員,我是金文演員,我是金文演員\序號_用途:Nn\人民大學(xué)(UUUUUJinwen)目前的調(diào)查結(jié)果是:企業(yè)聯(lián)盟(UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnlist{,}{\textbf{##1}}{(這里是par)\par}{#1}%}\testcomma{a,B,C}\end{document} 您可以從“herea par”中看到,輸出分隔符只在項(xiàng)之間使用。如果您還需要在最后使用它,只需將它添加到\test的定義中,即
\newcommand{\test}[1]{%\actonlist{\\}{\emph{##1}}{(這里是par)\par}{1}(這里是par)\par}- End
免責(zé)聲明:
本頁內(nèi)容僅代表作者本人意見,若因此產(chǎn)生任何糾紛由作者本人負(fù)責(zé),概與琴島網(wǎng)公司無關(guān)。本頁內(nèi)容僅供參考,請您根據(jù)自身實(shí)際情況謹(jǐn)慎操作。尤其涉及您或第三方利益等事項(xiàng),請咨詢專業(yè)人士處理。