
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 subfigure
ein 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
\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 subcaption
und 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}
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 \adjincludegraphics
innerhalb der figure
Umgebung mit den beiden Bilddateien als Argumente auf und verwenden schließlich wie gewohnt Unterabbildungen.
\firstfactor
enthält den Faktor, der das erste Bild skaliert und \secondfactor
dasselbe für das zweite tut.
Eine einfachere Lösung wäre gewesen, die Höhe des Bildes festzulegen, aber die Umgebung \subcaption
von subfigure
nimmt als Argumentdie Breitedes Unterschwimmers.