图形高度 + 标题文本高度

图形高度 + 标题文本高度

我有一张带有 3 行标题的图表。我想将图表插入得尽可能高。如果我使用

\includegraphics[height=\textheight]{file}

图形与文本块高度相同,标题位于脚注位置。是否可以设置图形高度,以便标题与文本块底部对齐?

答案1

这是有可能的,但这取决于很多因素,因此没有单一的公式可以应用。这取决于

  • 标题使用的格式
    • 默认标题格式\abovecaptionskip在标题上方和\belowcaptionskip下方添加
    • 如果你的课程使用其他约定或使用一些浮点格式包,可能会添加不同的空格
    • 标题中使用的字体将具有一定的\baselineskip
  • 图形后面会有一个段落结尾,它将添加\parskip
  • ...以及我忘记的任何内容

但假设上述情况确实如此,那么一些计算应该可以得到正确的值:

\usepackage{calc}
\newlength\graphht
\newcommand\calculategraphicstargetheight[1]{%
     \setlength\graphht{\textheight 
                       -\parskip
                       -\abovecaptionskip -\belowcaptionskip
                       -(12pt * #1) % assuming baselineskip of 12pt in caption
                       }}

然后在包含图形时使用此值。为了灵活起见,我将其放入命令中,以便您可以改变标题行的数量。

注意:如果您希望标题文本的基数与文本块对齐,则应该将其设置\belowcaptionskip为零(在这种情况下,我们实际上不需要在上面减去它)或者在标题之后明确地备份该数量,以防您想在其他情况下使用它。

此外,您还必须\vspace{-\prevdepth}在标题下方添加,因为 LaTeX 将浮动变成一个框,其底线永远不会是最后一行(即本例中的标题行)的基线,因此如果不进行此校正,任何突出到基线以下的字符都会使整个材料向上移动。这不能包含在计算中,因为它取决于最后一行标题中的材料。它只能添加到标题的定义中,例如\@makecaption在标准 LaTeX 中。

下面是一个基于定义的示例book.cls

\makeatletter
\long\def\@makecaption#1#2{%
  \vskip\abovecaptionskip
  \sbox\@tempboxa{#1: #2}%
  \ifdim \wd\@tempboxa >\hsize
    #1: #2\par
  \else
    \global \@minipagefalse
    \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
  \fi
  \vskip-\prevdepth           % add  this line
 % \vskip\belowcaptionskip    % drop this line
 }
 \makeatother

答案2

您必须使用以下表达式来表示图像高度:

\includegraphics[height=\dimexpr
  \textheight-3\baselineskip-\parskip-.2em-
  \abovecaptionskip-\belowcaptionskip\relax]{image}

它从\textheight3 行文本中删除 = 3\baselineskip、段落跳过 = \parskip、“大致”最后一行的深度 = .2em*,以及标题上方和下方的跳过 =\abovecaptionskip\belowcaptionskip

这可能因文档类别而异。例如,这是article(和其他标准文档类)定义\@makecaption(由\caption排版实际标题执行):

\long\def\@makecaption#1#2{%
  \vskip\abovecaptionskip
  \sbox\@tempboxa{#1: #2}%
  \ifdim \wd\@tempboxa >\hsize
    #1: #2\par
  \else
    \global \@minipagefalse
    \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
  \fi
  \vskip\belowcaptionskip}

注意(垂直)跳过,如\abovecaptionskip\belowcaptionskip\par

为了完整起见,这里有一个最小的例子,将图像换成了矩形框(或\rule):

\documentclass{article}
\begin{document}
\begin{figure}
  \rule{\textwidth}{\dimexpr\textheight-3\baselineskip-\parskip-.2em-
    \abovecaptionskip-\belowcaptionskip}
  \caption{Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus
    elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida
    mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna.}
\end{figure}
\end{document}​

*最后一段的实际深度取决于标题内容。不过,在10pt字体处,深度略低于2pt,而1em约为10pt.2em大致相同。

相关内容