平衡长表、多列和分页符

平衡长表、多列和分页符

长期以来,我一直在寻找一种在多列环境中平衡表格的好方法。特别是,我希望在浮点数中自动平衡多列表格table。虽然我一直认为在目前的 LaTeX 状态下这是不可能的,但我最近发现了一个非常有用的答案:

在 LaTeX 中平衡多列内的长表

然而,当我将这项技术应用到我正在调查的案件中时,我遇到了一些奇怪的行为。请考虑以下示例:

\documentclass{article}

\usepackage{longtable}
\usepackage{multicol}
\usepackage{lipsum}

\title{Lorem ipsum}
\date{\today}
\author{\LaTeX}

\makeatletter
\newsavebox\ltmcbox
\newenvironment{multicolslongtable}[1]{
  \setbox\ltmcbox\vbox\bgroup
  \col@number\@ne
  \begin{longtable}{#1}
}{
  \end{longtable}
  \unskip
  \unpenalty
  \unpenalty\egroup
  \unvbox\ltmcbox
}  
\makeatother

\begin{document}

\maketitle

\begin{multicols}{2}

\lipsum[1-3]

\begin{table*}[t]
\begin{multicols}{2}
\begin{multicolslongtable}{c l}
1 &Lorem\tabularnewline
2 &ipsum\tabularnewline
3 &dolor\tabularnewline
4 &si\tabularnewline
5 &amet\tabularnewline
6 &consectetuer\tabularnewline
7 &adipiscing\tabularnewline
8 &elit\tabularnewline
\end{multicolslongtable}
\end{multicols}
\caption{Words of the first sentence by index.}
\end{table*}

\lipsum[4-10]

\end{multicols}

\end{document}

第 1 页 第2页

请注意:

  • 第一页的右栏有一个很大的空白。
  • 两列的文本都超出了第一页的边界,但没有超出后续页面的边界

我很高兴收到关于如何解决这个问题并改善我的multicolslongtable环境的任何建议。

答案1

我责怪弗兰克:-)

也就是说,我认为问题与无关longtable,而是嵌套multicols环境很危险。

如果你用内托multicols来固定长桌从外面开始,并将结果保存在一个框中以添加到浮点数中。这样效果更好:

\documentclass{article}

\usepackage{longtable}
\usepackage{multicol}
\usepackage{lipsum}
\usepackage{capt-of}

\title{Lorem ipsum}
\date{\today}
\author{\LaTeX}

\makeatletter
\newsavebox\ltmcbox
\newsavebox\xxbox
\newenvironment{multicolslongtable}[1]{
  \setbox\ltmcbox\vbox\bgroup
  \col@number\@ne
  \begin{longtable}{#1}
}{
  \end{longtable}
  \unskip
  \unpenalty
  \unpenalty\egroup
  \unvbox\ltmcbox
}  
\makeatother

\begin{document}

\maketitle

\savebox\xxbox{\begin{minipage}{\textwidth}
\begin{multicols}{2}
\begin{multicolslongtable}{c l}
1 &Lorem\tabularnewline
2 &ipsum\tabularnewline
3 &dolor\tabularnewline
4 &si\tabularnewline
5 &amet\tabularnewline
6 &consectetuer\tabularnewline
7 &adipiscing\tabularnewline
8 &elit\tabularnewline
\end{multicolslongtable}
\end{multicols}
\captionof{table}{Words of the first sentence by index.}
\end{minipage}}

\begin{multicols}{2}

\lipsum[1-3]

\begin{table*}[t]
\usebox\xxbox
\end{table*}

\lipsum[4-10]

\end{multicols}

\end{document}

相关内容