TikZ:如何使用 \foreach 变量来引用交叉点?

TikZ:如何使用 \foreach 变量来引用交叉点?

使用该\foreach语句,我生成一组构成网格的线条。我想使用循环变量来命名各个路径,以便稍后在它们的交叉点处绘制一些东西。

\documentclass{article}
\usepackage{tikz}

\begin{document}
\newlength{\vlinedist}
\setlength{\vlinedist}{.4cm}
\newlength{\hlinedist}
\setlength{\hlinedist}{.4cm}
\usetikzlibrary{intersections}
\begin{tikzpicture}
   \foreach \x in {1,...,10}
   {
      \draw[name path global/.expanded=h \x] (0,\hlinedist*\x) -- ++(33*\vlinedist,0);
   }
   \foreach \x in {1,...,32} {
      \draw[name path global/.expanded=v \x] (\vlinedist*\x, 0) -- ++(0,11*\hlinedist);
   }
   \foreach \x in {1,...,10}
   {
      \foreach \y in {1,...,32}{
         \draw[name intersections={of=h \x and v \y}] (intersection-1) circle (2pt);
      }
   }
\end{tikzpicture}
\end{document}

我发现我必须使用这些global/.expanded东西才能命名路径(无论出于什么原因)。但是当尝试引用部分中的不同路径时intersections={of=h \x and v \y},这不起作用,我收到错误:

Runaway argument?
h \x and v \y \tikz@stop \else \pgfkeys@case@two \fi \fi \fi \pgfkeys@parse \ET
C.
! File ended while scanning use of \tikz@intersect@path@names@parse.
<inserted text>
                \par
<*> file.tex

?

现在我知道还有其他方法可以制作网格并将点放置在一些选定的交叉点处,但这不是重点,因为这是一个相当普遍的问题,即如何使用循环变量来引用 tikz 中的命名路径。

答案1

错误来自应该使用和 的intersections={of=h \x and v \y}地方。实际上,和中不需要破折号,只需要。感谢 @percusse 对我的友好评论。{h-\x}{v-\y}h-\xv-\y{ }

在此处输入图片描述

代码

\documentclass[border=10pt]{standalone}%{article}
\usepackage{tikz}
\usetikzlibrary{intersections}

\newlength{\vlinedist}
\setlength{\vlinedist}{.4cm}
\newlength{\hlinedist}
\setlength{\hlinedist}{.4cm}
\begin{document}
\begin{tikzpicture}
   \foreach \x in {1,...,10}
   {
      \draw[name path global/.expanded=h-\x] (0,\hlinedist*\x) -- ++(33*\vlinedist,0);
   }

   \foreach \x in {1,...,32} {
      \draw[name path global/.expanded=v-\x] (\vlinedist*\x, 0) -- ++(0,11*\hlinedist);
   }

   \foreach \x in {1,...,10}
   {
      \foreach \y in {1,...,32}{
         \draw[name intersections={of={h-\x} and {v-\y}}](intersection-1) circle (2pt);
      }
   }
\end{tikzpicture}
\end{document}

相关内容