diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/rbt-mathnotes/rbt-mathnotes-hw.cls')
-rw-r--r-- | Master/texmf-dist/tex/latex/rbt-mathnotes/rbt-mathnotes-hw.cls | 325 |
1 files changed, 325 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/rbt-mathnotes/rbt-mathnotes-hw.cls b/Master/texmf-dist/tex/latex/rbt-mathnotes/rbt-mathnotes-hw.cls new file mode 100644 index 00000000000..24e91f715e3 --- /dev/null +++ b/Master/texmf-dist/tex/latex/rbt-mathnotes/rbt-mathnotes-hw.cls @@ -0,0 +1,325 @@ +%% rbt-mathnotes-hw.cls +%% Copyright 2021 Rebecca B. Turner. +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Rebecca B. Turner. +% +% This work consists of the files: +% README.md +% rbt-mathnotes.tex +% rbt-mathnotes.sty +% rbt-mathnotes.cls +% rbt-mathnotes-util.sty +% rbt-mathnotes-messages.sty +% rbt-mathnotes-hw.cls +% rbt-mathnotes-formula-sheet.cls +% examples/cheat-sheet.tex +% examples/multivar.tex +% examples/topology-hw-1.tex +% and the derived files: +% rbt-mathnotes.pdf +% examples/cheat-sheet.pdf +% examples/multivar.pdf +% examples/topology-hw-1.pdf + +\NeedsTeXFormat{LaTeX2e} +\RequirePackage{expl3} +\ProvidesExplClass{rbt-mathnotes-hw}{2021/11/29}{1.0.2}{Companion styles + to rbt-mathnotes for typeset homework assignments.} + +% \PassOptionsToPackage{noxcolor}{rbt-mathnotes} + +\RequirePackage{kvoptions} +\DeclareDefaultOption + { + \PassOptionsToClass { \CurrentOption } { rbt-mathnotes } + } +\ProcessKeyvalOptions* + +\LoadClass { rbt-mathnotes } + +\cs_set:Npn \mn__undefine_thm:n #1 + { + \cs_undefine:c { #1 } + \cs_undefine:c { end#1 } + \cs_undefine:c { #1* } + \cs_undefine:c { end#1* } + } + +\mn__undefine_thm:n { thm } +\mn__undefine_thm:n { lem } +\mn__undefine_thm:n { cor } +\mn__undefine_thm:n { prop } +\mn__undefine_thm:n { defn } +\mn__undefine_thm:n { notation } +\mn__undefine_thm:n { ex } + +\cs_undefine:N \mn__undefine_thm:n + +\theoremstyle { definition } +\newtheorem { thm } { Theorem } +\newtheorem { lem } { Lemma } +\newtheorem { cor } { Corollary } +\newtheorem { prop } { Proposition } +\newtheorem { defn } { Definition } +\newtheorem { notation } { Notation } +\newtheorem { ex } { Example } + +% The displayed problem number. \g__mn_problems_int isn't incremented if a +% custom number is given. +\int_new:N \g__mn_problems_int +\int_set_eq:NN \g__mn_problems_int \c_one_int + +% The internal problem number. \g__mn_all_problems_int is *always* +% incremented, so it can be used as a unique identifier in hyperref +% pdf bookmark names. +\int_new:N \g__mn_all_problems_int +\int_set_eq:NN \g__mn_all_problems_int \c_one_int + +% Label prepended to problem numbers. +\tl_const:Nn \g__mn_problem_string_tl { Problem } + +\skip_const:Nn \g__mn_problem_before_skip { 2em } + +% Label appended to problem numbers; omitted from PDF bookmarks. +\tl_const:Nn \g__mn_problem_after_tl { . } + +% A possible custom problem number. If \c_novalue_tl, use +% \g__mn_problems_int instead. +\tl_new:N \mn__problem_number_tl +\tl_set_eq:NN \mn__problem_number_tl \c_novalue_tl + +\tl_const:Nn \mn__problem_number_default_tl + { + \int_to_arabic:n { \g__mn_problems_int } + } + +% Current problem number, either from \g__mn_problems_int or +% \mn__problem_number_tl. +\tl_new:N \mn__problem_number_current_tl + +% Current problem display title, including "problem" label, number, and +% custom title. +% \tl_new:N \mn__problem_display_title_tl + +\keys_define:nn { mn__main } + { + problem~string .value_required:n = true , + problem~string .tl_set:N = \g__mn_problem_string_tl , + problem~before~skip .skip_set:N = \g__mn_problem_before_skip + } + +\keys_define:nn { mn__problem } + { + number .value_required:n = true , + number .tl_set:N = \mn__problem_number_tl , + + title .value_required:n = true , + title .tl_set:N = \mn__problem_title_tl , + title .initial:n = , + + label .value_required:n = true , + label .tl_set:N = \mn__problem_label_tl , + + % Treat unknown keys as the problem number; this lets us avoid having + % 2 or more optional arguments. + unknown .code:n = + \tl_if_empty:nTF { #1 } + { + % No value; use it for the problem number. + \tl_set_eq:NN \mn__problem_number_tl \l_keys_key_tl + } + { + % Non-empty value; give an error. + \msg_error:nnx + { mathnotes } + { no key in problem } + { \tl_use:N \l_keys_key_tl } + } , + } + +\cs_set:Npn \mn__problem_title_pdf: + { + % A string like "Problem" or "Exercise" or "Question" + \tl_use:N \g__mn_problem_string_tl + % The problem number. + \tl_if_empty:NF \mn__problem_number_current_tl + { + \ \tl_use:N \mn__problem_number_current_tl + } + \tl_if_empty:NF \mn__problem_title_tl + { + :~\tl_use:N \mn__problem_title_tl + } + } + +\cs_set:Npn \mn__problem_title: + { + \mn__problem_title_pdf: + % The text after the problem, nominally a period ("."). + \tl_use:N \g__mn_problem_after_tl + } + +% PDF anchor / bookmark name for hyperref. +\cs_set:Npn \mn__problem_anchor: + { + problem.\int_to_arabic:n { \g__mn_all_problems_int } + } + +\NewDocumentEnvironment { problem } + { + O{} % Problem number or options + } + { + \keys_set:nn { mn__problem } { #1 } + + % Set the problem number + \tl_set:Nn \mn__problem_number_current_tl { } + \tl_if_eq:NNTF \mn__problem_number_tl \c_novalue_tl + { + % No number given + \tl_set_eq:NN \mn__problem_number_current_tl \mn__problem_number_default_tl + } + { + % Some number given, *maybe* empty + \tl_set_eq:NN \mn__problem_number_current_tl \mn__problem_number_tl + } + + \vspace { \skip_use:N \g__mn_problem_before_skip } + + \phantomsection + \addcontentsline + { toc } + { chapter } + { \mn__problem_title_pdf: } + \begin{mdframed} + [ + style = note , + startinnercode = + \mn__note_title:n + { + \cs_gset:Npx \@currentlabel { \tl_use:N \mn__problem_number_current_tl } + \cs_gset:Npx \@currentlabelname { \mn__problem_title: } + \tl_if_empty:NF \mn__problem_label_tl + { + \exp_after:wN \label { \tl_use:N \mn__problem_label_tl } + } + \mn__problem_title: + } + , + ] + } + { + \end{mdframed} + % If we didn't get a custom number, increment the counter. + \tl_if_eq:NNT \mn__problem_number_tl \c_novalue_tl + { + \int_gincr:N \g__mn_problems_int + } + % But always increment the internal counter. + \int_gincr:N \g__mn_all_problems_int + } + +\NewDocumentCommand \prob + { + O{} % Problem number or options + m % Problem text + } + { + \begin{problem}[#1] + #2 + \end{problem} + } + +\cs_set:Npn \mn__add_par_arg_to_sectioning_cmd:N #1 + { + \cs_set_eq:cN { mn__\cs_to_str:N #1 _old } #1 + \cs_set_eq:cc + { mn__the\cs_to_str:N #1 _old } + { the\cs_to_str:N #1 } + \RenewDocumentCommand #1 + { + s % ##1: Numbered / in ToC? + d() % ##2: Number override. + o % ##3: ToC title. + o % ##4: Page header title. + m % ##5: Title. + } + { + \group_begin: + \cs_set:Npx \mn__current_thesection_cmd + { the\cs_to_str:N #1 } + % Is there a number override? + \IfValueTF { ##2 } + { + % If yes, *globally* change the number format. + \cs_gset:cpn { \mn__current_thesection_cmd } { ##2 } + } + { + % Otherwise, restore the number format from a previous override, + % if applicable. + \cs_gset_eq:cc + { \mn__current_thesection_cmd } + { mn__the\cs_to_str:N #1 _old } + } + % Save the original command so we can use it as a single token. + \cs_set_eq:Nc \mn__orig_sectioning_cmd { mn__\cs_to_str:N #1 _old } + \exp_last_unbraced:Ne \mn__orig_sectioning_cmd + { + % Propagate the star. + \IfBooleanT { ##1 } { * } + % Propogate other arguments. + \IfValueT { ##3 } { [##3] } + \IfValueT { ##4 } { [##4] } + { ##5 } + } + \group_end: + } + } + +\cs_set:Npn \mn__add_par_arg_to_sectioning_cmds:n #1 + { + \clist_map_function:nN { #1 } \mn__add_par_arg_to_sectioning_cmd:N + } + +\makeheadstyles { rbt-mathnotes-hw } + { + \chapterstyle { rbt-mathnotes } + \headstyles { rbt-mathnotes } + + % Don't use chapter numbers in sections and beyond: + \cs_set:Npn \thesection { \arabic{section} } + + % Add paren-arg to override numbers in sectioning commands. + \mn__add_par_arg_to_sectioning_cmds:n + { + \chapter , + \section , + \subsection , + \subsubsection , + \paragraph , + \subparagraph , + } + } + +\headstyles { rbt-mathnotes-hw } + +\setlength{\columnsep}{3em} + +% No chapter numbers for figures. +\counterwithout{figure}{chapter} + +% Put author name, title in headings +\makeevenfoot { headings } { } { } { } +\makeoddfoot { headings } { } { } { } +\makeevenhead { headings } { } { } { \thepage } +\makeoddhead { headings } { \@author,~\textit{ \@title } } { } { \thepage } |