我见过宽度为 100% 且垂直/水平对齐的表格,tabularx 表中的文本垂直居中,tabularx X 列类型中的垂直对齐- 我正在尝试他们建议的方法,但没有效果。
考虑一下这个MWE:
\documentclass{article}
\usepackage{array,booktabs}
\usepackage{tabularx}
\usepackage{ragged2e}
\usepackage{hhline}
\newcolumntype{x}[1]
{>{\raggedright}p{#1}}
\newcolumntype{z}[1]
{>{\centering}p{#1}}
\newcommand{\tn}{\tabularnewline}
\renewcommand\tabularxcolumn[1]{>{\Centering}m{#1}} %% COMMENT
\begin{document}
\begin{table}[!h]%t1
\caption{A rather long explanation of what this table is supposed to be}
\small%
{%
\begin{tabularx}{\textwidth}%
{|x{2.6cm}|X|} %% COMMENT
% {|x{2.6cm}|>{\centering}X|} %% UNCOMMENT
\hline
Something something & something else \tn
\hhline{|=|=|}
\textbf{Item one} \\ {\small\it item ref 1} &%
param 01 / param 02 \\/ param3\tn
\hline
\textbf{Item two} \\ {\small\it item ref 2} &%
param 03 / param 04 \\/ param5\tn
\hline
\textbf{Item two} \\ {\small\it item ref 2} &%
param 03 / param 04 / param5\tn
\hline
\end{tabularx}}
\label{tab:sometable}
\end{table}
\end{document}
照这样,这将产生:
... 显然有些东西坏了(\\
我猜,它们被视为新的表格线)?
%%
但是如果你取消注释/注释掉MWE 中标记的行,它几乎可以正常编译:
...除了没有垂直居中 - 正如第 3 行、第 2 列所证明的那样。
那么,如何才能拥有一个可以拉伸的列,允许在单元格内换行 - 并使文本垂直居中?
答案1
\Centering
尝试友好并避免重新定义\\
,因此\\
可以安全地在第一列中使用,但在第二列中则不行。这只是告诉\Centering
不要担心tabular
的版本\\
。无关,但不要使用[h!]
。
\documentclass{article}
\usepackage{array,booktabs}
\usepackage{tabularx}
\usepackage{ragged2e}
\usepackage{hhline}
\newcolumntype{x}[1]
{>{\raggedright}p{#1}}
\newcolumntype{z}[1]
{>{\centering}p{#1}}
\newcommand{\tn}{\tabularnewline}
\makeatletter
\renewcommand\tabularxcolumn[1]{>{%
\let\@raggedtwoe@savedcr\\%
\Centering}m{#1}} %% COMMENT
\makeatother
\begin{document}
\begin{table}[htp]%t1
\caption{A rather long explanation of what this table is supposed to be}
\small%
{%
\begin{tabularx}{\textwidth}%
{|x{2.6cm}|X|} %% COMMENT
% {|x{2.6cm}|>{\centering}X|} %% UNCOMMENT
\hline
Something something & something else \tn
\hhline{|=|=|}
\textbf{Item one} \\ {\small\it item ref 1} &%
param 01 / param 02 {\show\\}\\/ param3\tn
\hline
\textbf{Item two} \\ {\small\it item ref 2} &%
param 03 / param 04 \\/ param5\tn
\hline
\textbf{Item two} \\ {\small\it item ref 2} &%
param 03 / param 04 / param5\tn
\hline
\end{tabularx}}
\label{tab:sometable}
\end{table}
\end{document}
答案2
一种使用makecell
垂直居中单元格并带有换行符的变体,并且cellspace
行与行之间的垂直间距较小:
\documentclass{article}
\usepackage{array,booktabs}
\usepackage{tabularx}
\usepackage{ragged2e}
\usepackage{hhline}
\newcolumntype{x}[1]
{>{\raggedright}m{#1}}
\newcolumntype{z}[1]
{>{\centering}m{#1}}
\newcommand{\tn}{\tabularnewline}
\renewcommand\tabularxcolumn[1]{>{\centering\arraybackslash}m{#1}} %% COMMENT
\usepackage{makecell}
\renewcommand\cellalign{lc}
\usepackage{cellspace}
\setlength\cellspacetoplimit{2pt}
\setlength\cellspacebottomlimit{2pt}
\addparagraphcolumntypes{x, }
\usepackage{caption}
\begin{document}
\begin{table}[!h]%t1
\caption{A rather long explanation of what this table is supposed to be}
\small
\begin{tabularx}{\textwidth}%
{|S{x{2.6cm}}|X|} %
\hline
\makecell{Something \\something} & something else \\
\hhline{|=|=|}
\makecell{\textbf{Item one} \\ {\small\it item ref 1}} &%
param 01 / param 02 \par/ param3\tn
\hline
\makecell{\textbf{Item two} \\ {\small\it item ref 2}} &%
param 03 / param 04 \par/ param5\tn
\hline
\makecell{\textbf{Item two} \\ {\small\it item ref 2}} &%
param 03 / param 04 / param5\tn
\hline
\end{tabularx}
\label{tab:sometable}
\end{table}
\end{document}