11

How could I adjust the size and placement of chapter heading in my custom class? I am using report class as my base. When I used titlesec package inside my custom class, it threw error

! Package titlesec Error: Not allowed in `easy' settings.

2
  • So you don't want to use titlesec?
    – Werner
    Commented Sep 19, 2013 at 4:37
  • @Werner I want my things done. Thats all :D
    – tex
    Commented Sep 19, 2013 at 4:38

2 Answers 2

13

The error message indicates that you were trying to use the "easy setup" with \titleformat* in a wrong way. For substantial formatting modifications, use the non-starred variant \titleformat and for changing the spacing, use \titlespacing*. Below are the default settings, which you can change according to your needs:

\usepackage{titlesec}

\titleformat{\chapter}[display]
  {\normalfont\huge\bfseries}{\chaptertitlename\ \thechapter}{20pt}{\Huge}
\titlespacing*{\chapter}
  {0pt}{50pt}{40pt}

For example, to center the title, reduce the space before from 50pt to 30pt and the space after from 40pt to 20pt, you can do:

\documentclass{report}
\usepackage{titlesec}
\usepackage{lipsum}

\titleformat{\chapter}[display]
  {\normalfont\huge\bfseries\filcenter}{\chaptertitlename\ \thechapter}{20pt}{\Huge}
\titlespacing*{\chapter}
  {0pt}{30pt}{20pt}

\begin{document}
\chapter{Test Chapter}
\lipsum[4]
\end{document}

enter image description here

8
  • How could I place it at Center?
    – tex
    Commented Sep 19, 2013 at 4:51
  • @user3984 please see my updated answer. Commented Sep 19, 2013 at 4:53
  • Why does the default use pt instead of em. shouldn't ems be used to scale in case of a huge paper sheet? Commented Nov 1, 2013 at 0:33
  • @GonzaloMedina Is the first snippet really the default? If I have a chapter followed by a section, I get different vertical spacing with and without that snippet.
    – LaRiFaRi
    Commented Jul 15, 2015 at 7:42
  • @LaRiFaRi That's what the titlesec documentation says (page 23). However, you are right. Even with regular text after the title, there's a slight difference in vertical spacing between the default settings and what titlesec states is the configuration thet replicates the standard settings. Commented Jul 15, 2015 at 13:13
3

The regular (numbered) chapter header in report is set by \@makechapterhead:

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

You see a 50\p@ (or 50pt) vertical gap before setting \@chapapp\space \thechapter in \huge\bfseries; then another 20\p@ gap and the title in \Huge\bfseries, and yet another 40\p@. Starred chapters are set using \@makeschapterhead:

\def\@makeschapterhead#1{%
  \vspace*{50\p@}%
  {\parindent \z@ \raggedright
    \normalfont
    \interlinepenalty\@M
    \Huge \bfseries  #1\par\nobreak
    \vskip 40\p@
  }}

You can change these values to your liking.

5
  • Should one use this code in a .cls file?
    – user5590
    Commented Jul 25, 2019 at 12:50
  • 1
    You could. But if you want to use it in your regular document, you need to put it inside a \makeatletter...\makeatother pair. See What do \makeatletter and \makeatother do?
    – Werner
    Commented Jul 25, 2019 at 15:08
  • Thanks for the info!
    – user5590
    Commented Jul 26, 2019 at 1:13
  • The \makeatletter ... \makeatother pair seems to be rather old fashioned, isn't it? I am quite curious to master such techniques, but not sure where to start from. Again, thanks for the link. I have seen such pair in .cls files and lots of answers this site; I can only use it as a black box but can never(!) write my own whenever it may be useful. It seems to me this is an advanced (La)TeX tool that is more straightforward (in some sense?) than packages.
    – user5590
    Commented Jul 26, 2019 at 1:29
  • 1
    @Jack: You don't need \makeatletter...\makeatother within a package or class. But in your preamble you would need it if any of your macro names include an @. You see that I'm defining macros \@makechapterhead and \@makeschapterhead and within them they also contain macros with @ in them. It's not really that advanced.
    – Werner
    Commented Jul 26, 2019 at 16:28

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .