summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/homework/homework.cls
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/homework/homework.cls')
-rw-r--r--macros/latex/contrib/homework/homework.cls180
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
%%