tabularx X 单元格的垂直和水平居中

tabularx X 单元格的垂直和水平居中

我有以下代码

\documentclass{standalone}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\usepackage[table]{xcolor}
\begin{document}
\renewcommand{\arraystretch}{1.5}%
\begin{tabularx}{418.26pt}{|c|c|c|>{\centering}X|>{\centering}X|>{\centering}X|c|c|}
\hline
\rowcolor{black!20}Nr. & Date & Version & Changed Chapters & Types of Change & Autor & Status\\\hline
1 & 06.12.2022 & 0.1 & Alle & First Draft & Long Ass Lastname & -\\\hline
\end{tabularx}
\end{document}

输出结果如下

输出的屏幕截图

除了水平居中单元格之外,我还想垂直居中它们。理想情况下,我想定义单元格类型 X 的变体,以免因特殊情况处理而弄乱表格的实际内容。


我已经尝试了涉及tabularx提出的两种解决方案高度可变的表格单元格中的垂直对齐,但都没有令人满意的效果。

\parbox解决方案

\documentclass{standalone}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\usepackage[table]{xcolor}
\begin{document}
\renewcommand{\arraystretch}{1.5}%
\begin{tabularx}{418.26pt}{|c|c|c|>{\centering}X|>{\centering}X|>{\centering}X|c|c|}
\hline
\rowcolor{black!20}Nr. & Date & Version & \noindent\parbox[c]{\hsize}{Changed Chapters} & \noindent\parbox[c]{\hsize}{Types of Change} & Autor & Status\\\hline
1 & 06.12.2022 & 0.1 & Alle & First Draft & \noindent\parbox[c]{\hsize}{Long Ass Lastname} & -\\\hline
\end{tabularx}
\end{document}

导致了这种可怕的结果

多行单元格的垂直尺寸缩小,字间距变得混乱

“解决方案\multicolumn”同样糟糕(除了还必须猜测合适的单元格宽度)

\documentclass{standalone}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\usepackage[table]{xcolor}
\begin{document}
\renewcommand{\arraystretch}{1.5}%
\begin{tabularx}{418.26pt}{|c|c|c|>{\centering}X|>{\centering}X|>{\centering}X|c|c|}
\hline
\rowcolor{black!20}Nr. & Date & Version & \multicolumn{1}{|m{2cm}|}{Changed Chapters} & \multicolumn{1}{|m{2cm}|}{Types of Change} & Autor & Status\\\hline
1 & 06.12.2022 & 0.1 & Alle & First Draft & \multicolumn{1}{|m{2cm}|}{Long Ass Lastname} & -\\\hline
\end{tabularx}
\end{document}

水平居中关闭,并且第一行的单元格颜色未填满整个单元格

答案1

这个解决方案非常有效

\documentclass{standalone}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\usepackage[table]{xcolor}
\begin{document}
\renewcommand{\arraystretch}{1.5}%
{\renewcommand\tabularxcolumn[1]{m{#1}}%
\begin{tabularx}{418.26pt}{|c|c|c|>{\centering}X|>{\centering}X|>{\centering}X|c|c|}
\hline
\rowcolor{black!20}Nr. & Date & Version & Changed Chapters & Types of Change & Autor & Status\\\hline
1 & 06.12.2022 & 0.1 & Alle & First Draft & Long Ass Lastname & -\\\hline
\end{tabularx}%
}
\end{document}

在此处输入图片描述

答案2

除了arraystretch,您可能还想使用 struts。这些是不可见的元素,可以人为地延长高度。另一方面,是不对称的,较大的值会使表格看起来很尴尬;这仍然可以通过将负值设置为(它需要包)\arraystretch来补偿。\extrarowheightarray

以下代码演示了如何使用自定义支柱。该宏\mystrut[top][bottom]添加了不可见的条:分别是顶部和底部间隙。然后,该宏可以成为影响表格中每一行的列定义的一部分。

此外,在小型牢房等狭窄环境中,请考虑使用ragged2e以及microtype。前者提供了改进的宏来格式化段落,例如\Centering\RaggedRight等,在此示例中替代\centering\raggedright

代码

\documentclass{article}
\usepackage{tabularx}
\usepackage{ragged2e,microtype}
\usepackage[table]{xcolor}
\NewDocumentCommand\mystrut{O{1}O{#1}}{%
    \sbox0{X}%
    \rule[\ht0]{0pt}{#1\dimexpr\normalbaselineskip}%
    \rule[#2\dimexpr-\normalbaselineskip]{0pt}{#2\dimexpr\normalbaselineskip}}
\renewcommand\tabularxcolumn[1]{m{#1}}%


\begin{document}

%%% Struts added manually per row
\noindent%
\begin{tabularx}{\textwidth}{|
        *3{c|}
        *3{>{\Centering}X|}
        *2{c|}
    }
    \hline
    \rowcolor{black!20}
    \mystrut%
    Nr. & Date & Version & Changed Chapters & Types of Change & Autor & Status \\
    \hline
    \mystrut 1 & 06.12.2022 & 0.1 & Alle & First Draft & Long Ass Lastname & - \\
    \hline
    \mystrut[1][2]%
    1 & 06.12.2022 & 0.1 & Alle & First Draft & Long Ass Lastname & - \\
    \hline
\end{tabularx}

\bigskip

%%% Struts added in column definition
\noindent%
\begin{tabularx}{\textwidth}{|
        >{\mystrut[1.25]{}}c|
        *2{c|}
        *3{>{\Centering}X|}
        *2{c|}
    }
    \hline
    \rowcolor{black!20}
    Nr. & Date & Version & Changed Chapters & Types of Change & Autor & Status \\
    \hline
    1 & 06.12.2022 & 0.1 & Alle & First Draft & Long Ass Lastname & - \\
    \hline
\end{tabularx}%
\end{document}

在此处输入图片描述

相关内容