
Я хочу разместить дватикзкартинки рядом друг с другом, обе они должны быть цифрами, на которые я могу ссылаться. Пожалуйста, рассмотрите следующий 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
Вот решение с использованием minipage
выравнивания, baseline
опции изображения TikZ и специального узла 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}
для minipage
с.
Также, вам придется подделать и вставить пустой прямоугольник, чтобы обе фигуры были одинаковой высоты. Я не вижу другого варианта, так как они были нарисованы независимым образом.
Поэтому я обычно \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
элементов: первый для рисунков, второй — для подписей; все minipage
элементы выровнены по верхнему краю.
Я определил команду \SideBySide
, которая измеряет высоту обоих изображений и определяет максимальную высоту; эта высота затем используется как фиксированная высота для обеих мини-страниц, содержащих рисунки. Все вычисления производятся командой, поэтому ручное вмешательство не требуется. Синтаксис:
\SideBySide{<figure1>}{<caption1>}{<label1>}{<figure2>}{<caption2>}{<label2>}