TikZ calc 不接受在 \newcommand 中定义的坐标,如 (x,y) (带括号)

TikZ calc 不接受在 \newcommand 中定义的坐标,如 (x,y) (带括号)

我已经定义了一个新命令,\newcommand{\with}{(1,1)}因为我想创建一个tikzpicture具有“参数化”起点并从那里构建所有其他坐标。

但是如果这个新命令在calc绝缘坐标中使用,就会出现错误:

!扫描 \tikz@cc@parse@factor 的使用时文件结束。

而在正常情况下,它是可以工作的。为什么呢?

\newcommand不使用括号(在之后添加)的方法总是有效。

\documentclass[tikz, preview=true]{standalone}
\usetikzlibrary{calc}
\newcommand{\without}{1,2}
\newcommand{\with}{(1,1)}

\begin{document}
    \begin{tikzpicture}
        \node (a) at (\without) {Without calc and command without parentheses: this works};
        \node (b) at \with {Without calc and command with parentheses: this works too};
        \node (c) at ($(\without)-(0,2)$) {With calc and command without parentheses: this works};
        \node (d) at ($\with-(0,2)$) {With calc and command with parentheses: this doesn't work};
    \end{tikzpicture}
\end{document}

答案1

关于括号问题,egreg 是正确的,使用$使得tikz尝试解析坐标,这意味着寻找(和,它还会寻找和之间的)数学运算符+和,这就是起作用的原因。-)(\expandafter

关于您想要做什么,即创建绘图所依赖的关键坐标。您可以使用命令而不是样式,例如create key coordinates,使用insert path={(x,y) coordinate (a) ...},然后将其用作绘图中的第一件事:

\path[create key coordinates];

然后,您可以用一种单一风格创建任意数量的关键坐标。

平均能量损失

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\tikzset{%
    create key coordinates/.style={%
        insert path={(1,1) coordinate (a)
                     %make more coordinates if you wish...
        }
    }
}
\begin{document}
    \begin{tikzpicture}
        \path[create key coordinates];
        \node[below=5cm] at (a) {This is using the key coordinate `a'};
        \draw (0,0) -- ($(a)-(7/2,3*8)$);
    \end{tikzpicture}
\end{document}

相关内容