我想制作一个列表,其中每个条目包含两条信息:日期范围和描述。如果某项有两个不同的日期范围,我希望能够写入
\begin{itemize}
...
\item \parbox[t]{5cm}{date range 1\\ date range 2} description
...
\end{itemize}
然而,项间间距似乎因此而被打乱;例如,当我编译
\documentclass[11pt]{article}
\begin{document}
\begin{itemize}
\item \parbox[t]{5cm}{test\\test}
\item test
\item test
\end{itemize}
\end{document}
我看到的是
第一个和第二个项目之间的间距与第二个和第三个项目之间的间距不一样。
有没有办法让间距相等?如果可能的话,我想避免使用类似描述的包在这个问题中,因为(我认为)这会改变列表其余部分的间距。
此外,我认为有一种比我尝试的方法更聪明的方法来创建我所描述的列表 - 任何有关这方面的建议也欢迎。
答案1
您应该使用 \strut 结束 \parbox,以赋予其正常深度(“test”不包含带降部的字符)。或者使用表格(表格中的每一行都有标准高度)。
\documentclass[11pt]{article}
\begin{document}
\begin{itemize}
\item \parbox[t]{5cm}{test\\test}
\item test\\test
\item test\\test
\item \parbox[t]{5cm}{test\\test\strut}
\item test\\test
\item test\\test
\item \begin{tabular}[t]{@{}p{5cm}}test\\test\end{tabular}
\item test\\test
\item test\\test
\end{itemize}
\end{document}
答案2
我认为最好使用修改后的描述环境,例如
\documentclass[11pt]{article}
\newenvironment{mydescription}
{\list{}{\labelwidth5em
\let\makelabel\mydescriptionlabel}}
{\endlist}
\newcommand*\mydescriptionlabel[1]{%
\smash{\parbox[t]{5em}{\normalfont\bfseries #1}}}
\def\d{description description description goes here. }
\begin{document}
\begin{mydescription}
\item [test 1\\test 2] \d\d
\item [test]\d\d\d
\item [test]\d
\end{mydescription}
\end{document}
在实践中,这\smash
可能是一种过于生硬的工具,但这取决于当标签大于描述和/或您接近分页符时您希望的行为。
我认为以下版本会检测描述段落是否是一行,如果是,则为两行标签添加额外的空间
\newenvironment{mydescription}
{\list{}{\labelwidth5em
\let\item\myitem
\let\makelabel\mydescriptionlabel}}
{\endlist}
\newcommand*\mydescriptionlabel[1]{%
\smash{\parbox[t]{5em}{\normalfont\bfseries #1}}}
\let\saveditem\item
\def\myitem{%
\relax\ifnum\prevgraf=1 \vskip\baselineskip\fi
\saveditem}