无法使用 titlesec 编辑 \sectionmark

无法使用 titlesec 编辑 \sectionmark

我想让未编号的章节/节出现在标题中,因此我使用了 titlesec 并定义了一个页面样式,该样式仅在左/右标记中显示章节/节标题。现在,我希望编号的章节显示为“第 X 章。章节标题”,对于节,它将显示为“XY 节标题”。对于未编号的,它将仅显示“章节标题”和“节标题”。

我的解决方案是编辑\chaptermark如下\sectionmark内容:

\titleformat{\chapter}[display]
{\chaptermark{This is a test \thechapter. #1}\bfseries \Huge}
{\chaptertitlename \hspace{0ex} \thechapter}
{2ex}
{#1}

它适用于章节、未编号章节、未编号部分但不适用于部分

分数维:

\documentclass{book}
\usepackage[pagestyles,explicit]{titlesec}
\newpagestyle{myps}[\scshape]{%
  \sethead[\footnotesize \oldstylenums{\thepage}][][\chaptertitle]% even
          {\sectiontitle}{}{\footnotesize \oldstylenums{\thepage}} % odd
}

\titleformat{name=\chapter , numberless}
 {\chaptermark{#1}\normalfont\bfseries\Huge \filcenter}
 {}
 {0pt}
 {#1}
 
\titleformat{\chapter}[display]
{\chaptermark{This is a test \thechapter. #1}\bfseries \Huge}
{\chaptertitlename \hspace{0ex} \thechapter}
{2ex}
{#1}

\titleformat{\section}
{\sectionmark{This is a test \thesection #1} \Large \bfseries \filcenter}
{\thesection}
{0.7em}
{#1}

\titleformat{name=\section , numberless}
{\sectionmark{#1} \Large \bfseries \filcenter}
{}
{0.7em}
{#1}

\begin{document}
\pagestyle{myps}
\chapter{Chapter title}
\section{Section title}
test
\newpage
test
\newpage
test
\end{document}

\chapter应该显示这个 在此处输入图片描述

\chapter*应该显示这个 在此处输入图片描述

\section应该显示这个 在此处输入图片描述

\section*应该显示这个 在此处输入图片描述

问题 :

\section显示此 在此处输入图片描述

因为以下代码不起作用

\titleformat{\section}
{\sectionmark{This is a test \thesection #1} \Large \bfseries \filcenter}
{\thesection}
{0.7em}
{#1}

同时所有其他功能均正常运作。

答案1

您的问题并没有真正说明如何调用无编号的章节/节。如果您更改计数器,secnumdepth则可以使用 titlesec 的工具。如果您还想为带星号的章节和节使用它,那么您就没那么幸运了:titlesec 不会设置标记,也没有界面可以重新插入它们,修补 titlesec 并不是一件容易的事(甚至 hyperref 也不会这样做……)。您最好的办法是定义发出标记命令的新命令:

\documentclass{book}


\usepackage[pagestyles,explicit]{titlesec}
\newpagestyle{myps}[\scshape]{%
  \sethead[\footnotesize \oldstylenums{\thepage}][][\ifthechapter{Chapter~\thechapter~}{}\chaptertitle]% even
          {\ifthesection{Section~\thesection~}{}\sectiontitle}{}{\footnotesize \oldstylenums{\thepage}} % odd
}

\makeatletter
\titleformat{name=\chapter , numberless}
 {\normalfont\bfseries\Huge\filcenter}
 {}
 {0pt}
 {#1}
 
\titleformat{\chapter}[display]
{\bfseries \Huge}
{\chaptertitlename \hspace{0ex} \thechapter}
{2ex}
{#1}

\titleformat{\section}
{\Large \bfseries \filcenter}
{\thesection}
{0.7em}
{#1}

\titleformat{name=\section , numberless}
{\Large \bfseries\filcenter}
{}
{0.7em}
{#1}

\newcommand\starredchapter[1]{%
 \chapter*{#1}\chaptermark{#1}}

\newcommand\starredsection[1]{%
 \section*{#1\sectionmark{#1}}\sectionmark{#1}}
 
\begin{document}

\chapter{Chapter title}
\section{Section title}

test
\newpage
test
\newpage
test

\setcounter{secnumdepth}{-1}
\chapter{Nonumber Chapter title}
\section{Nonumber Section title}
test
\newpage
test
\newpage
test

\starredchapter{Starred Chapter title}
\starredsection{Starred Section title}

test
\newpage
test
\newpage
test
\end{document}

答案2

您或许可以为编号部分定义一个自定义部分命令,该命令定义\sectionmark该部分之后的内容:

\newcommand{\numberedsection}[1]{\section{#1}\sectionmark{This is a test \thesection\ #1}}

并将编号部分的样式更改为:

\titleformat{\section}
{ \Large \bfseries \filcenter}
{\thesection}
{0.7em}
{#1}

对于未编号的部分,您可以\section*正常使用。

相关内容