tabularx 中水平和垂直居中吗?

tabularx 中水平和垂直居中吗?

如何设置列宽使其在垂直方向上居中?或者在垂直和水平方向上以及下面的单元格也居中?谢谢

\documentclass[12pt,a4paper]{report}
\usepackage{booktabs, makecell, tabularx}
\setlength\textwidth{145mm}
\setlength\textheight{247mm}
\setlength\oddsidemargin{15mm}
\setlength\evensidemargin{15mm}
\setlength\topmargin{0mm}
\setlength\headsep{0mm}
\setlength\headheight{0mm}
\let\openright=\clearpage
\begin{document}
 \begin{table}
\small
\renewcommand{\arraystretch}{1.2}
\begin{tabularx}{\textwidth}{>{\hsize=0.2\hsize}X
                             >{\hsize=0.25\hsize}X
                             >{\hsize=0.25\hsize}X
                             >{\hsize=0.3\hsize}X}

\Xhline{1.2pt}\noalign{\vskip 0.4ex}\Xhline{1.2pt}%                          
Název souboru&  Průměrná hodnota chyby& \makecell{Odchylka určení \\ průměrné chyby}&   \makecell{Počet středovaných \\ bodů}\\
\Xhline{1.2pt}\noalign{\vskip 0.4ex}
B & A&  C&  D\\  

\Xhline{1.2pt}  
\end{tabularx}
\end{table}

\end{document}

在此处输入图片描述

答案1

结合\renewcommand\tabularxcolumn[1]{m{#1}}(来自\tabularx 环境中所有列的垂直居中)和\newcolumntype{C}{>{\centering\arraybackslash}X}(来自在 tabularx 和 X 列中居中)即可实现以下目的:

在此处输入图片描述

\documentclass[12pt,a4paper]{report}
\usepackage{booktabs, makecell, tabularx}


\renewcommand\tabularxcolumn[1]{m{#1}}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\begin{document}
 \begin{table}
\small
\renewcommand{\arraystretch}{1.2}
\begin{tabularx}{\textwidth}{>{\hsize=0.2\hsize}C
                             >{\hsize=0.25\hsize}C
                             >{\hsize=0.25\hsize}C
                             >{\hsize=0.3\hsize}C}

    \Xhline{1.2pt}\noalign{\vskip 0.4ex}\Xhline{1.2pt}%                          
 Název souboru&  Průměrná hodnota chyby& Odchylka určení průměrné chyby&   Počet středovaných  bodů\\
\Xhline{1.2pt}\noalign{\vskip 0.4ex}
B & A&  C&  D\\

\Xhline{1.2pt}  
\end{tabularx}
\end{table}

\end{document}

请记住,我已删除\makecell命令,因为它们扭曲了垂直对齐。如果您需要手动放置换行符,您可以\makecell[cc]{<text>}在每个列标题中使用(如建议的那样Paul Stanley 在评论中)或替换\newcolumntype{C}{>{\centering\arraybackslash}X}\newcolumntype{C}{>{\centering\let\newline\\\arraybackslash}X}并使用\newline您希望换行符出现的位置。

答案2

在@leandriis 的出色解决方案的基础上稍作改进,我还将删除所有手动规则宽度操作,只使用宏,它们可以很好地处理宽度和分离。leandriis也表示booktabs不需要。makecell

如果您想在某些点断线并且习惯makecell这样做,那么您仍然可以使用\newline它。

\documentclass[12pt,a4paper]{report}
\usepackage{booktabs, tabularx}

\renewcommand\tabularxcolumn[1]{m{#1}}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\begin{document}
 \begin{table}
\small
\renewcommand{\arraystretch}{1.2}
\begin{tabularx}{\textwidth}{>{\hsize=0.2\hsize}C
                             >{\hsize=0.25\hsize}C
                             >{\hsize=0.25\hsize}C
                             >{\hsize=0.3\hsize}C}
\toprule%                          
Název souboru & Průměrná hodnota chyby & Odchylka určení průměrné chyby & Počet středovaných bodů \\
\midrule
B             & A                      & C                              & D                       \\
\bottomrule 
\end{tabularx}
\end{table}

\end{document}

在此处输入图片描述

相关内容