结合 \chapter 命令和 \newcommand

结合 \chapter 命令和 \newcommand

附上我的 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....可以使用\xpatchcmdfrom )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}

相关内容