我想使用存储在数组中的数字作为节点文本值,但这对我来说不起作用:
\begin{tikzpicture}
\foreach \x [count=\xi] in {0,...,5} {
\node (a\x) at (\x*1.75,0) [regular polygon,regular polygon sides=4,draw] {\xi};
}
\def\firstSums{{3, 7, 11}}
\foreach \x [count=\xi] in {0, 2, 4} {
\node (b\x) at (\x*1.75,-1.75) [circle,draw] {\firstSums[\xi - 1]};
}
\end{tikzpicture}
我没有得到包含 3、7 和 11 作为文本的圆圈,而是得到了包含3,7,11[1-1]
、3,7,11[2-1]
、3,7,11[3-1]
作为文本的圆圈。
我在这里做错了什么?
答案1
通过使用\pgfmathsetmacro
循环和第二行节点的相对定位:
\documentclass[margin=3mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[
node distance = 12mm,
C/.style = {circle, draw, minimum size=1.7em,inner sep=0pt}
]
\foreach \x [count=\i]in {0,...,5}
{
\node (a\i) [draw] at (1.2*\x,0) {\i};
\ifodd \x\else
\pgfmathsetmacro{\j}{int(2*\i+1)}
\node[C, below of=a\i] {\j};
\fi
}
\end{tikzpicture}
\end{document}
答案2
为了通过索引引用数组的元素,您需要通过 tikz/pgf 引擎解析表达式
\pgfmathparse{\firstSums[\xi - 1]}
但是这不会打印结果,所以你需要一个额外的\pgfmathresult
,这样
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{document}
\begin{tikzpicture}
\foreach \x [count=\xi] in {0,...,5} {
\node (a\x) at (\x*1.75,0) [regular polygon,regular polygon sides=4,draw] {\xi};
}
\def\firstSums{{3, 7, 11}}
\foreach \x [count=\xi] in {0, 2, 4} {
\node (b\x) at (\x*1.75,-1.75) [circle,draw] {\pgfmathparse{\firstSums[\xi - 1]}\pgfmathresult};
}
\end{tikzpicture}
\end{document}
另外,里面有一个eveluate
语法。我个人建议使用这种方法,这样可以避免使用像和这样foreach
的长宏,从而使代码更短。\pgfmathparse
\pgfmathresult
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{document}
\begin{tikzpicture}
\foreach \x [count=\xi] in {0,...,5} {
\node (a\x) at (\x*1.75,0) [regular polygon,regular polygon sides=4,draw] {\xi};
}
\def\firstSums{{3, 7, 11}}
\foreach \x [count=\xi, evaluate={\elem=\firstSums[\xi - 1]}] in {0, 2, 4} {
\node (b\x) at (\x*1.75,-1.75) [circle,draw] {\elem};
}
\end{tikzpicture}
\end{document}