texlive[70448] branches/branch2023.final/Master/texmf-dist:
commits+karl at tug.org
commits+karl at tug.org
Wed Mar 6 22:09:56 CET 2024
Revision: 70448
https://tug.org/svn/texlive?view=revision&revision=70448
Author: karl
Date: 2024-03-06 22:09:56 +0100 (Wed, 06 Mar 2024)
Log Message:
-----------
jslectureplanner (branch) (6mar24)
Modified Paths:
--------------
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/README
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturebib-english.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturehandout-english.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturepresentation-english.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lectureprogram-english.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturescript-english.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/membertable-blank-english.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/membertable-filled-english.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presencetable-blank-english.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presencetable-filled-english.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presentation-list-english.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturebib.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturehandout.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturepresentation.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lectureprogram.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturescript.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/membertable-blank.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/membertable-filled.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presencetable-blank.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presencetable-filled.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presentation-list.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.pdf
branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.tex
branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/cologne.lps
branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/english.lps
branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/german-default.lps
branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/jslectureplanner.sty
branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/jsmembertable.sty
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/README
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturebib-english.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturehandout-english.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturepresentation-english.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lectureprogram-english.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/lecturescript-english.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/membertable-blank-english.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/membertable-filled-english.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presencetable-blank-english.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presencetable-filled-english.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/English/presentation-list-english.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturebib.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturehandout.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturepresentation.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lectureprogram.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/lecturescript.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/membertable-blank.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/membertable-filled.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presencetable-blank.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presencetable-filled.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/examples/German/presentation-list.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.pdf
===================================================================
(Binary files differ)
Modified: branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.tex
===================================================================
--- branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.tex 2024-03-06 21:09:46 UTC (rev 70447)
+++ branches/branch2023.final/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.tex 2024-03-06 21:09:56 UTC (rev 70448)
@@ -87,7 +87,7 @@
\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 @@
\item \textsf{datetime2}
\item \textsf{etoolbox}
\item \textsf{ifthen}
- \item \textsf{xkeyval}
\item \textsf{xparse}
\end{itemize}
\pagebreak
@@ -1239,7 +1238,6 @@
\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 @@
\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.
Modified: branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/cologne.lps
===================================================================
--- branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/cologne.lps 2024-03-06 21:09:46 UTC (rev 70447)
+++ branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/cologne.lps 2024-03-06 21:09:56 UTC (rev 70448)
@@ -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
Modified: branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/english.lps
===================================================================
--- branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/english.lps 2024-03-06 21:09:46 UTC (rev 70447)
+++ branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/english.lps 2024-03-06 21:09:56 UTC (rev 70448)
@@ -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
Modified: branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/german-default.lps
===================================================================
--- branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/german-default.lps 2024-03-06 21:09:46 UTC (rev 70447)
+++ branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/german-default.lps 2024-03-06 21:09:56 UTC (rev 70448)
@@ -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
Modified: branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/jslectureplanner.sty
===================================================================
--- branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/jslectureplanner.sty 2024-03-06 21:09:46 UTC (rev 70447)
+++ branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/jslectureplanner.sty 2024-03-06 21:09:56 UTC (rev 70448)
@@ -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,63 +217,96 @@
%
% PACKAGE OPTIONS
%
-\define at key{lec}{lectype}{%
- \js at 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 at key{lec}{lecsem}{%
- \js at 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 at key{lec}{title}{\def\lectitle{#1}%
+\DeclareKeys[lec]
+{
+ % type=<type>
+ type.code = {
+ \js at 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=<type>
+ semester.code = {
+ \js at 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>
+ title.code = {
+ \def\lectitle{#1}%
\ifx\lecshorttitle\empty%
\def\lecshorttitle{#1}%
\global\togglefalse{uniquelecshorttitle}%
- \fi}
-\define at key{lec}{titlesep}{\def\lectitlesep{#1}}
-\define at key{lec}{subtitle}{\def\lecsubtitle{#1}}
-\define at key{lec}{shorttitle}{%
- \def\lecshorttitle{#1}%
- \global\toggletrue{uniquelecshorttitle}}
-\define at key{lec}{year}{\def\lecyear{#1}}
-\define at key{lec}{endyear}{\def\lecendyear{#1}}
-\define at key{lec}{uni}{\def\lecuniversity{#1}}
-\define at key{lec}{institute}{\def\lecinstitute{#1}}
-\define at key{lec}{platform}{\def\lecplatform{#1}}
-\define at key{lec}{officehours}{\def\officehours{#1}}
-\define at key{lec}{officenumber}{\def\officenumber{#1}}
-\define at key{lec}{room}{\def\lecroom{#1}}
-\define at key{lec}{startdate}{\def\lecstartdate{#1}}
-\define at key{lec}{starttime}{\def\@lecstarttime{#1}\def\lecstarttime{\DTMtime{#1}}}
-\define at key{lec}{duration}{\def\lecduration{#1}}
-\define at key{lec}{instructor}{\def\lecinstructor{#1}%
- \ifx\lecshortinstructor\empty\def\lecshortinstructor{#1}\fi}
-\define at 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 at key{lec}{style}{\AtEndOfPackage{\input{#1.lps}}}
-\define at 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
@@ -281,33 +313,17 @@
\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 at 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}}
+% Process package options
+\ProcessKeyOptions[lec]
-\ProcessOptionsX
-
%
% 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 at key{semtype}{next}{\csdef{@ltn}{#1}}
-\define at boolkey{semtype}{nextny}[true]{}
+\newif\if at jslp@semtype at nextny\@jslp at semtype@nextnyfalse
+\DeclareKeys[semtype]
+{
+ next.store = \@ltn,
+ nextny.if = @jslp at 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 at semtype@nextny
+ \SetKeys[semtype]{nextny=false}%
+ \SetKeys[semtype]{#1}%
+ \if at jslp@semtype at nextny
\csdef{lecsemnextny@#2}{y}
\else
\csdef{lecsemnextny@#2}{n}
@@ -650,80 +671,115 @@
%
% Beamer program generation
-\define at key{beamerprogram}{title}{\csdef{@bptitle}{#1}}
-\define at key{beamerprogram}{options}{\csdef{@bpopts}{#1}}
-\define at key{beamerprogram}{listoptions}{\csdef{@bplistopts}{#1}}
-\define at key{beamerprogram}{overlayarg}{\csdef{@bpolarg}{#1}}
-\define at key{beamerprogram}{overlayarg2}{\csdef{@bpolargii}{#1}}
-\define at key{beamerprogram}{overlayarg3}{\csdef{@bpolargiii}{#1}}
-\define at key{beamerprogram}{overlayarg4}{\csdef{@bpolargiv}{#1}}
-\define at boolkey{beamerprogram}{alerted}[true]{}
-\define at boolkey{beamerprogram}{blocksonly}[true]{}
-\define at boolkey{beamerprogram}{uncover}[true]{}
+\newif\if at jslp@beamerprogram at alerted\@jslp at beamerprogram@alertedfalse
+\newif\if at jslp@beamerprogram at blocksonly\@jslp at beamerprogram@blocksonlyfalse
+\newif\if at jslp@beamerprogram at uncover\@jslp at 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 at beamerprogram@alerted,
+ % blocksonly = <true|false>
+ blocksonly.if = @jslp at beamerprogram@blocksonly,
+ % uncover = <true|false>
+ uncover.if = @jslp at 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 at beamerprogram@alerted
+ \providebool{alerted}
+ \if at jslp@beamerprogram at alerted
+ \booltrue{alerted}
+ \else
+ \boolfalse{alerted}
\fi
\providebool{uncoveredlist}
- \ifKV at beamerprogram@uncover
+ \if at jslp@beamerprogram at uncover
\booltrue{uncoveredlist}
\else
\boolfalse{uncoveredlist}
\fi
- \ifKV at beamerprogram@blocksonly
- \ifcsdef{@bpolarg}{%
- \ifcsdef{@bpopts}{%
+ \if at jslp@beamerprogram at blocksonly
+ \ifbool{alerted}{%
+ \ifbool{uncoveredlist}%
+ {\renewcommand*\beameruncoverblocksonlyspec{\beamerdefaultoverlayspecification{<+-| alert at +>}}}%
+ {\renewcommand*\beameralertspec{\beamerdefaultoverlayspecification{<alert at +>}}}%
+ }{}
+ \ifcsvoid{@bpolarg}{%
+ \ifcsvoid{@bpopts}{%
+ \begin{frame}[label=beamerprogram]{\csuse{@bptitle}\btitleapp}
+ }{%
\begingroup\edef\tempa{\endgroup\noexpand%
- \begin{frame}<\csuse{@bpolarg}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa
- }{%
- \begin{frame}<\csuse{@bpolarg}>[label=beamerprogram]{\csuse{@bptitle}\btitleapp}
+ \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa
}%
}{%
- \ifcsdef{@bpopts}{%
+ \ifcsvoid{@bpopts}{%
+ \begin{frame}<\csuse{@bpolarg}>[label=beamerprogram]{\csuse{@bptitle}\btitleapp}
+ }{%
\begingroup\edef\tempa{\endgroup\noexpand%
- \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa
- }{%
- \begin{frame}[label=beamerprogram]{\csuse{@bptitle}\btitleapp}
+ \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 at beamerprogram@blocksonly
+ \else% not \if at jslp@beamerprogram at blocksonly
+ \ifbool{alerted}{%
+ \ifbool{uncoveredlist}%
+ {%
+ \renewcommand*\beameruncoverspec{\beamerdefaultoverlayspecification{<+(1)-| alert at +(1)>}}
+ \renewcommand*\beameruncoverffslidesspec{\beamerdefaultoverlayspecification{<+(-1)-| alert at +(-1)>}}
+ }%
+ {\renewcommand*\beameralertspec{\beamerdefaultoverlayspecification{<alert at +(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}{%
+ \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}
+ }{%
\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}{%
- \begingroup\edef\tempa{\endgroup\noexpand%
- \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa
- }{%
- \begin{frame}[label=beamerprogram]{\csuse{@bptitle}\btitleapp}
- }%
}%
}{%
\@ifundefined{programlistbeameriii}{%
- \ifcsdef{@bpolargii}{%
- \ifcsdef{@bpopts}{%
+ \ifcsvoid{@bpolargii}{%
+ \ifcsvoid{@bpopts}{%
+ \begin{frame}[label=beamerprogram2]{\csuse{@bptitle}\btitleapp}
+ }{%
\begingroup\edef\tempa{\endgroup\noexpand%
- \begin{frame}<\csuse{@bpolargii}>[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa
- }{%
- \begin{frame}<\csuse{@bpolargii}>[label=beamerprogram2]{\csuse{@bptitle}\btitleapp}
+ \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa
}%
}{%
- \ifcsdef{@bpopts}{%
+ \ifcsvoid{@bpopts}{%
+ \begin{frame}<\csuse{@bpolargii}>[label=beamerprogram2]{\csuse{@bptitle}\btitleapp}
+ }{%
\begingroup\edef\tempa{\endgroup\noexpand%
- \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa
- }{%
- \begin{frame}[label=beamerprogram2]{\csuse{@bptitle}\btitleapp}
+ \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}
+ \begingroup\edef\tempa{\endgroup\noexpand%
+ \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa
}%
}{%
- \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}
+ \begingroup\edef\tempa{\endgroup\noexpand%
+ \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa
}%
}{%
- \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 at beamerprogram@blocksonly
+ \fi%\else\if at jslp@beamerprogram at 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 at beamerprogram@alerted
+ \providebool{alerted}
+ \if at jslp@beamerprogram at alerted
+ \booltrue{alerted}
+ \else
+ \boolfalse{alerted}
\fi
\providebool{uncoveredlist}
- \ifKV at beamerprogram@uncover
+ \if at jslp@beamerprogram at uncover
\booltrue{uncoveredlist}
\else
\boolfalse{uncoveredlist}
\fi
- \ifKV at beamerprogram@blocksonly
- \else% not \ifKV at beamerprogram@blocksonly
+ \if at jslp@beamerprogram at blocksonly
+ \else% not \if at jslp@beamerprogram at blocksonly
+ \ifbool{alerted}{%
+ \ifbool{uncoveredlist}%
+ {\renewcommand*\beameruncoverspec{\beamerdefaultoverlayspecification{<+(1)-| alert at +(1)>}}}%
+ {\renewcommand*\beameralertspec{\beamerdefaultoverlayspecification{<alert at +(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 at beamerprogram@blocksonly
+ \fi%\else\if at jslp@beamerprogram at blocksonly
}
@@ -935,24 +1000,63 @@
% 1) Session definition
%
\newtoggle{shortinstrdef}
-\define at key{session}{titlesep}{\csdef{@sestitlesep}{{#1}}}
-\define at key{session}{subtitle}{\csdef{@sessubtitle}{{#1}}}
-\define at key{session}{shorttitle}{\csdef{@sesshorttitle}{{#1}}\csdef{@usesshorttitle}{{#1}}}
-\define at key{session}{bibsec}{\csdef{@sesbibsec}{#1}}
-\define at key{session}{room}{\csdef{@sesroom}{{#1}}}
-\define at key{session}{starttime}{\csdef{@sesrtime}{#1}\csdef{@sestime}{\DTMtime{#1}}}
-\define at key{session}{duration}{\csdef{@sesduration}{#1}}
-\define at key{session}{instructor}{%
- \csdef{@sesinstructor}{{#1}}\csdef{@usesinstructor}{{#1}}%
- \iftoggle{shortinstrdef}{}{\csdef{@sesshortinstructor}{{#1}}\csdef{@usesshortinstructor}{{#1}}}}
-\define at key{session}{shortinstructor}{%
- \csdef{@sesshortinstructor}{{#1}}\csdef{@usesshortinstructor}{{#1}}\toggletrue{shortinstrdef}}
-\define at key{session}{presstudents}{\csdef{@sespresstudents}{{#1}}}
-\define at boolkey{session}{cancel}[true]{}
-\define at boolkey{session}{draft}[true]{}
-\define at key{session}{topicnumber}{\setcounter{sestopic}{#1-1}}
-\define at key{session}{extradate}{\csdef{@xsesdate}{#1}}
-\define at boolkey{session}{exam}[true]{}
+\newif\if at jslp@session at cancel\@jslp at session@cancelfalse
+\newif\if at jslp@session at draft\@jslp at session@draftfalse
+\newif\if at jslp@session at exam\@jslp at 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 at session@cancel,
+ % draft = <true|false>
+ draft.if = @jslp at session@draft,
+ % exam = <true|false>
+ exam.if = @jslp at 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 at csxdef{sespresstudents\thesnum}{\csuse{@sespresstudents}}
\protected at csxdef{sesblock\thesnum}{\csuse{@currentblock}}
\protected at csxdef{sesblockno\thesnum}{\csuse{@currentblockno}}
- \ifKV at session@cancel
+ \if at jslp@session at cancel
\stepcounter{cancellations}
\protected at eappto\programlist{\noexpand\ProgramListCancelItem{\csuse{sesshortdate\thesnum}}{\csuse{sestitle\thesnum}}{\csuse{@sestitlesep}}{\csuse{@sessubtitle}}}
\protected at eappto\programlistbeamer{\noexpand\BeamerProgramListCancelItem{\csuse{sesshortdate\thesnum}}{\csuse{sestitle\thesnum}}{\csuse{@sestitlesep}}{\csuse{@sessubtitle}}}
\else
- \ifKV at session@exam
+ \if at jslp@session at exam
\stepcounter{exams}
\protected at csxdef{examsesno\theexams}{\thesnum}
\protected at eappto\programlistexam{\noexpand\ProgramListExamItem{\csuse{sesshortdate\thesnum}}{\csuse{sestitle\thesnum}}{\csuse{@sestitlesep}}{\csuse{@sessubtitle}}}
@@ -1039,7 +1143,7 @@
}%
\else
\stepcounter{sestopic}
- \ifKV at session@draft
+ \if at jslp@session at draft
\ifcsempty{@sestitle}{\protected at csxdef{sestitle\thesnum}{\sestopic}}{}
\fi
\protected at 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 at key{break}{units}{\csdef{@breakunits}{#1}}
-\define at key{break}{span}{\csdef{@breakspan}{#1}}
-\define at 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}
Modified: branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/jsmembertable.sty
===================================================================
--- branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/jsmembertable.sty 2024-03-06 21:09:46 UTC (rev 70447)
+++ branches/branch2023.final/Master/texmf-dist/tex/latex/jslectureplanner/jsmembertable.sty 2024-03-06 21:09:56 UTC (rev 70448)
@@ -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 at datatool\@datatoolfalse
-\def\jsmt at datafile{}
-\define at key{mem}{datafile}{%
- \def\jsmt at datafile{#1.csv}
- \@datatooltrue
-}
-\DeclareOptionX{datafile}{\setkeys{mem}{datafile=#1}}
+\newif\if at jsmt@datatool\@jsmt at datatoolfalse
\def\jsmt at datakeys{pname,sname,mid,email}
-\define at key{mem}{datakeys}{%
- \def\jsmt at datakeys{#1}
+
+\DeclareKeys[jsmt]
+{
+ % datafile=filename
+ datafile.code = {
+ \def\jsmt at datafile{#1.csv}
+ \@jsmt at datatooltrue
+ },
+ datafile.usage = load,
+ % datakeys={<keyorder>}
+ datakeys.store = \jsmt at datakeys,
+ datakeys.usage = load
}
-\DeclareOptionX{datakeys}{\setkeys{mem}{datakeys={#1}}}
-\ProcessOptionsX
+\ProcessKeyOptions[jsmt]
+
%
% OPT-IN PACKAGES
%
% Load datatool if necessary
-\if at datatool
+\if at jsmt@datatool
\RequirePackage{datatool}
\DTLloadrawdb[noheader,keys={\jsmt at datakeys}]{data}{\jsmt at datafile}
\dtlsort{sname,pname}{data}{\dtlicompare}
@@ -197,7 +200,7 @@
& \jsemailheader\tabularnewline
\hhline{-===}
\endhead
- \if at datatool
+ \if at jsmt@datatool
\DTLforeach*{data}{%
\jsmt at firstname=pname,\jsmt at surname=sname,\jsmt at mid=mid,\jsmt at email=email}{%
\DTLiffirstrow{}{\tabularnewline\hline}%
@@ -649,11 +652,12 @@
\hline
\hline
\endhead
- \if at datatool%
+ \strut
+ \if at jsmt@datatool%
\DTLforeach*{data}{%
\jsmt at firstname=pname,\jsmt at surname=sname}{%
\DTLiffirstrow{}{\tabularnewline\hline}%
- \bodyrowone{\jsmt at surname, \jsmt at firstname}%
+ \bodyrowone{\jsmt at surname, \jsmt at firstname}\strut%
}%
\tabularnewline\hline
\fi%
@@ -677,7 +681,7 @@
\resettabtoks
\loop\ifnum\thetabrow<\themembers\relax
\stepcounter{tabrow}
- \addtabtoks{\bodyrowtwo{}\tabularnewline\hline}%
+ \addtabtoks{\bodyrowtwo{}\tabularnewline\hline}\strut%
\repeat
\ltstarttwo
\headerptwo
@@ -684,11 +688,12 @@
\hline
\hline
\endhead
- \if at datatool
+ \strut
+ \if at jsmt@datatool
\DTLforeach*{data}{%
\jsmt at firstname=pname,\jsmt at surname=sname}{%
\DTLiffirstrow{}{\tabularnewline\hline}%
- \bodyrowtwo{\jsmt at surname, \jsmt at firstname}%
+ \bodyrowtwo{\jsmt at surname, \jsmt at firstname}\strut%
}%
\tabularnewline\hline
\fi%
More information about the tex-live-commits
mailing list.