# “abstract” for each part in BOOK class

Is there a way to add a small paragraph (a sort of abstract) at the beginning of every \part, in the book class ? i know that there are numerous way to do that with scrreprt class, but I need to keep my book class... If possible, I would like to have this paragraph on the same page as the part title one.

Brice

• The book.cls does not have abstract at all. With some modification it is possible to use the article version of abstract and 'inject' it into \part – user31729 Feb 9 '17 at 17:05
• Thank you for your answer. Do you know if there is a way to do something "manually", if there is no command for that ? – Brice Feb 9 '17 at 17:07
• KOMA-Script classes provide preambles for \part. So can use something like \setpartpreamble{\begin{quote}Blabla\end{quote}}. – Schweinebacke Feb 9 '17 at 17:19
• Sorry, but I specified that I have to keep my book class... – Brice Feb 9 '17 at 17:22
• scrbook is a book class and you don't have specified a class. This is one reason for the MWE that you always should add to the question and for correct markdown. BTW: scrbook has an option to emulate standard class book. – Schweinebacke Feb 9 '17 at 17:25

You can define a partwithabstract environment:

\documentclass[oneside]{book}

\usepackage{xpatch}

\makeatletter
\xpatchcmd{\part}{\null\vfil}{\vspace*{.1\textheight}}{}{}

\providecommand{\abstractname}{Abstract}
\newenvironment{partwithabstract}
{\begingroup\let\@endpart\relax\part@withabstract}
{\endquotation\endgroup\@endpart}
\newcommand{\part@withabstract}{\@dblarg\part@@withabstract}
\def\part@@withabstract[#1]#2{%
\part[#1]{#2}%
\vfil
\begin{center}\bfseries\abstractname\vspace{-.5em}\vspace{\z@}\end{center}
\quotation
}
\makeatother

\usepackage{lipsum}

\begin{document}

\tableofcontents

\begin{partwithabstract}{First Part}
\lipsum[1-2]
\end{partwithabstract}

\begin{partwithabstract}[Second for the TOC]{Second Part}
\lipsum[2]
\end{partwithabstract}

\end{document}


The main change is that the title is set at a fixed height from the top; the abstract is vertically centered in the remaining space (it's your responsibility to make it fit).

If you change \vfil into \vfill in the definition of \part@@withabstract, that is, do

\def\part@@withabstract[#1]#2{%
\part[#1]{#2}%
\vfill
\begin{center}\bfseries\abstractname\vspace{-.5em}\vspace{\z@}\end{center}
\quotation
}


the abstract will be flush with the bottom margin.

You can remove the \abstractname related bit, if you so prefer: the code to remove is

  \begin{center}\bfseries\abstractname\vspace{-.5em}\vspace{\z@}\end{center}


Technical note I used oneside just for showing the two part pages side by side.

• This patch seems to cause a hiccup in a two column book. If I use this environment between \mainmatter and the first chapter, the rest of the book defaults to single column. However, if I use this environment between chapter one and chapter two, all seems well. Would have a guess as to what causes this? – Robert Wolfe Apr 24 '18 at 21:20
• @Robert I don't think this is going to work as is for two column format to begin with. – egreg Apr 24 '18 at 21:30

I've copied abstract definition from article class and changed it slightly, also defining \abstractname.

In addition, there's a command \injectabstract which comes into action right before \@endpart, i.e. after the title of the part has been typeset.

\injectabstract checks whether \@localabstract is defined and typesets the abstract accordingly or does nothing, if it is not defined.

\localabstract is a wrapper command that is meant to store the content for the next abstract.

For each part that should have such an abstract use \localabstract with the relevant content.

\documentclass[notitlepage]{book}

\usepackage{xpatch}

\makeatletter

\newcommand{\abstractname}{Abstract}
\if@titlepage
\newenvironment{abstract}{%
\null\vfil
\@beginparpenalty\@lowpenalty
\begin{center}%
\bfseries \abstractname
\@endparpenalty\@M
\end{center}}%
{\par\vfil\null\endtitlepage}
\else
\newenvironment{abstract}{%
\if@twocolumn
\section*{\abstractname}%
\else
\small
\begin{center}%
{\bfseries \abstractname\vspace{-.5em}\vspace{\z@}}%
\end{center}%
\quotation
\fi}
{\if@twocolumn\else\endquotation\fi}
\fi

\newcommand{\localabstract}[1]{%
\def\@localabstract{#1}%
}

\newcommand{\injectabstract}{%
\@ifundefined{@localabstract}{%
}{%
\begin{abstract}
\@localabstract%
\end{abstract}%
}
\let\@localabstract\relax%
}

\xpretocmd{\@endpart}{%
\injectabstract\par%
}{}{}

\makeatother

\usepackage{blindtext}

\begin{document}
\localabstract{\blindtext}
\part{Foo}

\part{Foobar}
\end{document}


Very simple:

\documentclass{book}
\usepackage{xpatch}
\makeatletter
\xpretocmd{\@endpart}{%
\ifx\@abstract\@empty\else
\bigskip
\begin{quote}\@abstract\end{quote}
\global\let\@abstract\@empty
\fi
}{}{}
\newcommand{\partabstract}[1]{%
\renewcommand{\@abstract}{#1}%
}
\newcommand{\@abstract}{}
\makeatother
\usepackage{lipsum}

\begin{document}
\partabstract{\lipsum[1-2]}
\part{First Part}

\chapter{First Chapter}
\lipsum

\partabstract{\lipsum[3]}
\part{Second Part}

\chapter{Second Chapter}
\lipsum

\part{Third Part}
\chapter{Third Chapter}
\lipsum

\end{document}

• This work perfectly, thank you very much ! ( I don't know how to edit my topic as "answered"...) – Brice Feb 9 '17 at 17:53
• @Brice Just click to the check mark left beside one of the answers to accept this answer and mark your question as answered. Additionally you can click at the up-vote mark above the number left beside every answer you like. See the tour for more information. – Schweinebacke Feb 9 '17 at 17:56