230 lines
8.8 KiB
TeX
230 lines
8.8 KiB
TeX
%%% File: PhDThesis.cls
|
|
%%% Brief: Document class template for ED182 thesis manuscript
|
|
%%% Use: \documentclass[showNotes, showLineNumbers, showWatermark]{PhDThesis}
|
|
%%% Author: Alexandre BIGOT, alexandre.bigot@iphc.cnrs.fr
|
|
%%% Tweaks: Thibault BARNOUIN, thibault.barnouin@astro.unistra.fr
|
|
|
|
%% Identification
|
|
%% The class identifies itself and the LaTeX version needed
|
|
\NeedsTeXFormat{LaTeX2e}
|
|
\ProvidesClass{PhDThesis}[Minimal class for PhD thesis manuscript]
|
|
|
|
%% Load the article class file
|
|
\LoadClass[a4paper,twoside,12pt]{report}
|
|
|
|
%% Load packages
|
|
\RequirePackage{hyperref} % Extensive support for hypertext
|
|
\PassOptionsToPackage{a4paper,inner=30mm,outer=20mm,top=25mm,bottom=30mm}{geometry}\RequirePackage{geometry} % Flexible and complete interface to document dimensions
|
|
\PassOptionsToPackage{main=english,french}{babel}\RequirePackage{babel} % Multilingual support
|
|
\PassOptionsToPackage{T1}{fontenc}\RequirePackage{fontenc} % Standard package for selecting font encodings
|
|
\RequirePackage{pdfpages} % Insert pdf as pages
|
|
\RequirePackage{lmodern} % Make sure thesis is ready for printing
|
|
\RequirePackage{graphicx} % Enhanced support for graphics
|
|
\RequirePackage{xcolor} % Driver-independent color extensions
|
|
\RequirePackage{amsmath} % AMS mathematical facilities
|
|
\RequirePackage{amssymb} % AMS mathematical symbols
|
|
\RequirePackage{amsfonts} % TeX fonts from the American Mathematical Society
|
|
\RequirePackage{fancyhdr} % Extensive control of page headers and footers
|
|
\RequirePackage{caption} % Better captions for tables and figures
|
|
\RequirePackage{listings} % For code citing
|
|
\RequirePackage{xparse} % For better parameter handling
|
|
\PassOptionsToPackage{export}{adjustbox}\RequirePackage{adjustbox} % Framing
|
|
% \PassOptionsToPackage{lang-warn=false}{datatool-base}\RequirePackage{datatool-base} % Remove missing datatool warning for french
|
|
\PassOptionsToPackage{acronym,toc,nopostdot}{glossaries}\RequirePackage{glossaries} % Create acronym and glossary tables
|
|
\PassOptionsToPackage{most}{tcolorbox}\RequirePackage{tcolorbox} % Coloured boxes
|
|
\RequirePackage{colortbl} % Coloured row and columns in tables
|
|
\PassOptionsToPackage{nottoc}{tocbibind}\RequirePackage{tocbibind} % Add bibliography/index/contents to Table of Contents
|
|
\PassOptionsToPackage{nohints,tight}{minitoc}\RequirePackage{minitoc} % Produce a table of contents for each chapter, part or section
|
|
\PassOptionsToPackage{title}{appendix}\RequirePackage{appendix} % Extra control of appendices
|
|
\let\oldappendices=\appendices
|
|
\renewcommand\appendices{\oldappendices\adjustmtc}
|
|
\PassOptionsToPackage{modulo}{lineno}\RequirePackage{lineno} % Line numbers on paragraphs
|
|
\RequirePackage{macros} % Personal macros for bibliography
|
|
|
|
%% Switches
|
|
\newif\ifshowNotes
|
|
|
|
\newif\ifobjects
|
|
|
|
\newif\ifshowLineNumbers
|
|
%
|
|
%% Class options
|
|
\DeclareOption{showNotes}{\showNotestrue}
|
|
\DeclareOption{showLineNumbers}{\linenumbers} % show line numbers if switched on
|
|
%\DeclareOption{showWatermark}{\showWatermarktrue}
|
|
\ProcessOptions\relax % to process options
|
|
|
|
%%%%%%%%%%%%%%%% Commands and default values for Covers %%%%%%%%%%%%%%%%
|
|
% Author name
|
|
\makeatletter
|
|
\newcommand{\Firstname}[1]{\gdef\@Firstname{#1}}
|
|
\Firstname{Firstname}
|
|
\newcommand{\Lastname}[1]{\gdef\@Lastname{#1}}
|
|
\Lastname{Lastname}
|
|
\renewcommand{\author}[2]{\Firstname{#1}\Lastname{#2}\hypersetup{pdfauthor={#1 #2},pdfcreator={#1 #2}}}
|
|
% University name and logo
|
|
\newcommand{\UniversityName}[1]{\gdef\@UniversityName{#1}}
|
|
\UniversityName{Universit\'e de Strasbourg}
|
|
\newcommand{\UniversityLogo}[1]{\gdef\@UniversityLogo{#1}}
|
|
\UniversityLogo{Images/Covers/Logo\_Unistra.pdf}
|
|
\newcommand{\University}[2]{\UniversityName{#1}\UniversityLogo{#2}}
|
|
% Labo name and logo
|
|
\newcommand{\LaboName}[1]{\gdef\@LaboName{#1}}
|
|
\LaboName{My Laboratory}
|
|
\newcommand*{\LaboLogo}[1]{\gdef\@LaboLogo{#1}}
|
|
\LaboLogo{}
|
|
\newcommand{\Labo}[2]{\LaboName{#1}\LaboLogo{#2}}
|
|
% Doctoral school name and logo
|
|
\newcommand{\DoctoralSchoolName}[1]{\gdef\@DoctoralSchoolName{#1}}
|
|
\DoctoralSchoolName{\'Ecole Doctorale de physique et chimie-physique}
|
|
\newcommand{\DoctoralSchoolLogo}[1]{\gdef\@DoctoralSchoolLogo{#1}}
|
|
\DoctoralSchoolLogo{Images/Covers/logo\_ED182}
|
|
\newcommand{\DoctoralSchool}[2]{\DoctoralSchoolName{#1}\DoctoralSchoolLogo{#2}}
|
|
% Thesis title and subtitle in French and English
|
|
\newcommand{\ThesisDate}[1]{\gdef\@ThesisDate{#1}}
|
|
\ThesisDate{XX mois 20XX}
|
|
\newcommand{\TitreThese}[1]{\gdef\@TitreThese{#1}}
|
|
\TitreThese{Le titre de la thèse en français.}
|
|
\newcommand*{\SousTitreThese}[1]{\gdef\@SousTitreThese{#1}}
|
|
\SousTitreThese{}
|
|
\newcommand{\resume}[1]{\gdef\@resume{#1}}
|
|
\resume{1000 caract\`eres maximum}
|
|
\newcommand{\motscles}[1]{\gdef\@motscles{#1}}
|
|
\motscles{...}
|
|
\newcommand{\ThesisTitle}[1]{\gdef\@ThesisTitle{#1}\hypersetup{pdftitle={#1}}}
|
|
\ThesisTitle{Title of the thesis in english.}
|
|
\newcommand*{\ThesisSubTitle}[1]{\gdef\@ThesisSubTitle{#1}}
|
|
\ThesisSubTitle{}
|
|
\renewcommand{\abstract}[1]{\gdef\@abstract{#1}}
|
|
\abstract{1000 letters max}
|
|
\newcommand{\keywords}[1]{\gdef\@keywords{#1}\hypersetup{pdfkeywords={#1}}}
|
|
\keywords{...}
|
|
\newcommand{\PhDThesis@Abstractmaxchars}[1]{\edef\PhDThesis@Abstractmaxchars{#1}}
|
|
\PhDThesis@Abstractmaxchars{1000}
|
|
% Discipline
|
|
\newcommand{\Discipline}[1]{\gdef\@Discipline{#1}}
|
|
\Discipline{Physique}
|
|
\newcommand*{\Speciality}[1]{\gdef\@Speciality{#1}}
|
|
\Speciality{}
|
|
%%% Jury members title, name, position and affiliation
|
|
\newcommand{\person}[5]{\hspace{2mm}\bfseries{#1\, \MakeUppercase{#2}\, #3} & {#4, #5}\\}
|
|
% Directeurs
|
|
\newcommand{\directeurs}[1]{\gdef\@directeurs{#1}}
|
|
\directeurs{
|
|
\person{Civ.}{Lastname}{Firstname}{Pos.}{Affiliation}
|
|
\person{Civ.}{Lastname}{Firstname}{Pos.}{Affiliation}
|
|
}
|
|
% Rapporteurs
|
|
\newcommand{\rapporteurs}[1]{\gdef\@rapporteurs{#1}}
|
|
\rapporteurs{
|
|
\person{Civ.}{Lastname}{Firstname}{Pos.}{Affiliation}
|
|
\person{Civ.}{Lastname}{Firstname}{Pos.}{Affiliation}
|
|
}
|
|
% Jury
|
|
\newcommand{\jury}[1]{\gdef\@jury{#1}}
|
|
\jury{
|
|
\person{Civ.}{Lastname}{Firstname}{Pos.}{Affiliation}
|
|
\person{Civ.}{Lastname}{Firstname}{Pos.}{Affiliation}
|
|
\person{Civ.}{Lastname}{Firstname}{Pos.}{Affiliation}
|
|
}
|
|
\makeatother
|
|
|
|
%% Define my colours
|
|
\definecolor{DarkBlue}{rgb}{0.0, 0.0, 0.55}
|
|
\definecolor{DarkRed}{rgb}{0.55, 0.0, 0.0}
|
|
\definecolor{DarkGreen}{rgb}{0.0, 0.2, 0.13}
|
|
\definecolor{DodgerBlue}{rgb}{0.12, 0.56, 1.0}
|
|
\colorlet{DodgerBlue2}{DodgerBlue!80}
|
|
|
|
%% Color commands
|
|
\newcommand{\mycolor}[2]{\color{#1}#2\color{black}\xspace}
|
|
\newcommand{\red}[1]{\color{red}#1\color{black}\xspace}
|
|
|
|
\NewDocumentEnvironment{notes}{+b}{\ifshowNotes\color{gray}#1\color{black}\fi}{}
|
|
%% Change hyperlinks style
|
|
\hypersetup
|
|
{
|
|
colorlinks=true,
|
|
linkcolor=black,
|
|
linktocpage=false, % to have the link on the page number in toc
|
|
filecolor=magenta,
|
|
urlcolor=DodgerBlue,
|
|
citecolor=DodgerBlue,
|
|
}
|
|
|
|
%% Fonts substitutions for non existing bold small caps in lmodern
|
|
\rmfamily
|
|
\DeclareFontShape{T1}{lmr}{b}{sc}{<->ssub*cmr/b/sc}{}
|
|
\DeclareFontShape{T1}{lmr}{bx}{sc}{<->ssub*cmr/bx/sc}{}
|
|
|
|
\sffamily
|
|
\DeclareFontShape{T1}{lmss}{m}{sc} { <-> ssub * phv/m/sc }{}
|
|
\DeclareFontShape{T1}{lmss}{bx}{sc} { <-> ssub * phv/bx/sc }{}
|
|
|
|
|
|
%% A simple box
|
|
\newenvironment{mybox}[0]{%
|
|
\tcolorbox[opacityback=0., standard jigsaw,breakable]}%
|
|
{\endtcolorbox}
|
|
|
|
%% Change left and right margins (used in front and back covers)
|
|
\newenvironment{changemargin}[2]{%
|
|
\begin{list}{}{%
|
|
\setlength{\topsep}{0pt}%
|
|
\setlength{\leftmargin}{#1}%
|
|
\setlength{\rightmargin}{#2}%
|
|
\setlength{\listparindent}{\parindent}%
|
|
\setlength{\itemindent}{\parindent}%
|
|
\setlength{\itemsep}{\parskip}%
|
|
\setlength{\parsep}{\parskip}%
|
|
}%
|
|
\item[]
|
|
}{\end{list}}
|
|
|
|
%% Save default margin lengths
|
|
\newlength{\defaultOddsidemargin}
|
|
\setlength{\defaultOddsidemargin}{\oddsidemargin}
|
|
\newlength{\defaultEvensidemargin}
|
|
\setlength{\defaultEvensidemargin}{\evensidemargin}
|
|
|
|
%% Checked box symbol
|
|
\newcommand{\uncheckedbox}{\makebox[0pt][l]{$\square$}\raisebox{.15ex}{\hspace{11pt}}}
|
|
\newcommand{\checkedbox}{\makebox[0pt][l]{$\square$}\raisebox{.15ex}{\hspace{0.1em}$\checkmark$}}
|
|
|
|
% Warning on character count in resume/abstract
|
|
\makeatletter
|
|
\def\gobblechar{\let\char= }
|
|
\newcount\charcount
|
|
\def\countunlessnil{%
|
|
\ifx\char\nil \let\next=\relax%
|
|
\else%
|
|
\let\next=\auxcountchar%
|
|
\advance\charcount by 1%
|
|
\fi\next
|
|
}%
|
|
|
|
\def\auxcountchar{%
|
|
\afterassignment\countunlessnil\gobblechar%
|
|
}
|
|
\def\countchar#1{\edef\xx{#1}\charcount=0 \expandafter\auxcountchar\xx\nil}
|
|
|
|
\def\shownumchar#1{%
|
|
\countchar{#1}%
|
|
There are \the\charcount\ characters in [#1].%
|
|
}
|
|
\newcommand{\PhDThesis@checkResume}{%
|
|
\countchar{\@resume}%
|
|
\ifnum\charcount>\PhDThesis@Abstractmaxchars
|
|
\PhDThesis@warningAbstract{resume}{\PhDThesis@Abstractmaxchars}%
|
|
\fi
|
|
}
|
|
\newcommand{\PhDThesis@checkAbstract}{%
|
|
\countchar{\@abstract}%
|
|
\ifnum\charcount>\PhDThesis@Abstractmaxchars
|
|
\PhDThesis@warningAbstract{abstract}{\PhDThesis@Abstractmaxchars}%
|
|
\fi
|
|
}
|
|
\newcommand{\PhDThesis@warningAbstract}[2]{%
|
|
\@latex@warning@no@line{your #1 is longer than #2 characters}%
|
|
}
|