![\tabularx 环境中所有列的垂直居中](https://linux22.com/image/345720/%5Ctabularx%20%E7%8E%AF%E5%A2%83%E4%B8%AD%E6%89%80%E6%9C%89%E5%88%97%E7%9A%84%E5%9E%82%E7%9B%B4%E5%B1%85%E4%B8%AD.png)
我想在\tabularx
环境中制作一个垂直居中列的表格。如何编写表格代码,让所有列类型 (l、c、X) 垂直居中?
这是我的代码:
\begin{table}[h]
\centering
\caption[Text]{Text.}
\label{tab:5599}
\begin{tabularx}{\textwidth}{|l|c|X|}
\hline
\textit{} & \textit{A} & \textit{B} \\
\thickhline
A & B & C
\hline
\end{tabularx}
\end{table}
编辑:
我仍然面临我的文本没有垂直居中的问题:
\begin{table}[h]
\centering
\caption[Material for SDS-PAGE]{Buffer compositions for SDS-PAGE.}
\label{tab:8899}
\begin{tabularx}{\textwidth}{Xcccc} % way of defining a fix columns width
\toprule[1.5pt]
\textit{} & \textit{Resolving gel} & \textit{Stacking gel} & \textit{Laemmli sample buffer} & \textit{Running buffer} \\
\midrule[1.5pt]
Acrylamide & 10 \% & 5 \% & - & - \\
\midrule
Tris-HCl (1.5 M, pH 8.8) & 25 \% & - & - & - \\
\midrule
Tris-HCl (1.0 M, pH 6.8) & - & 12.5 \% & 6.25 \% & - \\
\midrule
SDS & 0.1 \% & 0.1 \% & - & - \\
\midrule
Ammonium persulfate & 0.1 \% & 0.1 \% & - & - \\
\midrule
TEMED & 0.04 \% & 0.1 \% & - & - \\
\midrule
2-Mercaptoethanol & - & - & 0.1 \% & - \\
\midrule
Bromophenol blue & - & - & 0.0005 \% & - \\
\midrule
Glycerol & - & - & 10 \% & - \\
\midrule
TRIS & - & - & - & 0.25 M \\
\midrule
Glycine & - & - & - & 1.92 M \\
\midrule
pH & - & - & - & 8.3 \\
\midrule
H\textsubscript{2}O & Solvent & Solvent & Solvent & Solvent \\
\bottomrule[1.5pt]
\end{tabularx}
\end{table}
输出如下:
答案1
似乎添加
\renewcommand\tabularxcolumn[1]{m{#1}}% for vertical centering text in X column
您在序言中寻找的是:
\documentclass{article}
\usepackage{geometry}
\usepackage{booktabs, tabularx}
\renewcommand\tabularxcolumn[1]{m{#1}}% for vertical centering text in X column
\begin{document}
\begin{table}[h]
\centering
\caption[Material for SDS-PAGE]{Buffer compositions for SDS-PAGE.}
\label{tab:8899}
\begin{tabularx}{\textwidth}{>{\raggedright}Xcccc} % way of defining a fix columns width
\toprule[1.5pt]
& \textit{Resolving gel}
& \textit{Stacking gel}
& \textit{Laemmli sample buffer}
& \textit{Running buffer} \\
\midrule[1.5pt]
Acrylamide & 10 \% & 5 \% & -- & -- \\
\midrule
Tris-HCl (1.5 M, pH 8.8) & 25 \% & -- & -- & -- \\
\midrule
Tris-HCl (1.0 M, pH 6.8) & -- & 12.5 \% & 6.25 \% & -- \\
\midrule
SDS & 0.1 \% & 0.1 \% & -- & -- \\
\midrule
Ammonium persulfate & 0.1 \% & 0.1 \% & -- & -- \\
\midrule
TEMED & 0.04 \% & 0.1 \% & -- & -- \\
\midrule
2-Mercaptoethanol & -- & -- & 0.1 \% & -- \\
\midrule
Bromophenol blue & -- & -- & 0.0005 \% & -- \\
\midrule
Glycerol & -- & -- & 10 \% & -- \\
\midrule
TRIS & -- & -- & -- & 0.25 M\\
\midrule
Glycine & -- & -- & -- & 1.92 M\\
\midrule
pH & -- & -- & -- & 8.3 \\
\midrule
H\textsubscript{2}O & Solvent & Solvent & Solvent & Solvent\\
\bottomrule[1.5pt]
\end{tabularx}
\end{table}
\end{document}
另请查看以下解决方案是否适合您:
上面是使用的包makecell
及其宏thead
:
\documentclass{article}
\usepackage{geometry}
\usepackage{booktabs,
makecell, % for second example
tabularx}
\renewcommand\tabularxcolumn[1]{m{#1}}% for vertical centering text in X column
\renewcommand\theadfont{\itshape\normalsize}% for two lines column headers
...
\begin{tabularx}{\textwidth}{>{\raggedright}Xcccc} % way of defining a fix columns width
\toprule[1.5pt]
& \thead{Resolving gel}
& \thead{Stacking gel}
& \thead{Laemmli\\ sample buffer}
& \thead{Running buffer} \\
\midrule[1.5pt]
...
为了娱乐:
现在,经过两年多的时间,我将重新设计该表如下:
\documentclass{article}
\usepackage{geometry}
\usepackage{booktabs,
makecell, % for second example
tabularx}
\renewcommand\theadfont{\itshape\normalsize}% for two lines column headers
\renewcommand\theadgape{}
\usepackage{siunitx}
\begin{document}
\begin{table}[h]
\centering
\sisetup{table-align-text-post=false,
table-space-text-post={\,\%},
group-four-digits}
\caption[Material for SDS-PAGE]{Buffer compositions for SDS-PAGE.}
\label{tab:8899}
\begin{tabularx}{0.8\textwidth}{>{\raggedright}X
S[table-format=3.2]
S[table-format=3.2]
S[table-format=3.5]
l
}
\toprule
& {\thead{Resolving\\ gel}}
& {\thead{Stacking\\ gel}}
& {\thead{Laemmli\\ sample buffer}}
& \thead{Running\\ buffer} \\
\midrule
Acrylamide & 10 \% & 5 \% & {--} & {--} \\
Tris-HCl (1.5 M, pH 8.8) & 25 \% & {--} & {--} & {--} \\
\addlinespace
Tris-HCl (1.0 M, pH 6.8) & {--} & 12.5 \% & 6.25 \% & {--} \\
SDS & 0.1 \% & 0.1 \% & {--} & {--} \\
\addlinespace
Ammonium persulfate & 0.1 \% & 0.1 \% & {--} & {--} \\
TEMED & 0.04 \% & 0.1 \% & {--} & {--} \\
\addlinespace
2-Mercaptoethanol & {--} & {--} & 0.1 \% & {--} \\
Bromophenol blue & {--} & {--} & 0.0005 \% & {--} \\
\addlinespace
Glycerol & {--} & {--} & 10 \% & {--} \\
TRIS & {--} & {--} & {--} & 0.25 M\\
\addlinespace
Glycine & {--} & {--} & {--} & 1.92 M\\
pH & {--} & {--} & {--} & 8.3 \\
\addlinespace
H\textsubscript{2}O & {Solvent} & {Solvent} & {Solvent} & Solvent\\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
答案2
除了 Gernot 所说的内容之外:您正在将普通的 c 和 l(以及完整的 r)列与 X 列进行比较。前三种列类型与最后一种不同,因为如果是 X 列,LaTeX 会将长文本分成多行。事实上,X 列与可变宽度的 p 列相同。
您必须记住,经典 l、c 或 r 列中的文本始终将其基线放置在周围基线上。这与 LaTeX 对齐 p、m 和 b 列的方式不同。这些也对齐以适合周围基线。但它们的“内部”基线是根据其标识字符放置的。“p”代表磷。也就是说,该段落的顶部/第一行的基线将与周围的基线对齐。m 列代表“米中间”或居中对齐。因此,周围的基线将穿过本段落垂直框高度的中间。最后,但并非最不重要的是 b 列,它用于“乙ottom”,会将自身最后一行的基线与周围的基线合并。
让我们来看一个例子
\documentclass{scrartcl}
\usepackage{array}
\begin{document}
\begin{tabular}{lp{2cm}m{2cm}b{2cm}r}
foo & long text in the first column
& long text in the second column
& even longer text in the third and second-last column
& bar
\end{tabular}
\end{document}
结果是
如您所见,我放入左列或右列的单词“foo”和“bar”与中间列的垂直中间完美对齐。
因此,如果您希望 l 和 c 列的内容垂直对齐到 X 列的中间,您就必须摆弄 LaTeX。
您可以使用普通的表格环境并使用 m 列声明,而不是 tabularx 及其 X 列。在这种情况下,您必须手动调整 b 列的宽度,或者设置一个巧妙的公式,让 LaTeX 自行计算。(当然,您可以了解一下这些技巧,tabularx 曾经在 p 列上这样做过!)
另一方面,你也许会用巧妙的计算\raisebox
来修正基线的位置。
答案3
tabular
您观察到的是s 与 s 结合的标准行为\hline
。有几种解决方案,例如添加具有适当高度/深度的零宽度规则(“支柱”),并使水平规则保持相同距离。更好的方法可能是使用包booktabs
并避免垂直线(这在视觉上很糟糕且没有必要,因为垂直对齐无论如何都会引导读者)。
\documentclass{article}
\usepackage{tabularx}
\usepackage{booktabs}
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{lcX}
\toprule
\textit{} & \textit{A} & \textit{B} \\
\midrule
A & B & C\\
\bottomrule
\end{tabularx}
\end{document}