diff options
Diffstat (limited to 'macros/latex/contrib/homework/homework.cls')
-rw-r--r-- | macros/latex/contrib/homework/homework.cls | 180 |
1 files changed, 142 insertions, 38 deletions
diff --git a/macros/latex/contrib/homework/homework.cls b/macros/latex/contrib/homework/homework.cls index eabf109563..3af754dd25 100644 --- a/macros/latex/contrib/homework/homework.cls +++ b/macros/latex/contrib/homework/homework.cls @@ -12,22 +12,38 @@ \NeedsTeXFormat{LaTeX2e}[2022-06-01] \ProvidesExplClass {homework} - {2023/09/28} {} + {2023/09/30} {} {Document class for writing homework} \keys_define:nn { homework } { - , logo .tl_set:N = \l__homework_logo_name_tl - , logo .initial:n = { } - , logo-height .dim_set:N = \l__homework_logo_height_dim - , logo~height .dim_set:N = \l__homework_logo_height_dim - , logo height .dim_set:N = \l__homework_logo_height_dim + , logo .tl_set:N = \l__homework_logo_name_tl + , logo .initial:n = { } + , logo-height .dim_set:N = \l__homework_logo_height_dim + , logo~height .dim_set:N = \l__homework_logo_height_dim + , logo height .dim_set:N = \l__homework_logo_height_dim + , logo-width .dim_set:N = \l__homework_logo_width_dim + , logo~width .dim_set:N = \l__homework_logo_width_dim + , logo width .dim_set:N = \l__homework_logo_width_dim - , unknown .code:n = { - \PassOptionsToClass { \CurrentOption } { minimart } - \PassOptionsToClass { \CurrentOption } { einfart } - \PassOptionsToPackage { \CurrentOption } { ProjLib } - } + , formal-title .bool_set:N = \l__homework_formal_title_bool + , formal-title .initial:n = { false } + , formal~title .bool_set:N = \l__homework_formal_title_bool + , formal title .bool_set:N = \l__homework_formal_title_bool + + , hide-solution .bool_set:N = \l__homework_hide_solution_bool + , hide-solution .initial:n = { false } + , hide~solution .bool_set:N = \l__homework_hide_solution_bool + , hide solution .bool_set:N = \l__homework_hide_solution_bool + , hide-answer .bool_set:N = \l__homework_hide_solution_bool + , hide~answer .bool_set:N = \l__homework_hide_solution_bool + , hide answer .bool_set:N = \l__homework_hide_solution_bool + + , unknown .code:n = { + \PassOptionsToClass { \CurrentOption } { minimart } + \PassOptionsToClass { \CurrentOption } { einfart } + \PassOptionsToPackage { \CurrentOption } { ProjLib } + } } \ProcessKeyOptions [ homework ] @@ -37,43 +53,100 @@ \sys_if_engine_pdftex:TF { - \PassOptionsToClass { use style = classical } { minimart } + \PassOptionsToClass { use indent = false, theorem with qed } { minimart } \LoadClass { minimart } } { - \PassOptionsToClass { use style = classical } { einfart } + \PassOptionsToClass { use indent = false, theorem with qed } { einfart } \LoadClass { einfart } } \RequirePackage { ProjLib } %%================================ -%% Insert the logo +%% Print the title %%================================ -\cs_new_protected:Nn \homework_include_logo:nn - % #1 = height - % #2 = name +\newcommand\@pretitle{} + +\NewDocumentCommand \pretitle { +m } { - \includegraphics [ height = #1 ] { #2 } + \renewcommand{\@pretitle}{#1} } -\AddToHook { begindocument/end } +\renewcommand{\@maketitle} { - \maketitle + \LocallyStopLineNumbers + + % Insert the pretitle + \noindent{\@pretitle}\par - \tl_if_empty:NF \l__homework_logo_name_tl + \bool_if:NTF \l__homework_formal_title_bool + { + \bigskip + \begin{center} + \let\footnote\thanks + {\minimalist_bfseries:\minimalist_sffamily:\minimalist_scshape:\Large\@title}\\\bigskip + \color{main-text!80!paper} + {\small\@author} + \par\smallskip\vspace{-\parskip} + {\small\@date} + \end{center} + \projlib_author_if_content_empty:nT { \@date } { \medskip } + \medskip\par + } { - \dim_compare:nNnT { \l__homework_logo_height_dim } < { 1pt } - { - \dim_set:Nn \l__homework_logo_height_dim { .6\pagetotal } - } - \dim_set:Nn \l_tmpa_dim { \pagetotal + .33\baselineskip } - \vspace { - \l_tmpa_dim } - \vspace { .5\l_tmpa_dim - .5\l__homework_logo_height_dim } - \homework_include_logo:nn { \l__homework_logo_height_dim } { \l__homework_logo_name_tl } - \vspace { .5\l_tmpa_dim - .5\l__homework_logo_height_dim } + \begin{tcolorbox}[ + enhanced~jigsaw, sharp~corners, + sidebyside, + % sidebyside~adapt=left, + lefthand~width = .33\linewidth, + lower~separated = false, + toprule = .75pt, bottomrule = .75pt, + leftrule = 0pt, rightrule = 0pt, + boxsep = 0pt, + top = 1.5ex, bottom = 1.5ex, + left = 0pt, right = 0pt, + colframe = main-text!27!paper, + colback = paper, + ] + \tl_if_empty:NF \l__homework_logo_name_tl + { + \dim_compare:nNnTF { \l__homework_logo_height_dim } < { 1pt } + {% height not given + \dim_compare:nNnTF { \l__homework_logo_width_dim } < { 1pt } + {% width not given + \includegraphics [ height = 1.5cm ] { \l__homework_logo_name_tl } + } + {% width given + \includegraphics [ width = \l__homework_logo_width_dim ] { \l__homework_logo_name_tl } + } + } + {% height given + \includegraphics [ height = \l__homework_logo_height_dim ] { \l__homework_logo_name_tl } + } + } + \tcblower + \begin{flushright} + \let\footnote\thanks + {\minimalist_bfseries:\minimalist_sffamily:\@title}\\\medskip + \color{main-text!80!paper} + {\small\minimalist_scshape:\@author} + \par\vspace{-\parskip}\vspace{2pt} + {\small\@date} + \end{flushright} + \vspace{-2pt} + \end{tcolorbox} + \vspace{\baselineskip} } + + \par + \ResumeLineNumbers + } + +\AddToHook { begindocument/end } + { + \maketitle } %%================================ @@ -143,15 +216,17 @@ \newcommand\soluline{\bgroup\markoverwith{\rule[-.45ex]{1pt}{.75pt}}\ULon} \NewDocumentEnvironment { solution } { O{ \l__homework_solution_tl } } { - \par\noindent + \par + \topsep0\p@\relax + \trivlist \color{cyan!50!blue!90!main-text} - \soluline{#1}\nobreakspace\nobreakspace + \item[\hskip\labelsep\soluline{#1}\nobreakspace\nobreakspace] \let\qedsymbol\customqedsymbol + \ignorespaces } { \pushQED{\qed} - \popQED - \par + \popQED\endtrivlist\@endpefalse } \NewDocumentEnvironment { answer } { O{ \l__homework_answer_tl } } @@ -171,12 +246,41 @@ \SetTheorem { definition, lemma, theorem, proposition, corollary, example, fact, remark, assertion, assumption, claim, conclusion, conjecture, construction, convention, notation, observation, property, recall } { number within = homework } %%================================ -%% Special cases for the QED +%% Hide solution %%================================ -\def\noQED{\let\popQED\relax} -\let\noqed\noQED -\def\proofless{\let\qedsymbol\customqedsymbol\let\simpleqedsymbol\customqedsymbol} +\RequirePackage { verbatim } + +\bool_if:NT \l__homework_hide_solution_bool + { + \let\solution=\comment + \let\endsolution=\endcomment + \let\answer=\comment + \let\endanswer=\endcomment + } + +\prg_new_conditional:Nnn \homework_if_solution_shown: { T, F, TF } + { + \bool_if:NTF \l__homework_hide_solution_bool + { \prg_return_false: } + { \prg_return_true: } + } +\NewCommandCopy \IfSolutionT \homework_if_solution_shown:T +\NewCommandCopy \IfSolutionF \homework_if_solution_shown:F +\NewCommandCopy \IfSolutionTF \homework_if_solution_shown:TF +\NewCommandCopy \IfAnswerT \homework_if_solution_shown:T +\NewCommandCopy \IfAnswerF \homework_if_solution_shown:F +\NewCommandCopy \IfAnswerTF \homework_if_solution_shown:TF + +\bool_if:NTF \l__homework_hide_solution_bool + { + \setlist*[1]{itemsep=0\baselineskip, parsep=\parskip} + \setlist*[2]{itemsep=0\baselineskip, parsep=\parskip} + } + { + \setlist*[1]{itemsep=.5\baselineskip, parsep=\parskip} + \setlist*[2]{itemsep=.3\baselineskip, parsep=\parskip} + } \endinput %% |