改变数组索引和元素的颜色?

改变数组索引和元素的颜色?

我想强调数组交换的元素。现在我有这个

在此处输入图片描述

但我想知道三件事。首先,如何为这个数组的某些索引着色。其次,如何为数组的某些元素着色。第三,如何为数组的某些索引及其对应元素着色。

任何帮助都将不胜感激!

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\newcounter{index}

\begin{document}

\begin{figure}
\centering
  \begin{tikzpicture}
    \setcounter{index}{0}
    \coordinate (s) at (0,0);
    \foreach \num in {3, 1, 4, 1, 5}{
      \node[minimum size=6mm, draw, rectangle] at (s) {\num};
      \node at ($(s)-(0,0.5)$) {\theindex};
      \stepcounter{index}
      \coordinate (s) at ($(s) + (1,0)$);
    }
  \end{tikzpicture}
  \label{fig:testArray}
\end{figure}

\end{document}

答案1

您可以指定如下数组

\acunaarray{3,1,[red]4,*[blue]1,5}

其中,[red]4只会使单元格的内容变成红色;添加*,索引也会变成彩色。

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

\ExplSyntaxOn
\NewDocumentCommand{\arrayelement}{sou\q_stop}
 {
  \node[minimum~size=6mm, draw, rectangle]~at~(s)~
    { \IfValueT{#2}{\color{#2}} #3 };
  \node at~($(s)-(0,0.5)$)~
    { \IfBooleanT{#1}{\color{#2}}\int_to_arabic:n { \l_acuna_index_int } };
  \int_incr:N \l_acuna_index_int
  \coordinate (s)~at~($(s) + (1,0)$);
 }
\NewDocumentCommand{\acunaarray}{m}
 {
  \begin{tikzpicture}
  \int_zero:N \l_acuna_index_int
  \coordinate (s)~at~(0,0);
  \clist_map_inline:nn { #1 }
   {
    \arrayelement##1\q_stop
   }
  \end{tikzpicture}
 }
\int_new:N \l_acuna_index_int
\ExplSyntaxOff

\begin{document}

\acunaarray{3,1,[red]4,*[blue]1,5}

\end{document}

在此处输入图片描述

答案2

\num 是 TeX 软件包中经常使用的宏。尽量避免使用直接的单词作为宏名,或者在其前面加上my这样的前缀\mynum

\documentclass[tikz]{standalone}
\begin{document}
  \begin{tikzpicture}
    \foreach \x\xc\xb[count=\xi from 0] in {3/red/blue, 1/red/blue, 4/blue/red, 1/yellow/black, 5/blue/green}{
    \node[draw=\xc,text=\xb,label=-90:\xi] (s-\xi) at (\xi,0) {\x}; 
    }
  \end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

您可以使用\foreach[count=\i]一个额外的变量来表示循环中的当前索引。要迭代值对(在本例中为索引和颜色),您可以说\foreach \n/\thecolor in {1/red,2/black}{do stuff}。如果您不提供该对的第二个元素,{1/red,2}那么第二个变量将默认为与第一个相同的值,因此您可以测试两个变量是否相等并提供默认值。要进行此检查,我说\ifx\n\thecolor \def\thecolor{black} \fi

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[cell/.style={minimum size=6mm, draw, rectangle}]
    \foreach[count=\i] \n/\thecolor in {3, 1/red, 4/red, 1, 5}{
        \ifx\n\thecolor \def\thecolor{black}\fi % make color default to black
        \draw (\i,0) 
           node[cell,text=\thecolor] {\n} 
           node[below=0.5cm] {\i};
    }
\end{tikzpicture}

\begin{tikzpicture}
    \foreach[count=\i] \n/\thecolor in {3, 1/red, 4/red, 1, 5}{
      \ifx\n\thecolor \def\thecolor{black}\fi 
       \draw (\i,0) 
           node[cell] {\n} 
           node[below=0.5cm,text=\thecolor] {\i};
    }
\end{tikzpicture}
\end{document} 

相关内容