![宏扩展到 TikZ 节点](https://linux22.com/image/402507/%E5%AE%8F%E6%89%A9%E5%B1%95%E5%88%B0%20TikZ%20%E8%8A%82%E7%82%B9.png)
我想使用宏创建矩形节点,给定两个坐标bottom left
和top right
。困难的部分是我想在可以使用节点名称的地方使用宏;例如,在current page
下面的代码中。
此代码不起作用,但它显示了我想要使用的语法。 可以做类似的事情吗?
\documentclass[]{article}
\usepackage{tikz}
\usetikzlibrary{fit}
\newcommand\makenode[2]{
\node[fit={#1}{#2}] {}
}
\begin{document}
\begin{tikzpicture}[overlay, remember picture]
\coordinate (bottom left) at (10,10);
\coordinate (top right) at (20,20);
\node[anchor=south] at (\makenode{bottom left}{top right}.center) {My node text};
\node[anchor=south] at (current page.center) {My node text};
\end{tikzpicture}
\end{document}
答案1
看看以下 MWE 是否是您所寻找的:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fit}
\newcommand\makenode[2]{\node[draw=red, % to show node border, should be removed
inner sep=0pt,
fit=(#1) (#2)]}
\begin{document}
\begin{tikzpicture}%[overlay, remember picture]
\coordinate (bl) at (5,5); % bottom left
\coordinate (tr) at (10,10); % top right
\makenode{bl}{tr} {my node text};
\end{tikzpicture}
\end{document}
请注意,当节点中的文本长度大于定义坐标之间的水平距离,或者您希望文本分为两行或多行时,这种定义节点的方法会出现问题。
附录: 解决方案如@Ignasi 在下方评论中建议的那样。考虑到这一点,具有更多相似节点的图像代码可以更容易绘制并用箭头连接:
\documentclass[border=3.141592]{article}
\usepackage{tikz}
\usetikzlibrary{fit}
\newcommand\makenode[2]{\node[draw=red, % to show node border, should be removed
inner sep=0pt,
fit=(#1) (#2)]}
\begin{document}
\begin{tikzpicture}[
MN/.style args = {#1/#2}{ % MakeNode
draw=red, inner sep=0pt, fit=(#1) (#2)}
]
\coordinate (bl) at (5,5); % bottom left
\coordinate (tr) at (10,10); % top right
\node (mn) [MN=bl/tr] {my node text};
\end{tikzpicture}
\end{document}
结果和以前一样。