有人问过类似的问题,但读完之后我仍然认为下面的代码应该导致章节的开头显示为
1 部分章节
而不是
第 1 章
部分章节
但编译时我只得到后者,即默认的书章标题。我肯定漏掉了什么。
\documentclass{book}
\usepackage{fancyhdr}
\renewcommand{\chaptermark}[1]{\markboth{\thechapter\ #1}{}}
\begin{document}
\chapter{something}
\end{document}
答案1
标题chapter
设置为\@makechapterhead
,被称为在内\@chapter
,其本身由使用\chapter
。
的正常定义\@makechapterhead
是(参见book.cls
)
\def\@makechapterhead#1{%
\vspace*{50\p@}%
{\parindent \z@ \raggedright \normalfont
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\huge\bfseries \@chapapp\space \thechapter
\par\nobreak
\vskip 20\p@
\fi
\fi
\interlinepenalty\@M
\Huge \bfseries #1\par\nobreak
\vskip 40\p@
}}
线条 \huge\bfseries \@chapapp\space \thechapter
显示第1章然后弹出换行符。如果不需要,可以\@chapapp
删除 并保留 \thechapter,然后删除\par\nobreak
等等。否则,这将导致标题出现换行符和垂直间距,并且 被保留在 中#1
。
带星号的命令使用了类似的代码\chapter*
,相关的宏名为\@makeschapterhead
,但我在这里省略了它。
应该\vspace*{50\p@}
更新为适当的值,但这完全取决于个人品味。\documentclass{book}
\makeatletter
\def\@makechapterhead#1{%
\vspace*{50\p@}%
{\parindent \z@ \raggedright \normalfont
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\huge\bfseries \thechapter~\space
\fi
\fi
\interlinepenalty\@M
\Huge \bfseries #1\par\nobreak
\vskip 40\p@
}}
\makeatother
\usepackage{blindtext}
\begin{document}
\chapter{something}
\blindtext[10]
\end{document}
\xpatchcmd
一个“更快捷”的解决方案是从包中使用xpatch
。
效果相同,如下所示\xpatchcmd
:
\documentclass{book}
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\@makechapterhead}{% Old code
\huge\bfseries \@chapapp\space \thechapter
\par\nobreak
\vskip 20\p@
}{% New code
\huge\bfseries \thechapter~\space
}{\typeout{Patch success!}}{\typeout{Patching failed :-(}}
\makeatother
\usepackage{blindtext}
\begin{document}
\chapter{something}
\blindtext[10]
\end{document}
答案2
仅当您能切换到其他课程时:
有类memoir
您可以使用该命令\chapterstyle{section}
来获得所需的结果。
\documentclass[a4paper]{memoir}
\chapterstyle{section}
\usepackage{blindtext}
\begin{document}
\blinddocument
\end{document}
还有班级scrbook
知道一个选择chapterprefixline=false
\documentclass[chapterprefix=false]{scrbook}
\usepackage{blindtext}
\begin{document}
\blinddocument
\end{document}