正确捕捉章节名称

正确捕捉章节名称

我有一个如下所示的代码:

\documentclass{scrbook}
\usepackage[automark]{scrpage2}
\usepackage{lipsum}


\let\oldchapter\chapter
\newcommand\temphead{}
\newcommand\chaphead{}
\renewcommand\chapter[2][\temphead]{%
    \renewcommand\temphead{#2}%
    \renewcommand\chaphead{#2}%                     
    \oldchapter[#1]{#2}}

\title{My title}

\makeatletter             
\let\titlehead\@title         
\makeatother

\cfoot[\rule{6mm}{0.8pt}\\\pagemark]{\rule{6mm}{0.8pt}\\\pagemark}
\ofoot[]{}
\lehead[]{}
\cehead[]{\titlehead}    
\cohead[]{\chaphead}                                          
\ohead[]{}

\renewcommand*{\chapterpagestyle}{scrplain}


\begin{document}
\pagestyle{scrheadings}

\chapter{My first chapter}

\lipsum
\lipsum


\chapter{My second chapter}

\end{document}

目标是在右页显示章节名称,在左页显示书名。

现在,当新章节之前的页面是右页时,显示的章节是下一章的章节。我的示例代码显示了这一点,因为第一章的最后一页显示“我的第二章”。

我怎样才能解决这个问题?

答案1

您可以在 之前添加\clearpage或 (如果需要) 。\cleardoublepage\chapter{My second chapter}

答案2

常规\chapter包含\cleardoublepage(其作用类似于\clearpage单面文档)。您需要\cleardoublepage在更改页眉之前添加 以清除上一章的最后一页。\cleardoublepage中的第二个\oldchapter不会导致任何空白页。

\renewcommand\chapter[2][\temphead]{%
    \cleardoublepage
    \renewcommand\temphead{#2}%
    \renewcommand\chaphead{#2}%
    \oldchapter[#1]{#2}}

这使得您的新\chapter作品与主文件\input和或一起工作。\include

答案3

不是重新定义\chapter命令以更改章节的标题条目。要从标题标记中删除章节编号,只需重新定义\chaptermarkformat即可:

\renewcommand\chaptermarkformat{}

请注意,当加载(或)并且为普通页面设置页面样式时,默认scrplain使用。\chapterpagestylescrlayer-scrpagescrpage2scrheadings

带有包scrlayer-scrpage(的后继scrpage2) 的示例:

\documentclass
[footheight=27.2pt]% as suggested by scrlayer-scrpage
{scrbook}
\usepackage{lipsum}% only for dummy text

\renewcommand\chaptermarkformat{}% remove the chapter number from header entries

\usepackage[automark]{scrlayer-scrpage}% sets pagestyle scrheadings
\clearpairofpagestyles
\cfoot[\rule{6mm}{0.8pt}\\\pagemark]{\rule{6mm}{0.8pt}\\\pagemark}
\cehead{\titleheading}
\cohead{\leftmark}

\makeatletter
\newcommand\titleheading{\@title}
\makeatother
\title{My title}

\begin{document}
\pagestyle{scrheadings}
\chapter{My first chapter}
\lipsum[1-15]

\chapter{My second chapter}
\lipsum[1-200]
\end{document}

过时的包的示例scrpage2

\documentclass{scrbook}
\usepackage{lipsum}% only for dummy text

\renewcommand\chaptermarkformat{}% remove the chapter number from header entries

\usepackage[automark]{scrpage2}
\pagestyle{scrheadings}
\clearscrheadfoot
\cfoot[\rule{6mm}{0.8pt}\\\pagemark]{\rule{6mm}{0.8pt}\\\pagemark}
\cehead{\titleheading}
\cohead{\leftmark}

\makeatletter
\newcommand\titleheading{\@title}
\makeatother
\title{My title}

\begin{document}
\pagestyle{scrheadings}
\chapter{My first chapter}
\lipsum[1-15]

\chapter{My second chapter}
\lipsum[1-200]
\end{document}

答案4

问题是我使用了\input而不是\include来包含章节文件。这导致\chaphead宏包含错误的值。欢迎解释为什么会发生这种情况。

相关内容