在 LaTeX 中拆分逗号分隔的参数 [英] Split comma-separated parameters in LaTeX

查看:27
本文介绍了在 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:


ewcommand{mycite}[1]{%
  @forvar:=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
defforeach#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
defmakehref#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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