![minipage 中的 tikz-figures:标题高度相同且顶部对齐](https://linux22.com/image/286301/minipage%20%E4%B8%AD%E7%9A%84%20tikz-figures%EF%BC%9A%E6%A0%87%E9%A2%98%E9%AB%98%E5%BA%A6%E7%9B%B8%E5%90%8C%E4%B8%94%E9%A1%B6%E9%83%A8%E5%AF%B9%E9%BD%90.png)
我想放置两个蒂克兹图片并排,它们都应该是我可以参考的图。请考虑以下 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}
要在宏中使用此代码(例如Gonzalo Medina 的回答),你可以使用以下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
s。
另外,您必须伪造并插入一个空矩形,以使两个图形具有相同的高度。我没有看到其他选择,因为它们是以独立方式绘制的。
所以我习惯\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>}