似乎无法弄清楚如何创建包含多个数字的变量。
\def\numbers{{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}}
\numbers[1][1]
预期输出
1
实际产量
1,2,3,4,5,...,[1][1]
答案1
TeX 不会创造奇迹。
你\def\numbers{...}
定义一个扩展为的...
宏
\numbers[1][1]
\numbers
仅打印后跟的定义[1][1]
。
你可以通过以下方式编程数组。令人高兴的是,expl3
它提供了必要的基础设施,即 clist。
我们定义一个 clist,其项目为 clist,并且可以通过行和列索引轻松检索项目。
\documentclass{article}
\ExplSyntaxOn
\NewDocumentCommand{\setarray}{mm}
{% #1 = name, #2 = items
\clist_clear_new:c { l_swepz_array_#1_clist }
\clist_set:cn { l_swepz_array_#1_clist } { #2 }
}
\NewExpandableDocumentCommand{\getarrayitem}{mmm}
{% #1 = name, #2 = row index, #3 = column index
\clist_item:en
{
\clist_item:cn { l_swepz_array_#1_clist } { #2 }
}
{ #3 }
}
\cs_generate_variant:Nn \clist_item:nn { e }
\ExplSyntaxOff
\begin{document}
\setarray{numbers}{
{1,2,3,4,5},
{6,7,8,9,10},
{11,12,13,14,15},
{16,17,18,19,20},
{21,22,23,24,25}
}
\getarrayitem{numbers}{1}{1}
\getarrayitem{numbers}{4}{3}
\end{document}
中不需要换行符\setarray
,但为了清晰起见,换行符更好。