如何保存 TikZpicture 的边界框并在其他 TikZpicture 中使用

如何保存 TikZpicture 的边界框并在其他 TikZpicture 中使用

我需要 2 个具有相同边界框(第一个 TikZpicture 的边界框)的不同 TikZpicture,因为我需要并排完美垂直对齐子图。

请问我该如何处理这个问题?

答案1

您可以使用\useasboundingbox第二张图片中的命令来设置边界框。应该是图片中的第一个命令。

\useasboundingbox (0,0) rectangle (<width of first picture>,<height of first picture>);

如果您不知道第一张图片的尺寸,您可以从节点获取它们current bounding box。然后remember picture您可以在第二个节点中访问此信息。

下面的代码将为第二张图片设置接受相同的边界框。

\documentclass{article}
\usepackage{tikz}
\begin{document}
\fbox{%
\begin{tikzpicture}
   \draw (-1,-1) -- (5,5);
   % more drawing commands ...
   \coordinate (FIRST NE) at (current bounding box.north east);
   \coordinate (FIRST SW) at (current bounding box.south west);
\end{tikzpicture}
}
\fbox{%
\begin{tikzpicture}
   \useasboundingbox (FIRST SW) rectangle (FIRST NE);
   \draw (0,0) -- (1,1);
\end{tikzpicture}
}
\end{document}

如果两张图片都只使用正坐标,则此方法有效。如果不是,则必须进行调整。

这些\fbox命令仅用于显示边界框,并不是真正需要的。

答案2

另一种方法是使用单个 tikzpicture 环境和一个范围环境:

\begin{tikzpicture}
% TikZ code for first picture
\begin{scope}[xshift=5cm]
% TikZ code for second picture
\end{scope}
\end{tikzpicture}

然后,每个范围内绘制在 (x,y) 处的点将正好相距 5 厘米。

答案3

Martin 的代码是正确的,但如果您想要知道图片的宽度和高度,您可以使用

\newbox\mybox 
\setbox\mybox=\hbox{\begin{tikzpicture}
...
\end{tikzpicture}} 

现在你可以获得图片的宽度和高度

\wd\mybox
\ht\mybox
\dp\mybox

高度是\dp+ \ht。我不知道 pgf/TikZ 是否直接给出高度和宽度。

答案4

可以使用带有列(来自包)或使用tcolorboxtikzpictures获得两个独立项的完美垂直对齐。以下代码显示了这两个选项:tabularmarraysidebyside

\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{array}
\newtcolorbox{mysidebyside}[1][]{%
enhanced, sidebyside,
sidebyside align= center seam,
halign = center, halign lower = center,
#1
}

\begin{document}
\begin{mysidebyside}[]
\begin{tikzpicture}
\draw (0,0)--++(0:3cm)--++(60:3cm)--cycle;
\end{tikzpicture}
\tcblower
\begin{tikzpicture}
\draw (0,0)--++(0:1cm)--++(60:1cm)--cycle;
\end{tikzpicture}
\end{mysidebyside}

\begin{mysidebyside}[empty]
\begin{tikzpicture}
\draw (0,0)--++(0:3cm)--++(60:3cm)--cycle;
\end{tikzpicture}
\tcblower
\begin{tikzpicture}
\draw (0,0)--++(0:1cm)--++(60:1cm)--cycle;
\end{tikzpicture}
\end{mysidebyside}

\noindent\begin{tabular}{>{\centering\arraybackslash}m{.45\textwidth}>{\centering\arraybackslash}m{.45\textwidth}}
\begin{tikzpicture}
\draw (0,0)--++(0:3cm)--++(60:3cm)--cycle;
\end{tikzpicture}
&
\begin{tikzpicture}
\draw (0,0)--++(0:1cm)--++(60:1cm)--cycle;
\end{tikzpicture}
\end{tabular}

\end{document}

在此处输入图片描述

相关内容