在下表中(代码如下),如何使文本 RowName1 垂直居中?(请注意,每个项目符号列表都必须位于小页面环境中)。
代码:
\documentclass[letter]{article}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{cp{2in}p{2in}}
\toprule
& \multicolumn{1}{c}{\textbf{ColName1}} & \multicolumn{1}{c}{\textbf{ColName2}} \\
\midrule
\textbf{RowName1}
&
\begin{minipage}[t]{\linewidth}
\begin{itemize}
\item 1
\item 2
\end{itemize}
\end{minipage}
&
\begin{minipage}[t]{\linewidth}
\begin{itemize}
\item 1
\item 2
\item 3
\item 4
\end{itemize}
\end{minipage}
\\
\bottomrule
\end{tabular}
\end{document}
附录
如果不使用 minipages 也能达到同样的效果,那么它也很有用。我尝试过这样做(参见下面的代码),但得到以下结果:
这有两个原因:(a)RowName1 没有垂直对齐,(b)项目符号列表前后有额外的空间。
使用的代码是:
\documentclass[letter]{article}
\usepackage{booktabs,enumitem,array}
\begin{document}
\begin{tabular}{p{1in}p{2in}p{2in}}
\toprule
& \multicolumn{1}{c}{\textbf{ColName1}} & \multicolumn{1}{c}{\textbf{ColName2}} \\
\midrule
\textbf{RowName1}
&
\begin{itemize}[topsep=0em, partopsep=0em, parsep=0em, itemsep=0em, leftmargin=1em]\raggedright
\item 1
\item 2
\end{itemize}
&
\begin{itemize}[topsep=0em, partopsep=0em, parsep=0em, itemsep=0em, leftmargin=1em]\raggedright
\item 1
\item 2
\item 3
\item 4
\end{itemize}
\\
\bottomrule
\end{tabular}
\end{document}
答案1
借助表嵌套并使用m
包中的列类型`array:
\documentclass[letter]{article}
\usepackage{array,booktabs,paralist}%enumitem
\usepackage{lipsum}
\begin{document}
\begin{tabular}{c m{2in} m{2in}}
\toprule
& \hfil \textbf{ColName1} & \hfil \textbf{ColName2} \\
\midrule
\textbf{RowName1}
& \multicolumn{2}{@{}l@{}}{
\begin{tabular}{|p{2in}|p{2in}|}
\begin{minipage}[t]{2in}
\begin{itemize}[\textbullet]
\item 1
\item 2
\end{itemize}
\end{minipage}
&
\begin{minipage}[t]{2in}
\begin{itemize}[\textbullet]
\item 1
\item 2
\item
3: \lipsum[2]
\end{itemize}
\end{minipage}
\end{tabular} }
\\
\bottomrule
\end{tabular}
\end{document}
使用 package \paralist enables simple to define different itemize's label stiles as well adopt left margin of itemize to label width. Of course, if you more familiar with
enumitem` 包,可以实现同样的效果。
附录:如果您喜欢手动将第一个单元格的内容居中,那么下一个解决方案就没那么麻烦了 :-)。它不是嵌套表格,只有minipage
s。第一个单元格内容的位置可以根据其他单元格中的最大行数进行调整。
\documentclass[letter]{article}
\usepackage{booktabs,multirow,paralist}%enumitem
\usepackage{lipsum}
\begin{document}
\begin{tabular}{c p{2in} p{2in}}
\toprule
& \hfil \textbf{ColName1} & \hfil \textbf{ColName2} \\
\midrule
\multirow{21}*{\textbf{RowName1}}
& \multicolumn{2}{l@{}}{
\begin{minipage}[t]{2in}
\begin{itemize}[\textbullet]
\item 1: \lipsum[2]
\item 2
\end{itemize}
\end{minipage}\hspace{2\tabcolsep}%
\begin{minipage}[t]{2in}
\begin{itemize}[\textbullet]
\item 1
\item 2
\item 3: \lipsum[2]
\end{itemize}
\end{minipage} }\\
\bottomrule
\end{tabular}
\end{document}
结果与之前类似。这次我省略了垂直线,在第一种情况下,垂直线仅用于显示列宽,在实际使用中则省略。