![保持右侧标记清晰直到章节开始](https://linux22.com/image/300874/%E4%BF%9D%E6%8C%81%E5%8F%B3%E4%BE%A7%E6%A0%87%E8%AE%B0%E6%B8%85%E6%99%B0%E7%9B%B4%E5%88%B0%E7%AB%A0%E8%8A%82%E5%BC%80%E5%A7%8B.png)
我希望将章节标题放在单面文档的左上角,将节标题放在右上角。只有当该面确实有一个节时,右上角才会填充。我的问题可以通过此 MWE 重现:
\documentclass{scrreprt}
\usepackage{lipsum}
\usepackage{scrpage2}
\pagestyle{scrheadings}
\clearscrheadfoot
\automark[section]{chapter}
\ihead[\leftmark]{\leftmark}
\chead{}
\ohead{\rightmark}
\begin{document}
\chapter{chapter}
\lipsum \lipsum
\section{section}
\lipsum
\end{document}
这\ohead{\rightmark}
是有点故意为之,因为我不希望章节标题出现在新章节的第一页。
真正的问题出现在第 2 页,页眉显示为“1. 章节.... 1. 章节”。我怎样才能使右上角空白?
抱歉,问题的标题可能不太好,但如果我能说得更清楚一些,谷歌可能会帮助解决这个问题......
答案1
请注意scrpage2
已贬值。后继者是scrlayer-scrpage
。
您可以\ifstr
从scrbase
包中使用:
\ohead{\ifstr{\leftmark}{\rightmark}{}{\rightmark}}
包裹scrbase
由 KOMA-Script 类加载,命令在 KOMA-Script 文档中有说明scrguien.pdf:
\ifstr{<string>}{<string>}{<then instructions>}{<else instructions>}
两个
<string>
参数都会被展开,然后进行比较。如果展开相同,则<then instructions>
执行,否则执行<else instructions>
。
这也适用于目录或\addchap
和\addsec
。
\documentclass{scrreprt}
\usepackage{blindtext}
\usepackage[autooneside=false]{scrlayer-scrpage}
\automark[section]{chapter}
\clearpairofpagestyles
\ihead[\leftmark]{\leftmark}
\ohead{\ifstr{\leftmark}{\rightmark}{}{\rightmark}}
\begin{document}
\tableofcontents
\chapter{chapter}
\Blindtext[10]
\section{section}
\Blindtext
\addchap{chapter}
\Blindtext[10]
\addsec{section}
\Blindtext
\Blinddocument\Blinddocument\Blinddocument
\Blinddocument\Blinddocument\Blinddocument
\end{document}
\ihead
注意新版本中有KOMA-Script 版本 3.14允许使用\ihead*{\leftmark}
而不是\ihead[\leftmark]{\leftmark}
。不幸的是,此版本尚未在 CTAN 上推出。
被贬低的建议scrpage2
:
\documentclass{scrreprt}
\usepackage{blindtext}
\usepackage{scrpage2}
\automark[section]{chapter}
\pagestyle{scrheadings}
\clearscrheadfoot
\ihead[\leftmark]{\leftmark}
\ohead{\ifstr{\leftmark}{\rightmark}{}{\rightmark}}
\begin{document}
\tableofcontents
\chapter{chapter}
\Blindtext[10]
\section{section}
\Blindtext
\addchap{chapter}
\Blindtext[10]
\addsec{section}
\Blindtext
\Blinddocument\Blinddocument\Blinddocument
\Blinddocument\Blinddocument\Blinddocument
\end{document}
答案2
使用您当前的设置,只需修补要调用的文档的开头\chaptermark
A
并仅使用左侧标记即可;保持右侧标记为空:B
D
\@mkboth
\usepackage{etoolbox}
\makeatletter
\AtBeginDocument{%
\patchcmd{\chaptermark}% <cmd>
{\@mkboth}% <search>
{\chaptermkboth}% <replace>
{}{}% <success><failure>
}
\newcommand{\chaptermkboth}[2]{\@mkboth{#1}{}}
\makeatother
\@mkboth
inside还有其他用途\chaptermark
,但在这种情况下,第一个用途似乎是最重要的。
\documentclass{scrreprt}
\usepackage{lipsum,etoolbox}
\usepackage{scrpage2}
\pagestyle{scrheadings}
\clearscrheadfoot
\automark[section]{chapter}
\ihead[\leftmark]{\leftmark}
\chead{}
\ohead{\rightmark}
\makeatletter
\AtBeginDocument{%
\patchcmd{\chaptermark}% <cmd>
{\@mkboth}% <search>
{\chaptermkboth}% <replace>
{}{}% <success><failure>
}
\newcommand{\chaptermkboth}[2]{\@mkboth{#1}{}}
\makeatother
\begin{document}
\chapter{chapter}
\lipsum \lipsum
\section{section}
\lipsum
\end{document}