居中表格:为什么这样做有效?

居中表格:为什么这样做有效?

大概一个月前,有人问如何围绕列间空间对齐表格环境,这是我一直在尝试解决的问题。 沃纳的回答工作得差不多了,不过我必须在 周围添加额外的括号\raggedright。不过,我想知道是否有人可以向我解释一下为什么有效。

这是我正在使用的代码:

\usepackage{array}
%...

\noindent
\begin{tabular}
  {>{\raggedleft}p{\dimexpr.5\linewidth-2\tabcolsep-.5\arrayrulewidth}|
   >{{\raggedright}}p{\dimexpr.5\linewidth-2\tabcolsep-.5\arrayrulewidth}}
    Kindle Edition Available & k \\
    PC/Mac Edition Available & p
\end{tabular}

我认为我主要不明白的是段落宽度的数学运算,但如果有人能用英语解释整个过程,我将不胜感激。我得到的部分是“\raggedright在第一个段落样式列之前和\raggedleft第二个段落样式列之前插入命令”;否则我就一头雾水了。

如果我不清楚我一直在尝试做什么,那么这就是该块产生的结果与该块所产生的结果之间的区别:

\begin{center}
\begin{tabular}{rl}
    Kindle Edition Available & k \\
    PC/Mac Edition Available & p
\end{tabular}
\end{center}

示例输出

非常感谢你的帮助!

答案1

首先,您的>{{\raggedright}}不执行任何操作,因为{\raggedright}插入到单元格的开头,并且效果是“不执行任何操作”,因为声明是在组中发出的。您需要的是\arraybackslash(我稍后会解释原因)。

\begin{tabular}
  {>{\raggedleft}p{\dimexpr.5\linewidth-2\tabcolsep-.5\arrayrulewidth}|
   >{\raggedright\arraybackslash}}p{\dimexpr.5\linewidth-2\tabcolsep-.5\arrayrulewidth}}

您要求两列对齐。两列均为类型p,宽度为

当前线宽的一半,减少两倍\tabcolsep\arrayrulewidth

你必须知道表格中行的结构是

t C t | t C t

其中t表示宽度为 的空间\tabcolsepC表示单元格,|表示宽度为 的垂直规则\arrayrulewidth

因此,由于的宽度C如前所述,表格的宽度将与一样宽\linewidth

t + (0.5L - 2t - 0.5a) + t + a + t + (0.5L - 2t - 0.5a) + t = L

(其中 L 是线宽)。

为什么\arraybackslash?因为\raggedright重新定义了\\,所以此命令不能用于结束一行。该命令\arraybackslash恢复了 的正确含义\\。它在第一列说明符中不是必需的,但您当然也可以在那里使用它。

答案2

作为埃格尔提及的是他的评论,使用>{{\raggedright}}将不起作用,正如您在添加更多文本时看到的那样:

\documentclass{report}
\usepackage{array}

\begin{document}

\noindent
\begin{tabular}
  {>{\raggedleft\arraybackslash}p{\dimexpr.5\linewidth-2\tabcolsep-.5\arrayrulewidth}|
   >{{\raggedright}}p{\dimexpr.5\linewidth-2\tabcolsep-.5\arrayrulewidth}}
    Kindle Edition Available & k \\
    PC/Mac Edition Available & p text some text to test text some text to test text some text to test text some text to test text some text to test
\end{tabular}

\end{document}

在此处输入图片描述

简单地使用>{\raggedright}最后一列和\\改变行将产生错误,因为,,\centering重新定义;包提供恢复含义,因此以下有效:\raggedright\raggedleft\\array\arraybackslash

\documentclass{report}
\usepackage{array}

\begin{document}

\noindent
\begin{tabular}
  {>{\raggedleft\arraybackslash}p{\dimexpr.5\linewidth-2\tabcolsep-.5\arrayrulewidth}|
   >{\raggedright\arraybackslash}p{\dimexpr.5\linewidth-2\tabcolsep-.5\arrayrulewidth}}
    Kindle Edition Available & k \\
    PC/Mac Edition Available & p text some text to test text some text to test text some text to test text some text to test text some text to test
\end{tabular}

\end{document}

在此处输入图片描述

相关内容