交替*颜色*命令

交替*颜色*命令

我问了这个问题的简化版本这里但不幸的是,在构建我的 MWE 时,一些细节似乎丢失了。

我的实际的目标是创建一个交替颜色的命令。我尝试了 David Carlisle 在该问题的回答中建议的解决方案,但这对我的情况不起作用:

\documentclass{article}
\usepackage{tikz}

\def\currentred{red\let\currentcol\currentgreen}
\def\currentgreen{green\let\currentol\currentblue}
\def\currentblue{blue\let\currentcol\currentred}
\let\currentcol\currentred

\begin{document}
    \tikz{
        \foreach \i in {1,...,10} {
            \node at (\i,\i) {\color{\currentcol} \i}
        }}
\end{document}

这会出现“TeX 容量超出”的错误。

答案1

只要你加载 TiZ 您可以访问包含数组和模函数的 pgf 机制。要循环浏览颜色列表,

\def\LstColors{"myBlue","myYellow","myBrown"}

你需要做的就是说

\pgfmathsetmacro{\mycolor}{{\LstColors}[Mod(\i-1,3)]}

完整示例:

\documentclass{article}
\usepackage{tikz}

\definecolor{myBlue}{RGB}{0,114,206}
\definecolor{myYellow}{RGB}{255,199,44}
\definecolor{myBrown}{RGB}{154,51,36}

\begin{document}
\begin{tikzpicture}
\def\LstColors{"myBlue","myYellow","myBrown"}
        \foreach \i in {1,...,10} {
            \pgfmathsetmacro{\mycolor}{{\LstColors}[Mod(\i-1,3)]}
            \node[color=\mycolor] at (\i,\i) {\i};}
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

您可以使用引号来避免怪癖,\pgfmathparse\def使用expl3

\documentclass{article}
\usepackage{tikz}
\usepackage{xparse}

\definecolor{myBlue}{RGB}{0,114,206}
\definecolor{myYellow}{RGB}{255,199,44}
\definecolor{myBrown}{RGB}{154,51,36}

\ExplSyntaxOn
\NewDocumentCommand{\setcolorlist}{m}
 {
  \seq_set_from_clist:Nn \l_luke_colorlist_seq { #1 }
  % sequences are indexed from 1, so transfer the last item to the left
  \seq_pop_right:NN \l_luke_colorlist_seq \l_tmpa_tl
  \seq_put_left:NV \l_luke_colorlist_seq \l_tmpa_tl
 }
\NewExpandableDocumentCommand{\getcolor}{m}
 {
  \seq_item:Nn \l_luke_colorlist_seq
   {% mod out and add one
    \int_mod:nn { #1 } { \seq_count:N \l_luke_colorlist_seq } + 1
   }
 }
\seq_new:N \l_luke_colorlist_seq
\ExplSyntaxOff

\begin{document}

\begin{tikzpicture}
  \setcolorlist{myBlue,myYellow,myBrown}
  \foreach \i in {1,...,10} {
    \node[color=\getcolor{\i}] at (\i/2,\i/2) {\i};
  }
\end{tikzpicture}
\quad
\begin{tikzpicture}
  \setcolorlist{myBlue,myYellow}
  \foreach \i in {1,...,10} {
    \node[color=\getcolor{\i}] at (\i/2,\i/2) {\i};
  }
\end{tikzpicture}

\end{document}

您可以在内部定义一个颜色列表tikzpicture,并且它只能在本地使用,或者通过在文档前言中设置它来使其成为“全局”列表;这样的全局列表总是可以在本地被覆盖。

在此处输入图片描述

相关内容