From 9806c5dedd8a61daf666d35bc666c23321a359b3 Mon Sep 17 00:00:00 2001
From: Frank Fuhlbrück
Date: Wed, 26 Jan 2022 19:20:16 +0100
Subject: starterd merging beamer and normal version

---
 exercisesheets.sty | 203 +++++++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 181 insertions(+), 22 deletions(-)

(limited to 'exercisesheets.sty')

diff --git a/exercisesheets.sty b/exercisesheets.sty
index 29c2728..cad2a20 100644
--- a/exercisesheets.sty
+++ b/exercisesheets.sty
@@ -45,6 +45,9 @@
 
 % configuration keys
 
+\newif\ifexsh@beamer
+\@ifclassloaded{beamer}{\exsh@beamertrue}{}
+
 \newif\ifexsh@patchenumerate\exsh@patchenumeratetrue
 \newif\ifexsh@savetasks
 \newif\ifexsh@solutions
@@ -53,6 +56,16 @@
 \newif\ifexsh@samplesolutions
 \newif\ifexsh@exnumsheet
 \newif\ifexsh@forcesample %force printing sample sol. of wrong type
+%For beamer only
+\ifexsh@beamer
+\newif\ifexsh@beamerwithheadline
+\newif\ifexsh@beameruseblocks
+\newif\ifexsh@defersolutiontitle
+\newif\ifexsh@framed
+\fi
+%Also only true for beamer, but we want to use it elsewhere
+\newif\ifexsh@beamersolution
+%%
 \newif\ifexsh@gradingguides
 \newif\ifexsh@inplace
 \newif\ifexsh@sample
@@ -69,6 +82,10 @@
 \ifexsh@beamercompatdone
   \PackageError{exercisesheets}{
     beamercompatibility used twice}{}%
+\else
+\ifexsh@beamer
+  %currently we do nothing if beamer is loaded, 
+  %but this might change
 \else
   %TODO:\only<>{A} -> {A} which breaks global effects of A
   \let\pause\relax
@@ -92,6 +109,7 @@
   \let\exsh@origenumerate\enumerate
   \def\exsh@ovrlenumerate[##1]{\exsh@origenumerate}
   \def\enumerate{\@ifnextchar[\exsh@ovrlenumerate\exsh@origenumerate}
+\fi
   \exsh@beamercompatdonetrue
 \fi
 }
@@ -136,7 +154,30 @@
   pointsfloatright/.default=true,
   abbrev/.is if=exsh@abbrev,
   abbrev/.default=true,
-  %options from exercisesheets-beamer are ignored
+  beamercompatibility/.default={ignore},
+  beamercompatibility/.initial={ignore},
+  beamercompatibility/.code={\exsh@beamercompatibility}
+}
+\ifexsh@beamer
+\pgfkeys{exsh,
+  beamerwithheadline/.is if=exsh@beamerwithheadline,
+  beamerwithheadline/.default=true,
+  beameruseblocks/.is if=exsh@beameruseblocks,
+  beameruseblocks/.default=true,
+  beamersolution/.is if=exsh@beamersolution,
+  beamersolution/.default=true,
+  defersolutiontitle/.is if=exsh@defersolutiontitle,
+  defersolutiontitle/.default=true,
+  framed/.is if=exsh@framed,
+  framed/.default=true,
+  beamersolution/.initial={false},
+  beamerwithheadline/.initial={false},
+  beameruseblocks/.initial={false},
+  defersolutiontitle/.initial={false},
+  framed/.initial={false},
+}
+\else
+\pgfkeys{exsh,
   beamerwithheadline/.default={ignore},
   beamerwithheadline/.initial={ignore},
   beamersolution/.default={ignore},
@@ -146,16 +187,16 @@
   framed/.default={ignore},
   framed/.initial={ignore},
   framed/.code={\let\newframe\relax},
-  beamercompatibility/.default={ignore},
-  beamercompatibility/.initial={ignore},
-  beamercompatibility/.code={\exsh@beamercompatibility},
 }
+\fi
 
 % store title data for sheet headers
 \ifundef\subject{% \subject is only provided by KOMA classes
   \newcommand{\subject}[1]{}%
   \def\@subject{}%
 }{}
