Zwei Bilder neben einem großen, damit es in die Textbreite passt

Zwei Bilder neben einem großen, damit es in die Textbreite passt

Ich möchte zwei Bilder neben einem anderen großen Bild und jedes Bild hat eine andere Größe (wie im Beispiel unten).

Bildbeschreibung hier eingeben

Ich möchte, dass alle Bilder ihr Seitenverhältnis beibehalten und die Bilder rechts die gleiche Höhe haben. Außerdem sollten alle 3 Bilder so breit sein wie das \textwidth.

Ich habe es mit subfigureund versucht \resizebox, aber ich konnte die richtigen Höhen nicht abhängig von der Höhe des linken Bildes einstellen. Der manuelle Versuch, alle Größen anzupassen, ist viel zu mühsam. Gibt es eine einfache Möglichkeit, das zu tun?

Edit: Hier sind weitere Informationen zu meinem Problem. Mein aktueller Code sieht so aus. Ich habe einfach die Größe der Bilder angepasst, bis sie passen (Versuch endet mit Fehler). Ein sehr langwieriger Prozess.

Die Bilder haben einzelne Beschriftungen mit (a), (b) und (c) und das ganze Bild hat eine weitere Beschriftung.

Es wäre schön, die Größe der rechten Bilder so zu steuern, dass sie nicht größer sind als die linken und dass alle drei Bilder die Zeilenbreite nicht überschreiten.

