在 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}