1. 展开然后使用

1. 展开然后使用

一般来说:我需要从数组中检索值,以将这些值作为索引提交给函数。

更具体一点:我想创建包含子图的图形。这些子图是从 mysubfigures.pdf 加载的。子图的顺序保存在单独的列表中ggg。我在下面举了一个最小的例子。

这是不起作用的部分,我需要您的帮助:page=\ggg(\subfigure)

我希望它像page=64什么时候\subfigure1page=61什么时候\subfigure2,等等。

(我在 stackexchange 上看过一些类似的问题,但我不明白答案。)

\documentclass[class=minimal,border=0pt,tikz]{standalone}
\usepackage{tikz}
\usepackage{arrayjob}

\begin{document}

\newarray\ggg
\readarray{ggg}{64&61&41}
\ggg(1)

    \foreach \subfig in {1,2,3}
    {
        %This is Figure \subfig
        \includegraphics[page=\ggg(\subfig)]{./mysubfigures.pdf};
    }

\end{document}

答案1

这里的问题是,arrayjob做一些令人讨厌的事情来从数组中获取值,这与\includegraphics处理其参数的方式不兼容。

有两种解决方案:

1. 展开然后使用

\documentclass[class=minimal,border=0pt,tikz]{standalone}
\usepackage{tikz}
\usepackage{arrayjob}

\begin{document}

    \newarray\ggg
    \readarray{ggg}{64&61&41}
    \ggg(1)

    \foreach \subfig in {1,2,3}
    {
        %This is Figure \subfig
        \checkggg(\subfig)
        \includegraphics[page=\cachedata]{mysubfigures};
    }
\end{document}

这里\checkARRAYNAME(INDEX)将保存宏中的值\cachedata,以便我们可以在参数中正常使用它,因为不需要特殊处理来重写该值。

2. 使用 pgfmath 的数组

由于您使用的tikzpgfmath已经加载,并且能够理解数组。只需执行以下操作:

\def\ggg{{64,61,41}} % <- your array is just a list    

    \foreach \i in {0,1,2} % 0-based indexes
    {
        %This is Figure \i
        \pgfmathsetmacro{\pg}{\ggg[\i]} % <- array notation ARRAY[INDEX]
        \includegraphics[page=\pg]{mysubfigures}
    }

第三种方法

除非您确实需要文档中其他地方的数组,否则您不需要它们,因为您可以利用优秀的\foreach语法:

\foreach[count=\i] \pg in {64,61,41} {
    Subfigure~\i, Page~\pg:
    \includegraphics[page=\pg]{mysubfigures}
}

相关内容