我正在使用该类memoir
尝试自定义较低级别标题的外观。在一种情况下,我想要实现的功能非常简单:在标题末尾添加一个句点(例如,模拟amsart
for 的作用\subsection
)。我希望只将句点添加到文档中显示的标题中,而不是目录中:这就是我不愿意在每个标题文本末尾手动添加句点的原因。
我没有找到使用memoir
类提供的功能来实现这一点的方法,无论是在memoir
指南中还是在互联网上。事实上,我相信最新的memoir
指南暗示这是不可能的。第 6.6 节内容如下:
较低级别的标题(从章节到子段落)也是可配置的,但没有与章节样式相对应的内容。这些标题主要有三项可以调整:(a) 标题上方文本基线与标题文本基线之间的垂直距离,(b) 标题与左边距的缩进,以及 (c) 标题使用的样式(字体)。
在 LaTeX 中处理此类自定义的最常见(与类无关)方法是使用包,titlesec
但我经常读到它titlesec
与有点不兼容memoir
。不过,我浏览了memoir
指南,找不到不兼容声明。相反,第八版的介绍指出:
该类还提供与以下软件包提供的功能类似的功能,尽管命令不同:,,,,,,。
crop
您可以根据需要使用这些软件包,或者仅使用 memoir 类的功能。fancyhdr
geometry
sidecap
subfigure
titlesec
使用 时,哪种方式可以正确执行此类自定义memoir
?memoir
和titlesec
现在兼容吗? 如果兼容,那么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}