
儘管有數十個關於表格單元垂直居中的答案,但我無法(我的錯)找到解決方案來滿足一個看似簡單的需求,即同一行手工包裹的多行單元格中的單元格垂直居中。
\documentclass[12pt]{article}
\usepackage{xcolor}
\usepackage{array}
\begin{document}
\pagecolor{yellow!10}
\newcommand{\methoda}[1]{{\parbox[c]{\linewidth}{\centering#1}}}
\newcommand{\methodb}[3]{\begin{tabular}[c]{@{}c@{}}#1\\#2\\#3\end{tabular}}
\newcommand{\methodc}[1]{\begin{minipage}[m]{\linewidth}\centering#1\end{minipage}}
\newcommand{\methodd}[1]{{\begin{center}#1\end{center}}}
\newcommand{\methoddfix}[1]{{\setlength{\topsep}{0pt}\begin{center}#1\end{center}}}
\centering\begin{tabular}{>{\raggedright\arraybackslash}m{0.28\linewidth}>{\centering\arraybackslash}m{0.33\linewidth}}
\tabularnewline\hline
\centering Column 1 & Column 2\tabularnewline\hline
2 lines vertically centered & This cell contains more than one line of automatically wrapped text. \tabularnewline\hline
Fail of vertical centering & \methoda{Hand-wrapped\\ multiline\\ method A} \tabularnewline\hline
Vert. center. fail & \methodb{Hand-wrapped}{multiline}{method B} \tabularnewline\hline
Fail of vertical centering & \methodc{Hand-wrapped multiline\\ method C\\ too much padding} \tabularnewline\hline
Vert. center. OK & \methodd{Hand-wrapped multiline\\ method D\\ too much padding} \tabularnewline\hline
Success column 1, fail column 2 & \methoddfix{Hand-wrapped multiline\\ method Dfix\\ cannot remove\\ bottom padding} \tabularnewline\hline
Just a last row & Just a last row \tabularnewline\hline
\end{tabular}
\end{document}
我的真實世界表是longtable
使用multirow
或tabularx
其他一些高級包,並使用 XeLaTeX 進行編譯。
預先感謝您的任何幫助。
答案1
使用makecell
或巢狀tabular
s 和p
類型第二列:
\documentclass[12pt]{article}
\usepackage{array}
\usepackage{makecell}
\begin{document}
With a multicolumn around the automatically wrapped columns:
\centering\begin{tabular}{>{\raggedright\arraybackslash}m{0.28\linewidth}>{\centering\arraybackslash}p{0.33\linewidth}}
\hline
some automatically wrapped text & \makecell[cc]{Some \\ manually \\ linebroken \\ text \\ over multiple lines}\\ \hline
some automatically wrapped text & \begin{tabular}[c]{@{}c@{}}Some \\ manually \\ linebroken \\ text \\ over multiple lines\end{tabular}\\ \hline
some automatically wrapped text & \multicolumn{1}{>{\centering\arraybackslash}m{0.33\linewidth}}{some longer but also automatically wrapped text}\\ \hline
\end{tabular}
With a multicolumn around the manually wrapped columns:
\begin{tabular}{>{\raggedright\arraybackslash}m{0.28\linewidth}>{\centering\arraybackslash}m{0.33\linewidth}}
\hline
some automatically wrapped text & \multicolumn{1}{>{\centering\arraybackslash}p{0.33\linewidth}}{\makecell[cc]{Some \\ manually \\ linebroken \\ text \\ over multiple lines}}\\ \hline
some automatically wrapped text & \multicolumn{1}{>{\centering\arraybackslash}p{0.33\linewidth}}{\begin{tabular}[c]{@{}c@{}}Some \\ manually \\ linebroken \\ text \\ over multiple lines\end{tabular}}\\ \hline
some automatically wrapped text & some longer but also automatically wrapped text\\ \hline
\end{tabular}
\end{document}
更新:要結合手動和自動換行符,您可以更改初始列定義以包含\let\newline\\\arraybackslash\hspace{0pt}
而不是僅包含\arraybackslash
.
\documentclass[12pt]{article}
\usepackage{array}
\usepackage{makecell}
\begin{document}
\begin{tabular}{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{0.28\linewidth}>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{0.33\linewidth}}
\hline
some automatically wrapped text & some longer but also automatically wrapped text\\ \hline
some automatically wrapped text & some\newline automatically wrapped text with a\newline few \newline manual linebreaks\\ \hline
manual \newline linebreak & more text here\\
\hline
\end{tabular}
\end{document}