当我尝试让文本在tabularx
单元格中垂直居中时,我观察到一种奇怪的行为。根据建议,我尝试了\renewcommand{\tabularxcolumn}[1]{m{#1}}
这种方法,目前为止效果不错。但我有三列,其中只有两列似乎受到影响。这是我的 MWE
\documentclass{article}
\usepackage{tabularx,colortbl,xcolor}
\usepackage[utf8]{inputenc}
\begin{document}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\begin{center}
\begin{tabularx}{\textwidth}{|c|X|X|}
\hline
Chomsky-Typ & Name der Sprachfamilie & Automaten \\
\hline\hline\hline
0 & \cellcolor{lightgray!20}rekursiv aufzählbar & \cellcolor{lightgray!20}(N)DTM \\[1em]
\hline
\cellcolor{lightgray!20}1 & \cellcolor{lightgray!20}kontext-sensitiv & NLBA \\[1em]
\hline
\cellcolor{lightgray!20}3 & regulär & \cellcolor{lightgray!20}(N)DEA \\[1em]
\hline
hu & ha & he \\[1em]
\hline
\end{tabularx}
\end{center}
\end{document}
以下是输出。如您所见,右X
列未受影响。
我很困惑。我到底错过了什么?
答案1
这是因为额外的空间\\[1em]
被有效地添加到行中最后一个单元格内的文本中,从而阻止该单元格居中 - 参见这里。
因此,为了使您的内容居中并且能够指定行高,您需要在表中添加另一个空列,如下所示:
\documentclass{article}
\usepackage{tabularx,colortbl,xcolor}
\usepackage[utf8]{inputenc}
\begin{document}
\newlength\origtabcolsep
\origtabcolsep=\tabcolsep
\tabcolsep=0pt
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\newcolumntype{e}{>{\hsize=0pt}X}
\newcolumntype{x}{>{\hskip\origtabcolsep}X<{\hskip\origtabcolsep}}
\newcolumntype{C}{>{\hskip\origtabcolsep}c<{\hskip\origtabcolsep}}
\begin{center}
\begin{tabularx}{\textwidth}{|C|x|xe|}
\hline
Chomsky-Typ & Name der Sprachfamilie & Automaten &\\
\hline\hline\hline
0 & \cellcolor{lightgray!20}rekursiv aufzählbar & \cellcolor{lightgray!20}(N)DTM &\\[1em]
\hline
\cellcolor{lightgray!20}1 & \cellcolor{lightgray!20}kontext-sensitiv & NLBA &\\[1em]
\hline
\cellcolor{lightgray!20}3 & regulär & \cellcolor{lightgray!20}(N)DEA & \\[1em]
\hline
hu & ha & he &\\[1em]
\hline
\end{tabularx}
\end{center}
\tabcolsep=\origtabcolsep
\end{document}
空柱的规范灵感来自于这。编辑:我通过引入允许临时\tabcolsep
设置的新列类型来修复表格右侧的空白。0pt
答案2
我建议另一种方法:使用cellspace
包,定义单元格顶部和上方单元格之间的最小垂直间距,同样定义单元格底部和下方单元格顶部之间的最小间距。 剩下的就是在列说明符前加上前缀。 默认S
情况下,它与l, r, c
说明符一起使用,如果您在序言中声明了类型,它也可以与类型一起X
使用。 以下是一个示例(值可以根据您的喜好进行调整):
\documentclass{article}
\usepackage{tabularx,colortbl,xcolor}
\usepackage[utf8]{inputenc}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\usepackage{cellspace}
\setlength\cellspacetoplimit{10pt}
\setlength\cellspacebottomlimit{10pt}
\addparagraphcolumntypes{{X}}
\begin{document}
\begin{center}
\begin{tabularx}{\textwidth}{|c|X|S{X}|}
\hline
Chomsky-Typ & Name der Sprachfamilie & Automaten \\
\hline\hline\hline
0 & \cellcolor{lightgray!20}rekursiv aufzählbar & \cellcolor{lightgray!20}(N)DTM \\
\hline
\cellcolor{lightgray!20}1 & \cellcolor{lightgray!20}kontext-sensitiv & NLBA \\
\hline
\cellcolor{lightgray!20}3 & regulär & \cellcolor{lightgray!20}(N)DEA \\
\hline
hu & ha & he \\
\hline
\end{tabularx}
\end{center}
\end{document}