左页和右页上 \mark 命令的不对称处理

左页和右页上 \mark 命令的不对称处理

我使用 longtable 处理类似字典的索引。使用/mark手动设置书籍对开页的页眉时,我观察到一种奇怪的不对称现象,这在一个博客作为

您应该注意到,左侧标题是由页面结束前的最后一个 \markboth 命令生成的,而右侧标题则由页面上出现的第一个 \markboth 或 \markright 命令生成(如果有),否则由页面前的最后一个命令生成。

我尝试查看这是否确实是以下 MVE 问题的根源:

%\documentclass{article}
\documentclass{scrbook}
\usepackage[german]{babel}  
\usepackage{booktabs,array,microtype, longtable}
\usepackage{alltt}  % to use input with commands 
\usepackage{fontspec}
\newfontfamily{\tablefont}{ebgaramond}
\usepackage{lmodern} % to avoid scalable font error
\usepackage[automark,headsepline,plainheadsepline]{scrlayer-scrpage}

\begin{document}
    some text 0  

    \markboth{firstLeft}{firstRight}  % on first page right (first seen on page)
    some text 1  

    \markboth{secondLeft}{secondRight} % no effect 

\clearpage 
some text 2 

    \markboth{thirdLeft}{thirdRight} % on second right  (first seen on page)
    % with scrbook: fourth left (last seen on page)

some text3 

\markboth{fourthLeft}{fourthRight}
some text4 

\clearpage 
    some text 5         % with header fourthRight )  -- last one seen 

\end{document}

将文档类设置为带对开页的书籍样式时,输出会发生变化:页眉不是第一个,而是页面上标记的最后一个页眉。这对于索引来说是不正确的:每页(左页或右页)上的页眉应为第一个条目(第一个\markboth)值。

有办法纠正这个问题吗?

答案1

如果您使用 KOMA-Script,就像在 MWE 中一样,您可以在标题中使用\leftfirstmark而不是:\leftmark

\documentclass{scrbook}

\usepackage[headsepline]{scrlayer-scrpage}
\lehead{\leftfirstmark}

\begin{document}

some text 0

\markboth{firstLeft}{firstRight}
some text 1

\markboth{secondLeft}{secondRight}

\clearpage 
some text 2

\markboth{thirdLeft}{thirdRight}

some text 3

\markboth{fourthLeft}{fourthRight}
some text 4

\clearpage 
some text 5

\end{document}

如果您不使用 KOMA-Script,您仍然可以加载scrlayer-scrpage并使用上述解决方案。默认情况下,运行头打印在页面的外侧,因此您必须重新定义\rehead而不是\lehead

\documentclass{book}

\usepackage[headsepline]{scrlayer-scrpage}
\rehead{\leftfirstmark}

如果不想使用scrlayer-scrpage,可以打补丁来代替\leftmark使用。\firstmark\botmark

\usepackage{etoolbox}
\patchcmd\leftmark{\botmark}{\firstmark}{}{}

如果\leftmark没有被你加载的文档类或包改变,则相当于

\makeatletter
  \renewcommand*\leftmark{\expandafter\@leftmark\firstmark\@empty\@empty}
\makeatother

相关内容