包的默认行为memoir
是在分段后立即更改标题。这对我来说是违反直觉的,因为我认为标题是为了提醒读者他们当前正在阅读的章节。当开始新的章节时,这没有必要,因为章节标题会为他们做到这一点。读者仍然需要提醒他们正在阅读哪个章节精加工而不是他们正在开始什么。
我如何才能改变这种行为,以便标题在下一个部分命令后的页面,而不是部分命令的实际页面?
如果您运行下面提供的 MWE,请查看第 2-4 页。我想要以下标题:
第 2 页:标题如我所愿
第 3 页:我希望标题与第 2 页的标题一致
第 4 页:标题如我所愿
我可以在 内完成此事
memoir
吗?
梅威瑟:
\documentclass[17pt,letterpaper,oneside]{memoir}
\usepackage{lipsum}
\copypagestyle{MWE}{headings}
\makepsmarks{MWE}{%
\nouppercaseheads
\createmark{section}{right}{nonumber}{}{}
\createmark{chapter}{left}{shownumber}{Chapter\ }{:\ }}
\makeoddhead{MWE}{\leftmark}{}{\rightmark}
\makeoddfoot{MWE}{}{\thepage}{}
\pagestyle{MWE}
\begin{document}
\chapter{The MWE}
\section{Introduction}
\lipsum[1-5]
\section{History of the MWE}
\lipsum[6-10]
\end{document}
答案1
对于每个标记,TeX 设置了三个变量:\botmark
、\firstmark
和\topmark
。
而\leftmark
使用\botmark
(当前页面上的最后一个设置标记)则\rightmark
使用\firstmark
(当前页面上的第一个设置标记)。
但是您想使用\topmark
上一页的最后一个标记。
根据\rightmark
latex.ltx
\let\@rightmark\@secondoftwo
...
\def\rightmark{\expandafter\@rightmark\firstmark\@empty\@empty}
你可以定义
\providecommand*{\righttopmark}{\expandafter\@rightmark\topmark\@empty\@empty}
然后使用\righttopmark
而不是\rightmark
:
\documentclass[17pt,letterpaper,oneside]{memoir}
\usepackage{lipsum}
\makeatletter
\providecommand*{\righttopmark}{\expandafter\@rightmark\topmark\@empty\@empty}
\makeatother
\copypagestyle{MWE}{headings}
\makepsmarks{MWE}{%
\nouppercaseheads
\createmark{section}{right}{nonumber}{}{}
\createmark{chapter}{left}{shownumber}{Chapter\ }{:\ }}
\makeoddhead{MWE}{\leftmark}{}{\righttopmark}
\makeoddfoot{MWE}{}{\thepage}{}
\pagestyle{MWE}
\begin{document}
\chapter{The MWE}
\section{Introduction}
\lipsum[1-5]
\section{History of the MWE}
\lipsum[6-10]
\end{document}