附上我的 MWE:
\documentclass[12pt, a4paper]{book}
\usepackage[utf8]{inputenc}
\newcommand{\upper}[1]{\expandafter\MakeUppercase\expandafter{#1}}
\begin{document}
\chapter{\upper{Foo bar}}
\end{document}
所以我想要做的是获取带有大写章节标题的章节。但是如果我使用\chapter{\upper{Foo\\ bar}}
,我的 MWE 不起作用。为什么以及如何修复它?
答案1
您应该避免在参数中添加格式(尤其是因为它会影响目录和“命名”交叉引用。)
有几种方法可以指定标题格式,例如titlesec
包:
\documentclass[12pt, a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage{titlesec}
\titleformat{\chapter}[block]
{\normalfont\huge\bfseries}{\thechapter}{1em}{\Huge\MakeUppercase}
\begin{document}
\tableofcontents
\chapter{Foo\\bar}
\end{document}
书籍类的标准布局是通过
\documentclass[12pt, a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage{titlesec}
\titleformat{\chapter}[display]
{\normalfont\huge\bfseries}
{\MakeUppercase{\chaptertitlename}\ \thechapter}
{1em}
{\Huge\MakeUppercase}
\begin{document}
\tableofcontents
\chapter{Foo\\bar}
\end{document}
答案2
传统redefinition
的 of \@makechapterhead
和 - 开关用法。(也\if....
可以使用\xpatchcmd
from )xpatch
\documentclass[12pt, a4paper]{book}
\usepackage[utf8]{inputenc}
\newif\ifuppercasechaptertitle
\uppercasechaptertitletrue
\makeatletter
\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 \ifuppercasechaptertitle\MakeUppercase{#1}\else#1\fi\par\nobreak
\vskip 40\p@
}}
\makeatother
\begin{document}
\chapter{Foo}
\uppercasechaptertitlefalse
\chapter{Foo bar}
\end{document}