您肯定知道 LaTeX 默认不会将图题居中。大多数情况下,第一行居中,但后面几行的行为与普通文本相同。使用该caption
软件包可以轻松实现所有行居中,但这不是默认行为。我一直对此感到疑惑。
一般情况下,使用 LaTeX 的所有默认选项和参数(以及基本类,例如report
或book
)可确保文档至少在排版上正确且设计得相当好。可以说,您总是可以改进很多东西,但默认设置确实没问题(我想说),即使排版知识很少也可以使用。除了对于这个标题居中功能(这可以说是默认设置的 LaTeX 文档排版中最令人震惊的功能)。它看起来太不对劲了。
LaTeX 开发人员为什么会做出这样的选择?将标题置于中央真的是一种不好的做法吗?LaTeX 的行为是否“本该如此”?或者这只是一个错误或非自愿的副作用?
答案1
如果标题比文本宽度短,标准 LaTeX 类会将标题居中。以下是来自article.cls
(或classes.dtx
分别)
\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}
我无法告诉你为什么会出现这种情况。
答案2
这是 LaTeX 的创建者 Leslie Lamport 的设计选择,但也可以做出其他决定,例如您的偏好。Robert Bringhurst 在他的印刷风格的要素遵循默认的 LaTeX 样式,除非他使用侧字幕,而且很少有人会不同意 Bringhurst 的观点。
不使用任何包来使多行标题居中:
\caption{\protect\centering Your multiline text}
答案3
这个问题很难理解。report
和book
类做居中标题;如果标题长度小于\hsize
,则标题居中,否则设置为整个行宽上的段落。
作为一个通用类别,这是一个相当自然的设置;如果一个人更喜欢用较窄的段落作为标题,那么长度就是一个风格决定。
\documentclass{book}
\usepackage{showframe}
\begin{document}
\expandafter\def\csname @captype\endcsname{figure}
\caption{This is a short caption}
\caption{This is a longer caption, still on one line}
\caption{This is a much longer caption, which spreads
over two lines; the caption is justified over the whole
line width, but a different setting is not difficult to
obtain.}
\makeatletter
\long\def\@makecaption#1#2{%
\vskip\abovecaptionskip
\sbox\@tempboxa{#1: #2}%
\ifdim \wd\@tempboxa >\hsize
\makebox[\hsize][c]{%
\begin{minipage}[t]{.8\hsize}
#1: #2\par
\end{minipage}%
}%
\else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\vskip\belowcaptionskip}
\makeatother
\caption{This is a much longer caption, which spreads
over two lines; the caption is justified over the whole
line width, but a different setting is not difficult to
obtain.}
\makeatletter
\long\def\@makecaption#1#2{%
\vskip\abovecaptionskip
\sbox\@tempboxa{#1: #2}%
\ifdim \wd\@tempboxa >\hsize
\makebox[\hsize][c]{%
\begin{minipage}[t]{.8\hsize}
\centering
#1: #2\par
\end{minipage}%
}%
\else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
\fi
\vskip\belowcaptionskip}
\makeatother
\caption{This is a much longer caption, which spreads
over two lines; the caption is justified over the whole
line width, but a different setting is not difficult to
obtain. Let's add some words to make this longer and
uglier when centering each line.}
\end{document}
caption
如您所见,重新定义非常简单。当然,应该优先考虑诸如此类的高级软件包。