如何精确测量图形及其标题的高度?

如何精确测量图形及其标题的高度?

我想创建一个命令来计算图形的最大尺寸,以便图形及其标题不会溢出到边距。

为此,我将标题保存在一个框中 ( \boxcaption),然后测量标题的高度 ( \ht\boxcaption) 和深度 ( \dp\boxcaption)。我推断出图形的最大高度应该是:\dimexpr \textheight -\abovecaptionskip -\ht\boxcaption -\dp\boxcaption

但是,图片和标题的上方和下方仍然留有一小块空白。你知道这个空白是从哪里来的吗?

在此处输入图片描述

以下是 MWE:

\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{graphicx, mwe, lipsum}
\newsavebox{\boxcaption}
\newcommand{\maxsizefigure}[2]{% #1 : image, #2 : caption
\begin{figure}[p]%
    \sbox{\boxcaption}{%
        \begin{minipage}{\textwidth}%
            #2%
        \end{minipage}%
    }%
    \centering%
    \includegraphics[width=\linewidth, height=\dimexpr \textheight -\abovecaptionskip -\ht\boxcaption -\dp\boxcaption, keepaspectratio]{#1}%
    #2%
\end{figure}%
}

\begin{document}
\maxsizefigure{example-image-9x16.png}{\caption{\lipsum[1]}}
\end{document}

答案1

更新在后续问题之后。

有三个步骤:将标题封装在框中\boxcaption,使用的总高度计算图形可用的高度\boxcaption,最后排版图形和标题。

与发布的问题不同,用于测量标题的框被重复使用,并且以这种方式考虑了该环境添加的填充。

该代码已使用各种字体大小进行了测试。

A

b

\documentclass[10pt]{article}

\usepackage[showframe]{geometry}
\usepackage{graphicx, mwe, lipsum}

\newsavebox{\boxcaption}
\newcommand{\maxsizefigure}[2]{% #1 : image, #2 : caption
    \begin{figure}[p]%   
        \sbox{\boxcaption}{%
            \begin{minipage}{\linewidth}%
                #2%
                \addtocounter{figure}{-1}% added <<<<
            \end{minipage}%
        }%
        \centering%
        \includegraphics[width=\linewidth, height=\dimexpr \textheight -\ht\boxcaption -\dp\boxcaption, keepaspectratio]{#1}\par
        \usebox{\boxcaption}% insert the complete caption
    \end{figure}%
}

\begin{document}    

\maxsizefigure{example-image-9x16.png}{\caption{\fontsize{8}{10}\selectfont\lipsum[1] \textbf{Size= 8pt}}}

\maxsizefigure{example-image-9x16.png}{\caption{\fontsize{12}{14}\selectfont\lipsum[1] \textbf{Size= 12pt} }}

\maxsizefigure{example-image-9x16.png}{\caption{\fontsize{14}{17}\selectfont\lipsum[1] \textbf{Size= 14pt}}}

\maxsizefigure{example-image-9x16.png}{\caption{\fontsize{16}{19}\selectfont\lipsum[1] \textbf{Size= 16pt}}}

\end{document}

相关内容