Added lib/tex
				
					
				
			This commit is contained in:
		
							
								
								
									
										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}} | ||||
		Reference in New Issue
	
	Block a user