我正在用 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}