为什么删除这个空行会增加间距?

为什么删除这个空行会增加间距?
\documentclass{article}
\usepackage{tcolorbox}
\usepackage{tabularray}
\raggedright
\newcommand\secondline{
  \begin{tcolorbox}
    Line 2
  \end{tcolorbox}
}
\begin{document}
\begin{tblr}{colspec=X}
  Line 1
\end{tblr}

\secondline
\end{document}

当我输入上述代码时, Overleaf 会生成此代码1。但是,如果我删除空行,Overleaf 会生成此代码2,从而增加表格和框之间的间距。为什么会这样?还有其他情况会发生这种情况吗?

答案1

你问了“为什么”。我试着解释一下。

LaTeX 宏tblr打开水平模式而不缩进(执行\noindent),并在此处放置一个具有给定内容且宽度等于 的框\hsize。它不会关闭打开的水平模式。然后是\end{tblr}后面的空格,然后是空行,运行\par。此 TeX 原始命令删除最后一个空格(即 之后行尾的空格\end{tblr}),剩余材料适合\hsize宽度并创建单行段落。宏中的空格( 之后\secondline{)在垂直模式下处理,不执行任何操作。

第二种情况(没有空行):水平模式下框后有两个空格tblr。第一个来自 的末尾,\end{tblr}第二个来自我们的宏。然后宏在框创建之前tcolorbox运行。所以你有“空格 空格”。基元只删除单个空格,即框后留一个空格。段落创建时有两行,因为框加上后面的空格不适合。\par\par\partblrtblr\hsize

从 TeX 原始角度来看,您的第一个案例可以通过以下方式模拟

\noindent\hbox to\hsize{Line 1\hss}\space\par \space\par\hbox{Line2}

你的第二个案例可以模仿

\noindent\hbox to\hsize{Line 1\hss}\space \space\par\hbox{Line2}

新的 LaTeX 更加复杂,因为\parTeX 不是原始的,但这对这个问题来说并不重要。

答案2

你的问题是\secondline虚假的空间在开始之前tcolorbox。简而言之,使用这个定义:

\newcommand\secondline{% <----- See https://tex.stackexchange.com/q/7453/5764
  \begin{tcolorbox}
    Line 2
  \end{tcolorbox}
}

如果不包含%,则会在设置 之前添加一个空格tcolorbox。由于它前面有一个X-width 表格(跨越整个文本块宽度),因此在它之后插入的任何空格(当\secondline紧跟在 之后时tblr)都会导致额外的换行符,因此会产生“额外的垂直空间”。

通过使用没有虚假空格的正确定义来避免这种情况。

相关内容