单独居中表格标题,单独居中表格内容

单独居中表格标题,单独居中表格内容

为了清晰起见,进行了编辑:

亲爱的专家:我有一个有趣的难题。我认为以下格式比中间列全部为“r”而右列全部为“l”的格式更好。给定包乌莱姆

\documentclass[12pt]{article}
\usepackage{ulem}
\usepackage{times}
\begin{document}
 \begin{tabular}{c c c}
  \uline{Value} & \uline{A Very Interesting Factorial} & \uline{More Columns} \\[0.2ex]
  \begin{tabular}{r} 3 \\ 6 \\ 8 \\ 10 \end{tabular} &
  \begin{tabular}{r} 6 \\ 720 \\ 40,320 \\ 3,628,800 \end{tabular} &
  \begin{tabular}{l} small \\ large \\ larger \\ largest \end{tabular} \\
\end{tabular}
\end{document}

(你们中的一些人如何在 stackexchange.com 中包含 .png 图像?我制作了一个 png 以便于可视化,但不知道如何将其嵌入到这里。)A(egreg):使用顶部的图像选项卡,而不是 markdown。

在此处输入图片描述

在这个例子中,我的格式正是我想要的。(我的第一个描述不清楚,以为乳胶可以说明一切——抱歉。)我的观点不是书本标签。我的观点是关于标题行和内容行如何对齐。我希望列在下面居中,但内容单元格对齐方式为“r”表示中间,而“l”表示右边。它不仅仅是非标题列中的“中心”。标题的列名比其内容长得多,因此应该更准确地居中于其内容上方。在我看来,这是一种比我迄今为止使用的更合理的格式(尽管是在一个虚构的例子中)。

解决此难题的另一种常见方法(我并不是要求这样做)是将标题单元格拆分开,使其不比下面的内容宽太多,然后使用它自己的格式,例如通过 \multicolumn。这在许多情况下可能更令人满意(例如,纵向文档具有大量垂直空间但没有太多水平空间,并且行标题容易被拆分),但并非在所有情况下都如此。

但是我实现这一点的方式并不是一个好主意,因为它失去了列的 tex-ish 关联。当行具有不同的高度时,它不起作用。看起来很明智,这正是我想要的:值和阶乘内容单元格都是右对齐的,但整个列都位于其标题下方的中心。类似地,“更多列”是左对齐的,但由于其行标题较大,因此内容全部缩进(这里大约两个 em)。

我可以在第一行使用手动调整的 \makebox[Xem][c]{} 命令来实现类似的效果,但这又需要大量的物理(而非逻辑)标记。

一个好的逻辑标记应该是这样的

\begin{tabular}{rrl}
   \header{Value} & \header{A Very Interesting Factorial} & \header{More Columns} \\
    3 &   6 & small \\
    6 & 720 & large \\
    8 & 40,320 & larger \\
   10 & 3,628,800 & largest \\
\end{tabular}

加上一些前导魔法,它知道每个标题单元格应该与其下方最宽的行单元格居中,然后在左右添加所需的空间,以便它不会粘在其邻居中。

更具体地说,是否有一个软件包可以将我“手动格式化”的内容以逻辑方式进行物理处理?可能没有,但是 LaTeX 的灵活性和缺点总是让我感到惊讶。

/iaw

附言:Scribe 和 Latex 都正确地完成了许多逻辑标记,这一点更加引人注目,因为 40 年后,html5 仍然会犯一些基本错误(章节、文章、标题混淆)。但是 Latex 在其逻辑标记中忘记了分隔表格列和行标题,即 html <th> vs <td> 。但这是题外话了。

答案1

我认为这满足了 OP 的要求,并且还证明了即使并非所有行高都相等它也能起作用。

