![titlesec/titleps 与内部使用 \markboth 的软件包之间的交互不良](https://linux22.com/image/328056/titlesec%2Ftitleps%20%E4%B8%8E%E5%86%85%E9%83%A8%E4%BD%BF%E7%94%A8%20%5Cmarkboth%20%E7%9A%84%E8%BD%AF%E4%BB%B6%E5%8C%85%E4%B9%8B%E9%97%B4%E7%9A%84%E4%BA%A4%E4%BA%92%E4%B8%8D%E8%89%AF.png)
以下 MWE 演示了endfloat
和之间的不良交互titleps
。第二页的页眉和页脚中均有大写的 FIGURES 字样,违反了页面样式规范。
\documentclass[12pt]{article}
\usepackage[heads,nolists]{endfloat}
\usepackage[pagestyles]{titlesec}
\newpagestyle{main}{
\sethead{}{}{\thepage}
\setfoot{}{}{}
}
\begin{document}
\pagestyle{main}
\section{Foo}
\section*{Bar}
\begin{figure}
Blurf
\end{figure}
\end{document}
biblatex
也受到影响:在这种情况下,REFERENCES 同时出现在页脚和页眉中。
\begin{filecontents*}{\jobname.bib}
@book{Saussure1995,
Title = {Cours de Linguistique Générale},
Publisher = {Payot},
Year = {1995},
Author = {Ferdinand de Saussure},
}
\end{filecontents*}
\documentclass{article}
\usepackage{kantlipsum}
\usepackage[style=authoryear]{biblatex}
\addbibresource{\jobname.bib}
\usepackage{titleps}
\newpagestyle{main}{
\setfoot{My footer}{}{\thepage}
}
\pagestyle{main}
\begin{document}
\cite{Saussure1995}
\kant[1-2]
\printbibliography
\end{document}
我已经追踪到这个问题,endfloat
并biblatex
在内部使用了\mark
命令。具体来说,如果我重新定义为不执行任何操作(仍然消耗两个参数),问题就会消失\markboth
。不过,我觉得这样做不太安全。至少我想知道是否还有其他东西需要同样的处理,以及可能会出现什么问题。
titleps 文档警告说“使用\markboth
可能会导致不可预测的结果”,但是当它是一个软件包认为可以使用的文档化接口时,这是一个令人失望的借口。
有什么建议吗?
答案1
将以下几行添加到序言中。
\makeatletter
\let\ttl@titlemarks\relax
\makeatother
然后这两个示例就可以正常工作了。这也有助于自定义索引中的 titleps 标题以包含当前索引条目。
答案2
这不是答案,但评论太长了。
是否以及如何\markboth
处理命令是问题的一部分。但在示例中,页面样式除了页码之外是空白的,因此不应显示标记命令的内容。这显然是一个错误,应报告给 titleps 的作者。一个演示该问题的简单示例是:
\documentclass[12pt]{article}
\usepackage{titleps}
\newpagestyle{main}{
\sethead{}{}{}
\setfoot{}{}{}
}
\begin{document}
\pagestyle{main}
\mark{abc}
blub
\end{document}
它在页眉和页脚中打印“bc”。