%% ---------------------------------------------------------------------------------------------
%% LaTeX Package for Reykjavík University Books,
%% ---------------------------------------------------------------------------------------------
%% Original Author: Bjórn Þór Jónsson (bjorn AT ru.is)
%% Modified by: Eyjólfur Ingi Ásgeirsson <eyjo AT ru.is>
%% Modified and Maintained by: Joseph Timothy Foley <foley AT ru.is>
%% Refactored/Simplified on 2020-02-03: Joseph Timothy Foley <foley AT ru.is>
%% Questions, comments, complaints: latex-help@LIST.RU.IS
%% Created on 2020-02-05
%% This code is distributed under the MIT license
%% Details at LICENSE.md

%% Reference for class/package writers
%% http://ctan.uib.no/macros/latex/doc/clsguide.pdf

%% --------------- Identification ----------------------------
\newcommand{\fileversion@rubook}{2.0}
\newcommand{\filedate@rubook}{2020/02/03}% must be YYYY/MM/DD!
\newcommand{\fileauthor@rubook}{Joseph Timothy Foley, foley at RU.IS}
\ProvidesPackage{rubook}[\filedate@rubook by \fileauthor@rubook]
\NeedsTeXFormat{LaTeX2e}
\typeout{Book Class for Reykjavik University \fileversion@rubook <\filedate@rubook>, by \fileauthor@rubook}

%% ---------------- Critical packages -----------------------------
% Toolbox of many many macros that make a lot of latex code smarter and more robust
% Incl:  \newbool, \ifbool, etc.
% http://texdoc.net/texmf-dist/doc/latex/etoolbox/etoolbox.pdf
\RequirePackage{etoolbox}

%\RequirePackage{ifdraft}
% \RequirePackage{templatetools}
%% Template Tools have a variety of useful macros for template authors
%% https://ctan.math.illinois.edu/macros/latex/contrib/templatetools/templatetools.pdf
%% WARNING:  They seem to be incompatible with memoir
%% \SetTemplateDefinition{Group}{Property}{Code}
%% \UseDefinition{Group}{Property}



%% ---------------- Boolean switches -----------------------------
%% Booleans make it easy to enable and disable parts of the template
\newbool{debug}
\newbool{draftbool}
\newbool{online}
\newbool{proof}

%% ---------------- Declaration of Class Options--------------------
%% Remember that we have \AtEndOfClass{},\AtEndOfPackage{}
%%     \AtBeginDocument{}, \AtEndDocument{}
%% If you want execution conditional on file existence
%%     \IfFileExists{filename}{true}{false}
%%     \InputIfFileExists{filename}{true}{false}
%% For error reporting
%%     \ClassError{class-name}{error-text}{help-text}
%%     \PackageError{class-name}{error-text}{help-text}

% Generalized settings
 \DeclareOption{debug}{%
   \booltrue{debug}
   \typeout{rubook option: debug}%
   \typeout{DEBUG MODE ENABLED!  PREPARE FOR VERBOSITY!}}

 \DeclareOption{draft}{\booltrue{draftbool}}

\DeclareOption{online}{
  \setbool{online}{true}
   \typeout{rubook option: online}
 }
 
 \DeclareOption{forcegraphics}{%
   \PassOptionsToPackage{final}{graphicx}
   \PassOptionsToPackage{final}{pdfpages}
   \PassOptionsToPackage{final}{hyperref}
   %% add any other elements that should be included in draft
   \finalifforcegraphics{graphicx}%We have to catch graphicx early
   \setbool{forcegraphics}{true}\typeout{rubook option: forcegraphics}%
 }%

%%% Memoir test: Memoir Manual 21.2 p.367
%% Only works with the memoir class!!!!!!!!!!!!!!!
 
%% ---------------- Execution of Options -----------------------------
\ProcessOptions\relax% this stops searching for a * in \ProcessOptions*
%% Read page 20 of http://latex-project.org/guides/clsguide.pdf
%% carefully before modifying any of the execution and previous section.
%% ---------------- Package Loading -----------------------------

\ifbool{online}
{\ExecuteOptions{openany}}%% Online format does not have right-vs-left
{\ExecuteOptions{openright}}%% All of our printed formats are going to be opening to the right

%% Now to print the status of all the booleans if debug boolean is set
%% Any boolean testing must be after the \LoadClass otherwise the Option execution
%% has not completed.
\ifbool{debug}{%
  \ifbool{online}{\typeout{rubook bool: online}}{}
  \ifbool{forcegraphics}{\typeout{rubook bool: forcegraphics}}{}
  \ifbool{proof}{\typeout{rubook bool: proof}}{}
  \ifbool{debug}{\typeout{rubook bool: debug}}{}
}{}

