在 KOMA 脚本上下文中,在寄存器的节标题周围添加空格

在 KOMA 脚本上下文中,在寄存器的节标题周围添加空格

我看到了来自以下答案的回复 这个问题,我可以不用标题安全, 只有韩国科玛工具,fe 通过 \RedeclareSectionCommand[afterskip=<amount>,beforeskip=<amount>]{section}
标题安全很好,但它重新定义了一些 KOMA 的功能。

我的 MWE:

\documentclass{scrbook}

\usepackage{blindtext}
\usepackage{atbegshi,picture,xcolor}
%\usepackage{gridset}

% baseline grid
\newcommand{\printbaselines}{%
    \AtBeginShipout{%
        \AtBeginShipoutUpperLeft{%
            \color{red}%
            \put(\dimexpr 1in+\oddsidemargin,
            -\dimexpr 1in+\topmargin+\headheight+\headsep+\topskip)%
            {%
                \vtop to\dimexpr\vsize+\baselineskip{
                    \hrule
                    \leaders\vbox to\baselineskip{\hrule width\hsize\vfill}\vfill
                }%
            }%
        }%
    }%
}%

\printbaselines

\begin{document}

\chapter{First}
\section{Lorem I}
\Blindtext[1]
\section{Lorem II}
\Blindtext[1]
\section{Lorem III}
\Blindtext[1]

\end{document}

我尝试设置

\RedeclareSectionCommand[
    beforeskip=-2\baselineskip,
    afterskip=1\baselineskip]{section}    

但它只对第一段起作用(并且没有\chapter),-第二段同步丢失。

我尝试\vskipnextgridgridset之后 使用但它在某些页面上\section不起作用。 \chapter\section

有可能吗?(pdflatex)

答案1

\normalsize如果所有标题都在,并且标题前后的垂直空间是的整数倍\baselineskip,那么您想要的没有任何问题:

\documentclass[parskip=never]{scrbook}% never stretch the paragraph skips

\usepackage{blindtext}
\usepackage{atbegshi,picture,xcolor}

% baseline grid
\newcommand{\printbaselines}{%
    \AtBeginShipout{%
        \AtBeginShipoutUpperLeft{%
            \color{red}%
            \put(\dimexpr 1in+\ifodd\value{page}\oddsidemargin\else\evensidemargin\fi,
            -\dimexpr 1in+\topmargin+\headheight+\headsep+\topskip)%
            {%
                \vtop to\dimexpr\vsize+\baselineskip{
                    \hrule
                    \leaders\vbox to\baselineskip{\hrule width\hsize\vfill}\vfill
                }%
            }%
        }%
    }%
}%

\printbaselines

\setkomafont{chapter}{\normalsize}
\setkomafont{section}{\normalsize}
\RedeclareSectionCommand[beforeskip=2\baselineskip,afterskip=1\baselineskip,afterindent=false]{chapter}
\RedeclareSectionCommand[beforeskip=2\baselineskip,afterskip=\baselineskip,runin=false,afterindent=false]{section}

\begin{document}

\chapter{First}
\section{Lorem I}
\Blindtext[1]
\section{Lorem II}
\Blindtext[1]
\section{Lorem III}
\Blindtext[2]
\section{Lorm IV}
\Blindtext[1]

\end{document}

normalsizes headings

但是,如果要允许使用其他字体大小的标题,则需要付出额外的努力才能使每个标题的高度\baselineskip再次成为正常高度的整数倍。在这种情况下,您必须将每个标题放入一个框中,测量此框的高度和深度,如果不是正常的倍数,则更改高度和深度\baselineskip,然后打印更改后的框。这可以通过重新定义\chapterlinesformat和来完成\sectionlinesformat,例如,

\documentclass[parskip=never]{scrbook}

\usepackage{blindtext}
\usepackage{atbegshi,picture,xcolor}

% baseline grid
\newcommand{\printbaselines}{%
    \AtBeginShipout{%
        \AtBeginShipoutUpperLeft{%
            \color{red}%
            \put(\dimexpr 1in+\ifodd\value{page}\oddsidemargin\else\evensidemargin\fi,
            -\dimexpr 1in+\topmargin+\headheight+\headsep+\topskip)%
            {%
                \vtop to\dimexpr\vsize+\baselineskip{
                    \hrule
                    \leaders\vbox to\baselineskip{\hrule width\hsize\vfill}\vfill
                }%
            }%
        }%
    }%
}%

\printbaselines

\newlength{\gridbaselineskip}
\newlength{\gridstrutheight}
\newlength{\gridstrutdepth}
\AtBeginDocument{%
  \setlength{\gridbaselineskip}{\baselineskip}
  \setlength{\gridstrutheight}{\ht\strutbox}
  \setlength{\gridstrutdepth}{\dp\strutbox}
  \RedeclareSectionCommand[beforeskip=2\gridbaselineskip,afterskip=1\gridbaselineskip,afterindent=false]{chapter}
  \RedeclareSectionCommand[beforeskip=2\gridbaselineskip,afterskip=1\gridbaselineskip,runin=false,afterindent=false]{section}
}

\newcommand*{\usegridbox}[1]{%
  % independent from the real height and depth use the height an depth of one grid-line
  \ht#1\gridstrutheight
  \dp#1\gridstrutdepth
  \normalsize\usebox#1\par
}
\makeatletter
\renewcommand*{\chapterlinesformat}[3]{%
  \sbox\@tempboxa{\@hangfrom{#2}{#3}}%
  \usegridbox\@tempboxa
}
\renewcommand*{\sectionlinesformat}[4]{%
  \sbox\@tempboxa{\@hangfrom{\hskip#2#3}{#4}}%
  \usegridbox\@tempboxa
}
\makeatother

\begin{document}

\chapter{First}
\section{Lorem I}
\Blindtext[1]
\section{Lorem II}
\Blindtext[1]
\section{Lorem III}
\Blindtext[2]
\section{Lorm IV}
\Blindtext[1]

\end{document}

different font sizes

注意,这里我使用了一个非常简单的框大小更改:始终将标题的高度和深度设置为一条网格线的高度和深度。如果标题有多行,则必须使用更智能的方法来平衡标题前后所需的额外空间。然后,您还必须考虑标题多行的网格设置。使用所示的简单解决方案,一行标题始终与网格对齐。

相关内容