titlesec:\sectionmark 破坏\ifthesection?

titlesec:\sectionmark 破坏\ifthesection?

在包中,只有当定义了 时,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

相关内容