有没有办法选择 TikZ 图片的“水平中心”?

有没有办法选择 TikZ 图片的“水平中心”?

我希望我的 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的坐标eastwest锚点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}

在此处输入图片描述

相关内容