需要宏的帮助来拆分字符串并将子字符串放入临时变量中

需要宏的帮助来拆分字符串并将子字符串放入临时变量中

我有类似的东西:

\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对于新宏名的实现是必要的(以及其他内容)

相关内容