表格环境前后添加空格

表格环境前后添加空格

环境tabular没有在其前后添加任何垂直空间。在我看来,这看起来很奇怪。添加一些空间的“正确”或“最佳”方法是什么?此外,为什么会有更多空间环境tabular是否比以前更好,如下例所示?

\documentclass{article}
\begin{document}
\noindent Here is a line with some text in it.

\begin{tabular}{*4{l}}
    Worg & Worg & Worg & Worg\\
    Worg & Worg & Worg & Worg\\
\end{tabular}

\noindent Here is another line with some text in it.
\end{document}

在此处输入图片描述

答案1

已编辑,提供两种替代方法。

verbatimbox包有一个服务例程\addvbuffer,其中可选参数是添加在内容周围的一个或两个长度(对称空间或上方/下方空间):

\documentclass{article}
\usepackage{verbatimbox}
\begin{document}
\noindent Here is a line with some text in it.

\addvbuffer[12pt 8pt]{\begin{tabular}{*4{l}}
    Worg & Worg & Worg & Worg\\
    Worg & Worg & Worg & Worg\\
\end{tabular}}

\noindent Here is another line with some text in it.
\end{document}

在此处输入图片描述

如果可选参数中有两个长度,则它们必须用空格分隔。因此,涉及两个实际长度的有效可选参数将是,例如,

\addvbuffer[{2\baselineskip} \baselineskip]{...}  

第一个长度周围的括号允许表达以下空格,否则该空格将被解析器吞噬。

请注意\addvbuffer,长度可以为负数(但有一些条件)。


如果间隙仅限于垂直对称的 [正] 添加,那么封装\addstackgap的宏stackengine也足够了。在下面的 MWE 中,我还在\strut上一段的末尾添加了一个。

\documentclass{article}
\usepackage{stackengine}
\begin{document}
\noindent Here is a line with some text in it.\strut

\addstackgap[5pt]{\begin{tabular}{*4{l}}
    Worg & Worg & Worg & Worg\\
    Worg & Worg & Worg & Worg\\
\end{tabular}}

\noindent Here is another line with some text in it.
\end{document}

在此处输入图片描述

答案2

环境tabular只是将其内容(格式化后)放在一个“框”内,周围的上下文将其视为单个大字母。换句话说,输入

... the last words of the previous paragraph.

\begin{tabular}{*4{l}}
    Worg & Worg & Worg & Worg\\
    Worg & Worg & Worg & Worg\\
\end{tabular}

The first words of the following paragraph...

在逻辑上等同于写作

... the last words of the previous paragraph.

X

The first words of the following paragraph...

也就是说,您将获得一个包含单个“框”的段落:这个框tabular在第一种情况下是环境,在第二种情况下是字母“X”。

这样做是有目的的:理论上,通过这种方式,您可以tabular在允许字母的任何地方放置环境,也就是说,实际上,任何地方都可以放置环境。周围的格式应由封闭上下文提供。

我不会使用比普通间距命令更复杂的命令,这些命令与用于在任何两个段落之间插入间距的命令相同。在环境tabular中包含它也很常见center,它位于文本边距的中间,并与前后内容之间留出合适的垂直空间。

这是一个简单的例子,完整且可编译:

\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[ascii]{inputenc}

\showboxbreadth = 100
\showboxdepth = 10



\begin{document}

\noindent A line with some text in it, but without indentation.

\begin{tabular}{*4{l}}
    Worg & Worg & Worg & Worg\\
    Worg & Worg & Worg & Worg\\
\end{tabular}

Here is another line with some text in it; this one, however,
\emph{is} indented.



\noindent A line with some text in it, but without indentation.

\medskip

\begin{tabular}{*4{l}}
    Worg & Worg & Worg & Worg\\
    Worg & Worg & Worg & Worg\\
\end{tabular}

\medskip

Here is another line with some text in it; this one, however,
\emph{is} indented.



Normally, one wants to center the \texttt{tabular} in addition to inserting 
space above and below:
\begin{center}
    \begin{tabular}{*4{l}}
        Worg & Worg & Worg & Worg\\
        Worg & Worg & Worg & Worg\\
    \end{tabular}
\end{center}
Text that follows.

% \showlists

\end{document}

如果您取消注释该\showlists命令,您将能够在转录文件中检查,该命令的tabular前面和后面是否都有\lineskipglue:这是因为,当不使用[b][t]可选参数时,tabular环境会产生一个框,其参考点(或多或少)在框本身中垂直居中。在我们的例子中,这个框的高度为 14.5pt,深度为 9.5pt,也就是说,它的行为就像一个斜体“f”,具有非常高的上升部和非常深的下降部。发生这种情况时,TeX 的正常行距不适用。

编辑: 哎呀,我回答了这个问题,却没有注意到它已经两年多了。它之所以能出现在活跃问题列表的顶部,只是因为@EmanuelOliveira 的回答(我确实如此不是推荐… :-) 。

答案3

表格后的空间比表格前的空间大,因为表格插入了一个不可见的支柱,并且 g 向下移动的幅度小于 W 向上移动的幅度:

\documentclass{article}
\begin{document}
\noindent Here is a line with some text in it.

xxxx\begin{tabular}{*4{l}}
    \rule[-\dp\strutbox]{0.4pt}{\dimexpr\ht\strutbox+\dp\strutbox}%shows the strut
    Worg & Worg & Worg & Worg\\
    Worg & Worg & Worg & Worg%
    \rule[-\dp\strutbox]{0.4pt}{\dimexpr\ht\strutbox+\dp\strutbox}\\    \end{tabular}

\noindent Here is another line with some text in it.
\end{document}

答案4

另一种可能性是使用 \\ ,如下所示。

\noindent Here is a line with some text in it. 
\\

\begin{tabular}{*4{l}}
    Worg & Worg & Worg & Worg\\
    Worg & Worg & Worg & Worg\\
\end{tabular}
\\

\noindent Here is another line with some text in it.

相关内容