From 61c4c1776a667a4952e8f9817d545c55e50b8009 Mon Sep 17 00:00:00 2001
From: Frank Fuhlbrück
Date: Fri, 7 Jan 2022 17:23:31 +0100
Subject: exsh v0.9: beamercomp.,better todo,points=sum

---
 exercisesheets.sty | 114 ++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 105 insertions(+), 9 deletions(-)

(limited to 'exercisesheets.sty')

diff --git a/exercisesheets.sty b/exercisesheets.sty
index c066a94..6af4ca1 100644
--- a/exercisesheets.sty
+++ b/exercisesheets.sty
@@ -18,8 +18,8 @@
 %\NeedsTeXFormat{LaTeX2e}[1994/12/01]
 
 % don't forget to update the version and date in exercisesheets.tex
-\def\exsh@version{0.8}
-\def\exsh@date{2021/10/06}
+\def\exsh@version{0.9}
+\def\exsh@date{2021/12/07}
 
 \ProvidesPackage{exercisesheets}[\exsh@date\space\exsh@version\space Typesetting of exercise sheets]
 \message{`Typesetting of exercise sheets' \exsh@version\space <\exsh@date>}
@@ -56,7 +56,40 @@
 \newif\ifexsh@pointsfloatright
 \newif\ifexsh@bonus
 \newif\ifexsh@abbrev
+\newif\ifexsh@sumuppoints
 \newif\ifexsh@filenameasexercisename
+\newif\ifexsh@showtodos
+\newif\ifexsh@beamercompatdone
+
+\def\exsh@beamercompatibility{
+\ifexsh@beamercompatdone
+  \PackageError{exercisesheets}{
+    beamercompatibility used twice}{}%
+\else
+  \let\pause\relax
+  \def\frame{}
+  \renewcommand{\frame}[1][]{}
+  \let\endframe\relax
+  \def\onslide<##1>{}
+  \def\only<##1>{}
+  \def\uncover<##1>{}
+  \def\visible<##1>{}
+  \def\invisible<##1>{}
+  \long\def\alt<##1>##2##3{##2}
+  \long\def\temporal<##1>##2##3##4{##3}
+  \def\uncover<##1>{}
+  \let\exsh@origitem\item
+  \def\exsh@ovrlitem<##1>{\exsh@origitem}
+  \def\item{\@ifnextchar<\exsh@ovrlitem\exsh@origitem}
+  \let\exsh@origitemize\itemize
+  \def\exsh@ovrlitemize[##1]{\exsh@origitemize}
+  \def\itemize{\@ifnextchar[\exsh@ovrlitemize\exsh@origitemize}
+  \let\exsh@origenumerate\enumerate
+  \def\exsh@ovrlenumerate[##1]{\exsh@origenumerate}
+  \def\enumerate{\@ifnextchar[\exsh@ovrlenumerate\exsh@origenumerate}
+  \exsh@beamercompatdonetrue
+\fi
+}
 
 \pgfkeys{/exsh/.is family,/exsh,
   solutions/.is choice,
@@ -84,6 +117,8 @@
   inplace/.default=true,
   sample/.is if=exsh@sample,
   sample/.default=true,
+  showtodos/.is if=exsh@showtodos,
+  showtodos/.default=true,
   filenameasexercisename/.is if=exsh@filenameasexercisename,
   filenameasexercisename/.default=true,
   pointsfloatright/.is if=exsh@pointsfloatright,
@@ -100,6 +135,9 @@
   framed/.default={ignore},
   framed/.initial={ignore},
   framed/.code={\let\newframe\relax},
+  beamercompatibility/.default={ignore},
+  beamercompatibility/.initial={ignore},
+  beamercompatibility/.code={\exsh@beamercompatibility},
 }
 
 % store title data for sheet headers
@@ -175,6 +213,9 @@
   exercisemark/.initial={},
   difficult/.style={/exsh/exercisemark=*},difficult/.value forbidden,
   custom skip macro/.initial=\exsh@skipcustomstuff,
+  showtodos/.initial={false},
+  hidetodos/.style={/exsh/showtodos=false},
+  hidetodos/.value forbidden,
   %
   % translatable strings
   strings/sheet/.initial={},
@@ -657,11 +698,43 @@
 %Do nout use \let here as \label may change before its use
 \def\exsh@autolabel{\label}
 
+\newcounter{exsh@pts@cur}
+\newcounter{exsh@ptsbonus@cur}
 \newenvironment*{exercise}[1][]{%
   % TODO: \edef is not safe with luatex and umlauts, only fixed for "oral" for now
   % TODO: check whether the TODO above is still relevant
   %\edef seams to work fine with lualatex from TeXLive 2020
   \pgfkeys{exsh,every exercise,#1,includeoverride}%
+  \ifthenelse{\equal{sum}{\pgfkeysvalueof{/exsh/points}}}{%
+    \ifcsname exsh@sumpts@\the\numexpr\arabic{section}+1\endcsname
+      \edef\exsh@sumpts{%
+        \csname exsh@sumpts@\the\numexpr\arabic{section}+1%
+        \endcsname%
+      }%
+      \edef\exsh@sumptsbonus{%
+        \csname exsh@sumptsbonus@\the\numexpr\arabic{section}+1%
+        \endcsname%
+      }%
+      \ifnumequal{\exsh@sumpts}{0}{%
+        \ifnumequal{\exsh@sumptsbonus}{0}{}{%
+          \edef\exsh@sumpts{\exsh@sumptsbonus}%
+          \exshset{bonus}%
+        }%
+      }{%
+        \ifnumequal{\exsh@sumptsbonus}{0}{}{%
+          \edef\exsh@sumpts{\exsh@sumpts+\exsh@sumptsbonus}%
+        }%
+      }%
+    \else%
+      \def\exsh@sumpts{??}%
+    \fi%
+    \exshset{points/.expanded={\exsh@sumpts}}
+    \setcounter{exsh@pts@cur}{0}
+    \setcounter{exsh@ptsbonus@cur}{0}
+    \exsh@sumuppointstrue%
+  }{%
+    \exsh@sumuppointsfalse%
+  }%
   \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/points}}}{%
     \def\exsh@points{}%
     \def\exsh@shortpoints{}%
@@ -745,7 +818,21 @@
     % with a new \par. Make sure that a \label does not mess up the layout.
     \@ifnextchar\label{\exsh@label}{\leavevmode\ignorespaces}%
   }%
-}{}
+}{%
+  %before writing point sums check that we actually computed them
+  \ifexsh@sumuppoints%
+    \immediate\write\@auxout{
+      \string\expandafter\gdef%
+      \detokenize{\csname} exsh@sumpts@\arabic{section}\endcsname{%
+        \arabic{exsh@pts@cur}%
+      }%
+      \string\expandafter\gdef%
+      \detokenize{\csname} exsh@sumptsbonus@\arabic{section}\endcsname{%
+        \arabic{exsh@ptsbonus@cur}%
+      }%
+    }
+  \fi
+}
 \newcommand{\exsh@label}[2]{#1{#2}\leavevmode\ignorespaces}
 \newcommand{\exsh@startsection}[2][]{%
   \@startsection{section}{1}{\z@}%
@@ -925,7 +1012,14 @@
             \exsh@subexpoints{#2~\pgfkeysvalueof{/exsh/strings/points}\exsh@tmp}%
           \fi%
         }%
-      \fi
+      \fi%
+      \ifexsh@sumuppoints%
+        \ifexsh@bonus%
+          \addtocounter{exsh@ptsbonus@cur}{#2}
+        \else%
+          \addtocounter{exsh@pts@cur}{#2}
+        \fi%
+      \fi%
     }%
   }%
   \egroup
@@ -986,11 +1080,13 @@
    \fi%
 }
 
-\newcommand{\TODO}{%
-  \ifmmode
-    ${\pgfkeysvalueof{/exsh/todo marker font}TODO}$%
-  \else
-    {\pgfkeysvalueof{/exsh/todo marker font}TODO}%
+\newcommand{\TODO}[1][]{%
+  \ifexsh@showtodos
+    \ifmmode
+      \text{\pgfkeysvalueof{/exsh/todo marker font}TODO #1}%
+    \else
+      {\pgfkeysvalueof{/exsh/todo marker font}TODO #1}%
+    \fi
   \fi
   \PackageWarning{exercisesheets}{TODO marker found}%
 }
-- 
cgit v1.2.3

