titlesec 为 mainmatter (书籍类)定义不同的样式

titlesec 为 mainmatter (书籍类)定义不同的样式

我知道书籍类实现了\@mainmatter可以在\if \fi条件中使用的变量。

在另一个主题上,我尝试使用包来实现前后内容和主要内容的不同章节标题titlesec。我希望前者居中,后者右对齐。

这是我用于 mainmatter 的代码,我非常喜欢它(取自这个网站,但没有记下答案 ID)。

\titleformat{\chapter}[display]
  {\bfseries\Large\color{\mychapterrulecolor}}
  {\filright\MakeUppercase{\chaptertitlename} %
      \textcolor{\chaptertextcolor}{\Huge\thechapter}}
  {1ex}
  {\titlerule\vspace{2ex}\makeatletter\filleft}
  [\textcolor{\mychapterrulecolor}{\vspace{2ex}\titlerule}]

这将产生以下输出

对于没有编号的章节来说,这太丑了(抱歉,没有拍照)

如果我将其改为

\titleformat{\chapter}[display]
  {\bfseries\Large\color{\mychapterrulecolor}}
  {\filright\MakeUppercase{\chaptertitlename} %
      \textcolor{\chaptertextcolor}{\Huge\thechapter}}
  {1ex}
  {\titlerule\vspace{2ex}\makeatletter\filcenter}
  [\textcolor{\mychapterrulecolor}{\vspace{2ex}\titlerule}]

我得到了我想要的没有编号的章节

但章节编号有点丑

所以我尝试了类似

\makeatletter
\titleformat{\chapter}[display]
  {\bfseries\Large\color{\mychapterrulecolor}}
  {\filright\MakeUppercase{\chaptertitlename} %
      \textcolor{\chaptertextcolor}{\Huge\thechapter}}
  {1ex}
  {\titlerule\vspace{2ex}\makeatletter\filcenter\if\@mainmatter\filright\fi}
  [\textcolor{\mychapterrulecolor}{\vspace{2ex}\titlerule}]
\makeatother

但这会导致居中布局,其中“mainmatter”(文本)位于章节名称的第一个单词之前(当然还会产生一些编译错误)。

我想在 titlesec 中找到一个解决方案来处理这个问题(不触及书籍类原语)。一个明显的解决方案是将我的未编号章节重命名为 chapter* 并手动将它们添加到目录中。但我对一个简单的解决方案感兴趣,它不需要更改任何其他内容(我的命令在它们自己的“mystyle.tex”中)。我在文档titlesec中找不到任何东西。titlesec

我显然在这里超出了我的能力(我认为在\makeatletter调用 titleformat 之前的用法就表明了这一点)。

有人知道如何实现这一点吗?

干杯,

答案1

条件是\if@mainmatter\makeatletter里面\titleformat什么也不做。

\documentclass[oneside]{book} % oneside is just for easier comparison
\usepackage{xcolor,titlesec}

\definecolor{mychapterrulecolor}{rgb}{0,0,1}
\definecolor{mychaptertextcolor}{rgb}{0,0,1}

\makeatletter
\titleformat{\chapter}[display]
  {\bfseries\Large\color{mychapterrulecolor}}
  {\MakeUppercase{\chaptertitlename} \Huge\thechapter\filright}
  {1ex}
  {\titlerule\vspace{2ex}\filleft\if@mainmatter\else\filright\fi
   \color{mychaptertextcolor}}
  [\color{mychapterrulecolor}\vspace{2ex}\titlerule]
\makeatother

\begin{document}

\frontmatter

\chapter{Introduction}

Some text just to see

\mainmatter

\chapter{A longer chapter title}

Some text just to see

\end{document}

在此处输入图片描述

答案2

如果认为titlesec自动替换\@mainmatterttl@label

这对你有用吗?

\documentclass{book}

\usepackage{xcolor}

\usepackage{titlesec}

\makeatletter
\titleformat{\chapter}[display]
  {\bfseries\Large\color{blue}}
  {\filright\MakeUppercase{\chaptertitlename} %
      \textcolor{blue}{\Huge\thechapter}}
  {1ex}
  {\titlerule\vspace{2ex}\makeatletter\ifttl@label\filleft\else\filcenter\fi}
  [\textcolor{blue}{\vspace{2ex}\titlerule}]
\makeatother

\begin{document}

\chapter{Numbered}

\chapter*{Unnumbered}

\end{document}

相关内容