在章节标题前插入代码

在章节标题前插入代码

我想在章节标题出现之前插入一些代码。我已经定义:

\newcommand{\toptitle}[2]{\itshape #1 \hfill #2 \par}

那么,如果我这样写:

\begin{document}
\toptitle{Quantum Mechanics}{15.10.2011}
\chapter{My Chapter}
\end{document}

章节标题未出现,因为此代码位于其前面。我正在使用 titlesec 包,但找不到在章节标题前附加代码的命令。可以吗?

答案1

如果不使用titlesec,您可以重新定义实际上排版章节标题的\@makechapterhead命令(在中定义book.cls);您可以执行以下操作:

\documentclass{book}
\usepackage{lipsum}

\newcommand\toptitle{}
\makeatletter
\def\@makechapterhead#1{%
  \vspace*{50\p@}%
  {\parindent \z@ \raggedright \normalfont
    \ifnum \c@secnumdepth >\m@ne
      \if@mainmatter
        \toptitle\par
        \huge\bfseries \@chapapp\space \thechapter
        \par\nobreak
        \vskip 20\p@
      \fi
    \fi
    \interlinepenalty\@M
    \Huge \bfseries #1\par\nobreak
    \vskip 40\p@
  }}
\makeatother

\begin{document}

\renewcommand\toptitle{{\itshape Quantum Mechanics\hfill 15.10.2011}}
\chapter{Test chapter}
\lipsum

\end{document}

在此处输入图片描述

使用该etoolbox包,可以以更短的方式完成上述重新定义:

\documentclass{book}
\usepackage{etoolbox}
\usepackage{lipsum}

\newcommand\toptitle{}
\makeatletter
\patchcmd{\@makechapterhead}{\if@mainmatter}{\if@mainmatter\toptitle\par}{}{}
\makeatother

\begin{document}

\renewcommand\toptitle{{\itshape Quantum Mechanics\hfill 15.10.2011}}
\chapter{Test chapter}
\lipsum

\end{document}

答案2

如果您使用 KOMA 的文档类,则可以使用命令。\setchatperpreamble在下面的示例中,您可以看到使用方法。您可以结合使用KOMA 提供的\setchapterpreamble命令。\dictum

\documentclass{scrreprt}

\usepackage{lipsum}

\begin{document}
\setchapterpreamble[o]{Text}
\chapter{foo}
\lipsum

\end{document}

更多信息请参阅文档。

通过使用 titlesec 包,您可以定义自己的toptitle命令。下面是一个建议

\documentclass{book}
\usepackage{titlesec}

%\titleformat{command}
%            [shape]
%            {format}
%            {label}
%            {sep}
%            {before-code}
%            [after-code]

\makeatletter
\newcommand\toptitle[1]{%
   \def\@toptitle{#1}}
\toptitle{}
\newcommand*\outputtoptitle[1][\linewidth]{%
    \ifx\@toptitle\@empty
      no Toptitle\else
      \parbox{\linewidth}{\@toptitle}\par\kern12pt\fi
}
\titleformat{\chapter}%
            {\outputtoptitle\huge\bfseries}%
            {\thechapter}%
            {12pt}%
            {}

\makeatother 
\usepackage{lipsum}

\begin{document}
\toptitle{\lipsum[1]}
\chapter{foo}
\lipsum

\end{document}

相关内容