要设置最大列宽,我使用varwidth
如下建议这个答案。但是,垂直填充仅对单行单元格正确,对于多行单元格来说太小了。最小示例:
\documentclass{article}
\usepackage{varwidth}
\usepackage{array}
\newcolumntype{M}{>{\begin{varwidth}{1cm}}l<{\end{varwidth}}}
\begin{document}
\begin{tabular}{|M|c|}
\hline
asdf & \\ \hline
asdf asdf & \\ \hline
\end{tabular}
\end{document}
结果是:
我尝试varwidth
在单元格内部使用(而不是使用数组包定义新的列类型),但这产生了相同的结果:
\documentclass{article}
\usepackage{varwidth}
\begin{document}
\begin{tabular}{|c|c|}
\hline
\begin{varwidth}{1cm}asdf \end{varwidth} & \\ \hline
\begin{varwidth}{1cm}asdf asdf\end{varwidth} & \\ \hline
\end{tabular}
\end{document}
我也尝试\par
在单元格中添加或添加双换行符,但我的所有尝试都无法产生正确的垂直填充。手动添加vspace
s 也不起作用。
有没有办法保证单行单元格和多行单元格的垂直填充相同?
答案1
加载cellspace
包,旨在确保单元格顶部和底部的垂直填充最小,并M
使用S
预说明符(稍微)更改列类型的定义:
\documentclass{article}
\usepackage{varwidth}
\usepackage{array}
\usepackage{cellspace}
\setlength\cellspacetoplimit{6pt}
\setlength\cellspacebottomlimit{6pt}
\newcolumntype{M}{>{\begin{varwidth}{1cm}}Sl<{\end{varwidth}}}
\begin{document}
\begin{tabular}{|M|c|}
\hline
asdf & \\ \hline
asdf asdf & \\ \hline
\end{tabular}
\end{document}
答案2
尝试
\documentclass{article}
\usepackage{varwidth}
\usepackage{makecell}% added
\setcellgapes{5pt} % added
\begin{document}
{\makegapedcells % added
\begin{tabular}{|c|c|}
\hline
\begin{varwidth}{1cm}asdf \end{varwidth} & \\ \hline
\begin{varwidth}{1cm}asdf asdf\end{varwidth} & \\ \hline
\end{tabular}
}
\end{document}
笔记:该解决方案 - 使用\makegapedcells
- 不适用于列类型,m
也不启用着色表使用colortbl
或[table]{xcolor}
包。但这不会大大降低该解决方案的实用性,因为它们很少使用。
使用它的好处是您不需要关心S
向单元格类型添加属性,也不需要关心它在包S
中的列类型组合中的使用siunitx
(也很少发生,但最好知道,S
您应该使用C
什么,在使用时会再次受到限制tabularx
...等等:))