在包中,只有当定义了 时,titlesec
才可以使用\ifthesection
(或,...) 命令来应用一些自定义命令。但是,使用(例如定义一个简短的运行标题)似乎会破坏此功能。以下是 MWE:\ifthechapter
\section
\sectionmark
\documentclass{book}
\usepackage[pagestyles,outermarks]{titlesec}
\usepackage{lipsum}
\newpagestyle{main}{
\headrule
\sethead[\normalsize \thepage][][\scshape \chaptertitlename~\thechapter. \chaptertitle]
{\ifthesection{\thesection.~\sectiontitle}{}}{}{\normalsize \thepage}
}
\begin{document}
\tableofcontents
\pagestyle{main}
\chapter{First Chapter}
\lipsum
\lipsum
\chapter{Second Chapter}
\section{First Section}
\lipsum
\lipsum
\section{Second Section with a very long title that I do not want to show in the running heads but which is fine for the table of contents}
\sectionmark{Second Section}
\lipsum
\end{document}
在此示例中,第 1 章(没有章节的章节)的奇数侧标题仅显示页码,正如预期的那样(特别是该\ifthesection
命令阻止显示点):
在第 2 章中,我们有第一部分,其中一切正常:
但是,当涉及到第二部分时,事情就变得更加复杂了,因为它有一个很长的名称。让我们想象一下,我们想要在目录中使用全名,在标题中使用简短的标题。该命令\sectionmark{Second Section}
通常有效,但在标题样式定义中使用时则无效\ifthesection
。在当前形式中,我们得到:
我可以想到三种解决这个问题的可能性:
- 一种解决方案是删除
\ifthesection
标题样式定义中的命令,但这样一来,没有章节的章节标题中就会出现一个点。然后就需要另一种方法来测试是否应该打印这个点(或任何其他字符)。 - 使用命令的可选参数
\section
:\section[Second Section]{Second Section with a very long title that I do not want to show in the running heads but which is fine for the table of contents}
。然后需要进行修改目录以显示全名。 - 尝试使用标记来用
\sectionmark{Second Section}
适当的命令替换而不会破坏\ifthesection
命令。
我觉得最好选择第三种解决方案,其他两种看起来更像是变通方法。但是,我对分数系统不太了解。有人知道怎么做吗?
答案1
这是想要的:一个明确的\sectionmark
命令使之为\ifthesection
假。您可以通过定义类似于不执行该设置的titlesec
宏来忽略此设置:\sectionmark
\makeatletter
\newcommand{\sectionmarkhead}[1]{%
\gdef\sectiontitle{#1}%
\let\ttl@marks\ttl@tm@section
\ttl@markboth {section}}
\makeatother
如果你使用,\sectionmarkhead{Second section}
你就会得到期望的结果。
答案2
如果您始终希望目录中有全名(即解决方案 2),请使用包选项toctitles
。