summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/brandeis-problemset/brandeis-problemset.tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/brandeis-problemset/brandeis-problemset.tex
Initial commit
Diffstat (limited to 'macros/latex/contrib/brandeis-problemset/brandeis-problemset.tex')
-rw-r--r--macros/latex/contrib/brandeis-problemset/brandeis-problemset.tex874
1 files changed, 874 insertions, 0 deletions
diff --git a/macros/latex/contrib/brandeis-problemset/brandeis-problemset.tex b/macros/latex/contrib/brandeis-problemset/brandeis-problemset.tex
new file mode 100644
index 0000000000..ab0613e445
--- /dev/null
+++ b/macros/latex/contrib/brandeis-problemset/brandeis-problemset.tex
@@ -0,0 +1,874 @@
+\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<option>|; e.g.\ \option{scheme}
+can be disabled with \option{noscheme}. Later options override previous
+ones.
+
+\begin{keys}
+ \key{antonella} \onlyclass\ Use Dr.\ Antonella DiLillio's preferred
+ styles (Courier for code)
+ \key{tabu} \onlyclass\ Loads useful packages and defines commands for
+ typesetting tables.
+ \key{math} \onlyclass\ Loads utilities for typesetting mathematics.
+ Because mathematics requires specialized fonts\footnote{The
+ \textsc{stix2} math font that this package loads weighs in
+ at 740kb!} as well as several other specialized
+ packages,\footnote{Including \ctan{amsmath},
+ \ctan{mathtools}, and, with \fontspecok,
+ \ctan{unicode-math}.} this is disabled by default. Although
+ I find myself needing mathematics fonts frequently, I know
+ many students do not.
+ \key[default=true]{listings} Enables code listings and enables
+ default styles for colored keywords, pretty line numbers,
+ and so on. While only this option enables the |java|
+ environment, the \option{scheme}, \option{assembly}, and
+ \option{pseudocode} options also load and style the
+ \ctan{listings} package.
+ \key{scheme} Enable Scheme language support, in particular for the
+ \textsc{r5rs} dialect. Additionally, provides the |scheme|
+ environment.
+ \key{pseudocode} Enables the |pseudocode| environment, notably
+ useful for \cosi[data structures]{21b}.
+ \key{assembly} Enables the |assembly| environment, notably useful
+ for \cosi[operating systems]{131a}.
+ \key{solution} Show the content of |solution| environments; by
+ default, they are excluded from compilation using the
+ \ctan{comment} package.
+ \key{gantt} Loads the |ganttschedule| environment.
+ \key[default=true]{maketitle} Redefines |\maketitle| and defines
+ |\maketitlepage| to include information about the course,
+ instructor, assignment, and due date.
+ \optenables{maketitle}{option}.
+ \key[default=true]{header} Adds a header to the top of every page including
+ information about the author, assignment, due date, and
+ instructor. \optenables{header}{option}.
+ \key[default=true]{config} Enables document metadata like the
+ assignment's due date, name/number, instructor, and course
+ through the |\bpsset| command, which supports |\maketitle|,
+ page headers, and so on.
+\end{keys}
+
+\subsubsection{Class options or keyval options?}
+There's trade-offs to be made either way; class options greatly simplify the
+code (we don't have to worry about loading packages and defining commands in
+more than one place, for the most part), but are much less flexible and
+difficult to interface with when the package loading is hidden. At the
+moment, package/class options provide commands and keyval options define
+document-configuration data (like names, due dates, and the like; see
+section~\ref{s:config} for more information).
+
+\subsection{Configuring \bps\ after loading}\label{s:config}
+\begin{desc}
+|\bpsset{<options>}|
+\end{desc}
+Sets global \bps\ options. Mnemonic: \textbf{B}randeis \textbf{p}roblem
+\textbf{s}et \textbf{set}up (this should feel familiar to users of the
+\ctan{listings} package).
+
+\begin{note}
+ |\bpsset| was renamed from |\problemsetsetup| in version 0.5.0. The
+ |\problemsetsetup| command is deprecated and will be removed in a
+ future release.
+\end{note}
+
+\begin{keys}
+\key{course}[\m{course name}]
+ Course name in full.
+\key{coursenumber}[\m{course number}]
+ Course name shorthand; use \texttt{21a} for ``\cosi{21a}''.
+\key{assignment}[\m{assignment name}]
+ Assignment name in full.
+\key{number}[\m{problem set number}]
+ Assignment name shorthand; use \texttt{3} for ``Problem Set 3''.
+\key{duedate}[\m{due date}]
+ Due date, e.g.\ \texttt{2018-10-18}; not parsed at all, but
+ \href{https://en.wikipedia.org/wiki/ISO_8601}{\textsc{iso} 8601
+ dates} are highly recommended.
+\key{instructor}[\m{course instructor}]
+ Course instructor. With the \option{antonella} class-option, this is
+ automatically set to |Dr.~Antonella DiLillio|.
+\key{author}[\m{your name}]
+ Alternate interface for the |\author| command.
+\key{date}[\m{document date}]
+ Alternate interface for the |\date| command.
+\key{codefont}[\m{fontspec font name}]
+ With \fontspecok, pass the given font to |\setmonofont| and enable
+ Unicode shortcuts for the |pseudocode| environment. (If you need to
+ specify options to |\setmonofont|, use |\setcodefont|.)
+\end{keys}
+
+\begin{desc}
+|\setcodefont[<fontspec options>]{<fontspec font name>}|
+\end{desc}
+Sets the monospaced font to \meta{fontspec font name} and uses it for
+shortcuts in the |pseudocode| environment.
+
+\subsection{Practical usage}
+
+You may find it useful to define a customized document class for each
+course. There's no reason to install these to some system-wide directory; it
+makes sense for them to live in the same directory as the problem set source
+files. For instance, \filename{cosi21a.cls} might read:
+
+\begin{latexfile}{cosi21a.cls}
+\LoadClass[antonella, pseudocode]{brandeis-problemset}
+
+% pass all unknown options to brandeis-problemset
+\DeclareOption*{\PassOptionsToClass
+ {\CurrentOption}{brandeis-problemset}}
+\ProcessOptions\relax
+
+% set course/author data
+\bpsset{
+ coursenumber=21a,
+ author=Rebecca Turner,
+}
+
+% get a prettier code font -- these can be pretty big so they're not
+% loaded by default
+\setcodefont[
+ Extension = .otf,
+ UprightFont = *-Regular,
+ BoldFont = *-Bold,
+]{FiraMono}
+\end{latexfile}
+
+and then \filename{ps1.tex} might read:
+
+\begin{latexfile}{ps1.tex}
+\documentclass{cosi21a}
+% stuff specific to this assignment
+\bpsset{
+ number=1,
+ duedate=2018-10-29,
+}
+\begin{document}
+% etc.
+\end{document}
+\end{latexfile}
+
+Note that you could use e.g.~|\documentclass[math]{cosi21a}| to add a
+specific per-document option. See section~\ref{sec:example} for a more
+complete example.
+
+\section{User commands and environments}
+
+\bps\ provides a number of commands for typesetting problems.
+
+\begin{desc}
+|\begin{problem}[<options>]...\end{problem}|
+\end{desc}
+Defines a problem. A problem is set 1~inch from the left margin (although
+this amount may be customized by modifying the |\problemindent| length) and
+begins a new page.
+
+\begin{note}
+ The |problem| and |subproblem| environments are typeset using
+ |\section| and |\subsection| respectively, and as such can be
+ customized with styling packages like \ctan{titlesec}; note,
+ however, that they ignore and hide the usual section counters.
+\end{note}
+
+|<options>| may include:
+\begin{keys}
+\key{title}[\m{problem title}]
+ Displayed after ``Problem'' and the problem's number.
+\key{number}[\m{problem number}]
+ If given, the problem-number counter will not advance. The number
+ must be robust, because it goes inside a |\section|.
+\key{pagebreak}[\bool][true]
+ Add a pagebreak before the problem?
+\key{label}[\m{problem label}]
+ Adds a custom label to the problem with |\label| that can be used
+ with |\ref|. I recommend prefixing your problem labels with |p:| as
+ in |p:big-o-proofs|.
+\key{toc}[\bool][true]
+ Include this problem in the table of contents?
+\key{part}[\m{part name}]
+ Indicates that this problem starts a new ``part'' of the assignment;
+ actually calls |\part| under the hood.
+\key{partlabel}[\m{part label}]
+ Adds a custom label to this part in the same fashion as the
+ \option{label} key.
+\end{keys}
+
+Vertical material is allowed in a~|problem|.
+
+\begin{desc}
+|\begin{subproblem}[<options>]...\end{subproblem}|
+\end{desc}
+Defines a subproblem. A subproblem is set 1~inch from the left margin
+(although this amount may be customized by modifying the |\subproblemindent|
+length) and begins a new page. Valid |<options>| are identical to the
+|problem| environment's, with the following exceptions:
+\begin{keys}
+\key[default=false]{pagebreak}
+ False by default.
+\key{part}
+\key{partlabel}
+ Not available in the |subproblem| environment.
+\end{keys}
+
+\begin{example}
+ Note that although these examples are too short to display them,
+ vertical material --- including listings --- is allowed in the
+ |problem| and |subproblem| environments.
+\end{example}
+\begin{LTXexample}[preset={
+ \presetkeys{problem}{toc=false}{}
+ \presetkeys{subproblem}{toc=false}{}
+ }]
+\begin{problem}
+ This is a problem in an assignment.
+\end{problem}
+
+Some solution here\dots
+
+\begin{subproblem}
+ This is a subproblem.
+\end{subproblem}
+\end{LTXexample}
+
+\begin{desc}
+|\begin{solution}...\end{solution}|
+\end{desc}
+
+Defines a solution for a problem; a solution prints in blue and is excluded
+from the compiled document entirely unless the \option{solutions} package
+option is given.
+
+In this way, the same \extension{tex} file can serve as both a postable
+assignment prompt and an answer key.
+
+\begin{note}
+ The style of solutions is customizable by redefining
+ |\solutionstyle|; it's defined to |\color{blue}| by default.
+\end{note}
+
+\begin{example}
+ The default solution style is shown below; note, however, that this
+ document is compiled with the \option{solution} option passed to
+ \bps; without it, the typeset solution is entirely blank.
+\end{example}
+\begin{LTXexample}
+\begin{solution}
+ Some solution here\dots
+\end{solution}
+\end{LTXexample}
+
+\begin{desc}
+|\Th[<column spec>]{<header text>}|
+\end{desc}
+
+Typesets a table header in bold-face. |<column spec>| defaults to |l|.
+Useful for when a column is wrapped in a math environment; if you have a
+column |>>{\ttfamily}l|, using |\Th| will not print the header in
+|\ttfamily|.
+
+\begin{LTXexample}
+\begin{tabular}{ll}
+\Th{Server} & \Th{\textsc{ip}} \\
+juice & 1.1.1.1 \\
+dogs & 2.2.2.2 \\
+\end{tabular}
+\end{LTXexample}
+
+\begin{desc}
+|\begin{pseudocode}[<keywords>]...\end{pseudocode}|
+\end{desc}
+Prints pseudocode.\footnote{Designed for \cosi{21a} as taught by Dr.\
+Antonella DiLillo}
+
+Several ``shortcuts,'' which replace a source-code sequence like
+\texttt{->} with a symbol like \texttt{→}, are shown in
+table~\ref{tab:pseudocode}.
+
+These shortcuts display in |\pseudocodesymbolfont| (default:
+|\ttfamily|), which may be redefined if you prefer something else. The
+easiest way to change |\pseudocodesymbolfont| is with |\setcodefont|. If
+you use the \option{antonella} option with \fontspecok, \bps\ will load
+\ctan{lm-math} and display the symbols seen in table~\ref{tab:pseudocode},
+which look significantly better with Courier than \ctan{stix}' symbols.
+
+The following words are treated as keywords in pseudocode, and will be
+bolded as appropriate: |Input|, |Output|, |Complexity|, |while|, |do|,
+|return|, |for|, |to|, |if|, |then|, |else|, |True|, |False|, |None|, |and|,
+|or|, |nil|, and |len|.
+
+\begin{table}[h]
+ \centering
+ \caption{Shortcuts provided by the \texttt{pseudocode}
+ environment}%
+ \label{tab:pseudocode}
+ \begin{tabular}{llll}
+ \Th{Input} & \Th{Command} & \Th{Display} & \Th{Codepoint} \\
+ \ttfamily <- & |\pseudocodeleftarrow| & \pseudocodeleftarrow & \unicode{2190} \\
+ \ttfamily -> & |\pseudocoderightarrow| & \pseudocoderightarrow & \unicode{2192} \\
+ \ttfamily (/) & |\pseudocodeemptyset| & \pseudocodeemptyset & \unicode{2205} \\
+ \ttfamily inf & |\pseudocodeinfty| & \pseudocodeinfty & \unicode{221e} \\
+ \ttfamily != & |\pseudocodene| & \pseudocodene & \unicode{2260} \\
+ \ttfamily >= & |\pseudocodege| & \pseudocodege & \unicode{2265} \\
+ \ttfamily <= & |\pseudocodele| & \pseudocodele & \unicode{2264} \\
+ \end{tabular}
+\end{table}
+
+\begin{example}
+ Note how the option |[Bar]| argument makes |Bar| appear bold like
+ any other keyword in the typeset listing.
+\end{example}
+\begin{LTXexample}[rframe=]
+\begin{pseudocode}[Bar]
+Bar(a, n)
+ Input: two integers, a and n
+ Output: a^n
+ k <- n # k is a counter
+ b <- inf
+ c <- a
+ while k >= 0 do
+ if k mod 2 = 0 then
+ k <- k / 2
+ c <- c * c
+ else
+ k <- k - 1
+ b <- b * c
+ return b
+\end{pseudocode}
+\end{LTXexample}
+
+\begin{desc}
+|\begin{assembly}[<listings options>]...\end{assembly}|
+\end{desc}
+Typesets assembly code.\footnote{Designed for \cosi{131a} as taught by Dr.\
+Liuba Shrira} Several considerations are taken into account; most notably,
+line numbers are printed as \texttt{x + n}, where $n$ starts at 0 and counts
+by 4; the line number actually indicates the instruction's location in
+memory as an offset from the program start. Additionally, all valid
+instructions are treated as keywords and styled appropriately.
+
+|<listings options>| is passed directly to the \ctan{listings} package.
+
+\begin{LTXexample}[rframe=, wide,
+ explpreset={basicstyle=\small\ttfamily, basewidth=0.575em,},
+ preset=\lstset{numbers=left, basicstyle=\small\ttfamily, basewidth=0.575em,},]
+\begin{assembly}
+LOAD R4, $200 ; sum addr
+LOAD R1, =0 ; sum
+LOAD R2, =0 ; i
+LOAD R3, =0 ; j
+BR OUTER ; we know i < 10
+INNER:
+ADD R1, R3 ; sum += j
+INC R3 ; j++
+OUTER:
+BLT R3, R2, INNER ; while j < i goto inner
+INC R2 ; i++
+LOAD R3, =0 ; j = 0
+BLT R2, =10, OUTER ; while i < 10 goto outer
+STORE R1, @R4 ; store sum
+HALT
+\end{assembly}
+\end{LTXexample}
+
+\begin{desc}
+|\begin{java}[<listings options>]...\end{java}|
+\end{desc}
+Tragically-common shorthand environment for a listing of Java code.
+
+|<listings options>| is passed directly to the \ctan{listings} package.
+
+\begin{desc}
+|\begin{scheme}[<listings options>]...\end{scheme}|
+\end{desc}
+Shorthand environment for a listing of Scheme code, useful for \cosi{121b}.
+Requires the \option{scheme} package option to be loaded.
+
+|<listings options>| is passed directly to the \ctan{listings} package.
+
+\begin{desc}
+|\begin{ganttschedule}[<total cell count>]...\end{ganttschedule}|
+\end{desc}
+An environment for drawing Gantt charts indicating process scheduling. The
+mandatory argument indicates how small the grid should be; \texttt{19}
+subdivides the line into 19 cells.
+
+To use the |ganttschedule| environment, make sure to use the
+\option{gantt} package option.
+
+Within a |ganttschedule|, use the |\burst| command to indicate an
+active process (i.e.\ a process burst).
+
+\begin{note}
+ The charts |ganttschedule| draws aren't actually really proper Gantt
+ charts, which can indicate parallel activities; however, that's what
+ Liuba calls them, so that's what they're called here.
+\end{note}
+
+\begin{desc}
+|\pid{<pid>}{<burst length>}|
+\end{desc}
+Draw a burst for process |<pid>| of time length |<burst length>|.
+
+\begin{note}
+ The Gantt chart packages (notably \ctan{tikz}) don't play nicely
+ with \ctan{ltxguidex}, the package this documentation is written in;
+ for a typeset example, see section~\ref{sec:example}.
+\end{note}
+
+\begin{latexcode}
+\begin{ganttschedule}{19}
+ \pid{2}{1}
+ \pid{4}{1}
+ \pid{3}{2}
+ \pid{5}{5}
+ \pid{1}{10}
+\end{ganttschedule}
+\end{latexcode}
+
+\begin{note}
+ Because |ganttschedule| relies on \ctan{tikz}, \ctan{fp}, and
+ \ctan{calc}, it can add significantly to document compile times. If
+ you intend to use the |ganttschedule| environment, make sure to use
+ the \option{gantt} class option or set \option{gantt} in
+ |\bpsset|. If you fail to include the \option{gantt}
+ option, you will see an error message:
+
+\begin{latexcode}
+! Package brandeis-problemset Error: ganttschedule enviornment not loaded in preamble.
+
+See the brandeis-problemset package documentation for explanation.
+Type H <return> for immediate help.
+l.4 \burst
+ {1}{1}
+? H
+Did you mean to use the 'gantt' option for the brandeis-problemset document class?
+
+\end{latexcode}
+\end{note}
+
+\subsection{General formatting commands}
+
+\begin{desc}
+|\newacronym[<command>]{<acronym text>}|\\
+|\newacronyms{<acronym list>}|
+\end{desc}
+
+Creates a new acronym. If |<command>| isn't given, the text of the macro
+will be used instead; |\newacronym{cfg}| would define a command |\cfg| which
+typesets as ``\ac{cfg}''. If the
+resulting command already exists, it will be redefined. For |\newacronyms|, the
+|<acronym list>| is a comma-delimited list of acronyms.
+
+\begin{LTXexample}
+\newacronym[\xyz]{cfg}
+A \xyz\ describes a context-free language\dots
+
+\newacronyms{sparc, cpu}
+The \sparc\ had a unique \cpu\dots
+\end{LTXexample}
+
+
+\begin{desc}
+|\ac{<acronym>}|
+\end{desc}
+Typesets an acronym. The |<acronym>| should be lowercase (e.g.\ |\ac{cpu}|
+rather than |\ac{CPU}|). Currently, |\ac| simply delegates to |\textsc|. In
+the future, I'd like to support a bit of letterspacing; ``for abbreviations
+and acronyms in the midst of normal text, use spaced small
+caps.''\footnote{\textit{The Elements of Typographic Style} by Robert
+Bringhurst, 2nd.\ ed, \S\ 3.2.2}
+
+\begin{desc}|\Sc{<text>}|\end{desc}
+An abbreviation for |\textsc|.
+\begin{desc}|\Rm{<text>}|\end{desc}
+An abbreviation for |\textrm|.
+\begin{desc}|\Up{<text>}|\end{desc}
+An abbreviation for |\textup|.
+\begin{desc}|\Bf{<text>}|\end{desc}
+An abbreviation for |\textbf|.
+\begin{desc}|\It{<text>}|\end{desc}
+An abbreviation for |\textit|.
+\begin{desc}|\Tt{<text>}|\end{desc}
+An abbreviation for |\texttt|.
+
+\section{A class and a package}
+As a user, you'll likely only need the \bps\ document class. However,
+a \emph{package} named \bps\ is also provided. The class styles an entire
+document, while the package only provides commands. This allows --- for
+example --- loading the package for the examples in this document without
+messing up our titles, headers, and so on.
+
+\section{Example}\label{sec:example}
+
+A brief example usage of \bps\ follows. For a longer, more in-depth example,
+see
+\href{https://github.com/9999years/brandeis-problemset/blob/master/example.tex}{\filename{example.tex}
+in the \bps\ repository.}
+
+\begin{latexcode}
+\documentclass[gantt]{brandeis-problemset}
+\author{Rebecca Turner}
+\bpsset{
+ coursenumber=21a,
+ instructor=Dr.\ Liuba Shrira,
+ duedate=2018-10-20,
+ number=3,
+}
+\newcommand{\io}{\ac{io}}
+\newcommand{\cpu}{\ac{cpu}}
+\begin{document}
+
+\begin{problem}
+ Write an assembly program!
+\end{problem}
+
+\begin{assembly}
+ LOAD R1, $200 ; A = (program location) + 200
+ LOAD R2, =1 ; i = 1
+\end{assembly}
+
+\begin{problem}
+ What does this algorithm do? Analyze its worst-case running time and
+ express it using big-O notation.
+
+\begin{pseudocode}[Foo]
+Foo(a, n)
+ Input: two integers, a and n
+ Output: a^n
+ k <- 0
+ b <- 1
+ while k < n do
+ k <- k + 1
+ b <- b * a
+ return b
+\end{pseudocode}
+\end{problem}
+
+$\Rm{Foo}(a, n)$ computes $a^n$, and will run in $O(n)$ time always.
+
+\begin{problem}[number=5.4]
+ Consider the following set of processes, with the length of the
+ \cpu\ burst given in milliseconds:
+
+ \begin{center}
+ \begin{tabu} to 0.25\linewidth{X[1,$]rr}
+ \Th{Process} & \Th{Burst time} & \Th{Priority} \\
+ P_1 & 10 & 3 \\
+ P_2 & 1 & 1 \\
+ P_3 & 2 & 3 \\
+ P_4 & 1 & 4 \\
+ P_5 & 5 & 2 \\
+ \end{tabu}
+ \end{center}%$
+
+ Draw a Gantt chart to illustrate the execution of these processes
+ using the \ac{sjf} scheduling algorith.
+\end{problem}
+
+\begin{ganttschedule}{19}
+ \pid{2}{1}
+ \pid{4}{1}
+ \pid{3}{2}
+ \pid{5}{5}
+ \pid{1}{10}
+\end{ganttschedule}
+\end{document}
+\end{latexcode}%stopzone
+
+\begin{changelog}[author=Rebecca Turner]
+\begin{version}[v=Coming soon\dots]
+\added
+ \item Support for \cosi{130b}, including regular expressions and
+ context-free grammars.
+\end{version}
+
+\shortversion{v=0.5.5, date=2019-04-10, changes={Reordered package loading
+ to prevent \ctan{mathtools} from breaking \cs{overbrace} and \cs{underbrace}
+ commands.}}
+
+\shortversion{v=0.5.4, date=2019-04-02, changes={Fixed hanging indent in
+ \texttt{description}-lists; the hanging indent was accidentally
+ removed through a tweak to hang the list item markers for the
+ \texttt{itemize} and \texttt{enumerate} lists.}}
+
+\shortversion{v=0.5.3, date=2019-03-30, changes={Commands such as
+ \cs{texttt} won't automatically cause errors when used in the optional
+ arguments of the \texttt{problem} and \texttt{subproblem} environments.
+ More complex commands may still cause issues, however.}}
+
+\shortversion{v=0.5.2, date=2019-03-13, changes={Scheme code highlighting
+ erroneously highlighted \texttt{c\textbf{b}r},
+ \texttt{ca\textbf{b}r}, etc.\ rather than
+ \texttt{c\textbf{d}r},\texttt{ca\textbf{d}r}, etc. These keywords
+ have been renamed.}}
+
+\shortversion{v=0.5.1, date=2019-03-09, changes={Distribution erroneously
+ excluded \filename{brandeis-problemset.sty}.}}
+
+\begin{version}[v=0.5.0, date=2019-03-06]
+\added
+ \item |\newacronym| and |\newacronyms| commands.
+ \item Added \option{toc} option to the |problem| and |subproblem|
+ environments.
+\changed
+ \item Cleaned up internals; improved option system, split \bps\ into
+ a class and a package, renamed commands and lengths to use the
+ |bps@| prefix more consistently.
+ \item \bps\ now has a modular and much more conservative approach;
+ far fewer packages are loaded and features are loaded only upon
+ request to a much greater extent.
+ \item |subproblem| is now an environment, not a command, with an
+ interface matching the |problem| environment.
+ \item The \option{assembly} and \option{pseudocode} options now
+ define languages for the \ctan{listings} package, rather than just
+ providing environments to use the languages.
+\removed
+ \item The following commands have been removed in favor of the
+ |\bpsset| command, which encompasses their functionality
+ entirely:
+ |\duedate{<date>}|,
+ |\instructor{<name>}|,
+ |\course{<name>}|,
+ |\coursenumber{<number>}|,
+ |\assignment{<name>}|, and
+ |\problemsetnumber{<number>}|.
+ \item Removed dependencies: \ctan{environ} and \ctan{titlesec}. No
+ longer unconditionally loaded: \ctan{hyperref},
+ \ctan{xcolor}, \ctan{comment}, \ctan{listings},
+ \ctan{multirow}, \ctan{booktabs}, \ctan{longtable},
+ \ctan{tabu}.
+\deprecated
+ \item The |\problemsetsetup| command, which has been renamed
+ |\bpsset|.
+\end{version}
+
+\begin{version}[v=0.4.4, date=2019-02-14]
+\changed
+ \item Changed Times body copy font from \ctan{tex-gyre}'s Termes to
+ the newer \ctan{stix2-otf} (for \fontspecok) and \ctan{stix2-type1}
+ (for other \TeX\ engines) --- the \textsc{stix2} fonts are somewhat
+ unique amongst Times-likes in that they contain small caps.
+
+ \item Redefined |\Re| to print in blackboard-bold.
+\end{version}
+
+\shortversion{v=0.4.3, date=2019-01-20,
+ changes={Fixed typos in license file, fixed distributed
+ documentation \extension{pdf}.}}
+
+\begin{version}[v=0.4.2, date=2019-01-19]
+\added
+ \item |author| and |date| keys added to |\problemsetsetup| to
+ simplify class-wide configuration.
+\fixed
+ \item Fixed definitions for |\duedate|, |\instructor|, etc.\ to
+ avoid spurious errors due to undefined commands.
+\changed
+ \item Translated documentation to the new \ctan{ltxguidex} document
+ class for added beauty.
+ \item Re-licensed \bps\ to the \textsc{lppl} v1.3c for easy transfer of
+ maintenence in the future.
+\end{version}
+
+\shortversion{v=0.4.1, date=2019-01-03,
+ changes={Updated |scheme| environment to properly recognize all
+ primitive functions, added syntax coloring to all code.}}
+
+\begin{version}[v=0.4.0, date=2018-12-20]
+\added
+ \item |solution| environment and \option{solutions} class
+ option.
+ \item |scheme| shorthand environment and \option{scheme} class
+ option.
+\fixed
+ \item Boolean class options being overwritten by keys defined for
+ |\problemsetsetup|.
+ \item Title-formatting errors
+\removed
+ \item Assignment- and course-specific class options
+ \option{duedate}, \option{assignment}, \option{instructor},
+ and \option{course}. These settings should be configured
+ with either |\problemsetsetup| or their specific commands.
+ (|\duedate|, |\instructor|, etc.).
+\end{version}
+
+\begin{version}[v=0.3.0, date=2018-10-24]
+\added
+ \item This changelog.
+ \item Support for |\part|s and referencing problems.
+ \item Options to |problem| environment: \option{part},
+ \option{label}, and \option{partlabel}.
+ \item |\maketitle| (contrast with |\maketitlepage|).
+\end{version}
+
+\begin{version}[v=0.2.0, date=2018-10-20]
+\changed
+ \item Class renamed to from \ltxclass{problemset} to \bps.
+\added
+ \item A license header.
+ \item |ganttschedule| environment.
+ \item Additional keywords for |pseudocode| environment:
+ \texttt{and}, \texttt{or}, \texttt{nil}, and \texttt{len}.
+ \item |\ac| command for acronyms.
+ \item An example document.
+\end{version}
+
+\shortversion{v=0.1.0, date=2018-10-19,
+ changes=Initial beta as \ltxclass{problemset}.}
+\end{changelog}
+\end{document}