From d25ccb5d0c5cc4709aa606157c662ae5a86968e7 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 6 Mar 2024 21:09:06 +0000 Subject: jslectureplanner (6mar24) git-svn-id: svn://tug.org/texlive/trunk@70443 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/doc/latex/jslectureplanner/README | 3 + .../examples/English/lecturebib-english.pdf | Bin 85100 -> 88425 bytes .../examples/English/lecturehandout-english.pdf | Bin 57920 -> 60454 bytes .../English/lecturepresentation-english.pdf | Bin 84600 -> 88567 bytes .../examples/English/lectureprogram-english.pdf | Bin 56906 -> 59439 bytes .../examples/English/lecturescript-english.pdf | Bin 34578 -> 36156 bytes .../examples/English/membertable-blank-english.pdf | Bin 28442 -> 30020 bytes .../English/membertable-filled-english.pdf | Bin 28449 -> 30032 bytes .../English/presencetable-blank-english.pdf | Bin 27971 -> 29552 bytes .../English/presencetable-filled-english.pdf | Bin 26749 -> 28328 bytes .../examples/English/presentation-list-english.pdf | Bin 25685 -> 27267 bytes .../examples/German/lecturebib.pdf | Bin 85483 -> 88808 bytes .../examples/German/lecturehandout.pdf | Bin 59144 -> 61681 bytes .../examples/German/lecturepresentation.pdf | Bin 84982 -> 88958 bytes .../examples/German/lectureprogram.pdf | Bin 57898 -> 60430 bytes .../examples/German/lecturescript.pdf | Bin 34769 -> 36385 bytes .../examples/German/membertable-blank.pdf | Bin 28386 -> 29974 bytes .../examples/German/membertable-filled.pdf | Bin 28506 -> 30087 bytes .../examples/German/presencetable-blank.pdf | Bin 27891 -> 29465 bytes .../examples/German/presencetable-filled.pdf | Bin 26778 -> 28357 bytes .../examples/German/presentation-list.pdf | Bin 26863 -> 28442 bytes .../latex/jslectureplanner/jslectureplanner.pdf | Bin 480426 -> 491334 bytes .../latex/jslectureplanner/jslectureplanner.tex | 9 +- .../tex/latex/jslectureplanner/cologne.lps | 2 + .../tex/latex/jslectureplanner/english.lps | 2 + .../tex/latex/jslectureplanner/german-default.lps | 2 + .../latex/jslectureplanner/jslectureplanner.sty | 618 ++++++++++++--------- .../tex/latex/jslectureplanner/jsmembertable.sty | 47 +- 28 files changed, 406 insertions(+), 277 deletions(-) diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/README b/Master/texmf-dist/doc/latex/jslectureplanner/README index e5dae559d2b..a24d5fe3db6 100644 --- a/Master/texmf-dist/doc/latex/jslectureplanner/README +++ b/Master/texmf-dist/doc/latex/jslectureplanner/README @@ -68,6 +68,9 @@ instructions; also have a look at the example files. == CHANGES == +* V. 1.13 (2024-03-06): - use legacy keyvals rather than xkeyval. + - fix row spacing in prestables. + * V. 1.12 (2020-12-08): - Correctly parse staryear/endyear. * V. 1.11 (2020-05-11): - Allow for customization of program and presentation lists. diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturebib-english.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturebib-english.pdf index 7fe67e794fb..542db275c6b 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturebib-english.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturebib-english.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturehandout-english.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturehandout-english.pdf index 24941bb9b11..ed1396e8f9e 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturehandout-english.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturehandout-english.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturepresentation-english.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturepresentation-english.pdf index 4f8220e8e5b..3d8ad8e82c6 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturepresentation-english.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturepresentation-english.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lectureprogram-english.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lectureprogram-english.pdf index 0b8f2291802..cfde124a7c2 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lectureprogram-english.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lectureprogram-english.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturescript-english.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturescript-english.pdf index b756c857050..0db3688a31e 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturescript-english.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturescript-english.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/membertable-blank-english.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/membertable-blank-english.pdf index 30b972c602e..316be924fd2 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/membertable-blank-english.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/membertable-blank-english.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/membertable-filled-english.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/membertable-filled-english.pdf index c844df95f24..ba58765a8ce 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/membertable-filled-english.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/membertable-filled-english.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presencetable-blank-english.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presencetable-blank-english.pdf index fbfee149f88..ec218f51d1e 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presencetable-blank-english.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presencetable-blank-english.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presencetable-filled-english.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presencetable-filled-english.pdf index 4e81e8d909c..1eba2fe0014 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presencetable-filled-english.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presencetable-filled-english.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presentation-list-english.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presentation-list-english.pdf index 883a071f06d..272778c9229 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presentation-list-english.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presentation-list-english.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturebib.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturebib.pdf index dc7be35d41c..8f277aa353d 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturebib.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturebib.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturehandout.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturehandout.pdf index 3bd76674b0d..70ea93b44de 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturehandout.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturehandout.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturepresentation.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturepresentation.pdf index 4e02a240b84..34e7841a847 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturepresentation.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturepresentation.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lectureprogram.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lectureprogram.pdf index 58cf55305ff..75a85341865 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lectureprogram.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lectureprogram.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturescript.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturescript.pdf index 1f535cb2f10..5848194443a 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturescript.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturescript.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/membertable-blank.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/membertable-blank.pdf index 67df001b4cc..e4f05154508 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/membertable-blank.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/membertable-blank.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/membertable-filled.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/membertable-filled.pdf index db9feda9756..ad19e5f6371 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/membertable-filled.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/membertable-filled.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presencetable-blank.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presencetable-blank.pdf index b846ca57794..1471d7d34ad 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presencetable-blank.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presencetable-blank.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presencetable-filled.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presencetable-filled.pdf index 0cd64cb49a3..76cc3e3b94e 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presencetable-filled.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presencetable-filled.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presentation-list.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presentation-list.pdf index 62f446fa15c..873fa0f91f1 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presentation-list.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presentation-list.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.pdf b/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.pdf index 971a3b29bcd..64b68382aa0 100644 Binary files a/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.pdf and b/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.pdf differ diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.tex b/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.tex index ecadf4b79aa..d2d9d4837fb 100644 --- a/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.tex +++ b/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.tex @@ -87,7 +87,7 @@ colorlinks=false \author{Jürgen Spitzmüller% \thanks{Please report issues via \protect\url{https://github.com/jspitz/jslectureplanner}.}} -\date{Version 1.12, 2020/12/08} +\date{Version 1.13, 2024/03/06} \maketitle @@ -151,7 +151,6 @@ The following packages are required and loaded by \jslp: \item \textsf{datetime2} \item \textsf{etoolbox} \item \textsf{ifthen} - \item \textsf{xkeyval} \item \textsf{xparse} \end{itemize} \pagebreak @@ -1239,7 +1238,6 @@ The following packages are required and loaded by \jsmt: \item \textsf{calc} \item \textsf{longtable} \item \textsf{hhline} - \item \textsf{xkeyval} \end{itemize} \jsmt\ can be used independently of \jslp\ to some degree. The latter package is only required for specific @@ -1439,6 +1437,11 @@ the \jslp\ style files. Thanks, Dominik. \section{Release History} \begin{itemize} +\item 2024/03/06 (v. 1.13): +\begin{itemize} + \item Use legacy keyvals rather than \textsf{xkeyval}. + \item Fix row spacing in prestables. +\end{itemize} \item 2020/12/08 (v. 1.12): \begin{itemize} \item Correctly parse staryear/endyear. diff --git a/Master/texmf-dist/tex/latex/jslectureplanner/cologne.lps b/Master/texmf-dist/tex/latex/jslectureplanner/cologne.lps index da7d17534de..85ed5b31e0a 100644 --- a/Master/texmf-dist/tex/latex/jslectureplanner/cologne.lps +++ b/Master/texmf-dist/tex/latex/jslectureplanner/cologne.lps @@ -23,6 +23,8 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Version: 1.13 -- 2024/03/06 + % Additional lecture types \DefLecType{evl}{EVL}{Einf\"uhrungsvorlesung}{Vorlesung}% introductory lecture \DefLecType{es}{ES}{Einf\"uhrungsseminar}{Sitzung}% undergraduate seminar diff --git a/Master/texmf-dist/tex/latex/jslectureplanner/english.lps b/Master/texmf-dist/tex/latex/jslectureplanner/english.lps index 0a203dc1874..dec42983db1 100644 --- a/Master/texmf-dist/tex/latex/jslectureplanner/english.lps +++ b/Master/texmf-dist/tex/latex/jslectureplanner/english.lps @@ -27,6 +27,8 @@ % English localization of the default strings used by the jslectureplanner package % +% Version: 1.13 -- 2024/03/06 + % Lecture types \DefLecType{vl}{LEC}{Lecture}{Lecture}% lecture \DefLecType{ps}{USE}{Undergraduate Seminar}{Session}% undergraduate seminar diff --git a/Master/texmf-dist/tex/latex/jslectureplanner/german-default.lps b/Master/texmf-dist/tex/latex/jslectureplanner/german-default.lps index 1ce08f93031..b09edaf673c 100644 --- a/Master/texmf-dist/tex/latex/jslectureplanner/german-default.lps +++ b/Master/texmf-dist/tex/latex/jslectureplanner/german-default.lps @@ -27,6 +27,8 @@ % Default strings (German) used by the jslectureplanner package % +% Version: 1.13 -- 2024/03/06 + % Lecture types \DefLecType{vl}{VL}{Vorlesung}{Vorlesung}% lecture \DefLecType{ps}{PS}{Proseminar}{Sitzung}% undergraduate seminar diff --git a/Master/texmf-dist/tex/latex/jslectureplanner/jslectureplanner.sty b/Master/texmf-dist/tex/latex/jslectureplanner/jslectureplanner.sty index 31bbfd3530c..270f9b48cbc 100644 --- a/Master/texmf-dist/tex/latex/jslectureplanner/jslectureplanner.sty +++ b/Master/texmf-dist/tex/latex/jslectureplanner/jslectureplanner.sty @@ -23,8 +23,8 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\def\filedate{2020/12/08} -\def\fileversion{1.12} +\def\filedate{2024/03/06} +\def\fileversion{1.13} \def\filename{jslectureplanner.sty} \NeedsTeXFormat{LaTeX2e} @@ -36,7 +36,6 @@ % REQUIRED PACKAGES % \RequirePackage{etoolbox} -\RequirePackage{xkeyval} \RequirePackage[calc,useregional]{datetime2} \RequirePackage{calc} \RequirePackage{ifthen} @@ -218,95 +217,112 @@ % % PACKAGE OPTIONS % -\define@key{lec}{lectype}{% - \js@AtEndPreambleIfInPreamble{% - \ifcsundef{lectype@#1}{% - \PackageError{jslectureplanner}{Lecture type '#1' is not defined!}{% - Please consult the package manual for instructions how to define it} - }{} - \def\lectype{\csuse{lectype@#1}}% - \def\lectypeverb{\csuse{lectypeverb@#1}}% - \def\lectypesession{\csuse{lectypesession@#1}}% - }% -} -\DeclareOptionX{type}{\setkeys{lec}{lectype=#1}} - -\define@key{lec}{lecsem}{% - \js@AtEndPreambleIfInPreamble{% - \ifcsundef{lecsemshort@#1}{% - \PackageError{jslectureplanner}{Semester type '#1' is not defined!}{% - Please consult the package manual for instructions how to define it} - }{} - \def\lecsemshort{\csuse{lecsemshort@#1}}% - \def\lecsemverb{\csuse{lecsemverb@#1}}% - \def\@nextsem{\csuse{lecsemnext@#1}}% - \def\lecnsemshort{\csuse{lecsemshort@\@nextsem}}% - \def\lecnsemverb{\csuse{lecsemverb@\@nextsem}}% - \def\lecnsemny{\csuse{lecsemnextny@#1}}% - }% -} -\DeclareOptionX{semester}{\setkeys{lec}{lecsem=#1}} -\define@key{lec}{title}{\def\lectitle{#1}% +\DeclareKeys[lec] +{ + % type= + type.code = { + \js@AtEndPreambleIfInPreamble{% + \ifcsundef{lectype@#1}{% + \PackageError{jslectureplanner}{Lecture type '#1' is not defined!}{% + Please consult the package manual for instructions how to define it} + }{} + \def\lectype{\csuse{lectype@#1}}% + \def\lectypeverb{\csuse{lectypeverb@#1}}% + \def\lectypesession{\csuse{lectypesession@#1}}% + }% + }, + % semester= + semester.code = { + \js@AtEndPreambleIfInPreamble{% + \ifcsundef{lecsemshort@#1}{% + \PackageError{jslectureplanner}{Semester type '#1' is not defined!}{% + Please consult the package manual for instructions how to define it} + }{} + \def\lecsemshort{\csuse{lecsemshort@#1}}% + \def\lecsemverb{\csuse{lecsemverb@#1}}% + \def\@nextsem{\csuse{lecsemnext@#1}}% + \def\lecnsemshort{\csuse{lecsemshort@\@nextsem}}% + \def\lecnsemverb{\csuse{lecsemverb@\@nextsem}}% + \def\lecnsemny{\csuse{lecsemnextny@#1}}% + }% + }, + % title= + title.code = { + \def\lectitle{#1}% \ifx\lecshorttitle\empty% \def\lecshorttitle{#1}% \global\togglefalse{uniquelecshorttitle}% - \fi} -\define@key{lec}{titlesep}{\def\lectitlesep{#1}} -\define@key{lec}{subtitle}{\def\lecsubtitle{#1}} -\define@key{lec}{shorttitle}{% - \def\lecshorttitle{#1}% - \global\toggletrue{uniquelecshorttitle}} -\define@key{lec}{year}{\def\lecyear{#1}} -\define@key{lec}{endyear}{\def\lecendyear{#1}} -\define@key{lec}{uni}{\def\lecuniversity{#1}} -\define@key{lec}{institute}{\def\lecinstitute{#1}} -\define@key{lec}{platform}{\def\lecplatform{#1}} -\define@key{lec}{officehours}{\def\officehours{#1}} -\define@key{lec}{officenumber}{\def\officenumber{#1}} -\define@key{lec}{room}{\def\lecroom{#1}} -\define@key{lec}{startdate}{\def\lecstartdate{#1}} -\define@key{lec}{starttime}{\def\@lecstarttime{#1}\def\lecstarttime{\DTMtime{#1}}} -\define@key{lec}{duration}{\def\lecduration{#1}} -\define@key{lec}{instructor}{\def\lecinstructor{#1}% - \ifx\lecshortinstructor\empty\def\lecshortinstructor{#1}\fi} -\define@key{lec}{shortinstructor}{% + \fi + }, + % titlesep=<sep> + titlesep.store = \lectitlesep, + % subtitle=<sep> + subtitle.store = \lecsubtitle, + % shorttitle=<title> + shorttitle.code = { + \def\lecshorttitle{#1} + \global\toggletrue{uniquelecshorttitle} + }, + % year=<year> + year.store = \lecyear, + % endyear=<year> + endyear.store = \lecendyear, + % uni=<university> + uni.store = \lecuniversity, + % institute=<institute> + institute.store = \lecinstitute, + % platform=<platform> + platform.store = \lecplatform, + % officehours=<officehours> + officehours.store = \lecofficehours, + % officenumber=<officenumber> + officenumber.store = \lecofficenumber, + % room=<room> + room.store = \lecroom, + % startdate=<startdate> + startdate.store = \lecstartdate, + % starttime=<starttime> + starttime.code = { + \def\@lecstarttime{#1} + \def\lecstarttime{\DTMtime{#1}} + }, + % duration=<duration> + duration.store = \lecduration, + % instructor=<instructor> + instructor.code = { + \def\lecinstructor{#1}% + \ifx\lecshortinstructor\empty + \def\lecshortinstructor{#1} + \fi + }, + % shortinstructor=<shortinstructor> + shortinstructor.code = { \def\lecshortinstructor{#1}% - \global\toggletrue{uniquelecshortinstructor}} -\define@key{lec}{style}{\AtEndOfPackage{\input{#1.lps}}} -\define@key{lec}{interval}{% + \global\toggletrue{uniquelecshortinstructor} + }, + % style=<style> + style.code = { + \AtEndOfPackage{\input{#1.lps}} + }, + % interval=<interval> + interval.code = { % test if the input is a number % courtesy of egreg at http://tex.stackexchange.com/a/50131 \if\relax\detokenize\expandafter{\romannumeral-0#1}\relax \setcounter{lecinterval}{#1}% \else \PackageError{jslectureplanner}{% - Value of 'interval' option must be a number\MessageBreak - ('#1' was given instead)}{}% + Value of 'interval' option must be a number\MessageBreak + ('#1' was given instead)}{}% \fi + }, + % sestitlesep=<sestitlesep> + sestitlesep.store = \sestitlesep } -\define@key{lec}{sestitlesep}{\def\sestitlesep{#1}} - -\DeclareOptionX{title}{\setkeys{lec}{title={#1}}} -\DeclareOptionX{titlesep}{\setkeys{lec}{titlesep={#1}}} -\DeclareOptionX{subtitle}{\setkeys{lec}{subtitle={#1}}} -\DeclareOptionX{shorttitle}{\setkeys{lec}{shorttitle={#1}}} -\DeclareOptionX{year}{\setkeys{lec}{year=#1}} -\DeclareOptionX{uni}{\setkeys{lec}{uni={#1}}} -\DeclareOptionX{institute}{\setkeys{lec}{institute={#1}}} -\DeclareOptionX{startdate}{\setkeys{lec}{startdate=#1}} -\DeclareOptionX{starttime}{\setkeys{lec}{starttime=#1}} -\DeclareOptionX{instructor}{\setkeys{lec}{instructor={#1}}} -\DeclareOptionX{shortinstructor}{\setkeys{lec}{shortinstructor={#1}}} -\DeclareOptionX{platform}{\setkeys{lec}{platform={#1}}} -\DeclareOptionX{officehours}{\setkeys{lec}{officehours={#1}}} -\DeclareOptionX{officenumber}{\setkeys{lec}{officenumber={#1}}} -\DeclareOptionX{room}{\setkeys{lec}{room={#1}}} -\DeclareOptionX{style}{\setkeys{lec}{style=#1}} -\DeclareOptionX{interval}{\setkeys{lec}{interval=#1}} -\DeclareOptionX{sestitlesep}{\setkeys{lec}{sestitlesep=#1}} - -\ProcessOptionsX + +% Process package options +\ProcessKeyOptions[lec] % % End Options @@ -323,39 +339,39 @@ \NewDocumentCommand \LecYear { m m } { % #1: semester/term - \setkeys{lec}{lecsem=#1} + \SetKeys[lec]{semester=#1} % split #2 at / if available (startyear/endyear) \seq_set_split:Nnn \seq_jslp_lec_year { / } { #2 } \seq_pop_left:NNT \seq_jslp_lec_year \tl_jslp_start_year { - \setkeys{lec}{year=\tl_jslp_start_year} + \SetKeys[lec]{year=\tl_jslp_start_year} } \seq_get_right:NNT \seq_jslp_lec_year \tl_jslp_end_year { - \setkeys{lec}{endyear=\tl_jslp_end_year} + \SetKeys[lec]{endyear=\tl_jslp_end_year} } } \ExplSyntaxOff -\newcommand*{\LecType}[1]{\setkeys{lec}{lectype=#1}} -\newcommand*{\LecTitle}[2][]{\setkeys{lec}{shorttitle={#2},#1,title={#2}}} -\newcommand*{\LecTitleSep}[1]{\setkeys{lec}{titlesep={#1}}} -\newcommand*{\LecSubTitle}[1]{\setkeys{lec}{subtitle={#1}}} -\newcommand*{\LecUni}[1]{\setkeys{lec}{uni={#1}}} -\newcommand*{\LecInstitute}[1]{\setkeys{lec}{institute={#1}}} -\newcommand*{\LecRoom}[1]{\setkeys{lec}{room={#1}}} -\newcommand*{\LecStartDate}[1]{\setkeys{lec}{startdate=#1}} -\newcommand*{\LecStartTime}[1]{\setkeys{lec}{starttime=#1}} -\newcommand*{\LecDuration}[1]{\setkeys{lec}{duration=#1}} +\newcommand*{\LecType}[1]{\SetKeys[lec]{type=#1}} +\newcommand*{\LecTitle}[2][]{\SetKeys[lec]{shorttitle={#2},#1,title={#2}}} +\newcommand*{\LecTitleSep}[1]{\SetKeys[lec]{titlesep={#1}}} +\newcommand*{\LecSubTitle}[1]{\SetKeys[lec]{subtitle={#1}}} +\newcommand*{\LecUni}[1]{\SetKeys[lec]{uni={#1}}} +\newcommand*{\LecInstitute}[1]{\SetKeys[lec]{institute={#1}}} +\newcommand*{\LecRoom}[1]{\SetKeys[lec]{room={#1}}} +\newcommand*{\LecStartDate}[1]{\SetKeys[lec]{startdate=#1}} +\newcommand*{\LecStartTime}[1]{\SetKeys[lec]{starttime=#1}} +\newcommand*{\LecDuration}[1]{\SetKeys[lec]{duration=#1}} \newcommand*{\LecInstructor}[2][\empty]{% \ifx#1\empty - \setkeys{lec}{instructor={#2}}% + \SetKeys[lec]{instructor={#2}}% \else - \setkeys{lec}{instructor={#2},shortinstructor={#1}}% + \SetKeys[lec]{instructor={#2},shortinstructor={#1}}% \fi } -\newcommand*{\LecInterval}[1]{\setkeys{lec}{interval=#1}} -\newcommand*{\SessionTitleSep}[1]{\setkeys{lec}{sestitlesep=#1}} +\newcommand*{\LecInterval}[1]{\SetKeys[lec]{interval=#1}} +\newcommand*{\SessionTitleSep}[1]{\SetKeys[lec]{sestitlesep=#1}} % @@ -497,16 +513,21 @@ % 2.) Term types % -\define@key{semtype}{next}{\csdef{@ltn}{#1}} -\define@boolkey{semtype}{nextny}[true]{} +\newif\if@jslp@semtype@nextny\@jslp@semtype@nextnyfalse +\DeclareKeys[semtype] +{ + next.store = \@ltn, + nextny.if = @jslp@semtype@nextny +} + \newcommand*\DefSemType[4][\empty]{% \csdef{@ltn}{} \csdef{lecsemshort@#2}{#3} \csdef{lecsemverb@#2}{#4} \ifx\empty#1\else% - \setkeys{semtype}{nextny=false}% - \setkeys{semtype}{#1}% - \ifKV@semtype@nextny + \SetKeys[semtype]{nextny=false}% + \SetKeys[semtype]{#1}% + \if@jslp@semtype@nextny \csdef{lecsemnextny@#2}{y} \else \csdef{lecsemnextny@#2}{n} @@ -650,80 +671,115 @@ % % Beamer program generation -\define@key{beamerprogram}{title}{\csdef{@bptitle}{#1}} -\define@key{beamerprogram}{options}{\csdef{@bpopts}{#1}} -\define@key{beamerprogram}{listoptions}{\csdef{@bplistopts}{#1}} -\define@key{beamerprogram}{overlayarg}{\csdef{@bpolarg}{#1}} -\define@key{beamerprogram}{overlayarg2}{\csdef{@bpolargii}{#1}} -\define@key{beamerprogram}{overlayarg3}{\csdef{@bpolargiii}{#1}} -\define@key{beamerprogram}{overlayarg4}{\csdef{@bpolargiv}{#1}} -\define@boolkey{beamerprogram}{alerted}[true]{} -\define@boolkey{beamerprogram}{blocksonly}[true]{} -\define@boolkey{beamerprogram}{uncover}[true]{} +\newif\if@jslp@beamerprogram@alerted\@jslp@beamerprogram@alertedfalse +\newif\if@jslp@beamerprogram@blocksonly\@jslp@beamerprogram@blocksonlyfalse +\newif\if@jslp@beamerprogram@uncover\@jslp@beamerprogram@uncoverfalse + +\DeclareKeys[beamerprogram] +{ + % title=<title> + title.store = \@bptitle, + % options = <options> + options.store = \@bpopts, + % listoptions = <options> + listoptions.store = \@bplistopts, + % overlayarg = <arg> + overlayarg.store = \@bpolarg, + % overlayarg2 = <arg> + overlayarg2.store = \@bpolargii, + % overlayarg3 = <arg> + overlayarg3.store = \@bpolargiii, + % overlayarg4 = <arg> + overlayarg4.store = \@bpolargiv, + % overlayarg = <true|false> [not functional!] + alerted.if = @jslp@beamerprogram@alerted, + % blocksonly = <true|false> + blocksonly.if = @jslp@beamerprogram@blocksonly, + % uncover = <true|false> + uncover.if = @jslp@beamerprogram@uncover +} % Overlay specifications for uncover programs \newcommand*\beameruncoverspec{\beamerdefaultoverlayspecification{<+(1)->}} \newcommand*\beameruncoverffslidesspec{\beamerdefaultoverlayspecification{<+(-1)->}} \newcommand*\beameruncoverblocksonlyspec{\beamerdefaultoverlayspecification{<+->}} +\newcommand*\beameralertspec{} \newcommand*\makebeamerprogram[1][]{% \csdef{@bptitle}{\lecprogram} \def\btitleapp{} \numdef\pframes{\thefbreaks + 1} - \setkeys{beamerprogram}{alerted=false} - \setkeys{beamerprogram}{blocksonly=false} - \setkeys{beamerprogram}{uncover=false} - \setkeys{beamerprogram}{#1} + \SetKeys[beamerprogram]{alerted=false} + \SetKeys[beamerprogram]{blocksonly=false} + \SetKeys[beamerprogram]{uncover=false} + \SetKeys[beamerprogram]{#1} \def\bpdescbeg{\begin{BeamerProgramList}} - \ifKV@beamerprogram@alerted + \providebool{alerted} + \if@jslp@beamerprogram@alerted + \booltrue{alerted} + \else + \boolfalse{alerted} \fi \providebool{uncoveredlist} - \ifKV@beamerprogram@uncover + \if@jslp@beamerprogram@uncover \booltrue{uncoveredlist} \else \boolfalse{uncoveredlist} \fi - \ifKV@beamerprogram@blocksonly - \ifcsdef{@bpolarg}{% - \ifcsdef{@bpopts}{% - \begingroup\edef\tempa{\endgroup\noexpand% - \begin{frame}<\csuse{@bpolarg}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + \if@jslp@beamerprogram@blocksonly + \ifbool{alerted}{% + \ifbool{uncoveredlist}% + {\renewcommand*\beameruncoverblocksonlyspec{\beamerdefaultoverlayspecification{<+-| alert@+>}}}% + {\renewcommand*\beameralertspec{\beamerdefaultoverlayspecification{<alert@+>}}}% + }{} + \ifcsvoid{@bpolarg}{% + \ifcsvoid{@bpopts}{% + \begin{frame}[label=beamerprogram]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}<\csuse{@bpolarg}>[label=beamerprogram]{\csuse{@bptitle}\btitleapp} - }% - }{% - \ifcsdef{@bpopts}{% \begingroup\edef\tempa{\endgroup\noexpand% \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + }% + }{% + \ifcsvoid{@bpopts}{% + \begin{frame}<\csuse{@bpolarg}>[label=beamerprogram]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}[label=beamerprogram]{\csuse{@bptitle}\btitleapp} + \begingroup\edef\tempa{\endgroup\noexpand% + \begin{frame}<\csuse{@bpolarg}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa }% }% - \ifbool{uncoveredlist}{\beameruncoverblocksonlyspec}{} + \ifbool{uncoveredlist}{\beameruncoverblocksonlyspec}{\beameralertspec} \begin{BeamerProgramList} \ifcsempty{programblocklistbeamer}{\BeamerProgramBlockBlocksOnlyItem{}{}}{\programblocklistbeamer} \end{BeamerProgramList} \end{frame} - \else% not \ifKV@beamerprogram@blocksonly + \else% not \if@jslp@beamerprogram@blocksonly + \ifbool{alerted}{% + \ifbool{uncoveredlist}% + {% + \renewcommand*\beameruncoverspec{\beamerdefaultoverlayspecification{<+(1)-| alert@+(1)>}} + \renewcommand*\beameruncoverffslidesspec{\beamerdefaultoverlayspecification{<+(-1)-| alert@+(-1)>}} + }% + {\renewcommand*\beameralertspec{\beamerdefaultoverlayspecification{<alert@+(1)>}}}% + }{} % All but last slide(s) are generated in what follows \@ifundefined{programlistbeamerii}{}{% \def\btitleapp{\ (1/\pframes)} - \ifcsdef{@bpolarg}{% - \ifcsdef{@bpopts}{% - \begingroup\edef\tempa{\endgroup\noexpand% - \begin{frame}<\csuse{@bpolarg}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + \ifcsvoid{@bpolarg}{% + \ifcsvoid{@bpopts}{% + \begin{frame}[label=beamerprogram]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}<\csuse{@bpolarg}>[label=beamerprogram]{\csuse{@bptitle}\btitleapp} - }% - }{% - \ifcsdef{@bpopts}{% \begingroup\edef\tempa{\endgroup\noexpand% \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + }% + }{% + \ifcsvoid{@bpopts}{% + \begin{frame}<\csuse{@bpolarg}>[label=beamerprogram]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}[label=beamerprogram]{\csuse{@bptitle}\btitleapp} + \begingroup\edef\tempa{\endgroup\noexpand% + \begin{frame}<\csuse{@bpolarg}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa }% - }% - \ifbool{uncoveredlist}{\beameruncoverspec}{} + }% + \ifbool{uncoveredlist}{\beameruncoverspec}{\beameralertspec} \begin{BeamerProgramList} \programlistbeamerii \end{BeamerProgramList} @@ -731,22 +787,22 @@ } \@ifundefined{programlistbeameriii}{}{% \def\btitleapp{\ (2/\pframes)} - \ifcsdef{@bpolargii}{% - \ifcsdef{@bpopts}{% - \begingroup\edef\tempa{\endgroup\noexpand% - \begin{frame}<\csuse{@bpolargii}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + \ifcsvoid{@bpolargii}{% + \ifcsvoid{@bpopts}{% + \begin{frame}[label=beamerprogram2]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}<\csuse{@bpolargii}>[label=beamerprogram2]{\csuse{@bptitle}\btitleapp} - }% - }{% - \ifcsdef{@bpopts}{% \begingroup\edef\tempa{\endgroup\noexpand% \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + }% + }{% + \ifcsvoid{@bpopts}{% + \begin{frame}<\csuse{@bpolargii}>[label=beamerprogram2]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}[label=beamerprogram2]{\csuse{@bptitle}\btitleapp} + \begingroup\edef\tempa{\endgroup\noexpand% + \begin{frame}<\csuse{@bpolargii}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa }% - }% - \ifbool{uncoveredlist}{\beameruncoverffslidesspec}{} + }% + \ifbool{uncoveredlist}{\beameruncoverffslidesspec}{\beameralertspec} \begin{BeamerProgramList} \programlistbeameriii \end{BeamerProgramList} @@ -754,22 +810,22 @@ } \@ifundefined{programlistbeameriv}{}{% \def\btitleapp{\ (3/\pframes)} - \ifcsdef{@bpolargiii}{% - \ifcsdef{@bpopts}{% - \begingroup\edef\tempa{\endgroup\noexpand% - \begin{frame}<\csuse{@bpolargiii}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + \ifcsvoid{@bpolargiii}{% + \ifcsvoid{@bpopts}{% + \begin{frame}[label=beamerprogram3]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}<\csuse{@bpolargiii}>[label=beamerprogram3]{\csuse{@bptitle}\btitleapp} - }% - }{% - \ifcsdef{@bpopts}{% \begingroup\edef\tempa{\endgroup\noexpand% \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + }% + }{% + \ifcsvoid{@bpopts}{% + \begin{frame}<\csuse{@bpolargiii}>[label=beamerprogram3]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}[label=beamerprogram3]{\csuse{@bptitle}\btitleapp} + \begingroup\edef\tempa{\endgroup\noexpand% + \begin{frame}<\csuse{@bpolargiii}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa }% - }% - \ifbool{uncoveredlist}{\beameruncoverffslidesspec}{} + }% + \ifbool{uncoveredlist}{\beameruncoverffslidesspec}{\beameralertspec} \begin{BeamerProgramList} \programlistbeameriv \end{BeamerProgramList} @@ -778,80 +834,80 @@ % The last slide is generated separately: \ifnumgreater{\thefbreaks}{0}{\def\btitleapp{\ (\pframes/\pframes)}}{} \@ifundefined{programlistbeamerii}{% - \ifcsdef{@bpolarg}{% - \ifcsdef{@bpopts}{% - \begingroup\edef\tempa{\endgroup\noexpand% - \begin{frame}<\csuse{@bpolarg}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa - }{% - \begin{frame}<\csuse{@bpolarg}>[label=beamerprogram]{\csuse{@bptitle}\btitleapp} - }% - }{% - \ifcsdef{@bpopts}{% + \ifcsvoid{@bpolarg}{% + \ifcsvoid{@bpopts}{% + \begin{frame}[label=beamerprogram]{\csuse{@bptitle}\btitleapp} + }{% \begingroup\edef\tempa{\endgroup\noexpand% \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + }% + }{% + \ifcsvoid{@bpopts}{% + \begin{frame}<\csuse{@bpolarg}>[label=beamerprogram]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}[label=beamerprogram]{\csuse{@bptitle}\btitleapp} - }% + \begingroup\edef\tempa{\endgroup\noexpand% + \begin{frame}<\csuse{@bpolarg}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + }% }% }{% \@ifundefined{programlistbeameriii}{% - \ifcsdef{@bpolargii}{% - \ifcsdef{@bpopts}{% - \begingroup\edef\tempa{\endgroup\noexpand% - \begin{frame}<\csuse{@bpolargii}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + \ifcsvoid{@bpolargii}{% + \ifcsvoid{@bpopts}{% + \begin{frame}[label=beamerprogram2]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}<\csuse{@bpolargii}>[label=beamerprogram2]{\csuse{@bptitle}\btitleapp} - }% - }{% - \ifcsdef{@bpopts}{% \begingroup\edef\tempa{\endgroup\noexpand% \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + }% + }{% + \ifcsvoid{@bpopts}{% + \begin{frame}<\csuse{@bpolargii}>[label=beamerprogram2]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}[label=beamerprogram2]{\csuse{@bptitle}\btitleapp} + \begingroup\edef\tempa{\endgroup\noexpand% + \begin{frame}<\csuse{@bpolargii}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa }% }% }{% \@ifundefined{programlistbeameriv}{% - \ifcsdef{@bpolargiii}{% - \ifcsdef{@bpopts}{% - \begingroup\edef\tempa{\endgroup\noexpand% - \begin{frame}<\csuse{@bpolargiii}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + \ifcsvoid{@bpolargiii}{% + \ifcsvoid{@bpopts}{% + \begin{frame}[label=beamerprogram3]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}<\csuse{@bpolargiii}>[label=beamerprogram3]{\csuse{@bptitle}\btitleapp} - }% - }{% - \ifcsdef{@bpopts}{% \begingroup\edef\tempa{\endgroup\noexpand% \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + }% + }{% + \ifcsvoid{@bpopts}{% + \begin{frame}<\csuse{@bpolargiii}>[label=beamerprogram3]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}[label=beamerprogram3]{\csuse{@bptitle}\btitleapp} + \begingroup\edef\tempa{\endgroup\noexpand% + \begin{frame}<\csuse{@bpolargiii}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa }% }% }{% - \ifcsdef{@bpolargiv}{% - \ifcsdef{@bpopts}{% - \begingroup\edef\tempa{\endgroup\noexpand% - \begin{frame}<\csuse{@bpolargiv}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + \ifcsvoid{@bpolargiv}{% + \ifcsvoid{@bpopts}{% + \begin{frame}[label=beamerprogram4]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}<\csuse{@bpolargiv}>[label=beamerprogram4]{\csuse{@bptitle}\btitleapp} - }% - }{% - \ifcsdef{@bpopts}{% \begingroup\edef\tempa{\endgroup\noexpand% \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + }% + }{% + \ifcsvoid{@bpopts}{% + \begin{frame}<\csuse{@bpolargiv}>[label=beamerprogram4]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}[label=beamerprogram4]{\csuse{@bptitle}\btitleapp} + \begingroup\edef\tempa{\endgroup\noexpand% + \begin{frame}<\csuse{@bpolargiv}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa }% }% }% }% }% - \ifbool{uncoveredlist}{\beameruncoverffslidesspec}{} + \ifbool{uncoveredlist}{\beameruncoverffslidesspec}{\beameralertspec} \begin{BeamerProgramList} \programlistbeamer \end{BeamerProgramList} \end{frame} - \fi%\else\ifKV@beamerprogram@blocksonly + \fi%\else\if@jslp@beamerprogram@blocksonly } @@ -860,46 +916,55 @@ \csdef{@bptitle}{\lecprogram} \def\btitleapp{} \numdef\pframes{\thefbreaks + 1} - \setkeys{beamerprogram}{alerted=false} - \setkeys{beamerprogram}{blocksonly=false} - \setkeys{beamerprogram}{uncover=false} - \setkeys{beamerprogram}{#1} + \SetKeys[beamerprogram]{alerted=false} + \SetKeys[beamerprogram]{blocksonly=false} + \SetKeys[beamerprogram]{uncover=false} + \SetKeys[beamerprogram]{#1} \def\bpdescbeg{\begin{BeamerProgramList}} - \ifKV@beamerprogram@alerted + \providebool{alerted} + \if@jslp@beamerprogram@alerted + \booltrue{alerted} + \else + \boolfalse{alerted} \fi \providebool{uncoveredlist} - \ifKV@beamerprogram@uncover + \if@jslp@beamerprogram@uncover \booltrue{uncoveredlist} \else \boolfalse{uncoveredlist} \fi - \ifKV@beamerprogram@blocksonly - \else% not \ifKV@beamerprogram@blocksonly + \if@jslp@beamerprogram@blocksonly + \else% not \if@jslp@beamerprogram@blocksonly + \ifbool{alerted}{% + \ifbool{uncoveredlist}% + {\renewcommand*\beameruncoverspec{\beamerdefaultoverlayspecification{<+(1)-| alert@+(1)>}}}% + {\renewcommand*\beameralertspec{\beamerdefaultoverlayspecification{<alert@+(1)>}}}% + }{} % All but last slide(s) are generated in what follows \ifcsempty{programlistbeamerexam}{}{% \def\btitleapp{} - \ifcsdef{@bpolarg}{% - \ifcsdef{@bpopts}{% - \begingroup\edef\tempa{\endgroup\noexpand% - \begin{frame}<\csuse{@bpolarg}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + \ifcsvoid{@bpolarg}{% + \ifcsvoid{@bpopts}{% + \begin{frame}[label=beamerprogram]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}<\csuse{@bpolarg}>[label=beamerprogram]{\csuse{@bptitle}\btitleapp} - }% - }{% - \ifcsdef{@bpopts}{% \begingroup\edef\tempa{\endgroup\noexpand% \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa + }% + }{% + \ifcsvoid{@bpopts}{% + \begin{frame}<\csuse{@bpolarg}>[label=beamerprogram]{\csuse{@bptitle}\btitleapp} }{% - \begin{frame}[label=beamerprogram]{\csuse{@bptitle}\btitleapp} + \begingroup\edef\tempa{\endgroup\noexpand% + \begin{frame}<\csuse{@bpolarg}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa }% - }% - \ifbool{uncoveredlist}{\beameruncoverspec}{} + }% + \ifbool{uncoveredlist}{\beameruncoverspec}{\beameralertspec} \begin{BeamerProgramListExam} \programlistbeamerexam \end{BeamerProgramListExam} \end{frame} }% - \fi%\else\ifKV@beamerprogram@blocksonly + \fi%\else\if@jslp@beamerprogram@blocksonly } @@ -935,24 +1000,63 @@ % 1) Session definition % \newtoggle{shortinstrdef} -\define@key{session}{titlesep}{\csdef{@sestitlesep}{{#1}}} -\define@key{session}{subtitle}{\csdef{@sessubtitle}{{#1}}} -\define@key{session}{shorttitle}{\csdef{@sesshorttitle}{{#1}}\csdef{@usesshorttitle}{{#1}}} -\define@key{session}{bibsec}{\csdef{@sesbibsec}{#1}} -\define@key{session}{room}{\csdef{@sesroom}{{#1}}} -\define@key{session}{starttime}{\csdef{@sesrtime}{#1}\csdef{@sestime}{\DTMtime{#1}}} -\define@key{session}{duration}{\csdef{@sesduration}{#1}} -\define@key{session}{instructor}{% - \csdef{@sesinstructor}{{#1}}\csdef{@usesinstructor}{{#1}}% - \iftoggle{shortinstrdef}{}{\csdef{@sesshortinstructor}{{#1}}\csdef{@usesshortinstructor}{{#1}}}} -\define@key{session}{shortinstructor}{% - \csdef{@sesshortinstructor}{{#1}}\csdef{@usesshortinstructor}{{#1}}\toggletrue{shortinstrdef}} -\define@key{session}{presstudents}{\csdef{@sespresstudents}{{#1}}} -\define@boolkey{session}{cancel}[true]{} -\define@boolkey{session}{draft}[true]{} -\define@key{session}{topicnumber}{\setcounter{sestopic}{#1-1}} -\define@key{session}{extradate}{\csdef{@xsesdate}{#1}} -\define@boolkey{session}{exam}[true]{} +\newif\if@jslp@session@cancel\@jslp@session@cancelfalse +\newif\if@jslp@session@draft\@jslp@session@draftfalse +\newif\if@jslp@session@exam\@jslp@session@examfalse + +\DeclareKeys[session] +{ + % titlesep = <sep> + titlesep.code = { \csdef{@sestitlesep}{{#1}} }, + % subtitle = <title> + subtitle.code = { \csdef{@sessubtitle}{{#1}} }, + % shorttitle = <title> + shorttitle.code = { + \csdef{@sesshorttitle}{{#1}} + \csdef{@usesshorttitle}{{#1}} + }, + % bibsec = <keyword> + bibsec.store = \@sesbibsec, + % room = <room> + room.code = { \csdef{@sesroom}{{#1}} }, + % starttime = <starttime> + starttime.code = { + \csdef{@sesrtime}{#1} + \csdef{@sestime}{\DTMtime{#1}} + }, + % duration = <duration> + duration.store = \@sesduration, + % instructor = <instructor> + instructor.code = { + \csdef{@sesinstructor}{{#1}} + \csdef{@usesinstructor}{{#1}} + \iftoggle{shortinstrdef}{}{% + \csdef{@sesshortinstructor}{{#1}} + \csdef{@usesshortinstructor}{{#1}}% + } + }, + % shortinstructor = <instructor> + shortinstructor.code = { + \csdef{@sesshortinstructor}{{#1}} + \csdef{@usesshortinstructor}{{#1}} + \toggletrue{shortinstrdef} + }, + % presstudents = <instructor> + presstudents.code = { \csdef{@sespresstudents}{{#1}} }, + % cancel = <true|false> + cancel.if = @jslp@session@cancel, + % draft = <true|false> + draft.if = @jslp@session@draft, + % exam = <true|false> + exam.if = @jslp@session@exam, + % topicnumber = <true|false> + topicnumber.code = { + \setcounter{sestopic}{#1-1} + }, + % extradate = <date> + extradate.store = \@xsesdate +} + % \newcommand*\NewSession[2][]{% \stepcounter{sesunit} @@ -974,10 +1078,10 @@ \csdef{@usesshortinstructor}{} \csdef{@sespresstudents}{} \csdef{@xsesdate}{} - \setkeys{session}{cancel=false} - \setkeys{session}{draft=false} - \setkeys{session}{exam=false} - \setkeys{session}{#1} + \SetKeys[session]{cancel=false} + \SetKeys[session]{draft=false} + \SetKeys[session]{exam=false} + \SetKeys[session]{#1} \csdef{@sestitle}{#2} % only calculate the date if it is not fixed via extradate. \ifcsempty{@xsesdate}{% @@ -1022,12 +1126,12 @@ \protected@csxdef{sespresstudents\thesnum}{\csuse{@sespresstudents}} \protected@csxdef{sesblock\thesnum}{\csuse{@currentblock}} \protected@csxdef{sesblockno\thesnum}{\csuse{@currentblockno}} - \ifKV@session@cancel + \if@jslp@session@cancel \stepcounter{cancellations} \protected@eappto\programlist{\noexpand\ProgramListCancelItem{\csuse{sesshortdate\thesnum}}{\csuse{sestitle\thesnum}}{\csuse{@sestitlesep}}{\csuse{@sessubtitle}}} \protected@eappto\programlistbeamer{\noexpand\BeamerProgramListCancelItem{\csuse{sesshortdate\thesnum}}{\csuse{sestitle\thesnum}}{\csuse{@sestitlesep}}{\csuse{@sessubtitle}}} \else - \ifKV@session@exam + \if@jslp@session@exam \stepcounter{exams} \protected@csxdef{examsesno\theexams}{\thesnum} \protected@eappto\programlistexam{\noexpand\ProgramListExamItem{\csuse{sesshortdate\thesnum}}{\csuse{sestitle\thesnum}}{\csuse{@sestitlesep}}{\csuse{@sessubtitle}}} @@ -1039,7 +1143,7 @@ }% \else \stepcounter{sestopic} - \ifKV@session@draft + \if@jslp@session@draft \ifcsempty{@sestitle}{\protected@csxdef{sestitle\thesnum}{\sestopic}}{} \fi \protected@eappto\programlist{\noexpand\ProgramListItem{\csuse{sesshortdate\thesnum}}{\csuse{sestitle\thesnum}}{\csuse{@sestitlesep}}{\csuse{@sessubtitle}}} @@ -1075,16 +1179,24 @@ } % Set break of multiple interval units -\define@key{break}{units}{\csdef{@breakunits}{#1}} -\define@key{break}{span}{\csdef{@breakspan}{#1}} -\define@key{break}{weeks}{% - \PackageWarning{jslectureplanner}{\protect\SetBreaks\space option 'weeks' is deprecated. Use 'units' instead.}% - \setkeys{break}{units=#1}% +\DeclareKeys[break] +{ + % units = <int> + units.store = \@breakunits, + % span = <int> + span.store = \@breakspan, + % weeks = <int> (deprecated!) + weeks.code = { + \PackageWarning{jslectureplanner}{% + \protect\SetBreaks\space option 'weeks' is deprecated. Use 'units' instead.}% + \SetKeys[break]{units=#1}% + } } + \newcommand*\SetBreaks[2][units=1]{% \csdef{@breakunits}{} \csdef{@breakspan}{} - \setkeys{break}{#1} + \SetKeys[break]{#1} \setcounter{breakunits}{\csuse{@breakunits}} \setcounter{sesunit}{\thesesunit+\thebreakunits} \setcounter{cancellations}{\thecancellations+\thebreakunits} diff --git a/Master/texmf-dist/tex/latex/jslectureplanner/jsmembertable.sty b/Master/texmf-dist/tex/latex/jslectureplanner/jsmembertable.sty index a371a492a57..0c8c1ee2bb2 100644 --- a/Master/texmf-dist/tex/latex/jslectureplanner/jsmembertable.sty +++ b/Master/texmf-dist/tex/latex/jslectureplanner/jsmembertable.sty @@ -24,8 +24,8 @@ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\def\filedate{2020/12/08} -\def\fileversion{1.12} +\def\filedate{2024/03/06} +\def\fileversion{1.13} \def\filename{jsmembertable.sty} \NeedsTeXFormat{LaTeX2e} @@ -41,32 +41,35 @@ \RequirePackage{array} \RequirePackage{longtable} \RequirePackage{hhline} -\RequirePackage{xkeyval} % % PACKAGE OPTIONS % -\newif\if@datatool\@datatoolfalse -\def\jsmt@datafile{} -\define@key{mem}{datafile}{% - \def\jsmt@datafile{#1.csv} - \@datatooltrue -} -\DeclareOptionX{datafile}{\setkeys{mem}{datafile=#1}} +\newif\if@jsmt@datatool\@jsmt@datatoolfalse \def\jsmt@datakeys{pname,sname,mid,email} -\define@key{mem}{datakeys}{% - \def\jsmt@datakeys{#1} + +\DeclareKeys[jsmt] +{ + % datafile=filename + datafile.code = { + \def\jsmt@datafile{#1.csv} + \@jsmt@datatooltrue + }, + datafile.usage = load, + % datakeys={<keyorder>} + datakeys.store = \jsmt@datakeys, + datakeys.usage = load } -\DeclareOptionX{datakeys}{\setkeys{mem}{datakeys={#1}}} -\ProcessOptionsX + +\ProcessKeyOptions[jsmt] % % OPT-IN PACKAGES % % Load datatool if necessary -\if@datatool +\if@jsmt@datatool \RequirePackage{datatool} \DTLloadrawdb[noheader,keys={\jsmt@datakeys}]{data}{\jsmt@datafile} \dtlsort{sname,pname}{data}{\dtlicompare} @@ -197,7 +200,7 @@ & \jsemailheader\tabularnewline \hhline{-===} \endhead - \if@datatool + \if@jsmt@datatool \DTLforeach*{data}{% \jsmt@firstname=pname,\jsmt@surname=sname,\jsmt@mid=mid,\jsmt@email=email}{% \DTLiffirstrow{}{\tabularnewline\hline}% @@ -649,11 +652,12 @@ \hline \hline \endhead - \if@datatool% + \strut + \if@jsmt@datatool% \DTLforeach*{data}{% \jsmt@firstname=pname,\jsmt@surname=sname}{% \DTLiffirstrow{}{\tabularnewline\hline}% - \bodyrowone{\jsmt@surname, \jsmt@firstname}% + \bodyrowone{\jsmt@surname, \jsmt@firstname}\strut% }% \tabularnewline\hline \fi% @@ -677,18 +681,19 @@ \resettabtoks \loop\ifnum\thetabrow<\themembers\relax \stepcounter{tabrow} - \addtabtoks{\bodyrowtwo{}\tabularnewline\hline}% + \addtabtoks{\bodyrowtwo{}\tabularnewline\hline}\strut% \repeat \ltstarttwo \headerptwo \hline \hline \endhead - \if@datatool + \strut + \if@jsmt@datatool \DTLforeach*{data}{% \jsmt@firstname=pname,\jsmt@surname=sname}{% \DTLiffirstrow{}{\tabularnewline\hline}% - \bodyrowtwo{\jsmt@surname, \jsmt@firstname}% + \bodyrowtwo{\jsmt@surname, \jsmt@firstname}\strut% }% \tabularnewline\hline \fi% -- cgit v1.2.3