latex-mimosis/mimosis.cls

336 lines
9.6 KiB
OpenEdge ABL
Raw Normal View History

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{mimosis}[2017/08/01 Minimal modern thesis class]
\LoadClass[paper=a4,
twoside,
pagesize,
11pt,
DIV=10, % TODO: Make configurable
BCOR=10mm, % TODO: Make configurable
cleardoublepage=empty,
numbers=noenddot,
titlepage,
toc=bibliography,
toc=index,]{scrbook}
\RequirePackage{ifpdf}
\RequirePackage{ifxetex}
\RequirePackage{ifluatex}
% Makes it possible to switch between different languages in the text
% while keeping hyphenation rules correct. Should you add another one
% in the list, please ensure that `english` is the last one. The last
% language is used to control standard hyphenation.
%
% If you write your report in German, you need to change the order.
\RequirePackage[ngerman,french,english]{babel}
\newif\ifxetexorluatex
\ifxetex
\xetexorluatextrue
\else
\ifluatex
\xetexorluatextrue
\else
\xetexorluatexfalse
\fi
\fi
\ifxetexorluatex
\RequirePackage{fontspec}
\else
\RequirePackage[utf8]{inputenc}
\fi
\usepackage{csquotes}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Bibliography
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage[%
autocite = plain,
backend = bibtex,
doi = true,
url = true,
giveninits = true,
hyperref = true,
maxbibnames = 99,
maxcitenames = 99,
sortcites = true,
style = numeric,
]{biblatex}
% Remove the month field from the bibliography. It does not serve a good
% purpose, and often, it cannot be used because the journals have crazy
% issue policies.
\AtEveryBibitem{\clearfield{month}}
\AtEveryCitekey{\clearfield{month}}
% Suppress "in" for journal articles.
\renewbibmacro{in:}{%
\ifentrytype{article}
{%
}%
% else
{%
\printtext{\bibstring{in}\intitlepunct}%
}%
}
% Remove the parentheses for the year in an article. This removes a lot
% of undesired parentheses in the bibliography, which improves
% readability.
\renewbibmacro*{issue+date}{%
\setunit{\addcomma\space}
\iffieldundef{issue}
{\usebibmacro{date}}
{\printfield{issue}%
\setunit*{\addspace}%
\usebibmacro{date}}%
\newunit}
% Delimit the volume and the number of an article by a colon instead of
% by a dot, which I consider to be more readable.
\renewbibmacro*{volume+number+eid}{%
\printfield{volume}%
\setunit*{\addcolon}%
\printfield{number}%
\setunit{\addcomma\space}%
\printfield{eid}%
}
% Do not use a colon for the publisher location. Instead, connect
% publisher, location, and date via commas.
\renewbibmacro*{publisher+location+date}{%
\printlist{publisher}%
\setunit*{\addcomma\space}%
\printlist{location}%
\setunit*{\addcomma\space}%
\usebibmacro{date}%
\newunit%
}
% Ditto for other entry types.
\renewbibmacro*{organization+location+date}{%
\printlist{location}%
\setunit*{\addcomma\space}%
\printlist{organization}%
\setunit*{\addcomma\space}%
\usebibmacro{date}%
\newunit%
}
% Do not abbreviate "technical report".
\DefineBibliographyStrings{english}{%
techreport = {technical report},
}
% Display the label of a bibliographic entry in bare style, without any
% brackets. I like this more than the default.
%
% This is *really* the proper way of doing this.
\DeclareFieldFormat{labelnumberwidth}{#1\adddot}
% Ensure that DOIs are followed by a non-breakable space.
\DeclareFieldFormat{doi}{%
\mkbibacro{DOI}\addcolon\addnbspace
\ifhyperref
{\href{http://dx.doi.org/#1}{\nolinkurl{#1}}}
%
{\nolinkurl{#1}}
}
% Add hair spaces between initials. Technically, this does not amount to
% a large change, but it is typographically correct.
\renewcommand*\bibinitdelim {\addnbthinspace}
\renewcommand*\bibnamedelima{\addnbthinspace}
\renewcommand*\bibnamedelimb{\addnbthinspace}
\renewcommand*\bibnamedelimi{\addnbthinspace}
% Make the font size of citations smaller. This looks more elegant and
% reduces their optical 'weight' somewhat.
\renewcommand*{\citesetup}{%
\biburlsetup
\small
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Fonts & colours
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage[osf]{ebgaramond}
\RequirePackage[oldstyle,scale=0.7]{sourcecodepro}
\usepackage{xcolor}
\definecolor{hd-red} {RGB}{197, 13, 41}
\definecolor{hd-brown}{RGB}{ 90, 15, 20}
\definecolor{hd-beige}{RGB}{245,240,234}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Graphics
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{graphicx}
\graphicspath{%
{Figures/}
{./}
}
% Suppress warnings about page groups in PDFs. This is not justified
% in most of the cases. I am pretty sure I am including my images in
% the right manner.
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname pdfsuppresswarningpagegroup\endcsname\relax
\else
\pdfsuppresswarningpagegroup=1\relax
\fi
\RequirePackage{subcaption}
% Make sub-references using \subref being typeset with parentheses.
% Otherwise, only the counter will be printed.
\captionsetup{subrefformat=parens}
% Styling the algorithm captions. They should not be larger than the captions for the figures and
% tables.
\captionsetup[algorithm]{%
font = small,
labelsep = colon
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Pseudo-code
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Further information about styling and other issues with this package
% is available under:
%
% https://tex.stackexchange.com/questions/1375/what-is-a-good-package-for-displaying-algorithms
%
\RequirePackage{algorithm}
\RequirePackage{algorithmicx}
\RequirePackage{algpseudocode}
% Ensures that the `\autoref` command works with algorithms as well. The
% text may have to be changed for other languages, though.
\newcommand{\algorithmautorefname}{Algorithm}
% Use a small font in the body of an algorithm. This removes the weight
% of algorithm environments and makes them typographically more light.
\makeatletter
\algrenewcommand\ALG@beginalgorithmic{\small}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Paragraph lists & compact enumerations
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage[%
olditem, % Do not modify itemize environments by default
oldenum % Do not modify enumerate environments by default
]{paralist}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Spacing
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{setspace}
\onehalfspacing
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Tables
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{booktabs}
\RequirePackage{tabularx}
\RequirePackage{multirow}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Hyperlinks & bookmarks
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage[%
colorlinks = true,
citecolor = hd-red,
linkcolor = hd-red,
urlcolor = hd-red,
]{hyperref}
\RequirePackage{bookmark}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Proper typesetting of units
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage[binary-units=true]{siunitx}
\sisetup{%
detect-all = true,
detect-family = true,
detect-mode = true,
detect-shape = true,
detect-weight = true,
detect-inline-weight = math,
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Mathematics
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{amsmath}
\RequirePackage{amsthm}
\RequirePackage{dsfont}
% Fix the spacing of \left and \right. Use these with the proper bracket
% in order to ensure that they scale automatically.
\let\originalleft\left
\let\originalright\right
\renewcommand{\left}{\mathopen{}\mathclose\bgroup\originalleft}
\renewcommand{\right}{\aftergroup\egroup\originalright}
\DeclareMathOperator*{\argmin} {arg\,min}
\DeclareMathOperator {\dist} {dist}
\DeclareMathOperator {\im} {im}
\newcommand{\domain}{\ensuremath{\mathcal{D}}}
\newcommand{\real} {\ensuremath{\mathds{R}}}
% Proper differential operators
\renewcommand{\d}[1]{\ensuremath{\operatorname{d}\!{#1}}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Ordinals
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand {\rd}{\textsuperscript{\textup{rd}}\xspace}
\newcommand {\nd}{\textsuperscript{\textup{nd}}\xspace}
\renewcommand{\th}{\textsuperscript{\textup{th}}\xspace}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Penalties
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\clubpenalty = 10000
\widowpenalty = 10000
\displaywidowpenalty = 10000
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Headers
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{scrlayer-scrpage}
\pagestyle{scrheadings}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Typefaces for sections
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setkomafont{sectioning}{\normalfont\bfseries}
\setkomafont{descriptionlabel}{\normalfont\bfseries}
\setkomafont{caption}{\small}
\setkomafont{captionlabel}{\usekomafont{caption}}