\def\filedate{23 May 2024}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Set up official Otago fonts based on what’s available. Fall back to close
% facsimiles where possible.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Version History
% v1.0 Initial version, rebuilt from deprecated lecturecommon package.
% v1.1 Refactored font checking mechanism.
% v1.2 Fixed sans-serif scaling, added Noto Sans.
% v1.3 Added new Wickliffe fonts and fallbacks.
% v1.3.1 Switched serif font to Wickliffe Light.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}[2001/06/01]
\ProvidesPackage{otagofonts}[2024/05/23 Otago standard fonts v1.3.1]
\RequirePackage{etoolbox}
\RequirePackage{ifxetex}
\RequirePackage{amsmath} % needs to be loaded before mathspec
\ifxetex
\RequirePackage[no-math]{fontspec}
\RequirePackage{mathspec}
\RequirePackage{xunicode}
\RequirePackage{xltxtra}
% Try a few different fonts that are either the official Otago font, or a reasonable
% facsimile thereof. Effectively done via a bunch of nested ifs. I did try using
% etoolbox's list looping macros, but the tricky part was making it generic for all
% three categories of font (primary, sans, mono), and I could only successfully make
% work for the first one encountered. The set of fonts is limited, so this is OK.
%
% Note: Explicitly specify Mapping=tex-text only for the primary and sans fonts,
% otherwise curly quotes will automatically appear in the mono font. Since
% this is pretty much exclusively used for code listings, this is a bad thing.
% Primary font (body text, maths).
\newbool{foundprimaryfont}
\PackageInfo{otagofonts}{Looking for suitable primary font}
% font-specific defaults
\defaultfontfeatures[Wickliffe Light]{BoldFont={Wickliffe}}
\renewcommand*{\do}[1]{%
\PackageInfo{otagofonts}{Trying #1...}
\IfFontExistsTF{#1}{%
% The following line is equivalent to:
% \setmainfont{fontname}[options]
% \setmathsfont(Latin,Digits){fontname}
% \setmathrm{fontname}
\setprimaryfont[Mapping=tex-text]{#1}%
\PackageInfo{otagofonts}{Using #1 for primary font}%
\booltrue{foundprimaryfont}%
\listbreak%
}{}%
}
\docsvlist{Wickliffe Light,Minion Pro,Crimson Pro,Crimson Text,Georgia,Times New Roman}
\ifbool{foundprimaryfont}{%
% Hack to prevent digits in hyperlinks from being set in the main font instead of the mono font.
% Note: doesn't matter if this is executed multiple times. Only works if you use \setprimaryfont
% or \setmathsfont first. From https://tex.stackexchange.com/a/99774.
\makeatletter%
\DeclareMathSymbol{0}{\mathalpha}{\eu@DigitsArabic@symfont}{`0}%
\DeclareMathSymbol{1}{\mathalpha}{\eu@DigitsArabic@symfont}{`1}%
\DeclareMathSymbol{2}{\mathalpha}{\eu@DigitsArabic@symfont}{`2}%
\DeclareMathSymbol{3}{\mathalpha}{\eu@DigitsArabic@symfont}{`3}%
\DeclareMathSymbol{4}{\mathalpha}{\eu@DigitsArabic@symfont}{`4}%
\DeclareMathSymbol{5}{\mathalpha}{\eu@DigitsArabic@symfont}{`5}%
\DeclareMathSymbol{6}{\mathalpha}{\eu@DigitsArabic@symfont}{`6}%
\DeclareMathSymbol{7}{\mathalpha}{\eu@DigitsArabic@symfont}{`7}%
\DeclareMathSymbol{8}{\mathalpha}{\eu@DigitsArabic@symfont}{`8}%
\DeclareMathSymbol{9}{\mathalpha}{\eu@DigitsArabic@symfont}{`9}%
\makeatother%
}{%
\PackageWarning{otagofonts}{%
Could not find any suitable primary font.\MessageBreak%
Falling back to LaTeX default.\MessageBreak%
Recommended fonts:\MessageBreak%
\space\space Minion Pro (official, commercial)\MessageBreak%
\space\space Crimson Pro (https://fonts.google.com/specimen/Crimson+Pro)%
\space\space Crimson Text (https://fonts.google.com/specimen/Crimson+Text)%
}%
}
% Sans-serif font.
\newbool{foundsansfont}
\PackageInfo{otagofonts}{Looking for suitable sans-serif font}
% font-specific defaults
\defaultfontfeatures[Wickliffe Sans Light]{BoldFont={Wickliffe Sans}}
\defaultfontfeatures[Open Sans Light]{BoldFont={Open Sans}}
\defaultfontfeatures[Noto Sans Light]{BoldFont={Noto Sans}}
\defaultfontfeatures[Roboto Light]{BoldFont={Roboto}}
\renewcommand*{\do}[1]{%
\PackageInfo{otagofonts}{Trying #1...}
\IfFontExistsTF{#1}{%
% Scale=Match{Upper|Lower}case doesn't work very well for the sans fonts.
% By experimentation Scale=0.912 seems a good compromise, and eliminates the
% weird upscaling of sans fonts in Texlive 2020, which didn't seem to affect
% the serif or monospace fonts (?!?!).
\setsansfont{#1}[Scale=0.912]%
\PackageInfo{otagofonts}{Using #1 for sans-serif font}%
\booltrue{foundsansfont}%
\listbreak%
}{}%
}
\docsvlist{Wickliffe Sans Light,Open Sans Light,Noto Sans Light,Roboto Light,Arial}
\ifbool{foundsansfont}{}{%
\PackageWarning{otagofonts}{Could not find any suitable sans-serif font.\MessageBreak%
Falling back to LaTeX default.\MessageBreak%
Recommended fonts:\MessageBreak%
\space\space Open Sans (https://fonts.google.com/specimen/Open+Sans)\MessageBreak%
\space\space Roboto (https://fonts.google.com/specimen/Roboto)%
}%
}
% Monospaced font, mainly for code listings.
\newbool{foundmonofont}
\PackageInfo{otagofonts}{Looking for suitable monospaced font}
% font-specific defaults
\defaultfontfeatures[Iosevka Light]{RawFeature={+ss03;-calt}}
\renewcommand*{\do}[1]{%
\PackageInfo{otagofonts}{Trying #1...}
\IfFontExistsTF{#1}{%
\setmonofont{#1}[Scale=MatchUppercase]%
\PackageInfo{otagofonts}{Using #1 for monospaced font}%
\booltrue{foundmonofont}%
\listbreak%
}{}%
}
\docsvlist{Iosevka Light,Letter Gothic 12 Pitch,Inconsolata}
\ifbool{foundmonofont}{}{%
\PackageWarning{otagofonts}{Could not find any suitable monospaced font.\MessageBreak%
Falling back to LaTeX default.\MessageBreak%
Recommended fonts:\MessageBreak%
\space\space Iosevka (https://github.com/be5invis/Iosevka/releases, but complex!)\MessageBreak%
\space\space Inconsolata (https://fonts.google.com/specimen/Inconsolata)%
}%
}
\else % assume PDFLaTeX otherwise
\RequirePackage[T1]{fontenc}
\RequirePackage{textcomp}
\RequirePackage{lmodern}
\RequirePackage{mathpazo}
\PackageWarning{otagofonts}{%
Otago-compatible fonts are not yet supported for LaTeX\MessageBreak%
or PDFLaTeX. XeLaTeX is preferred%
}
% Gill Sans to come...
% \renewcommand{\sfdefault}{}
% \renewcommand{\ttdefault}{blg}
\fi
\endinput