Added lib/tex
This commit is contained in:
parent
46d648c39c
commit
35936bfaed
100
lib/tex/macros.sty
Normal file
100
lib/tex/macros.sty
Normal file
@ -0,0 +1,100 @@
|
||||
\NeedsTeXFormat{LaTeX2e}
|
||||
\ProvidesPackage{../../../lib/tex/macros}[2023/10/16 ORMC Macros]
|
||||
|
||||
\RequirePackage{hyperref}
|
||||
\RequirePackage{pgf}
|
||||
\RequirePackage{xcolor}
|
||||
|
||||
|
||||
% Link to this repository
|
||||
\newcommand{\smallurl}{\small\texttt{\href{https://betalupi.com/handouts}{https://betalupi.com/handouts}}}
|
||||
|
||||
|
||||
|
||||
\newcommand{\qe}{\stackrel{?}{=}}
|
||||
\newcommand{\qgt}{\stackrel{?}{>}}
|
||||
\newcommand{\qlt}{\stackrel{?}{<}}
|
||||
|
||||
|
||||
|
||||
% A row of stars, for showing difficulty
|
||||
% first arg: filled stars
|
||||
% second arg: total stars
|
||||
\def\stars#1#2{%
|
||||
\def\oncolor{\color{ogrape}}%
|
||||
\def\offcolor{\color{black!30!white}}%
|
||||
%
|
||||
\count255=1%
|
||||
\count254=#2%
|
||||
\advance\count254 by -1%
|
||||
\ifnum #1 > 0
|
||||
% The $$ are required around \bigstar.
|
||||
% the special \odot chess piece breaks
|
||||
% star sizing if they are omitted.
|
||||
\loop
|
||||
{\oncolor $\bigstar$}%
|
||||
\ifnum\count255 < #1
|
||||
\advance\count255 by 1
|
||||
\repeat%
|
||||
\else%
|
||||
{\oncolor $\bigstar$}%
|
||||
\fi%
|
||||
%
|
||||
\ifnum \count255 < #2%
|
||||
\loop
|
||||
{\offcolor $\bigstar$}%
|
||||
\ifnum\count255 < \count254
|
||||
\advance\count255 by 1
|
||||
\repeat%
|
||||
\fi%
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
% Ruble symbol with tweaks
|
||||
\DeclareRobustCommand*{\Rub}{%
|
||||
\begingroup
|
||||
\dimendef\H=0 %
|
||||
\settoheight\H{P}%
|
||||
\begin{pgfpicture}%
|
||||
\pgfsetlinewidth{.1\H}%
|
||||
\pgfsetrectcap
|
||||
\pgfsetmiterjoin
|
||||
\pgfmoveto{\pgfpoint{0pt}{0.07\H}}% Move to bottom of main line
|
||||
\pgflineto{\pgfpoint{0pt}{.90\H}}% P main line
|
||||
\pgflineto{\pgfpoint{.3\H}{.90\H}}% P top line
|
||||
\pgfpatharc{90}{-90}{.21\H}% P circle
|
||||
\pgflineto{\pgfpoint{-.08\H}{.48\H}}% P bottom line
|
||||
\pgfmoveto{\pgfpoint{-.08\H}{.31\H}}% Bonus line move
|
||||
\pgflineto{\pgfpoint{.34\H}{.31\H}}% Bonus line draw
|
||||
\pgfusepath{stroke}%
|
||||
\pgfmoveto{\pgfpoint{-.23\H}{0pt}}% Before space
|
||||
\pgfmoveto{\pgfpoint{0.55\H}{0pt}}% After space
|
||||
\end{pgfpicture}%
|
||||
\endgroup
|
||||
}
|
||||
|
||||
% Ruble symbol, per official specification
|
||||
%
|
||||
%\DeclareRobustCommand*{\Rub}{%
|
||||
% \begingroup
|
||||
% \dimendef\H=0 %
|
||||
% \settoheight\H{P}%
|
||||
% \begin{pgfpicture}%
|
||||
% \pgfsetlinewidth{.1\H}%
|
||||
% \pgfsetrectcap
|
||||
% \pgfsetmiterjoin
|
||||
% \pgfmoveto{\pgfpoint{0pt}{0.05\H}}%
|
||||
% \pgflineto{\pgfpoint{0pt}{.95\H}}%
|
||||
% \pgflineto{\pgfpoint{.35\H}{.95\H}}%
|
||||
% \pgfpatharc{90}{-90}{.225\H}%
|
||||
% \pgflineto{\pgfpoint{-.05\H}{.5\H}}%
|
||||
% \pgfmoveto{\pgfpoint{-.05\H}{.34\H}}%
|
||||
% \pgflineto{\pgfpoint{.38\H}{.34\H}}%
|
||||
% \pgfusepath{stroke}%
|
||||
% \pgfmoveto{\pgfpoint{-.175\H}{0pt}}%
|
||||
% \pgfmoveto{\pgfpoint{.7\H}{0pt}}%
|
||||
% \end{pgfpicture}%
|
||||
% \endgroup
|
||||
%}
|
731
lib/tex/ormc_handout.cls
Executable file
731
lib/tex/ormc_handout.cls
Executable file
@ -0,0 +1,731 @@
|
||||
% Copyright (C) 2023 Mark (mark@betalupi.com)
|
||||
%
|
||||
% This program is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% This program is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
\NeedsTeXFormat{LaTeX2e}
|
||||
\ProvidesClass{../../../lib/tex/ormc_handout}[2023/05/29 2.0.2 ORMC Handout]
|
||||
|
||||
|
||||
|
||||
|
||||
% ------------------ %
|
||||
% Option Definitions %
|
||||
% ------------------ %
|
||||
|
||||
% Standard LaTeX
|
||||
\newcommand\@ptsize{}
|
||||
\@twocolumnfalse
|
||||
\@twosidefalse
|
||||
\@mparswitchfalse
|
||||
% ORMC-specific
|
||||
\newif{\if@solutions} % If false, solutions and instructor notes are hidden.
|
||||
\newif{\if@singlenumbering} % If true, the same counter is used for all objects.
|
||||
\newif{\if@nopagenumber} % If true, don't number pages.
|
||||
\newif{\if@shortwarning} % If true, show a smaller solutions warning
|
||||
\newif{\if@nowarning} % If true, do not show solution warning
|
||||
\newif{\if@unfinished} % If true, show an "unfinished" warning at the top of each page
|
||||
|
||||
% Standard LaTeX options
|
||||
\DeclareOption{10pt}{\renewcommand\@ptsize{0}}
|
||||
\DeclareOption{11pt}{\renewcommand\@ptsize{1}}
|
||||
\DeclareOption{12pt}{\renewcommand\@ptsize{2}}
|
||||
% ORMC-specific options
|
||||
\DeclareOption{solutions}{\@solutionstrue}
|
||||
\DeclareOption{nosolutions}{\@solutionsfalse}
|
||||
\DeclareOption{multinumbering}{\@singlenumberingfalse}
|
||||
\DeclareOption{singlenumbering}{\@singlenumberingtrue}
|
||||
\DeclareOption{pagenumber}{\@nopagenumberfalse}
|
||||
\DeclareOption{nopagenumber}{\@nopagenumbertrue}
|
||||
\DeclareOption{longwarning}{\@shortwarningfalse}
|
||||
\DeclareOption{shortwarning}{\@shortwarningtrue}
|
||||
\DeclareOption{showwarning}{\@nowarningfalse}
|
||||
\DeclareOption{hidewarning}{\@nowarningtrue}
|
||||
\DeclareOption{unfinished}{\@unfinishedtrue}
|
||||
\DeclareOption*{\ClassWarning{ormc_handout}{\CurrentOption ignored}}
|
||||
|
||||
\@unfinishedfalse
|
||||
\ExecuteOptions{
|
||||
10pt,
|
||||
solutions,
|
||||
multinumbering,
|
||||
pagenumber,
|
||||
longwarning,
|
||||
yeswarning
|
||||
}
|
||||
|
||||
\ProcessOptions
|
||||
|
||||
% Set letterpaper by default.
|
||||
% This is overridden by geometry anyway,
|
||||
% so we don't need an option.
|
||||
\setlength\paperheight{11in}
|
||||
\setlength\paperwidth{8.5in}
|
||||
\input{size1\@ptsize.clo}
|
||||
|
||||
% Hack to allow script option override.
|
||||
% To force a build with solutions, compile a file containing the following:
|
||||
% `\def\argYesSolutions{1}\input{<target file>}`
|
||||
\ifdefined\argYesSolutions\@solutionstrue\fi
|
||||
\ifdefined\argNoSolutions\@solutionsfalse\fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
% ------------------------------- %
|
||||
% Minimal LaTeX class %
|
||||
% Based on article.cls, %
|
||||
% version 2022/07/02 v1.4n %
|
||||
% ------------------------------- %
|
||||
|
||||
% Lengths
|
||||
\setlength\lineskip{1\p@}
|
||||
\setlength\normallineskip{1\p@}
|
||||
\renewcommand\baselinestretch{}
|
||||
\setlength\parskip{0\p@ \@plus \p@}
|
||||
\@lowpenalty 51
|
||||
\@medpenalty 151
|
||||
\@highpenalty 301
|
||||
|
||||
\setlength\leftmargini{2.5em}
|
||||
\leftmargin\leftmargini
|
||||
\setlength\leftmarginii{2.2em}
|
||||
\setlength\leftmarginiii{1.87em}
|
||||
\setlength\leftmarginiv{1.7em}
|
||||
\setlength\leftmarginv{1em}
|
||||
\setlength\leftmarginvi{1em}
|
||||
\setlength\labelsep{.5em}
|
||||
\setlength\labelwidth{\leftmargini}
|
||||
\addtolength\labelwidth{-\labelsep}
|
||||
\@beginparpenalty -\@lowpenalty
|
||||
\@endparpenalty -\@lowpenalty
|
||||
\@itempenalty -\@lowpenalty
|
||||
|
||||
\setlength\arraycolsep{5\p@}
|
||||
\setlength\tabcolsep{6\p@}
|
||||
\setlength\arrayrulewidth{.4\p@}
|
||||
\setlength\doublerulesep{2\p@}
|
||||
\setlength\tabbingsep{\labelsep}
|
||||
\skip\@mpfootins = \skip\footins
|
||||
\setlength\fboxsep{3\p@}
|
||||
\setlength\fboxrule{.4\p@}
|
||||
|
||||
\newcommand\@pnumwidth{1.55em}
|
||||
\newcommand\@tocrmarg{2.55em}
|
||||
\newcommand\@dotsep{4.5}
|
||||
|
||||
\setlength\columnsep{10\p@}
|
||||
\setlength\columnseprule{0\p@}
|
||||
|
||||
|
||||
% Counters
|
||||
\setcounter{topnumber}{2}
|
||||
\renewcommand\topfraction{.7}
|
||||
\setcounter{bottomnumber}{1}
|
||||
\renewcommand\bottomfraction{.3}
|
||||
\setcounter{totalnumber}{3}
|
||||
\renewcommand\textfraction{.2}
|
||||
\renewcommand\floatpagefraction{.5}
|
||||
\setcounter{dbltopnumber}{2}
|
||||
\renewcommand\dbltopfraction{.7}
|
||||
\renewcommand\dblfloatpagefraction{.5}
|
||||
%\setcounter{secnumdepth}{3}
|
||||
|
||||
|
||||
% Enum labels
|
||||
\renewcommand\theenumi{\@arabic\c@enumi}
|
||||
\renewcommand\theenumii{\@alph\c@enumii} % spell:disable-line
|
||||
\renewcommand\theenumiii{\@roman\c@enumiii}
|
||||
\renewcommand\theenumiv{\@Alph\c@enumiv} % spell:disable-line
|
||||
\newcommand\labelenumi{\theenumi.}
|
||||
\newcommand\labelenumii{(\theenumii)}
|
||||
\newcommand\labelenumiii{\theenumiii.}
|
||||
\newcommand\labelenumiv{\theenumiv.}
|
||||
\renewcommand\p@enumii{\theenumi}
|
||||
\renewcommand\p@enumiii{\theenumi(\theenumii)}
|
||||
\renewcommand\p@enumiv{\p@enumiii\theenumiii}
|
||||
\newcommand\labelitemi{\labelitemfont \textbullet}
|
||||
\newcommand\labelitemii{\labelitemfont \bfseries \textendash}
|
||||
\newcommand\labelitemiii{\labelitemfont \textasteriskcentered}
|
||||
\newcommand\labelitemiv{\labelitemfont \textperiodcentered}
|
||||
\newcommand\labelitemfont{\normalfont}
|
||||
|
||||
% Required by enumitem, not sure why.
|
||||
\newenvironment{description}{%
|
||||
\list{}{\labelwidth\z@ \itemindent-\leftmargin\let\makelabel\descriptionlabel}%
|
||||
}{\endlist}
|
||||
|
||||
\newcommand*\descriptionlabel[1]{\hspace\labelsep\normalfont\bfseries #1}
|
||||
|
||||
|
||||
% Font switching
|
||||
\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
|
||||
\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
|
||||
\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
|
||||
\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
|
||||
\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
|
||||
\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
|
||||
\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
|
||||
\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
|
||||
\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}
|
||||
|
||||
|
||||
% Figures and tables
|
||||
\newcommand\figurename{Figure}
|
||||
\newcommand\tablename{Table}
|
||||
\newcounter{figure}
|
||||
\renewcommand \thefigure {\@arabic\c@figure}
|
||||
\def\fps@figure{tbp}
|
||||
\def\ftype@figure{1}
|
||||
\def\ext@figure{lof}
|
||||
\def\fnum@figure{\figurename\nobreakspace\thefigure}
|
||||
\newenvironment{figure}{\@float{figure}}{\end@float}
|
||||
\newenvironment{figure*}{\@dblfloat{figure}}{\end@dblfloat}
|
||||
\newcounter{table}
|
||||
\renewcommand\thetable{\@arabic\c@table}
|
||||
\def\fps@table{tbp}
|
||||
\def\ftype@table{2}
|
||||
\def\ext@table{lot}
|
||||
\def\fnum@table{\tablename\nobreakspace\thetable}
|
||||
\newenvironment{table}{\@float{table}}{\end@float}
|
||||
\newenvironment{table*}{\@dblfloat{table}}{\end@dblfloat}
|
||||
|
||||
\newlength\abovecaptionskip
|
||||
\newlength\belowcaptionskip
|
||||
\setlength\abovecaptionskip{10\p@}
|
||||
\setlength\belowcaptionskip{0\p@}
|
||||
|
||||
\long\def\@makecaption#1#2{%
|
||||
\vskip\abovecaptionskip
|
||||
\sbox\@tempboxa{#1: #2}%
|
||||
\ifdim \wd\@tempboxa >\hsize
|
||||
#1: #2\par
|
||||
\else
|
||||
\global \@minipagefalse
|
||||
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
|
||||
\fi
|
||||
\vskip\belowcaptionskip%
|
||||
}
|
||||
\newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
|
||||
\let\l@table\l@figure
|
||||
|
||||
|
||||
% Miscellaneous
|
||||
\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em}
|
||||
\let\@openbib@code\@empty
|
||||
|
||||
\newcommand\@idxitem{\par\hangindent 40\p@}
|
||||
\newcommand\subitem{\@idxitem \hspace*{20\p@}}
|
||||
\newcommand\subsubitem{\@idxitem \hspace*{30\p@}}
|
||||
\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax}
|
||||
\renewcommand\footnoterule{%
|
||||
\kern-3\p@
|
||||
\hrule\@width.4\columnwidth
|
||||
\kern2.6\p@%
|
||||
}
|
||||
\newcommand\@makefntext[1]{%
|
||||
\parindent 1em%
|
||||
\noindent
|
||||
\hb@xt@1.8em{\hss\@makefnmark}#1%
|
||||
}
|
||||
|
||||
\def\today{%
|
||||
\ifcase\month\or
|
||||
January\or
|
||||
February\or
|
||||
March\or
|
||||
April\or
|
||||
May\or
|
||||
June\or
|
||||
July\or
|
||||
August\or
|
||||
September\or
|
||||
October\or
|
||||
November\or
|
||||
December
|
||||
\fi%
|
||||
\space\number\day, \number\year
|
||||
}
|
||||
|
||||
\pagenumbering{arabic}
|
||||
\raggedbottom
|
||||
\onecolumn
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
% ------------ %
|
||||
% Minor Tweaks %
|
||||
% ------------ %
|
||||
|
||||
% We probably don't need enumitem for this.
|
||||
% TODO: apply these edits above, in plain LaTeX.
|
||||
|
||||
\newcommand\sbullet[1][.5]{\mathbin{\vcenter{\hbox{\scalebox{#1}{$\bullet$}}}}}
|
||||
|
||||
\renewcommand{\labelitemi}{$\sbullet$}
|
||||
\renewcommand{\labelitemii}{$\cdot$}
|
||||
\renewcommand{\labelenumi}{\textbf{\Alph{enumi}:}}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
% ------------- %
|
||||
% Package Setup %
|
||||
% ------------- %
|
||||
|
||||
|
||||
% Set up page geometry.
|
||||
% MUST BE DONE FIRST!
|
||||
% TODO: can we do this with plain tex?
|
||||
\RequirePackage{geometry}
|
||||
\geometry{
|
||||
paper = letterpaper,
|
||||
top = 25mm,
|
||||
bottom = 30mm,
|
||||
left = 30mm,
|
||||
right = 30mm,
|
||||
headheight = 75mm,
|
||||
footskip = 15mm,
|
||||
headsep = 75mm,
|
||||
}
|
||||
|
||||
\RequirePackage{enumitem} % List customization
|
||||
\RequirePackage{etoolbox} % For utilities like \undef
|
||||
\RequirePackage{xparse} % For \NewDocumentCommand and etc
|
||||
\RequirePackage{xcolor} % For colored text
|
||||
\RequirePackage{tikz} % Used by \boxlinehack
|
||||
\RequirePackage{comment} % Used to hide solutions
|
||||
\RequirePackage{bophook} % Call a command on every page
|
||||
\RequirePackage{tcolorbox} % For solution boxes
|
||||
\RequirePackage{hyperref} % For custom references & clickable links
|
||||
\tcbuselibrary{breakable} % Allows tcolorboxes to break across pages
|
||||
\tcbuselibrary{skins} % Allows additional tcolorbox customization
|
||||
\usetikzlibrary{calc}
|
||||
|
||||
\RequirePackage[ % Provides \say{} for quoted text.
|
||||
left = ``,
|
||||
right = '',
|
||||
leftsub = `,
|
||||
rightsub = '
|
||||
]{dirtytalk}
|
||||
|
||||
% Not used by this class, but likely to be used in documents
|
||||
\RequirePackage{amsmath}
|
||||
\RequirePackage{amssymb}
|
||||
\RequirePackage{tabto}
|
||||
\TabPositions{1cm, 2cm, 3cm, 4cm, 5cm, 6cm, 7cm, 8cm}
|
||||
|
||||
% Colorlinks must be false.
|
||||
% if it is set, references inside hints
|
||||
% will not be the correct color!
|
||||
\hypersetup{
|
||||
hidelinks,
|
||||
colorlinks=false,
|
||||
%pdftitle={title},
|
||||
%pdfauthor={Mark},
|
||||
%pdfcreator={Mark}
|
||||
}
|
||||
|
||||
|
||||
\definecolor{ored}{HTML}{D62121}
|
||||
\definecolor{ogrape}{HTML}{9C36B5}
|
||||
\definecolor{ocyan}{HTML}{2288BF}
|
||||
\definecolor{oteal}{HTML}{12B886}
|
||||
\definecolor{ogreen}{HTML}{37B26D}
|
||||
\definecolor{oblue}{HTML}{1C7ED6}
|
||||
|
||||
\colorlet{red}{ored}
|
||||
\colorlet{green}{ogreen}
|
||||
\colorlet{blue}{oblue}
|
||||
\colorlet{teal}{oteal}
|
||||
\colorlet{cyan}{ocyan}
|
||||
|
||||
|
||||
\if@unfinished
|
||||
\AtBeginPage{%
|
||||
\begin{tikzpicture}[overlay, remember picture]
|
||||
\path
|
||||
(current page.north) ++ (0, -1)
|
||||
node[
|
||||
anchor=center,
|
||||
draw,
|
||||
below,
|
||||
text=ored,
|
||||
draw=ored,
|
||||
fill=white,
|
||||
inner sep = 2mm,
|
||||
line width = 0.6mm,
|
||||
] {
|
||||
\textbf{Incomplete Handout:}
|
||||
this handout is not done, it may need edits!
|
||||
}
|
||||
;
|
||||
\end{tikzpicture}
|
||||
}
|
||||
\fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
% ----------- %
|
||||
% Style Setup %
|
||||
% ----------- %
|
||||
|
||||
\if@nopagenumber
|
||||
\pagestyle{empty}
|
||||
\else
|
||||
\pagestyle{plain}
|
||||
\fi
|
||||
|
||||
\renewcommand*{\thefootnote}{\arabic{footnote}}
|
||||
\setlength{\parindent}{0mm}
|
||||
\setlist{noitemsep, topsep=0mm}
|
||||
\raggedright
|
||||
\frenchspacing
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
% ------------- %
|
||||
% Handout Title %
|
||||
% ------------- %
|
||||
|
||||
% These are in LaTeX by default, but we don't use them here.
|
||||
% Undef them to avoid confusion.
|
||||
\undef\thanks
|
||||
\undef\author
|
||||
\undef\date
|
||||
\undef\and
|
||||
|
||||
% Additional title parameters
|
||||
\def\@subtitle{\relax}
|
||||
\def\@uptitlel{\relax}
|
||||
\def\@uptitler{\relax}
|
||||
\newcommand{\subtitle}[1]{\gdef\@subtitle{#1}}
|
||||
\newcommand{\uptitlel}[1]{\gdef\@uptitlel{#1}}
|
||||
\newcommand{\uptitler}[1]{\gdef\@uptitler{#1}}
|
||||
|
||||
\newcommand{\@shortwarning}{
|
||||
\begin{tcolorbox}[
|
||||
enhanced,
|
||||
breakable,
|
||||
colback=white,
|
||||
colframe=ored,
|
||||
boxrule=0.6mm,
|
||||
arc=0mm,
|
||||
outer arc=0mm,
|
||||
]
|
||||
\large\centering\color{ored}
|
||||
\textbf{Instructor's Handout} \par
|
||||
\end{tcolorbox}
|
||||
}
|
||||
|
||||
% digital boxes may look better with:
|
||||
% drop shadow=gray,
|
||||
% smart shadow arc=false
|
||||
|
||||
\newcommand{\@longwarning}{
|
||||
\begin{tcolorbox}[
|
||||
enhanced,
|
||||
breakable,
|
||||
colback=white,
|
||||
colframe=ored,
|
||||
boxrule=0.6mm,
|
||||
arc=0mm,
|
||||
outer arc=0mm,
|
||||
]
|
||||
\color{ored}
|
||||
\begingroup
|
||||
\large\centering
|
||||
\textbf{Instructor's Handout} \par
|
||||
\endgroup
|
||||
\vspace{1ex}
|
||||
This file contains solutions and notes. \par
|
||||
Compile with the ``nosolutions'' flag before distributing. \par
|
||||
Click \href{https://betalupi.com/handouts}{\texttt{[here]}}
|
||||
for the latest version of this handout. \par
|
||||
\end{tcolorbox}
|
||||
}
|
||||
|
||||
% hyperref already defines maketitle.
|
||||
\renewcommand{\maketitle}{
|
||||
\begingroup
|
||||
\centering
|
||||
\begin{minipage}{0.7\textwidth}
|
||||
\centering
|
||||
|
||||
% Left and right headers (uptitle)
|
||||
\if\@uptitlel\relax\else\textsc{\@uptitlel}\fi \hfill\null%
|
||||
\if\@uptitler\relax\else\textsc{\@uptitler}\fi \par
|
||||
|
||||
% Main title
|
||||
\rule{\linewidth}{0.2mm} \par
|
||||
\vspace{4mm}
|
||||
{\huge \@title} \par
|
||||
\if\@subtitle\relax\else\vspace{2mm} \@subtitle \par\fi
|
||||
\vspace{1mm}
|
||||
\rule{\linewidth}{0.2mm} \par
|
||||
|
||||
% Solution warning
|
||||
\if@nowarning\else\if@solutions%
|
||||
\if@shortwarning \@shortwarning%
|
||||
\else \@longwarning%
|
||||
\fi\fi\fi
|
||||
\end{minipage} \par
|
||||
\vspace{2ex}
|
||||
\endgroup
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
% ---------------- %
|
||||
% Handout Sections %
|
||||
% ---------------- %
|
||||
|
||||
% Helper command that creates a label with custom text.
|
||||
% Args: label name, custom text
|
||||
%
|
||||
% newlabel is redefined by hyperref,
|
||||
% and its second arg takes two parts without hyperref and four with it.
|
||||
\newcommand{\@customlabel}[2]{%
|
||||
\@ifpackageloaded{hyperref}{%
|
||||
% This is broken
|
||||
\@bsphack
|
||||
\begingroup
|
||||
\def\label@name{#1}%
|
||||
\def\@currentlabel{#2}%
|
||||
\label@hook
|
||||
\protected@write\@auxout{}{%
|
||||
\string\newlabel{#1}{%
|
||||
{\@currentlabel}%
|
||||
{\thepage}%
|
||||
{\@currentlabelname}%
|
||||
{\@currentHref}%
|
||||
{}%
|
||||
}%
|
||||
}%
|
||||
\endgroup
|
||||
\@esphack
|
||||
}{
|
||||
% This works as intended
|
||||
\protected@write\@auxout{}{\string\newlabel{#1}{{#2}{\thepage}}}%
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
% Starred sections are not numbered.
|
||||
\newcounter{section_counter}
|
||||
\NewDocumentCommand{\section}{ s m d<> }{
|
||||
\par
|
||||
\IfBooleanF{#1}{\stepcounter{section_counter}}
|
||||
\vspace{4mm}
|
||||
\IfBooleanTF{#1}{%
|
||||
{\bf\Large \hfill \IfNoValueTF{#2}{Unnamed Section}{#2} \hfill\null}%
|
||||
}{%
|
||||
{\bf\Large \hfill Part \arabic{section_counter}\IfNoValueF{#2}{: #2} \hfill\null}%
|
||||
\IfNoValueF{#3}{\@customlabel{#3}{Part \arabic{section_counter}}}%
|
||||
} \\*
|
||||
\vspace{2mm}
|
||||
}
|
||||
|
||||
% Generic object.
|
||||
% Same format as \problem, \theorem, etc, but has no counter.
|
||||
\NewDocumentCommand{\generic}{ m d<> }{
|
||||
\par
|
||||
\vspace{3mm}
|
||||
{\bf\normalsize #1} \\*
|
||||
\IfNoValueF{#2}{\@customlabel{#2}{#1}}
|
||||
}
|
||||
|
||||
% Make a new section type.
|
||||
% Args: command, counter, title.
|
||||
\newcommand\@newobj[3]{
|
||||
\NewDocumentCommand{#1}{ m d<> }{
|
||||
\stepcounter{#2}
|
||||
\generic{#3 \arabic{#2}:\IfNoValueF{##1}{ ##1}}
|
||||
\IfNoValueF{##2}{\@customlabel{##2}{#3 \arabic{#2}}}
|
||||
\IfNoValueF{##2}{\@customlabel{num:##2}{\arabic{#2}}}
|
||||
}
|
||||
}
|
||||
|
||||
\if@singlenumbering
|
||||
\newcounter{object_counter}
|
||||
\def\@problemcounter{object_counter}
|
||||
|
||||
\@newobj{\definition}{object_counter}{Definition}
|
||||
\@newobj{\theorem}{object_counter}{Theorem}
|
||||
\@newobj{\proposition}{object_counter}{Proposition}
|
||||
\@newobj{\example}{object_counter}{Example}
|
||||
\@newobj{\remark}{object_counter}{Remark}
|
||||
\else
|
||||
\newcounter{problem_counter}
|
||||
\newcounter{theorem_counter}
|
||||
\newcounter{definition_counter}
|
||||
\newcounter{example_counter}
|
||||
\newcounter{proposition_counter}
|
||||
\newcounter{remark_counter}
|
||||
\def\@problemcounter{problem_counter}
|
||||
|
||||
\@newobj{\definition}{definition_counter}{Definition}
|
||||
\@newobj{\theorem}{theorem_counter}{Theorem}
|
||||
\@newobj{\proposition}{proposition_counter}{Proposition}
|
||||
\@newobj{\example}{example_counter}{Example}
|
||||
\@newobj{\remark}{remark_counter}{Remark}
|
||||
\fi
|
||||
|
||||
% These must be defined manually, since
|
||||
% problems and problemparts use two counters.
|
||||
\newcounter{problempartcounter}
|
||||
\NewDocumentCommand{\problem}{ m d<> }{
|
||||
\setcounter{problempartcounter}{0}
|
||||
\stepcounter{\@problemcounter}
|
||||
\generic{Problem \arabic{\@problemcounter}:\IfNoValueF{#1}{ #1}}
|
||||
\IfNoValueF{#2}{\@customlabel{num:#2}{\arabic{\@problemcounter}}}
|
||||
\IfNoValueF{#2}{\@customlabel{#2}{Problem \arabic{\@problemcounter}}}
|
||||
}
|
||||
\NewDocumentCommand{\problempart}{ m d<> }{
|
||||
\stepcounter{problempartcounter}
|
||||
\generic{Part \arabic{problempartcounter}:\IfNoValueF{#1}{ #1}}
|
||||
\IfNoValueF{#2}{\@customlabel{num:#2}{\arabic{problempartcounter}}}
|
||||
\IfNoValueF{#2}{\@customlabel{#2}{Problem \arabic{\@problemcounter}.\arabic{problempartcounter}}}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
% ---------------- %
|
||||
% Box environments %
|
||||
% ---------------- %
|
||||
|
||||
% Keep track of the current background color.
|
||||
% Useful for transparent tikz drawings.
|
||||
\def\ORMCbgcolor{white}
|
||||
|
||||
% Make a box environment.
|
||||
% These can safely be nested.
|
||||
% Args: title, back color, frame color.
|
||||
\newenvironment{ORMCbox}[3]{
|
||||
% \linehack draws a line across a tcolorbox.
|
||||
% tcolorbox only supports two sections, but
|
||||
% this hack allows us to have more.
|
||||
\def\linehack{
|
||||
\begin{tikzpicture}
|
||||
\path[use as bounding box]
|
||||
(0, 0) --
|
||||
(\linewidth, 0);
|
||||
|
||||
\draw[color=#3, dashed, dash phase=1mm]
|
||||
(0 - \kvtcb@leftlower-\kvtcb@boxsep, 0) --
|
||||
(\linewidth + \kvtcb@rightlower + \kvtcb@boxsep, 0);
|
||||
\end{tikzpicture} \par
|
||||
\vspace{2mm}
|
||||
}
|
||||
|
||||
% Keep track of the current background color.
|
||||
% Useful for transparent tikz drawings.
|
||||
\def\ORMCbgcolor{#2}
|
||||
|
||||
\begin{tcolorbox}[
|
||||
enhanced,
|
||||
breakable,
|
||||
colback=#2,
|
||||
colframe=#3,
|
||||
colbacktitle=#3,
|
||||
titlerule=0.6mm,
|
||||
title={\textbf{#1}},
|
||||
title after break={\textbf{#1 (continued)}},
|
||||
frame style={draw=none,fill=none},
|
||||
boxrule=0mm, % We need this even with hidden borders for correct spacing
|
||||
arc=0mm,
|
||||
outer arc=0mm
|
||||
]
|
||||
\raggedright
|
||||
} {
|
||||
\end{tcolorbox}
|
||||
}
|
||||
|
||||
\newenvironment{examplesolution}{
|
||||
\begin{ORMCbox}{Example Solution}{black!10!white}{black!65!white}
|
||||
} {
|
||||
\end{ORMCbox}
|
||||
}
|
||||
|
||||
\if@solutions
|
||||
\newenvironment{solution}{
|
||||
\begin{ORMCbox}{Solution}{ored!10!white}{ored}
|
||||
} {
|
||||
\end{ORMCbox}
|
||||
}
|
||||
\newenvironment{instructornote}{
|
||||
\begin{ORMCbox}{Note for Instructors}{ocyan!10!white}{ocyan}
|
||||
} {
|
||||
\end{ORMCbox}
|
||||
}
|
||||
\else
|
||||
\excludecomment{solution}
|
||||
\excludecomment{instructornote}
|
||||
\fi
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
% -------------------- %
|
||||
% Misc helper commands %
|
||||
% -------------------- %
|
||||
|
||||
% Inline note
|
||||
\NewDocumentCommand{\ilnote}{ +m }{\begingroup\color{gray}#1\endgroup}
|
||||
|
||||
\NewDocumentCommand{\note}{ d[] +m }{
|
||||
\IfNoValueTF{#1}{\ilnote{#2}}{\ilnote{\textit{#1:} #2}}\par
|
||||
}
|
||||
\long\def\hint#1{\note[Hint]{#1}}
|
Loading…
x
Reference in New Issue
Block a user