\documentclass[12pt]{article}
\usepackage{ulem}
\usepackage{times}
\usepackage{tabstackengine,calc}
\newcommand\mk[3][r]{\protect\makebox[\widthof{\csname big#2\endcsname}][#1]{#3}}
\begin{document}
\def\bigA{10}
\def\bigB{3,628,800}
\def\bigC{largest}
\tabularShortstack{ccc}{
  \uline{Value} & \uline{A Very Interesting Factorial} & \uline{More Columns}\\
  \mk{A}{3} & \mk{B}{6} & \mk[l]{C}{small}\\
  \mk{A}{6} & \mk{B}{720} & \mk[l]{C}{large}\\
  \mk{A}{8} & \mk{B}{40,320} & \mk[l]{C}{\stackanchor{larger}{(!!!)}}\\
  \mk{A}{10} & \mk{B}{3,628,800} & \mk[l]{C}{largest}
}
\end{document}

在此处输入图片描述

正如我在下面的评论中向 OP 指出的那样,上面使用的 TABstack 可以用 替换tabular,同时仍然使用该\mk[alignment]{column}{data}方法:

\documentclass[12pt]{article}
\usepackage{ulem}
\usepackage{times}
\usepackage{calc, stackengine}
\newcommand\mk[3][r]{\protect\makebox[\widthof{\csname big#2\endcsname}][#1]{#3}}
\begin{document}
\def\bigA{10}
\def\bigB{3,628,800}
\def\bigC{largest}
\begin{tabular}{ccc}
  \uline{Value} & \uline{A Very Interesting Factorial} & \uline{More Columns}\\
  \mk{A}{3} & \mk{B}{6} & \mk[l]{C}{small}\\
  \mk{A}{6} & \mk{B}{720} & \mk[l]{C}{large}\\
  \mk{A}{8} & \mk{B}{40,320} & \mk[l]{C}{\stackanchor{larger}{(!!!)}}\\
  \mk{A}{10} & \mk{B}{3,628,800} & \mk[l]{C}{largest}
\end{tabular}
\end{document}

答案2

你想要类似makecelland/or的东西吗booktabs?例如:

表格

不同权重的规则和改进的间距来自booktabs。(如果需要,可以使用 来模拟makecell。)列标题格式由\thead{}(如果我理解得没错,相当于你的\header)生成,并使用 提供的几个命令在序言中设置makecell

\theadfont确定标题中使用的字体。\theadalign确定对齐方式。

makecell在这个例子中,这当然是矫枉过正,一个简单的自定义宏会是一个更明智的选择。但是,我并不完全清楚您的修改程度,您可能会发现它提供了一种灵活而强大的替代方案,可以替代嵌套表格层和手动间距调整……

我不太确定你想用下划线做什么 - 在表格中这似乎是一个奇怪的选择 - 所以我满足于一个简单的\midrulefrom booktabs

如果你要自定义表格,你应该确实阅读booktabs有关制作专业质量表格的文档。

\documentclass{article}
\usepackage{makecell,booktabs}
\renewcommand\theadfont{\bfseries}
\renewcommand\theadalign{c}

\begin{document}

  \begin{tabular}{rrl}
    \toprule
    \thead{Value} & \thead{A Very Interesting Factorial} & \thead{More Columns} \\\midrule
    3 &   6 & small \\
    6 & 720 & large \\
    8 & 40,320 & larger \\
    10 & 3,628,800 & largest \\
    20,987,456.879  &   &   another\\\bottomrule
  \end{tabular}

\end{document}

答案3

你的问题不太清楚。我以为你可能在寻找

\documentclass{article}
\newcommand\header[1]{\multicolumn{1}{c}{\textbf{#1}}}
\begin{document}
\begin{tabular}{rrl}
   \header{Value} & \header{A Very Interesting Factorial} & \header{More Columns} \\
    3 &   6 & small \\
    6 & 720 & large \\
    8 & 40,320 & larger \\
   10 & 3,628,800 & largest \\
\end{tabular}

\end{document}

产生

在此处输入图片描述

但也许你的问题是,标题显然不是居中,因为它们是最宽的条目,所以也许你更喜欢

\documentclass{article}
\newcommand\header[1]{\multicolumn{3}{c}{\textbf{#1}}}

\begin{document}
\begin{tabular}{crc crc clc}
   \header{Value} & \header{A Very Interesting Factorial} & \header{More Columns} \\
&    3 &&&   6 &&& small &\\
&   6 &&& 720 &&& large &\\
&    8 &&& 40,320 &&& larger &\\
&   10 &&& 3,628,800 &&& largest &\\
\end{tabular}

\end{document}

在此处输入图片描述

或者

\documentclass{article}
\newcommand\header[1]{\multicolumn{1}{c}{\textbf{#1}}}
\usepackage{dcolumn}
\begin{document}
\begin{tabular}{D..{3.2}D..{8.0}l}
   \header{Value} & \header{A Very Interesting Factorial} & \header{More Columns} \\
    3 &   6 & small \\
    6 & 720 & large \\
    8 & 40,320 & larger \\
   10 & 3,628,800 & largest \\
\end{tabular}

\end{document}

在此处输入图片描述

相关内容