我需要 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
获得两个独立项的完美垂直对齐。以下代码显示了这两个选项:tabular
m
array
sidebyside
\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}