我试图在函数中使用数组的值。但是它不起作用。有什么想法吗?
请参阅下面我的 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}