使用回忆录类时如何定制较低级别的标题?(或者:titlesec 仍然与回忆录不兼容?)

使用回忆录类时如何定制较低级别的标题?(或者:titlesec 仍然与回忆录不兼容?)

我正在使用该类memoir尝试自定义较低级别标题的外观。在一种情况下,我想要实现的功能非常简单:在标题末尾添加一个句点(例如,模拟amsartfor 的作用\subsection)。我希望只将句点添加到文档中显示的标题中,而不是目录中:这就是我不愿意在每个标题文本末尾手动添加句点的原因。

我没有找到使用memoir类提供的功能来实现这一点的方法,无论是在memoir指南中还是在互联网上。事实上,我相信最新的memoir指南暗示这是不可能的。第 6.6 节内容如下:

较低级别的标题(从章节到子段落)也是可配置的,但没有与章节样式相对应的内容。这些标题主要有三项可以调整:(a) 标题上方文本基线与标题文本基线之间的垂直距离,(b) 标题与左边距的缩进,以及 (c) 标题使用的样式(字体)。

在 LaTeX 中处理此类自定义的最常见(与类无关)方法是使用包,titlesec但我经常读到它titlesec与有点不兼容memoir。不过,我浏览了memoir指南,找不到不兼容声明。相反,第八版的介绍指出:

该类还提供与以下软件包提供的功能类似的功能,尽管命令不同:,,,,,,。crop您可以根据需要使用这些软件包,或者仅使用 memoir 类的功能。fancyhdrgeometrysidecapsubfiguretitlesec

使用 时,哪种方式可以正确执行此类自定义memoirmemoirtitlesec现在兼容吗? 如果兼容,那么memoir将标题自定义(例如:\setsecheadstyle\setaftersubsecskip与混合使用是否安全,或者如果我使用它,titlesec我应该坚持使用吗?titlesec

答案1

这可能有用。未使用 hyperref 测试!

基本上,我们剖析memoir源代码并用它etoolbox来修补宏。但请注意,这并不包括\section*朋友,他们必须以略有不同的方式完成,这里省略。

\documentclass[a4paper]{memoir}
\usepackage{etoolbox}
\makeatletter
% adapted from from amsthm
\def\MY@addpunct#1{%
  \relax\ifhmode
    \ifnum\spacefactor>\@m \else#1\fi
  \fi}

\patchcmd{\M@sect}{\@M#9\@@par}{\@M#9\MY@addpunct{.}\@@par}{
  \typeout{\string\M@sect\space patched (1)}
}{
  \typeout{\string\M@sect\space not patched (1)}
}
\patchcmd{\M@sect}{\@svsec #9}{\@svsec#9\MY@addpunct{.}}{
  \typeout{\string\M@sect\space patched (2)}
}{
  \typeout{\string\M@sect\space not patched (2)}
}
\makeatother


\begin{document}

\section{test}

\end{document}

相关内容