我想创建类似的东西a=array[1,2,15,6,18]
,然后a[0]=1, a[1]=2
。是否可以在 LaTeX 中创建数组(使用pgf
或其他包)?
答案1
答案2
前列腺素F
以下是如何使用数组数学包裹:
\documentclass{article}
\usepackage{pgfmath}
\newcommand\Arr[1]{#1 $\mapsto $ \pgfmathparse{\myarray[#1]}\pgfmathresult}
\begin{document}
\def\myarray{{1,2,15,6,18}}
\Arr{0},
\Arr{1},
\Arr{2},
\Arr{3},
\Arr{4},
\end{document}
输出如下:
具体来说,pgfmath 数组以 0 为基数(即索引从 0 开始)。有关更多详细信息,请在前列腺素手册(3.0.1a 版第 89.2 节、第 927 页)。
LaTeX3
以下是如何使用以下方法定义和访问类似数组的变量xparse/expl3:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
% Usage: \DefineArray{array name}{data as comma separate list}
\NewDocumentCommand\DefineArray{ mm }{
\seq_new:c {l_internal_array_#1_seq}% define an array/sequence
\seq_set_from_clist:cn{l_internal_array_#1_seq}{#2}% set array
}
% Usage: \Array{array name}{index}
\NewDocumentCommand\Array{ mm }{
#2 $\mapsto$ \seq_item:cn{l_internal_array_#1_seq}{#2}
}
% As clemens says in the comments, for real use the following is better:
% \NewExpandableDocumentCommand\Array{ \seq_item:cn{l_internal_array_#1_seq}{#2} }
\ExplSyntaxOff
\begin{document}
\DefineArray{myarray}{1,2,15,6,18}
\Array{myarray}{3},
\Array{myarray}{1},
\Array{myarray}{4},
\Array{myarray}{2}.
\end{document}
在这种情况下,输出是:
具体来说,这些数组以 1 为基础。这是使用 expl3 中的“序列”数据类型。有关更多信息,请参阅 interface3 手册第 VIII 部分。