TikZ \foreach 中的计数器如何工作?

TikZ \foreach 中的计数器如何工作?

我想将线段分割成 5 个等长线段,并在新的分割点处放置刻度标记。我希望刻度标记显示为黑色。接下来,我想将每个新线段分割成 5 个等长线段,并希望仅将新刻度标记涂成蓝色。

为了完成这个任务,我使用了 TikZ,以下是代码。

\documentclass[11pt]{amsart}
\usepackage{pgf,tikz}

\begin{document}
\begin{tikzpicture}
\draw (0,10)-- (15,10);
\foreach \x in {0,...,5}
\draw (3*\x,10)--(3*\x,9.8);
\foreach \x in {1,...,4,6,...,9,11,...,14,16,...,19,21,...,24}
\draw[draw=blue] (3*\x/5,10)--(3*\x/5,9.8);
\end{tikzpicture}

\end{document}  

但结果却不是我们所期望的结果。

在此处输入图片描述

所以我阅读了手册,它建议我至少应该包含两个起始数字。我相应地编辑了代码,并获得了所需的结果。新代码如下所示。

\documentclass[11pt]{amsart}
\usepackage{pgf,tikz}

\begin{document}
\begin{tikzpicture}
\draw (0,10)-- (15,10);
\foreach \x in {0,...,5}
\draw (3*\x,10)--(3*\x,9.8);
\foreach \x in {1,...,4, 6,7,...,9, 11,12,...,14,16,17,...,19, 21,22,...,24}
\draw[draw=blue] (3*\x/5,10)--(3*\x/5,9.8);
\end{tikzpicture}

\end{document} 

在此处输入图片描述

这是我的难题。如果您将起始数字和结束数字提供给知道增量为 1(默认情况下)的计数器,那么您不必提供两个起始数字。

情况似乎确实如此,因为以下内容有效。

\foreach \x in {0,...,5}
\draw (3*\x,10)--(3*\x,9.8);

但是,计数器第二次似乎失去了这种能力,因为我必须给出两个数字来提醒计数器增量是 1。(这是我的假设。)

这背后的原因是什么?

答案1

通过反复试验,似乎每当 TikZ 的步长增量大小不明确时,它都会简单地假设前一个整数当前索引减一作为步长。换句话说,当您输入 时{1,...4,6,...20},它会给出{1,2,3,4,6,11,16}步长6-1=5,同样,如果您输入 ,{1,...4,8.7,...25}您将获得{1,2,3,4,8.7, 16.4, 24.09999}步长8.7-1=7.7。您可以使用以下方法自行测试

\begin{tikzpicture}
\foreach \x in {1,...,4,8,...,25}
{\node at (\x / 2,0) {$\x$};}
\end{tikzpicture}

它也适用于这样的字母

\begin{tikzpicture}
\foreach \x [count = \xi] in {a,...,c,f,...,z}
{\node at (\xi,0) {$\x$};}
\end{tikzpicture}

结果a,b,c,f,k,p,u,z

答案2

这不是对您的问题的回答,但它是一种在两种\foreach帮助下绘制黑色和蓝色勾号的方法。

\documentclass[11pt]{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
\draw (0,10)-- (15,10);
\foreach \x in {0,...,4}{
    \draw (3*\x,10)--++(0,-0.2);
    \foreach \j in {1,...,4}
        \draw[draw=blue] ({3*(\x+\j/5)},10)--++(0,-0.2);
}
\draw (3*5,10)--++(0,-0.2);
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容