You can redefine the commands \thechapter
, \thesection
, \thesubsection
which control the representation of the counters for chapters, sections, and subsections. The tocloft
package can be then used to add the dots:
\documentclass{book}
\usepackage{tocloft}
\renewcommand\cftchapaftersnum{.}
\renewcommand\cftsecaftersnum{.}
\renewcommand\thechapter{\Roman{chapter}}
\renewcommand\thesection{\arabic{section}}
\renewcommand\thesubsection{(\alph{subsection})}
\begin{document}
\tableofcontents
\chapter{Test Chapter One}
\section{Test Section One}
\section{Test Section One}
\subsection{Test Subsection A}
\subsection{Test Subsection B}
\end{document}
![enter image description here](https://i.stack.imgur.com/S9G5T.png)
Some other adjustments might be necessary, to prevent the chapter number from overlapping the title, and perhaps reducing the space between the section number and their titles; those adjustments can be something like:
\renewcommand\cftchapnumwidth{2.8em}
\renewcommand\cftsecnumwidth{2em}
\renewcommand\cftsecindent{3em}
\renewcommand\cftsubsecindent{5em}
Here's some code. Note that I removed all packages that are unnecessary for the example.
\documentclass[12pt,oneside,a4paper]{article}
\usepackage[
left=40mm,
top=30mm,
right=20mm,
bottom=20mm,
headsep=12.5mm,
headheight=14.5pt, %%% 3mm is too small
heightrounded
]{geometry}
\usepackage{fancyhdr,xpatch}
\pagestyle{fancy}
\renewcommand{\headrulewidth}{0.0pt}
\fancyhf{}
\fancyhead[R]{Title of topic --- \thepage}
\makeatletter
\let\ORI@section\section
\renewcommand{\section}{\@ifstar\s@section\ORI@section}
\newcommand{\s@section}[1]{%
\ORI@section*{#1}
\csname phantomsection\endcsname % for hyperref
\addcontentsline{toc}{section}{#1}
}
\xpatchcmd{\tableofcontents}{\section}{\ORI@section}{}{} % toc not in toc
\makeatother
\begin{document}
\pagenumbering{roman}
\tableofcontents
\clearpage
\listoffigures
\clearpage
\listoftables
\clearpage
\section*{Section A}
\clearpage
\pagenumbering{arabic}
\section{Section B}
\end{document}
The code redefines \section
so that \section*
will automatically add it to the table of contents. There's only one catch: \tableofcontents
uses \section*
, so it has been patched in order to use the original version of the command.
Some points to note about your original code:
\special
is not needed, because geometry
takes care of it
- the
headheight
you specified is too small
\makebox[0pt][r]{Title of topic}
does nothing more than the simple Title of topic
, because fancyhdr
uses right alignment anyway there; I also added a dash to separate the title from the page number.
\onehalfspacing
is countermanded by \setstretch{1.3}
; if you can, avoid increasing the leading.
![enter image description here](https://i.stack.imgur.com/nnlmp.png)
If you want to reduce the spacing between section titles, add the following line
\xpatchcmd{\l@section}{1.0em}{0.5ex}{}{}
immediately before \makeatother
in the given code. Adjust 0.5ex
to what suits you. For the image, I added two subsections in order to give the flavor.
![enter image description here](https://i.stack.imgur.com/fVhcv.png)
Best Answer
Change the initial part to