我想创建一个命令来计算图形的最大尺寸,以便图形及其标题不会溢出到边距。
为此,我将标题保存在一个框中 ( \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
,最后排版图形和标题。
与发布的问题不同,用于测量标题的框被重复使用,并且以这种方式考虑了该环境添加的填充。
该代码已使用各种字体大小进行了测试。
\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}