带有 needspace 的虚假长表头

带有 needspace 的虚假长表头

我正在为一本书生成 LaTeX 代码,这本书有许多(超过 200 个)小节,每个小节由两个长表组成。我不想在每个小节之前强制分页,因为这样会在非常短的小节后留下大量浪费的空白。搜索了以前的帖子后,我使用 \needspace 作为推荐,仅在剩余空间有限时插入分页符。这在大多数情况下都可以正常工作,但有时会产生虚假的长表标题,如以下 MWE 所示,其中小节标题“0.1.2 Subsec2”前面是紧随长表之后的孤立标题“Row DataC”。

删除 \needspace(通过在 \mysubsec 命令定义中将其注释掉)似乎可以删除虚假标题(尽管有时尽管该命令末尾有 \nopagebreak,但仍会留下孤立的子部分标题)。有没有解决方案可以避免 \needspace 触发这些虚假的长表标题?或者有其他方法可以定义以页面上的剩余空间为条件的分页符?

\documentclass[a5paper]{book}

\usepackage[pass]{geometry}
\geometry{a5paper}

\usepackage{longtable}
\usepackage{multirow}
\usepackage{booktabs}
\usepackage{needspace}

\newcommand{\mysubsec}[1]{%
    \needspace{6\baselineskip}
    \subsection{#1}%
    \label{#1}%
    \nopagebreak
}

\newenvironment{mytab}[2]
{\begin{longtable}[l]{r*{#2}c}
    \toprule
    Row & \multicolumn{#2}{c}{Data#1} \\
    \midrule
    \endhead
}
{\end{longtable}}

\newcommand{\myrow}[1]{
\multirow[t]{2}{*}{#1} & a & b & c \\
& d & e & f \\
}

\begin{document}
\raggedbottom

\mainmatter
Title \clearpage

\section{Sec1}

\mysubsec{Subsec1}
\begin{mytab}{A}{3}
\myrow{1}\midrule
\myrow{2}\bottomrule
\end{mytab}

\begin{mytab}{B}{3}
\myrow{1}\midrule
\myrow{2}\midrule
\myrow{3}\bottomrule
\end{mytab}

\mysubsec{Subsec2}

\begin{mytab}{C}{3}
\myrow{1}\midrule
\myrow{2}\midrule
\myrow{3}\bottomrule
\end{mytab}

\begin{mytab}{D}{3}
\myrow{1}\midrule
\myrow{2}\midrule
\myrow{3}\bottomrule
\end{mytab}

\clearpage

\mysubsec{Subsec3}
\begin{mytab}{E}{3}
\myrow{1}\bottomrule
\end{mytab}

\begin{mytab}{F}{3}
\myrow{1}\bottomrule
\end{mytab}

\mysubsec{Subsec4}
\begin{mytab}{G}{3}
\myrow{1}\bottomrule
\end{mytab}

\begin{mytab}{H}{3}
\myrow{1}\bottomrule
\end{mytab}

\mysubsec{Subsec5}
\begin{mytab}{I}{3}
\myrow{1}\midrule
\myrow{2}\bottomrule
\end{mytab}

\begin{mytab}{J}{3}
\myrow{1}\midrule
\myrow{2}\bottomrule
\end{mytab}

\end{document}

带有 needspace 的虚假 longtable 标题

答案1

感谢你们的反馈和建议。我根据这些进行了测试,我的发现总结如下:

在里面较旧TeX Live 2019.20200218-1:

  • longtable.sty 是 2020/01/07 v4.13
  • \needspace导致虚假的长表头
  • \Needspace避免虚假的长表头没有创建孤立子部分标题“0.1.2 Subsec2”
  • 孤立子部分标题“0.1.5 Subsec5”发生如果\Needspace被注释掉

在里面更新TeX Live 2021.20220204-1:

  • longtable.sty 是 2021-09-01 v4.17

  • \needspace\Needspace避免虚假的长表头他们创建了孤立的子节标题“0.1.2 Subsec2”(需要空间长度6\baselineskip

  • \[Nn]eedspace注释掉后不会出现孤立的小节标题

因此,目前的解决方案是使用\Needspace旧版本,因为这可以修复虚假的长表标题,而不会创建新版本中出现的孤立小节标题。

相关内容