+% beamer has subject, but not \@subject:
+\providecommand{\@subject}{}
 \apptocmd{\subject}{\pgfkeys{/exsh/subject={#1}}}{}{}%
 \ifdefempty{\@subject}{
   \pgfkeys{exsh,subject/.initial={\PackageWarning{exercisesheets}{No \string\subject\space given}}}
@@ -231,6 +272,13 @@
   exercisemark/.initial={},
   difficult/.style={/exsh/exercisemark=*},difficult/.value forbidden,
   savetasks/.initial=false,
+}
+%beamer specific options
+\ifexsh@beamer
+\pgfkeys{exsh,
+}
+\fi
+\pgfkeys{exsh,
   %
   % translatable strings
   strings/sheet/.initial={},
@@ -339,7 +387,7 @@
   todo marker font/.initial=\ifdef{\color}{\color{red}}{}\bfseries,
   %
   % skip values
-  below sheet headline skip/.initial={},
+  below slide headline skip/.initial={0mm},
   above sheet title skip/.initial={4ex},
   above sheet note skip/.initial={.7ex},
   above solutionsby skip/.initial={1ex},
@@ -371,6 +419,15 @@
 % allow further keys to be set
 \def\exshset#1{\pgfkeys{exsh,#1}}
 
+\ifexsh@beamer
+\define@key{beamerframe}{t}[true]{% top
+  \beamer@frametopskip=-2pt\relax%
+  \beamer@framebottomskip=0pt plus 1fill\relax%
+  \beamer@frametopskipautobreak=\beamer@frametopskip\relax%
+  \beamer@framebottomskipautobreak=\beamer@framebottomskip\relax%
+}
+\fi
+
 % automatic language selection
 \AfterEndPreamble{%
   \exsh@provideonlytrue
@@ -577,6 +634,11 @@
 \listadd{\exsh@nonenums}{asparablank}
 \listadd{\exsh@nonenums}{inparablank}
 \listadd{\exsh@nonenums}{list}
+\ifexsh@beamer
+  \let\exsh@hyper@itemtrue\relax
+\else
+  \def\exsh@hyper@itemtrue{\@hyper@itemtrue}
+\fi
 \long\def\exsh@skipstuff#1{%
   \ifstrequal{#1}{\begin}{\exsh@skipstuff@begin}{%
     \ifstrequal{#1}{\end}{\exsh@skipstuff@end}{%
@@ -585,7 +647,7 @@
         \ifstrequal{#1}{\input}{\exsh@skipstuff@input}{%
           \ifstrequal{#1}{\exsh@skipstuff@endfile}{\currfile@pop\exsh@skipstuff}{%
             \ifstrequal{#1}{\setcounter}{\expandafter\exsh@skipstuff\setcounter}{%
-              \ifstrequal{#1}{\item}{\ifdef{\@enumctr}{\@hyper@itemtrue\refstepcounter{\@enumctr}}{}}{}%
+              \ifstrequal{#1}{\item}{\ifdef{\@enumctr}{\exsh@hyper@itemtrue\refstepcounter{\@enumctr}}{}}{}%
               \pgfkeysvalueof{/exsh/custom skip macro}{#1}}}}}}}}%
 }
 \let\exshskipcontinue\exsh@skipstuff
@@ -666,6 +728,50 @@
 \exsh@skipstuff
 }
 
+\ifexsh@beamer
+\def\exsh@sheethead{%
+  \pgfkeysgetvalue{/exsh/title}{\exsh@tmp}%
+  \ifexsh@solutions
+    \expandafter\edef\expandafter\exsh@tmp{\expandonce\exsh@tmp:\noexpand~\pgfkeysvalueof{/exsh/strings/solutions}}%
+  \fi
+  \refstepcounter{part}%
+  \begin{frame}
+  \begin{block}{}
+    \centering\Large\exsh@tmp
+  \end{block}
+    \begingroup
+      \pgfkeysvalueof{/exsh/sheet header font}%
+      \ifexsh@solutions%
+        \ifdefvoid{\exsh@solutionsby}{}{%
+          \begingroup
+            \begin{block}{}
+              \pgfkeysvalueof{/exsh/solutionsby font}%
+              \vskip\pgfkeysvalueof{/exsh/above solutionsby skip}%
+              \relax%
+              \pgfkeysvalueof{/exsh/strings/solutionsby}%
+              ~\exsh@solutionsby\\\unskip%
+            \end{block}%
+          \endgroup
+        }%
+      \else
+      \fi
+      \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/note}}}{%
+      }{%
+        \ifbool{exsh@samplesolutions}{}{%
+          \begingroup
+            \begin{block}{}
+              \pgfkeysvalueof{/exsh/sheet note font}%
+              \vskip\pgfkeysvalueof{/exsh/above sheet note skip}\relax
+              \pgfkeysvalueof{/exsh/note}\\\unskip%
+            \end{block}%
+          \endgroup
+        }%
+      }%
+    \endgroup
+%   \stepcounter{page}%
+  \end{frame}
+}
+\else
 \def\exsh@sheethead{%
   \pgfkeysgetvalue{/exsh/title}{\exsh@tmp}%
   \ifexsh@solutions
@@ -712,6 +818,7 @@
   \vskip\pgfkeysvalueof{/exsh/below sheet header skip}\relax
   \stepcounter{page}%
 }
+\fi
 
 \ifdef{\othersectionslevelsformat}{%
   \renewcommand{\othersectionlevelsformat}[1]{%
@@ -855,10 +962,45 @@
       \detokenize{\csname} exsh@sumptsbonus@\arabic{section}\endcsname{%
         \arabic{exsh@ptsbonus@cur}%
       }%
-    }
+    }%
   \fi
+  \ifexsh@beamer\clearpage\fi
 }
 \newcommand{\exsh@label}[2]{#1{#2}\leavevmode\ignorespaces}
+
+\ifexsh@beamer
+\newcommand{\exsh@startsection}[2][]{%
+   \newpage
+%   \begin{block}{}
+%   \pgfkeysvalueof{/exsh/exercise title font}{#2}%
+%   \end{block}
+  \ifbool{exsh@beameruseblocks}{%
+    \begingroup
+    \usebeamercolor{block title}
+    \setbeamercolor{block body}{bg=bg,fg=fg}
+    \block{}{\pgfkeysvalueof{/exsh/exercise title font}{#2}}%
+      \endblock
+    \endgroup
+  }{
+    \begin{beamercolorbox}[rounded=true,wd={\textwidth}]%
+      {block title}
+      \pgfkeysvalueof{/exsh/exercise title font}{#2}
+    \end{beamercolorbox}
+  }
+  \ifexsh@patchenumerate
+    \setbeamertemplate{enumerate items}{\insertenumlabel}
+    \renewcommand{\insertenumlabel}{
+      \ifnum\@enumdepth=1
+        \alph{enumi})
+      \else\ifnum\@enumdepth=2
+        \arabic{enumii}.
+      \else
+        \roman{enumiii}
+      \fi\fi
+    }
+  \fi
+}%
+\else
 \newcommand{\exsh@startsection}[2][]{%
   \@startsection{section}{1}{\z@}%
   {\pgfkeysvalueof{/exsh/above exercise skip}}%
@@ -866,6 +1008,7 @@
   {\pgfkeysvalueof{/exsh/exercise title font}}%
   [#1]{#2}%
 }%
+\fi
 
 
 \exshset{includeoverride/.style={}}
@@ -1007,7 +1150,15 @@
 }{%
   \unskip)%
 }
-\newenvironment{solution}[1][]{%
+
+
+\ifexsh@beamer
+  \let\exsh@postsolutionclear\clearpage
+\else
+  \let\exsh@postsolutionclear\par
+\fi
+\providecommand{\solution}{}
+\renewenvironment{solution}[1][]{%
   \pgfkeys{exsh,every solution,#1,solution font}%
   \ifthenelse{\equal{oral}{\pgfkeysvalueof{/exsh/points}}}{%
     \ifbool{exsh@oralsolutions}{%
@@ -1027,12 +1178,17 @@
       \let\next\exsh@startsolution
     }{}%
   }{}%
+  \ifbool{exsh@beamersolution}{%
+    \let\next\exsh@skipsolution
+  }{}%
   \next
 }{%
-  \ifthenelse{\equal{oral}{\pgfkeysvalueof{/exsh/points}}}{%
-    \ifbool{exsh@oralsolutions}{\par}{}%
-  }{%
-    \ifbool{exsh@nonoralsolutions}{\par}{}%
+  \ifbool{exsh@beamersolution}{}{%
+    \ifthenelse{\equal{oral}{\pgfkeysvalueof{/exsh/points}}}{%
+      \ifbool{exsh@oralsolutions}{\exsh@postsolutionclear}{}%
+    }{%
+      \ifbool{exsh@nonoralsolutions}{\exsh@postsolutionclear}{}%
+    }%
   }%
 }
 
@@ -1208,7 +1364,10 @@
 
 
 \ifluatex
-\usepackage{luacode}
+  \let\exsh@dlua\directlua
+\else
+  \def\exsh@dlua#1{}
+\fi
 
 %change only some catcodes to 
 \begingroup
@@ -1222,8 +1381,8 @@
 \catcode`\~=11
 \catcode`\\=11
 %% Expanded, when \catcode`\^^M=12 holds
-!global!long!def!exsh@start@Lexercise@#1\end{Lexercise}< %
-  !directlua<exsh_cur_exercise=exercise ({#1})> %
+!global!long!def!exsh@start@Lexercise#1\end{Lexercise}< %
+  !exsh@dlua<exsh_cur_exercise=exercise({#1})> %
   !endgroup!end<Lexercise>%
 >
 !endgroup
@@ -1245,14 +1404,14 @@
 \catcode`\^^I=12
 \catcode`\^^J=12\catcode`\^^M=12\catcode`\\=11\endlinechar-1}
 
-\def\exsh@start@Lexercise{%
-  \exsh@lua@catcodesBG\exsh@start@Lexercise@}
-
 \newenvironment{Lexercise}{%
-  \exsh@start@Lexercise%
+  \exsh@lua@catcodesBG\exsh@start@Lexercise%
 }{%
-  \directlua{tex.print(exsh_cur_exercise)}
+  \ifluatex
+    \exsh@dlua{exsh_texprintlines(exsh_cur_exercise)}%
+  \else
+    Lexercise needs Lua\LaTeX!
+  \fi
 }
 
-\directlua{dofile("exsh_lexercise.lua")}
-\fi
+\exsh@dlua{dofile("exsh_lexercise.lua")}
-- 
cgit v1.2.3

