summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/edmaths/edmaths.sty
blob: cbfd89a5bed0b4897c53e44d2f85383cf6b8c100 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
%% Package `edmaths' v0.99
%% File edmaths.sty
%% Copyright 2024 Josh Fogg
%%
%% edmaths.sty is a LaTeX style file for typesetting reports and theses in the
%% School of Mathematics at the University of Edinburgh. Suitable for use for
%% theses, yearly reports, and undergraduate projects. Part of the more general
%% `edmaths' package. See README.md for usage instructions.
%%
%% This work may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License, either version 1.3 of this license or (at
%% your option) any later version.
%%
%% The latest version of this license is in http://latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX version
%% 2005/12/01 or later.
%% 
%% This work has the LPPL maintenance status `maintained' and the current
%% maintainer of this work is Josh Fogg. Originally written by Thomas Koeppe in
%% 2007/07, it has since been updated by Josh Fogg from 2020 onwards.
%%
%% This work consists of the file edmaths.sty.

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{edmaths}[2024-08-30 Edinburgh maths thesis/report style v0.99]
\RequirePackage{calc,ifthen,setspace,amsmath,amsthm,amscd,amssymb}



% PAGE SIZE AND MARGINS
% These settings control the size of the page and its margins. All measurements are
% compliant wih the school's typesetting requirements.

\setlength{\paperheight}{297mm}    % A4 Paper
\setlength{\paperwidth}{210mm}     %
\setlength{\oddsidemargin}{14.6mm} %  Left/Inside: 4.0cm (rel. -1in)
\setlength{\evensidemargin}{-.4mm} %  Right/Outside: 2.5cm (rel. -1in)
\setlength{\topmargin}{-17.4mm}    % \
\setlength{\headheight}{6mm}       % | Top: 2.0cm (rel. -1in), out of which 6mm for the header
\setlength{\headsep}{6mm}          % /
\setlength{\textwidth}{145mm}      % Margins: 2.5cm + 4cm
% Textheight delayed until we know the line spacing.

% The following is removed in favour of the `report' class options "oneside/twoside".
% \@twosidefalse \@mparswitchfalse  % Single-sided by default



% PACKAGE OPTIONS
% These options can be selected wihin \usepackage[...]{edmaths} to modify the
% appearance of different parts of the document.

% Options relating to external packages
\newboolean{with-fourier}   % Use the `fourier' package for Adobe Utopia font
\newboolean{with-cmbright}   % Use the `cmbright' package for Computer Modern Bright (sans serif) font
\newboolean{with-comicsans}   % :)
\newboolean{with-hyperref}  % Use the `hyperref' package for hyperlinks and bookmarks, all black
\newboolean{with-colour}    % Add sane colours to the hyperref links
\newboolean{with-fancyhdr}  % Use the `fancyhdr' package to provide header and footer
\DeclareOption{fourier}{\setboolean{with-fourier}{true}}
\DeclareOption{cmbright}{\setboolean{with-cmbright}{true}}
\DeclareOption{comicsans}{\setboolean{with-comicsans}{true}}
\DeclareOption{hyperref}{\setboolean{with-hyperref}{true}}
\DeclareOption{colour}{\setboolean{with-colour}{true}}
\DeclareOption{fancyhdr}{\setboolean{with-fancyhdr}{true}}

% Options relating to document type (thesis, report, etc)
\ifthenelse{\isundefined{\degreetext}}{\newcommand{\degreetext}{Specify a degree option!}}{}
\DeclareOption{phd}{\renewcommand{\degreetext}{Doctor of Philosophy}}
\DeclareOption{firstyear}{\renewcommand{\degreetext}{First-Year Report\\Maxwell Institute Graduate School}}
\DeclareOption{secondyear}{\renewcommand{\degreetext}{Second-Year Report\\Maxwell Institute Graduate School}}
\DeclareOption{thirdyear}{\renewcommand{\degreetext}{Third-Year Report\\Maxwell Institute Graduate School}}
\DeclareOption{y4project}{\renewcommand{\degreetext}{Year 4 Project\\School of Mathematics}}
\DeclareOption{mmath}{\renewcommand{\degreetext}{Master of Mathematics with Honours \\ School of Mathematics}}
\DeclareOption{masterph}{\renewcommand{\degreetext}{Master of Philosophy}}
\DeclareOption{mastersc}{\renewcommand{\degreetext}{Master of Science by Research}}

% Options relating to stretchfactor (used for margin spacing)
\ifthenelse{\isundefined{\stretchfactor}}{\newcommand{\stretchfactor}{1}}{}
\DeclareOption{single}{\renewcommand{\stretchfactor}{1}}
\DeclareOption{onehalf}{\renewcommand{\stretchfactor}{1.5}}
\DeclareOption{double}{\renewcommand{\stretchfactor}{2}}

% Options relating to having single or double sided documents
% \DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}  % Single-sided by default
% \DeclareOption{twosides}{\@twosidetrue \@mparswitchtrue}


\ProcessOptions

% If with-fourier selected, use the Adobe Utopia font.
\ifthenelse{\boolean{with-fourier}}{
    \RequirePackage{cmap}
    \RequirePackage{fourier}
    \RequirePackage[T1]{fontenc}
    \RequirePackage{microtype}
} {}

% If with-cmbright selected, use the (sans-serif) Computer Modern Bright font.
\ifthenelse{\boolean{with-cmbright}}{
    % NOTE if it doesn't compile, make sure you have CM Bright installed!
    \RequirePackage{cmap}
    \RequirePackage{cmbright}
    \RequirePackage[T1]{fontenc}
    \RequirePackage{microtype}
} {}

