表格:在 \multicolumn 中垂直和水平居中并换行

表格:在 \multicolumn 中垂直和水平居中并换行

我正在尝试排版一个具有固定宽度的表格,其中单元格内容在垂直和水平方向上均居中,即使一个单元格包含强制换行符。

我已经设法完成了,但现在我想使用命令添加跨越两列的两行文本\multicolumn,并使其仍然水平居中。

这就是我苦苦挣扎的地方:

\documentclass{article}

\usepackage{array, tabularx}
\usepackage[textwidth=6in]{geometry}

\renewcommand{\tabcolsep}{0pt}
\setlength{\extrarowheight}{10pt}

\begin{document}
    %
    \centering%
        %
        \begin{tabularx}{\textwidth}{%
                >{\centering\arraybackslash}m{0.5\textwidth}|
                >{\centering\arraybackslash}m{0.25\textwidth}
                >{\centering\arraybackslash}m{0.25\textwidth}
            }%
            test & test & test\break test\\
            test & \multicolumn{2}{X}{test\break test}
        \end{tabularx}
        %
    %
\end{document}

如您所见,第二行的第一列没有垂直居中,第二列没有水平居中,这是因为我使用了 X 参数\multicolumn,但我不知道还应该用什么来代替。

这个问题该如何解决?

答案1

为了确保单元格填充一致,我删除了\extrarowheight规范并添加了cellspace包,此外还重新定义了X列类型并使用来 >{\hsize=xx\hsize} 获取比率中的 X 列宽度2:1

无关:加载了就无需array加载tabularx

\documentclass{article}
\usepackage[textwidth=6in]{geometry}
\usepackage{cellspace, tabularx}
\setlength{\cellspacetoplimit}{8pt}
\setlength{\cellspacebottomlimit}{8pt}
\addparagraphcolumntypes{X}

\renewcommand{\tabularxcolumn}[1]{>{\centering\arraybackslash}m{#1}}
\renewcommand{\tabcolsep}{0pt}

\begin{document}

    \centering%

        \begin{tabularx}{\textwidth}{%
               | >{\hsize=1.5\hsize}S{X}|
                >{\hsize=0.75\hsize}S{X}
               | >{\hsize=0.75\hsize}S{X}|
            }%
        \hline
            test & test & test\break test \\
        \hline
            test & \multicolumn{2}{>{\hsize=1.5\hsize}S{X}|}{test\break test} \\
        \hline
        \end{tabularx}

\end{document}

在此处输入图片描述

答案2

请尝试以下操作:

\documentclass{article}
\usepackage[textwidth=6in]{geometry}
\usepackage{array, tabularx}
\renewcommand{\tabcolsep}{0pt}
%%--------------------------------------------------------------%
%%  patch of Ulrike Fisher (on my request)                      %
%%   (http://tex.stackexchange.com/questions/319768/            %
%%--------------------------------------------------------------%
\makeatletter
\renewcommand\mcell@classz{\@classx
\@tempcnta \count@
\prepnext@tok
\@addtopreamble{%\mcell@mstyle
\ifcase\@chnum
\hfil
\mcell@agape{\d@llarbegin\insert@column\d@llarend}\hfil \or
\hskip1sp
\mcell@agape{\d@llarbegin\insert@column\d@llarend}\hfil \or
\hfil\hskip1sp
\mcell@agape{\d@llarbegin \insert@column\d@llarend}\or
\mcell@agape{$\vcenter
\@startpbox{\@nextchar}\insert@column\@endpbox$}\or
\mcell@agape{\vtop
\@startpbox{\@nextchar}\insert@column\@endpbox}\or
\mcell@agape{\vbox
\@startpbox{\@nextchar}\insert@column\@endpbox}%
\fi
\global\let\mcell@left\relax\global\let\mcell@right\relax
}\prepnext@tok}
\makeatother

\begin{document}
    \begin{table}
    \renewcommand\tabularxcolumn[1]{m{#1}}
    \setcellgapes{10pt}
    \makegapedcells
    \centering
\begin{tabularx}{\textwidth}{|%
                >{\centering\arraybackslash}X|
                >{\centering\arraybackslash\hsize=0.5\hsize}X|
                >{\centering\arraybackslash\hsize=0.5\hsize}X|
            }%
    \hline
test & test & test\break test\\
    \hline
test & \multicolumn{2}{>{\centering\arraybackslash}X|}{test\break test}\\
    \hline
\end{tabularx}
    \end{table}
\end{document}

在此处输入图片描述

我添加了垂直和水平规则,您可以轻松看到,单元格的内容按照您希望的方式居中。

编辑: 现在通过使用makecell包 AND PATCH 来添加更多的垂直空间,以解决其与m列类型不兼容的问题。

相关内容