小頁面中的 tikz-figures:標題處於相同高度和頂部對齊

小頁面中的 tikz-figures:標題處於相同高度和頂部對齊

我想放置兩個蒂克茲相鄰的圖片,應該都是我可以參考的圖。請考慮以下 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}

看起來像

截圖1

我需要兩張圖片在頂部對齊,但標題也必須在同一高度:

在此輸入影像描述

您能否告訴我如何在不失去引用單一圖片的能力的情況下實現這些對齊?

答案1

這是一個使用minipage對齊、baselineTikZ 圖片選項和特殊節點的解決方案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}

要在巨集中使用此程式碼(如貢薩洛·梅迪納的回答),您可以使用以下every picture樣式:

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

句法:

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

例子:

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

答案2

使用該選項[t]作為

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

對於minipages。

另外,您必須偽造並插入一個空矩形以使兩個圖形具有相同的高度。我沒有看到其他選擇,因為它們是以獨立的方式繪製的。

所以我常常\path (0,0) rectangle (1,-2);把正方形推高。

在此輸入影像描述

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

答案3

代碼:

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

在此輸入影像描述

解釋:

這個想法是使用兩組並排的minipage;第一個用於圖表,第二個用於標題;所有minipages 均頂部對齊。

我定義了一個命令\SideBySide來測量兩個圖像的高度並確定最大高度;然後將該高度用作包含圖形的兩個小型頁面的固定高度。所有計算均由命令完成,無需人工幹預。文法:

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

相關內容