我想在章节标题出现之前插入一些代码。我已经定义:
\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}