From a3fca75048862f5c0f86ec89c88da49a55beafb7 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 11 May 2020 20:47:10 +0000 Subject: jslectureplanner (11may20) git-svn-id: svn://tug.org/texlive/trunk@55100 c570f23f-e606-0410-a88d-b1316a301751 --- .../latex/jslectureplanner/jslectureplanner.sty | 284 +++++++++++++-------- .../tex/latex/jslectureplanner/jsmembertable.sty | 4 +- 2 files changed, 176 insertions(+), 112 deletions(-) (limited to 'Master/texmf-dist/tex/latex/jslectureplanner') diff --git a/Master/texmf-dist/tex/latex/jslectureplanner/jslectureplanner.sty b/Master/texmf-dist/tex/latex/jslectureplanner/jslectureplanner.sty index 975be52a0d0..72c62b27fa7 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/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 diff --git a/Master/texmf-dist/tex/latex/jslectureplanner/jsmembertable.sty b/Master/texmf-dist/tex/latex/jslectureplanner/jsmembertable.sty index 7ec35c292d0..8d8b634bbac 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/04/30} -\def\fileversion{1.10} +\def\filedate{2020/05/11} +\def\fileversion{1.11} \def\filename{jsmembertable.sty} \NeedsTeXFormat{LaTeX2e} -- cgit v1.2.3