获取 tabularx 中的列宽

获取 tabularx 中的列宽

我正在尝试垂直对齐单元格的内容,为此我使用了多列命令。问题是我需要为参数设置文本的宽度,但如果列具有将该列扩展至页面宽度的属性(不起作用,并且给我太多宽度) m,我不知道如何获取它。到目前为止,我拥有的代码是X\columnwidth\linewidth

\documentclass[10pt,a4paper]{article}

\usepackage[usenames,dvipsnames,svgnames,table]{xcolor} % use color
\usepackage{booktabs} % commands for table rules
\usepackage{tabularx}
\usepackage{lipsum}

\newcommand{\scell}[1]{\cellcolor{black!25} \bfseries #1 }
\newcommand{\slcell}[1]{\cellcolor{black!25} #1 }


\begin{document}

\noindent
{\renewcommand{\arraystretch}{1.3}% Spread rows out...
\begin{tabularx}{\linewidth}{|>{\arraybackslash}m{2.4cm}|>{\arraybackslash}X|>{\centering\arraybackslash}m{2.1cm}|}
\hline 
 \scell{Header 1} & \scell{Header 2} &  \scell{ Header 3}  \\
\hline \hline
Cell 1 &\multicolumn{1}{m{4cm}}{ \lipsum[1]}  &  test \\
\hline 
\end{tabularx}
}


\end{document}

答案1

而不是写作

\multicolumn{1}{m{<some still-to-be-determined length>}}{\lipsum[1]}

我会执行指令

\renewcommand{\tabularxcolumn}[1]{m{#1}}

在序言中(正在加载tabularx,当然),然后写

\lipsum*[1]

在有问题的单元格中。

应 OP 的要求,提供更详细的解释tabularx示例中的环境包含 1 列类型为X和 2 列类型为mX-类型 列默认为p-类型 列,其宽度由 LaTeX 自动计算。重要的是,p-类型 列的材料顶部对齐。作为此设置的(可能出乎意料!)副产品,2 列类型的材料m通常不会垂直居中。(如果 列中材料的高度X超过了两列材料的高度m——就像您的示例中的情况一样——2 个 -m类型 列中较高的一列将顶部对齐,2 个m-类型 列中较矮的一列将相对于较高的一列垂直居中m,并且 -类型 列的位置p仍然会不同。哎哟!)通过运行指令\renewcommand{\tabularxcolumn}[1]{m{#1}},列的底层类型X从 更改为pm并出现所需的结果,即,所有 3 列都以预期的方式垂直居中。

故事的寓意:如果所有列的底层类型相同,即 all-m或 all- p,则令人费解(并且可能是意外和不想要的)放置结果的频率会急剧下降。混合列类型可能会导致相当多的挫败感。

完整的 MWE:

\documentclass[10pt,a4paper]{article}

\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\newcommand{\scell}[1]{\cellcolor{black!25}\bfseries #1}
\newcommand{\slcell}[1]{\cellcolor{black!25}#1}

\usepackage{tabularx}
\renewcommand{\tabularxcolumn}[1]{m{#1}}

\usepackage{booktabs,lipsum}

\begin{document}

\noindent
\begingroup
\renewcommand{\arraystretch}{1.3} % localize scope of this command
\begin{tabularx}{\linewidth}{% require "\arraybackslash" in final column only
   | m{2.4cm} | X | >{\centering\arraybackslash}m{2.1cm} |}
\hline 
\scell{Header 1} & \scell{Header 2} & \scell{Header 3}\\
\hline 
\hline
Cell 1 & \lipsum*[1] &  test \\
\hline 
\end{tabularx}
\endgroup

\end{document}

相关内容