%% ---------------- Internationalization -----------------------------
%% Unicode setup
\RequirePackage[T1]{fontenc}
\RequirePackage[utf8]{inputenc}
% allows UTF encoding, needed for Icelandic and other accented characters

% \RequirePackage[autostyle,strict]{csquotes}
%% http://mirrors.concertpass.com/tex-archive/macros/latex/contrib/csquotes/csquotes.pdf
%% You invoke with \enquote{} and \blockquote{}
%% csquotes must be loaded before babel for AUCTeX
%% autostyle: update style as language changes in document
%% strict: any warnings become errors
%% Don't forget to load Babel!
    
%% Babel allows various automatic text to be in selected languages
%% But to use the options, you have to always load it, even for english
%% The languages must be specified in order.

%% ---------------- Graphics ------------------------------
\RequirePackage{graphicx}
%% GraphicsX converts and includes graphics intelligently

\graphicspath{{graphics/}{Graphics/}{./}}
%% This is a list of folders to search for graphics files to include
%% Each path should be in a {}.  
%% Make sure that the upper/lowercase of the letters matches the folder or
%% you may have weird problems with partners using OSX or Linux.
%% Note that you don't have to put the folder where the .tex file is, it is
%% included automatically, though it is bad practice to put your 
%% graphics there
%% LaTeX will search from left to right in the list, so you can put "cropped" versions
%% in the first directory and it will grab them first. e.g.
%\graphicspath{{graphics-cropped/}{graphics/}{Graphics/}{./}}
%% 
%% If you put a // at the end of the path, it will recursively search for graphics
%% files on unix-based (OSX, Linux, etc.) platforms.


%% ---------------- URLs and Paths -----------------------------
\PassOptionsToPackage{obeyspaces,spaces,hyphens,allowmove}{url}
\RequirePackage{url}
%% The url package typesets url's and unix file paths nicely when they
%% become long.  \url{}
%% Also defines \path{}  which works with filepaths including windows paths.
%% Watch out that you leave a space after a last \ e.g. \path{C:\ }
%% You need another verbatim environment to make those typeset properly.
%% Also defines the \path{} command for paths
%% Option: obeyspace to deal with spaces in a path/url
%% Option: spaces to do linebreaks at the spaces.
%% Option: hyphens to do linebreaks at hyphens.
%% Option: allowmove makes URLs not-fragile, so they can go in things that move
%%         WARNING: If this breaks you will get very very weird errors

%% ---------------- Miscellaneous Packages ----------------------
\RequirePackage{lipsum}
% generates some test text for seeing how pages lay out
%% usage: \lipsum[STARTNUM-ENDNUM]

\RequirePackage{booktabs}
%% Format tables properly as in a book
%% \toprule,\midrule,\bottomrule

%% ---------------- Fonts -----------------------------
%%%  For help, read http://latex-project.org/guides/fntguide.pdf
%%
%  save the current font size
\newlength{\normaltextsize}
\setlength{\normaltextsize}{\f@size pt}

%% Font guide at
%% http://latex-project.org/guides/fntguide.pdf

% set the font defaults (if they need to be further adjusted)
%\renewcommand{\encodingdefault}{t1}

%\renewcommand{\rmdefault}{ptm}  % adobe times
%\renewcommand{\sfdefault}{phv}  % adobe helvetica?
%\renewcommand{\ttdefault}{pcr}  % adobe courier
%% cmr  : computer modern roman
%% cmss : computer modern sans oblique
%% cmm  : computer modern math
%% ptm  : (postscript) Adobe Times
%% phv  : (postscript) Adobe Helvetica
%% pcr  : (postscript) Adobe Courier

%\renewcommand{\familydefault}{\sfdefault} % switch to \sfdefault if you want to force sanserif
%% \familydefault should be one of the short letter codes such as "lm" or "ptm"
%\renewcommand{\familydefault}{\rmdefault}

%\renewcommand{\seriesdefault}{m}
%% m  : medium
%% b  : bold
%% bx : bold extended
%% sb : semi bold
%% c  : condensed

%\renewcommand{\shapedefault}{n}
%% n  : upshape (normal)
%% it : italics
%% sl : slanted
%% sc : small caps

%%\fontsize{12pt}{14pt}  % args: fontsize, baselineskip (font+space)
%% normal sequence of increasing sizes:  5,7,8,9,10,12,14.4,17.28,20.74,24.88

%%  Specific fonts
%%  Note that you can leave off elements and it will use the last value set (or default??)
% \def\myfont{\fontencoding{T1}\fontfamily{lm}\fontseries{m}\fontshape{n}\fontsize{14pt}{16pt}\selectfont}
%  \fontsize{SIZE}{BASELINESKIP}

