在 \foreach 中使用 count 作为变量名

在 \foreach 中使用 count 作为变量名

我正在尝试使用构建条形图\foreach。我想根据定义的变量为每个条形着色。(这是一个更广泛项目的一部分,所以我无法更改它们的定义方式。)

使用\count宏在每次迭代时获取索引值,我想用它来选择条形的正确颜色。但是宏\n(即索引)按原样获取,而不是其值。因此我收到有关 的错误Undefined color 'color@\n'

我已经使用过,检查过typeout该值是否正确,但它似乎不是一个字符串或者类似的东西......

以下是 MWE:

\documentclass{article}
\usepackage{tikz,pgfplots,pgffor}

\colorlet{color@1}{green}
\colorlet{color@2}{yellow}
\colorlet{color@3}{orange}
\colorlet{color@4}{red}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
            xtick={1,...,4},
            x tick style={draw=none},
            xticklabel={1},
            ymin=0,
            every axis plot/.append style={ybar,fill}
        ]
        \foreach \x [count=\n] in {1,3,2,10}{
            \typeout{index is \n}
            \addplot[color=color@\n ] coordinates {(\n,\x)};
            % Here is the error about color@\n undefined.
        }
        \end{axis}
    \end{tikzpicture}
    
\tikz[x=0.75cm,y=0.75cm]
\foreach \x [count=\xi] in {a,...,d}
\foreach \y [count=\yi] in {\x,...,d}
\node [draw, top color=white, bottom color=color@\xi, minimum size=0.666cm]
at (\xi,-\yi) {$\xi,\yi$};
    
\end{document}

第二个示例运行良好,并且是根据文档改编的。我看不出第一个示例中的错误在哪里。

MWE 结果

可能是扩展错误吗?

非常感谢

答案1

可选参数的扩展\addplot确实非常棘手。最后,我使用了listofitems来定义和扩展颜色。参见附录对于没有的版本listofitems

\documentclass{article}
\usepackage{tikz,pgfplots,pgffor,listofitems}
\pgfplotsset{compat=1.17}
\readlist\colorlist{green,yellow,orange,red}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
            xtick={1,...,4},
            x tick style={draw=none},
            xticklabel={1},
            ymin=0,
            every axis plot/.append style={ybar,fill}
        ]
        \readlist\mylist{1,3,2,10}
        \foreachitem \x \in \mylist[]{
            \typeout{index is \xcnt}
            \edef\tmp{color=\colorlist[\xcnt]}
            \expandafter\addplot\expandafter[\tmp] 
               coordinates {(\xcnt,\x)};
        }
        \end{axis}
    \end{tikzpicture}
    
\tikz[x=0.75cm,y=0.75cm]
\foreach \x [count=\xi] in {a,...,d}
\foreach \y [count=\yi] in {\x,...,d}
\node [draw, top color=white, bottom color={\colorlist[\xi]}, minimum size=0.666cm]
at (\xi,-\yi) {$\xi,\yi$};
    
\end{document}

在此处输入图片描述

附录

版本不使用listofitems。在这两种情况下,关键是在将颜色呈现给 之前对其进行扩展\addplot,方法是

        \edef\tmp{color=color@\n}
        \expandafter\addplot\expandafter[\tmp] 
           coordinates {(\n,\x)};

妇女权利委员会:

\documentclass{article}
\usepackage{tikz,pgfplots,pgffor}
\colorlet{color@1}{green}
\colorlet{color@2}{yellow}
\colorlet{color@3}{orange}
\colorlet{color@4}{red}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
            xtick={1,...,4},
            x tick style={draw=none},
            xticklabel={1},
            ymin=0,
            every axis plot/.append style={ybar,fill}
        ]
        \foreach \x [count=\n] in {1,3,2,10}{
            \typeout{index is \n}
            \edef\tmp{color=color@\n}
            \expandafter\addplot\expandafter[\tmp] 
               coordinates {(\n,\x)};
        }
        \end{axis}
    \end{tikzpicture}
    
\tikz[x=0.75cm,y=0.75cm]
\foreach \x [count=\xi] in {a,...,d}
\foreach \y [count=\yi] in {\x,...,d}
\node [draw, top color=white, bottom color=color@\xi, minimum size=0.666cm]
at (\xi,-\yi) {$\xi,\yi$};
    
\end{document}

相关内容