在LaTeX中分割逗号分隔的参数 [英] Split comma-separated parameters in LaTeX
问题描述
我正在尝试构建类似于LaTeX \cite{}
的命令,该命令接受以逗号分隔的参数列表,例如
I am trying to build a command which is similar to LaTeX \cite{}
, which accepts a comma-separated list of parameters like this
\cite{Wall91, Schwartz93}
我想将参数代表的逗号分隔列表中的每个项目传递给另一个命令,并返回各个结果的串联.我想这是这样的:
I would like to pass each item in the comma-separated list which the parameter represents to another command and return the concatenation of the individual results. I imagine it to be something like this:
\newcommand{\mycite}[1]{%
\@for\var:=\split{#1} do{%
\processCitation{\var}%
}%
}
关于LaTeX中的字符串操作,变量和循环的文献很棒!
Literature on String manipulation, variables and looping in LaTeX would be great!
还:是否有一种方法可以再次使用逗号来合并各个结果?
Also: Is there a way to join the individual results using commas again?
谢谢!
推荐答案
使用Roberto的链接,我得出了以下解决方案:
Using Roberto's link I arrived at this solution:
\makeatletter
% Functional foreach construct
% #1 - Function to call on each comma-separated item in #3
% #2 - Parameter to pass to function in #1 as first parameter
% #3 - Comma-separated list of items to pass as second parameter to function #1
\def\foreach#1#2#3{%
\@test@foreach{#1}{#2}#3,\@end@token%
}
% Internal helper function - Eats one input
\def\@swallow#1{}
% Internal helper function - Checks the next character after #1 and #2 and
% continues loop iteration if \@end@token is not found
\def\@test@foreach#1#2{%
\@ifnextchar\@end@token%
{\@swallow}%
{\@foreach{#1}{#2}}%
}
% Internal helper function - Calls #1{#2}{#3} and recurses
% The magic of splitting the third parameter occurs in the pattern matching of the \def
\def\@foreach#1#2#3,#4\@end@token{%
#1{#2}{#3}%
\@test@foreach{#1}{#2}#4\@end@token%
}
\makeatother
用法示例:
% Example-function used in foreach, which takes two params and builds hrefs
\def\makehref#1#2{\href{#1/#2}{#2}}
% Using foreach by passing #1=function, #2=constant parameter, #3=comma-separated list
\foreach{\makehref}{http://stackoverflow.com}{2409851,2408268}
% Will in effect do
\href{http://stackoverflow.com/2409851}{2409851}\href{http://stackoverflow.com/2408268}{2408268}
这篇关于在LaTeX中分割逗号分隔的参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!