无法使用数组值

无法使用数组值

我试图在函数中使用数组的值。但是它不起作用。有什么想法吗?

请参阅下面我的 LaTeX 代码

\documentclass{article}
\usepackage{color}
\usepackage{arrayjob}

\newarray\Color
\readarray{Color}{blue&red&orange&violet}

\begin{document}

\Color(2)
\textcolor{\the\Color(2)}{moi}

\end{document}

答案1

它不能工作。命令\textcolor确实扩展了它的参数以寻找颜色,但不幸的是,从中提取值\Color需要执行“纯扩展”时不允许的操作。

正如手册所解释的,您必须以间接的方式执行此操作:

\checkColor(2)\textcolor{\cachedata}{moi}

该操作\checkColor提取值并将其作为\cachedata\textcolor,现在可以进行扩展。

arrayjobx请注意,你应该使用arrayjob,因为它与 LaTeX 存在严重问题。


使用 LaTeX3 宏的不同策略

\documentclass{article}
\usepackage{color,xparse}

\ExplSyntaxOn
\NewDocumentCommand{\xarraynew}{m O{&} m}
 {
  \xarray_define:nnn {#1} {#2} {#3}
 }
\cs_new_protected:Npn \xarray_define:nnn #1 #2 #3
 {
  \seq_new:c { g_xarray_ #1 _seq }
  \seq_gset_split:cnn { g_xarray_ #1 _seq } { #2 } { #3 }
 }
\cs_generate_variant:Nn \seq_gset_split:Nnn { c }

\DeclareExpandableDocumentCommand{\xarrayget}{m m}
 {
  \xarray_get:nn { #1 } { #2 - 1 }
 }
\cs_new:Npn \xarray_get:nn #1 #2
 {
  \seq_item:cn { g_xarray_ #1 _seq } { #2 }
 }
\ExplSyntaxOff

\xarraynew{Color}{blue&red&orange&violet}

\begin{document}

\textcolor{\xarrayget{Color}{2}}{moi}

\end{document}

用户级命令有\xarraynew两个参数:数组名称和数据。也可以指定不同的分隔符,因此

\xarraynew{Color}[,]{blue,red,orange,violet}

将是等效的。

您可以使用 提取一个值\xarrayget,它再次将数组名称和位置作为参数。

答案2

正如@egreg所指出的,您需要使用可扩展定义。我将使用一个简单的可扩展查找,如下所示:

\documentclass{article}
\usepackage{color}


\def\Colorarray{{1}{blue}{2}{red}{3}{orange}{4}{violet}}

\def\getcolor#1{\expandafter\xgetcolor\Colorarray{#1}{}\getcolor{#1}}

\def\xgetcolor#1#2#3\getcolor#4{%
\ifnum#4=#1 #2\else\xgetcolor#3\getcolor{#4}\fi}


\begin{document}

\textcolor{\getcolor{2}}{moi}

\end{document}

相关内容