我有一个包含 10 个项目的列表,每个项目又包含 10 个子项目。为了将其放在一页上,我使用 multicol 包创建了 3 列。但是这 3 列对齐不正确。在下图中,第二列总是比第一列略低,而第二列的最后一个元素位于第三列。我找不到我的错误。为什么它对齐不正确?非常感谢您的任何建议...
\documentclass[a4paper,11pt]{report}
\usepackage{multicol}
\usepackage{enumitem}
% define page size, margin size
\setlength{\headheight}{1.1\baselineskip}
\voffset=-2cm
\hoffset=-3cm
\textheight24cm
\textwidth15.5cm
\topmargin1cm
\oddsidemargin3.25cm
\evensidemargin3.25cm
\begin{document}
\begin{multicols}{3}
\tiny
\begin{itemize}[noitemsep, leftmargin=0.5cm]
\item Block 1
\begin{itemize}[noitemsep, leftmargin=0cm]
\item Block 1 Item1
\item Block 1 Item 2
\item Block 1 Item 3
\item Block 1 Item 4
\item Block 1 Item 5
\item Block 1 Item 6
\item Block 1 Item 7
\item Block 1 Item 8
\item Block 1 Item 9
\item Block 1 Item 10
\end{itemize}
\item Block 2
\begin{itemize}[noitemsep, leftmargin=0cm]
\item Block 2 Item 1
\item Block 2 Item 2
\item Block 2 Item 3
\item Block 2 Item 4
\item Block 2 Item 5
\item Block 2 Item 6
\item Block 2 Item 7
\item Block 2 Item 8
\item Block 2 Item 9
\item Block 2 Item 10
\end{itemize}
\item Block 3
\begin{itemize}[noitemsep, leftmargin=0cm]
\item Block 3 Item 1
\item Block 3 Item 2
\item Block 3 Item 3
\item Block 3 Item 4
\item Block 3 Item 5
\item Block 3 Item 6
\item Block 3 Item 7
\item Block 3 Item 8
\item Block 3 Item 9
\item Block 3 Item 10
\end{itemize}
\item Block 4
\begin{itemize}[noitemsep, leftmargin=0cm]
\item Block 4 Item 1
\item Block 4 Item 2
\item Block 4 Item 3
\item Block 4 Item 4
\item Block 4 Item 5
\item Block 4 Item 6
\item Block 4 Item 7
\item Block 4 Item 8
\item Block 4 Item 9
\item Block 4 Item 10
\end{itemize}
\columnbreak
\item Block 5
\begin{itemize}[noitemsep, leftmargin=0cm]
\item Block 5 Item 1
\item Block 5 Item 2
\item Block 5 Item 3
\item Block 5 Item 4
\item Block 5 Item 5
\item Block 5 Item 6
\item Block 5 Item 7
\item Block 5 Item 8
\item Block 5 Item 9
\item Block 5 Item 10
\end{itemize}
\item Block 6
\begin{itemize}[noitemsep, leftmargin=0cm]
\item Block 6 Item 1
\item Block 6 Item 2
\item Block 6 Item 3
\item Block 6 Item 4
\item Block 6 Item 5
\item Block 6 Item 6
\item Block 6 Item 7
\item Block 6 Item 8
\item Block 6 Item 9
\item Block 6 Item 10
\end{itemize}
\item Block 7
\begin{itemize}[noitemsep, leftmargin=0cm]
\item Block 7 Item 1
\item Block 7 Item 2
\item Block 7 Item 3
\item Block 7 Item 4
\item Block 7 Item 5
\item Block 7 Item 6
\item Block 7 Item 7
\item Block 7 Item 8
\item Block 7 Item 9
\item Block 7 Item 10
\end{itemize}
\item Block 8
\begin{itemize}[noitemsep, leftmargin=0cm]
\item Block 8 Item 1
\item Block 8 Item 2
\item Block 8 Item 3
\item Block 8 Item 4
\item Block 8 Item 5
\item Block 8 Item 6
\item Block 8 Item 7
\item Block 8 Item 8
\item Block 8 Item 9
\item Block 8 Item 10
\end{itemize}
\item Block 9
\begin{itemize}[noitemsep, leftmargin=0cm]
\item Block 9 Item 1
\item Block 9 Item 2
\item Block 9 Item 3
\item Block 9 Item 4
\item Block 9 Item 5
\item Block 9 Item 6
\item Block 9 Item 7
\item Block 9 Item 8
\item Block 9 Item 9
\item Block 9 Item 10
\end{itemize}
\item Block 10
\begin{itemize}[noitemsep, leftmargin=0cm]
\item Block 10 Item 1
\item Block 10 Item 2
\item Block 10 Item 3
\item Block 10 Item 4
\item Block 10 Item 5
\item Block 10 Item 6
\item Block 10 Item 7
\item Block 10 Item 8
\item Block 10 Item 9
\item Block 10 Item 10
\end{itemize}
\end{itemize}
\end{multicols}
\end{document}
答案1
您注意到,LaTeX 决定将样张分成多列和多页取决于许多参数。在您的示例中,您强制在第一列中分列,简化后,这意味着强制在那里添加 -10000 的惩罚(不完全是,但对于本讨论来说已经足够接近了)。
由于这是强制惩罚,因此 LaTeX 会在那里休息。这与要求 LaTeX 制作高度为 343.5pt 的列(恰好是这些列的高度)并不完全相同。在后一种情况下,LaTeX 会选择更早的休息,因为在它看来,这样会更好(与在没有额外帮助的情况下在您想要的位置休息的成本相比,惩罚/成本更低)。
但是,在第二列中,您没有添加另一个列分隔符,因此 LaTeX 可以自由选择并执行它在第一列中所做的操作,即不是在块之后分隔,而是在前一个块的最后一项之前分隔。
基本上,阻挡后破坏的激励不是很高(默认为 -51),并且在物品之间破坏的成本具有相同的惩罚。如果您更改这些惩罚,您将看到不同的行为。
例如,已经\setlist{endpenalty=-500}
足以让它决定项目的结束比项目之间的中断更有吸引力。
或者,在第 9 个块之前添加一秒钟\columnbreak
。这也行得通,因为这无非是说这是一个“非常非常”有吸引力的突破点。