回忆录类——显示子部分的标题

回忆录类——显示子部分的标题

我正在尝试使用回忆录类创建一个小节标题。问题如下:

我想为我的子部分显示一个标题。文本应在子部分标题之后立即开始,作为新行,而不是新段落。

Memoir 将长度设置为标题后的垂直空间 afterskip + \parskip(of heading font) + \baselineskip(of text font)。要解决这个问题,将 afterskip 设置为 -parskip 是可行的。但是,如果 afterskip 变为负值,标题将变成连字符样式。

我使用以下最小示例进行了测试:

\documentclass[11pt]{memoir}
\parskip9pt
\parindent0pt

\setcounter{secnumdepth}{2}
\setbeforesubsubsecskip{9pt}
\setaftersubsubsecskip{1pt}

\setsubsubsecheadstyle{\scshape}
\begin{document}

\subsubsection{lorem ipsum}
lorem ipsum

lorem ipsum 
\end{document}

我以前用过 titlesec 包,它很棒,直到我尝试使用 \titleref... 这个 \titleref 不适用于此包,仅适用于章节。如果我不使用 titlesec,章节的引用也很好用。

答案1

这是一个临时修复

\makeatletter
\renewcommand{\@startsection}[6]{%
  \@nameuse{#1block}%
  \ifraggedbottomsection\if@nobreak\else
    \vskip\z@\@plus\bottomsectionskip
    \penalty\z@
    \vskip\z@\@plus -\bottomsectionskip
  \fi\fi
  \def\m@msecn@me{#1}%
  \if@noskipsec \leavevmode \fi
  \par
  \@tempskipa #4\relax
  \@afterindenttrue
  \ifdim \@tempskipa <\z@
    \@tempskipa -\@tempskipa \@afterindentfalse
  \fi
  \if@nobreak
    \everypar{}%
  \else
    \addpenalty\@secpenalty%
    \addvspace\@tempskipa
    \addvspace{-\parskip}% <--- added
  \fi
  \@ifstar
    {\@ssect{#3}{#4}{#5}{#6}}%
    {\@trplargoom{\M@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}

\def\@xsect#1{%
  \@tempskipa #1\relax
  \ifdim \@tempskipa>\z@
  \par
  \nobreak
  \vskip \@tempskipa
  \vskip-\parskip% <--- added
  \@afterheading
  \else
  \@nobreakfalse
  \global\@noskipsectrue
  \everypar{%
    \if@noskipsec
     \global\@noskipsecfalse
     {\setbox\z@\lastbox}%
     \clubpenalty\@M
     \begingroup \@svsechd \endgroup
     \unskip
     \@tempskipa #1\relax
     \hskip -\@tempskipa
     \else
    \clubpenalty \@clubpenalty
    \everypar{}%
     \fi}%
   \fi
  \ignorespaces}
\makeatother

答案2

我刚刚删除了 \parskip 对章节间距的影响,可能还有一个想法可以在分段结构中引入它

尚未这样做的一个原因是,在大多数情况下,没有 parindent 和非零 parskip 的文档对于交流来说不是特别好,特别是如果文档有许多列表或显示的数学运算。

相关内容