\def\titletitlefont{\fontseries{b}\fontsize{17pt}{20pt}\selectfont}
\def\titletextfont{\fontsize{14pt}{16pt}\selectfont}
\def\titleinfofont{\fontsize{12}{14}\selectfont}
\def\sigtextfont{\fontsize{12pt}{14pt}\selectfont}
\def\warningfont{\fontseries{b}\fontsize{24pt}{28pt}\selectfont}

%%%%%%%%%%%%%%%%% Colors %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
%% Setting colors in text
%% Usage:
%% \textcolor{rured}{Some text.}
%% {\color{rured}Some text.}
\RequirePackage{xcolor}
\definecolor{rugray}{rgb}{0.2,0.2,0.2}
\definecolor{rured}{rgb}{0.84,0.10,0.13}

%% ---------------- Main Code -----------------------------
%%  Remember that we can declare commands (to make fragile things safe)
%%  The * form is for ``short'' commands, not longer than a paragraph
%%       \DeclareRobustCommand{cmd}[num][default]{definition}
%%       \DeclareRobustCommand*{cmd}[num][default]{definition}
%%  For checking if commands are redefined
%%       \CheckCommand{cmd}[num][default]{definition}


%% Spacing modes from the memoir class
%\SingleSpacing{} % single spacing
%\OnehalfSpacing{} % one and a half
%\DoubleSpacing{} % Double spacing, very ugly.

%% The official guidelines say to put the page in the middle bottom, but
%% that was clearly written for the MS Word users.  We follow proper book setup.