\begin{figure}[H]
\centering
\begin{subfigure}[p]{.45\textwidth}
    \includegraphics[height=\textheight]{MMC.eps}
    \caption{MMC Schaltbild, \cite{Eremia.2016}} \label{fig:ch2_MMC
\end{subfigure}
\qquad
\begin{subfigure}[p]{.45\textwidth}
    \centering
    \includegraphics[height=0.39\textheight]{Halfbridge.eps}
    \caption{Halfbridge, \cite{Shah.17.07.201621.07.2016}} \label{fig:ch2_Halfbridge}

    \vspace{2ex}

    \includegraphics[height=0.39\textheight]{Fullbridge.eps}
    \caption{Fullbridge, \cite{Shah.17.07.201621.07.2016}} \label{fig:ch2_Fullfbridge}
\end{subfigure}
\caption{MMC and Submodule}\end{figure}

Antwort1

Bezeichnen wir mit

  • AUndBdie Breite und Höhe des Bildes links,
  • CUndDdie Breite und Höhe des Bildes oben rechts,
  • tUndFdie Breite und Höhe des Bildes unten rechts,
  • gegendie Lücke zwischen dem Bild rechts,
  • mdie gewünschte Gesamtbreite (etwas weniger als \textwidth),

Wir können bezeichnen mitX,jUndzdie benötigten Skalierungsfaktoren für die drei Bilder (links, oben rechts und unten rechts). Dann ergibt die Lösung des linearen Systems

X= (2​fw+ev)/(Sei+ 2​af)
j= (bfw-afv)/(bde+ 2​adf)
z= (bw-ein V)/(Sei+ 2​af)

Die offensichtliche Einschränkung besteht darin, dass der zweite und dritte Skalierungsfaktor positiv sind.

Hier ist eine Implementierung.

\documentclass{article}
\usepackage{graphicx,xfp}

\begin{document}

\begin{figure}

\sbox0{\includegraphics{example-image-a}}
\sbox2{\includegraphics{example-image-1x1}}
\sbox4{\includegraphics{example-image-b}}

\edef\Da{\fpeval{\wd0}}\edef\Db{\fpeval{\ht0}}
\edef\Dc{\fpeval{\wd2}}\edef\Dd{\fpeval{\ht2}}
\edef\De{\fpeval{\wd4}}\edef\Df{\fpeval{\ht4}}

\edef\Dv{\fpeval{8ex}}
\edef\Dw{\fpeval{\textwidth-3em}}

\edef\Dx{\fpeval{(2*\Df*\Dw + \De*\Dv)/(\Db*\De + 2*\Da*\Df)}}
\edef\Dy{\fpeval{(\Db*\Df*\Dw - \Da*\Df*\Dv)/(\Db*\Dd*\De + 2*\Da*\Dd*\Df)}}
\edef\Dz{\fpeval{(\Db*\Dw - \Da*\Dv)/(\Db*\De + 2*\Da*\Df)}}

\sbox{0}{%
  \begin{minipage}[b]{\fpeval{\Da*\Dx}pt}
  \vspace{0pt}
  \scalebox{\Dx}{\box0}
  \caption{First pic}
  \end{minipage}%
}\usebox{0}\hfill
\begin{minipage}[b][\ht0][s]{\fpeval{\Dw-\Da*\Dx}pt}
\centering
\vspace{0pt}
\scalebox{\Dy}{\box2}
\caption{Second pic}

\vfill

\scalebox{\Dz}{\box4}
\caption{Third pic}
\end{minipage}

\end{figure}

\end{document}

Bildbeschreibung hier eingeben

Wenn Sie Unterabbildungen wünschen, ersetzen Sie diese minipagedurch subfigure.

\documentclass{article}
\usepackage{graphicx,xfp,subcaption}

\begin{document}

\begin{figure}

\sbox0{\includegraphics{example-image-a}}
\sbox2{\includegraphics{example-image-1x1}}
\sbox4{\includegraphics{example-image-b}}

\edef\Da{\fpeval{\wd0}}\edef\Db{\fpeval{\ht0}}
\edef\Dc{\fpeval{\wd2}}\edef\Dd{\fpeval{\ht2}}
\edef\De{\fpeval{\wd4}}\edef\Df{\fpeval{\ht4}}

\edef\Dv{\fpeval{8ex}}
\edef\Dw{\fpeval{\textwidth-3em}}

\edef\Dx{\fpeval{(2*\Df*\Dw + \De*\Dv)/(\Db*\De + 2*\Da*\Df)}}
\edef\Dy{\fpeval{(\Db*\Df*\Dw - \Da*\Df*\Dv)/(\Db*\Dd*\De + 2*\Da*\Dd*\Df)}}
\edef\Dz{\fpeval{(\Db*\Dw - \Da*\Dv)/(\Db*\De + 2*\Da*\Df)}}

\sbox{0}{%
  \begin{subfigure}[b]{\fpeval{\Da*\Dx}pt}
  \vspace{0pt}
  \scalebox{\Dx}{\box0}
  \caption{First pic}
  \end{subfigure}%
}\usebox{0}\hfill
\begin{subfigure}[b][\ht0][s]{\fpeval{\Dw-\Da*\Dx}pt}
\centering
\vspace{0pt}
\scalebox{\Dy}{\box2}
\caption{Second pic}

\vfill

\scalebox{\Dz}{\box4}
\caption{Third pic}
\end{subfigure}

\caption{Global caption}

\end{figure}

\end{document}

Bildbeschreibung hier eingeben

Antwort2

eine @egreg-Lösung--https://tex.stackexchange.com/a/87976/197451

Sie können eine Minipage-Umgebung verwenden und \sboxdie Höhe der größten Box messen.

subfigBeachten Sie, dass ich und nicht das veraltete verwendet habe subfigure. subcaptionKann auch eine Wahl sein und sollte es auch, wenn Sie verwenden hyperref.

Die demoOption graphicxbesteht lediglich darin, einige simulierte Bilder zu erstellen. Ich habe ihnen eine Höhe zugewiesen, um das Beispiel zu zeigen.

Bildbeschreibung hier eingeben

\documentclass{article}
\usepackage{subfig}
\documentclass{article}
\usepackage{subfig}
\usepackage[demo]{graphicx}

\newsavebox{\measurebox}

\begin{document}

\begin{figure}
\centering
\sbox{\measurebox}{%
  \begin{minipage}[b]{.33\textwidth}
  \subfloat
    []
    {\label{fig:figA}\includegraphics[width=\textwidth,height=5cm]{figA}}
  \end{minipage}}
\usebox{\measurebox}\qquad
\begin{minipage}[b][\ht\measurebox][s]{.33\textwidth}
\centering
\subfloat
  []
  {\label{fig:figB}\includegraphics[width=\textwidth,height=2cm]{figB}}

\vfill

\subfloat
  []
  {\label{fig:figC}\includegraphics[width=\textwidth,height=2cm]{figC}}
\end{minipage}
\caption{my caption. (a) is .... (b) is .... (c) is ....}
\label{fig:Test}
\end{figure}
\end{document}

verwandte Informationen