% :)
\ifthenelse{\boolean{with-comicsans}}{
    % NOTE must be compiled with xelatex or luatex
    \usepackage{fontspec}
    \setmainfont{Comic Sans MS}
} {}

% If with-hyperref selected, configure its default settings
\ifthenelse{\boolean{with-hyperref}}{
    \RequirePackage[dvipsnames]{xcolor}
    \RequirePackage[pdftitle={\@title}, pdfauthor={\@author}, pdfcreator={PDFLaTeX with edmaths}, pdfpagelayout=OneColumn, colorlinks=true, linkcolor=black, urlcolor=black, citecolor=black]{hyperref}
    % If with-colour selected, use it to make hyperlinks blue not black
    \ifthenelse{\boolean{with-colour}}{
        \hypersetup{linkcolor=Sepia, urlcolor=NavyBlue, citecolor=Sepia}
    } {}
} {}

% If with-fancyhdr selected, use it to provide fancier headers and footers
\ifthenelse{\boolean{with-fancyhdr}}{
    \RequirePackage{fancyhdr}
    % Define a short title for use in headers if title is too long. Default is the same as title. Usage: use command \shortitle{<your short title here>} *after* calling edmaths.
    \newcommand\@shorttitle{\@title}
    \newcommand\shorttitle[1]{\renewcommand\@shorttitle{#1}}
    \pagestyle{fancy}
    \fancyhf{}
    % if \fancyhead or \fancyfoot are used without `twoside` in \documentclass{...} then
    % fancyhdr will complain that the 'E' used here is useless, so need to condition.
    \if@twoside%
        %%% put the stuff for true here (twoside=true)
        \fancyhead[RO,LE]{\thepage}
        \fancyfoot[RO,LE]{\thepage}
        \fancyhead[LO]{\it\@shorttitle}
        \fancyhead[RE]{\@author}
        \fancyfoot[RE,LO]{}
    \else%
        %%% put the stuff for false here (twoside=false)
        \fancyhead[LO]{\it\@shorttitle~~$\cdot$~~\@author}
        \fancyhead[R]{\thepage}
        \fancyfoot[R,LO]{}
    \fi%  
} {}



% BODY HEIGHT
% Set up the text body height. For the text height, we calculate the largest number of
% lines that gives us no more than 4cm bottom margin. This depends on the line spacing,
% which we need first.

\setstretch{\stretchfactor}

% Debug only: In the next line, \XXXfactor contains the number of lines on a text-only page.
% \newlength{\XXXunit}\setlength{\XXXunit}{1pt}\newlength{\XXXfactor}\setlength{\XXXfactor}{1pt + ((672pt - \topskip) / \baselineskip) * \XXXunit}
\newlength{\scratchlength}\setlength{\scratchlength}{\topskip + ((672pt - \topskip) / \baselineskip) * \baselineskip + \baselineskip}
\setlength{\textheight}{\scratchlength}



% DOCUMENT COMPONENTS
% Provides the formatting for the required document components. Specifically, these are
% the titlepage, declaration, dedication, abstract, and undergraduate project fulfilment.

\renewcommand{\maketitle}{%
    \begin{titlepage}
        \singlespacing
        \addtolength{\oddsidemargin}{-0.75cm}
        \begin{center}
            \null\vskip 4.1cm
            \begin{minipage}[t][7.6cm]{10.5cm}
                \begin{center}
                    {\LARGE\textbf{\@title}\par}
                    {\Large\textit{\@author}\par}
                \end{center}
            \end{minipage}
            \vfill
            {\Large\degreetext \par The University of Edinburgh \par\@date \par}
        \end{center}
    \end{titlepage}
    % For two-sided documents it's required that a blank page follow the title page. For
    % one-sided documents it's required that the title page contribute to the page count.
    \if@twoside
        \thispagestyle{empty}
        \cleardoublepage
    \else
        \addtocounter{page}{1}
    \fi
}


% Declaration style for everything except year 4 projects
\newcommand{\declaration}[1]{
    % Doesn't need a chapter number or adding to the contents page
    \chapter*{Declaration}
    % Must always be single spaced
    \begin{singlespace}
        \def\param{#1}
        \ifx\param\empty
            I declare that this thesis was composed by myself
            and that the work contained therein is my own,
            except where explicitly stated otherwise in the text.
        \else
            {#1}
        \fi
    \end{singlespace}
    {\raggedleft\vspace{2cm}(\textit{\@author})}
}


% Declaration style for year 4 project, argument is degree programme (e.g. MMath)
\newcommand{\yfourdeclaration}[1]{
    \vfill
    \noindent
    This project report is submitted in partial fulfilment
    of the requirements for the degree of \textit{#1}.
}


\renewenvironment{abstract}{
    % Abstracts don't need a chapter number...
    \chapter*{\abstractname}
}{
    % ...but do need adding to the contents page.
    \addcontentsline{toc}{chapter}{\abstractname}
}


\newenvironment{laysummary}{
    % A lay summary is required for PhD theses and is not included in the page count. We treat it in a similar way to the abstract here.
    \chapter*{Lay Summary}
}{
    \addcontentsline{toc}{chapter}{Lay Summary}
}


\newenvironment{acknowledgements}{
    % Acknowledgements environment similar to abtract and lay summary.
    \chapter*{Acknowledgements}
}{
    \addcontentsline{toc}{chapter}{Acknowledgements}
}


\newcommand{\dedication}[1]{%
    % Handled dedications (e.g. 'For Alex', not acknowledgements)
    \clearpage
    \thispagestyle{plain}
    \vspace*{7cm}
    \begin{center}
        \Large\it #1
    \end{center}
}