719 lines
17 KiB
TeX
Executable File
719 lines
17 KiB
TeX
Executable File
% Mark's math circle handout style.
|
|
% Source is at https://git.betalupi.com/Mark/ormc-handouts
|
|
%
|
|
%
|
|
% 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{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}
|
|
\renewcommand\theenumiii{\@roman\c@enumiii}
|
|
\renewcommand\theenumiv{\@Alph\c@enumiv}
|
|
\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
|
|
\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
|
|
\vspace{2mm} \@subtitle \par
|
|
\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 secion 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}
|
|
\else
|
|
\newcounter{problem_counter}
|
|
\newcounter{theorem_counter}
|
|
\newcounter{definition_counter}
|
|
\newcounter{example_counter}
|
|
\newcounter{proposition_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}
|
|
\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: name, title, back color, frame color.
|
|
\newcommand{\@makeORMCbox}[4]{
|
|
\newenvironment{#1}{
|
|
% \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=#4, 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{#3}
|
|
|
|
\begin{tcolorbox}[
|
|
enhanced,
|
|
breakable,
|
|
colback=#3,
|
|
colframe=#4,
|
|
colbacktitle=#4,
|
|
titlerule=0.6mm,
|
|
title={\textbf{#2}},
|
|
title after break={\textbf{#2 (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}
|
|
}
|
|
}
|
|
|
|
\@makeORMCbox{examplesolution}{Example Solution}{black!10!white}{black!65!white}
|
|
|
|
\if@solutions
|
|
\@makeORMCbox{solution}{Solution}{ored!10!white}{ored}
|
|
\@makeORMCbox{instructornote}{Note for Instructors}{ocyan!10!white}{ocyan}
|
|
\else
|
|
\excludecomment{solution}
|
|
\excludecomment{instructornote}
|
|
\fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
% -------------------- %
|
|
% Misc helper commands %
|
|
% -------------------- %
|
|
|
|
\NewDocumentCommand{\note}{ d[] m }{
|
|
\IfNoValueTF{#1}
|
|
{\textcolor{gray}{#2}}
|
|
{\textcolor{gray}{\textit{#1:} #2}}
|
|
\par
|
|
}
|
|
\newcommand{\hint}[1]{\note[Hint]{#1}}
|