Erzwingen, dass Unterfiguren dieselbe Höhe haben und insgesamt X % der Linienbreite in LaTeX einnehmen

Erzwingen, dass Unterfiguren dieselbe Höhe haben und insgesamt X % der Linienbreite in LaTeX einnehmen

Ich möchte eine Figur erstellen, die aus zwei Bildern unterschiedlicher Größe besteht. Ich möchte sie so nebeneinander platzieren, dass sie die gleiche Höhe haben und insgesamt etwa 90 % der Linienbreite einnehmen.

Es ist einfach, ihnen dieselbe feste Höhe (sagen wir in cm) zu geben, aber wie kann man diese gemeinsame Höhe automatisch anpassen, um die gewünschte Gesamtbreite zu erreichen? Manuelles Ausprobieren ist zeitaufwändig, ungefähr und nicht robust.

Eine Lösung mit oder ohne subfigureein anderes LaTeX-Paket ist OK.

Antwort1

Sie können sie auf die gleiche (mehr oder weniger beliebige) Höhe einfügen und sie dann gemeinsam auf die gewünschte Breite skalieren

Bildbeschreibung hier eingeben

\documentclass{article}

\usepackage{graphicx}% images from mwe package

\begin{document}

\noindent X\dotfill X

\begin{center}
\resizebox{.9\textwidth}{!}{%
\includegraphics[height=3cm]{example-image-a}%
\quad
\includegraphics[height=3cm]{example-image-16x9}%
}
\end{center}

\end{document}

Antwort2

Sie können das Paket verwenden subcaptionund die Berechnung wie von David vorgeschlagen durchführen.

\documentclass{article}

\usepackage{graphicx}% images from mwe package
\usepackage{subcaption}

\newlength{\twosubht}
\newsavebox{\twosubbox}

\begin{document}

\noindent\hrulefill The text width\hrulefill

\begin{center}
\makebox[.9\textwidth]{\hrulefill 90\% of text width\hrulefill}
\end{center}

\begin{figure}[htp]

% preliminary
\sbox\twosubbox{%
  \resizebox{\dimexpr.9\textwidth-1em}{!}{%
    \includegraphics[height=3cm]{example-image-a}%
    \includegraphics[height=3cm]{example-image-16x9}%
  }%
}
\setlength{\twosubht}{\ht\twosubbox}

% typeset

\centering

\subcaptionbox{First\label{f}}{%
  \includegraphics[height=\twosubht]{example-image-a}%
}\quad
\subcaptionbox{Second\label{s}}{%
  \includegraphics[height=\twosubht]{example-image-16x9}%
}

\caption{The caption}

\end{figure}

\end{document}

Bildbeschreibung hier eingeben

Antwort3

\documentclass[a4paper,12pt]{article}
\usepackage{graphicx}
\usepackage{adjustbox}
\usepackage{fp}
\usepackage{subcaption}

\newlength{\totalimgwidth}
\newlength{\imgspacingwidth}

\newlength{\firstimgorigwidth}
\newlength{\firstimgorigheight}
\newlength{\secondimgorigwidth}
\newlength{\secondimgorigheight}
\newlength{\firstimgwidth}
\newlength{\secondimgwidth}

\newcommand{\setsubfloatwidths}[2]{%set the total width you want the images take and the spacing between them
\setlength{\totalimgwidth}{#1}%
\setlength{\imgspacingwidth}{#2}%
\addtolength{\totalimgwidth}{-\imgspacingwidth}%
}


\begin{document}
\setsubfloatwidths{0.9\textwidth}{1ex} %set the total width of figure and spacing inbetween
\begin{figure}
\adjincludegraphics[gstore width=\firstimgorigwidth,gstore height=\firstimgorigheight,gobble]{img1}%
\adjincludegraphics[gstore width=\secondimgorigwidth,gstore height=\secondimgorigheight,gobble]{img2}%
\makeatletter%
\FPdiv\firstaspectratio{\strip@pt\firstimgorigheight}{\strip@pt\firstimgorigwidth}%
\FPdiv\secondaspectratio{\strip@pt\secondimgorigheight}{\strip@pt\secondimgorigwidth}%
\FPeval\firstfactor{\secondaspectratio / (\firstaspectratio + \secondaspectratio)}%
\FPeval\secondfactor{\firstaspectratio / (\firstaspectratio + \secondaspectratio)}%
\makeatother%
\begin{subfigure}{\firstfactor\totalimgwidth}
\includegraphics[width=\textwidth]{img1}
\end{subfigure}
\hspace*{\imgspacingwidth}
\begin{subfigure}{\secondfactor\totalimgwidth}
\includegraphics[width=\textwidth]{img2}
\end{subfigure}
\end{figure}
\end{document}

Sie legen die Gesamtbreite fest, die die Bilder einnehmen sollen, und den Abstand zwischen ihnen mit \setsubfloatswidths, rufen dann \adjincludegraphicsinnerhalb der figureUmgebung mit den beiden Bilddateien als Argumente auf und verwenden schließlich wie gewohnt Unterabbildungen.

\firstfactorenthält den Faktor, der das erste Bild skaliert und \secondfactordasselbe für das zweite tut.

Eine einfachere Lösung wäre gewesen, die Höhe des Bildes festzulegen, aber die Umgebung \subcaptionvon subfigurenimmt als Argumentdie Breitedes Unterschwimmers.

verwandte Informationen