从 tikz 中的“位置”对中提取坐标

从 tikz 中的“位置”对中提取坐标

我认为我有一个简单的问题,但不知何故我无法找到任何解决方案:我有以下代码:

\begin{tikzpicture}[scale=1 , auto,swap]
\foreach \pos/\name in { {(9,7)}/a, {(6,6)}/b, {(9,5)}/c }{
    \node (\name) at \pos {\pos[1]};
}
\end{tikzpicture}

它显然不能按预期工作,因为\pos[1]会产生如下标签(9,7)[1]:)

有没有简单的方法可以从中提取第一个坐标\pos?这样节点的标签分别为 9、6、9?

我想避免将整个循环更改为类似

\foreach \posX/\posY/\name in { {9/7/a}, {6/6/b}, {9/5/c} }{...}

答案1

提取您在坐标对中输入的数字是不可能的,因为 tikz 将这些“无单位”坐标转换为实际点(考虑到scalexy选项等)。

该语法let...in允许您获取这些坐标,但通常仅用于将它们用作计算的一部分以获取其他坐标,而不是用于打印它们。尝试这样做:

\usetikzlibrary{calc}
\begin{tikzpicture}[scale=1 , auto,swap]
\foreach \pos/\name in { {(9,7)}/a, {(6,6)}/b, {(9,5)}/c }{
    \path let \p1=\pos in node (\name) at \pos {\x1};
}
\end{tikzpicture}

产生不令人满意的结果:

坏的

对于这种特殊情况,您可以尝试以下方法,而不是尝试从 tikz 获取 X 坐标,它直接从宏中提取逗号前的第一个数字\pos

\begin{tikzpicture}[scale=1 , auto,swap]
\def\getX(#1,#2){#1}
\foreach \pos/\name in { {(9,7)}/a, {(6,6)}/b, {(9,5)}/c }{
    \node (\name) at \pos {\expandafter\getX\pos};
}
\end{tikzpicture}

得到你想要的结果:

好的

相关内容