1

Let's say I have a bunch of images, (two in this MWE)

\begin{figure}[h]
\begin{subfigure}{\linewidth}
    \includegraphics[width=.95\linewidth]{whacknot}
    \caption{Fritz-Qualdor count of greezable whacknotters}
\end{subfigure}
\begin{subfigure}{\linewidth}
    \includegraphics[width=.95\linewidth]{qualprift}
    \caption{Corrected null-count of pre-groused qualprifters}
\end{subfigure}
\caption{Counting methods used in theta-analysis}
\end{figure}

Sure enough, I now have two images underneath each other of the same size. However, what I actually want is to have two images of exactly the same scale, but both at most .95\linewidth (the images are generated programatically, but due to overzealous cropping, they all have a slightly different size). I could of course manually twiddle with a [scale=something] on all the figures, but that Is there a way to do this automatically in LaTeX?

3

The adjustbox environment has a max width option, so you could place your side-by-side subfigures inside an adjustbox. This should preserve their original scales, but scale down both together if necessary. Edit: However, this would scale the subcaption as well. I'm not sure how to prevent this, but you can provide a phantomsubcaption and label in order to refer to the subfigures in the main figure caption.

\documentclass{article}
\usepackage{adjustbox,graphicx,subcaption}
\captionsetup{subrefformat=parens}

\providecommand{\samelinefigs}[4]{%
\begin{adjustbox}{max width=0.95\linewidth}
{\includegraphics{#1}\phantomsubcaption\label{#2}}\quad
{\includegraphics{#3}\phantomsubcaption\label{#4}}
\end{adjustbox}
}

\begin{document}
Two smaller figures, unscaled:
\begin{figure}[h]
\centering
\samelinefigs{example-grid-100x100pt}{fig:grid}{example-image-4x3}{fig:4by3}
\caption{Caption for \subref{fig:grid} grid and \subref{fig:4by3} generic image.}
\end{figure}

Two larger figures, both scaled:
\begin{figure}[h]
\centering
\samelinefigs{example-image-16x10}{fig:16by10}{example-image-16x9}{fig:16by9}
\caption{Caption}
\end{figure}

Original size of $16\times9$ figure:

\includegraphics{example-image-16x9}

\end{document}

enter image description here

  • this will badly scale the subcaption font – wun May 24 at 21:37
  • 1
    @wun Indeed. I've proposed a workaround in my edited answer. – erik May 24 at 22:09
1

One can modify the question Print the "scale factor" on each figure as a watermark to save the previous scaling factor for usage in the next image:

\documentclass{article}

\usepackage{subcaption}
\usepackage{graphicx}

\makeatletter
\let\ORG@Gscale@box\Gscale@box
\long\def\Gscale@box#1{%
  \xdef\thelastscalefactor{#1}%
  \ORG@Gscale@box{#1}}
\makeatother

\newlength{\imagea}
\newlength{\imageb}
\newbox\vhbox

\begin{document}

% Enter the image names here
\newcommand{\imgA}{example-image-16x10}
\newcommand{\imgB}{example-image-9x16}


\settowidth{\imagea}{\includegraphics{\imgA}}
\settowidth{\imageb}{\includegraphics{\imgB}}
\begin{figure}[h]
\ifdim\imagea>\imageb   
    \begin{subfigure}{\linewidth}
        \includegraphics[width=.95\linewidth]{\imgA}
        \caption{Fritz-Qualdor count of greezable whacknotters}
    \end{subfigure}
    \begin{subfigure}{\linewidth}
        \includegraphics[scale=\thelastscalefactor]{\imgB}
        \caption{Corrected null-count of pre-groused qualprifters}
    \end{subfigure}
\else
    \setbox\vhbox\vbox{\includegraphics[width=.95\linewidth]{\imgB}}
    \begin{subfigure}{\linewidth}
    \includegraphics[scale=\thelastscalefactor]{\imgA}
    \caption{Fritz-Qualdor count of greezable whacknotters}
    \end{subfigure}
    \begin{subfigure}{\linewidth}
    \includegraphics[width=.95\linewidth]{\imgB}
    \caption{Corrected null-count of pre-groused qualprifters}
    \end{subfigure}
\fi
\caption{Counting methods used in theta-analysis}
\end{figure}

\end{document}
  • Not bad! Now to figure out how to extend this to a larger number of images... – Sanchises May 25 at 9:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.