\PassOptionsToPackage{inline}{enumitem} \documentclass{ltxguidex} \usepackage{fontspec} \usepackage[pseudocode, solution, assembly, tabu]{brandeis-problemset} \usepackage{xkeyval} \usepackage{xparse} \usepackage{textcomp} % needed for listings \usepackage{hologo} % xetex, etc. logos \usepackage{changelog} \newcommand{\bps}{\ltxclass{brandeis-problemset}} \newcommand{\fontspecok}{\hologo{XeLaTeX} or \hologo{LuaTeX}} \newcommand{\unicode}[1]{\textsc{u+#1}} \NewDocumentCommand{\cosi}{o m}{\textsc{cosi}~#2\IfValueT{#1}{ (#1)}} \newnotice{todo}{To-do} \newcommand{\reqopt}[1]{Requires the \texttt{\color{magenta}#1} option.\par} \newcommand{\dep}[1]{{\noticestyle Warning:} deprecated since #1.\par} \newcommand{\withopt}[1]{\fbox{With the \option{#1} option:}} \makeatletter \renewcommand{\SX@explpreset}{ language=[LaTeX]TeX, numbers=none, } \define@cmdkeys{joinlist}{sep, wrapper} \define@cmdkey{joinlist}{last}{\KV@joinlist@oxfordfalse} \define@boolkey{joinlist}{oxford}[true]{} \define@boolkey{joinlist}{and}[true]{\ifKV@joinlist@and\def\cmdKV@joinlist@last{and}\fi} \define@boolkey{joinlist}{or} [true]{\ifKV@joinlist@or \def\cmdKV@joinlist@last{or}\fi} \presetkeys{joinlist}{sep={,}, last=and, oxford, wrapper=\relax}{} \NewDocumentCommand{\joinlist}{O{} >{\SplitList{,}} m} {{\setkeys{joinlist}{#1}% \newcommand{\joinlist@wrapper}[1]{\item\cmdKV@joinlist@wrapper{##1}}% \begin{itemize*}[ label={}, itemjoin={\cmdKV@joinlist@sep}, itemjoin*={\ifKV@joinlist@oxford\cmdKV@joinlist@sep\ \fi \cmdKV@joinlist@last}]% \ProcessList{#2}{\joinlist@wrapper}% \end{itemize*}}} \makeatother \makeatletter \NewDocumentCommand{\withopts}{m} {\fbox{With any of the \joinlist[or, wrapper=\option]{#1} options:}} \makeatother \newcommand{\onlyclass}{Only available in the \bps\ document class.} \newcommand{\optenables}[2]{If \option{#1} is set, then \option{#2} is automatically enabled.} \setmainfont{Tiempos Text} \usepackage{FiraSans} \usepackage{FiraMono} \lstset{basewidth=0.6em} \lstnewenvironment{latexfile}[1] {\lstset{ language=[LaTeX]TeX, numbers=none, }} {} \author{Rebecca Turner\thanks{Brandeis University; \email{rebeccaturner@brandeis.edu}}} \title{The \bps\ Document Class} \date{2019/04/15 0.5.5} \begin{document} \maketitle \begin{abstract} Brandeis University's computer science (``\textsc{cosi}'') courses often assign ``problem sets'' which require fairly rigorous formatting. The \ctan{brandeis-problemset} document class, which extends \ltxclass{article}, provides a simple way to typeset these problem sets in \LaTeX. Although \bps\ is compatible with all \LaTeX\ flavors, \fontspecok\ is recommended for \ctan{fontspec} support. \end{abstract} \begin{note} The \bps\ document class should be considered experimental; the only stable \textsc{api} is that of the |problem| environment. \end{note} \begin{note} Browse the sources, contribute, or complain at \\ \https{github.com/9999years/brandeis-problemset} \end{note} \begin{note} In roughly May 2021 I will graduate from Brandeis University and this package will become unmaintained. Although I'd like the computer science department to adopt this package, I'm not sure any professors have an interest in that maintenance. If you care about the extended future of this package, send some emails! \end{note} \tableofcontents \vfill \pagebreak \section{Default behavior} \bps\ provides packages and well-formatted constructs (notably the |problem| environment) for problem-set writers. \bps\ will always render its body copy as a Times variant (\ctan{stix} for plain \LaTeX\ or \ctan{xits} with \fontspecok) and always contains a useful header (which contains the page number, author's name, course, instructor, and assignment due date). \subsection{Default packages loaded} In general, \bps\ will only load a feature if it's useful in more than one class; features like Gantt charts, Scheme code, assembly code, and so on, are loaded on demand. \begin{enumerate} \item \ctan{hyperref}, for a nicely-linked table of contents; |\href||{url}{label}|. \item \ctan{geometry} for page size and margins. \item \ctan{enumitem} for better control over the margins and spacing of the |enumerate|, |itemize|, and |description| environments. \item \withopts{listings, scheme, pseudocode, assembly} \begin{enumerate} \item \ctan{listings}, for verbatim code listings (including the |assembly|, |java|, and |pseudocode| environments). \item \ctan{xcolor}, for colored identifiers, strings, comments, and line numbers in listings; e.g.\ |\color||{gray}|. \end{enumerate} \item \withopt{math} \begin{enumerate} \item \ctan{amsmath} for tons of useful math commands, including |\text|, |\intertext|, and |\boxed| as well as the |bmatrix|, |multiline|, |gather|, |align|, and |alignat| environments. See \href{http://texdoc.net/texmf-dist/doc/latex/amsmath/amsldoc.pdf}{``User's Guide for the \package{amsmath} Package''} for a more complete listing. \item \ctan{mathtools} for other useful/utilitarian commands. \item With \fontspecok, \ctan{unicode-math} to allow equations to be copy-pasted. \item The \ctan{stix2-otf} math fonts. \end{enumerate} \item \withopt{tabu} \begin{enumerate} \item \ctan{multirow} for cells spanning multiple rows. \item \ctan{booktabs} for beautiful-by-default tables and the |\cline| macro. \item \ctan{tabu}, the best table package with dynamically resizable columns, easy creation of new column types, and more. \end{enumerate} \end{enumerate} \section{Class configuration} \subsection{Class options} Class options are limited to configuration options which require the loading of fonts or other packages; ``string'' settings like the assignment's due date are configured with the |\bpsset| command. All class options can be negated with |no