我注意到paracol
paracol 包中的环境使得titleps 包中的\toptitlemarks
、\firsttitlemarks
和\bottitlemarks
不起作用。请参阅以下代码:
\documentclass{book}
\usepackage{titleps, paracol, lipsum}
\renewcommand\thesection{\arabic{section}}
\newpagestyle{main}{
\sethead{\toptitlemarks Top is \thesection}
{\firsttitlemarks First is \thesection}
{\bottitlemarks Bot is \thesection}
}
\pagestyle{main}
\begin{document}
\section{First}
\lipsum[1]
\section{Second}
\begin{paracol}{2}
\lipsum[1]
\switchcolumn
\lipsum[1]
\end{paracol}
\end{document}
标头的结果是:
Top is 2 First is 2 Bot is 2
但预期的结果是:
Top is 1 First is 1 Bot is 2
如果你注释掉这些paracol
行,你将得到预期的结果:
%\begin{paracol}{2}
\lipsum[1]
%\switchcolumn
\lipsum[1]
%\end{paracol}
为什么会paracol
导致此错误?我尝试了同样的事情,但使用 parcolumns 而不是 paracol,效果很好。但我不想使用 parcolumns,因为它有其他问题。有没有办法用 paracol 解决这个问题,如果没有,有没有比 paracol 更好的替代品?
答案1
@Amarakon 我的包extramarks
使用的定义与 不同topmark
。titleps
它使用原始的 TeX 定义“上一页的最后一个标记”,在您的示例中该标记将为空。但是,如果我理解正确的话,titleps
如果该标记之前没有文本,则使用该页面的第一个标记;如果该标记之前有文本,则使用该页面的最后一个标记;否则,使用该页面上的第一个标记。
没有简单的方法可以用 获得相同的结果extramarks
。而且,extramarks
也没有解决 的问题titleps
。顺便说一句,没有“ 的修补版本paracol
”,补丁是在加载 时动态应用的extramarks
。
如果你想尝试,可以访问https://github.com/pietvo/fancyhdr/tree/5.0beta
这里有一个与您的问题相近的解决方案,但是该解决方案在顶标的处理上有所不同。
\documentclass{book}
% !!!! Needs package `extramarks' version 5.0 or 5.0beta.
\usepackage{fancyhdr, extramarks, paracol, lipsum}
\renewcommand\thesection{\arabic{section}}
% This approximates the `titleps' `topmark`, but it is not the same.
\ExplSyntaxOn
\tl_new:N \tl_toporfirst
\newcommand{\toporfirstxmark}{%
\tl_set:Nx \tl_toporfirst \topleftxmark
\tl_if_empty:VTF \tl_toporfirst {\firstleftxmark} {\topleftxmark}
}
\ExplSyntaxOff
\renewcommand{\sectionmark}[1]{\extramarks{\thesection}{#1}}
\fancypagestyle{main}{
\fancyhead[L]{Top is \toporfirstxmark}
\fancyhead[C]{First is \firstleftxmark}
\fancyhead[R]{Bot is \lastleftxmark}
}
\pagestyle{main}
\begin{document}
\section{First}
\lipsum[1]
\section{Second}
\begin{paracol}{2}
\lipsum[1]
\switchcolumn
\lipsum[1]
\end{paracol}
\end{document}