这个空间从何而来?

这个空间从何而来?

在小页面中使用彩色文本会导致文本后附加的垂直空间比普通文本少。奇怪的是,这种情况只发生在小页面顶部对齐时。在其他情况下,空间是一致的。

此外,与不在小页面内的文本相比,这两种情况下都有更多的空间。

\documentclass[a4paper]{article}
\usepackage{xcolor}

\renewcommand{\maketitle}[1]{%
  \noindent
  \begin{minipage}[t]{\textwidth}%
    #1
  \end{minipage}
}

\begin{document}
\hrule\relax
\maketitle{\color{blue} Bla.}
\hrule\relax

\vskip\bigskipamount

\hrule\relax
\maketitle{Bla.}
\hrule\relax

\vskip\bigskipamount

\hrule\relax
\noindent {\color{blue} Bla.}
\hrule\relax

\vskip\bigskipamount

\hrule\relax
\noindent Bla.
\hrule\relax
\end{document}

结果:

在此处输入图片描述

答案1

这是缺少 的情况%,在本例中是\end{minipage}\maketitle定义之后。

一般来说,当出现不需要的空间的情况时,第一的寻找的地方总是缺失的%。见行末百分号(%)有什么用?

我应该指出,许多环境通过\ignorespaces在定义末尾使用 来自动解决此问题。因此,对于您的情况,以下定义也有效(请注意没有%):

\renewcommand{\maketitle}[1]{%
  \noindent
  \begin{minipage}[t]{\textwidth}%
    #1
  \end{minipage}
  \ignorespaces
}

这是 MWE,它添加了%

\documentclass[a4paper]{article}
\usepackage{xcolor}

\renewcommand{\maketitle}[1]{%
  \noindent
  \begin{minipage}[t]{\textwidth}%
    #1
  \end{minipage}%
}

\begin{document}
\hrule\relax
\maketitle{\color{blue} Bla.}
\hrule\relax

\vskip\bigskipamount

\hrule\relax
\maketitle{Bla.}
\hrule\relax

\vskip\bigskipamount

\hrule\relax
\noindent {\color{blue} Bla.}
\hrule\relax

\vskip\bigskipamount

\hrule\relax
\noindent Bla.
\hrule\relax
\end{document}

在此处输入图片描述

答案2

接受的答案不包含详细解释为什么垂直空间在这里,为什么彩色版和无色版有所不同,为什么水平空间的消除(使用%)会影响视觉垂直空间。我尝试解释这一点。

因此,\maketitle上面的宏启动水平模式(参见\noindent),此模式的第一个“字母”是\vtop(LaTeX 术语中的 minipage)。然后,OP 的代码中有两个空格。第一个空格位于\vtop(在宏中,Steven 使用 对其进行了更正%)之后,第二个空格位于使用宏的源​​代码行的右括号之后\maketitle。在这两个空格之后,\hrule将读取原语。此原语调用\par,因为它是在水平模式下读取的。所以我们有:

\vtop{Bla.}\space\space\par

\par语做一个\unskip,所以我们有

\vtop{Bla.}\space

并将这些内容组合成段落。第一个“字母”\vtop的宽度等于\hsize,因此这个“字母”填满了整个第一行。空格是断点,并创建了第二个空行(日志文件中报告了 Underfull hbox)。但如果\vtop在水平模式下,后面只有一个空格,那么这个空格将被删除\par,整个段落只有一行,\vtop作为一个“字母”。

总结:如果段落末尾有两个空格,则该段落有两行。如果此处只有一个(或没有)空格,则只创建一行段落。

第二个问题:为什么彩色版本产生的垂直空间与无色版本不同。无色版本产生

\vtop{Bla}

并且它的基线\vtop等于文本 Bla 的基线。但彩色版本会生成

\vtop{\special{color setting}Bla}

并且 的基线\vtop穿过\special。文本 Bla 位于基线下方,它构成\vtop“字母”的深度。当此文本位于基线下方时,两行段落中的第二个空行更接近文本 Bla。架构:

Uncolored version:

    Bla
------------------ baseline of the first line of paragraph

------------------ baseline of the second line of paragraph
---------------------------- hrule

Colored version:

----special------- baseline of the first line of paragraph
    Bla
------------------ baseline of the second line of paragraph
---------------------------- hrule

相关内容