多列环境中的超表行数较多,无法填充后续页面上的列

多列环境中的超表行数较多,无法填充后续页面上的列

在 multicols 环境中使用 supertabular 时,如果从页面的某个部分开始,并跨越多个页面,则第一页的列会被填满,但所有后续页面的列都只被部分填充。在 supertabular 环境中添加大量行时,MWE 会显示此情况。随后将 multicols 与 supertabular 一起使用可以正常工作。supertabular 似乎在最初启动时“记住”了剩余的页面空间。我查看了 supertabular/multicols 代码,考虑更改 \TrickSupertabularIntoMulticols 技巧代码(例如在 \mcnewpage 重置页面大小),但没有成功。这远远超出了我有限的 latex 编程能力。关于如何解决这个问题有什么想法吗?MWE 如下。

%!TEX TS-program = xelatex
%!TEX encoding = UTF-8
\documentclass[a4paper, 12pt, twoside, openright]{book}

\usepackage[left=2cm,right=2cm,top=2cm,bottom=3cm]{geometry}
\usepackage{multicol,showframe,supertabular,ifthen}

\makeatletter
\let\mcnewpage=\newpage
\newcommand{\TrickSupertabularIntoMulticols}{%
\renewcommand\newpage{%
    \if@firstcolumn%
        \hrule width\linewidth height0pt%
            \columnbreak%
        \else%
          \mcnewpage%
        \fi%
}%
}
\makeatother

\begin{document}
\chapter{A}
\section{a1}
\section{a2}
\section{a3}
\section{a4}

\begin{multicols*}{2}
\TrickSupertabularIntoMulticols
\begin{supertabular}{lll}
Aaaa & 0010 & text \tabularnewline
Aaaa & 0010 & text \tabularnewline
\end{supertabular}
\end{multicols*}
\end{document}

答案1

如果suptertabular失败,总会有longtable

在此处输入图片描述

%!TEX TS-program = xelatex
%!TEX encoding = UTF-8
\documentclass[a4paper, 12pt, twoside, openright]{book}

\usepackage[left=2cm,right=2cm,top=2cm,bottom=3cm]{geometry}
\usepackage{multicol,showframe,supertabular,ifthen,longtable}

\makeatletter
\let\mcnewpage=\newpage
\newcommand{\TrickSupertabularIntoMulticols}{%
\renewcommand\newpage{%
    \if@firstcolumn%
        \hrule width\linewidth height0pt%
            \columnbreak%
        \else%
          \mcnewpage%
        \fi%
}%
}
\makeatother

\begin{document}
\chapter{A}
\section{a1}
\section{a2}
\section{a3}
\section{a4}

\def\r{Aaaa & 0010\stepcounter{enumi}\theenumi & text \tabularnewline}
\def\rr{\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r}
\newbox\myb
\setbox\myb\vbox{\hsize=\dimexpr(\textwidth-\columnsep)/2\relax
\makeatletter
\chardef\LT@end@pen\z@
\makeatother
\begin{longtable}{lll}
\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr
\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr
\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr
\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr
\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr
\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr\rr
\end{longtable}}

\begin{multicols*}{2}
\unvbox\myb
\end{multicols*}
\end{document}

相关内容