我有类似的东西:
\documentclass{article}
\newcommand*\tableData[2]{string1,string2,string3}{string4}
\newcommand*{\String1}[1]{#1}
\newcommand*{\String2}[1]{#1}
\newcommand*{\String3}[1]{#1}
\newcommand*{\String4}[1]{#1}
\begin{document}
\String1
..
\String4
\end{document}
因此,我有两个参数,但我想拆分第一个参数中逗号分隔的字符串并将其放入变量中。如何使用内置命令来执行此操作,或者使用包是否是更好的方法?
我发现这已经了,但是我想把不同的字符串放在不同的变量中,而不是放在\fbox
别的地方……
答案1
我建议clist
使用expl3
宏\GetString{number}
来获取相关字符串和数字,number
而不是一堆\StringOne
例程。
编辑\g_samhoff_string_clist
:请注意,每次\tableData
使用时都会清除列表容器。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\clist_new:N \g_samhoff_string_clist
\NewDocumentCommand{\tableData}{mm}{
\clist_clear:N \g_samhoff_string_clist % Clearing the list
\clist_set:Nn{\g_samhoff_string_clist}{#1}
\clist_put_right:Nn{\g_samhoff_string_clist}{#2}
}
\NewDocumentCommand{\GetString}{m}{
\clist_item:Nn{\g_samhoff_string_clist}{#1}
}
\ExplSyntaxOff
\begin{document}
\tableData{one, two, three}{four}
Now the data:
\GetString{1}
\GetString{2}
\GetString{3}
\GetString{4}
\end{document}
解释:
\tableData
被定义为具有两个强制参数的宏,因此 {mm}第一个参数应该有逗号分隔的值列表。
\clist_new:N \g_samhoff_string_clist
全局定义一个新的 csv - 列表变量,名称为 g_samhoff_string_clist。(\g
代表全球的)- 在 的开头
\tableData
,清除列表:\clist_clear:N
- 现在将第一个参数(clist!)存储为
\clist_set:Nn
\g_samhoff_string_clist}
将第二个参数附加到右侧\clist_put_right:Nn
例如\clist_item{\g_samhoff_string_clist}{2}
,可以获取列表中的第二项。
\ExplSyntaxOn
并且\ExplSyntaxOff
对于新宏名的实现是必要的(以及其他内容)