summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/jslectureplanner/jslectureplanner.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/jslectureplanner/jslectureplanner.sty')
-rw-r--r--macros/latex/contrib/jslectureplanner/jslectureplanner.sty284
1 files changed, 174 insertions, 110 deletions
diff --git a/macros/latex/contrib/jslectureplanner/jslectureplanner.sty b/macros/latex/contrib/jslectureplanner/jslectureplanner.sty
index 975be52a0d..72c62b27fa 100644
--- a/macros/latex/contrib/jslectureplanner/jslectureplanner.sty
+++ b/macros/latex/contrib/jslectureplanner/jslectureplanner.sty
@@ -23,8 +23,8 @@
%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\filedate{2020/04/30}
-\def\fileversion{1.10}
+\def\filedate{2020/05/11}
+\def\fileversion{1.11}
\def\filename{jslectureplanner.sty}
\NeedsTeXFormat{LaTeX2e}
@@ -88,7 +88,7 @@
\def\programlistexam{}
\def\programlistbeamer{}
\def\programlistbeamerexam{}
-\def\programblocklistbeamer{\item}
+\def\programblocklistbeamer{}
\def\jsbiblist{}
@@ -182,7 +182,7 @@
% Beamer program heading
\newcommand*\lecprogram{Programm}
% Program list indentation
-\newcommand*\lecprogramlistindent{\textbf{88.\,88.}}
+\newcommand*\lecprogramlistindent{\programdateformat{88.\,88.}}
% Session topic placeholder
\newcommand*\sestopic{Thema~\thesestopic}
% Time slot
@@ -540,19 +540,93 @@
% Program generation
\newcommand\makeprogram{%
\raggedright
- \begin{labeling}{\lecprogramlistindent}
+ \begin{ProgramList}
\programlist
- \end{labeling}
+ \end{ProgramList}
}
% Exam schedule generation
\newcommand\makeexamprogram{%
\raggedright
- \begin{labeling}{\lecprogramlistindent}
+ \begin{ProgramListExam}
\programlistexam
- \end{labeling}
+ \end{ProgramListExam}
}
+% Customizable environments for formatting the lists
+
+% ProgramList is the list used in programs
+\newenvironment{ProgramList}{\begin{labeling}{\lecprogramlistindent}}{\end{labeling}}
+
+% BeamerProgramList is the list used in programs
+\newenvironment{BeamerProgramList}{\begin{description}[\lecprogramlistindent]}{\end{description}}
+
+% ProgramListExam is the list used in exam schedules. By default identical to ProgramList
+\newenvironment{ProgramListExam}{\begin{ProgramList}}{\end{ProgramList}}
+
+% PresList is the list of presenting students
+\newenvironment{PresList}{\begin{ProgramList}}{\end{ProgramList}}
+
+% Same for beamer
+\newenvironment{BeamerPresList}{\begin{BeamerProgramList}}{\end{BeamerProgramList}}
+\newenvironment{BeamerProgramListExam}{\begin{BeamerProgramList}}{\end{BeamerProgramList}}
+
+% Text format of program date
+\newcommand*\programdateformat[1]{\textbf{#1}}
+% Text format of program title
+\newcommand*\sestitleformat[1]{#1}
+% Text format of program title
+\newcommand*\exsestitleformat[1]{\sestitleformat{#1}}
+% Text format of canceled session titles
+\newcommand*\cansestitleformat[1]{\textbf{#1}}
+% Text format of block titles
+\newcommand*\blocktitleformat[1]{\textbf{#1}}
+% Text format of block numbers
+\newcommand*\blocknumberformat[1]{\textbf{#1}}
+
+% ProgramListItem, ProgramListExamItem and ProgramListCancelItem typeset a single
+% session. Arguments: #1 date, #2 title, #3 title separator, #4 subtitle
+\newcommand*{\ProgramListItem}[4]{\item[\programdateformat{#1}] \sestitleformat{#2#3#4}}
+\newcommand*{\ProgramListCancelItem}[4]{\item[\programdateformat{#1}] \cansestitleformat{#2#3#4\leccancel}}
+\newcommand*{\ProgramListExamItem}[4]{\item[\programdateformat{#1}] \exsestitleformat{#2#3#4}}
+
+% Same for beamer program
+\newcommand*{\BeamerProgramListItem}[4]{\item[\programdateformat{#1}] \sestitleformat{#2#3#4}}
+\newcommand*{\BeamerProgramListCancelItem}[4]{\item[\programdateformat{#1}] \cansestitleformat{#2#3#4\leccancel}}
+\newcommand*{\BeamerProgramListExamItem}[4]{\item[\programdateformat{#1}] \exsestitleformat{#2#3#4}}
+
+% PresListItem: Program line for student presentation lists
+\newcommand*\PresListItem[4]{%
+ \ProgramListItem{#1}{#2}{#3}{#4}%
+}
+
+\newcommand*\BeamerPresListItem[4]{%
+ \BeamerProgramListItem{#1}{#2}{#3}{#4}%
+}
+
+% Format break event
+\newcommand*\breakevent[3]{\ifx\empty#1 #2\else#1#2#3\fi}
+% ProgramListBreak typesets a break.
+% Optional argument is date range, #2 is name of break
+\newcommand*{\ProgramListBreak}[2][\empty]%
+{%
+ \begin{center}
+ (\breakevent{#1}{: }{#2})
+ \end{center}%
+}
+
+% ProgramListBlock
+\newenvironment{ProgramListBlock}[2]%
+ {%
+ \ProgramBlockItem{#1}{#2}
+ \begin{ProgramList}%
+ }%
+ {\end{ProgramList}}
+
+\newcommand*{\ProgramBlockItem}[2]{\item[\blocknumberformat{#1}.] \blocktitleformat{#2}}
+\newcommand*{\BeamerProgramBlockItem}[2]{\item[\blocknumberformat{#1}.] \blocktitleformat{#2}}
+\newcommand*{\BeamerProgramBlockBlocksOnlyItem}[2]{\item[#1.] #2}
+
%
% Beamer program generation
\define@key{beamerprogram}{title}{\csdef{@bptitle}{#1}}
@@ -566,6 +640,11 @@
\define@boolkey{beamerprogram}{blocksonly}[true]{}
\define@boolkey{beamerprogram}{uncover}[true]{}
+% Overlay specifications for uncover programs
+\newcommand*\beameruncoverspec{\beamerdefaultoverlayspecification{<+(1)->}}
+\newcommand*\beameruncoverffslidesspec{\beamerdefaultoverlayspecification{<+(-1)->}}
+\newcommand*\beameruncoverblocksonlyspec{\beamerdefaultoverlayspecification{<+->}}
+
\newcommand*\makebeamerprogram[1][]{%
\csdef{@bptitle}{\lecprogram}
\def\btitleapp{}
@@ -574,7 +653,7 @@
\setkeys{beamerprogram}{blocksonly=false}
\setkeys{beamerprogram}{uncover=false}
\setkeys{beamerprogram}{#1}
- \def\bpdescbeg{\begin{description}[\lecprogramlistindent]}
+ \def\bpdescbeg{\begin{BeamerProgramList}}
\ifKV@beamerprogram@alerted
\fi
\providebool{uncoveredlist}
@@ -599,13 +678,10 @@
\begin{frame}[label=beamerprogram]{\csuse{@bptitle}\btitleapp}
}%
}%
- \ifbool{uncoveredlist}{%
- \begin{description}[<+->][\lecprogramlistindent]
- }{%
- \begin{description}[\lecprogramlistindent]
- }
- \programblocklistbeamer
- \end{description}
+ \ifbool{uncoveredlist}{\beameruncoverblocksonlyspec}{}
+ \begin{BeamerProgramList}
+ \ifcsempty{programblocklistbeamer}{\BeamerProgramBlockBlocksOnlyItem{}{}}{\programblocklistbeamer}
+ \end{BeamerProgramList}
\end{frame}
\else% not \ifKV@beamerprogram@blocksonly
% All but last slide(s) are generated in what follows
@@ -626,13 +702,10 @@
\begin{frame}[label=beamerprogram]{\csuse{@bptitle}\btitleapp}
}%
}%
- \ifbool{uncoveredlist}{%
- \begin{description}[<+(1)->][\lecprogramlistindent]
- }{%
- \begin{description}[\lecprogramlistindent]
- }
+ \ifbool{uncoveredlist}{\beameruncoverspec}{}
+ \begin{BeamerProgramList}
\programlistbeamerii
- \end{description}
+ \end{BeamerProgramList}
\end{frame}
}
\@ifundefined{programlistbeameriii}{}{%
@@ -652,13 +725,10 @@
\begin{frame}[label=beamerprogram2]{\csuse{@bptitle}\btitleapp}
}%
}%
- \ifbool{uncoveredlist}{%
- \begin{description}[<+->][\lecprogramlistindent]
- }{%
- \begin{description}[\lecprogramlistindent]
- }
+ \ifbool{uncoveredlist}{\beameruncoverffslidesspec}{}
+ \begin{BeamerProgramList}
\programlistbeameriii
- \end{description}
+ \end{BeamerProgramList}
\end{frame}
}
\@ifundefined{programlistbeameriv}{}{%
@@ -678,13 +748,10 @@
\begin{frame}[label=beamerprogram3]{\csuse{@bptitle}\btitleapp}
}%
}%
- \ifbool{uncoveredlist}{%
- \begin{description}[+(1)->][\lecprogramlistindent]
- }{%
- \begin{description}[\lecprogramlistindent]
- }
+ \ifbool{uncoveredlist}{\beameruncoverffslidesspec}{}
+ \begin{BeamerProgramList}
\programlistbeameriv
- \end{description}
+ \end{BeamerProgramList}
\end{frame}
}
% The last slide is generated separately:
@@ -758,14 +825,10 @@
}%
}%
}%
-
- \ifbool{uncoveredlist}{%
- \begin{description}[<+->][\lecprogramlistindent]
- }{%
- \begin{description}[\lecprogramlistindent]
- }
+ \ifbool{uncoveredlist}{\beameruncoverffslidesspec}{}
+ \begin{BeamerProgramList}
\programlistbeamer
- \end{description}
+ \end{BeamerProgramList}
\end{frame}
\fi%\else\ifKV@beamerprogram@blocksonly
}
@@ -780,7 +843,7 @@
\setkeys{beamerprogram}{blocksonly=false}
\setkeys{beamerprogram}{uncover=false}
\setkeys{beamerprogram}{#1}
- \def\bpdescbeg{\begin{description}[\lecprogramlistindent]}
+ \def\bpdescbeg{\begin{BeamerProgramList}}
\ifKV@beamerprogram@alerted
\fi
\providebool{uncoveredlist}
@@ -792,33 +855,30 @@
\ifKV@beamerprogram@blocksonly
\else% not \ifKV@beamerprogram@blocksonly
% All but last slide(s) are generated in what follows
- \@ifundefined{programlistbeamerexam}{}{%
- \def\btitleapp{}
- \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}{%
- \begingroup\edef\tempa{\endgroup\noexpand%
- \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa
- }{%
- \begin{frame}[label=beamerprogram]{\csuse{@bptitle}\btitleapp}
- }%
- }%
- \ifbool{uncoveredlist}{%
- \begin{description}[<+->][\lecprogramlistindent]
- }{%
- \begin{description}[\lecprogramlistindent]
- }
- \programlistbeamerexam
- \end{description}
- \end{frame}
+ \ifcsempty{programlistbeamerexam}{}{%
+ \def\btitleapp{}
+ \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}{%
+ \begingroup\edef\tempa{\endgroup\noexpand%
+ \begin{frame}[\csuse{@bpopts}]{\csuse{@bptitle}\btitleapp}}\tempa
+ }{%
+ \begin{frame}[label=beamerprogram]{\csuse{@bptitle}\btitleapp}
+ }%
+ }%
+ \ifbool{uncoveredlist}{\beameruncoverspec}{}
+ \begin{BeamerProgramListExam}
+ \programlistbeamerexam
+ \end{BeamerProgramListExam}
+ \end{frame}
+ }%
\fi%\else\ifKV@beamerprogram@blocksonly
- }%
}
@@ -943,20 +1003,14 @@
\protected@csxdef{sesblockno\thesnum}{\csuse{@currentblockno}}
\ifKV@session@cancel
\stepcounter{cancellations}
- \protected@eappto\programlist{\noexpand\item[{\noexpand\bfseries\csuse{sesshortdate\thesnum}}]%
- \noexpand\bgroup\noexpand\bfseries\csuse{sestitle\thesnum}\csuse{@sestitlesep}\csuse{@sessubtitle}%
- \noexpand\leccancel\noexpand\egroup}
- \protected@eappto\programlistbeamer{\noexpand\item[{\noexpand\bfseries\csuse{sesshortdate\thesnum}}]%
- \noexpand\bgroup\noexpand\bfseries\csuse{sestitle\thesnum}\csuse{@sestitlesep}\csuse{@sessubtitle}%
- \noexpand\leccancel\noexpand\egroup}
+ \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
\stepcounter{exams}
\protected@csxdef{examsesno\theexams}{\thesnum}
- \protected@eappto\programlistexam{\noexpand\item[{\noexpand\bfseries\csuse{sesshortdate\thesnum}}]%
- \csuse{sestitle\thesnum}\csuse{@sestitlesep}\csuse{@sessubtitle}}
- \protected@eappto\programlistbeamerexam{\noexpand\item[{\noexpand\bfseries\csuse{sesshortdate\thesnum}}]%
- \csuse{sestitle\thesnum}\csuse{@sestitlesep}\csuse{@sessubtitle}}
+ \protected@eappto\programlistexam{\noexpand\ProgramListExamItem{\csuse{sesshortdate\thesnum}}{\csuse{sestitle\thesnum}}{\csuse{@sestitlesep}}{\csuse{@sessubtitle}}}
+ \protected@eappto\programlistbeamerexam{\noexpand\BeamerProgramListExamItem{\csuse{sesshortdate\thesnum}}{\csuse{sestitle\thesnum}}{\csuse{@sestitlesep}}{\csuse{@sessubtitle}}}
\ifcsempty{sesbib\thesnum}{}{%
\xappto\jsbiblist{\noexpand\section{\csuse{sestitle\thesnum}\csuse{@sestitlesep}\csuse{@sessubtitle}}%
\noexpand\nocite{*}%
@@ -967,10 +1021,8 @@
\ifKV@session@draft
\ifcsempty{@sestitle}{\protected@csxdef{sestitle\thesnum}{\sestopic}}{}
\fi
- \protected@eappto\programlist{\noexpand\item[{\noexpand\bfseries\csuse{sesshortdate\thesnum}}]%
- \csuse{sestitle\thesnum}\csuse{@sestitlesep}\csuse{@sessubtitle}}
- \protected@eappto\programlistbeamer{\noexpand\item[{\noexpand\bfseries\csuse{sesshortdate\thesnum}}]%
- \csuse{sestitle\thesnum}\csuse{@sestitlesep}\csuse{@sessubtitle}}
+ \protected@eappto\programlist{\noexpand\ProgramListItem{\csuse{sesshortdate\thesnum}}{\csuse{sestitle\thesnum}}{\csuse{@sestitlesep}}{\csuse{@sessubtitle}}}
+ \protected@eappto\programlistbeamer{\noexpand\BeamerProgramListItem{\csuse{sesshortdate\thesnum}}{\csuse{sestitle\thesnum}}{\csuse{@sestitlesep}}{\csuse{@sessubtitle}}}
\ifcsempty{sesbib\thesnum}{}{%
\xappto\jsbiblist{\noexpand\section{\csuse{sestitle\thesnum}\csuse{@sestitlesep}\csuse{@sessubtitle}}%
\noexpand\nocite{*}%
@@ -993,10 +1045,10 @@
}{\stepcounter{autooffsetcounter}}
}{}
\ifx\empty#1
- \protected@eappto\programlist{\noexpand\begin{center} (#2) \noexpand\end{center}}
+ \protected@eappto\programlist{\noexpand\ProgramListBreak{#2}}
\protected@eappto\programlistbeamer{\noexpand\begin{center} (#2) \noexpand\end{center}}
\else
- \protected@eappto\programlist{\noexpand\begin{center} (#1: #2) \noexpand\end{center}}
+ \protected@eappto\programlist{\noexpand\ProgramListBreak[#1]{#2}}
\protected@eappto\programlistbeamer{\noexpand\begin{center} (#1: #2) \noexpand\end{center}}
\fi
}
@@ -1026,10 +1078,10 @@
\stepcounter{loopcounter}
\repeat
\ifcsempty{@breakspan}{%
- \protected@eappto\programlist{\noexpand\begin{center} (#2) \noexpand\end{center}}
+ \protected@eappto\programlist{\noexpand\ProgramListBreak{#2}}
\protected@eappto\programlistbeamer{\noexpand\begin{center} (#2) \noexpand\end{center}}
}{%
- \protected@eappto\programlist{\noexpand\begin{center} (\csuse{@breakspan}: #2) \noexpand\end{center}}
+ \protected@eappto\programlist{\noexpand\ProgramListBreak[\csuse{@breakspan}]{#2}}
\protected@eappto\programlistbeamer{\noexpand\begin{center} (\csuse{@breakspan}: #2) \noexpand\end{center}}
}
}
@@ -1051,21 +1103,18 @@
\newtoggle{inblock}
\newcommand*\StartBlock[1]{%
\stepcounter{blocks}%
- \protected@eappto\programlist{\noexpand\item[{\noexpand\bfseries\Roman{blocks}}.]%
- \noexpand\bgroup\noexpand\bfseries #1\noexpand\egroup}%
- \gappto\programlist{\begin{labeling}{\lecprogramlistindent}}%
- \protected@eappto\programlistbeamer{\noexpand\item[{\noexpand\bfseries\Roman{blocks}}.]%
- \noexpand\bgroup\noexpand\bfseries #1\noexpand\egroup}%
- \gappto\programlistbeamer{\begin{description}[\lecprogramlistindent]}
- \protected@xappto\programblocklistbeamer{\noexpand\item[{\Roman{blocks}}.] #1}%
+ \protected@eappto\programlist{\noexpand\begin{ProgramListBlock}{\Roman{blocks}}{#1}}
+ \protected@eappto\programlistbeamer{\noexpand\BeamerProgramBlockItem{\Roman{blocks}}{#1}}%
+ \gappto\programlistbeamer{\begin{BeamerProgramList}}
+ \protected@xappto\programblocklistbeamer{\noexpand\BeamerProgramBlockBlocksOnlyItem{\Roman{blocks}}{#1}}%
\csxdef{@currentblock}{#1}%
\csxdef{@currentblockno}{\Roman{blocks}}%
\global\toggletrue{inblock}%
}
\newcommand*\EndBlock{%
- \gappto\programlist{\end{labeling}}
- \gappto\programlistbeamer{\end{description}}
+ \gappto\programlist{\end{ProgramListBlock}}
+ \gappto\programlistbeamer{\end{BeamerProgramList}}
\csxdef{@currentblock}{}%
\csxdef{@currentblockno}{}%
\global\togglefalse{inblock}%
@@ -1077,14 +1126,12 @@
}
\newcommand*\@PauseBlock{%
- \gappto\programlist{\end{labeling}}
- \gappto\programlistbeamer{\end{description}}
+ \gappto\programlistbeamer{\end{BeamerProgramList}}
}
\newcommand*\@ResumeBlock{%
% the \item here is necessary since this is nested immediately into another list
- \gappto\programlist{\item \begin{labeling}{\lecprogramlistindent}}%
- \gappto\programlistbeamer{\item \begin{description}[\lecprogramlistindent]}
+ \gappto\programlistbeamer{\item \begin{BeamerProgramList}}
}
\newenvironment{SessionBlock}[1]{\StartBlock{#1}}{\EndBlock}
@@ -1136,6 +1183,7 @@
%
\newcounter{pressession}
+\setcounter{pressession}{1}
\newcounter{lastpressession}
\providebool{deflastpressession}
@@ -1154,46 +1202,52 @@
\newcommand\makepreslist{%
\@ifstar{\@makeblankpreslist}{\@makepreslist}%
}
+\newcommand*\emptypressession{---}
+\newcommand*\presseparator{\par}
% Unstarred: use sespresstudents
\newcommand\@makepreslist{%
\ifbool{deflastpressession}{}{\setcounter{lastpressession}{\thesnum}}%
- \begin{labeling}{\lecprogramlistindent}
+ \begin{PresList}
\whiledo {\not{\value{pressession} > \value{lastpressession}}}%
{%
\ThisSession{\thepressession}%
\if\relax\sespresstudents\relax
- \MakeProgramline{\thepressession}\par
- ---
+ \MakePresListLine{\thepressession}\presseparator%
+ \emptypressession
\else
- \MakeProgramline{\thepressession}\par
+ \MakePresListLine{\thepressession}\presseparator%
\SessionPresStudents{\thepressession}
\fi
\stepcounter{pressession}%
}
- \end{labeling}
+ \end{PresList}
}
+\newlength\blankpreslistvspace
+\setlength\blankpreslistvspace{2\baselineskip}
% Starred: blank list
\newcommand\@makeblankpreslist{%
\ifbool{deflastpressession}{}{\setcounter{lastpressession}{\thesnum}}%
- \begin{labeling}{\lecprogramlistindent}
+ \begin{PresList}
\whiledo {\not{\value{pressession} > \value{lastpressession}}}%
{%
- \MakeProgramline{\thepressession}\vspace{2\baselineskip}
+ \MakePresListLine{\thepressession}\vspace{\blankpreslistvspace}
\stepcounter{pressession}%
}
- \end{labeling}
+ \end{PresList}
}
% A beamer-specific version
+\newcommand*\beamerpresseparator{:\ }
\newcommand\makebeamerpreslist{%
\ifbool{deflastpressession}{}{\setcounter{lastpressession}{\thesnum}}%
- \begin{description}[\lecprogramlistindent]
+ \begin{BeamerPresList}
\whiledo {\not{\value{pressession} > \value{lastpressession}}}%
{%
- \MakeProgramline{\thepressession}: \SessionPresStudents{\thepressession}
+ \MakeBeamerPresListLine{\thepressession}\beamerpresseparator%
+ \SessionPresStudents{\thepressession}
\stepcounter{pressession}%
}
- \end{description}
+ \end{BeamerPresList}
}
@@ -1398,6 +1452,16 @@
\lsestitle\lsestitlesep\lsessubtitle%
}
+% Program line suitable for preslist
+\newcommand*\MakePresListLine[1]{%
+ \LocalSession{#1}%
+ \PresListItem{\lsesshortdate}{\lsestitle}{\lsestitlesep}{\lsessubtitle}%
+}
+\newcommand*\MakeBeamerPresListLine[1]{%
+ \LocalSession{#1}%
+ \BeamerPresListItem{\lsesshortdate}{\lsestitle}{\lsestitlesep}{\lsessubtitle}%
+}
+
% Get information for adjacent (next, previous etc.) sessions
%
% Full title