titleps 的 \ifthesection 如何工作?

titleps 的 \ifthesection 如何工作?

titleps文档提到:

(仅限titlesec。不在titleps。)\ifthechapter{⟨true⟩}{⟨false⟩}\ifthesection{⟨true⟩}{⟨false⟩}\ifthesubsection{⟨true⟩}{⟨false⟩}... 扩展为 ,⟨true⟩除非相应标题缺少标签,或上级之后还没有标题(例如,在\chapter和后续 之间\section)。

现在,考虑以下 MWE:

\documentclass[openany]{book}

\usepackage[pagestyles]{titlesec}
\usepackage{lipsum}

\renewcommand{\thechapter}{\Roman{chapter}}
\renewcommand{\thesection}{\arabic{section}}
\renewcommand{\thesubsection}{\arabic{subsection}}

\settitlemarks{chapter,section,subsection}
\newpagestyle{myPageStyle}[\scshape]{
    \headrule
    \sethead
    [\thechapter][\MakeLowercase\chaptertitle][]  % even
    {} % odd
    {\MakeLowercase\subsectiontitle}
    {   \ifthesection{
            \S\ \thesection\ifthesubsection{
                .\thesubsection
            }{\normalfont [no subsec detected]}
        }{\normalfont [no sec detected]}
    }
}

\pagestyle{myPageStyle}

\begin{document}
    \lipsum[1]
    \chapter{Call me by your name}
    \lipsum[1-15]
        \section{Elio}
        \lipsum[1-8]
            \subsection{Bach}
            \lipsum[1]
            \subsection{Oliver}
            \subsection{Marzia}
\end{document}

生成的 PDF 的最后一页如下所示:

在此处输入图片描述

我预料这很令人困惑,§1.1因为页面上出现的第一件事是\subsection{Bach}(第一部分)的延续。

另一方面,我确实按预期在 PDF 中获得了以下页面:

在此处输入图片描述

这是可以解释的,因为此页面上首先出现的文本不包含在任何小节中,而只包含在节中\section{Elio}

问题有人能解释一下发生了什么吗?我似乎无法从文档中弄清楚。

答案1

手册中描述了这种行为(第 4 页):

5. 标记
可以通过 4 种方式检索标记:
最高分如果页面以文本开头,则它们是属于该文本的章节单元的标记。如果页面以章节标题开头,则它们是该标题的标记。换句话说,顶部标记指的是紧邻标题的章节。
第一个分数第一个分区标题的标记。
底部标记最后一个(底部)分区标题的标记(也称为底部标记)。
下一个最高分底部标记,其值为下一页顶部标记的值(仅限直类或等效标记);通过从中选取某个值并将其与底部标记的相应值进行比较,您可以知道某一部分是否在下一页继续。当然,它不会经常使用。

然后在第 5 页:

\bottitlemarks \toptitlemarks \firsttitlemarks \nexttoptitlemarks \outertitlemarks \innertitlemarks\thesection这些命令设置了标记后续的、等 的值\sectiontitle将从中获取。...

可以在标题中自由使用它们;

默认设置似乎是第一个标记。如果你想标记最后一页巴赫§1.1那么你需要顶部标题标记:

\newpagestyle{myPageStyle}[\scshape]{
    \headrule
    \sethead
    [\thechapter][\MakeLowercase\chaptertitle][]  % even
    {} % odd
    {\toptitlemarks\MakeLowercase\subsectiontitle}
    {\toptitlemarks\ifthesection{
            \S\ \thesection\ifthesubsection{
                .\thesubsection
            }{\normalfont [no subsec detected]}
        }{\normalfont [no sec detected]}
    }
}

或者更简单,作为一个包选项:

\usepackage[pagestyles,topmarks]{titlesec}

结果:

在此处输入图片描述

相关内容