在我看来,这是因为无法在文档中titlesec
设置标题样式。\chapter
文档说它应该支持设置\chapter
标题样式。
这是一个最小可重现的示例:
\documentclass[12pt,letterpaper]{article}
\usepackage[margin=0.5in]{geometry}
\usepackage[compact]{titlesec}
\titleformat{\chapter}[hang]
{\centering\bfseries\huge}
{}
{0pt}
{\titlerule[0.8pt]}[]
\titlespacing{\chapter}
{0pt}
{0pt}
{0pt}[0pt]
\titleformat{\section}[hang]
{\centering\Large}
{}
{0pt}
{\titlerule[1.6pt]}[]
\titlespacing{\section}
{0pt}
{0pt}
{0pt}[0pt]
\begin{document}
\chapter{CHAPTER TEXT}\label{chapter-text}
\section{SECTION TEXT}\label{section-text}
\end{document}
这在我本地安装的 PDFLatex 和 Overleaf 中都失败了。
也许我忽略了什么。有人知道什么可以帮我解决这个问题吗?谢谢!
答案1
问题是article
文档类没有定义\chapter
标题,因此无法为其提供样式。
解决方案(由评论提出@Ulrike Fischer) 是切换到另一个文档类,例如report
或book
。这有效!
我选择切换到report
文档类。请注意,这会导致迁移问题:我的标题(由设置\pagestyle
)拒绝在与标题相同的页面上工作\chapter
。我在另一个论坛帖子中找到了此问题的解决方案:https://tex.stackexchange.com/a/19741/315958
答案2
您可以将 的定义包装\chapter
在里面\@ifundefined
(注意用 将其括起来\makeatletter ... \makeatother
)。
\makeatletter
\@ifundefined{chapter}{}{
\titleformat{\chapter}[hang]
{\centering\bfseries\huge}
{}
{0pt}
{\titlerule[0.8pt]}[]
\titlespacing{\chapter}
{0pt}
{0pt}
{0pt}[0pt]
}
\makeatother
这样,您就可以保持\chapter
样式独立于文档类。
澄清:这个解决方案从来不是为了提供课堂\chapter
命令article
,而是为了保持\chapter
风格关于无论使用哪种文档类,定义都是如此。正如@UlrikeFischer 提到的,article
不提供\chapter
,这是有原因的,这也证明了book
和的存在report
。我个人认为在文章中提供章节是非常错误的。
但是,正如 OP 所问,可以使用titlesec
和titletoc
来定义\chapter
命令。这可以按如下方式完成(我试图接近原始版本,可能并不完美):
\documentclass{article}
\usepackage{titlesec}
\usepackage{titletoc}
\newcommand{\chaptername}{Chapter}
\makeatletter
\newcommand{\@chapapp}{\chaptername}
\makeatother
\titleclass{\chapter}{top}[\part]
\newcounter{chapter}
\titleformat{\chapter}[display]
{\bfseries\huge}
{\chaptertitlename\space\thechapter}
{20pt}
{\Huge\bfseries}
\titlespacing*{\chapter}
{0pt}
{50pt}
{40pt}
\titlecontents{chapter}
[1.5em]
{\vspace*{10pt}\bfseries}
{\contentslabel{1.3em}}
{\hspace*{-1.3em}}
{\hfill\contentspage}
\AddToHook{cmd/appendix/before}{
\setcounter{chapter}{0}
\gdef{\thechapter}{\Alph{chapter}}
}
\begin{document}
\chapter{A}
\end{document}
但请注意,这在很多层面上都是错误的。例如,book
和report
类用于自动发布、、等\chapter*
标题,而类用于此。此外,我没有考虑到每页标题中使用的标记(类似于页码等其他信息)。和类为此定义,但显然没有。\tableofcontents
\begin{thebibliography}{...}
\printindex
article
\section*
book
report
\chaptermark
article