%% Comprehensive list of styles for memoir is in 7.2 (page 106)
%% If you need to adjust the style on the chapters, modify chapter
%% predefined styles:
%% empty: no header nor footer
%% plain: page num in bot center
%% simple:  pagenum and marks on top outer edges
%\makeoddhead{chapter}{}{}{} %to change only one side

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%% TITLE PAGE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Some may need a different front logo
\newcommand{\frontlogo@rubook}{ru-logo}
\newcommand{\frontlogo}[1]{\renewcommand{\frontlogo@rubook}{#1}}

\renewcommand{\maketitlehooka}{\begin{centering}\includegraphics[width=4cm]{\frontlogo@rubook}\par\end{centering}\vspace{2mm}}%
\renewcommand{\pretitle}{\begin{center}\titletitlefont}%
\renewcommand{\posttitle}{\par\end{center}}

% \renewcommand{\maketitlehookb}{\begin{center}\titletextfont{}by\end{center}\vspace{1mm}}
% 1mm adjustment to center the "by".   I've disabled it because I think the "by" looks unprofessional.

\renewcommand{\preauthor}{\titletextfont\begin{center}\large\par}
\renewcommand{\postauthor}{\par\end{center}}
\newcommand{\titledetails}[1]{\renewcommand{\maketitlehookc}{#1}}
\renewcommand{\predate}{\begin{center}\large}
\renewcommand{\postdate}{\par\end{center}}
\aliaspagestyle{title}{empty}
%% ----- COPYRIGHT PAGE -----------------------------------------------------------------------
\newcommand{\copyrightpage}{
  % actually in books, this is often on the left side
  \begin{coverleft}
    \begin{vplace}[1.0] % ratio of space above and below
      \centering
      \OnehalfSpacing%
      Copyright\\
      \theauthor\\
      \thedate\\
    \end{vplace}
  \end{coverleft}
}

%% ---------- Page Styles --------------------------------------------------------------
%% ---------------------------------------------------------------------------------------------
%%  Setup the formatting at the beginning of the document (Front material)
%% TODO: use the memoir \frontmatter \mainmatter \backmatter
%%  See documentation, page 73

%%%%%%%%% PARAGRAPH ADJUSTMENTS %%%%%%%%%%%%%%%%%%%%%%%%%%%
\newlength{\savedparindent}
\newcommand{\disableindents}{\setlength{\parindent}{0pt}}
\newcommand{\enableindents}{\setlength{\parindent}{\savedparindent}}

\AtBeginDocument{
  \frontmatter
  \setlength{\savedparindent}{\parindent}  % save the current parindent
  \SingleSpacing%
}

%% Disable clearforchapter on formats that do not need blank pages
\ifbool{online}{\renewcommand{\clearforchapter}{\newpage}}{}
\ifbool{draftbool}{\renewcommand{\clearforchapter}{\newpage}}
  % waste less blank pages in draft mode
  % see p123 http://ctan.uib.no/macros/latex/contrib/memoir/memman.pdf


\newenvironment{cover}% commonalities for the cover material
{\thispagestyle{cover}%
  \pagestyle{cover}%
  \clearforchapter% clear to chapter setting if note online
  \disableindents%
  \titletextfont\SingleSpacing}%
{%\setlength{\TPMargin}{0mm} %% margins inside the textblock
  \enableindents{}\newpage}%


\newenvironment{coverleft}%This is material that is OK being on the
                          %backside
{\thispagestyle{cover}%
  \pagestyle{cover}%
  \cleartoverso%
  %\clearforchapter% clear to chapter setting  
  \disableindents%
  \titletextfont\SingleSpacing}%
{%\setlength{\TPMargin}{0mm} %% margins inside the textblock
  %% I don't remember why we need to mess with \TPmargin --foley
  \enableindents{}\newpage}%



%% ----- DEDICATIONS ---------- ---------------------------------------------------------------
\newenvironment{dedications}{\begin{cover}\begin{vplace}[0.33]% ratio of space above and below
      \begin{center}\em}
      {\end{center}\normalfont\end{vplace}\end{cover}}

%%%%%%%%%%%% DRAFT AND PROOF MARKS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\draftmark}{}
\newcommand{\draftbigmark}{}

\ifbool{proof}{\renewcommand{\draftmark}{{\color{blue}\textsc{Proof}}}%
  \renewcommand{\draftbigmark}{{\color{blue}\warningfont{}*** \draftmark{} *** \\PLEASE DO NOT DISTRIBUTE\\}}}{}
\ifbool{draftbool}{\renewcommand{\draftmark}{{\color{red}\textsc{Draft}}}%
  \renewcommand{\draftbigmark}{{\color{red}\warningfont{}*** \draftmark{} *** \\PLEASE DO NOT DISTRIBUTE\\}}}{}%
%%% Page styles Memoir Manual ch7.2 p109 
\aliaspagestyle{book}{simple}
\aliaspagestyle{chapter}{plain}%At the beginning we want page numbers on chapters
\aliaspagestyle{cleared}{simple}
\aliaspagestyle{part}{empty}
\aliaspagestyle{title}{simple}
\aliaspagestyle{titlinpage}{empty}  

% \ifboolexpr{bool {draftbool} or bool {proof}}{
%   \makeoddfoot{cover}{}{\thepage}{\draftmark}
%   \makeevenfoot{cover}{\draftmark}{\thepage}{}
%   %\makeoddfoot{plain}{}{\thepage}{\draftmark}
%   %\makeevenfoot{plain}{\draftmark}{\thepage}{}
%   \makeoddfoot{simple}{}{}{\draftmark}
%   \makeevenfoot{simple}{\draftmark}{}{}
% }{}

\makepagestyle{plain}% Just page numbers in corners
\makeevenhead{plain}{\thepage}{}{}
\makeoddhead{plain}{}{}{\thepage}

\makepagestyle{cover}% The cover pages have no page numbers
\makeoddfoot{cover}{}{}{}
\makeevenfoot{cover}{}{}{}

\newcommand{\coverchapter}[1]{\clearforchapter\pagestyle{cover}\chapter{#1}\thispagestyle{cover}}


%%% Section numbering and the Table of Contents
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55
\maxsecnumdepth{subsubsection}  % default by \mainmatter in preamble
%\setsecnumdepth{subsubsection}  % can be changed later
\maxtocdepth{subsubsection}  % default by \mainmatter in preamble
%\settocdepth{subsubsection}  % can be changed later

%%% Code to include files if they exist
\newcommand{\InputIfExists}[1]{\IfFileExists{#1}{\input{#1}}{}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% TWEAKS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 
%% Some adjustments to float placement
\setcounter{topnumber}{5} \def\topfraction{1} \setcounter{bottomnumber}{4}
\def\bottomfraction{1} \setcounter{totalnumber}{10} \def\textfraction{0}
\def\floatpagefraction{.5}

%\def\@makefnmark{\rlap{\@textsuperscript{\@thefnmark}}}
%% Not sure why there was a footnote adjustment on the cover
%% Disabling for now.

%% Penalties for various text placement issues
\clubpenalty=10000%% orphan lines
\widowpenalty=10000%% widow lines
\hfuzz=1pt%% avoid overfilled hboxes
\vfuzz=5pt%% avoid overfilled vboxes
%\newcommand{\draftnote}[1]{\ifdraft{{\color{gray}#1}}}

\AtEndDocument{
\typeout{*******************************************************************}
\typeout{Make sure you print this at 100\% scaling on A4 paper.}
\typeout{This is not the default on many computers, so watch out!}
\typeout{Any adjustment to the size will mess up margins and text alignment.}
\typeout{*******************************************************************}
\typeout{}
}

%%% Local Variables:
%%% mode: latex
%%% TeX-master: "PHD-NAME-YEAR"
%%% End:
