我正在尝试寻找一种方法,使我能够拥有自动宽度的列,这些列也在水平和垂直方向上居中,就像tabularx
列X
类型居中一样。
这是我迄今为止尝试过的:
\documentclass{article}
\usepackage{tabularx,booktabs}
\newcolumntype{Z}[0]{>{\centering\arraybackslash\let\newline\\\hspace{0pt}}X}%
\begin{document}
\begin{table}
\begin{tabularx}{7cm}{l|X|X}
& long\newline heading 1 & short heading\\
\toprule
row 1 & 2314 & 2134
\end{tabularx}
\end{table}
\begin{table}
\begin{tabularx}{7cm}{l|Z|Z}
& long\linebreak heading 1 & short heading\\
\toprule
row 1 & 2314 & 2134
\end{tabularx}
\end{table}
\end{document}
第二列几乎已经满足我的要求了,只是缺少第三列的垂直居中。如何解决这个问题?
答案1
对于垂直居中,你需要一m
列而不是一p
列位于后面X
\documentclass{article}
\usepackage{tabularx,booktabs}
\newcolumntype{Z}[0]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}X}%
\renewcommand\tabularxcolumn[1]{m{#1}}
\begin{document}
\begin{table}
\begin{tabularx}{7cm}{l|X|X}
& long\newline heading 1 & short heading\\
\toprule
row 1 & 2314 & 2134
\end{tabularx}
\end{table}
\begin{table}
\begin{tabularx}{7cm}{l|Z|Z}
& long\linebreak heading 1 & short heading\\
\toprule
row 1 & 2314 & 2134
\end{tabularx}
\end{table}
\end{document}
答案2
只需使用该makecell
包及其\thead
命令:
\documentclass{article}
\usepackage{tabularx,booktabs, makecell}
\newcolumntype{Z}[0]{>{\centering\arraybackslash\let\newline\\\hspace{0pt}}X}%
\begin{document}
\begin{table}
\begin{tabularx}{7cm}{l|X|X}
&\thead{ long\\ heading 1} & \thead{short heading}\\
\toprule
row 1 & 2314 & 2134
\end{tabularx}
\end{table}
\begin{table}
\begin{tabularx}{7cm}{l|Z|Z}
&\thead{long\\ heading 1} & \thead{short heading}\\
\toprule
row 1 & 2314 & 2134
\end{tabularx}
\end{table}
\end{document}
请注意,使用 makecell,您可以轻松格式化头部单元格的内容。我要指出的是,您不应该使用垂直线booktabs
:正如您所见,它们不会切断水平线。