foreach 的两个问题 - TikZ

foreach 的两个问题 - TikZ

注意:这是对我的原始问题的重大修改。我本打算针对第二个问题单独提出另一个问题,但它已经在评论中提出,可能已经在这里回答了。所以我修改了这个问题,以涵盖所有两个问题。

第一个问题:计量单位不合法:(插入 pt)

我面临着类似的问题在 TikZ foreach 中使用算术时出现“非法计量单位(插入 pt)”。除了我使用负小数和正小数外,我在这里使用三个点作为间隔。MWE 如下:

\documentclass[border=3mm,tikz]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x/\y in {-1.4/-1.4,-1.2/-1.2,...,1.6/1.6}{
\filldraw (\x,\y) circle [radius=2pt];}
\end{tikzpicture}
\end{document}

我该如何解决这个问题?我知道有另一种方法可以得到相同的图片。但我出于某种目的正在尝试这种方法。我在这里传递了相等的 x 和 y 值。问题不在于是否有其他方法可以制作相同的图片。问题是是否有办法解决此错误并消除它。这是因为我可能会更改 y 的值,但仍然可能发现隐藏在其中的相同错误。

第二个问题:使用两个 foreach 来创建一个有序对

第二个问题是如何使用两个foreach命令来创建一个有序对,以便一个命令不会迭代另一个命令的迭代,而是形成一一对应关系或类似的东西。有人建议使用evaluateforeach当我知道 y 依赖于 x 时,这是可以的。但是当 y 根本不依赖于 x 时怎么办呢?例如,当 y 有一些随机值时?MWE 是

\documentclass[border=3mm,tikz]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x  in {1,...,9}
\foreach \y  in {2,5,4,6,9,1,3,8,7}
\filldraw (\x,\y) circle [radius=10pt];
\end{tikzpicture}
\end{document}

这使:

意想不到的结果

我想要的是:

预期结果

答案1

也许像这样的解决方法...

\documentclass[border=3mm,tikz]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x [count=\xcnt] in {-1.4,-1.2,...,1.6}{%
\foreach \y [count=\ycnt] in {-1.4,-1.2,...,1.6}{%
\ifnum\xcnt=\ycnt\filldraw (\x,\y) circle [radius=2pt];\fi
}}
\end{tikzpicture}
\begin{tikzpicture}
\foreach \x [count=\xcnt] in {-1.4,-1.2,...,1.6}{%
\foreach \y [count=\ycnt] in {-2.8,-2.4,...,3.2}{%
\ifnum\xcnt=\ycnt\filldraw (\x,\y) circle [radius=2pt];\fi
}}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

你为什么不这么做呢?

\documentclass[border=3mm,tikz]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x in {-1.4,-1.2,...,1.6}{
\filldraw (\x,\x) circle [radius=2pt];}
\end{tikzpicture}
\end{document}

答案3

也只是提一下这一点。如果您有一个要定期放置的值列表,则一个带计数器的循环就足够了:

\documentclass[border=3mm,tikz]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach [count=\x] \y  in {2,5,4,6,9,1,3,8,7}
   \filldraw (\x,\y) circle [radius=10pt];
\end{tikzpicture}
\end{document}

如果值应该从某个特定值开始,您可以说例如count=\x from 10,如果\x应该有不同的间距,您可能可以使用evaluate,例如\foreach [count=\x, evaluate={\NewX=2*\x + 4;}]这将使\NewX6、8、10、...

\documentclass[border=3mm,tikz]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach [count=\x, evaluate={\NewX=2*\x+4;}] \y  in {2,5,4,6,9,1,3,8,7}
   \filldraw (\NewX,\y) circle [radius=10pt];
\end{tikzpicture}
\end{document}

答案4

对于第二个问题,这样做是可行的:

\begin{tikzpicture}
\foreach \coords in {(1,2),(2,5),(3,4),(4,6),(5,9),(6,1),(7,3),(8,8),(9,7)}
\filldraw \coords circle [radius=10pt];
\end{tikzpicture}

请参阅第 1002 页的“对的特殊处理”部分PGF 手册,第 88 节“重复的事情:Foreach 语句”。

相关内容