beforeskip 不适用于 longtable

beforeskip 不适用于 longtable

以下代码片段:

\documentclass[paper=a4, pagesize, DIV=calc, version=last,fontsize=8pt]{scrartcl}
\usepackage{longtable}
\usepackage{showframe}
\RedeclareSectionCommand[beforeskip=-3cm, afterskip=.2cm]{section}
\begin{document}
\section{One}
\begin{longtable} {l}
    A \\
\end{longtable}
\section{Two}
\begin{longtable} {l}
    B \\
\end{longtable}
\section{Three}
\begin{longtable} {l}
    C \\
\end{longtable}
\end{document}

产生以下输出:

使用 longtable 输出 PDF

正如人们所注意到的,没有3厘米 跳过在任何部分之前完成。相比之下,如果我使用利普萨姆代替长桌,认为似乎有效:

\documentclass[paper=a4, pagesize, DIV=calc, version=last,fontsize=8pt]{scrartcl}
\usepackage{lipsum}
\usepackage{showframe}
\RedeclareSectionCommand[beforeskip=-1cm, afterskip=.2cm]{section}
\begin{document}
\section{One}
\lipsum[1][1]
\section{Two}
\lipsum[1][1]
\section{Three}
\lipsum[1][1]
\end{document}

生成:

使用 lipsum 输出 PDF

编辑

涉及到“longtable”和后续标题之间的垂直空间不一致。实际上,如果我使用以下命令,问题就会消失:

\csname @nobreakfalse\endcsname

答案1

抱歉,评论太长了,但标准类也发生了同样的情况:

%\documentclass[paper=a4, pagesize, DIV=calc,
%version=last,fontsize=8pt]{scrartcl}
\documentclass{article}
\makeatletter
% Change of beforeskip and afterskip of \section
\renewcommand\section{\@startsection {section}{1}{\z@}%
                                   {-3cm}%
                                   {.2cm}%
                                   {\normalfont\Large\bfseries}}

\makeatother
\usepackage{longtable}
\usepackage{showframe}
%\RedeclareSectionCommand[beforeskip=-3cm, afterskip=.2cm]{section}
\begin{document}
\section{One}
\begin{longtable} {l}
    A \\
\end{longtable}
\showthe\lastskip
\section{Two}
\begin{longtable} {l}
    B \\
\end{longtable}
\section{Three}
\begin{longtable} {l}
    C \\
\end{longtable}
\end{document}

所以它似乎是一个与 koma-script 无关的 longtable 功能。

答案2

碰巧的是longtable不会重置\if@nobreak。 和类似的命令使用此条件\section来决定它们是否在另一个命令之后立即调用(例如,在没有任何中间段落的情况下\subsection跟在后面)。\section

分区标题后的第一个文本段落(全局)重置\if@nobreak为 false,而分区命令将其设置为 true。

另一方面,longtable不一定会产生段落,如果产生列的话p,它会在禁用机制的\parbox地方进行操作。\if@nobreak

您可能想要\@nobreakfalse在末尾添加longtable

\documentclass[paper=a4, pagesize, DIV=calc, version=last,fontsize=8pt]{scrartcl}
\usepackage{longtable}
\usepackage{xpatch}
\usepackage{showframe}
\RedeclareSectionCommand[beforeskip=-3cm, afterskip=.2cm]{section}

\makeatletter
\xapptocmd\endlongtable{\@nobreakfalse}{}{}
\makeatother

\begin{document}
\section{One}
\begin{longtable} {l}
    A \\
\end{longtable}
\section{Two}
\begin{longtable} {l}
    B \\
\end{longtable}
\section{Three}
\begin{longtable} {l}
    C \\
\end{longtable}
\end{document}

在此处输入图片描述

相关内容