如何拆分参数并将结果分配到单独的变量或数组中?

如何拆分参数并将结果分配到单独的变量或数组中?

我需要一个非常简单的东西——当我得到一个用逗号分隔的字符串的宏参数时,我可以将其拆分并将结果字符串分配到数组中吗?

简而言之,我想写这样的东西:

\newcommand{\test}[1]{
    \def\array = \parse{#1}{,}
}

所以我以后可以像这样使用它:

\someOtherMacro{\array[1]}

我正在查看其他答案,但我找不到这个任务真正简单的东西(只是解析字符串并分配结果)。

答案1

您可以考虑使用arrayjobx

在此处输入图片描述

\documentclass{article}

\usepackage{arrayjobx}

\makeatletter
\renewcommand{\readarray}[3][&]{\read@array[#1]{#2}{#3}}%
\makeatother

\newcommand{\someOtherMacro}{\textbf}

\begin{document}

\newarray\mynames

\readarray{mynames}{Moe&Larry&Curly}

1: \mynames(1) and \someOtherMacro{\mynames(2)} and \mynames(3)

\readarray[,]{mynames}{Moe,Larry,Curly}

2: \mynames(1) and \mynames(2) and \someOtherMacro{\mynames(3)}

\end{document}

答案2

这个listofitems包在这方面非常强大。第一个例子是基于,分隔符进行解析的。

第二个示例是两层解析,首先通过\\,然后再次使用空格分隔符。

解析为n-tiers 不会对软件包造成任何问题。如果需要,它还可以选择丢弃空白数组元素。

在这两种情况下,通过使用星号形式的\readlist调用,前导/尾随空格已被删除。

\documentclass{article}
\usepackage{listofitems}
\begin{document}
\setsepchar{,}
\readlist*\parsed{This, is, my , list, of words}
There are \parsedlen{} items in list

Here are the items:
\showitems\parsed

item 4 is ``\parsed[4]''.

\setsepchar{\\/ }
\readlist*\multiparsed{%
This is a test\\
of the\\
emergency broadcast system.%
}

Here is the other list:
\showitems\multiparsed

Row 2 is ``\multiparsed[2].''

2nd word of row 3 is ``\multiparsed[3,2]''.
\end{document}

在此处输入图片描述

答案3

使用 非常容易expl3

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\definearray}{mm}
 {
  \seq_new:c { g_eenoku_array_#1_seq }
  \seq_gset_split:cnn { g_eenoku_array_#1_seq } { , } { #2 }
 }
\cs_generate_variant:Nn \seq_gset_split:Nnn { c }
\NewDocumentCommand{\usearray}{mm}
 {
  \seq_item:cn { g_eenoku_array_#1_seq } { #2 }
 }
\ExplSyntaxOff

\definearray{names}{Moe,Larry,Curly}

\begin{document}

\usearray{names}{1}

\usearray{names}{2}

\usearray{names}{3}

\end{document}

在此处输入图片描述

相关内容