![在页眉中包括章、节和小节](https://linux22.com/image/383382/%E5%9C%A8%E9%A1%B5%E7%9C%89%E4%B8%AD%E5%8C%85%E6%8B%AC%E7%AB%A0%E3%80%81%E8%8A%82%E5%92%8C%E5%B0%8F%E8%8A%82.png)
我正在使用 scrlayer-scrpage 来获取页眉中的章节和部分:
\documentclass{scrreprt}
\usepackage[headsepline,automark,autooneside=false]{scrlayer-scrpage}
\clearpairofpagestyles
\ihead{\leftmark\ifstr{\rightmark}{\leftmark}{}{ --- \rightmark}}
% remove section numbers before section text
\renewcommand*{\sectionmarkformat}{}
\usepackage{lipsum}
\begin{document}
\chapter{Cht}
\section{Sct}
\lipsum
\subsection{Subsection}
\lipsum
\section{SScctt}
\lipsum
\chapter{Next}
\lipsum
\end{document}
导致:
1 Cht — Sct
但是,有没有办法包含该子部分?这样它看起来就像这样:
1 Cht — Sct — 小节
有没有办法检查当前章节中是否有当前的节/小节,因为我见过该节引用上一章的情况……
答案1
也许下面的操作可以满足您的要求:
\documentclass{scrreprt}
\usepackage[headsepline,autooneside=false]{scrlayer-scrpage}
\automark[subsection]{section}
\renewcommand*{\sectionmarkformat}{}
\renewcommand*{\subsectionmarkformat}{}
\newmarks\chaptermarkwithnum
\makeatletter
\renewcommand\chaptermark[1]{%
% code changed/added by @Schweinebacke:
\begingroup
\let\label\relax \let\index\relax \let\glossary\relax
\@temptokena{\ifnumbered{chapter}{\chaptermarkformat}{}#1}%
\unrestored@protected@xdef\@themark{\the\@temptokena}%
\@temptokena\expandafter\expandafter{\expandafter\MakeMarkcase\expandafter{\@themark}}%
\marks\chaptermarkwithnum{\the\@temptokena}%
\endgroup
%
\markboth{}{}%
}
\makeatother
\clearpairofpagestyles
\ihead{%
\firstmarks\chaptermarkwithnum
\ifstr{\leftbotmark}{}{}{
--- \leftbotmark\ifstr{\rightbotmark}{\leftbotmark}{}{ --- \rightbotmark}%
}%
}
\usepackage{lipsum}
\begin{document}
\chapter{Cht}
\section{Sct}
\lipsum
\subsection{Subsection}
\lipsum
\section{SScctt}
\lipsum
\chapter{Next}
\lipsum
\end{document}
标记机制用于运行标题条目。标记命令设置三个变量:一个用于上一页的最后一个标记,一个用于当前页上设置的第一个标记,一个用于当前页上设置的最后一个标记。当页面开始时,这三个变量相等。
\markright
将其参数设置为“右”标记。\markboth
将其第一个参数设置为“左”标记,将其第二个参数设置为“右”标记。
\rightmark
使用 或页面上的\markright
第二个参数设置的第一个“右”标记。使用 的第一个参数设置的最后一个(底部)“左”标记。KOMA-Script 类还提供、、等。\markboth
\leftmark
\markboth
\righttopmark
\rightfirstmark
\rightbotmark
\lefttopmark
如果章节、节和小节应位于页眉中,则需要 3 个标记。
\automark[subsection]{section}
每个\section
命令\markboth
都使用其第一个和第二个参数中的节来执行,每个命令都使用其参数中的子节来\subsection
执行。因此是页面上的最后一节,并且是页面上的最后一节或最后一个子节。\markright
\leftbotmark
\rightbotmark
要在第三个标记中添加章节,必须定义一个附加标记。在示例中,它是\chaptermarkwithnum
。然后\chaptermark
重新定义为设置此新标记。因此,使用了 LaTeX 的 \markboth 定义的改编版(感谢@Schweinebacke)。另外\markboth{}{}
清除“右”和“左”标记。因此,在新章节中,\leftbotmark
和\rightbotmark
在下一个\section
命令之前都是空的。
对于标题条目,\ihead
使用新标记的第一个值以及左标记和右标记的最后一个值。