使用 memoir 时标题中的 \caps(来自 soul 包)存在问题

使用 memoir 时标题中的 \caps(来自 soul 包)存在问题

我正在用 LaTeX 出版我的第三本书。第二本书和第三本书之间有很长的间隔,但显然有些东西发生了变化,破坏了我的标题格式。当我尝试重新 LaTeX 我的旧文件(用于创建以前书籍的 PDF 文件的文件)时,出现了一个以前从未发生过的错误。

我正在使用 soul 包来更好地处理全大写文本,我将其放在页面标题中。出于某种原因,“\caps”控制序列导致 MikTeX 抛出以下错误:“\@uclcnotmath 的参数有一个额外的 }”

下面是一个最简单的例子。如果我从标题定义中删除“\caps”,错误就会消失。

有什么建议可以解决这个问题吗?我之前的书大约是 5 年前写的。我不知道为什么现在这个方法不再管用了。

\documentclass[a5paper,openright, onecolumn, 11pt]{memoir}
\usepackage{soul}

\makepagestyle{headings}
\makeevenhead{headings}{}{}{}
\makeoddhead{headings}{}{}{\caps\rightmark}
\makepsmarks{headings}{%
\createmark{chapter}{both}{nonumber}{}{}
\def\sectionmark##1{
\markright{##1}}}

\pagestyle{headings}

\checkandfixthelayout

\begin{document}
\chapter{Chapter Title}

This is page 1

\eject

This is page 2

\eject

This is page 3

\end{document} 

答案1

该问题是由于 -package 的扩展方式造成的soul,它不适用于\rightmark

摘自文档,部分2.2.[有些事情是可行的……]…其他人则不然

§24 需要扩展的材料:

例子:\so{\romannumeral\year}

在这个例子中,\so会尝试在\romannumeral和之间留出空格\year,当然,这是行不通的。你必须先扩展参数,然后再将其提供给灵魂,或者更好的办法是:将材料包装在一个命令序列中,然后让灵魂扩展它:\def\x{\romannumeral\year} \so\x。灵魂会努力扩展足够多,但不会太多。

我们可以通过将其放入您的定义中来规避这个问题\sectionmark

\def\sectionmark##1{\markright{\caps{##1}}}}

因为这将正确扩展,并\caps{}从您的中删除\makeoddhead

代码

\documentclass[a5paper,openright, onecolumn, 11pt]{memoir}
\usepackage{soul}

\makepagestyle{headings}
\makeevenhead{headings}{}{}{}
\makeoddhead{headings}{}{}{\rightmark}
\makepsmarks{headings}{%
\createmark{chapter}{both}{nonumber}{}{}
\def\sectionmark##1{\markright{\caps{##1}}}}

\pagestyle{headings}

\checkandfixthelayout

\begin{document}
\chapter{Chapter Title}

This is page 1

\eject

This is page 2

\eject

This is page 3

\end{document} 

相关内容