以下代码片段:
\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}
产生以下输出:
正如人们所注意到的,没有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}
生成:
编辑
涉及到“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}