tikz 有办法简化这个 ({\ii+\jj*0.5},{-\jj*0.8}) 吗?
我试了 declare function 和 tikz 的 math 好像都不能解析坐标?
! Package tikz Error: Cannot parse this coordinate.参考的 declare-function-for-tikzpicture
\documentclass[tikz,border=10pt]{standalone}
\begin{document}
\begin{tikzpicture}[
declare function={
labelpos(\x,\y) = ({\x+\y*0.5},{-\y*0.8});
}]
\foreach \ii in {0, 1, ..., 5}{
\foreach \jj in {0, 1, ..., 4}{
\node at labelpos(\x,\y) {$(\ii,\jj)$};
}
}
\end{tikzpicture}
\end{document}
declare function看文档似乎只能允许一元的输出...
如果重复使用这个坐标就要写很多次了,虽然可以复制粘贴,但是不太优雅
我一般的做法是\pgfmathsetmacro:
\documentclass[tikz,border=10pt]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \ii in {0, 1, ..., 5}{
\foreach \jj in {0, 1, ..., 4}{
\pgfmathsetmacro{\x}{\ii+\jj*0.5}
\pgfmathsetmacro{\y}{-\jj*0.8}
\node at (\x,\y) {$(\ii,\jj)$};
}
}
\end{tikzpicture}
\end{document}或者\fpeval?
\documentclass[tikz,border=10pt]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \ii in {0, 1, ..., 5}{
\foreach \jj in {0, 1, ..., 4}{
\def\x{\fpeval{\ii+\jj*0.5}}
\def\y{\fpeval{-\jj*0.8}}
\node at (\x,\y) {$(\ii,\jj)$};
}
}
\end{tikzpicture}
\end{document}\documentclass[tikz,border=10pt]{standalone}
\begin{document}
\begin{tikzpicture}
\foreach \ii in {0,1,...,5} {
\foreach \jj in {0,1,...,4} {
\node at ({\ii+\jj*0.5}, {-\jj*0.8}) {$(\ii,\jj)$};
}
}
\end{tikzpicture}
\end{document}用最简单的方式,或者定义两个函数
\documentclass[tikz,border=10pt]{standalone}
\begin{document}
\begin{tikzpicture}[
declare function={
px(\i,\j) = \i + \j*0.5; % x 坐标
py(\i,\j) = -\j*0.8; % y 坐标
}
]
\foreach \i in {0,...,5}
\foreach \j in {0,...,4}
\node at (px(\i,\j), py(\i,\j)) {$(\i,\j)$};
\end{tikzpicture}
\end{document}非要一次返回一对坐标,用command方式,但不推荐
\documentclass[tikz,border=10pt]{standalone}
\newcommand\labelpos[2]{#1+#2*0.5, -#2*0.8} % 👈 一次返回 x,y
\begin{document}
\begin{tikzpicture}
\foreach \i in {0,...,5}
\foreach \j in {0,...,4}
\node at (\labelpos{\i}{\j}) {$(\i,\j)$}; % 👈 完美可用
\end{tikzpicture}
\end{document}