tikz-figures en minipágina: Títulos a la misma altura y alineación superior

tikz-figures en minipágina: Títulos a la misma altura y alineación superior

quiero colocar dostikzimágenes una al lado de la otra, ambas deben ser figuras a las que pueda hacer referencia. Por favor considere el siguiente 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}

que parece

captura de pantalla1

Necesito que ambas imágenes estén alineadas en la parte superior, pero que los títulos también estén a la misma altura:

ingrese la descripción de la imagen aquí

¿Puede decirme cómo se pueden realizar esas alineaciones sin perder la capacidad de hacer referencia a imágenes individuales?

Respuesta1

Aquí hay una solución que utiliza minipagela alineación, baselinela opción de imagen TikZ y el nodo especial 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}

Para usar este código en una macro (como enLa respuesta de Gonzalo Medina.), puedes usar el every pictureestilo:

\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}
}

Sintaxis:

\SideBySide{<figure1>}{<caption1>}{<label1>}{<figure2>}{<caption2>}{<label2>}

Ejemplo:

\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}

Respuesta2

Utilice la opción [t]como

\begin{minipage}[t]{.5\textwidth}

por minipages.

Además, debes falsificar e insertar un rectángulo vacío para que ambas figuras tengan la misma altura. No veo otra opción ya que fueron dibujados de forma independiente.

Entonces solía \path (0,0) rectangle (1,-2);empujar el cuadrado hacia arriba.

ingrese la descripción de la imagen aquí

\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}

Respuesta3

El código:

\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}

ingrese la descripción de la imagen aquí

Explicación:

La idea es utilizar dos conjuntos de s uno al lado del otro minipage; el primero para las figuras y el segundo para los pies de foto; todos minipagelos s están alineados en la parte superior.

Definí un comando \SideBySideque mide las alturas de ambas imágenes y determina la altura máxima; esta altura se utiliza luego como altura fija para ambas minipáginas que contienen las figuras. Todos los cálculos se realizan mediante comando, por lo que no se requiere intervención manual. La sintaxis:

\SideBySide{<figure1>}{<caption1>}{<label1>}{<figure2>}{<caption2>}{<label2>}

información relacionada