我想强调数组交换的元素。现在我有这个
但我想知道三件事。首先,如何为这个数组的某些索引着色。其次,如何为数组的某些元素着色。第三,如何为数组的某些索引及其对应元素着色。
任何帮助都将不胜感激!
\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}