分段 - \@startsection 页面顶部的垂直间距

分段 - \@startsection 页面顶部的垂直间距

在下面的 MWE 中,\@startsection如果出现在页面顶部,则 (#4) 的 beforeskip 参数似乎会被忽略\section。这很酷——因为这里不需要很大的垂直空间。然而,LaTeX 所做的是将 Section 的基线带到与正常基线(右列)相同的水平,尽管字体大小更大。

您可以在此处看到: 在此处输入图片描述

我需要的是向部分框的顶线添加 3pt 的小垂直空间,以将基线向下移动一点。换句话说,我想要的是将部分的基线降低 3pt。

如果我取消注释\vspace*{-2\baselineskip}MWE 中的这一行(见下文),我就能得到我需要的东西。但我不想每次都手动添加这一行:

在此处输入图片描述

那么,有没有办法进行修改\@startsection,以便我可以仅在该部分位于页面顶部的情况下添加一些额外的命令或空格?

(以防万一:这确实是该部分基线需要降低 3pt 的设计。afterskip-Value(#5)等于 \baselineskip-3pt 并且是正确的。)

梅威瑟:

\documentclass{scrartcl}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage{fontspec} 
\renewcommand{\normalsize}{\fontsize{9.6pt}{13.7pt}\selectfont}
\makeatletter
\renewcommand{\section}{\@startsection%
{section}           % name
{1}                 % level
{6mm}               % indent
{-30.4pt}       % beforeskip
            % -30.4pt = -2\baselineskip+Grundlinienversatz
{10.7pt}        % afterskip
            % 10.7pt = \baselineskip + Grundlinienversatz
{\normalfont%
\bfseries%
\fontsize{11.5pt}{13.7pt}%
\addfontfeature{Numbers=OldStyle}%   Mediävalziffern
\addfontfeature{LetterSpace=1.0}% Laufweite 10/1000 Geviert 
\selectfont%
\raggedright}%
} 
\makeatother

\parskip=0pt

\begin{document}
\begin{multicols}{2}
%   \vspace*{-3\baselineskip}
    \section{Summary}

    \lipsum[1]

    \section{Section 2}

    \lipsum[2-7]
\end{multicols}
\end{document}

答案1

这里大家都在度假……

因此,我找到了以下解决方案:我使用\raisebox{-3pt}来将部分标题的基线降低 3pt(“Grundlinienversatz”)。在 中,\raisebox我必须使用\parbox来启用标题中的换行符。这样可以正确定位标题本身。最后,必须整理标题后的垂直间距:\prevdepth必须存储在 中\parbox并在 外部恢复。要将所有这些与 一起使用\@startsection,我必须\my@sectbox为所有提到的操作设置一个新命令。这可以 \@startsection作为参数 #6 传递给。

结果如下:

\documentclass{scrartcl}
\usepackage{lipsum}
\usepackage{multicol}
\usepackage{fontspec} 
\renewcommand{\normalsize}{\fontsize{9.6pt}{13.7pt}\selectfont}
\makeatletter
\renewcommand{\section}{\@startsection%
{section}       % name
{1}             % level
{6mm}           % indent
{-27.4pt}       % beforeskip
                % -27.4pt = -2\baselineskip
{10.7pt}        % afterskip
                % 10.7pt = \baselineskip + 3pt Grundlinienversatz
{\my@sectbox}%
} 

\def\my@sectbox#1{%
    \noindent\raisebox{-3pt}{%
        \parbox[t]{\linewidth}{%
            % Setting up font size and style: 
            \normalfont%
            \bfseries%
            \fontsize{11.5pt}{13.7pt}%
            \addfontfeature{Numbers=OldStyle}%   Mediävalziffern
            \addfontfeature{LetterSpace=1.0}% Laufweite 10/1000 Geviert 
            \selectfont%
            \raggedright%
            \strut#1%
            \xdef\rpd{\the\prevdepth}% saving \prevdepth inside box 
        }%
    }%

    \prevdepth=\rpd% restoring \prevdepth outside box (empty line above is mandatory)
    }
\makeatother

\parskip=0pt

\begin{document}
\begin{multicols}{2}
    \section{Summary}

    \lipsum[1]

    \section{Section two with a very long headline}

    \lipsum[2-7]
\end{multicols}
\end{document}

在此处输入图片描述

相关内容