\tabularx 环境中所有列的垂直居中

\tabularx 环境中所有列的垂直居中

我想在\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}

相关内容