Fancy chapter headings
Although the memoir
class, fancychap
, titlesec
and others have some predefined chapter styles, I understand your search for something better.
There are two issues to consider here:
- The limitations of the original LaTeX structure and commands and,
- The typographical requirements for such an endeavour.
One of the difficulties in the redefinition of chapters, is the different mechanisms provided by the various packages as well as by LaTeX
. To complicate matters further the code in the book.cls
is spread in at least four chunks.
An approach to overcome the limitations and provide some more general and well abstracted routines to define a key-value approach similar to those provided by PGF
keys. I have done some work in this respect sometimes back and a typical setting would be:
\cxset{
name=\so{CHAPTER},
numbering=arabic,
number font-size=\large,
number before={},
number position=rightname,
chapter color={black!80},
chapter font-size=\large,
chapter before=\rule[3pt]{\textwidth}{0.4pt}\par\hfill,
number after=,
chapter after=\hfill\hfill\par\rule[6pt]{\textwidth}{0.4pt}\par,
number color=\color{black!80},
title font-family=\bfseries,
title font-color=\color{black!80},
title font-weight=,
title font-size=\LARGE,
title beforeskip=\hfill\par\hspace*{0pt},
header style=empty
}
Although the keys and the code might at first glance seem overwhelming it can be greatly simplified by the use of styles
. So once a set of keys has been defined it can be stored in a .style
command. Another advantage of this method is that community settings can easily be incorporated by the use of libraries. This is important for TikZ
based designs, where the shapes and complexity cannot be abstracted easily if at all.
This brings us to the second part of the issues associated with chapter re-definitions: typography. The chapter look and feel must blend with the rest of the design. Consider for example the following two images:
It is no good only having definitions for chapters. The style should extend to exercises, tables, sections table of contents and the like. A similar method to using a key-value approach might make this task easier and share the styling among the community. Originally I experimented with .ini
files and LuaLaTeX
for loading them. However, the key value approach is better and more familiar to the community.
I have collected over 50 styles from different books and I have the basic code ready for experimentation (only for chapters).
And now the coding part. First we define keys for all major elements:
\def\cxset{\pgfqkeys{/chapter}}
\cxset{%
name/.code={\gdef\chaptername{#1}},
chapter font-family/.store in=\chapterfontfamily@cx,
...
}
As we want to use the basic LaTeX structure and conventions, we redefine the
\@makechapterhead
to handle the keys. Remember that there are two commands used by LaTeX
to typeset chapter heads. The one is used for the unstarred version of the command, while the other one is for the starred version. The starred version of the command in our approach is unnecessary as we can define a key instruct the typesetting engine to ignore the numbering (numbering=none
) and hence we redirect both the starred as well as the unstarred version to the same macro.
\renewcommand\@makechapterhead[2][]{%
...
\titlebeforeskip@cx%
\if@lefttitle%
\beforenumber@cx%
\counterdisplay\c@chapter\afternumber@cx%
\fi
...
}
The macro contains the typesetting algorithm and hooks into the various keys. To typeset a chapter head the simplest approach is to define a set of keys as styles. For example we can use:
\cxset{manet/.style={
name={},
numbering=none,
...
}
to define the style "manet". The chapter is then typeset as:
\cxset{manet}
\chapter{EDOUARD MANET}
\begin{multicols}{3}
\leftskip0pt
\lettrine{I}{psum dolor} sit amet latixeus. \lipsum*[1-2]
Latinicus porcupinus to fill the line.
\end{multicols}
Giving us the following result:
With slight variations, we can inherit the style and get the "cardinal on a vespa chapter":
\cxset{manet}
\topimage{<image file>}
\chapter{ALAN MacDONALD}
Additional keys can be defined if necessary to cater for all fields.
Chapters made out of only textual components are easier to define. You just set the style number.
\cxset{style7}
\chapter{Introduction to Style Seven}
...
\cxset{style12}
\chapter{Introduction to Style Twelve}
...
Special chapter openings need a different treatment and are best described as environments, as they tend to have many textual components as well as images:
\begin{specialchapter}[
image=genetics-dogs,%chromosomes
image caption={Labrador retriever\\
...
by two gene pairs.}]%
{Extensions\\ of Mendelian\\ Genetics}
\begin{itemize}
...
\end{itemize}
\end{specialchapter}
The second image above had only the image key changed, just to illustrate the technique. As a point of interest the images were placed with traditional boxing techniques rather than using tikZ
or picture commands
. The shading was achieved by stretching a "shadow" image file, pretty much like it was used on the web in the pre-html5 days.
The technique has proved useful, easy to define and although the documentation still needs to be developed and the code needs a good clean-up and a few must-do; in the meantime you can download the image samples (used in the documentation), the chapterx package file, the documentation tex file and the documentation pdf file.
Please ping me at chat, if you have any other interesting designs that we can add to the collection.
You could use titlesec
together with TikZ. Here's an example which you could modify in color and shape:
\documentclass[svgnames]{report}
\usepackage{tikz}
\usepackage{kpfonts}
\usepackage[explicit]{titlesec}
\newcommand*\chapterlabel{}
\titleformat{\chapter}
{\gdef\chapterlabel{}
\normalfont\sffamily\Huge\bfseries\scshape}
{\gdef\chapterlabel{\thechapter\ }}{0pt}
{\begin{tikzpicture}[remember picture,overlay]
\node[yshift=-3cm] at (current page.north west)
{\begin{tikzpicture}[remember picture, overlay]
\draw[fill=LightSkyBlue] (0,0) rectangle
(\paperwidth,3cm);
\node[anchor=east,xshift=.9\paperwidth,rectangle,
rounded corners=20pt,inner sep=11pt,
fill=MidnightBlue]
{\color{white}\chapterlabel#1};
\end{tikzpicture}
};
\end{tikzpicture}
}
\titlespacing*{\chapter}{0pt}{50pt}{-60pt}
\begin{document}
\tableofcontents
\chapter{Introduction}
Text
\chapter{Main}
\section{Section}
Text
\begin{thebibliography}{99}
\bibitem{Test} test reference
\end{thebibliography}
\end{document}
Source: TeXblog.