在页眉中包括章、节和小节

在页眉中包括章、节和小节

我正在使用 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使用新标记的第一个值以及左标记和右标记的最后一个值。

相关内容