我有以下代码:
\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
正在做的事情。