我认为我有一个简单的问题,但不知何故我无法找到任何解决方案:我有以下代码:
\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 将这些“无单位”坐标转换为实际点(考虑到scale
、x
和y
选项等)。
该语法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}
得到你想要的结果: