为了清晰起见,进行了编辑:
亲爱的专家:我有一个有趣的难题。我认为以下格式比中间列全部为“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
你想要类似makecell
and/or的东西吗booktabs
?例如:
不同权重的规则和改进的间距来自booktabs
。(如果需要,可以使用 来模拟makecell
。)列标题格式由\thead{}
(如果我理解得没错,相当于你的\header
)生成,并使用 提供的几个命令在序言中设置makecell
。
\theadfont
确定标题中使用的字体。\theadalign
确定对齐方式。
makecell
在这个例子中,这当然是矫枉过正,一个简单的自定义宏会是一个更明智的选择。但是,我并不完全清楚您的修改程度,您可能会发现它提供了一种灵活而强大的替代方案,可以替代嵌套表格层和手动间距调整……
我不太确定你想用下划线做什么 - 在表格中这似乎是一个奇怪的选择 - 所以我满足于一个简单的\midrule
from 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}