Bringhurst chapter style in memoir
Here is a third suggestion, this time using xcoffins
. It has an easy and intuitive way of handling boxes that need to be joined, attached, shifted... one should note, though, that xcoffins
' syntax might still change in the future.
The basic idea is simple: define coffins (i.e. boxes)
\NewCoffin\testA
\NewCoffin\testB
set them to contain what you like
\SetHorizontalCoffin\testA{\huge A}
\SetHorizontalCoffin\testB{bbb}
rotate, scale or resize them, join (bounding box is extended to contain both, \JoinCoffins
) or attach (bounding box is not extended, \JoinCoffins*
) them using so-called handles or poles and maybe used some horizontal or vertical offset
% join bottom center of \testA with top center of \testB
% and shift \testB 1em down:
\JoinCoffins\testA[hc,b]\testB[hb,t](0pt,-1em)
and finally typeset them:
\TypesetCoffin\testA
This is all very well explained in the documentation.
I use this idea below using three coffins: \main
is used as a shell that will be filled with contents and typeset in the end. \titleline
is filled with a horizontal ruled and joined with \main
, \chapternumber
is filled with the scaled and coloured chapter number for numbered chapters or is left empty else. It is then attached to main and shifted into the margin and (what seemed an appropriate amount) down:
\documentclass[b5paper]{memoir}
\usepackage[T1]{fontenc}
% not then font used by Bringhurst, but anyway:
\usepackage{libertine}
% we want to letterspace uppercased words and those in small caps, so:
\usepackage{microtype}
% the chapter style:
\usepackage{xcoffins,xcolor}
\NewCoffin\main
\NewCoffin\titleline
\NewCoffin\chapternumber
\makechapterstyle{Bringhurst}{%
\renewcommand*\chapterheadstart{}
\renewcommand*\printchaptername{}
\renewcommand*\chapternamenum{}
\renewcommand*\afterchapternum{}
% numbered chapters:
\renewcommand*\printchapternum{%
\SetHorizontalCoffin\chapternumber{%
\textcolor{black!10}{\thechapter}%
}%
\ScaleCoffin\chapternumber{8}{8}%
}
% unnumbered chapters:
\renewcommand*\printchapternonum{\SetHorizontalCoffin\chapternumber{}}
\renewcommand*\printchaptertitle[1]{%
\memRTLraggedright\normalfont\large\MakeUppercase{\textls[75]{##1}}}
\renewcommand*\afterchaptertitle{%
\vskip.5\onelineskip
\SetHorizontalCoffin\titleline{\color{black!50}\rule{\linewidth}{1.5pt}}%
\JoinCoffins\main\titleline
\JoinCoffins*\main\chapternumber(\textwidth+\marginparsep,-4\baselineskip)%
\TypesetCoffin\main
\vskip\onelineskip
}
}
\chapterstyle{Bringhurst}
% sections and subsections:
\setsecnumformat{\normalfont\csname the#1\endcsname\quad}
% the section style:
\newcommand\uppercasehead[1]{%
\noindent\normalfont\scshape\MakeLowercase{\textls[50]{#1}}}
\setsecindent{0pt}
\setsecheadstyle{\uppercasehead}
% the subsection style:
\newcommand\itshapehead[1]{\normalfont\itshape#1}
\setsubsecheadstyle{\itshapehead}
\setsecnumdepth{subsection}
% the subsubsection style:
\setsubsubsecheadstyle{\itshapehead}
\usepackage{lipsum}
\begin{document}
\chapter{The Grand Design}
\section{First Principles}
\subsection{Typography exists to honor content}
\lipsum
\end{document}
This lines the baseline of the number with the baseline of the text, you may want to raise it a bit.
\documentclass{memoir}
\usepackage{kantlipsum}
\makeatletter
\makechapterstyle{Bringhurst}{%
\chapterstyle{default}
\renewcommand*{\chapterheadstart}{}
\renewcommand*{\printchaptername}{}
\renewcommand*{\chapternamenum}{}
\renewcommand*{\printchapternum}{%
}%
\renewcommand*{\afterchapternum}{}
\renewcommand*{\printchaptertitle}[1]{%
\raggedright\large\scshape\MakeUppercase{##1}}
\renewcommand*{\afterchaptertitle}{%
\vskip\onelineskip \hrule\vskip\onelineskip
\gdef\insertchapnum{%
\global\let\insertchapnum\relax
\makebox[0pt][l]{%
\hspace{\textwidth}%
\smash{\resizebox{!}{\beforechapskip}{\color[rgb]{.5,.5,.5}\chapnumfont \thechapter}}}}%
}}
\def\@afterheading{%
\@nobreaktrue
\everypar{%
\if@nobreak
\@nobreakfalse
\clubpenalty \@M
\if@afterindent \else
{\setbox\z@\lastbox\insertchapnum}%
\fi
\else
\clubpenalty \@clubpenalty
\everypar{}%
\fi}}
\makeatother
\frenchspacing
\begin{document}
\chapterstyle{Bringhurst}
\chapter{This Is My First Chapter}
\section{A section title in the way}
\kant[3]
aaa
\end{document}
In the above, \@afterheading
which is the code LaTeX inserts to suppress indentation of the first paragraph of a section is redefined to insert a token \insertchapnum
after removing the indentation. \chapter
defines \insertchapnum
to use the code you had to insert a number (I just made it grey rather than black) and then globally redefine \insertchapnum
to \relax
so it does nothing until the next \chapter
command defines it again.
I have been playing with page layouts, and have carefully reproduced aspects of Bringhurst's design, including an explicit calculation of the page parameters, measure, etc. The result was achieved using the titlesec
package, placing the chapter number with the marginnote
package:
% Set the font
\defaultfontfeatures{Scale=MatchLowercase,
Mapping=tex-text}
\setmainfont[Mapping=tex-text, % E.g. -- -> en-dash
Numbers=OldStyle,
UprightFeatures={LetterSpace=-0.9},
ItalicFeatures={LetterSpace=0.9}, % To cancel -0.9 tracking
SmallCapsFeatures={LetterSpace=10.0},
]{Minion Pro}
\setkomafont{marginnote}{
\addfontfeature{UprightFeatures={LetterSpace=5}}%
\addfontfeature{ItalicFeatures={LetterSpace=5}}%
\fontsize{7pt}{9pt}\selectfont}
\setkomafont{chapternumber}{%
\fontspec[Numbers=OldStyle]{TeX Gyre Pagella}
\fontsize{72pt}{72pt}\selectfont}
\setkomafont{sectioning}{\normalfont}
\setkomafont{chapter}{\addfontfeature{UprightFeatures={LetterSpace=15.0}}}
\setkomafont{section}{\scshape}
\setkomafont{subsection}{\itshape}
% Chapters open on the right page.
\KOMAoptions{open=right}
\setlength{\parindent}{1.5em}
% Chapter formatting
\titleformat{name=\chapter}
[block]
{} % format
{\marginnote{\usekomafont{chapternumber}\thechapter}
[3\baselineskip]} % label
{0pt} % separation between label and heading
{\raggedright\usekomafont{chapter}\MakeTextUppercase} % before
[\trule] % after
\titlespacing*{\chapter}{0pt}{-\topskip}{0pt}
% Bringuest has the whole text flush left, so do not typeset the label
% independently here or the text will hang.
\titleformat{name=\section}
{\usekomafont{section}} % format
{} % label
{0pt} % separation between label and heading
{\thesection\hspace{0.5em}\MakeTextLowercase} % before
\titleformat{name=\subsection}
{\usekomafont{subsection}} % format
{} % label
{0pt} % separation between label and heading
{\raggedright{\normalfont\thesubsection}\hspace{0.5em}} % before
\titlespacing*{\section}{0pt}{0pt}{\baselineskip}
\titlespacing*{\subsection}{0pt}{\baselineskip}{\baselineskip}
The complete source is too long to post (it includes a modification to geometry
that allows page changes in the middle of a document, and explores other typographic styles) but is available on bitbucket: Exploring Typography with LaTeX. Here is the result:
As you can see, I am still having some problems with the margin-notes, but the spacing, measure, and positioning of the chapter number is almost identical to Bringhurst's design (as a demonstration of how to do this in LaTeX rather than a suggestion that one should strive to exactly reproduce this style.)
Update
Here are the same ideas applied to the memoir
class. Note: I am not fluent in memoir
and had a little bit of difficulty getting the space before the section heads properly adjusted, so the vertical alignment is not exactly correct here (and I have not adjusted the page size etc. I just blindly set the text box to match Bringhurst's measurements.)
Note also that Bringhurst places the chapter numbers at the same vertical position regardless of the title text: it does not move up or down with the first line of text so that it will always be in the same place for a reader flipping through pages in the book.
\documentclass{memoir}
\usepackage{fontspec}
\usepackage{marginnote}
\usepackage{xparse} % So we can define \trule with two optional args
\usepackage{xcolor}
% This rule will take exactly \baselinskip space, maintaining the grid. The
% raise value is the height above the next baseline. It will extend down
% thickness.
% \trule[thickness][raise]
\NewDocumentCommand\trule{O{0.4pt}O{0pt}}{
\vskip0pt\vtop to0pt{
\noindent\raisebox{#2}{\vbox{\leavevmode\hrule height#1}}}
}
\defaultfontfeatures{Scale=MatchLowercase,
Mapping=tex-text}
\setmainfont[Mapping=tex-text, % E.g. -- -> en-dash
Numbers=OldStyle,
UprightFeatures={LetterSpace=-0.9},
ItalicFeatures={LetterSpace=0.9}, % To cancel -0.9 tracking
SmallCapsFeatures={LetterSpace=10.0},
]{Minion Pro}
\usepackage{kantlipsum}
\settypeblocksize{496.32431pt}{255.8827pt}{1.25}
\makechapterstyle{Bringhurst}{%
\chapterstyle{default}
\setsecnumdepth{subsection}
\renewcommand{\chaptitlefont}
{\normalfont%
\addfontfeature{UprightFeatures={LetterSpace=15.0}}}
\renewcommand{\chapnumfont}{%
\fontspec[Numbers=OldStyle]{TeX Gyre Pagella}
\fontsize{72pt}{72pt}\selectfont
\color{black!30}}
\renewcommand*{\chapterheadstart}{}
\renewcommand*{\printchaptername}{}
\renewcommand*{\chapternamenum}{}
\renewcommand*{\printchapternum}{%
\marginnote{\chapnumfont \thechapter}[3\baselineskip]
}%
\renewcommand*{\afterchapternum}{}
\renewcommand*{\printchaptertitle}[1]{
\chaptitlefont\raggedright\MakeUppercase{##1}}
\renewcommand*{\afterchaptertitle}{\trule\vspace{\oneline}}
\setsecindent{0pt}
\setbeforesecskip{\onelineskip}
\setaftersecskip{\onelineskip}
\setsecheadstyle{\normalfont\scshape\raggedright\MakeLowercase}
\setaftersubsecskip{\onelineskip}
\setsubsecindent{0pt}
\setsubsecheadstyle{\normalfont\raggedright\itshape}
}
\frenchspacing
\begin{document}
\chapterstyle{Bringhurst}
\chapter{The Grand Design}
\section{First Principles}
\subsection{Typography exists to honour content}
Like oratory, music, dance, calligraphy -- like anything that lends
its grace to language\ldots
\kant[3]
\end{document}