%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% %% Class ``PhD Thesis PSnPDF'' %% %% %% %% Version: v1.0 %% %% Authors: Krishna Kumar %% %% Date: 2013/11/16 %% %% Based on: King's LaTeX workshop by Krishna, CUED V1.1 Template by H. Banderi %% %% Cambridge Computer Laboratory PhD Template %% %% License: GPL V2.0 https://www.gnu.org/licenses/gpl-2.0.html %% %% GitHub Repo: https://github.com/kks32/phd-thesis-template/ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ******************** Class Identification ********************* \NeedsTeXFormat{LaTeX2e} \ProvidesClass{PhDThesisPSnPDF}[2013/11/24 version 1.0Beta by Krishna Kumar] \typeout{https://github.com/kks32/phd-thesis-template/} % *************************************************************** % ********************** Class Definition *********************** % *************************************************************** % ****************** Define a Print/Online Version ************** \newif\if@print\@printfalse \DeclareOption{print}{\@printtrue} % ************************** Define index *********************** \newif\ifCU@index\CU@indexfalse \DeclareOption{index}{\CU@indextrue} % ************************** Font Option ************************ \newif\ifsetFont\setFontfalse % Font is not set \newif\ifCU@times\CU@timesfalse % Times with Math Support \DeclareOption{times}{\CU@timestrue} \newif\ifCU@fourier\CU@fourierfalse % Fourier with Math Support \DeclareOption{fourier}{\CU@fouriertrue} \newif\ifCU@customfont\CU@customfontfalse % Custom Font with Math Support \DeclareOption{customfont}{\CU@customfonttrue} % ************************** Bibliography *********************** \newif\ifsetBib\setBibfalse % Using Custom Bibliography \newif\ifCU@authoryear\CU@authoryearfalse % Author-Year citation \DeclareOption{authoryear}{\CU@authoryeartrue} \newif\ifCU@numbered\CU@numberedfalse % Numbered citiation \DeclareOption{numbered}{\CU@numberedtrue} \newif\ifCU@custombib\CU@custombibfalse % Custom Bibliography \DeclareOption{custombib}{\CU@custombibtrue} % ****************** Header / Footer Styling ******************** \newif\ifCU@pageStyleI\CU@pageStyleIfalse % Set Page StyleI \DeclareOption{PageStyleI}{\CU@pageStyleItrue} \newif\ifCU@pageStyleII\CU@pageStyleIIfalse % Set Page StyleI \DeclareOption{PageStyleII}{\CU@pageStyleIItrue} % ********************** Custom Margins ************************ \newif\ifsetMargin\setMarginfalse % Margins are not set \newif\ifCU@custommargin\CU@custommarginfalse % Custom margin \DeclareOption{custommargin}{\CU@custommargintrue} \ProcessOptions\relax% % ********************* Pre-defined Options ********************** % Font Size \newcommand\CU@ptsize{12pt} %Set Default Size as 12 \DeclareOption{10pt}{\ClassWarning{PhDThesisPSnPDF}{Cambridge University recommends using a minimum font size of 11pt (12pt is preferred) and 10pt for footnotes.}\renewcommand\CU@ptsize{10pt}} \DeclareOption{11pt}{\renewcommand\CU@ptsize{11pt}}% \DeclareOption{12pt}{\renewcommand\CU@ptsize{12pt}}% \PassOptionsToClass{\CU@ptsize}{book}% % Page Size \newcommand\CU@papersize{a4paper} % Set Default as a4paper \DeclareOption{a4paper}{\renewcommand\CU@papersize{a4paper}} \DeclareOption{a5paper}{\renewcommand\CU@papersize{a5paper}} \DeclareOption{letterpaper}{\ClassWarning{PhDThesisPSnPDF}{Cambridge University Engineering Deparment recommends using A4 or A5paper}\renewcommand\CU@papersize{letterpaper}} \PassOptionsToClass{\CU@papersize}{book}% % Column layout \DeclareOption{oneside}{\PassOptionsToClass{\CurrentOption}{book}}% \DeclareOption{twoside}{\PassOptionsToClass{\CurrentOption}{book}}% % Draft Mode \DeclareOption{draft}{\PassOptionsToClass{\CurrentOption}{book}}% % Generates Warning for unknown options \DeclareOption*{ \ClassWarning{PhDThesisPSnPDF}{Unknown or non-standard option '\CurrentOption'. Will see if I can load it from the book class. If you get a warning unused global option(s): `\CurrentOption` then the option is not supported!} \PassOptionsToClass{\CurrentOption}{book} } \ProcessOptions\relax% \ifx\pdfoutput\undefined% \LoadClass[dvips,fleqn,openright]{book}% \@ifundefined{pdfoutput}{ \AtBeginDvi{\special{papersize=\paperwidth,\paperheight}} } \else% \LoadClass[pdftex,fleqn,openright]{book}% \AtBeginDvi{\special{papersize=\paperwidth,\paperheight}}% \fi% % **************************** Print / Online *************************** % Defines a print / online version to define page-layout and hyperrefering \if@print \RequirePackage{hyperref} % For Print version \hypersetup{ plainpages=false, pdfstartview=FitV, pdftoolbar=true, pdfmenubar=true, bookmarksopen=true, bookmarksnumbered=true, breaklinks=true, linktocpage, colorlinks=true, linkcolor=black, urlcolor=black, citecolor=black, anchorcolor=black } \ifCU@custommargin \setMarginfalse \else % Odd and Even side Margin staggering for binding and set viewmode for PDF \RequirePackage[hmarginratio=3:2]{geometry} \setMargintrue \fi \if@twoside \hypersetup{pdfpagelayout=TwoPageRight} \else \hypersetup{pdfpagelayout=OneColumn} \fi \else \RequirePackage{hyperref} % For PDF Online version \hypersetup{ plainpages=false, pdfstartview=FitV, pdftoolbar=true, pdfmenubar=true, bookmarksopen=true, bookmarksnumbered=true, breaklinks=true, linktocpage, colorlinks=true, linkcolor=blue, urlcolor=blue, citecolor=blue, anchorcolor=green} \ifCU@custommargin \setMarginfalse \else % No Margin staggering on Odd and Even side \RequirePackage[hmarginratio=1:1]{geometry} \setMargintrue \fi \hypersetup{pdfpagelayout=OneColumn} \fi % ****************************************************************************** % ******************************** Packages ************************************ % ****************************************************************************** % *********************** Layout and Formatting ******************************** \def\pdfshellescape{1} \RequirePackage{lscape} % Supports Landscape Layout \RequirePackage{setspace} % Define line spacing in para \RequirePackage{calc} % To calculate vertical spacing % *************************** Conditional Statements ************************** \RequirePackage{ifthen} % Used in LaTeX Class files for conditional statements \RequirePackage{ifpdf} % Check for pdfLaTeX % *********************** Table of Contents and Appendix************************ % add Bibliography, List of figures and tables to contents \RequirePackage{tocbibind} \RequirePackage{appendix} % add appendix % **************************** Graphics and Figures **************************** \RequirePackage[usenames, dvipsnames]{color} % Convert eps figures to pdf \RequirePackage{epstopdf} \ifpdf \RequirePackage[pdftex]{graphicx} \DeclareGraphicsExtensions{.png, .jpg, .pdf} \pdfcompresslevel=9 \graphicspath{{Figs/Raster/}{Figs/}} \else \RequirePackage{graphicx} \DeclareGraphicsExtensions{.eps, .ps} \graphicspath{{Figs/Vector/}{Figs/}} \fi % **************************** URL Package and Definition *********************** \RequirePackage{url} % Redefining urlstyle to use smaller fontsize in References with URLs \newcommand{\url@leostyle}{% \@ifundefined{selectfont}{\renewcommand{\UrlFont}{\sf}}{\renewcommand{\UrlFont}{\small\ttfamily}}} \urlstyle{leo} % ********************************** Bibliography ******************************* \ifCU@authoryear \RequirePackage[round, sort, numbers, authoryear]{natbib} %author year \setBibtrue \else \ifCU@numbered \RequirePackage[numbers,sort&compress]{natbib} % numbered citation \setBibtrue \else \ifCU@custombib \setBibfalse \else \RequirePackage[numbers,sort&compress]{natbib} % Default - numbered \setBibtrue \ClassWarning{PhDThesisPSnPDF}{No bibliography style was specified. Default numbered style is used. If you would like to use a different style, use `authoryear' or `numbered' in the options in documentclass or use `custombib` and define the natbibpackage with required style in the Preamble.tex file} % Generate a warning message here \fi \fi \fi % *************************** To copy ligatures and Fonts *********************** \RequirePackage{textcomp} \RequirePackage[utf8]{inputenc} \RequirePackage[T1]{fontenc} % Font Selection \ifCU@times \RequirePackage{mathptmx} % times roman, including math (where possible) \setFonttrue \else \ifCU@fourier \RequirePackage{fourier} % Fourier \setFonttrue \else \ifCU@customfont \setFontfalse \else \ClassWarning{PhDThesisPSnPDf}{Using default font Latin Modern. If you would like to use other pre-defined fonts use `times' (Cambridge University recommends using Times font) or `fourier' or load a custom font in preamble by specifying `customfont' in the class options} \RequirePackage{lmodern} \setFonttrue \fi \fi \fi \input{glyphtounicode} \pdfglyphtounicode{f_f}{FB00} \pdfglyphtounicode{f_i}{FB01} \pdfglyphtounicode{f_l}{FB02} \pdfglyphtounicode{f_f_i}{FB03} \pdfglyphtounicode{f_f_l}{FB04} \pdfgentounicode=1 % ******************************************************************************** % **************************** Pre-defined Settings ****************************** % ******************************************************************************** % ***************************** Setting PDF Meta-Data **************************** \ifpdf \AtBeginDocument{ \hypersetup{ pdftitle = {\@title}, pdfauthor = {\@author}, pdfsubject={\@subject}, pdfkeywords={\@keywords} } } \fi % ***************************** TOC and Hide Sections *************************** \newcommand{\nocontentsline}[3]{} \newcommand{\tochide}[2]{\bgroup\let\addcontentsline=\nocontentsline#1{#2}\egroup} % Removes pagenumber appearing from TOC \addtocontents{toc}{\protect\thispagestyle{empty}} % ******************************* Header Formatting ***************************** % Custom Header with Chapter Number, Page Number and Section Numbering \RequirePackage{fancyhdr} % Define custom header % Set Fancy Header Command is defined to Load FancyHdr after Geometry is defined \newcommand{\setFancyHdr}{ \pagestyle{fancy} \ifCU@pageStyleI % Style 1: Sets Page Number at the Top and Chapter/Section Name on LE/RO \renewcommand{\chaptermark}[1]{\markboth{##1}{}} \renewcommand{\sectionmark}[1]{\markright{\thesection\ ##1\ }} \fancyhf{} \fancyhead[RO]{\nouppercase \rightmark\hspace{0.25em} | \hspace{0.25em} \bfseries{\thepage} } \fancyhead[LE]{{\bfseries\thepage} \hspace{0.25em} | \hspace{0.25em} \nouppercase \leftmark } \else \ifCU@pageStyleII % Style 2: Sets Page Number at the Bottom with Chapter/Section Name on LO/RE \renewcommand{\chaptermark}[1]{\markboth{##1}{}} \renewcommand{\sectionmark}[1]{\markright{\thesection\ ##1}} \fancyhf{} \fancyhead[RO]{\bfseries\nouppercase \rightmark} \fancyhead[LE]{\bfseries \nouppercase \leftmark} \fancyfoot[C]{\thepage} \else % Default Style: Sets Page Number at the Top (LE/RO) with Chapter/Section Name on LO/RE \renewcommand{\chaptermark}[1]{\markboth {##1}{}} \renewcommand{\sectionmark}[1]{\markright{\thesection\ ##1}} \fancyhf{} \fancyhead[LO]{\nouppercase \rightmark} \fancyhead[LE,RO]{\bfseries\thepage} \fancyhead[RE]{\nouppercase \leftmark} \fi \fi } \setlength{\headheight}{14.5pt} %\renewcommand{\headrulewidth}{0.5pt} %\renewcommand{\footrulewidth}{0pt} \fancypagestyle{plain}{ \fancyhead{} \renewcommand{\headrulewidth}{0pt} } % If Margin has been set (default margin print/online version) \ifsetMargin \setFancyHdr % Apply fancy header settings otherwise apply it in preamble \fi % **************** Clear Header Style on the Last Empty Odd pages *************** \renewcommand{\cleardoublepage}{\clearpage\if@twoside \ifodd\c@page\else% \hbox{}% \thispagestyle{empty} % Empty header styles \newpage% \if@twocolumn\hbox{}\newpage\fi\fi\fi} % ********************************* Roman Pages ********************************* % The romanpages environment set the page numbering to lowercase roman one % for the contents and figures lists. It also resets % page-numbering for the remainder of the dissertation (arabic, starting at 1). \newenvironment{romanpages}{ \setcounter{page}{1} \renewcommand{\thepage}{\roman{page}}} {\newpage\renewcommand{\thepage}{\arabic{page}}} % ******************************************************************************* % **************************** Macro Definitions ******************************** % ******************************************************************************* % These macros are used to declare arguments needed for the % construction of the title page and other preamble. % The year and term the degree will be officially conferred \newcommand{\@degreedate}{} \newcommand{\degreedate}[1]{\renewcommand{\@degreedate}{#1}} % The full (unabbreviated) name of the degree \newcommand{\@degree}{} \newcommand{\degree}[1]{\renewcommand{\@degree}{#1}} % The name of your department(eg. Engineering, Maths, Physics) \newcommand{\@dept}{} \newcommand{\dept}[1]{\renewcommand{\@dept}{#1}} % The name of your college (eg. King's) \newcommand{\@college}{} \newcommand{\college}[1]{\renewcommand{\@college}{#1}} % The name of your University \newcommand{\@university}{} \newcommand{\university}[1]{\renewcommand{\@university}{#1}} % Defining the crest \newcommand{\@crest}{} \newcommand{\crest}[1]{\renewcommand{\@crest}{#1}} % Submission Text \newcommand{\submissiontext}{This dissertation is submitted for the degree of } % keywords (These keywords will appear in the PDF meta-information % called `pdfkeywords`.) \newcommand{\@keywords}{} \newcommand{\keywords}[1]{\renewcommand{\@keywords}{#1}} % subjectline (This subject will appear in the PDF meta-information % called `pdfsubject`.) \newcommand{\@subject}{} \newcommand{\subject}[1]{\renewcommand{\@subject}{#1}} % These macros define an environment for front matter that is always % single column even in a double-column document. \newenvironment{alwayssingle}{% \@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn \else\newpage\fi} {\if@restonecol\twocolumn\else\newpage\fi} % Set single column even under two column layout \newcommand{\setsinglecolumn}{ \if@twocolumn \onecolumn \else \fi } % ******************************************************************************** % ***************************** Front Matter Layout ****************************** % ******************************************************************************** % ********************************** Title Page ********************************* \renewcommand{\maketitle}{ %%Can use the line below to remove the blank page after the title page %%\setcounter{page}{0} % Sasa Tomic % To compute the free vertical space in Title page \computeTitlePageSpacing \begin{singlespace} \begin{center} % Title {\Huge \bfseries{\@title} \par} \vspace{.25\CU@titlepagespacing} % Crest {\@crest \par} \vspace{.2\CU@titlepagespacing} % Author {\Large \bfseries{\@author} \par} \vspace*{1ex} % Department and University {\large \@dept \par} \vspace*{1ex} {\large \@university \par} \vspace{.2\CU@titlepagespacing} % Submission Text {\large \submissiontext \par} \vspace*{1ex} {\large \it {\@degree} \par} \end{center} \vfill \large \begin{minipage}{0.49\textwidth} \flushleft\hspace*{\oddsidemargin}\@college \end{minipage} \begin{minipage}{0.49\textwidth} \flushright \@degreedate \end{minipage} \end{singlespace} } % ********************************* Dedication ********************************** % The dedication environment makes sure the dedication gets its % own page and is set out in verse format.3 \newenvironment{dedication} { \cleardoublepage \setsinglecolumn \vspace*{0.2\textheight} \thispagestyle{empty} \centering } % ******************************** Declaration ********************************** % The declaration environment puts a large, bold, centered % "Declaration" label at the top of the page. \newenvironment{declaration}{ \cleardoublepage \setsinglecolumn \chapter*{\centering \Large Declaration} \thispagestyle{empty} }{ \flushright \@author{}\\ \@degreedate{} \vfill } % ******************************* Acknowlegments ********************************* % The acknowledgements environment puts a large, bold, centered % "Acknowledgements" label at the top of the page. \newenvironment{acknowledgements}{ \cleardoublepage \setsinglecolumn \chapter*{\centering \Large Acknowlegements} \thispagestyle{empty} } % ******************************** Abstract *********************************** % The abstract environment puts a large, bold, centered "Abstract" label at % the top of the page. \newenvironment{abstract} { \cleardoublepage \setsinglecolumn \chapter*{\centering \Large Abstract} \thispagestyle{empty} } %The abstractseparate environment is for running of a page with the abstract %on including title and author etc as required to be handed in separately \newenvironment{abstractseparate} {\begin{alwayssingle} \pagestyle{empty} % \vspace*{-1in} \begin{center} { \Large {\bfseries {\@title}} \par} {{\large \vspace*{1ex} \@author} \par} {\large \vspace*{1ex} {{\@dept} \par} {{\@university} \par} \vspace*{1ex} {{\it \submissiontext} \par} {\it {\@degree} \par} \vspace*{2ex} {\@degreedate}} \end{center}} {\end{alwayssingle}} % ******************************** Nomenclature ********************************* \usepackage{nomencl} \makenomenclature \renewcommand{\nomgroup}[1]{% \ifthenelse{\equal{#1}{A}}{\item[\textbf{Roman Symbols}]}{% \ifthenelse{\equal{#1}{G}}{\item[\textbf{Greek Symbols}]}{% \ifthenelse{\equal{#1}{Z}}{\item[\textbf{Acronyms / Abbreviations}]}{% \ifthenelse{\equal{#1}{R}}{\item[\textbf{Superscripts}]}{% \ifthenelse{\equal{#1}{S}}{\item[\textbf{Subscripts}]}{% \ifthenelse{\equal{#1}{X}}{\item[\textbf{Other Symbols}]} {} }% matches mathematical symbols > X }% matches Subscripts > S }% matches Superscripts > R }% matches Abbreviations > Z }% matches Greek Symbols > G }% matches Roman Symbols > A % Add nomenclature to contents and print out nomenclature \newcommand{\printnomencl}[1][]{ \ifthenelse{\equal {#1}{}} {\printnomenclature} {\printnomenclature[#1]} \addcontentsline{toc}{chapter}{\nomname} } % ******************************* Create the index ****************************** \ifCU@index \RequirePackage{makeidx} \makeindex \newcommand{\printthesisindex}{ \cleardoublepage \phantomsection \printindex} \else \newcommand{\printthesisindex}{} \fi % ********************* To compute empty space in title page ********************* % Boxes below are used to space differt contents on the title page \newcommand{\computeTitlePageSpacing}{ % Title Box \newsavebox{\CU@Title} \begin{lrbox}{\CU@Title} \begin{minipage}[c]{0.98\textwidth} \centering \Huge \bfseries{\@title} \end{minipage} \end{lrbox} % University Crest Box \newsavebox{\CU@crest} \begin{lrbox}{\CU@crest} \@crest \end{lrbox} % Author Box \newsavebox{\CU@author} \begin{lrbox}{\CU@author} \begin{minipage}[c]{\textwidth} \centering \Large \bfseries{\@author} \end{minipage} \end{lrbox} % Department Box \newsavebox{\CU@dept} \begin{lrbox}{\CU@dept} \begin{minipage}[c]{\textwidth} \centering {\large \@dept \par} \vspace*{1ex} {\large \@university \par} \end{minipage} \end{lrbox} % Submission Box \newsavebox{\CU@submission} \begin{lrbox}{\CU@submission} \begin{minipage}[c]{\textwidth} \begin{center} \large \submissiontext \par \vspace*{1ex} \large \it {\@degree} \par \end{center} \end{minipage} \end{lrbox} % College and Date Box \newsavebox{\CU@collegedate} \begin{lrbox}{\CU@collegedate} \begin{minipage}[c]{\textwidth} \large \begin{minipage}{0.45\textwidth} \flushleft\@college \end{minipage} \begin{minipage}{0.45\textwidth} \flushright \@degreedate \end{minipage} \end{minipage} \end{lrbox} % Now to compute the free vertical space \newlength{\CU@titlepagespacing} \setlength{\CU@titlepagespacing}{ \textheight % - \totalheightof{\usebox{\CU@Title}} - \totalheightof{\usebox{\CU@crest}} - \totalheightof{\usebox{\CU@author}} - \totalheightof{\usebox{\CU@dept}} - \totalheightof{\usebox{\CU@submission}} - \totalheightof{\usebox{\CU@collegedate}} } }