我对包含 m 和 X 列的表格有疑问。我需要一列垂直居中,另一列填充可用的水平空间。我的问题是,只要添加“X”列,垂直对齐就不起作用。有没有解决方法可以同时实现这两个功能,还是我做了一些概念上的错误。
这是我的最小示例:
\documentclass{scrreprt}
\usepackage{tabularx}
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{|m{0.75cm}|X|p{5cm}|}
\hline
\textbf{NO} & \centering \textbf{Content} & \textbf{Signature} \\ \hline
40 & \begin{itemize}
\item some
\item items
\end{itemize} & \\ \hline
40 & \begin{itemize}
\item some
\item items
\end{itemize} & \\ \hline
\end{tabularx}
\end{document}
因为我认为这可能很重要,所以我想给出一个更复杂的例子,因为它更接近我的实际代码。我有一张很长的表,因此我使用它ltxtable
来允许分页符,并将“X”列设置为tabularx
\documentclass{scrreprt}
\usepackage{ltxtable}
\usepackage{filecontents}
\usepackage{booktabs}
\usepackage{array}
\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{M}[1]{>{\centering\arraybackslash}m{#1}}
\begin{document}
\begin{filecontents}{activitytable.tex}
\begin{longtable}{|M{0.75cm}|X|P{5cm}|}
\hline
\textbf{NO} & \centering \textbf{Content} & \textbf{Signature} \\ \hline
40 & \begin{itemize}
\item some
\item items
\end{itemize} & \\ \hline
41 & \begin{itemize}
\item some
\item items
\end{itemize} & \\ \hline
\end{longtable}
\end{filecontents}
\LTXtable{\textwidth}{activitytable}
\end{document}
在这个简单的例子中,两个例子的结果看起来几乎(对于简单的例子来说并不居中)相同。
我希望它看起来与此类似,但不需要自己填充第二列的宽度。
先感谢您。
答案1
这是关于m
它的一个常见误解不是表示将内容放置在该单元格垂直空间的中间。意思是:将内容的参考点放置在内容的中间。
我在您的图像中添加了一条线来显示第二行单元格的参考点,第 1 列的参考点是 40 的中间而不是基线,列的参考点X
是其顶部,因为它p
通常使用的参考点p
是其第一行的基线,但是由于您有一个显示列表,第一个项目是垂直空间,因此参考点是单元格的顶部,所以参考点放在红线上,产生您看到的效果。
可能您想要做的是使用\tabularxcolumn
,这样就X
定义了红线不会穿过列表的垂直中心m
。p