代码:
\documentclass{article}
\usepackage[a4paper]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{array}
\begin{document}
\begin{tabular}{ |m{0.8cm}| p{3cm} |c| }
\hline
1
&
\begin{enumerate}
\setlength{\leftmargin}{0pt}
\item line 1
\item line 2
\end{enumerate}
&
2\\
\hline
\end{tabular}
\end{document}
输出:
我的目标是利用c
环境来控制左列和右列并使其内容垂直居中。
在这个答案,@Werner 说,要使内容垂直居中,我必须使用m{<width>}
列类型数组包。因此,我尝试将其用于第一列。但enumerate
由于某种原因,它没有起作用。
如何使第 1 列和第 3 列垂直居中?理想情况下,保持c
列类型为自动宽度,但m
如果不可能,则也可以。
答案1
您可以定义一个新的列类型来自动添加minipage
;然后这取决于您想要在该列中插入什么材料。如果所有单元格都包含enumerate
环境,您可以这样做:
\documentclass{article}
\usepackage[a4paper]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{array,enumitem}
\newcolumntype{M}[1]{%
>{\begin{minipage}{#1}}
m{#1}
<{\end{minipage}}
}
\newenvironment{tenumerate}
{\vspace{\topsep}\vspace{-\parsep}\begin{enumerate}[leftmargin=*]}
{\end{enumerate}\vspace{\topsep}}
\begin{document}
\begin{tabular}{|m{0.8cm}|M{3cm}|c|}
\hline
1
&
\begin{tenumerate}
\item line 1
\item line 2
\end{tenumerate}
&
2\\
\hline
\end{tabular}
\end{document}
或者,您可以将这两个\vspace{\topsep}
命令(可以是任意尺寸,而不是\topsep
)添加到列中的所有单元格,然后执行
\newcolumntype{M}[1]{%
>{\begin{minipage}{#1}\vspace{\topsep}}
m{#1}
<{\csname par\endcsname\vspace{\topsep}\end{minipage}}
}
(\csname par\endcsname
这是让人\newcolumntype
不去想\par
真的会出现什么诡计)。
可能存在其他变化,但最终设置取决于您必须放入表中的材料。
答案2
只需将enumerate
环境放入另一个小页面中,
\begin{minipage}[c]{30.0mm}
\begin{enumerate}
\setlength{\leftmargin}{0pt}
\item line 1
\item line 2
\end{enumerate}
\end{minipage}
并且所有列都垂直居中,
当然,还可以进行其他调整来改善外观。例如,如果你想增加一些空间(边距)在枚举之前或之后,只需\vspace*
在前面或后面放置一个命令。
此外,您可能希望以某个长度(或类似的长度)保存列宽,并使用它来指定和中\newlength{cwidth}
的宽度。tabular
minipage