我尝试应用如何在 tabularx 中实现列对齐?右对齐单元格ltablex
。但是,当表格的大小刚好够容纳我的列时,我遇到了一个问题:一些单元格最终会占据两行,而第一行是空的。这是一个最小的例子:
\documentclass[a4paper, 12pt]{report}
\usepackage[french]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{etoolbox}
\AtBeginEnvironment{tabular}{\footnotesize}
\AtBeginEnvironment{tabularx}{\footnotesize}
\AtBeginEnvironment{longtable}{\footnotesize}
\usepackage{multirow}
\usepackage{ltablex}
\usepackage{array}
\newcolumntype{Y}{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}X}
\newcolumntype{Z}{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}X}
\begin{document}
%\renewcommand{\tabcolsep}{3pt}
\begin{tabularx}{160pt}{ X Y Z }
% head
\hline
Name &
Long~name &
Name \\
& [unit] & [$longunit$] \\*
\hline\hline
\endhead
% foot
\hline
\endfoot
% body
\multirow{3}{1.6cm}{Text on two lines} & 0 & 0 \\*
& 0 & 0 \\*
& 0 & 0 \\
\end{tabularx}
\end{document}
我得到这个结果:
我发现删除\hspace{0pt}
Y 和 Z 列类型定义可以解决问题,但由于它在其他情况下可能会有用,所以我想知道是否有更好的方法来解决这个问题?
此外,如果我取消注释重新定义 的行tabcolsep
,Y 和 Z 列将再次左对齐。有没有办法让 右对齐或居中列,并且 较低tabcolsep
?
答案1
你可以修复换行符
\newcolumntype{Y}{>{\centering\let\newline\\\arraybackslash\nobreak\hspace{0pt}}X}
\newcolumntype{Z}{>{\raggedleft\let\newline\\\arraybackslash\nobreak\hspace{0pt}}X}
\tabcolsep
应该设置为\setlength
not \renewcommand
(但是在这里它仍然表现得很奇怪,现在已经过时了……)