summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2017-05-02 21:42:35 +0000
committerKarl Berry <karl@freefriends.org>2017-05-02 21:42:35 +0000
commit07dc3a0326b2e760470ab8635dcb16036920d5a5 (patch)
tree681d1550bea6e606bab5e85dc54191fcef82311b /Master/texmf-dist/tex/latex
parent07e1a54a1de33e149b6dce23b5d7bc4731eefcdd (diff)
sesstime (2may17)
git-svn-id: svn://tug.org/texlive/trunk@44157 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex')
-rw-r--r--Master/texmf-dist/tex/latex/sesstime/sesstime.sty447
1 files changed, 447 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/sesstime/sesstime.sty b/Master/texmf-dist/tex/latex/sesstime/sesstime.sty
new file mode 100644
index 00000000000..9591fc345b8
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/sesstime/sesstime.sty
@@ -0,0 +1,447 @@
+%%
+%% This is file `sesstime.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% sesstime.dtx (with options: `package')
+%%
+%% Copyright (C) 2016-2017 Niklas Beisert
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+\NeedsTeXFormat{LaTeX2e}[1996/12/01]
+\ProvidesPackage{sesstime}[2017/05/01 v1.0 session timing marks]
+\RequirePackage{keyval}
+
+\def\sti@flags{}
+\newif\ifsti@flag
+\newif\ifsti@flaginit
+\define@key{sti@flag}{if}{%
+ \ifsti@flaginit\else\sti@flagfalse\fi\sti@flaginittrue%
+ \def\sti@tmpa{#1}%
+ \@for\sti@tmpb:=\sti@flags\do{\ifx\sti@tmpb\sti@tmpa\sti@flagtrue\fi}}
+\define@key{sti@flag}{not}{%
+ \ifsti@flaginit\else\sti@flagtrue\fi\sti@flaginittrue%
+ \def\sti@tmpa{#1}%
+ \@for\sti@tmpb:=\sti@flags\do{\ifx\sti@tmpb\sti@tmpa\sti@flagfalse\fi}}
+\newcommand{\sti@processflags}[1]{\sti@flagtrue\sti@flaginitfalse%
+ \setkeys{sti@flag}{#1}}
+
+\newcommand{\timingif}[2][]{\sti@processflags{#1}\ifsti@flag#2\fi}
+
+\newif\ifsti@print\sti@printtrue
+\newif\ifsti@printblock\sti@printblocktrue
+\newif\ifsti@printsession\sti@printsessiontrue
+\newif\ifsti@printchapter\sti@printchaptertrue
+\newif\ifsti@printwarning\sti@printwarningtrue
+\newif\ifsti@printcomment\sti@printcommenttrue
+\newdimen\sti@widthl\setlength{\sti@widthl}{1cm}
+\newdimen\sti@widthr\setlength{\sti@widthr}{1cm}
+\newcounter{sti@autosession}
+
+\define@key{sti@}{print}[true]{\csname sti@print#1\endcsname}
+\define@key{sti@}{block}[true]{\csname sti@printblock#1\endcsname}
+\define@key{sti@}{chapter}[true]{\csname sti@printchapter#1\endcsname}
+\define@key{sti@}{session}[true]{\csname sti@printsession#1\endcsname}
+\define@key{sti@}{warning}[true]{\csname sti@printwarning#1\endcsname}
+\define@key{sti@}{comment}[true]{\csname sti@printcomment#1\endcsname}
+\define@key{sti@}{width}{\setlength{\sti@widthl}{#1}%
+ \setlength{\sti@widthr}{#1}}
+\define@key{sti@}{widthl}{\setlength{\sti@widthl}{#1}}
+\define@key{sti@}{widthr}{\setlength{\sti@widthr}{#1}}
+\define@key{sti@}{autosession}{\setcounter{sti@autosession}{#1}}
+\define@key{sti@}{flags}{\def\sti@flags{#1}}
+
+\newcommand{\timingconfigure}[2][]{%
+ \sti@processflags{#1}%
+ \ifsti@flag%
+ \setkeys{sti@}{#2}%
+ \fi}
+
+\DeclareOption*{\expandafter\timingconfigure\expandafter{\CurrentOption}}
+\ProcessOptions
+
+\newcounter{sti@session}
+\newcounter{sti@insession}
+\newcounter{sti@sessiontime}
+\newcounter{sti@chapter}
+\newcounter{sti@inchapter}
+\newcounter{sti@chaptertime}
+\newcounter{sti@block}[sti@chapter]
+\newcounter{sti@inblock}
+\newcounter{sti@blockgauge}
+\newcounter{sti@blocktime}
+\newcount\c@sti@tmp
+
+\newcommand{\timingprint}[2][l]{%
+ \ifsti@print%
+ \ifhmode\par\fi%
+ \ifvmode%
+ \@bsphack%
+ \dimen@\prevdepth%
+ \nointerlineskip%
+ \if r#1%
+ \smash{\rlap{\hspace{\textwidth}\parbox[t]{\sti@widthr}%
+ {\raggedright\renewcommand{\bfdefault}{b}#2}}}%
+ \else%
+ \smash{\llap{\parbox[t]{\sti@widthl}%
+ {\raggedleft\renewcommand{\bfdefault}{b}#2}}}%
+ \fi%
+ \prevdepth\dimen@%
+ \@esphack%
+ \fi%
+ \else%
+ \ignorespaces%
+ \fi}
+
+\providecommand{\timingprintmark}[1]{%
+ \timingprint{\footnotesize#1}}
+\providecommand{\timingprintremark}[1]{%
+ \timingprint[r]{\tiny\sffamily\hrule#1\hrule}}
+
+\newcommand{\sti@warn}[2][l]{\ifsti@printwarning%
+ \timingprint[#1]{\scriptsize\textbf{warn}\\#2}\fi}
+
+\newcommand{\timingcomment}[2][]{%
+ \sti@processflags{#1}%
+ \ifsti@flag%
+ \ifsti@printcomment\timingprintremark{#2}\fi%
+ \fi}
+
+\newcommand{\sti@notesessiontotal}[2]{%
+ \expandafter\gdef\csname sti@sessiontotal@#1\endcsname{#2}}
+\AtBeginDocument{\immediate\write\@auxout{%
+ \string\providecommand{\string\sti@notesessiontotal}[2]{}}}
+\newcommand{\sti@writesessiontotal}[1]
+ {\immediate\write\@auxout{\string\sti@notesessiontotal%
+ {\arabic{sti@session}}{#1}}}
+
+\newcommand\timingsessiontotal[2][??]{%
+ \expandafter\let\expandafter\timingreturn%
+ \csname sti@sessiontotal@#2\endcsname%
+ \ifx\timingreturn\relax\def\timingreturn{#1}\fi}
+
+\providecommand{\chaptermark}[1]{}
+\let\sti@oldchaptermark=\chaptermark
+\let\sti@oldsectionmark=\sectionmark
+\let\sti@oldsubsectionmark=\subsectionmark
+\let\sti@oldsubsubsectionmark=\subsubsectionmark
+\let\sti@oldparagraphmark=\paragraphmark
+\let\sti@oldsubparagraphmark=\subparagraphmark
+\renewcommand{\chaptermark}[1]{%
+ \expandafter\gdef\expandafter\sti@secnum\expandafter{\thechapter}%
+ \expandafter\gdef\expandafter\sti@secmark\expandafter{#1}%
+ \xdef\sti@parmark{}\sti@oldchaptermark{#1}}
+\renewcommand{\sectionmark}[1]{%
+ \expandafter\gdef\expandafter\sti@secnum\expandafter{\thesection}%
+ \expandafter\gdef\expandafter\sti@secmark\expandafter{#1}%
+ \xdef\sti@parmark{}\sti@oldsectionmark{#1}}
+\renewcommand{\subsectionmark}[1]{%
+ \expandafter\gdef\expandafter\sti@secnum\expandafter{\thesubsection}%
+ \expandafter\gdef\expandafter\sti@secmark\expandafter{#1}%
+ \xdef\sti@parmark{}\sti@oldsubsectionmark{#1}}
+\renewcommand{\subsubsectionmark}[1]{%
+ \expandafter\gdef\expandafter\sti@secnum\expandafter{\thesubsubsection}%
+ \expandafter\gdef\expandafter\sti@secmark\expandafter{#1}%
+ \xdef\sti@parmark{}\sti@oldsubsectionmark{#1}}
+\renewcommand{\paragraphmark}[1]{%
+ \expandafter\gdef\expandafter\sti@parmark\expandafter{#1}%
+ \sti@oldparagraphmark{#1}}
+\renewcommand{\subparagraphmark}[1]{%
+ \expandafter\gdef\expandafter\sti@parmark\expandafter{#1}%
+ \sti@oldsubparagraphmark{#1}}
+
+\providecommand{\timingprintsession}[2]{\timingprintremark{%
+ session #1%
+ \timingsessiontotal[0]{#1}\ifnum\timingreturn>0%
+ \\(\timingreturn\ min)%
+ \ifnum #2>0\\at #2 min\fi\fi\vphantom{g}}}
+
+\newcommand{\sti@startsession}{%
+ \setcounter{sti@insession}{1}%
+ \stepcounter{sti@session}%
+ \ifsti@printsession%
+ \timingprintsession{\arabic{sti@session}}{\arabic{sti@sessiontime}}%
+ \fi%
+ \sti@addsessionline}
+
+\newcommand{\sti@checksession}{%
+ \ifnum\value{sti@autosession}>0%
+ \ifnum\value{sti@insession}=0%
+ \setcounter{sti@sessiontime}{0}%
+ \timingsession%
+ \else%
+ \ifnum\value{sti@sessiontime}<\value{sti@autosession}\else%
+ \sti@writesessiontotal{\arabic{sti@autosession}}%
+ \addtocounter{sti@sessiontime}{-\value{sti@autosession}}%
+ \sti@startsession%
+ \sti@checksession%
+ \fi%
+ \fi%
+ \fi}
+
+\newcommand{\timingsession}[1][]{%
+ \timingsessionend[#1]%
+ \sti@processflags{#1}%
+ \ifsti@flag%
+ \setcounter{sti@sessiontime}{0}%
+ \sti@startsession%
+ \fi\ignorespaces}
+
+\newcommand{\timingsessionend}[1][]{%
+ \sti@processflags{#1}%
+ \ifsti@flag%
+ \ifnum\value{sti@insession}=1%
+ \sti@writesessiontotal{\thesti@sessiontime}%
+ \setcounter{sti@insession}{0}%
+ \setcounter{sti@sessiontime}{0}%
+ \fi%
+ \fi\ignorespaces}
+\AtEndDocument{\timingsessionend}
+
+\newcommand\timinglistofsessions{\@starttoc{los}}
+\providecommand{\timingsessionline}[5]{\ \\%
+ \makebox[3em][r]{#1: }\makebox[2.5em][r]{#3. }%
+ \def\sti@tmp{#5}\ifx\sti@tmp\@empty #4\else\S\ #5\fi%
+ \timingsessiontotal[0]{#1}\ifnum\timingreturn>0%
+ \ [\timingreturn\ min\ifnum #2>0; #2 min into\fi]\fi}
+\newcommand{\sti@addsessionline}{%
+ \addtocontents{los}{\protect\timingsessionline%
+ {\thesti@session}{\thesti@sessiontime}%
+ {\sti@secnum}{\sti@secmark}{\sti@parmark}}}%
+
+\newcommand{\sti@notechaptertotal}[2]{%
+ \expandafter\gdef\csname sti@chaptertotal@#1\endcsname{#2}}
+\AtBeginDocument{\immediate\write\@auxout{%
+ \string\providecommand{\string\sti@notechaptertotal}[2]{}}}
+\newcommand{\sti@writechaptertotal}
+ {\immediate\write\@auxout{\string\sti@notechaptertotal%
+ {\arabic{sti@chapter}}{\thesti@chaptertime}}}
+
+\newcommand{\sti@notechapterlabel}[2]{%
+ \expandafter\gdef\csname sti@chapterlabel@#1\endcsname{#2}}
+\AtBeginDocument{\immediate\write\@auxout{%
+ \string\providecommand{\string\sti@notechapterlabel}[2]{}}}
+\newcommand{\timingchapterlabel}[1]
+ {\immediate\write\@auxout{\string\sti@notechapterlabel%
+ {#1}{\arabic{sti@chapter}}}}
+
+\newcommand\sti@chaptertotalnumber[2][??]{%
+ \expandafter\let\expandafter\timingreturn%
+ \csname sti@chaptertotal@#2\endcsname%
+ \ifx\timingreturn\relax\def\timingreturn{#1}\fi}
+\newcommand\sti@chaptertotallabel[2][??]{%
+ \expandafter\let\expandafter\timingreturn%
+ \csname sti@chapterlabel@#2\endcsname%
+ \ifx\timingreturn\relax\else%
+ \expandafter\let\expandafter\timingreturn%
+ \csname sti@chaptertotal@\timingreturn\endcsname\fi%
+ \ifx\timingreturn\relax\def\timingreturn{#1}\fi}
+\newcommand\timingchaptertotal{%
+ \@ifstar{\sti@chaptertotalnumber}{\sti@chaptertotallabel}}
+
+\providecommand\timingprintchapter[1]{\timingprintmark{\raisebox{2.8ex}{%
+ \textbf{\timingchaptertotal*{#1}\timingreturn}%
+ \rlap{\kern0.4em$\star$}\kern1.2em}}}
+
+\newcommand{\timingchapter}[1][]{%
+ \sti@processflags{#1}%
+ \ifsti@flag%
+ \ifnum\value{sti@inblock}=1%
+ \PackageWarning{sesstime}{chapter: still in block; stopped}%
+ \sti@warn{chap}%
+ \sti@blockstopby{0}%
+ \fi%
+ \timingchapterend%
+ \setcounter{sti@inchapter}{1}%
+ \setcounter{sti@chaptertime}{0}%
+ \stepcounter{sti@chapter}%
+ \ifsti@printchapter\timingprintchapter{\arabic{sti@chapter}}\fi%
+ \fi\ignorespaces}
+
+\newcommand{\timingchapterend}[1][]{%
+ \sti@processflags{#1}%
+ \ifsti@flag%
+ \ifnum\value{sti@inblock}=1%
+ \PackageWarning{sesstime}{chapterend: still in block; stopped}%
+ \sti@warn{chap}%
+ \sti@blockstopby{0}%
+ \fi%
+ \ifnum\value{sti@inchapter}=1%
+ \sti@writechaptertotal%
+ \setcounter{sti@inchapter}{0}%
+ \setcounter{sti@chaptertime}{0}%
+ \fi%
+ \fi\ignorespaces}
+\AtEndDocument{\timingchapterend}
+
+\newcommand{\sti@noteblocktotal}[3]{%
+ \expandafter\gdef\csname sti@blocktotal@#1@#2\endcsname{#3}}
+\AtBeginDocument{\immediate\write\@auxout%
+ {\string\providecommand{\string\sti@noteblocktotal}[3]{}}}
+\newcommand{\sti@writeblocktotal}
+ {\immediate\write\@auxout{\string\sti@noteblocktotal%
+ {\arabic{sti@chapter}}{\arabic{sti@block}}{\thesti@blocktime}}}
+
+\newcommand\sti@blocktotalcurrent[1][??]{%
+ \expandafter\let\expandafter\timingreturn%
+ \csname sti@blocktotal@\arabic{sti@chapter}@\arabic{sti@block}\endcsname%
+ \ifx\timingreturn\relax\def\timingreturn{#1}\fi}
+\newcommand\sti@blocktotalnext[1][??]{%
+ \setcounter{sti@tmp}{\arabic{sti@block}}\stepcounter{sti@tmp}%
+ \expandafter\let\expandafter\timingreturn%
+ \csname sti@blocktotal@\arabic{sti@chapter}@\arabic{sti@tmp}\endcsname%
+ \ifx\timingreturn\relax\def\timingreturn{#1}\fi}
+\newcommand\timingblocktotal{\@ifstar%
+ {\sti@blocktotalnext}{\sti@blocktotalcurrent}}
+
+\newcommand{\timingprintblock}[3]{\timingprintmark{%
+ \def\sti@tmp{#2}\ifx\sti@tmp\@empty%
+ \raisebox{-1ex}{#1\rlap{\kern0.4em$\Updownarrow$}}\kern1.2em%
+ \else%
+ \def\sti@tmp{#1}\ifx\sti@tmp\@empty\else%
+ #1\rlap{\kern0.4em$\Uparrow$%
+ \vphantom{$\Updownarrow$}}\kern1.2em\hrule\fi%
+ \textbf{#2}\rlap{\vphantom{$\Updownarrow$}}\kern1.2em%
+ \def\sti@tmp{#3}\ifx\sti@tmp\@empty\else%
+ \hrule#3\rlap{\kern0.4em$\Downarrow$%
+ \vphantom{$\Updownarrow$}}\kern1.2em\fi%
+ \fi}}
+
+\newcommand{\sti@advanceby}[1]{%
+ \ifnum\value{sti@inblock}=1\addtocounter{sti@blocktime}{#1}\fi%
+ \ifnum\value{sti@inchapter}=1\addtocounter{sti@chaptertime}{#1}\fi%
+ \ifnum\value{sti@insession}=1\addtocounter{sti@sessiontime}{#1}\fi}
+
+\def\sti@hoursminutes#1:#2!{%
+ \multiply\value{sti@tmp}60\addtocounter{sti@tmp}{#1}%
+ \def\sti@tmp{#2}\ifx\sti@tmp\@empty\else\sti@hoursminutes#2!\fi}
+
+\newcommand{\sti@computedelta}[1]{%
+ \setcounter{sti@tmp}{0}%
+ \sti@hoursminutes#1:!%
+ \addtocounter{sti@tmp}{-\value{sti@blockgauge}}%
+ \addtocounter{sti@tmp}{-\value{sti@blocktime}}}
+
+\newcommand{\sti@warnneg}[1]{%
+ \ifnum #1<0%
+ \PackageWarning{sesstime}{block: negative time elapsed}%
+ \sti@warn{neg}%
+ \fi}
+
+\newcommand{\sti@blockstartat}[2][]{%
+ \sti@computedelta{#2}%
+ \sti@blockstartby[#1]{\value{sti@tmp}}}
+\newcommand{\sti@blockstartby}[2][]{%
+ \sti@processflags{#1}%
+ \ifsti@flag%
+ \ifnum\value{sti@inblock}=1%
+ \PackageWarning{sesstime}{already in block}%
+ \sti@warn{block}%
+ \else%
+ \setcounter{sti@inblock}{1}%
+ \addtocounter{sti@blockgauge}{\arabic{sti@blocktime}}%
+ \addtocounter{sti@blockgauge}{#2}%
+ \setcounter{sti@blocktime}{0}%
+ \stepcounter{sti@block}%
+ \sti@checksession%
+ \ifsti@printblock\timingblocktotal%
+ \timingprintblock{}{\thesti@chaptertime}{\timingreturn}%
+ \fi%
+ \fi%
+ \fi\nopagebreak}
+\newcommand{\timingstart}{\@ifstar{\sti@blockstartby}{\sti@blockstartat}}
+
+\newcommand{\sti@blocksplitat}[2][]{%
+ \sti@computedelta{#2}%
+ \sti@blocksplitby[#1]{\value{sti@tmp}}}
+\newcommand{\sti@blocksplitby}[2][]{%
+ \sti@processflags{#1}%
+ \ifsti@flag%
+ \ifnum\value{sti@inblock}=0%
+ \PackageWarning{sesstime}{not in block}%
+ \sti@warn{block}%
+ \else%
+ \sti@warnneg{#2}%
+ \sti@advanceby{#2}%
+ \sti@checksession%
+ \ifsti@printblock%
+ \timingprintblock{\thesti@blocktime}{}{}%
+ \fi%
+ \fi%
+ \fi}
+\newcommand{\timingsplit}{\@ifstar{\sti@blocksplitby}{\sti@blocksplitat}}
+
+\newcommand{\sti@blockstopat}[2][]{%
+ \sti@computedelta{#2}%
+ \sti@blockstopby[#1]{\value{sti@tmp}}}
+\newcommand{\sti@blockstopby}[2][]{%
+ \sti@processflags{#1}%
+ \ifsti@flag%
+ \ifnum\value{sti@inblock}=0%
+ \PackageWarning{sesstime}{not in block}%
+ \sti@warn{block}%
+ \else%
+ \sti@warnneg{#2}%
+ \sti@advanceby{#2}%
+ \sti@writeblocktotal%
+ \ifsti@printblock%
+ \timingprintblock{\thesti@blocktime}{\thesti@chaptertime}{}%
+ \fi%
+ \setcounter{sti@inblock}{0}%
+ \setcounter{sti@blocktime}{0}%
+ \fi%
+ \fi}
+\newcommand{\timingstop}{\@ifstar{\sti@blockstopby}{\sti@blockstopat}}
+
+\newcommand{\sti@blocknextat}[2][]{%
+ \sti@computedelta{#2}%
+ \sti@blocknextby[#1]{\value{sti@tmp}}}
+\newcommand{\sti@blocknextby}[2][]{%
+ \sti@processflags{#1}%
+ \ifsti@flag%
+ \ifnum\value{sti@inblock}=0%
+ \PackageWarning{sesstime}{not in block}%
+ \sti@warn{block}%
+ \else%
+ \sti@warnneg{#2}%
+ \sti@advanceby{#2}%
+ \sti@writeblocktotal%
+ \stepcounter{sti@block}%
+ \ifsti@printblock\timingblocktotal%
+ \timingprintblock{\thesti@blocktime}%
+ {\thesti@chaptertime}{\timingreturn}%
+ \fi%
+ \addtocounter{sti@blockgauge}{\arabic{sti@blocktime}}%
+ \setcounter{sti@blocktime}{0}%
+ \sti@checksession%
+ \fi%
+ \fi}
+\newcommand{\timingnext}{\@ifstar{\sti@blocknextby}{\sti@blocknextat}}
+
+\newcommand{\timinglapse}[2][]{%
+ \sti@processflags{#1}%
+ \ifsti@flag%
+ \ifnum\value{sti@inblock}=1%
+ \addtocounter{sti@blockgauge}{-#2}%
+ \fi%
+ \sti@advanceby{#2}%
+ \fi}
+
+\newcommand{\timinggauge}[2][]{%
+ \sti@processflags{#1}%
+ \ifsti@flag%
+ \sti@computedelta{#2}%
+ \addtocounter{sti@blockgauge}{\value{sti@tmp}}%
+ \fi}
+
+\endinput
+%%
+%% End of file `sesstime.sty'.