我希望我的 TikZ 图形围绕某个坐标水平居中。在此示例中,我希望图形的水平中心位于正方形的中心 x=2,但文本节点超出了正方形,这会将中心移动到 x=2.1。
我希望这样做的原因是当正方形放置在文档中的浮动位置时,它能够正确对齐。我通常通过放置一个相反的假元素(在本例中为白色文本或hphantom
节点)来“解决”这个问题,以均匀地延伸左边框。我还手动放置了不可见的元素来延伸左边框。但是,我确定有更好的解决方案,不需要手动调整?
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
\draw (0,0) rectangle (4,4);
\draw[fill=black] (3,3.5) circle (0.1) --++ (0,1) node[anchor=south] {label extends border};
\draw[fill=black] (2,2) circle (0.1) --++ (0,-0.5) node[anchor=north] {actual center of figure};
\end{tikzpicture}
\end{document}
这是我想要的数字:
答案1
\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (o) at (2,2);
\draw (0,0) rectangle (4,4);
\draw[fill=black] (3,3.5) circle[radius=0.1] -- ++(0,1) node[above] {label extends border};
\draw[fill=black] (o) circle[radius=0.1] -- ++(0,-0.5) node[below] {actual center of figure};
\useasboundingbox let \p1=(o), \p2=(current bounding box.south west), \p3=(current bounding box.north east) in ({\x1-(\x3-\x1)},\y2) rectangle (\x3,\y3);
\end{tikzpicture}
\end{document}
答案2
我知道您想要一种自动的方法来扩展(水平)图形边界框,以便它围绕矩形的中心对称。
解决这个问题的一种方法如下:为了简单起见,我将“中心点”改为(0,0)
--- 适应通用中心并不困难,只是很乏味。
在图的末尾,我得到了形状x
的坐标east
和west
锚点current bounding box
,然后在“倒置”的限制之间画一条看不见的线(没有描边)。
\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw (-2,-2) rectangle (2,2);
\draw[fill=black] (1,1.5) circle (0.1) --++ (0,1) node[anchor=south] {label extends border};
\draw[fill=black] (0,0) circle (0.1) --++ (0,-0.5) node[anchor=north] {actual center of figure};
\path let \p1 = (current bounding box.west),
\p2 = (current bounding box.east)
in (-\x1,0) -- (-\x2,0);
\end{tikzpicture}
\end{document}
答案3
您可以隐藏标签的宽度,\makebox[0pt]{label extends border}
并为图像添加对称的水平边距:
\documentclass[tikz,border={0.7cm 0cm}]{standalone}
\begin{document}
\begin{tikzpicture}
\draw (0,0) rectangle (4,4);
\draw[fill=black] (3,3.5) circle (0.1) --++ (0,1) node[anchor=south] {\makebox[0pt]{label extends border}};
\draw[fill=black] (2,2) circle (0.1) --++ (0,-0.5) node[anchor=north] {actual center of figure};
\end{tikzpicture}
\end{document}
或者您可以使用它overlay
来防止选定元素影响边界框:
\documentclass[tikz,border={0.7cm}]{standalone}
\begin{document}
\begin{tikzpicture}
\draw (0,0) rectangle (4,4);
\draw[fill=black] (3,3.5) circle (0.1) --++ (0,1) node[anchor=south,overlay] {label extends border};
\draw[fill=black] (2,2) circle (0.1) --++ (0,-0.5) node[anchor=north] {actual center of figure};
\end{tikzpicture}
\end{document}