保持列标题之间的垂直规则

保持列标题之间的垂直规则

我有一张表格,其中有一个标题行,我想将其内容加粗并居中。我还想在整个表格的每对列之间设置垂直线。

我喜欢为此创建一个宏的解决方案,如这个答案为了创建仅使用粗体和居中的标题的表格。这让我想到了这个 MWE:

\documentclass{article}

\newcommand*{\thead}[1]{\multicolumn{1}{c|}{\bfseries #1}}

\begin{document}

\begin{tabular}{ l | l }

  % Header row
  \thead{Left Header} & \thead{Right Header} \\

  % Non-header rows. Long cell so we can see centering working
  Top Left    & Top Right \\
  Bottom Left & Bottom Right is looooooooong

\end{tabular}

\end{document}

提供的 MWE 的输出

除了“右标题”右侧任性的垂直规则外,一切看起来都很好。

我知道我可以为该行中的最后一个标题创建一个专用的宏,如下所示:

\newcommand*{\thead}[1]{\multicolumn{1}{c|}{\bfseries #1}}
\newcommand*{\theadlast}[1]{\multicolumn{1}{c}{\bfseries #1}}

但我希望调用的命令在行中尽可能统一...理想情况下,每列都使用相同的命令,参数或命令没有任何变化。有没有合理的方法可以做到这一点?

笔记:我试图坚持使用内置tabular加上array和包;我试图了解如何在不借助附加包的情况下tabularx定制内置环境。tabular

答案1

您可以使用无限胶水来覆盖默认添加的胶水:

\documentclass{article}

\newcommand*{\thead}[1]{%
  \hspace*{0pt plus 1filll}% very infinite glue
  \bfseries % set boldface
  \ignorespaces % emulate tabular
  #1% the actual entry
  \unskip % emulate tabular
  \hspace*{0pt plus 1filll}% very infinite glue
}

\begin{document}

\begin{tabular}{ l | l }

  % Header row
  \thead{Left Header} & \thead{Right Header} \\

  % Non-header rows. Long cell so we can see centering working
  Top Left    & Top Right \\
  Bottom Left & Bottom Right is looooooooong

\end{tabular}

\end{document}

当然最简单的方法就是避免垂直规则。

在此处输入图片描述

相关内容