Newer
Older
LaTeX / lectures / lecturecommon.sty
\def\filedate{13 June 2019}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Common definitions shared across the various lecture document classes.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Version History
% v1.0   Initial version.
% v1.0.1 Fixed incorrect provided package name.
% v1.0.2 Increased number of tab stops in codesyntaxblock environment.
% v1.1   Added Unicode/XeLaTeX support.
%        Added exercise environment.
% v1.2   Switched to "class" instead of "chapter".
% v1.2.1 Fixed fontspec option clash and made font handling consistent with XML framework.
% v1.2.2 Fixed incorrect Roman font in math mode.
% v1.2.3 Switched XeLaTeX fonts to new University standard (Minion Pro + Open Sans).
% v1.2.4 Fixed "class number plus one" so that it can be passed as a number to other macros.
% v1.2.5 Disabled Mapping=tex-text for mono font to eliminate automatic curly quotes.
% v1.2.6 Enabled unicode option for hyperref when using Xe(La)TeX.
% v1.2.7 Reverted unicode option for hyperref due to option clash error.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\NeedsTeXFormat{LaTeX2e}[2001/06/01]
\ProvidesPackage{lecturecommon}[2019/06/13 INFO standard lecture setup v1.2.7]


% Standard packages common to ALL lecture documents.

\RequirePackage{amsmath} % needs to be loaded before mathspec

\RequirePackage{ifxetex}

\ifxetex

\RequirePackage[no-math]{fontspec}
\RequirePackage{mathspec}
\RequirePackage{xunicode}
\RequirePackage{xltxtra}

% The following line is equivalent to:
%   \setmainfont{Minion Pro}
%   \setmathsfont(Latin,Digits){Minion Pro}
%   \setmathrm{Minion Pro}
\setprimaryfont[Mapping=tex-text]{Minion Pro}
\setsansfont[Mapping=tex-text, Scale=MatchUppercase, BoldFont={Open Sans}]{Open Sans Light}
% 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.
\setmonofont[Scale=MatchLowercase]{Letter Gothic 12 Pitch}

% Hack to prevent digits in hyperlinks from being set in the main font instead of the mono font.
% From http://tex.stackexchange.com/questions/99770/problem-with-digits-in-urls-when-using-mathspec-and-hyperref
% Note: doesn't matter if this is executed multiple times.
\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

\else % assume PDFLaTeX otherwise

\RequirePackage[T1]{fontenc}
\RequirePackage{textcomp}
\RequirePackage{lmodern}
\RequirePackage{mathpazo}

% Gill Sans to come...
% \renewcommand{\sfdefault}{}
\renewcommand{\ttdefault}{blg}

\fi

\RequirePackage{boxedminipage}
\RequirePackage{graphicx}
\RequirePackage{hyperref}

\hypersetup{pdfpagemode=UseNone}


% Standard macros and package configuration common to ALL lecture notes
% documents.

% graphicx setup.
\graphicspath{{images/}}

% Simple code listing setup.
\newcommand{\keyword}[1]{\texttt{\uppercase{#1}}}
\newcommand{\nonterminal}[1]{\textit{\texttt{#1}}}
% Note: maximum 13 tab stops in a tabbing environment. (Bah.)
\newenvironment{codesyntaxblock}[1][\normalsize]%
    {\begingroup\ttfamily#1\begin{tabbing}mm\=mm\=mm\=mm\=mm\=mm\=mm\=mm\=mm\=mm\=mm\=mm\=mm\=\kill}%
    {\end{tabbing}\endgroup}


% Environment for boxed exercises.
\newcounter{exercise}
\setcounter{exercise}{0}
% Arguments: #1 width of box to set the exercise text in (defaults to \columnwidth).
\newenvironment{exercise}[1][\columnwidth]%
    {\noindent\refstepcounter{exercise}\begin{boxedminipage}{#1}\textbf{Exercise \theexercise: }}%
    {\end{boxedminipage}}
% Starred form produces an unnumbered exercise.
\newenvironment{exercise*}[1][\columnwidth]%
    {\noindent\begin{boxedminipage}{#1}\textbf{Exercise: }}%
    {\end{boxedminipage}}


% Standard variables for various things, and macros for initialising them.
% These can be used (or not) as necessary.


% Paper variables: subject code.
\newcommand{\SubjectCode}{UNDEFINED}
\newcommand{\SetSubjectCode}[1]{\renewcommand{\SubjectCode}{#1}}


% Paper number.
\newcommand{\PaperNumber}{UNDEFINED}
\newcommand{\SetPaperNumber}[1]{\renewcommand{\PaperNumber}{#1}}


% Convenience macro for printing out the full paper code.
\newcommand{\PaperCode}{\SubjectCode~\PaperNumber}


% Paper title.
\newcommand{\PaperTitle}{UNDEFINED}
\newcommand{\SetPaperTitle}[1]{\renewcommand{\PaperTitle}{#1}}


% Department name.
\newcommand{\DepartmentName}{UNDEFINED}
\newcommand{\SetDepartmentName}[1]{\renewcommand{\DepartmentName}{#1}}


% Teaching period.
\newcommand{\TeachingPeriod}{UNDEFINED}
\newcommand{\SetTeachingPeriod}[1]{\renewcommand{\TeachingPeriod}{#1}}


% Year offered.
\newcommand{\YearOffered}{UNDEFINED}
\newcommand{\SetYearOffered}[1]{\renewcommand{\YearOffered}{#1}}


% Oracle version.
\newcommand{\Oracle}{UNDEFINED}
\newcommand{\SetOracleVersion}[1]{\renewcommand{\Oracle}{#1}}


% Class number.
\newcounter{chapterplusone}
\newcommand{\ClassNumber}{\thechapter}
\newcommand{\ClassNumberPlusOne}{\thechapterplusone}
\newcommand{\SetClassNumber}[1]{%
    \setcounter{chapter}{#1}%
    \setcounter{chapterplusone}{#1}%
    \stepcounter{chapterplusone}%
}

% Backwards compatibility with the old syntax
\newcommand{\ChapterNumber}{\ClassNumber}
\newcommand{\ChapterNumberPlusOne}{\ClassNumberPlusOne}
\newcommand{\SetChapterNumber}[1]{\SetClassNumber{#1}}


% Class title.
\newcommand{\ClassTitle}{UNDEFINED}
\newcommand{\SetClassTitle}[1]{\renewcommand{\ClassTitle}{#1}}

\newcommand{\ShortClassTitle}{UNDEFINED}
\newcommand{\SetShortClassTitle}[1]{\renewcommand{\ShortClassTitle}{#1}}

% Backwards compatibility with the old syntax
\newcommand{\ChapterTitle}{\ClassTitle}
\newcommand{\SetChapterTitle}[1]{\SetClassTitle{#1}}
\newcommand{\ShortChapterTitle}{\ShortClassTitle}
\newcommand{\SetShortChapterTitle}[1]{\SetShortClassTitle{#1}}


% Class type.
\newcommand{\ClassType}{Lecture}
\newcommand{\SetClassType}[1]{\renewcommand{\ClassType}{#1}}


\endinput