我使用 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