From 1c2f8218dd04778c243fa873f865c75b534cc6d8 Mon Sep 17 00:00:00 2001 From: Frank Fuhlbrück Date: Fri, 28 Jan 2022 17:05:45 +0100 Subject: beamer merge completed --- examples/exercisesheets-beamer.sty | 1 - examples/exshexample.tex | 4 +- exercisesheets-beamer.sty | 1536 ------------------------------------ exercisesheets.sty | 159 +++- 4 files changed, 149 insertions(+), 1551 deletions(-) delete mode 120000 examples/exercisesheets-beamer.sty delete mode 100644 exercisesheets-beamer.sty diff --git a/examples/exercisesheets-beamer.sty b/examples/exercisesheets-beamer.sty deleted file mode 120000 index 9e58b05..0000000 --- a/examples/exercisesheets-beamer.sty +++ /dev/null @@ -1 +0,0 @@ -../exercisesheets-beamer.sty \ No newline at end of file diff --git a/examples/exshexample.tex b/examples/exshexample.tex index 5f44a02..0183847 100644 --- a/examples/exshexample.tex +++ b/examples/exshexample.tex @@ -1,4 +1,4 @@ -\long\def\ifbeamer#1#2{#2} +\long\def\ifbeamer#1#2{#1} \ifbeamer{\documentclass{beamer}}{\documentclass{article}} %navigation symbols and the title collide if @@ -10,7 +10,7 @@ %patchenumerate is the deafault \usepackage[patchenumerate=true,beamerwithheadline, beamercompatibility]% - {exercisesheets\ifbeamer{-beamer}{}} + {exercisesheets} \usepackage{varioref} \usepackage{hyperref} \usepackage{xcolor} diff --git a/exercisesheets-beamer.sty b/exercisesheets-beamer.sty deleted file mode 100644 index 990b973..0000000 --- a/exercisesheets-beamer.sty +++ /dev/null @@ -1,1536 +0,0 @@ -%% exercisesheets-beamer.sty -%% Copyright 2008-2022 Sebastian Kuhnert, Frank Fuhlbrück -% -% This work may be distributed and/or modified under the conditions -% of the LaTeX Project Public License, either version 1.3c of this -% license or (at your option) any later version. The latest version -% of this license is in https://www.latex-project.org/lppl.txt and -% version 1.3c 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 Frank Fuhlbrück. -% -% This work consists of the files listed in README. - - -%\NeedsTeXFormat{LaTeX2e}[1994/12/01] - -% don't forget to update the version and date in exercisesheets.tex -\def\exsh@version{0.10+git} -\def\exsh@date{2022/01/12} - -\ProvidesPackage{exercisesheets-beamer}[\exsh@date\space\exsh@version\space Typesetting of exercise sheets] -\message{`Typesetting of exercise sheets' \exsh@version\space <\exsh@date>} - -% TODO: fix "above hint skip" - - -\RequirePackage{etoolbox}%[2008/06/28] -\RequirePackage{scrlfile} -\RequirePackage{environ} - -\RequirePackage{pgfkeys} -\RequirePackage{keyval} -\RequirePackage{kvoptions} - -\RequirePackage{ifthen} -\RequirePackage{ifluatex} - -\RequirePackage{amsmath} - -\RequirePackage{currfile} -\RequirePackage{catchfile} - -% configuration keys - -\newif\ifexsh@beamer -\@ifclassloaded{beamer}{\exsh@beamertrue}{} - -\newif\ifexsh@patchenumerate\exsh@patchenumeratetrue -\newif\ifexsh@savetasks -\newif\ifexsh@solutions -\newif\ifexsh@oralsolutions -\newif\ifexsh@nonoralsolutions -\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 -\newif\ifexsh@hide%currently only set via sample in exercise env. -\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 -\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 - \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} -\fi - \exsh@beamercompatdonetrue -\fi -} - -\pgfkeys{/exsh/.is family,/exsh, - patchenumerate/.is if=exsh@patchenumerate, - patchenumerate/.default=true, - savetasks/.is if=exsh@savetasks, - savetasks/.default=true, - solutions/.is choice, - solutions/true/.code=\exsh@solutionstrue\exsh@oralsolutionstrue\exsh@nonoralsolutionstrue, - solutions/oral/.code=\exsh@solutionstrue\exsh@oralsolutionstrue\exsh@nonoralsolutionsfalse, - solutions/nonoral/.code=\exsh@solutionstrue\exsh@oralsolutionsfalse\exsh@nonoralsolutionstrue, - solutions/sample nonoral/.code=\exsh@solutionstrue\exsh@oralsolutionsfalse\exsh@nonoralsolutionstrue\exsh@samplesolutionstrue, - solutions/sample oral/.code=\exsh@solutionstrue\exsh@oralsolutionstrue\exsh@nonoralsolutionsfalse\exsh@samplesolutionstrue, - solutions/sample all/.code=\exsh@solutionstrue\exsh@oralsolutionstrue\exsh@nonoralsolutionstrue\exsh@samplesolutionstrue, - solutions/false/.code=\exsh@solutionsfalse\exsh@oralsolutionsfalse\exsh@nonoralsolutionsfalse, - solutions/.default=true, - number within sheet/.is if=exsh@exnumsheet, - number within sheet/.default=true, - forcesample/.is if=exsh@forcesample, - forcesample/.default=true, - gradingguides/.is if=exsh@gradingguides, - gradingguides/.default=true, - only/.initial={-}, - all/.style={/exsh/only={-}},all/.value forbidden, - solutionsby/.code={\def\exsh@solutionsby{#1}}, - solutionsby/.value required, - exercisespath/.code={\def\exsh@exercisespath{#1}}, - exercisespath/.value required, - bonus/.is if=exsh@bonus, - bonus/.default=true, - inplace/.is if=exsh@inplace, - 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, - pointsfloatright/.default=true, - abbrev/.is if=exsh@abbrev, - abbrev/.default=true, - 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}, - beamersolution/.initial={ignore}, - defersolutiontitle/.default={ignore}, - defersolutiontitle/.initial={ignore}, - framed/.default={ignore}, - framed/.initial={ignore}, - framed/.code={\let\newframe\relax}, -} -\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-beamer}{No \string\subject\space given}}} -}{ - \pgfkeys{/exsh/subject/.initial/.expand once=\@subject} -} -\ifdefstring{\@date}{\today}{ - \pgfkeys{/exsh/semester/.initial={\PackageWarning{exercisesheets-beamer}{No semester given in \string\date}}} -}{ - \pgfkeys{/exsh/semester/.initial/.expand once=\@date} -} -\let\@exsh@origdate\date -\renewcommand{\date}[1]{\@exsh@origdate{#1}\pgfkeys{/exsh/semester={#1}}} -% this breaks (likely because of detokenization): -% -> missing \begin{document} -% \apptocmd{\date}{\pgfkeys{/exsh/semester={#1}}}{}{} -\pgfkeys{/exsh/author/.code={% - \def\exsh@author{#1}% - \def\exsh@repeat{1}% - \loop\ifnum\exsh@repeat>0 - \def\exsh@repeat{0}% - \patchcmd{\exsh@author}{\and}{, }{\def\exsh@repeat{1}}{}% - \repeat - }, - /exsh/author/.expand once=\@author} -\let\exsh@oldauthor\author -\def\author#1{\exsh@oldauthor{#1}\pgfkeys{/exsh/author={#1}}} - -% helper macro for automatic language selection -\newif\ifexsh@provideonly -\def\exsh@deforprovide#1#2{% - \ifthenelse{\(\NOT\boolean{exsh@provideonly}\) - \OR \equal{}{\pgfkeysvalueof{#1}}}{% - \pgfkeys{#1=#2}% - }{}% -} - -\pgfkeys{exsh, - %general package options - patchenumerate/.initial=true, - custom skip macro/.initial=\exsh@skipcustomstuff, - showtodos/.initial={false}, - hidetodos/.style={/exsh/showtodos=false}, - hidetodos/.value forbidden, - % additional sheet info - title/.initial={}, - date/.initial={}, - note/.initial={}, - exauthor/.initial={\exsh@author}, - number within sheet/.initial={false}, - % - % additional exercise info - name/.initial={}, - forcesample/.initial={false}, - firstline/.initial={}, - points/.initial={}, - oral/.style={/exsh/points=oral},oral/.value forbidden, - inplace/.initial={false}, - sample/.initial={false}, - filenameasexercisename/.initial={false}, - pointsfloatright/.initial={false}, - bonus/.initial={false}, - nobonus/.style={/exsh/bonus=false},nobonus/.value forbidden, - abbrev/.initial={false}, - noabbrev/.style={/exsh/abbrev=false},noabbrev/.value forbidden, - pointsinfo/.initial={}, - optional/.style={/exsh/pointsinfo=\ifexsh@abbrev% - \pgfkeysvalueof{/exsh/strings/optional abbrev}% - \else% - \pgfkeysvalueof{/exsh/strings/optional}% - \fi}, - optional/.value forbidden, - 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={}, - strings/sheets/.initial={}, - strings/solutions/.initial={}, - strings/solutionsby/.initial={}, - strings/gradingguide/.initial={}, - strings/exercise/.initial={}, - strings/solution/.initial={}, - strings/idea/.initial={}, - strings/hint/.initial={}, - strings/remark/.initial={}, - strings/oral/.initial={}, - strings/oral abbrev/.initial={}, - strings/point/.initial={}, - strings/points/.initial={}, - strings/points abbrev/.initial={}, - strings/bonus point/.initial={}, - strings/bonus points/.initial={}, - strings/bonus points abbrev/.initial={}, - strings/optional/.initial={}, - strings/optional abbrev/.initial={}, - % - % languages: predifined string sets - language/.is choice, - language/german/.code={% - \exsh@deforprovide{/exsh/strings/sheet} {\"Ubungsblatt}% - \exsh@deforprovide{/exsh/strings/sheets} {\"Ubungsbl\"atter}% - \exsh@deforprovide{/exsh/strings/solutions} {L\"osungsvorschl\"age}% - \exsh@deforprovide{/exsh/strings/solutionsby} {L\"osungen von}% - \exsh@deforprovide{/exsh/strings/gradingguide}{Bepunktung}% - \exsh@deforprovide{/exsh/strings/exercise} {Aufgabe}% - \exsh@deforprovide{/exsh/strings/solution} {L\"osung}% - \exsh@deforprovide{/exsh/strings/idea} {L\"osungsidee}% - \exsh@deforprovide{/exsh/strings/hint} {Hinweis}% - \exsh@deforprovide{/exsh/strings/remark} {Bemerkung}% - \exsh@deforprovide{/exsh/strings/oral} {m\"undlich}% - \exsh@deforprovide{/exsh/strings/oral abbrev} {mdl.}% - \exsh@deforprovide{/exsh/strings/point} {Punkt}% - \exsh@deforprovide{/exsh/strings/points} {Punkte}% - \exsh@deforprovide{/exsh/strings/points abbrev}{P.}% - \exsh@deforprovide{/exsh/strings/bonus point} {Zusatzpunkt}% - \exsh@deforprovide{/exsh/strings/bonus points}{Zusatzpunkte}% - \exsh@deforprovide{/exsh/strings/bonus points abbrev}{ZP.}% - \exsh@deforprovide{/exsh/strings/optional} {optional}% - \exsh@deforprovide{/exsh/strings/optional abbrev} {opt.}% - },language/german/.value forbidden, - language/ngerman/.style={/exsh/language/german=#1}, - language/english/.code={% - \exsh@deforprovide{/exsh/strings/sheet} {Exercise Sheet}% - \exsh@deforprovide{/exsh/strings/sheets} {Exercise Sheets}% - \exsh@deforprovide{/exsh/strings/solutions} {Suggested Solutions}% - \exsh@deforprovide{/exsh/strings/solutionsby} {Solutions by}% - \exsh@deforprovide{/exsh/strings/gradingguide}{Grading guideline}% - \exsh@deforprovide{/exsh/strings/exercise} {Exercise}% - \exsh@deforprovide{/exsh/strings/solution} {Solution}% - \exsh@deforprovide{/exsh/strings/idea} {Idea for solution}% - \exsh@deforprovide{/exsh/strings/hint} {Hint}% - \exsh@deforprovide{/exsh/strings/remark} {Remark}% - \exsh@deforprovide{/exsh/strings/oral} {oral}% - \exsh@deforprovide{/exsh/strings/oral abbrev} {oral}% - \exsh@deforprovide{/exsh/strings/point} {point}% - \exsh@deforprovide{/exsh/strings/points} {points}% - \exsh@deforprovide{/exsh/strings/points abbrev}{p.}% - \exsh@deforprovide{/exsh/strings/bonus point} {bonus point}% - \exsh@deforprovide{/exsh/strings/bonus points}{bonus points}% - \exsh@deforprovide{/exsh/strings/bonus points abbrev}{b.p.}% - \exsh@deforprovide{/exsh/strings/optional} {optional}% - \exsh@deforprovide{/exsh/strings/optional abbrev} {opt.}% - },language/english/.value forbidden, - language/.unknown/.code={% - \PackageWarning{exercisesheets-beamer}{Unknown language \pgfkeyscurrentname. - Defaulting to English.}{}% - \pgfkeys{/exsh/language=english}% - }, - % - % alternate strings - idea/.style={/exsh/strings/solution=\pgfkeysvalueof{/exsh/strings/idea}}, - remark/.style={/exsh/strings/hint=\pgfkeysvalueof{/exsh/strings/remark}}, - % - % hooks - every sheet/.code={}, - every exercise/.code={}, - every solution/.code={}, - every hint/.code={}, - % - % font specifications - sheet header font/.initial=\normalfont\normalsize, - subject font/.initial=\scshape, - author font/.initial=\scshape, - semester font/.initial={}, - date font/.initial={}, - solutionsby font/.initial=\itshape, - sheet note font/.initial=\itshape\bfseries, - sheet title font/.initial=\Large\bfseries, - exercise title font/.initial=\bfseries, - points font/.initial=\itshape, - main task font/.initial={}, - subtask font/.initial={}, - task restate font/.initial=\itshape, - hint font/.initial={}, - hint title font/.initial=\itshape, - solution font/.initial={}, - solution title font/.initial=\bfseries, - grading guide font/.initial=\itshape, - todo marker font/.initial=\ifdef{\color}{\color{red}}{}\bfseries, - % - % skip values - below slide headline skip/.initial={0mm}, - above sheet title skip/.initial={4ex}, - above sheet note skip/.initial={.7ex}, - above solutionsby skip/.initial={1ex}, - below sheet header skip/.initial={4ex plus 1ex minus .5ex}, - above exercise skip/.initial={3ex plus 1ex minus .5em}, - below exercise title skip/.initial={\parskip}, - above solution skip/.initial={1ex}, - above hint skip/.initial={1ex}, - % - % page handling - sheet start page action/.initial={\clearpage}, - sheet end page action/.initial={\clearpage}, - % - % conditionals - ifsolutions/.code 2 args={\ifsolutions{\pgfkeysalso{#1}}{\pgfkeysalso{#2}}}, - iforalsolutions/.code 2 args={\iforalsolutions{\pgfkeysalso{#1}}{\pgfkeysalso{#2}}}, - ifnonoralsolutions/.code 2 args={\ifnonoralsolutions{\pgfkeysalso{#1}}{\pgfkeysalso{#2}}}, -} - -% default values -\pgfkeys{exsh,solutions=false,all} - -% process package options -\@expandtwoargs\pgfqkeys{/exsh}{\csname opt@exercisesheets-beamer.sty\endcsname} - -% mark options as processed -\expandafter\undef\csname opt@exercisesheets-beamer.sty\endcsname - -% 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 - \ifdef{\bbl@main@language}{% - \pgfkeys{/exsh/language=\bbl@main@language}% - }{% - \pgfkeys{/exsh/language=english}% - }% - \exsh@provideonlyfalse -}% - -% range checks -\newif\ifexsh@isinrange -\newif\ifexsh@singularrange -\def\exsh@checkrange#1{% - \edef\exsh@range@entry{#1}% - \def\exsh@range@curstart{}% - \exsh@isinrangefalse - \exsh@singularrangetrue - \pgfkeysgetvalue{/exsh/only}{\exsh@temp}% - \ifthenelse{\equal{-}{\exsh@temp}}{% - \exsh@isinrangetrue - \ifnumequal{\exsh@lastsheet}{1}{% - \exsh@singularrangetrue - }{% - \exsh@singularrangefalse - }% - }{% - \expandafter\exsh@range@parsestart\exsh@temp\exsh@range@end - }% -} -\def\exsh@range@parsestart#1{% - \ifstrequal{#1}{,}{% - \exsh@singularrangefalse - \ifdefstring{\exsh@range@curstart}{last}{% - \let\exsh@range@curstart\exsh@lastsheet - }{}% - \ifdefequal{\exsh@range@entry}{\exsh@range@curstart}{% - \exsh@isinrangetrue - }{}% - \def\exsh@range@curstart{}% - \exsh@range@parsestart - }{% - \ifstrequal{#1}{\exsh@range@end}{% - \ifdefstring{\exsh@range@curstart}{last}{% - \let\exsh@range@curstart\exsh@lastsheet - }{}% - \ifdefequal{\exsh@range@entry}{\exsh@range@curstart}{% - \exsh@isinrangetrue - }{}% - }{% - \ifdefequal{#1}{-}{% - \exsh@singularrangefalse - \ifdefstring{\exsh@range@curstart}{}{% - \def\exsh@range@curstart{0}% - }{}% - \ifdefstring{\exsh@range@curstart}{last}{% - \let\exsh@range@curstart\exsh@lastsheet - }{}% - \def\exsh@range@curend{}% - \exsh@range@parseend - }{% - \appto{\exsh@range@curstart}{#1}% - \exsh@range@parsestart - }% - }% - }% -} -\def\exsh@range@parseend#1{% - \ifstrequal{#1}{,}{% - \ifdefstring{\exsh@range@curend}{last}{% - \def\exsh@range@curend{10000}% - }{}% - \ifdefstring{\exsh@range@curend}{}{ - \def\exsh@range@curend{10000}% - }{}% - \ifthenelse{\NOT \(\exsh@range@curstart > \exsh@range@entry - \OR \exsh@range@entry > \exsh@range@curend\)}{% - \exsh@isinrangetrue - }{}% - \def\exsh@range@curstart{}% - \exsh@range@parsestart - }{% - \ifstrequal{#1}{\exsh@range@end}{% - \ifdefstring{\exsh@range@curend}{last}{% - \def\exsh@range@curend{10000}% - }{}% - \ifdefstring{\exsh@range@curend}{}{ - \def\exsh@range@curend{10000}% - }{}% - \ifthenelse{\NOT \(\exsh@range@curstart > \exsh@range@entry - \OR \exsh@range@entry > \exsh@range@curend\)}{% - \exsh@isinrangetrue - }{% - }% - }{% - \appto{\exsh@range@curend}{#1}% - \exsh@range@parseend - }% - }% -} - -% remember last sheet (for range checks) -\def\exsh@lastsheet{0}% to be overridden in aux file -\AtEndDocument{% - \immediate\write\@auxout{\string\gdef\string\exsh@lastsheet{\arabic{part}}}% -} - -\numberwithin{page}{part} -\renewcommand{\thepage}{\arabic{page}}%changed for every sheet -\setcounter{secnumdepth}{-1} - -\AfterPackage*{hyperref}{% - % make PDF destinations unique: - \def\theHsection{\arabic{sheetid}.\arabic{section}}% - \def\theHpage{\arabic{sheetid}-\arabic{page}}% - % - % open bookmarks when typesetting a single sheet - \AtEndPreamble{% - \exsh@checkrange{0}% - \ifexsh@singularrange\hypersetup{bookmarksopen}\fi - }% -} - -% automatic title selection -\let\exsh@title\relax -\let\exsh@title@new\relax -\def\exsh@write@title#1{% - \xdef\exsh@title@new{\expandonce #1}% - \protected@write\@auxout{}{\string\gdef\string\exsh@title{\expandonce\exsh@title@new}}% -} -\AfterEndDocument{% - \ifthenelse{\equal{\exsh@title}{\exsh@title@new}}{}{% - \@latex@warning@no@line{Label(s) may have changed. - Rerun to get cross-references right}% - }% -} -\AfterEndPreamble{% - \exsh@checkrange{0}% - \ifexsh@singularrange\else - \pgfkeysgetvalue{/exsh/strings/sheets}{\exsh@tmp}% - \exsh@write@title{\exsh@tmp}% - \fi -} - -\AtBeginDocument{% - \ifexsh@solutions - \title{\exsh@title: \pgfkeysvalueof{/exsh/strings/solutions}}% - \else - \title{\exsh@title} - \fi -} -\newcounter{sheetid}% only used to disambiguate hyperref labels -\newenvironment{sheet}[1][]{% - \pgfkeys{exsh,every sheet,#1}% - \pgfkeysvalueof{/exsh/sheet start page action}% - \stepcounter{sheetid}% - \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/title}}}{% - \numdef\exsh@tmp{\value{part}+1}% - \edef\exsh@temp{\expandonce{\pgfkeysvalueof{/exsh/strings/sheet}}\noexpand~\exsh@tmp}% - \pgfkeys{/exsh/title/.expand once={\exsh@temp}}% - \def\thepage{\arabic{part}-\arabic{page}}% - }{% - \def\thepage{\arabic{page}}% - }% - \ifexsh@exnumsheet - \edef\exsh@exnumstore{\arabic{section}} - \setcounter{section}{0}% - \fi - \numdef\exsh@tmp{\value{part}+1}% - \exsh@checkrange{\exsh@tmp}% - \ifexsh@isinrange - \ifexsh@singularrange - \pgfkeysgetvalue{/exsh/title}{\exsh@temp}% - \exsh@write@title{\exsh@temp}% - \fi - \exsh@sheethead - \else - \refstepcounter{part}% - \def\exsh@skipwhat{sheet}\expandafter\exsh@skipstuff - \fi -}{% - \par - \begingroup - \ifnum\value{page}=1\thispagestyle{empty}\fi - \pgfkeysvalueof{/exsh/sheet end page action}% - \endgroup - \ifexsh@exnumsheet - \setcounter{section}{\exsh@exnumstore}% - \fi -} -\listadd{\exsh@enums}{enumerate} -\listadd{\exsh@enums}{compactenum} -\listadd{\exsh@enums}{asparaenum} -\listadd{\exsh@enums}{inparaenum} -\listadd{\exsh@nonenums}{itemize} -\listadd{\exsh@nonenums}{compactitem} -\listadd{\exsh@nonenums}{asparaitem} -\listadd{\exsh@nonenums}{inparaitem} -\listadd{\exsh@nonenums}{description} -\listadd{\exsh@nonenums}{compactdesc} -\listadd{\exsh@nonenums}{asparadesc} -\listadd{\exsh@nonenums}{inparadesc} -\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}{% - \ifstrequal{#1}{\includeexercise}{\exsh@skipstuff@incex}{% - \ifstrequal{#1}{\label}{\exsh@skipstuff@label}{% - \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}{\exsh@hyper@itemtrue\refstepcounter{\@enumctr}}{}}{}% - \pgfkeysvalueof{/exsh/custom skip macro}{#1}}}}}}}}% -} -\let\exshskipcontinue\exsh@skipstuff -\long\def\exsh@skipcustomstuff#1{\exshskipcontinue} -\def\exsh@skipstuff@end#1{% - \expandafter\ifstrequal\expandafter{\exsh@skipwhat}{#1}{% - \expandafter\end\expandafter{\exsh@skipwhat}% - \let\exsh@skipwhat\relax% - }{ - \endgroup\exsh@skipstuff% - }% -} -\def\exsh@skipstuff@begin#1{% - \begingroup - \ifstrequal{#1}{exercise}{\refstepcounter{section}% - % automatic label for the first exercise in every included file - \ifthenelse{\equal{\jobname}{\currfilebase}}{}{% - \ifcsdef{exsh@autolabel@\currfilebase}{}{% - \csdef{exsh@autolabel@\currfilebase}{}% - \exsh@autolabel{ex:\currfilebase}}}% - }{}% - \ifinlist{#1}{\exsh@enums}{% - \exsh@skipstuff@beginenum - }{% - \ifinlist{#1}{\exsh@nonenums}{% - \undef\@enumctr - }{}% - \exsh@skipstuff - }% -} -\def\exsh@skipstuff@beginenum{% - \ifnum\@enumdepth>\thr@@ - \@toodeep - \else - \advance\@enumdepth\@ne - \edef\@enumctr{enum\romannumeral\the\@enumdepth}% - \setcounter{\@enumctr}{0}% - \fi - \@ifundefined{@enumlabel@}{% - \exsh@skipstuff - }{% - \@ifnextchar[{\@enumlabel@{\exsh@skipstuff}[}{\exsh@skipstuff}% - }% -} -\def\exsh@skipstuff@label#1{% - % Locally modify \protected@write to use \immediate\write instead. - % This is needed to include labels after the last shipout in the aux file. - \begingroup - \def\protected@write##1##2##3{% - \begingroup - \let\protect\@unexpandable@protect - \immediate\write##1{##3}% - \endgroup - }% - \label{#1}% - \endgroup - \exsh@skipstuff -} -\def\exsh@skipstuff@input#1{% - \CatchFileDef{\exsh@inputfilecontent}{#1}{}% - \currfile@push - \currfile@set{#1}% - \expandafter\exsh@skipstuff\exsh@inputfilecontent\exsh@skipstuff@endfile -} - -\def\exsh@skipstuff@incex{% - \@ifstar\exsh@skipstuff@incex@@\exsh@skipstuff@incex@% -} - -\newcommand{\exsh@skipstuff@incex@}[2][]{% -\exsh@skipstuff\input{% - \ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}#2}% -} - -\newcommand{\exsh@skipstuff@incex@@}[2][]{% -\refstepcounter{section} -\exsh@autolabel{ex:#2} -\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 - \expandafter\edef\expandafter\exsh@tmp{\expandonce\exsh@tmp:\noexpand~\pgfkeysvalueof{/exsh/strings/solutions}}% - \fi - \refstepcounter{part}% - \part[\pgfkeysvalueof{/exsh/title}]{\normalsize - \pgfkeysvalueof{/exsh/sheet header font}\centering% - \begingroup\raggedright% - {\pgfkeysvalueof{/exsh/subject font}\pgfkeysvalueof{/exsh/subject}}\hfill - {\pgfkeysvalueof{/exsh/semester font}\pgfkeysvalueof{/exsh/semester}}\\ - {\pgfkeysvalueof{/exsh/author font}\exsh@author}\hfill - {\pgfkeysvalueof{/exsh/date font}\pgfkeysvalueof{/exsh/date}}\\ - \vskip\pgfkeysvalueof{/exsh/above sheet title skip}\relax% - \endgroup - \begingroup - \pgfkeysvalueof{/exsh/sheet title font}\exsh@tmp\\\unskip - \endgroup - \begingroup - \pgfkeysvalueof{/exsh/sheet header font}% - \ifexsh@solutions% - \ifdefvoid{\exsh@solutionsby}{}{% - \begingroup - \pgfkeysvalueof{/exsh/solutionsby font}% - \vskip\pgfkeysvalueof{/exsh/above solutionsby skip}\relax - \pgfkeysvalueof{/exsh/strings/solutionsby}~\exsh@solutionsby\\\unskip% - \endgroup - }% - \else - \fi - \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/note}}}{% - }{% - \ifbool{exsh@samplesolutions}{}{% - \begingroup - \pgfkeysvalueof{/exsh/sheet note font}% - \vskip\pgfkeysvalueof{/exsh/above sheet note skip}\relax - \pgfkeysvalueof{/exsh/note}\\\unskip% - \endgroup - }% - }% - \endgroup - }% - \unskip - \vskip\pgfkeysvalueof{/exsh/below sheet header skip}\relax - \stepcounter{page}% -} -\fi - -\ifdef{\othersectionslevelsformat}{% - \renewcommand{\othersectionlevelsformat}[1]{% - \ifstrequal{#1}{section}% - {}% - {\csname the#1\endcsname\autodot\enskip}}% -}{} - -%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{}% - }{% - \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/points}}}{% - \edef\exsh@points{\pgfkeysvalueof{/exsh/pointsinfo}}% - }{% - \ifthenelse{\equal{oral}{\pgfkeysvalueof{/exsh/points}}}{% - \ifexsh@abbrev% - \pgfkeysgetvalue{/exsh/strings/oral abbrev}{\exsh@points}% - \else% - \pgfkeysgetvalue{/exsh/strings/oral}{\exsh@points}% - \fi% - }{% - \ifexsh@abbrev% - \ifexsh@bonus% - \edef\exsh@points{\pgfkeysvalueof{/exsh/points} \pgfkeysvalueof{/exsh/strings/bonus points abbrev}}% - \else% - \edef\exsh@points{\pgfkeysvalueof{/exsh/points} \pgfkeysvalueof{/exsh/strings/points abbrev}}% - \fi% - \else% - \ifthenelse{\equal{1}{\pgfkeysvalueof{/exsh/points}}}{% - \ifexsh@bonus% - \edef\exsh@points{1 \pgfkeysvalueof{/exsh/strings/bonus point}}% - \else% - \edef\exsh@points{1 \pgfkeysvalueof{/exsh/strings/point}}% - \fi% - }{% - \ifexsh@bonus% - \edef\exsh@points{\pgfkeysvalueof{/exsh/points} \pgfkeysvalueof{/exsh/strings/bonus points}}% - \else% - \edef\exsh@points{\pgfkeysvalueof{/exsh/points} \pgfkeysvalueof{/exsh/strings/points}}% - \fi% - }% - \fi% - }% - \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/pointsinfo}}}{}{% - \edef\exsh@points{\expandonce\exsh@points, \pgfkeysvalueof{/exsh/pointsinfo}}% - }% - }% - \ifthenelse{\equal{}{\exsh@points}}{% - \def\exsh@shortpoints{}% - }{% - \edef\exsh@shortpoints{ (\expandonce\exsh@points)}% - }% - \preto\exsh@points{\enskip\hfill\bgroup% - \pgfkeysvalueof{/exsh/points font}}% - \appto\exsh@points{\egroup}% - }% - \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/firstline}}}{% - \def\exsh@firstline{}% - }{% - \def\exsh@firstline{\pgfkeysvalueof{/exsh/firstline}}% - \preto\exsh@firstline{\quad\bgroup\normalfont\normalsize}% - \appto\exsh@firstline{\egroup}% - }% - \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/name}}}{% - \def\exsh@exname{}% - \def\exsh@shortexname{}% - }{% - \edef\exsh@exname{\space(\pgfkeysvalueof{/exsh/name})}% - \edef\exsh@shortexname{:\space\pgfkeysvalueof{/exsh/name}}% - }% - \refstepcounter{section}% - \edef\exsh@tmp{[\pgfkeysvalueof{/exsh/strings/exercise} \arabic{section}\exsh@shortexname\expandonce\exsh@shortpoints]}% - \ifbool{exsh@samplesolutions}{\ifbool{exsh@sample}{\exsh@hidefalse}{\exsh@hidetrue}}{\exsh@hidefalse}% - \ifbool{exsh@hide}{% - \def\exsh@skipwhat{exercise}\exsh@skipstuff% - }{% - \expandafter\exsh@startsection\exsh@tmp{\noindent% - \hbox to 0pt{\hss\pgfkeysvalueof{/exsh/exercisemark}}% - \pgfkeysvalueof{/exsh/strings/exercise}~\arabic{section}\exsh@exname\exsh@firstline\expandonce\exsh@points}% - \unskip\vskip\pgfkeysvalueof{/exsh/below exercise title skip}\relax - \@afterindentfalse - % automatic label for the first exercise in every included file - \ifthenelse{\equal{\jobname}{\currfilebase}}{}{% - \ifcsdef{exsh@autolabel@\currfilebase}{}{% - \csdef{exsh@autolabel@\currfilebase}{}% - \exsh@autolabel{ex:\currfilebase}}}% - % Use \leavevmode to ensure proper distances above environments that start - % 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 - \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}}% - {1em}% afterskip corrected below - {\pgfkeysvalueof{/exsh/exercise title font}}% - [#1]{#2}% -}% -\fi - - -\exshset{includeoverride/.style={}} -\def\includeexercise{% - \@ifstar\exsh@includeexercise@\exsh@includeexercise% -} - -\newcommand{\exsh@includeexercise}[2][]{% -\ifbool{exsh@filenameasexercisename}{% - \exshset{includeoverride/.style={name={#2},#1}}% -}{% - \exshset{includeoverride/.style={#1}}% -}% -\input{\ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}#2} -\exshset{includeoverride/.style={}} -} - -\newcommand{\exsh@includeexercise@}[2][]{% -\ifbool{exsh@filenameasexercisename}{% - \exshset{includeoverride/.style={name={#2},#1}}% -}{% - \exshset{includeoverride/.style={#1}}% -}% -\begingroup -%auto labelling is still allowed, but other labels are forbidden -%here we may use \let as the definition is close to its use -\let\exsh@autolabel\label -\def\label##1{% - \PackageError{exercisesheets-beamer}{\string\label{##1}\space - inside \string\includeexercise*}{}% -} -\input{\ifdefvoid{\exsh@exercisespath}{}{\exsh@exercisespath/}#2} -\endgroup -\exshset{includeoverride/.style={}} -} - -\AfterPackage*{varioref}{ - \labelformat{section}{\pgfkeysvalueof{/exsh/strings/exercise}~\arabic{section}} -} - -\ifexsh@patchenumerate - \AfterPackage*{varioref}{ - \labelformat{enumi}{\arabic{section}.\alph{enumi}} - } - \AfterPackage*{paralist}{ - \setdefaultenum{(a)}{(1)}{i.}{A.} - } - \AfterPackage*{enumitem}{ - \setenumerate[1]{label=(\alph*)} - \setenumerate[2]{label=(\arabic*)} - \setenumerate[3]{label=\roman*.} - \setenumerate[4]{label=\Alph.} - } - \def\theHenumi{enumi.\arabic{part}.\arabic{section}.\arabic{enumi}} - \AtEndPreamble{% - \@ifpackageloaded{paralist}{}{% - \@ifpackageloaded{enumitem}{}{% - \apptocmd{\enumerate}{ - \ifnum\@enumdepth=1% - \def\labelenumi{(\alph{enumi})} - \def\labelenumii{\arabic{enumii}.} - \def\labelenumiii{\roman{enumiii}.} - \fi - }{}{}% - }% - }% - }% -\fi - -% reset equation numbering for each exercise -\@addtoreset{equation}{section} - -\long\def\exsh@savemaintask#1{% - \global\def\exsh@restatetaskmain{#1}% - #1% -} - -\newenvironment{maintask}[1][]{% - \pgfkeys{exsh,#1}% - \pgfkeysvalueof{/exsh/main task font}% - \ifbool{exsh@savetasks}{\Collect@Body\exsh@savemaintask}{}% - \ignorespaces -}{} - -%we ignore everything before the frist item -%and process everything afterwards -\long\def\exsh@processsubtasks#1\item#2\item{% -\ifstrequal{#2}{}{}{% -\item #2% -\csgdef{exsh@restatetask\arabic{enumi}}{#2}% -\exsh@processsubtasks\item%new "frist" \item to ignore -}%no whitespace here is crucial for end detecttion -} - -\long\def\exsh@collectedsubtasks#1{ -\begin{enumerate} -\exsh@processsubtasks#1\item\item -\end{enumerate}% -} - -\def\exsh@subtaskenv{enumerate} -\def\exsh@subtaskitm{item} -\def\exsh@subtaskctr{enumi} -\newenvironment{subtasks}[1][]{% - \pgfkeys{exsh,#1}% - \begin{\exsh@subtaskenv} - \ignorespaces -}{ - \end{\exsh@subtaskenv}% -} - -\newcommand{\subtask}[2][]{% - \begingroup - \pgfkeys{exsh,#1}% - \csname\exsh@subtaskitm\endcsname% - {\pgfkeysvalueof{/exsh/subtask font} #2}% - \ifbool{exsh@savetasks}{% - \csgdef{exsh@restatetask\arabic{\exsh@subtaskctr}}{#2}% - }{}% - \endgroup -} - -\newcommand{\restatetask}[1][main]{% - {\pgfkeysvalueof{/exsh/task restate font}% - \csname exsh@restatetask#1\endcsname}% -} - -\newenvironment{hint}[1][]{% - \par - \pgfkeys{exsh,every hint,#1,hint font}% - \vskip\pgfkeysvalueof{/exsh/above hint skip}\relax\noindent - {\pgfkeysvalueof{/exsh/hint title font}\pgfkeysvalueof{/exsh/strings/hint}:}~\ignorespaces -}{% - \par -} -\newenvironment{hint*}[1][]{% - \pgfkeys{exsh,every hint,#1,hint font}% - ({\pgfkeysvalueof{/exsh/hint title font}\pgfkeysvalueof{/exsh/strings/hint}:}\space% -}{% - \unskip)% -} - - -\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}{% - \let\next\exsh@startsolution - }{% - \let\next\exsh@skipsolution - }% - }{% - \ifbool{exsh@nonoralsolutions}{% - \let\next\exsh@startsolution - }{% - \let\next\exsh@skipsolution - }% - }% - \ifbool{exsh@forcesample}{% - \ifbool{exsh@samplesolutions}{% - \let\next\exsh@startsolution - }{}% - }{}% - \ifbool{exsh@beamersolution}{% - \let\next\exsh@skipsolution - }{}% - \next -}{% - \ifbool{exsh@beamersolution}{}{% - \ifthenelse{\equal{oral}{\pgfkeysvalueof{/exsh/points}}}{% - \ifbool{exsh@oralsolutions}{\exsh@postsolutionclear}{}% - }{% - \ifbool{exsh@nonoralsolutions}{\exsh@postsolutionclear}{}% - }% - }% -} - -\def\exsh@solutiontitle#1{ - \ifbool{exsh@beameruseblocks}{% - \begin{alertblock}{}% - \pgfkeysvalueof{/exsh/solution title font}% - \pgfkeysvalueof{/exsh/strings/solution} % - (\pgfkeysvalueof{/exsh/strings/exercise} \arabic{section}% - \ifnum\@enumdepth>0\alph{enumi}\fi)% - \end{alertblock} - }{ - \begin{beamercolorbox}[rounded=true,wd={#1}]% - {block title alerted} - \pgfkeysvalueof{/exsh/solution title font}% - \pgfkeysvalueof{/exsh/strings/solution} % - (\pgfkeysvalueof{/exsh/strings/exercise} \arabic{section}% - \ifnum\@enumdepth>0\alph{enumi}\fi)% - \end{beamercolorbox} - } -} -\newcommand{\solutiontitle}[1][\linewidth]{ - \ifbool{exsh@defersolutiontitle}{% - \ifhmode \linebreak\fi\exsh@solutiontitle{#1} - }{}% -} - - -\long\def\exsh@processframes#1\newframe{% -\ifstrequal{#1}{}{}{% -\clearpage -\begin{frame}[t] - \solutiontitle[\textwidth] - #1 -\end{frame}% -\exsh@processframes% -}%no whitespace here is crucial for end detecttion -} - - -\long\def\exsh@collectedframe#1{ -\exsh@processframes#1\newframe\newframe -} - - - -\def\exsh@startsolution{% - \ifnum\@enumdepth=0 - \clearpage - \fi -% \usebeamercolor{block title alerted} -% \setbeamercolor{block body}{bg=bg,fg=fg} -% \block{} -% \pgfkeysvalueof{/exsh/solution title font}% -% \pgfkeysvalueof{/exsh/strings/solution} % -% (\pgfkeysvalueof{/exsh/strings/exercise} \arabic{section}% -% \alph{enumi})% -% \endblock - \ifbool{exsh@framed}{\exsh@defersolutiontitletrue}{} - \ifbool{exsh@defersolutiontitle}{}{% - \ifhmode \linebreak\fi - \exsh@solutiontitle{\linewidth} - }% - \ifbool{exsh@framed}{\Collect@Body\exsh@collectedframe}{}% -}% - -\long\def\exsh@skipsolution#1{% - \ifstrequal{#1}{\end}{\exsh@endsolution}{\exsh@skipsolution}% -} -\def\exsh@endsolution#1{% - \ifstrequal{#1}{solution}{ - \end{solution} - }{% - \ifstrequal{#1}{beamersolution}{ - \end{beamersolution} - }{% - \exsh@skipsolution}% - }% -} - -\newenvironment<>{beamersolution}[1][]{% - \pgfkeys{exsh,every solution,#1,solution font}% - \ifthenelse{\equal{oral}{\pgfkeysvalueof{/exsh/points}}}{% - \ifbool{exsh@oralsolutions}{% - \let\next\exsh@startsolution - }{% - \let\next\exsh@skipsolution - }% - }{% - \ifbool{exsh@nonoralsolutions}{% - \let\next\exsh@startsolution - }{% - \let\next\exsh@skipsolution - }% - }% - \ifbool{exsh@forcesample}{% - \ifbool{exsh@samplesolutions}{% - \let\next\exsh@startsolution - }{}% - }{}% - \next -}{% -% \ifbool{exsh@framed}{\end{frame}}{} - \ifthenelse{\equal{oral}{\pgfkeysvalueof{/exsh/points}}}{% - \ifbool{exsh@oralsolutions}{\clearpage}{}% - }{% - \ifbool{exsh@nonoralsolutions}{\clearpage}{}% - }% -} - - -\newcommand{\pun}[1][]{% - \PackageWarning{exercisesheets}{Obsolete \string\pun[] macro used. Please use - something\MessageBreak like \string\points{10} or \string\points{oral} instead.}{}% - \exsh@subexpoints{#1}% -} -\newcommand{\points}[2][]{% - \ifthenelse{\equal{}{#2}}{}{\exshset{points=#2}}% - \bgroup% - \exshset{#1}% - \ifthenelse{\equal{}{\pgfkeysvalueof{/exsh/pointsinfo}}}{% - \def\exsh@tmp{}% - }{% - \def\exsh@tmp{, \pgfkeysvalueof{/exsh/pointsinfo}}% - }% - \ifthenelse{\equal{#2}{oral}}{% - \ifexsh@abbrev% - \exsh@subexpoints{\pgfkeysvalueof{/exsh/strings/oral abbrev}\exsh@tmp}% - \else% - \exsh@subexpoints{\pgfkeysvalueof{/exsh/strings/oral}\exsh@tmp}% - \fi% - }{% - \ifthenelse{\equal{#2}{}}{% - \exsh@subexpoints{\pgfkeysvalueof{/exsh/pointsinfo}}% - }{% - \ifexsh@abbrev% - \ifexsh@bonus% - \exsh@subexpoints{#2~\pgfkeysvalueof{/exsh/strings/bonus points abbrev}\exsh@tmp}% - \else% - \exsh@subexpoints{#2~\pgfkeysvalueof{/exsh/strings/points abbrev}\exsh@tmp}% - \fi% - \else% - \ifthenelse{\equal{#2}{1}}{% - \ifexsh@bonus% - \exsh@subexpoints{1~\pgfkeysvalueof{/exsh/strings/bonus point}\exsh@tmp}% - \else% - \exsh@subexpoints{1~\pgfkeysvalueof{/exsh/strings/point}\exsh@tmp}% - \fi% - }{% - \ifexsh@bonus% - \exsh@subexpoints{#2~\pgfkeysvalueof{/exsh/strings/bonus points}\exsh@tmp}% - \else% - \exsh@subexpoints{#2~\pgfkeysvalueof{/exsh/strings/points}\exsh@tmp}% - \fi% - }% - \fi% - \ifexsh@sumuppoints% - \ifexsh@bonus% - \addtocounter{exsh@ptsbonus@cur}{#2} - \else% - \addtocounter{exsh@pts@cur}{#2} - \fi% - \fi% - }% - }% - \egroup - \ignorespaces -} - -\newenvironment{gradingguide}[1][]{% - \pgfkeys{exsh,#1,grading guide font}% - \ifbool{exsh@gradingguides}{% - \let\next\exsh@startguide - }{% - \let\next\exsh@skipguide - }% - \next -}{} - -\def\exsh@startguide{\@afterindentfalse% - \par - {\parindent \z@ - \pgfkeysvalueof{/exsh/strings/gradingguide}: }\nobreak% - \@afterheading -}% - -\long\def\exsh@skipguide#1{% - \ifstrequal{#1}{\end}{\exsh@endguide}{\exsh@skipguide}% -} -\def\exsh@endguide#1{% - \ifstrequal{#1}{gradingguide}{\end{gradingguide}}{\exsh@skipguide}% -} - - -\ifluatex% - \ifdefined\luatextextdir - \def\exsh@putatend#1{% - \leavevmode\luatextextdir TRT\unskip{\luatextextdir TLT{\hfill~~#1}}\luatextextdir TLT}% - \else - \def\exsh@putatend#1{% - \leavevmode\textdir TRT\unskip{\textdir TLT{\hfill~~#1}}\textdir TLT}% - \fi -\else% - \def\exsh@putatend#1{% - \TeXXeTstate=1% - \beginR\unskip{\beginL~~#1\endL}\hfill\beginL\TeXXeTstate=0}% -\fi - -\def\exsh@leaveinplace#1{\unskip~{#1} } -\def\exsh@insertFill#1{\unskip\nobreak\space\nobreak\hspace*{\fill}\allowbreak\hspace*{\fill}{#1}\unskip} - -\newcommand{\exsh@subexpoints}[1]{% - \ifexsh@inplace% - \exsh@leaveinplace{\pgfkeysvalueof{/exsh/points font}\mbox{(#1)}}% - \else% - \ifexsh@pointsfloatright% can be used directly after \item etc. - \exsh@putatend{\pgfkeysvalueof{/exsh/points font}\mbox{(#1)}}% - \else% original points macro with fill - \exsh@insertFill{\pgfkeysvalueof{/exsh/points font}\mbox{(#1)}}% - \fi% - \fi% -} - -\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}% -} -\newcommand{\ifsolutions}[2]{% - \ifbool{exsh@solutions}{#1}{#2}% -} - -\newcommand{\iforalsolutions}[2]{% - \ifbool{exsh@oralsolutions}{#1}{#2}% -} -\newcommand{\ifnonoralsolutions}[2]{% - \ifbool{exsh@nonoralsolutions}{#1}{#2}% -} -\newcommand{\ifsamplesolutions}[2]{% - \ifbool{exsh@samplesolutions}{#1}{#2}% -} -\newcommand{\samplehide}[1]{% - \ifbool{exsh@samplesolutions}{}{#1}% -} - - -\setbeamertemplate{headline}{% -% \leavevmode% - \ifbool{exsh@beamerwithheadline}{% - \begin{beamercolorbox}[wd=\paperwidth,vmode]{frametitle} - \vspace{0.4em} - \leavevmode - \begingroup - \footnotesize% - \hspace*{2ex}{\pgfkeysvalueof{/exsh/subject font}% - \pgfkeysvalueof{/exsh/subject}} \hfill% - {\pgfkeysvalueof{/exsh/semester font}% - \pgfkeysvalueof{/exsh/semester}}\hspace{2ex}\hfil% - \vspace{1mm}\linebreak% - \hspace*{2ex}{\pgfkeysvalueof{/exsh/author font}\exsh@author}% - \hfill{\pgfkeysvalueof{/exsh/date font}% - \pgfkeysvalueof{/exsh/date}}% - \hspace{2ex}\hfil%\vspace{-1em} - \endgroup - \vspace{0.4em} - \end{beamercolorbox}% - \vspace*{3mm} - \vskip\pgfkeysvalueof{/exsh/below slide headline skip}\relax% - }{}% -} -\addtobeamertemplate{frametitle}{\vspace{-3mm}}{} - -\setbeamertemplate{footline} -{% - \leavevmode% - \hbox{\begin{beamercolorbox}[wd=.5\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm,rightskip=.3cm]{frametitle}% - {\pgfkeysvalueof{/exsh/author font}\pgfkeysvalueof{/exsh/exauthor}} - \end{beamercolorbox}% - \begin{beamercolorbox}[wd=.5\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm,rightskip=.3cm plus1fil]{author in head/foot}% - \usebeamerfont{author in head/foot} - \inserttitle - \hfill\insertpagenumber - \end{beamercolorbox}}% - \vskip0pt% -} - - -\ifluatex - \let\exsh@dlua\directlua -\else - \def\exsh@dlua#1{} -\fi - -%change only some catcodes to -\begingroup -\catcode`!=0 -\catcode`\@=11 -\catcode`\_=12 -\catcode`\{=12 %set those to the same value (11/12) as below! -\catcode`\}=12 % -\catcode`<=1 -\catcode`>=2 -\catcode`\~=11 -\catcode`\\=11 -%% Expanded, when \catcode`\^^M=12 holds -!global!long!def!exsh@start@Lexercise#1\end{Lexercise}< % - !exsh@dlua % - !endgroup!end% -> -!endgroup - -\def\exsh@lua@catcodesBG{ -\begingroup -\catcode`!=12 -\catcode`\$=12 -\catcode`\#=12 -\catcode`\_=12 -\catcode`\^=12 -\catcode`\&=12 -\catcode`\|=12 -\catcode`\{=12 %set those to the same value (11/12) as above! -\catcode`\}=12 % -\catcode`\~=12 -\catcode`\@=11 -\catcode`\%=12 -\catcode`\^^I=12 -\catcode`\^^J=12\catcode`\^^M=12\catcode`\\=11\endlinechar-1} - -\newenvironment{Lexercise}{% - \exsh@lua@catcodesBG\exsh@start@Lexercise% -}{% - \ifluatex - \exsh@dlua{tex.print(exsh_cur_exercise)}% - \else - Lexercise needs Lua\LaTeX! - \fi -} - -\exsh@dlua{dofile("exsh_lexercise.lua")} - diff --git a/exercisesheets.sty b/exercisesheets.sty index cad2a20..0192099 100644 --- a/exercisesheets.sty +++ b/exercisesheets.sty @@ -1192,6 +1192,76 @@ }% } + +\ifexsh@beamer +\def\exsh@solutiontitle#1{ + \ifbool{exsh@beameruseblocks}{% + \begin{alertblock}{}% + \pgfkeysvalueof{/exsh/solution title font}% + \pgfkeysvalueof{/exsh/strings/solution} % + (\pgfkeysvalueof{/exsh/strings/exercise} \arabic{section}% + \ifnum\@enumdepth>0\alph{enumi}\fi)% + \end{alertblock} + }{ + \begin{beamercolorbox}[rounded=true,wd={#1}]% + {block title alerted} + \pgfkeysvalueof{/exsh/solution title font}% + \pgfkeysvalueof{/exsh/strings/solution} % + (\pgfkeysvalueof{/exsh/strings/exercise} \arabic{section}% + \ifnum\@enumdepth>0\alph{enumi}\fi)% + \end{beamercolorbox} + } +} +\newcommand{\solutiontitle}[1][\linewidth]{ + \ifbool{exsh@defersolutiontitle}{% + \ifhmode \linebreak\fi\exsh@solutiontitle{#1} + }{}% +} + + +\long\def\exsh@processframes#1\newframe{% +\ifstrequal{#1}{}{}{% +\clearpage +\begin{frame}[t] + \solutiontitle[\textwidth] + #1 +\end{frame}% +\exsh@processframes% +}%no whitespace here is crucial for end detecttion +} + + +\long\def\exsh@collectedframe#1{ +\exsh@processframes#1\newframe\newframe +} + +\else +%this command is only usefule for exercisesheets-beamer to place +%the deferred title within a new frame +\newcommand{\solutiontitle}[1][]{} +\fi + +\ifexsh@beamer +\def\exsh@startsolution{% + \ifnum\@enumdepth=0 + \clearpage + \fi +% \usebeamercolor{block title alerted} +% \setbeamercolor{block body}{bg=bg,fg=fg} +% \block{} +% \pgfkeysvalueof{/exsh/solution title font}% +% \pgfkeysvalueof{/exsh/strings/solution} % +% (\pgfkeysvalueof{/exsh/strings/exercise} \arabic{section}% +% \alph{enumi})% +% \endblock + \ifbool{exsh@framed}{\exsh@defersolutiontitletrue}{} + \ifbool{exsh@defersolutiontitle}{}{% + \ifhmode \linebreak\fi + \exsh@solutiontitle{\linewidth} + }% + \ifbool{exsh@framed}{\Collect@Body\exsh@collectedframe}{}% +}% +\else \def\exsh@startsolution{\@afterindentfalse \vskip\pgfkeysvalueof{/exsh/above solution skip}\relax% {\parindent \z@ @@ -1199,13 +1269,7 @@ \pgfkeysvalueof{/exsh/strings/solution}:\par}\nobreak% \@afterheading }% - -%this command is only usefule for exercisesheets-beamer to place -%the deferred title within a new frame -\newcommand{\solutiontitle}[1][]{} - -%the regular version of exercisesheets.sty skips all beamer solutions -\newenvironment{beamersolution}[1][]{\exsh@skipsolution}{}% +\fi \long\def\exsh@skipsolution#1{% \ifstrequal{#1}{\end}{\exsh@endsolution}{\exsh@skipsolution}% @@ -1221,12 +1285,41 @@ }% } - -\newcommand{\pun}[1][]{% - \PackageWarning{exercisesheets}{Obsolete \string\pun[] macro used. Please use - something\MessageBreak like \string\points{10} or \string\points{oral} instead.}{}% - \exsh@subexpoints{#1}% +\ifexsh@beamer +\newenvironment<>{beamersolution}[1][]{% + \pgfkeys{exsh,every solution,#1,solution font}% + \ifthenelse{\equal{oral}{\pgfkeysvalueof{/exsh/points}}}{% + \ifbool{exsh@oralsolutions}{% + \let\next\exsh@startsolution + }{% + \let\next\exsh@skipsolution + }% + }{% + \ifbool{exsh@nonoralsolutions}{% + \let\next\exsh@startsolution + }{% + \let\next\exsh@skipsolution + }% + }% + \ifbool{exsh@forcesample}{% + \ifbool{exsh@samplesolutions}{% + \let\next\exsh@startsolution + }{}% + }{}% + \next +}{% +% \ifbool{exsh@framed}{\end{frame}}{} + \ifthenelse{\equal{oral}{\pgfkeysvalueof{/exsh/points}}}{% + \ifbool{exsh@oralsolutions}{\clearpage}{}% + }{% + \ifbool{exsh@nonoralsolutions}{\clearpage}{}% + }% } +\else +%the regular version of exercisesheets.sty skips all beamer solutions +\newenvironment{beamersolution}[1][]{\exsh@skipsolution}{}% +\fi + \newcommand{\points}[2][]{% \ifthenelse{\equal{}{#2}}{}{\exshset{points=#2}}% \bgroup% @@ -1363,6 +1456,48 @@ } +\ifexsh@beamer +\setbeamertemplate{headline}{% +% \leavevmode% + \ifbool{exsh@beamerwithheadline}{% + \begin{beamercolorbox}[wd=\paperwidth,vmode]{frametitle} + \vspace{0.4em} + \leavevmode + \begingroup + \footnotesize% + \hspace*{2ex}{\pgfkeysvalueof{/exsh/subject font}% + \pgfkeysvalueof{/exsh/subject}} \hfill% + {\pgfkeysvalueof{/exsh/semester font}% + \pgfkeysvalueof{/exsh/semester}}\hspace{2ex}\hfil% + \vspace{1mm}\linebreak% + \hspace*{2ex}{\pgfkeysvalueof{/exsh/author font}\exsh@author}% + \hfill{\pgfkeysvalueof{/exsh/date font}% + \pgfkeysvalueof{/exsh/date}}% + \hspace{2ex}\hfil%\vspace{-1em} + \endgroup + \vspace{0.4em} + \end{beamercolorbox}% + \vspace*{3mm} + \vskip\pgfkeysvalueof{/exsh/below slide headline skip}\relax% + }{}% +} +\addtobeamertemplate{frametitle}{\vspace{-3mm}}{} + +\setbeamertemplate{footline} +{% + \leavevmode% + \hbox{\begin{beamercolorbox}[wd=.5\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm,rightskip=.3cm]{frametitle}% + {\pgfkeysvalueof{/exsh/author font}\pgfkeysvalueof{/exsh/exauthor}} + \end{beamercolorbox}% + \begin{beamercolorbox}[wd=.5\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm,rightskip=.3cm plus1fil]{author in head/foot}% + \usebeamerfont{author in head/foot} + \inserttitle + \hfill\insertpagenumber + \end{beamercolorbox}}% + \vskip0pt% +} +\fi + \ifluatex \let\exsh@dlua\directlua \else -- cgit v1.2.3