summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/texpower/powersem.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/texpower/powersem.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/texpower/powersem.dtx')
-rw-r--r--macros/latex/contrib/texpower/powersem.dtx411
1 files changed, 411 insertions, 0 deletions
diff --git a/macros/latex/contrib/texpower/powersem.dtx b/macros/latex/contrib/texpower/powersem.dtx
new file mode 100644
index 0000000000..9aa23d72ba
--- /dev/null
+++ b/macros/latex/contrib/texpower/powersem.dtx
@@ -0,0 +1,411 @@
+% \iffalse meta-comment
+% --------------------------------------------------------------
+% Part of the TeXPower bundle
+% Copyright (C) 1999-2004 Stephan Lehmke
+%
+% This program is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License
+% as published by the Free Software Foundation; either version 2
+% of the License, or (at your option) any later version.
+%
+% This program is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+% GNU General Public License for more details.
+% --------------------------------------------------------------
+%
+% powersem.dtx,v 1.3 2005/03/28 22:31:01 hansfn Exp
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{powersem.dtx}
+%</driver>
+%<powersem>\NeedsTeXFormat{LaTeX2e}
+%<powersem>\ProvidesClass{powersem}
+%<*powersem>
+ [2004/07/27 v0.8a Create online Presentations with seminar.]
+%</powersem>
+%
+%<*driver>
+\documentclass{ltxdoc}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+ \DocInput{powersem.dtx}
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \CheckSum{366}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+%
+% \GetFileInfo{powersem.dtx}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+% \title{The \textsf{powersem} class\thanks{This document
+% corresponds to \textsf{powersem}~\fileversion, dated \filedate.}}
+% \author{ Stephan Lehmke \\ \texttt{Stephan.Lehmke@cs.uni-dortmund.de}}
+%
+% \maketitle
+%
+% \tableofcontents
+%
+% \section{Introduction}
+%
+% The user documentation is found in \texttt{manual.tex} and the FAQ.
+% Only the implementation documentation is covered in this document.
+%
+% Make seminar ready for the Third Millennium ;-)
+% This class loads seminar and tries to fix some problems which occur when trying to create dynamic presentations with
+% the texpower package.
+%
+% Some new features helpful for dynamic presentations are also added.
+%
+% This class is part of the TeXPower bundle, to be found at\\ % |http://texpower.sourceforge.net/|
+%
+% The TeXPower bundle also contains a package \texttt{fixseminar.sty} which applies some more fixes, in particular for
+% hyperref. These can not be applied here because they have to be made after hyperref is loaded.
+%
+% \StopEventually{\PrintChanges\PrintIndex}
+%
+% \section{Implementation}
+%
+% \changes{v0.1}{1999/10/18}{First version. So far it doesn't do much more than load seminar.}
+%
+% \changes{v0.2}{2000/03/28}{Force seminar to treat \cs{paperwidth} and \cs{paperheight} in a
+% sensible manner.}
+%
+% \changes{v0.3}{2000/05/10}{Added option `calcdimensions'.}
+%
+% \changes{v0.4}{2000/06/16}{Now separates text from footnotes when option `display' is given.}
+%
+% \changes{v0.5}{2000/06/26}{\cs{@colht} is ignored by seminar, which is bad. Added a patch to
+% \cs{set@slidesize}. calcdimensions now handles slide frames.}
+%
+% \changes{v0.5a}{2000/07/03}{The footnote patch with option display effectively disabled setting
+% \cs{centerslidestrue}. Fixed.}
+%
+% \changes{v0.6}{2001/11/10}{seminar's \cs{output@slide} kernel copied (from seminar.bg2) and
+% modified for better color handling and to remove some overfull \cs{vbox} warnings. There was
+% another underfull vbox warning lurking in the footnote patch. Removed. New option truepagenumbers
+% for cooperation with texpower in case `fragmented' slide numbers (like 3.5.1) are used. Make
+% seminar's form of raggedright lines (controlled by \cs{raggedslides}) active in parboxes and
+% minipages (and p columns in tables or arrays).}
+%
+% \changes{v0.7}{2002/11/22}{Inserted \cs{nointerlineskip} in page building code to heal a slight
+% problem with vertical spacing. A small modification was neccessary wrt the KOMA option because
+% with fixseminar v0.0.4, pdflatex slides can now be rotated.}
+%
+% \changes{v0.8}{2003/05/06}{Some fixes provided by Pascal Kockaert to (hopefully) get better
+% behaviour with seminar's ``article'' option - many thanks!}
+%
+% \changes{v0.8a}{2004/07/27}{Moved to dtx format. No other code changes.}
+%
+% \begin{macrocode}
+\RequirePackage{ifthen}
+% \end{macrocode}
+%
+% The display option is understood by all relevant classes and packages from the TeXPower bundle. It means that
+% `dynamic' features are to be turned on.
+% There is a boolean register display (as defined in ifthen.sty) which is set by this option and can be used to
+% differentiate between slides for display and slides for printout.
+% Notes are disabled automatically.
+% \begin{macrocode}
+\newboolean{display}
+\DeclareOption{display}
+{\setboolean{display}{true}\PassOptionsToClass{slidesonly}{seminar}}
+% \end{macrocode}
+%
+% The truepagenumbers option makes powersem count pages with the counter page, independently of the counter slide. This
+% enables proper working of TeXPowers navigation buttons (some of which calculate relative page numbers) even when the
+% counter slide is reset frequently (for slide numberings of the type |<l>.<n>.<m>|).
+% \begin{macrocode}
+\newboolean{truepn@PS}
+\DeclareOption{truepagenumbers}{\setboolean{truepn@PS}{true}}
+% \end{macrocode}
+%
+% The KOMA option tells powersem to load scrartcl (from the KOMA suite of document classes) instead of article.
+% \begin{macrocode}
+\newboolean{BaseClass@PS}
+\DeclareOption{KOMA}
+{\setboolean{BaseClass@PS}{true}\providecommand{\baseclass}{scrartcl}}
+% \end{macrocode}
+%
+% The UseBaseClass option is more neutral: It tells powersem to load the class |\baseclass| (initially article) instead of
+% article.
+% \begin{macrocode}
+\DeclareOption{UseBaseClass}
+{\setboolean{BaseClass@PS}{true}\providecommand{\baseclass}{article}}
+% \end{macrocode}
+%
+% The reportclass option tells powersem to load the class |\baseclass| (initially report) instead of
+% article.
+% \begin{macrocode}
+\DeclareOption{reportclass}
+{\setboolean{BaseClass@PS}{true}\providecommand{\baseclass}{report}}
+% \end{macrocode}
+%
+% The bookclass option tells powersem to load the class |\baseclass| (initially report) instead of
+% article.
+% \begin{macrocode}
+\DeclareOption{bookclass}
+{\setboolean{BaseClass@PS}{true}\providecommand{\baseclass}{book}}
+% \end{macrocode}
+%
+% We need to redefine the a4paper option which is broken in seminar.cls
+% \begin{macrocode}
+\DeclareOption{a4paper}{\PassOptionsToClass{a4}{seminar}}
+% \end{macrocode}
+%
+% The calcdimensions option tells powersem to automatically calculate slidewidth and slideheight from paper dimensions
+% and margins.
+% \begin{macrocode}
+\newboolean{calcdim@PS}
+\DeclareOption{calcdimensions}{\setboolean{calcdim@PS}{true}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{seminar}}
+
+\ProcessOptions
+% \end{macrocode}
+%
+% Now we need to hack a little to make seminar load |\baseclass| instead of article (if one of the respectice options was
+% given).
+% \begin{macrocode}
+\let\oldLC@PS=\LoadClass
+
+\ifthenelse{\boolean{BaseClass@PS}}
+{%
+ \def\article@PS{article}
+% \end{macrocode}
+% Make |\PassOptionsToClass| and |\LoadClass| use |\baseclass|...
+% \begin{macrocode}
+ \let\oldPOTC@PS=\PassOptionsToClass
+ \def\PassOptionsToClass#1#2%
+ {\edef\cls@PS{#2}%
+ \ifx\article@PS\cls@PS\oldPOTC@PS{#1}{\baseclass}%
+ \else\oldPOTC@PS{#1}{#2}%
+ \fi}
+% \end{macrocode}
+% Furthermore, seminar redefines |\paperheight| and |\paperwidth|, saving their value in |\sem@paperheight| and
+% |\sem@paperwidth|. We undo this so the paper dimension calculation of typearea can be used.
+% \begin{macrocode}
+ \renewcommand{\LoadClass}[2][]%
+ {%
+ \edef\cls@PS{#2}%
+ \ifx\article@PS\cls@PS
+ \let\paperheight\sem@paperheight\let\paperwidth\sem@paperwidth
+ \oldLC@PS[#1]{\baseclass}%
+ \ifarticle\else\portraittrue\fi
+ \else
+ \oldLC@PS[#1]{#2}%
+ \fi
+ }%
+}
+{}
+% \end{macrocode}
+%
+% Finally, the seminar class and some bug fixes are loaded.
+% \begin{macrocode}
+\oldLC@PS{seminar}
+
+\AtBeginDocument
+{%
+\input{seminar.bug}%
+\input{seminar.bg2}%
+}
+
+\expandafter\def\expandafter\set@slidesize\expandafter
+{\set@slidesize\@colht\vsize}
+
+\g@addto@macro\@arrayparboxrestore\slide@rightskip
+
+\ifthenelse{\boolean{truepn@PS}}{\truepagenumbers}{}
+
+\AtBeginDocument{%
+\ifthenelse{\boolean{BaseClass@PS}}{\sliderotation{none}}{}}
+% \end{macrocode}
+%
+% Make some changes in the seminar kernel to hopefully get better handling of text colors and avoid overfull box
+% warnings when |\slidetopmargin| and |\slidebottommargin| are set too small.
+% \begin{macrocode}
+\AtBeginDocument{%
+\ifarticle
+\else
+ \def\output@slide{%
+ \begingroup
+ \hoffset=-\inverseslidesmag in
+ \voffset=-\inverseslidesmag in
+ \setslidelength\@tempdima{%
+ \ifportrait\paperwidth\else\paperheight\fi}%
+ \setslidelength\@tempdimb{%
+ \ifportrait\paperheight\else\paperwidth\fi}%
+ \ifrotateheaders
+ \@ifrotateslide{%
+ \dimen@=\@tempdima
+ \@tempdima=\@tempdimb
+ \@tempdimb=\dimen@}%
+ \fi
+ % \oddsidemargin, \evensidemargin, \headheight, \footheight
+ % used for scratch:
+ \setslidelength\headheight\slidetopmargin
+ \setslidelength\footheight\slidebottommargin
+ \ifautoslidemargins
+ \textwidth=\wd\@slidebox
+ \oddsidemargin=\@tempdima
+ \advance\oddsidemargin-\textwidth
+ \divide\oddsidemargin 2
+ \else
+ \setslidelength\oddsidemargin\slideleftmargin
+ \setslidelength\evensidemargin\sliderightmargin
+ \textwidth=\@tempdima
+ \advance\textwidth-\oddsidemargin
+ \advance\textwidth-\evensidemargin
+ \fi
+ \setbox\@slidebox=\hbox to \@tempdima{{%
+% \end{macrocode}
+% All double \{\{ around box contents added for better color handling (STL).
+% \begin{macrocode}
+ %
+ \kern\oddsidemargin
+ \vbox to\@tempdimb{{%
+ \ifnum\fancyput@flag>-1
+ \hbox{\kern-\oddsidemargin\do@fancyput}%
+ \fi
+ \let\label\@gobble
+ \let\index\@gobble
+ \let\glossary\@gobble
+ \vbox to\headheight{{%
+ \vfill
+ \color@hbox
+ \normalcolor
+ \slideheadfont\relax%\strut Removed (STL)
+ \hb@xt@\textwidth{\@oddhead}%
+ \color@endbox
+ \kern\z@}}%
+ \nointerlineskip
+ \vss
+ \hbox to\textwidth{{\hss\box\@slidebox\hss}}%
+ \vss
+ \nointerlineskip
+ \vbox to\footheight{{%
+ \vfill
+ \color@hbox
+ \normalcolor
+ \slidefootfont\relax%\strut Removed (STL)
+ \hb@xt@\textwidth{\@oddfoot}%
+ \color@endbox
+ \vfill}}%
+ }}\hss}}%
+ \ifrotateheaders\@ifrotateslide\rotate@slide\fi
+ \insert@specials
+ \shipout\box\@slidebox
+ \endgroup
+ \let\firstmark\botmark
+ \ifthenelse{\boolean{truepn@PS}}{\stepcounter{page}}{}%
+% \end{macrocode}
+% The above will seriously upset notes! (STL)
+% \begin{macrocode}
+ }%
+ \@ifundefined{fancyput@flag}{\def\fancyput@flag{-1}}{}%
+\fi
+}
+% \end{macrocode}
+%
+% When producing slides to be displayed interactively, we must make absolutely sure that interactive building of slides
+% doesn't move text which has already been set. So slides are not to be centered.
+% \begin{macrocode}
+\ifthenelse{\boolean{display}}
+{%
+ \centerslidesfalse
+ \extraslideheight{0pt}%
+ \renewcommand{\slideshrink}{0}%
+ \def\@makeslide{%
+ \ifcenterslides
+ \setbox\@slidebox\vbox{{%
+ \@begindvi % added 1997/04/15 SPQR
+ \unvbox\@cclv
+ \ifvoid\slide@footins\else
+ \vskip\skip\slide@footins
+ \footnoterule
+ \unvbox\slide@footins
+ \fi
+ \vskip\z@}}
+ \else
+ \setbox\@slidebox\vbox to \slide@vsize{{%
+ \@begindvi % added 1997/04/15 SPQR
+ \unvbox\@cclv
+ \ifvoid\slide@footins\vfil\else
+ \vfil\vskip\skip\slide@footins
+ \footnoterule
+ \unvbox\slide@footins
+ \fi
+ \vskip\z@}}%
+ \fi
+ }%
+ }
+{}
+% \end{macrocode}
+%
+% If powersem is asked to calculate the slide dimensions...
+% \begin{macrocode}
+\def\relax@PS{\relax}
+
+\ifthenelse{\boolean{calcdim@PS}}
+{%
+ \AtBeginDocument
+ {%
+ \setlength{\slidewidth}{\paperwidth}%
+ \advance\slidewidth by -\slideleftmargin\relax
+ \advance\slidewidth by -\sliderightmargin\relax
+ \ifx\theslideframe\relax@PS
+ \else
+ \advance\slidewidth by -2\slideframewidth\relax
+ \advance\slidewidth by -2\slideframesep\relax
+ \fi
+ \setlength{\slideheight}{\paperheight}%
+ \advance\slideheight by -\slidetopmargin\relax
+ \advance\slideheight by -\slidebottommargin\relax
+ \ifx\theslideframe\relax@PS
+ \else
+ \advance\slideheight by -2\slideframewidth\relax
+ \advance\slideheight by -2\slideframesep\relax
+ \fi
+ }%
+ }
+{}
+
+\AtBeginDocument
+{%
+ \@ifundefined{headwidth}{}
+ {%
+ \setslidelength{\headwidth}{\paperwidth}%
+ \addtoslidelength{\headwidth}{-\slideleftmargin}%
+ \addtoslidelength{\headwidth}{-\sliderightmargin}%
+ }%
+}
+% \end{macrocode}
+% \Finale
+\endinput