无法在表格中垂直居中文本并在一列中枚举

无法在表格中垂直居中文本并在一列中枚举

代码:

\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}的宽度。tabularminipage

相关内容