titlesec/titleps 与内部使用 \markboth 的软件包之间的交互不良

titlesec/titleps 与内部使用 \markboth 的软件包之间的交互不良

以下 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}

我已经追踪到这个问题,endfloatbiblatex在内部使用了\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”。

相关内容