为什么垂直对齐与表格环境中 p 列的预期行为不匹配?

为什么垂直对齐与表格环境中 p 列的预期行为不匹配?

我有以下代码:

\documentclass{scrartcl}
\begin{document}
\begin{tabular}{lp{5cm}}
a & 
\begin{itemize}
 \item sd
\end{itemize}\\
\end{tabular}
\end{document}

我想要获得一个表格,左侧有一个列表(目前只有一个条目),右侧有一个列表。

我得到的是列表位于 a 下方(似乎是下面的 aline)。

你能告诉我这里出了什么问题吗?

答案1

之所以有空格,是因为在单元格内,首先开始一个段落,然后结束,然后开始itemize。您可以将代码包装在里面minipage以获得所需的输出:

\documentclass{scrartcl}
\begin{document}
\begin{tabular}{ll}
a & \begin{minipage}{5cm}
\begin{itemize}
 \item sd
\end{itemize}\end{minipage}\\ 
\end{tabular}
\end{document}

不过,我更愿意创建一个自己的环境:

\documentclass{scrartcl}

\newenvironment{tabitemize}[1][5cm]{\minipage{#1}\begin{itemize}}{\end{itemize}\endminipage}

\begin{document}
\begin{tabular}{ll}
a & \begin{tabitemize}[5cm]
 \item sd
\end{tabitemize}\\ 
\end{tabular}
\end{document}

请注意,我将宽度设为可选参数(我假设您将固定一个宽度值)。此外,我使用直接调用来\minipage...\endminipage避免不必要的分组。

根据建议阿泽蒂纳艾利特我建议另一个版本:

\documentclass{scrartcl}

\usepackage{tabularx}

\newenvironment{tabitemize}[1][\hsize]%
  {\minipage[t]{#1}\begin{itemize}}%
  {\end{itemize}\endminipage}

\usepackage{lipsum,showframe} % not needed

\begin{document}

\noindent
\begin{tabularx}{\linewidth}{@{}l@{}X@{}}
Hello & \begin{tabitemize}
 \item \lipsum[1-2] % lipsum command just produces some dummy text
 \item \lipsum[3]
\end{tabitemize}\\ 
\end{tabularx}

\end{document}
  • 我们习惯tabularx使用页面的整个宽度。
  • 我们将参数设置为,minipage根据\hsize手册,这似乎是正确的tabularx方法
  • 我们将[t]参数设置为minipage以获得正确的垂直对齐
  • 通过@{}我们删除(可能不必要的)水平空间。

在此处输入图片描述

答案2

@tohecz 解决方案效果很好。但是,如果你想让第一项与list第一列内容的基线对齐,该怎么办?你可以采取特黑茨解决方案并稍微修改一下以获得

\documentclass{scrartcl}
\newenvironment{tabitemize}[1][5cm]{\begin{minipage}[t]{#1}\begin{itemize}}{\end{itemize}\end{minipage}}
\begin{document}
\begin{tabular}{ll}
a & \begin{tabitemize}[5cm]
 \item first item
 \item second item
\end{tabitemize}\\
\end{tabular}
\end{document}

在此处输入图片描述

不幸的是,我不得不引入一个新的分组(除非托黑茨知道如何更直接地执行此操作)来告诉 minipage 我想要baseline第一行的设置。这就是环境[t]的可选参数minipage正在做的事情。

相关内容