\draw 宏中的 TeX 条件的意外行为

\draw 宏中的 TeX 条件的意外行为

让我们考虑下面的代码

\documentclass[tikz]{standalone}
\usepackage{amsmath}
\usetikzlibrary{arrows}  
\usetikzlibrary{calc} 

\begin{document}     
   \begin{tikzpicture}

    \foreach \i in {1,...,5} {
         \draw (\i,0)  
         \ifnum\i=2 node [below, black] {$a$}\fi 
         to node [pos=1.15, above, black, sloped] {$x = const$}({\i+1},5);
     }

    \end{tikzpicture}
\end{document}

我应用了一个条件\ifnum ... \fi来标记绘图线第一个坐标下方的某个节点。在node靠近第二个坐标的第二个坐标上,没有任何条件。

但如果我对第二个条件应用一些条件node,比如

\ifnum\i=3 node [pos=1.15, above, black, sloped] {$x = const$}\fi

我收到错误

! Package tikz Error: (, +, coordinate, pic, or node expected.

以下是出现此类错误的代码示例。

\documentclass[tikz]{standalone}
\usepackage{amsmath}
\usetikzlibrary{arrows}  
\usetikzlibrary{calc} 

\begin{document}
   \begin{tikzpicture}

    \foreach \i in {1,...,5} {
         \draw (\i,0)  
         \ifnum\i=2 node [below, black] {$a$}\fi 
         to \ifnum\i=3 node [pos=1.15, above, black, sloped] {$x = const$}\else\relax\fi {$x = const$} ({\i+1},5);
     }

    \end{tikzpicture}
\end{document}

为什么第二个条件会导致错误,尽管其应用逻辑与第一个节点相同?

答案1

之后to,解析器被专门设置为逐字查找坐标或节点名称。这就是它出错的原因。

在第一个例子中,它找到了一个坐标,现在正在解析上下文(它是一个吗--,它是一个吗to等等),因此会扩展直到找到有用的东西。

请注意,TikZ 解析器逐个字符进行解析。如果解析器发现该字符,c它会通过分支检查该字符是否为controlscoordinate等等。因此,它不会执行块并试图从中找出含义。

相关内容