我知道书籍类实现了\@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
自动替换\@mainmatter
为ttl@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}