我想使用 pgf 的数学运算来引用 tikz 中的矩阵坐标。这适用于第二个坐标,但显然奇迹般地:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix,arrows}
\begin{document}
\begin{equation}
\begin{tikzpicture}
[description/.style={fill=white,inner sep=2pt},baseline=(current bounding box.center)]
\matrix (m) [matrix of math nodes, row sep=1em, column sep=1.5em, text height=1.5ex, text depth=0.25ex]
{
0 & \Omega^k_X & Z k k & Z k {k-1} & \cdots & Z k 1 & Z k 0 & 0\phantom .\\
0 & \Lambda^k \mathcal E^\vee & Z k k & Z k {k-1} & \cdots & Z k 1 & Z k 0 & 0.\\
};
\foreach \a in {2,3,...,8} {
\pgfmathsetmacro{\myresult}{\a-1}
\draw[->] (m-1-\myresult) -- (m-1-\a);
\draw[->] (m-2-\myresult) -- (m-2-\a);
};
\end{tikzpicture}
\end{equation}
\end{document}
然而,下面的做法却惨遭失败。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix,arrows}
\begin{document}
\begin{equation}
\begin{tikzpicture}
[description/.style={fill=white,inner sep=2pt},baseline=(current bounding box.center)]
\matrix (m) [matrix of math nodes, row sep=1em, column sep=1.5em, text height=1.5ex, text depth=0.25ex]
{
0 \\
\Omega^k_X \\
Z k k \\
Z k {k-1} \\
cdots \\
Z k 1 \\
Z k 0 \\
};
\foreach \a in {2,3,...,7} {
\pgfmathsetmacro{\myresult}{\a-1}
\draw[->] (m-\myresult-1) -- (m-\a-1);
};
\end{tikzpicture}
\end{equation}
\end{document}
显然,这是因为 \myresult 是 1.0、2.0 等,而 tikz 不喜欢。在谷歌上搜索却无果而终,结果找到了 \pgfmathfloatint,但 tikz 却对 \usetikzlibrary{fpu} 不满意。有没有办法将 1.0 变成 1?
答案1
有\pgfmathtruncatemacro
类似的工作原理\pgfmathsetmacro
,但将结果截断为整数。
顺便说一句:之所以m-1-\myresult
有效但m-\myresult-1
无效,是因为第一个将扩展为m-1-2.0
被解释为m-1-2
带锚点的节点0
(.
是节点.锚点分隔符)。0
和任何其他数字都被视为角度,即 0 度(另请参阅我的回答如何在指向节点中心但停止在节点边缘的节点之间绘制线)所以它还是有点作用的。
第二种形式m-\myresult-1
将扩展为 ,m-2.0-1
取值为 节点m-2
和 锚点0-1
,其中两者都很可能不存在。节点可能存在,但没有同名的锚点。