长期以来,我一直在寻找一种在多列环境中平衡表格的好方法。特别是,我希望在浮点数中自动平衡多列表格table
。虽然我一直认为在目前的 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}
请注意:
- 第一页的右栏有一个很大的空白。
- 两列的文本都超出了第一页的边界,但没有超出后续页面的边界
我很高兴收到关于如何解决这个问题并改善我的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}