![获取 tabularx 中的列宽](https://linux22.com/image/363017/%E8%8E%B7%E5%8F%96%20tabularx%20%E4%B8%AD%E7%9A%84%E5%88%97%E5%AE%BD.png)
我正在尝试垂直对齐单元格的内容,为此我使用了多列命令。问题是我需要为参数设置文本的宽度,但如果列具有将该列扩展至页面宽度的属性(不起作用,并且给我太多宽度) 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 列类型为m
。X
-类型 列默认为p
-类型 列,其宽度由 LaTeX 自动计算。重要的是,p
-类型 列的材料顶部对齐。作为此设置的(可能出乎意料!)副产品,2 列类型的材料m
通常不会垂直居中。(如果 列中材料的高度X
超过了两列材料的高度m
——就像您的示例中的情况一样——2 个 -m
类型 列中较高的一列将顶部对齐,2 个m
-类型 列中较矮的一列将相对于较高的一列垂直居中m
,并且 -类型 列的位置p
仍然会不同。哎哟!)通过运行指令\renewcommand{\tabularxcolumn}[1]{m{#1}}
,列的底层类型X
从 更改为p
,m
并出现所需的结果,即,所有 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}