如何获取小页面的高度来设置另一个小页面的高度?

如何获取小页面的高度来设置另一个小页面的高度?

在下面的例子中,我如何设置第二个小页面的高度以使其与第一个小页面的高度相匹配,以便图像“C”垂直均匀分布以匹配图像“A”和“B”的合成高度?

请注意:

1)小页面的宽度不同是一个重要的限制,并且

2)我正在寻找一个能够真正实现问题所要求的解决方案;我知道可以使用或其他方法实现相同的行为tabular,但我真的很想学习如何确定浮点数大小并重新使用它们来确定其他浮点数的大小。

谢谢,豪尔赫。

例子:

\documentclass{article}
\usepackage{graphicx}
\usepackage{subfig}

\begin{document}
\begin{figure*}[!t]
    \fbox{\noindent
    \begin{minipage}[b]{0.6\linewidth}
        \subfloat[]{\includegraphics[width=1.0\linewidth]{example-image-a}}
        \vfill
        \subfloat[]{\includegraphics[width=1.0\linewidth]{example-image-b}}
    \end{minipage}}
    \hfill
    \fbox{\noindent
    \begin{minipage}[b]{0.3\linewidth}
        \subfloat[]{\includegraphics[width=1.0\linewidth]{example-image-c}}
        \vfill
        \subfloat[]{\includegraphics[width=1.0\linewidth]{example-image-c}}
        \vfill
        \subfloat[]{\includegraphics[width=1.0\linewidth]{example-image-c}}
    \end{minipage}}
\end{figure*}
\end{document}

输出: 在此处输入图片描述

答案1

测量左侧框并强制右侧小页面具有相同的高度。

\documentclass{article}
\usepackage{graphicx}
\usepackage{subfig}

\newsavebox{\dontpanicbox}
\newlength{\dontpanicht}

\begin{document}

\begin{figure}[!htp]
\centering

\sbox{\dontpanicbox}{%
  \begin{minipage}[b]{0.6\linewidth}
  \subfloat[]{\includegraphics[width=1.0\linewidth]{example-image-a}}

  \subfloat[]{\includegraphics[width=1.0\linewidth]{example-image-b}}
  \end{minipage}%
}

\setlength{\dontpanicht}{\ht\dontpanicbox}

\usebox{\dontpanicbox}\hfill
\begin{minipage}[b][\dontpanicht][s]{0.3\linewidth}
  \subfloat[]{\includegraphics[width=1.0\linewidth]{example-image-c}}

  \vfill

  \subfloat[]{\includegraphics[width=1.0\linewidth]{example-image-c}}

  \vfill

  \subfloat[]{\includegraphics[width=1.0\linewidth]{example-image-c}}
\end{minipage}

\end{figure}

\end{document}

在此处输入图片描述

用起来“简单多了” \valign

答案2

像这样?

在此处输入图片描述

minipage建议使用tabular*环境:

\documentclass[twocolumn]{article}
\usepackage{graphicx}
\usepackage{subfig}
\usepackage{array, hhline}

%---------------- show page layout. don't use in a real document!
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%

\begin{document}
    \begin{figure*}
    \centering
\setkeys{Gin}{width=\linewidth}
\begin{tabular*}{\linewidth}{|m{\dimexpr0.6\linewidth-2\tabcolsep-1.5\arrayrulewidth}|
                              p{\dimexpr0.1\linewidth-2\tabcolsep}
                             |m{\dimexpr0.3\linewidth-2\tabcolsep-1.5\arrayrulewidth}|
                             }
    \hhline{|-|~|-|}
\subfloat[]{\includegraphics{example-image-a}}

\bigskip
\subfloat[]{\includegraphics{example-image-b}}
\medskip
&&
\subfloat[]{\includegraphics{example-image-duck}}

\vspace{4ex} % <-- determined experimentaly, depends of images heights
\subfloat[]{\includegraphics{example-image-duck}}

\vspace{4ex} % <-- determined experimentaly, depends of images heights
\subfloat[]{\includegraphics{example-image-duck}}   \\
    \hhline{|-|~|-|}
    \end{tabular*}
\end{figure*}
\end{document}

答案3

这使用保存箱来测量高度。也可以使用\settoheight,但我怀疑它在内部使用了保存箱。

顺便说一句,[s] 选项代表拉伸。当然,\vfill使用 [t] 可以获得相同的结果。[b] 或 [c]。另一方面,\vfill第一个小页面中的 不执行任何操作。

\documentclass{article}
\usepackage{graphicx}
\usepackage{subfig}

\begin{document}
\begin{figure*}[!t]
  \sbox0{\begin{minipage}[b]{0.6\linewidth}% measure height
        \subfloat[]{\includegraphics[width=1.0\linewidth]{example-image-a}}
        \vfill
        \subfloat[]{\includegraphics[width=1.0\linewidth]{example-image-b}}
    \end{minipage}}%
    \fbox{\usebox0}%
    \hfill
    \fbox{\begin{minipage}[b][\ht0][s]{0.3\linewidth}
        \subfloat[]{\includegraphics[width=1.0\linewidth]{example-image-c}}
        \vfill
        \subfloat[]{\includegraphics[width=1.0\linewidth]{example-image-c}}
        \vfill
        \subfloat[]{\includegraphics[width=1.0\linewidth]{example-image-c}}
    \end{minipage}}
\end{figure*}
\end{document}

演示

相关内容