二维数组的索引问题

二维数组的索引问题

我有一个 tikz 代码,使用存储在一维数组中的值,这里是 MWE:

\documentclass{standalone}
\usepackage{tikz}

\def \myArray {{0,1,2,3}}

\begin{document}
    \begin{tikzpicture}

        \pgfmathsetmacro\x{\myArray[0]}
        \draw (0,0) node {\x};

    \end{tikzpicture}
\end{document}

所以这个对于我的复杂代码来说没问题,但我可以使用 2D 数组和循环来真正改进它。下面是一个最小不工作示例,它可能看起来像这样:

\documentclass{standalone}
\usepackage{tikz}

\def \myArray {{0,1}{2,3}}

\begin{document}
    \begin{tikzpicture}

        \pgfmathsetmacro\x{\myArray[1][1]}
        \draw (0,0) node {\x};

    \end{tikzpicture}
\end{document}

通过此代码,我希望显示值“3”(第二行,第二列)。

有没有办法用 latex/tikz 进行二维数组存储和索引?

答案1

如果您热衷于改变语法,expl3可以轻松完成:

\documentclass{standalone}
\usepackage{tikz}

\ExplSyntaxOn
\NewDocumentCommand{\definearray}{mm}
 {
  \seq_gclear_new:c { g_thomas_array_#1_seq }
  \seq_set_split:cnn { g_thomas_array_#1_seq } { ; } { #2 }
 }
\NewExpandableDocumentCommand{\retrieve}{mmm}
 {
  \clist_item:en { \seq_item:cn { g_thomas_array_#1_seq } { #2 + 1 } } { #3 + 1 }
 }
\cs_generate_variant:Nn \seq_set_split:Nnn { c }
\cs_generate_variant:Nn \clist_item:nn { e }
\ExplSyntaxOff

\definearray{myarray}{0,1;2,3}

\begin{document}

\begin{tikzpicture}
\draw (0,0) node {\retrieve{myarray}{1}{1}};
\end{tikzpicture}

\end{document}

这两个+1索引都是从 0 开始,与 PGF 数组一样(expl3序列和逗号分隔列表从 1 开始)。

采用不同的方法,使用不同的语法:

\documentclass{standalone}
\usepackage{tikz}

\ExplSyntaxOn
\NewDocumentCommand{\definearray}{mm}
 {
  \tl_gclear_new:c { g_thomas_array_#1_tl }
  \tl_gset:cn { g_thomas_array_#1_tl } { #2 }
 }
\NewExpandableDocumentCommand{\retrieve}{mmm}
 {
  \clist_item:en { \tl_item:cn { g_thomas_array_#1_tl } { #2 + 1 } } { #3 + 1 }
 }
\cs_generate_variant:Nn \clist_item:nn { e }
\ExplSyntaxOff

\definearray{myarray}{{0,1}{2,3}}

\begin{document}

\begin{tikzpicture}
\draw (0,0) node {\retrieve{myarray}{1}{1}};
\end{tikzpicture}

\end{document}

无论哪种情况,输出结果如下:

在此处输入图片描述

相关内容