From e127e502f1bc7386699c44d75c89991f1a5e0ac6 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Wed, 1 Dec 2021 03:00:56 +0000 Subject: CTAN sync 202112010300 --- .../latex/contrib/rbt-mathnotes/rbt-mathnotes.sty | 1122 ++++++++++++++++++++ 1 file changed, 1122 insertions(+) create mode 100644 macros/latex/contrib/rbt-mathnotes/rbt-mathnotes.sty (limited to 'macros/latex/contrib/rbt-mathnotes/rbt-mathnotes.sty') diff --git a/macros/latex/contrib/rbt-mathnotes/rbt-mathnotes.sty b/macros/latex/contrib/rbt-mathnotes/rbt-mathnotes.sty new file mode 100644 index 0000000000..afa05cbfb8 --- /dev/null +++ b/macros/latex/contrib/rbt-mathnotes/rbt-mathnotes.sty @@ -0,0 +1,1122 @@ +%% rbt-mathnotes.sty +%% 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} +\ProvidesExplPackage{rbt-mathnotes}{2021/11/29}{1.0.2}{Styles for + mathematical note taking.} +\errorcontextlines 20 +% Module 'mn' + +% Load some utility packages. +\RequirePackage{xparse} % Better command declarations. +\RequirePackage{xkeyval} % Better keyval parsing. +% {{{ Package options +\RequirePackage{kvoptions} % More flexible package options. +\RequirePackage{rbt-mathnotes-util} + +\SetupKeyvalOptions + { + family = mn__package_options , + } + +\mn__option_new[init = true]{fonts} +\mn__option_new[init = true]{stix} +\mn__option_new[init = true]{symbols} +\mn__option_new[init = true]{maketitle} +\mn__option_new[init = true]{titles} +\mn__option_new[init = true]{xcolor} +\mn__option_new[init = true]{theorems} +\mn__option_new[init = true]{enumitem} +\mn__option_new{listings} +\mn__option_new{knowledge} +\mn__option_new{index} +\mn__option_new{footnotes} +\mn__option_new{figures} +\mn__option_new{tabu} +\mn__option_new{kindle} + +\mn__process_options:n { mn__package_options } % }}} + +\RequirePackage{rbt-mathnotes-messages} + +% {{{ Load fonts. +% Check if we can load fontspec; this is taken from fontspec.sty. +\bool_new:N \c__mn_fontspec_bool +\bool_set:Nn \c__mn_fontspec_bool + { + \sys_if_engine_xetex_p: || \sys_if_engine_luatex_p: + } + +% NOTE: The order these packages are loaded in is very important. +% - mathtools has to be loaded before these or overbrackets and such get +% messed up +% - unicode-math overwrites a bunch of commands, so should be loaded after +% amsmath and others +% - amsmath should be loaded after stix2 (not sure why, but the stix2 +% documentation specifies this) -- however, if we can use fontspec, we +% just load the stix2 fonts without the stix2 package itself, so we load +% amsmath before unicode-math (and the stix2 fonts) +\RequirePackage{mathtools} +\bool_if:NTF \g__mn_fonts_bool + { + \bool_if:NTF \c__mn_fontspec_bool + { + \RequirePackage{amsmath}[2013/01/14] + % unicode-math makes equations copy/pastable in PDF output. + % Note that unicode-math encapsulates the functionality of fontspec. + \RequirePackage[ + warnings-off={mathtools-colon,mathtools-overbracket} + ]{unicode-math} + \bool_if:NT \g__mn_stix_bool + { + \setmainfont + [ + UprightFont = *-Regular , + ItalicFont = *-Italic , + BoldFont = *-Bold , + BoldItalicFont = *-BoldItalic , + Extension = .otf , + ] + { STIX2Text } + + \setmathfont + [ + StylisticSet = + { + 1 , % better caligraphic forms + 8 , % upright integrals + } , + Extension = .otf , + ] + { STIX2Math } + } + } + { + % Otherwise, load non-XeTeX fallbacks. + \bool_if:NT \g__mn_stix_bool + { + \RequirePackage[upint]{stix2} + } + \RequirePackage{amsmath}[2013/01/14] + } + } + { + % No fonts + \RequirePackage{amsmath}[2013/01/14] + } % }}} + +\bool_if:NT \g__mn_symbols_bool % {{{ Define math symbol commands + { + % Logical not + \mn__if_package_loaded:nTF { unicode-math } + { \DeclareDocumentCommand \lnot {} { \char "AC } } % 0xAC = ¬ + { \mathchardef \Not = "1218 } + + % Blackboard bold set symbols + \NewDocumentCommand \Rational {}{\mathbb{Q}} + \ProvideDocumentCommand \Rat {}{\Rational} + \ProvideDocumentCommand \Q {}{\Rational} + + % \NewDocumentCommand \Irrational {}{\mathbb{I}} + % \ProvideDocumentCommand \Irrat {}{\Irrational} + % \ProvideDocumentCommand \I {}{\Irrational} + + \NewDocumentCommand \Natural {}{\mathbb{N}} + \ProvideDocumentCommand \Nat {}{\Natural} + \ProvideDocumentCommand \N {}{\Natural} + + \NewDocumentCommand \Integer {}{\mathbb{Z}} + \ProvideDocumentCommand \Int {}{\Integer} + \ProvideDocumentCommand \Z {}{\Integer} + + \NewDocumentCommand \Complex {}{\mathbb{C}} + \ProvideDocumentCommand \Comp {}{\Complex} + % Renew \C to mean \Complex in math-mode; normally, \C just gives an + % error in math-mode. + % ...if \C isn't defined, just define it normally. + \AtBeginDocument + { + \cs_if_free:NTF \C + { \NewDocumentCommand } + { + \cs_set_eq:NN \mn__C_old \C + \RenewDocumentCommand + } + \C {}{ + \mode_if_math:TF + { \Complex } % Complex set + { \mn__C_old } % Copyright sign + } + } + + \NewDocumentCommand \Real {}{\mathbb{R}} + \ProvideDocumentCommand \R {}{\Real} + + % Using the Weierstrass p here is probably a bit controversial, but I like + % it. I'm open to change, though... + \ProvideDocumentCommand \powerset {}{\wp} + + \RenewDocumentCommand \vec {m}{\mathbf{#1}} + + % Operator synonyms. + % Set intersect. + \ProvideDocumentCommand \intersection {}{\cap} + \ProvideDocumentCommand \inter {}{\cap} + \ProvideDocumentCommand \bigintersection {}{\bigcap} + \ProvideDocumentCommand \biginter {}{\bigcap} + + % Set union. + \ProvideDocumentCommand \union {}{\cup} + \ProvideDocumentCommand \bigunion {}{\bigcup} + % Disjoint union. + \ProvideDocumentCommand \disjointunion {}{\sqcup} + \ProvideDocumentCommand \disunion {}{\sqcup} + + % Divisiblity. + \ProvideDocumentCommand \divisible {}{\mid} + \ProvideDocumentCommand \div {}{\mid} + % Negation. + \ProvideDocumentCommand \notdivisible {}{\nmid} + \ProvideDocumentCommand \ndivisible {}{\nmid} + \ProvideDocumentCommand \notdiv {}{\nmid} + \ProvideDocumentCommand \ndiv {}{\nmid} + + % Wrappers around floor and ceil. + \ProvideDocumentCommand \floor {m}{\lfloor #1\rfloor} + \ProvideDocumentCommand \ceil {m}{\lceil #1\rceil} + + % The default empty set symbol is very ugly. Use \varnothing instead, + % which is less ugly. + \AtBeginDocument{\RenewDocumentCommand \emptyset {}{\varnothing}} + \ProvideDocumentCommand \es {}{\emptyset} + + % Function composition. The notation g \after f helps internalize the + % order of operations. :) + \ProvideDocumentCommand \after {}{\circ} + + % Cross product. + \ProvideDocumentCommand \cross {}{\times} + + % Operators. + % Function image. + \cs_if_free:NT \img + { \DeclareMathOperator \img {img} } + % Function pre-image. + \cs_if_free:NT \pre + { \DeclareMathOperator \pre {pre} } + % Function stabilizer. + \cs_if_free:NT \Stab + { \DeclareMathOperator \Stab {Stab} } + % Set of a function's fixed points. + \cs_if_free:NT \FixPt + { \DeclareMathOperator \FixPt {FixPt} } + % Identity function + \cs_if_free:NT \id + { \DeclareMathOperator \id {id} } + + % Injective function. + \ProvideDocumentCommand \injection {}{\hookrightarrow} + \ProvideDocumentCommand \inj {}{\hookrightarrow} + % Surjective function. + \ProvideDocumentCommand \surjection {}{\twoheadrightarrow} + \ProvideDocumentCommand \surj {}{\twoheadrightarrow} + % Bijective function. + \ProvideDocumentCommand \bijection {}{\twoheadrightarrowtail} + \ProvideDocumentCommand \bijective {}{\twoheadrightarrowtail} + \ProvideDocumentCommand \bij {}{\twoheadrightarrowtail} + % Function restriction. + \cs_if_free:NT \restriction + { \DeclareMathOperator \restriction {|} } + \ProvideDocumentCommand \restr {}{\restriction} + + % d/dx + \ProvideDocumentCommand \dd { O{} m }{\frac{d#1}{d#2}} + \ProvideDocumentCommand \pd { O{} m }{\frac{\partial#1}{\partial#2}} + \ProvideDocumentCommand \gradient {}{\nabla} + \ProvideDocumentCommand \grad {}{\nabla} + \cs_if_free:NT \curl + { \DeclareMathOperator \curl {curl} } + \cs_if_free:NT \dive + { \DeclareMathOperator \dive {div} } + } % }}} + +% Gives this an equation a number in an amsmath starred environment. +\ProvideDocumentCommand \numberthis { } % {{{ + { + \tag { \theequation } + \refstepcounter { equation } + } % }}} + +% Gives this equation a number and label in an amsmath starred environment. +\ProvideDocumentCommand \labelthis { m } % {{{ + { + \numberthis + \IfValueT { #1 } + { \label { #1 } } + } % }}} + +\bool_if:NT \g__mn_enumitem_bool + { \RequirePackage{enumitem} } + +\bool_if:NT \g__mn_listings_bool + { \RequirePackage{listings} } + +\bool_if:NT \g__mn_xcolor_bool % {{{ Load xcolor and define MN colors + { + \PassOptionsToPackage { rgb } { xcolor } + \RequirePackage { xcolor } + \providecolorset { HTML } + % Prefix/postfix of all color names + { } { } + { + \use_none:n + ; MNthmtitle , 0F0066 + ; MNthmbg , EBFEFF + ; MNthmline , 4836B3 + ; MNextitle , 692219 + ; MNexbg , FFF0EB + ; MNexline , CC7468 + ; MNdefntitle , 00540B + ; MNdefnline , 196924 + ; MNdefnbg , EBFFED + ; MNnotetitle , 6B0019 + ; MNnoteline , CC3F60 + ; MNnotebg , FFF5F7 + + ; MNsecnum , 8015A1 + + ; MNlink , 113DB8 + } + } % }}} + +\bool_if:NT \g__mn_listings_bool % {{{ Better default styles + { + \RequirePackage { xcolor } + \lstset + { + % Use a monospace font for code listings. + basicstyle = \ttfamily , + language = Mathematica , + % Tab size of 4, but you should probably use spaces. + tabsize = 4 , + % Keywords in blue. + keywordstyle = \bfseries\ttfamily\color[rgb]{0,.3,.7} , + % Comments in green. + commentstyle = \color[rgb]{0.133,0.545,0.133} , + % Strings in orange. + stringstyle = \color[rgb]{0.75,0.49,0.07} , + % The default listings characters are too widely-spaced. + % 0.55em/character makes things look a lot better. + basewidth = 0.55em , + % Wrap lines if they're too long, and wrap at whitespace. + breaklines , + breakatwhitespace = true , + } + } % }}} + +% Creates an acronym-command. +% \newacronym[<\command>]{} defines \command to be \textsc{text}. +% \newacronym{} defines \text to be \textsc{text}. +\ProvideDocumentCommand \newacronym { o m } % {{{ + { + \group_begin: + % If we have #1, then #1 is the cs we're going to define; #1 is a cs. + % Otherwise, we define \#2. + \IfValueTF { #1 } + { \cs_set:Npn \mn__acronym_cs: { \cs_to_str:N #1 } } + { \cs_set:Npn \mn__acronym_cs: { #2 } } + + % Ensure that the cs is undefined. + \cs_if_exist:cT { \mn__acronym_cs: } + { + \msg_error:nnxx + { mathnotes } + { acronym already defined } + { \exp_not:c { \mn__acronym_cs: } } + { #2 } + } + + % Finally, define the acronym command. + \cs_new:cpn { \mn__acronym_cs: } + { \textsc { #2 } } + \group_end: + } % }}} + +% \newacronyms takes a comma-separated list as its argument and defines them +% all as acronyms. +\ProvideDocumentCommand \newacronyms { m } + { \clist_map_function:nN { #1 } \newacronym } + +% {{{ Package configuration string values; \mathnotes command +\keys_define:nn { mn__main } + { + date .value_required:n = true , + date .code:n = \date{#1} , + author .value_required:n = true , + author .code:n = \author{#1} , + title .value_required:n = true , + title .code:n = \title{#1} , + + generate~thanks .value_required:n = false , + generate~thanks .bool_set:N = \g__mn_should_make_thanks , + generate~thanks .default:n = true , + generate~thanks .initial:n = true , + } + +\cs_set:Npn \mn__key_new:n #1 + { + \keys_define:nn { mn__main } + { + #1 .value_required:n = true , + #1 .tl_gset:c = g__mn_#1_tl , + #1 .initial:x = , + } + } + +\cs_set:Npn \mn__keys_new:n #1 { \clist_map_function:nN { #1 } \mn__key_new:n } + +\mn__keys_new:n + { + instructor, course, name, email, institution, semester, + } + +\NewDocumentCommand \mathnotes { m } + { + \keys_set:nn { mn__main } { #1 } + } +% }}} + +\bool_if:NT \g__mn_maketitle_bool % {{{ \author, \title, \maketitle, \thanks, etc. + { + \bool_new:N \g__mn_author_set + \cs_set:Npn \author #1 + { + \bool_gset_true:N \g__mn_author_set + \cs_gset:Npn \@author { #1 } + } + + \bool_new:N \g__mn_title_set + \cs_set:Npn \title #1 + { + \bool_gset_true:N \g__mn_title_set + \cs_gset:Npn \@title { #1 } + } + + \prg_new_conditional:Npnn \mn__if_should_make_thanks: % {{{ + { T, } + { + \bool_if:NTF \g__mn_should_make_thanks + { + \bool_lazy_all:nTF + { + { \tl_if_empty_p:N \g__mn_email_tl } + { \tl_if_empty_p:N \g__mn_course_tl } + { \tl_if_empty_p:N \g__mn_instructor_tl } + { \tl_if_empty_p:N \g__mn_institution_tl } + { \tl_if_empty_p:N \g__mn_semester_tl } + } + { \prg_return_false: } + { \prg_return_true: } + } + { \prg_return_false: } + } % }}} + + \cs_set:Npn \mn__make_thanks_text % {{{ + { + \tl_if_empty:NF \g__mn_email_tl + { + \email { \tl_use:N { \g__mn_email_tl } } + \bool_lazy_all:nF + { + { \tl_if_empty_p:N \g__mn_course_tl } + { \tl_if_empty_p:N \g__mn_instructor_tl } + { \tl_if_empty_p:N \g__mn_institution_tl } + { \tl_if_empty_p:N \g__mn_semester_tl } + } + { ;~ } + } + \tl_if_empty:NF \g__mn_course_tl + { + \tl_use:N \g__mn_course_tl + \bool_lazy_all:nF + { + { \tl_if_empty_p:N \g__mn_instructor_tl } + { \tl_if_empty_p:N \g__mn_institution_tl } + { \tl_if_empty_p:N \g__mn_semester_tl } + } + { ~ } + } + \tl_if_empty:NF \g__mn_instructor_tl + { + \bool_lazy_all:nTF + { + { \tl_if_empty_p:N \g__mn_email_tl } + { \tl_if_empty_p:N \g__mn_course_tl } + } + { Taught~by~ } + { taught~by~ } + \tl_use:N \g__mn_instructor_tl + } + \tl_if_empty:NF \g__mn_institution_tl + { + \bool_lazy_all:nTF + { + { \tl_if_empty_p:N \g__mn_email_tl } + { \tl_if_empty_p:N \g__mn_course_tl } + { \tl_if_empty_p:N \g__mn_instructor_tl } + } + { At~ } + { ~at~ } + \tl_use:N \g__mn_institution_tl + } + \tl_if_empty:NF \g__mn_semester_tl + { + \bool_lazy_all:nF + { + { \tl_if_empty_p:N \g__mn_email_tl } + { \tl_if_empty_p:N \g__mn_course_tl } + { \tl_if_empty_p:N \g__mn_instructor_tl } + { \tl_if_empty_p:N \g__mn_institution_tl } + } + { ,~ } + \tl_use:N \g__mn_semester_tl + } + . + } % }}} + + \cs_set:Npn \@author % {{{ + { + % If the author hasn't been set, we provide this (complicated, PITA) + % default; however, if we don't have any information to put in it, we + % still give a warning. + \tl_if_eq:NNTF \g__mn_name_tl \c_novalue_tl + { + \msg_warning:nn { mathnotes } { no name } + } + { + \tl_use:N \g__mn_name_tl + % Do we have any information to put in a \thanks? + \mn__if_should_make_thanks:T + { + \thanks { \mn__make_thanks_text } + } + } + } % }}} + + % {{{ \@maketitle and \maketitle + \skip_const:Nn \g__mn_maketitle_after_title { 1em } + \skip_const:Nn \g__mn_maketitle_after_author { 0.5em } + \skip_const:Nn \g__mn_maketitle_after { 1.5em } + + \RenewDocumentCommand \@maketitle {} + { + \begin{center} + \let \footnote \thanks + + % Set the title, if it exists. + \bool_if:NT \g__mn_title_set + { + \group_begin: + \HUGE + \bfseries + \@title + \par + \group_end: + } + \skip_vertical:N \g__mn_maketitle_after_title + + % Set the author. + \group_begin: + \LARGE + \lineskip 0.5em + \begin{tabular}[t]{c} + \@author + \end{tabular} + \par + \group_end: + \skip_vertical:N \g__mn_maketitle_after_author + + % Set the date. + \large + \@date + + \end{center} + \par + \skip_vertical:N \g__mn_maketitle_after + } + + \RenewDocumentCommand \maketitle {} + { + \par + \group_begin: + \cs_set:Npn \thefootnote + { + \@fnsymbol + \c@footnote + } + \cs_set:Npn \@makefnmark + { + \rlap + { + \@textsuperscript { \normalfont \@thefnmark } + } + } + \cs_set:Npn \@makefntext ##1 + { + \parindent 1em + \noindent + \hbox_to_wd:nn + { 1.8em } + { + \hss + \@textsuperscript { \normalfont \@thefnmark } + } + ##1 + } + \legacy_if:nTF { @twocolumn } + { + \if_int_compare:w \col@number = \@ne + \@maketitle + \else: + \twocolumn [ \@maketitle ] + \fi: + } + { + \newpage + \global\@topnum\z@ + \@maketitle + } + \thispagestyle{empty} + \@thanks + \group_end: + \setcounter{footnote}{0} + \cs_set:Npn \thanks ##1 { } + % NOTE: we don't erase the definitions of \@title, etc. + } + % }}} \@maketitle and \maketitle + } % }}} + +\bool_if:NT \g__mn_kindle_bool % {{{ + { + \keys_set:nn { mn__main } + { + generate~thanks = false , + } + \skip_gset:Nn \g__mn_maketitle_after_title { 0em } + \skip_gset:Nn \g__mn_maketitle_after_author { 0em } + \skip_gset:Nn \g__mn_maketitle_after { 0em } + \@ifclassloaded { memoir } + { + \pagestyle { empty } + + \setstocksize{12.2cm}{9cm} + \settrimmedsize{12.2cm}{9cm}{*} + \settypeblocksize{12.2cm}{9cm}{*} + + \setlrmargins{0cm}{*}{*} + \setulmargins{0cm}{*}{*} + + \setlength{\headheight}{0cm} + \setlength{\headsep}{0cm} + \setlength{\footskip}{0cm} + + \checkandfixthelayout + } + { + \msg_error:nnx + { mathnotes } + { requires memoir class } + { kindle } + } + } % }}} + +% e.g. `\exp:w \mn__color:n { MNnotetitle }` +\cs_set:Npn \mn__color:n #1 % {{{ + { + \bool_if:NTF \g__mn_xcolor_bool + { + \exp_end: + \color{#1} + } + { + \exp_end: + } + } % }}} + +\bool_if:NT \g__mn_theorems_bool % {{{ mdtheorem setup + { + \RequirePackage[thmmarks, amsmath, amsthm]{ntheorem} + + \RequirePackage{mdframed} + + \mdfdefinestyle { theorem } + { + linewidth = 1.5pt , + } + + \bool_if:NT \g__mn_xcolor_bool + { + \mdfapptodefinestyle { theorem } + { + frametitlefont = \normalfont\bfseries\color{MNthmtitle} , + linecolor = MNthmline , + backgroundcolor = MNthmbg , + } + } + + \mdfdefinestyle { minor-theorem } + { + style = theorem , + linewidth = 0.75pt , + } + + \mdfdefinestyle { example } + { + theoremtitlefont = \normalfont , + } + + \bool_if:NT \g__mn_xcolor_bool + { + \mdfapptodefinestyle { example } + { + frametitlefont = \normalfont\bfseries\color{MNextitle} , + linecolor = MNexline , + backgroundcolor = MNexbg , + } + } + + \mdfdefinestyle { definition } + { + } + + \bool_if:NT \g__mn_xcolor_bool + { + \mdfapptodefinestyle { definition } + { + frametitlefont = \normalfont\bfseries\color{MNdefntitle} , + linecolor = MNdefnline , + backgroundcolor = MNdefnbg , + } + } + + \mdfdefinestyle { note } + { + topline = false , + rightline = false , + bottomline = false , + linewidth = 2pt , + } + + \bool_if:NT \g__mn_xcolor_bool + { + \mdfapptodefinestyle { note } + { + frametitlefont = \normalfont\bfseries\color{MNnotetitle} , + linecolor = MNnoteline , + backgroundcolor = MNnotebg , + } + } + + \mdfdefinestyle { example } + { + theoremtitlefont = \normalfont , + } + + \bool_if:NT \g__mn_xcolor_bool + { + \mdfapptodefinestyle { example } + { + frametitlefont = \normalfont\bfseries\color{MNextitle} , + linecolor = MNexline , + backgroundcolor = MNexbg , + } + } + + \mdtheorem + [ style = theorem ] + { thm } + { Theorem } + % \newtheorem{shortthm}[thm]{Theorem} + \mdtheorem + [ style = minor-theorem ] + { lem } + { Lemma } + \mdtheorem + [ style = minor-theorem ] + { cor } + { Corollary } + \mdtheorem + [ style = minor-theorem ] + { prop } + { Proposition } + + % \theoremstyle{definition} + \mdtheorem + [ style = definition ] + { defn } + { Definition } + \mdtheorem + [ style = definition ] + { notation } + { Notation } + + % \theoremstyle{remark} + \mdtheorem + [ style = example ] + { ex } + { Example } + + \skip_new:N \mn__note_title_after_skip + \skip_set:Nn \mn__note_title_after_skip { 1em plus 0.25em minus 0.75em } + \cs_set:Npn \mn__note_title:n #1 + { + \textbf + { + \exp:w \mn__color:n { MNnotetitle } + #1 + } + \skip_horizontal:N \mn__note_title_after_skip + } + + \newmdenv + [ + style = note , + startinnercode = \mn__note_title:n { Note: } , + ] + { note } + + \newmdenv + [ + style = note , + startinnercode = \mn__note_title:n { Remark: } , + ] + { remark } + + \newmdenv + [ + style = note , + startinnercode = \mn__note_title:n { Hint: } , + ] + { hint } + + \newmdenv + [ + style = note , + startinnercode = \mn__note_title:n { Abuse of notation: } , + ] + { abuse-of-notation } + + % % reset for future defn.s + % \theoremstyle{plain} + } % }}} + +\NewDocumentCommand \TODO { o } % {{{ + { + \framebox + { + \textbf{ TODO \IfValueT { #1 } { :~} } + \IfValueT { #1 } { #1 } + } + } % }}} + +% \bool_if:NT \g__mn_titles_bool % {{{ + % { + % \RequirePackage{titlesec} + % % \titleformat { \command } [ shape ] { format } { label } { sep } { before-code } [ after-code ] + % % before-code can be a command + % \titleformat { \chapter } + % [ block ] + % { \bfseries \HUGE } + % { { \exp:w \mn__color:n {MNsecnum} \thechapter} } + % { 20pt } + % { } + % [ ] + + % \titleformat { \section } + % [ hang ] + % { \bfseries \LARGE } + % { { \exp:w \mn__color:n {MNsecnum} \thesection} } + % { 16pt } + % { } + % [ ] + + % \titleformat { \subsection } + % [ hang ] + % { \bfseries \Large } + % { { \exp:w \mn__color:n {MNsecnum} \thesubsection} } + % { 16pt } + % { } + % [ ] + + % % \titlespacing* { \command } { left } { before } { after } [ right ] + % \titlespacing* { \chapter } { 0em } { 0em } { 2em } [ 0em ] + % \titlespacing* { \section } { 0em } { 2em } { 0.5em } [ 0em ] + % \titlespacing* { \subsection } { 0em } { 1em } { 0em } [ 0em ] + % \titlespacing* { \subsubsection } { 0em } { 1em } { 0em } [ 0em ] + % } % }}} + +\bool_if:NT \g__mn_xcolor_bool % {{{ + { + \RequirePackage[hidelinks]{hyperref} + \hypersetup + { + colorlinks = true , + allcolors = MNlink , + } + } % }}} + +\bool_if:NT \g__mn_index_bool + { + \bool_set_true:N \g__mn_knowledge_bool + } + +\bool_if:NTF \g__mn_knowledge_bool % {{{ + { + \bool_if:NT \g__mn_xcolor_bool + { + \PassOptionsToPackage{xcolor}{knowledge} + \providecolorset { HTML } + % Prefix/postfix of all color names + { } { } + { + \use_none:n + ; MNunknown , DE0B0F + ; MNunknowncont , AD483E + ; MNintro , 051338 + } + } + \RequirePackage[quotation, notion, makeidx]{knowledge} + + % Disable the redefined \label command; this fixes some documents. + \KnowledgeConfigureBooleanOption[\knowledge_configuration_label_autoscope_bool]{patch~label} + + % {{{ Patch in the automatic-AP feature + \bool_new:N \g__mn_noAP_bool + \NewDocumentCommand \noAP { } + { \bool_gset_true:N \g__mn_noAP_bool } + \cs_set:Npn \mn__maybe_AP:N #1 + { + \bool_if:NTF \g__mn_noAP_bool + { \bool_gset_false:N \g__mn_noAP_bool } + { #1 } + } + + \RequirePackage{etoolbox} + \pretocmd { \intro } + { \mn__maybe_AP:N \AP } + { } { } + + \bool_new:N \l__mn_using_itemAP + \cs_set:Npn \mn__use_itemAP: + { + \bool_if:NF \l__mn_using_itemAP + { + \let \mn__item_orig: \item + \bool_set_true:N \l__mn_using_itemAP + \RenewDocumentCommand \item { o } + { + \IfNoValueTF { ##1 } + { + \mn__item_orig: + \mn__maybe_AP:N \AP + } + { + \mn__item_orig: + [ + \mn__maybe_AP:N \knowledge_itemAP: + % NOTE: this isn't expandable, which fucks up + % everything. + \cs_set_eq:NN \AP \prg_do_nothing: + ##1 + ] + } + } + } + } + \apptocmd { \enumerate } { \mn__use_itemAP: } { } { } + \apptocmd { \itemize } { \mn__use_itemAP: } { } { } + \apptocmd { \description } { \mn__use_itemAP: } { } { } + % }}} + + % {{{ Make some better styles. + \knowledgeconfigure + { + visible~anchor~points = false + } + \cs_set:Npn \mn__knowledgestyles:nn #1#2 + { + \clist_map_inline:nn { #1 } + { \knowledgestyle* { ##1 } { #2 } } + } + % List of default styles + % notion, intro notion + % intro, intro unknown, intro unknown cont + % kl unknown, kl unknown cont + \bool_if:NTF \g__mn_xcolor_bool + { + \mn__knowledgestyles:nn + { notion , intro~notion } + { + color = MNlink , + } + \mn__knowledgestyles:nn + { intro , intro~notion , intro~unknown, intro~unknown~cont , } + { + boldface , + color = MNintro , + } + \mn__knowledgestyles:nn + { intro~unknown , intro~unknown~cont , kl~unknown , kl~unknown~cont , } + { + underline = false , + color = MNunknown , + } + \mn__knowledgestyles:nn + { intro~unknown~cont , kl~unknown~cont , } + { + color = MNunknowncont , + } + } + { + % These blank definitions are important for erasing some very poorly + % typeset decisions. + \mn__knowledgestyles:nn + { notion , intro~notion } + { + } + \mn__knowledgestyles:nn + { intro , intro~notion , intro~unknown, intro~unknown~cont , } + { + boldface , + } + \mn__knowledgestyles:nn + { intro~unknown , intro~unknown~cont , kl~unknown , kl~unknown~cont , } + { + } + \mn__knowledgestyles:nn + { intro~unknown~cont , kl~unknown~cont , } + { + } + } + % }}} + } + { + % If we don't load the knowledge package, provide a *similar* interface + % to make writing commands that *optionally* use the knowledge interface + % easier. + \ProvideDocumentCommand \itemAP { O{} } { \item[#1] } + \ProvideDocumentCommand \AP { } { } + \ProvideDocumentCommand \phantomintro { d() m } { } + \ProvideDocumentCommand \nointro { m } { } + \ProvideDocumentCommand \reintro { s o m } { #3 } + \ProvideDocumentCommand \intro { d() o d() m } { #4 } + \ProvideDocumentCommand \kl { d() o d() m } { #4 } + } % }}} + +\bool_if:NT \g__mn_index_bool + { + \makeindex + } + +% The \emailstyle command gives the style of an email; by default, we +% initialize it to \texttt. +\ProvideDocumentCommand \emailstyle { m } { \texttt{#1} } +% The \email command typesets an email; if the user has loaded the +% hyperref package, we can add a link as well. +\mn__if_package_loaded:nTF { hyperref } % {{{ + { + \ProvideDocumentCommand \email { m } + { \href{mailto:#1}{\emailstyle{#1}} } + } + { + \ProvideDocumentCommand \email { m } + { \emailstyle{#1} } + } % }}} + +\bool_if:NT \g__mn_tabu_bool % {{{ + { + \RequirePackage{multirow} + \RequirePackage{booktabs} + \RequirePackage{longtable} + \RequirePackage{tabu} + \ProvideExpandableDocumentCommand \Th { O{l} m } + { + \multicolumn + { 1 } % For 1 column... + { #1 } % ...with column-spec #1... + { \textbf{#2} } % Typeset #2 in bold. + } + } % }}} + +\bool_if:NT \g__mn_figures_bool % {{{ + { + % figure captions + \RequirePackage{graphicx} + \RequirePackage{caption} + \captionsetup + { + format = hang, + font = { sf, footnotesize }, + margin = 1in + } + } % }}} + +% {{{ Footnotes +\bool_if:NT \g__mn_footnotes_bool + { + \PassOptionsToPackage{bottom, hang}{footmisc} + \RequirePackage{footmisc} + } +\setlength { \footnotesep } { \baselineskip } +% }}} + +% Document style. +\setlength { \parindent } { 0em } +\setlength { \parskip } { 1em } +% {{{ Set \parskip=0 around \tableofcontents +\RequirePackage{etoolbox} +\pretocmd { \tableofcontents } + { + \group_begin: + \setlength{\parskip}{0pt} + } + { } { } +\apptocmd { \tableofcontents } + { \group_end: } + { } { } +% }}} + +% This has to be hooked so that it doesn't break the other bools undefined +% with it first. +\AtEndOfPackage { \cs_undefine:N \mn__legacy_bool_undefine:n } -- cgit v1.2.3