
Ich möchte zwei platzierentikzBilder nebeneinander, beides sollten Zahlen sein, auf die ich mich beziehen kann. Bitte beachten Sie folgende MWE:
\documentclass{scrartcl}
\usepackage{tikz}
\begin{document}
\begin{figure}
\centering
\begin{minipage}{.5\textwidth}
\centering
\begin{tikzpicture}
\draw [fill=black] (0,0) rectangle (1,1);
\end{tikzpicture}
\captionof{figure}{a square}
\label{fig:square}
\end{minipage}%
\begin{minipage}{.5\textwidth}
\centering
\begin{tikzpicture}
\draw [fill=black] (0,0) rectangle (1,3);
\end{tikzpicture}
\captionof{figure}{a rectangle}
\label{fig:rect}
\end{minipage}%
\end{figure}
Figures \ref{fig:square} and \ref{fig:rect} demonstrate the difference
between a square and a rectangle.
\end{document}
Das sieht aus wie
Ich möchte, dass beide Bilder oben ausgerichtet sind, die Bildunterschriften aber auch auf gleicher Höhe sind:
Können Sie mir bitte erklären, wie diese Ausrichtungen realisiert werden können, ohne die Referenzierbarkeit der einzelnen Bilder zu verlieren?
Antwort1
Hier ist eine Lösung mit minipage
Ausrichtung, baseline
der Option des TikZ-Bildes und dem speziellen Knoten current bounding box
.
\documentclass{scrartcl}
\usepackage{tikz}
\begin{document}
\begin{figure}
\begin{minipage}[t]{.5\linewidth}
\centering
\begin{tikzpicture}[baseline=(current bounding box.north)]
\draw [fill=black] (0,0) rectangle (1,1);
\end{tikzpicture}
\end{minipage}%
\begin{minipage}[t]{.5\linewidth}
\centering
\begin{tikzpicture}[baseline=(current bounding box.north)]
\draw [fill=black] (0,0) rectangle (1,3);
\end{tikzpicture}
\end{minipage}
\begin{minipage}[t]{.5\linewidth}
\caption{a square}
\label{fig:square}
\end{minipage}%
\begin{minipage}[t]{.5\linewidth}
\caption{a rectangle}
\label{fig:rect}
\end{minipage}
\end{figure}
Figures \ref{fig:square} and \ref{fig:rect} demonstrate the difference
between a square and a rectangle.
\end{document}
Um diesen Code in einem Makro zu verwenden (wie inGonzalo Medinas Antwort), können Sie den every picture
Stil verwenden:
\newcommand\SideBySide[6]{
\begin{figure}
\tikzset{every picture/.style={baseline=(current bounding box.north)}}
\begin{minipage}[t]{.5\linewidth}
\centering #1%
\end{minipage}%
\begin{minipage}[t]{.5\linewidth}
\centering #4%
\end{minipage}
\begin{minipage}[t]{.5\linewidth}
\caption{#2}
\label{#3}
\end{minipage}%
\begin{minipage}[t]{.5\linewidth}
\caption{#5}
\label{#6}
\end{minipage}
\end{figure}
}
Syntax:
\SideBySide{<figure1>}{<caption1>}{<label1>}{<figure2>}{<caption2>}{<label2>}
Beispiel:
\SideBySide{
\begin{tikzpicture}
\draw [fill=black] (0,0) rectangle (1,1);
\end{tikzpicture}
}{a square}{fig:square}{
\begin{tikzpicture}
\draw [fill=black] (0,0) rectangle (1,3);
\end{tikzpicture}
}{a rectangle}{fig:rect}
Antwort2
Verwenden Sie die Option [t]
als
\begin{minipage}[t]{.5\textwidth}
für minipage
s.
Außerdem muss man ein leeres Rechteck vortäuschen und einfügen, damit beide Figuren die gleiche Höhe haben. Ich sehe keine andere Möglichkeit, da sie unabhängig voneinander gezeichnet wurden.
Also habe ich \path (0,0) rectangle (1,-2);
das Quadrat immer nach oben gedrückt.
\documentclass{scrartcl}
\usepackage{tikz}
\begin{document}
\begin{figure}
\centering
\begin{minipage}[t]{.5\textwidth} %%%% [t] here
\centering
\begin{tikzpicture}
\draw[fill=black] (0,0) rectangle (1,1);
\path (0,0) rectangle (1,-2); %% empty rectangle
\end{tikzpicture}
\captionof{figure}{a square}
\label{fig:square}
\end{minipage}%
\begin{minipage}[t]{.5\textwidth} %%%% [t] here
\centering
\begin{tikzpicture}
\draw [fill=black] (0,0) rectangle (1,3);
\end{tikzpicture}
\captionof{figure}{a rectangle}
\label{fig:rect}
\end{minipage}%
\end{figure}
Figures \ref{fig:square} and \ref{fig:rect} demonstrate the difference
between a square and a rectangle.
\end{document}
Antwort3
Der Code:
\documentclass{scrartcl}
\usepackage{tikz}
\newlength\mylen
\newlength\mylena
\newlength\mylenb
\newcommand\SideBySide[6]{%
\settoheight\mylen{#1}%
\settoheight\mylena{#1}%
\settoheight\mylenb{#4}%
\ifdim\mylenb>\mylena\relax%
\setlength\mylen{\mylenb}%
\fi%
\begin{figure}
\begin{minipage}[c][\mylen][t]{.5\textwidth}
\centering#1
\end{minipage}%
\begin{minipage}[c][\mylen][t]{.5\textwidth}
\centering#4
\end{minipage}\par
\begin{minipage}[t]{.5\textwidth}
\caption{#2}
\label{#3}
\end{minipage}%
\begin{minipage}[t]{.5\textwidth}
\caption{#5}
\label{#6}
\end{minipage}%
\end{figure}%
}
\begin{document}
\SideBySide{%
\begin{tikzpicture}
\draw [fill=black] (0,0) rectangle (1,1);
\end{tikzpicture}%
}{a square}{fig:square}{%
\begin{tikzpicture}
\draw [fill=black] (0,0) rectangle (1,3);
\end{tikzpicture}%
}{a rectangle}{fig:rect}
Figures~\ref{fig:square} and~\ref{fig:rect} demonstrate the difference between a square and a rectangle. Figures~\ref{fig:circle} and~\ref{fig:squareb} demonstrate the difference between a square and a circle.
\SideBySide{%
\begin{tikzpicture}
\draw [fill=cyan] (0,0) circle [radius=2cm];
\end{tikzpicture}%
}{a circle}{fig:circle}{%
\begin{tikzpicture}
\draw [fill=orange] (0,0) rectangle (1,1);
\end{tikzpicture}%
}{another sqaure}{fig:squareb}
\end{document}
Erläuterung:
Die Idee besteht darin, zwei Sätze nebeneinander angeordneter Buchstaben zu verwenden minipage
; den ersten für die Abbildungen und den zweiten für die Bildunterschriften; alle minipage
Buchstaben sind oben ausgerichtet.
Ich habe einen Befehl definiert \SideBySide
, der die Höhe beider Bilder misst und die maximale Höhe bestimmt; diese Höhe wird dann als feste Höhe für beide Miniseiten mit den Abbildungen verwendet. Alle Berechnungen werden vom Befehl durchgeführt, sodass kein manueller Eingriff erforderlich ist. Die Syntax:
\SideBySide{<figure1>}{<caption1>}{<label1>}{<figure2>}{<caption2>}{<label2>}