You should issue the commands \fontsize{8}{9.5}\selectfont
after the \tableofcontents
command (and other frontmatter commands) but before the first chapter command. Near the end of the document, i.e., just before the bibliography, you also need to issue the command \normalsize
to restore the font's size to \normalsize
, be that 10pt, 11pt, or 12pt (or any other value).
In the following MWE, the command \eightptsize
encases the fontsize-changing commands:
\documentclass[a4paper,12pt]{book} % basic font size in this MWE: 12pt
\usepackage[margin=2.5cm]{geometry}
\usepackage{lipsum}
% command to switch to 8pt on a baselineskip of 9.5pt
\newcommand{\eightptsize}{%
\fontsize{8}{9.5}\selectfont}
\begin{document}
\tableofcontents
\eightptsize
\chapter{In the Beginning}
\section{Section 1}
\subsection{Some subsection}
As posited by \cite{x}, we can't know for sure \ldots
\lipsum[1]
\subsection{Another subsection}
\lipsum[2]
%% back to 'normalsize' font size before start of bibliography
\normalsize
\begin{thebibliography}{9}
\bibitem{x}Variable, Random, 2011, ``On Randomness,'' \emph{Journal of Randomness},
Vol.~1, No.~1, pp.\ 1--2.
\end{thebibliography}
\end{document}
Where does the value of 9.5pts for \baselineskip
come from, you may ask? I've taken it from the default definition of this variable for the case that normalsize is 10pt, in which case the command \footnotesize
switches to an 8pt font size with a baselineskip of 9.5pt. Of course, you may prefer either more or less leading than the TeX default.
Edit: Addendum -- How to deal with the font size for footnotes in a text set in 8pt?
It occurred to me that even though you've specified that nothing should change except for the fontsize of the text, you really should be willing to make an exception for the case of footnotes. (I assume you'll have some in a book-length document!) The reason for this is that if your documentclass sets \normalsize
to 10pt, 11pt, or 12pt, respectively, footnote text will be set in a font size of 8pt, 9pt, and 10pt. Common (near-universal?!) typographic practice, however, is to have footnotes be set in a fontsize that's 1 or 2 points smaller that \normalsize
. Assuming, for instance, that \normalsize
might be 12pt, you would get footnotes set in 10pt even though the text itself is set in 8pt: this is going to look weird, to say the least. The solution is to do a \renewcommand
on the LaTeX macro named, what else, \footnotesize
. In the code of the MWE above, you would have to replace the definition of the \eightptsize
macro with the following code (the \makeatletter
and \makeatother
commands are required because a couple of the commands being reset contain the "special" character @
):
\makeatletter
\newcommand{\eightptsize}{
\fontsize{8}{9.5}\selectfont
\renewcommand\footnotesize{%
\@setfontsize\footnotesize{7}{8}%
\abovedisplayskip 5\p@ \@plus2\p@ \@minus3\p@
\abovedisplayshortskip \z@ \@plus\p@
\belowdisplayshortskip 2\p@ \@plus\p@ \@minus1\p@
\belowdisplayskip \abovedisplayskip
}
}
\makeatother
The main change is to set the footnote font size to 7pt, i.e., 1pt less than the font size of the text. The rest of the code is cribbed unashamedly from the definition in the book10.clo file. :-)
Edit: Second Addendum -- How to fix up the class file mwrep?
For some reason, the class file you use (mwrep.cls
) does not specify a default font size for the headers of subsections, subsubsections, paragraphs, and subparagraphs. To fix this, you should make a copy of this class file, name it (say) mwrep-kronos.cls
, find the four instances of the command \SetSectionFormatting{
subsection
, subsection
, paragraph
, subparagraph}
and, within these commands, the instances of the commands \FormatHangHeading{}
(twice) and \FormatRunInHeading{}
(twice). Insert the instruction \normalsize
in each of the 4 pairs of empty curly braces. Save the new class file and, if necessary, update the TeX filename database. (By the way, you'll probably need superuser privileges to copy/rename the file and update the filename database.) Then specify the class file mwrep-kronos
as the argument of the \docummentclass
command and you should be all set to go.
It's generally not a good idea to reduce the font size to make things fit in your document. Font sizes should be uniform for equivalent parts of a document. However, it's certainly easy enough to do if that's what you need.
The array
package adds some very useful functionality to the regular tabular mechanism. In particular it allows you to specify code that applies at the beginning and end of each cell in a column. It also allows you to create new column types so that if you use the same formatting over again, you can just give it its own letter name.
The syntax of a column specification using array
is the following:
>{before code}columntype<{after code}
where before code will be executed before each cell in the column and after code will be executed at the end of each cell in a column. The column type is l
, r
, c
, p{<width>}
or any other type as defined by you (or by some other tabular package that uses array
.)
For example, if we want a centre-aligned column where each element is \large
, we can do the following:
\begin{tabular}{>{\large}c}
If we're going to use this column type a lot, then we can make it its own symbol:
\newcolumntype{C}{>{\large}c}
and then use
\begin{tabular}{C}
Here's a simple example:
\documentclass[12pt]{article}
\usepackage{array}
\newcolumntype{T}{>{\tiny}l} % define a new column type for \tiny
\newcolumntype{H}{>{\Huge}l} % define a new column type for \Huge
\begin{document}
\begin{tabular}{>{\footnotesize}l>{\Huge}llTH}
footnote size & huge & normal & tiny & huge
\end{tabular}
\end{document}
Of course the code you specify can be pretty much anything, although formatting commands like font size and family commands are most likely. But the code can be quite complex if you need it to be. For example, you can increment and display a counter to achieve automatic row numbers in a table, as in this question:
Best Answer
write