I need 2 different TikZpictures with the same bounding box (the one of the first TikZpicture) because I need a perfect vertical alignment of the subfigures side by side.
Please, how can I handle this?
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It only takes a minute to sign up.
Sign up to join this communityI need 2 different TikZpictures with the same bounding box (the one of the first TikZpicture) because I need a perfect vertical alignment of the subfigures side by side.
Please, how can I handle this?
You can use the \useasboundingbox
command in the second picture to set the bounding box. Should be the first command in the picture.
\useasboundingbox (0,0) rectangle (<width of first picture>,<height of first picture>);
If you don't know the dimensions of the first picture you can get them from the current bounding box
node. Using remember picture
you can then access this information in the second node.
The code below will set the accept same bounding box for the second 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}
This works if both pictures use only positive coordinates. Adjustment must be made if this isn't the case.
The \fbox
commands are only to display the bounding box and are not really required.
\newbox
:) but you need to compile twice.
Mar 2, 2011 at 16:05
remember picture
with overlay
?
Mar 2, 2011 at 16:15
[remember picture]
makes it work, though. Funny...
Another way to do it is to use a single tikzpicture environment and one scope environment:
\begin{tikzpicture}
% TikZ code for first picture
\begin{scope}[xshift=5cm]
% TikZ code for second picture
\end{scope}
\end{tikzpicture}
Then the points plotted at (x,y) in each scope will be exactly 5cm apart.
The code of Martin is correct but if you want to know the width and the height of the picture, you can use
\newbox\mybox
\setbox\mybox=\hbox{\begin{tikzpicture}
...
\end{tikzpicture}}
Now you get the width and the height of picture with
\wd\mybox
\ht\mybox
\dp\mybox
The height is \dp
+ \ht
. I don't know if pgf/TikZ gives the height and the width directly.
Perfect vertical alignment of two independent tikzpictures
can be obtained with a tabular
with m
columns (from array
package) or with a sidebyside
tcolorbox. Following code shows both options:
\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}