并排图形对齐

并排图形对齐

我还没有在 Stack Exchange 上看到有人直接问或回答的一个问题是,如何在 LaTex 中并排放置两个图形,以便

  1. 图形是居中对齐的(特别是如果图形有白色背景,我认为居中对齐看起来最好);但是
  2. 两幅图的标题顶部对齐。

如果这些图形不相关,或者由于某种原因,您不想使用子图,那么据我所知,没有很好的方法可以做到这一点。

答案1

目前尚不清楚,您的问题是什么,以及为什么使用如此复杂的代码......如果预期结果如下:

在此处输入图片描述

那么您的代码可以更简单,如下面的 MWE 所示:

\documentclass{article}
\usepackage{array}
\usepackage[export]{adjustbox}% for move images baseline to vertical center of image

\begin{document}
    \begin{figure}
    \centering
\begin{tabular*}{\linewidth}{*{2}{>{\centering\arraybackslash}p{\dimexpr0.5\linewidth-2\tabcolsep}}}
\includegraphics[width=\linewidth,valign=c]{example-image-duck}
    &   \includegraphics[width=0.5\linewidth,valign=c]{example-image-duck}   \\
\caption{The caption.}  \label{label1}
    &   \caption{The caption.}  \label{label2}
    \end{tabular*}
\end{figure} 
\end{document}

答案2

我建议用这个包来做floatrow

\documentclass[11pt]{article}
\usepackage{ebgaramond}
\usepackage{array}
\usepackage{caption}
\usepackage{floatrow}
\usepackage[export]{adjustbox}% for move images baseline to vertical center of image

\begin{document}

    \begin{figure}
    \centering
        \captionsetup{textfont = it, labelfont=sc, labelsep=endash}
        \floatsetup{heightadjust = object, valign = c}
        \begin{floatrow}[2]\ffigbox[1.33\FBwidth]{\caption{The Virgin Spanking the Christ Child before Three Witnesses: André Breton, Paul Éluard, and the Painter}\label{MaxErnst36}}
        {\includegraphics[scale=0.5]{ernst_vierge}}
        \ffigbox[1.33\FBwidth]{\caption{Euclid}\label{MaxErnst45}}{ \includegraphics{euclid} }
        \end{floatrow}
    \end{figure}

\end{document} 

在此处输入图片描述

答案3

我的解决方案是使用以下方法

\begin{figure}
\newlength{\miniPageWidth}
\setlength{\miniPageWidth}{0.45\textwidth}   
\newcommand{\graphicOne}{example-image-a} 
\newcommand{\graphicTwo}{example-image-b} 
\newlength{\hOne}
\newlength{\hTwo}
\settoheight{\hOne}{\includegraphics[width=\miniPageWidth]{\graphicOne}}
\settoheight{\hTwo}{\includegraphics[width=\miniPageWidth]{\graphicTwo}}
\newlength{\padOne}
\newlength{\padTwo} 
\setlength{\padOne}{0pt}
\setlength{\padTwo}{0pt}
\ifthenelse{\hOne>\hTwo}{\setlength{\padTwo}{(\hOne-\hTwo)/2}}{
    \setlength{\padOne}{(\hTwo-\hOne)/2}}
\centering 
    \begin{minipage}[t]{\miniPageWidth}
        \centering
        \vskip\padOne
        \includegraphics[width=\textwidth]{\graphicOne}
        \vskip\padOne
        \caption{The caption.}    
        \label{label1}
    \end{minipage}
\hfill 
    \begin{minipage}[t]{\miniPageWidth} 
        \centering
        \vspace\padTwo
        \includegraphics[width=\textwidth]{\graphicTwo}
        \vskip\padTwo
        \caption{The caption.}        
        \label{label2}
    \end{minipage}
\end{figure} 

为了显示目的,我将第二个图形的宽度设置为 0.5\miniPageWidth,并更改了标题以生成以下示例图形。

输出

上面的代码没有反映这些更改,因为我希望上面的代码可用。要生成上面的图形,请进行以下调整:

\settoheight{\hTwo}{\includegraphics[width=.5\miniPageWidth]{\graphicTwo}}

\includegraphics[width=.5\textwidth]{\graphicTwo}

 \caption{Example caption one.}    

 \caption{This caption has \newline multiple lines.}     

我不确定这是否是最合适的方法。这个问题有一些老问题,有些相关,但我不想让这个解决方案被埋在这些帖子的底部。希望有人能从中得到一些帮助。

相关内容