From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/slidenotes/obox.sty | 67 + macros/latex/contrib/slidenotes/slidenotes.cfg | 52 + macros/latex/contrib/slidenotes/slidenotes.dtx | 1638 +++++++++++++++++++++ macros/latex/contrib/slidenotes/slidenotes.ins | 36 + macros/latex/contrib/slidenotes/slidenotes.pdf | Bin 0 -> 162683 bytes macros/latex/contrib/slidenotes/slidenotes.readme | 14 + 6 files changed, 1807 insertions(+) create mode 100644 macros/latex/contrib/slidenotes/obox.sty create mode 100644 macros/latex/contrib/slidenotes/slidenotes.cfg create mode 100644 macros/latex/contrib/slidenotes/slidenotes.dtx create mode 100644 macros/latex/contrib/slidenotes/slidenotes.ins create mode 100644 macros/latex/contrib/slidenotes/slidenotes.pdf create mode 100644 macros/latex/contrib/slidenotes/slidenotes.readme (limited to 'macros/latex/contrib/slidenotes') diff --git a/macros/latex/contrib/slidenotes/obox.sty b/macros/latex/contrib/slidenotes/obox.sty new file mode 100644 index 0000000000..4959ef64a8 --- /dev/null +++ b/macros/latex/contrib/slidenotes/obox.sty @@ -0,0 +1,67 @@ +\NeedsTeXFormat{LaTeX2e}[1995/06/01] +\ProvidesPackage{obox}[1995/09/04 vs 1.2] +%------------------------------------------------------------------------------- +% produce from #1{dimen} or #1(number) -> #1{number\unitlength} +\def\@pickonedim#1{\@ifnextchar(%) + {\@@pickonedim{#1}}{#1}} +\def\@@pickonedim#1(#2){#1{#2\unitlength}} +%------------------------------------------------------------------------------- +% redefinition of oval uit picture omgeving +% \oval[position](width,height)[optional lrtb=parts] +% position where placed: +% o midpoint (default as in LaTeX picture environment) +% t top of oval at baseline +% b bottom of oval at baseline +% c halfheight of oval at baseline +% n neutral placement +\gdef\oval{\@ifnextchar[%] + {\@oval}{\@oval[o]}} +\gdef\@oval[#1](#2,#3){\@ifnextchar[%] + {\@@oval[#1](#2,#3)}{\@@oval[#1](#2,#3)[]}} +\gdef\@@oval[#1](#2,#3)[#4]{\begingroup\boxmaxdepth \maxdimen + \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue + \@tfor\reserved@a :=#4\do{\csname @ov\reserved@a false\endcsname}% + \@ovxx #2\unitlength \@ovyy #3\unitlength + \@tempdimb \ifdim\the@ovalradius=\z@ + \ifdim \@ovyy >\@ovxx \@ovxx \else \@ovyy \fi + \else \the@ovalradius \fi + \advance \@tempdimb -\tw@\p@ + \@getcirc \@tempdimb + \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa + \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@ + \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@ + \@circlefnt \setbox\@tempboxa + \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi + \if@ovl \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx \fi + \if@ovt \@ovhorz \kern -\@ovxx \fi + \if@ovb \raise \@ovyy \@ovhorz \fi}% + \advance\@ovdx\@ovro \advance\@ovdy\@ovro + \if#1t\@ovdx\z@\@ovdy\tw@\@ovdy\fi + \if#1b\@ovdx\z@\@ovdy\z@\fi + \if#1c\@ovdx\z@\fi + \if#1n\@ovdx\z@\@ovdy\dp\@tempboxa\fi + \ht\@tempboxa\z@ \dp\@tempboxa\z@ + \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}% + \endgroup} +%------------------------------------------------------------------------------- +% \obox[optional ovalradius(length)][optional linethickness-cmd]{box-contents} +\def\obox{\@ifnextchar[%] + {\@obox}{\@@obox[][]}} +\def\@obox[#1]{\@ifnextchar[%] + {\@@obox[#1]}{\@@obox[#1][]}} +\def\@@obox[#1][#2]#3{% + \begingroup + \@ifemptyarg{#1}{}{\ovalradius{#1}}% + \setbox\z@\hbox{\advance\fboxsep\@wholewidth \fboxrule\z@ \fbox{#3}}% + \dimen@\ht\z@ \advance\dimen@\dp\z@ #2\let\unitlength\@empty + \leavevmode\oval[n](\wd\z@,\dimen@)\box\z@ + \endgroup} +%------------------------------------------------------------------------------- +\def\ovalradius{\@pickonedim\@ovalradius} +\def\@ovalradius#1{\@tempdima#1\relax + \edef\the@ovalradius{\number\@tempdima sp}\ignorespaces} +\def\ovalfraction#1{% + \edef\the@ovalradius{#1\noexpand\@tempdimb}\ignorespaces} +\ovalradius{0pt} % initialisation +%------------------------------------------------------------------------------- +\endinput diff --git a/macros/latex/contrib/slidenotes/slidenotes.cfg b/macros/latex/contrib/slidenotes/slidenotes.cfg new file mode 100644 index 0000000000..952e9f8295 --- /dev/null +++ b/macros/latex/contrib/slidenotes/slidenotes.cfg @@ -0,0 +1,52 @@ +% EXAMPLE OF CFG-FILE -- SHOWS CUSTOMIZING +% +% fontchanges; e.g. instead of Computer Modern either Lucida or MathTime: +%\RequirePackage[expert]{lucbr} +%\RequirePackage{mathtime} +% +% Copyright notice found here: +\providecommand{\Copyright}{% + \InputIfFileExists{\commonfolder copyrightnotice.tex }% + {\mbox{}}{\mbox{}}} +% +% Allow more stretch in the lines, +% encourage pagebreaking at paragraphs, +% more strongly discourage widows +% +\tolerance=2000 \hbadness=2000 +\emergencystretch=1mm +\interlinepenalty=1000 +\widowpenalty 1000 +% +% squeeze displayed math in slides +\addtokstring{\everyslide}{\addtokstring{\everymath}{% + \setlength{\abovedisplayskip}{0pt} + \setlength{\belowdisplayskip}{0pt}}} +% +% spacing between items in sheets +\newcommand{\spacer}[1][\bigskipamount]{\par\addvspace{#1}} +% +% see lost characters (possibly wrong font/encoding) +\tracingonline=1 \tracinglostchars=1 +% +% adapted titlepage +\if@titlepage +\renewcommand{\maketitle}{% +\begin{titlepage} + \begin{center} + \vspace*{1cm}% + \mbox{}\rule{2cm}{0.4pt}\mbox{}\par + \addvspace{1cm}% + \begin{Large}\textbf{\Collection}\\[10mm]\end{Large} + \begin{large}\@title\\[5mm]\@author\\[5mm]\@date\\[10mm]\end{large} + \mbox{}\rule{2cm}{0.4pt}\mbox{}\par + \addvspace{2cm}\vfill\vfill + \end{center}% +\begin{flushleft}\Copyright\end{flushleft}% + \addvspace{2cm}\mbox{}% +\end{titlepage} +\let\maketitle=\relax} +\else\let\maketitle=\relax +\fi +% +\endinput diff --git a/macros/latex/contrib/slidenotes/slidenotes.dtx b/macros/latex/contrib/slidenotes/slidenotes.dtx new file mode 100644 index 0000000000..475ea8083e --- /dev/null +++ b/macros/latex/contrib/slidenotes/slidenotes.dtx @@ -0,0 +1,1638 @@ +% \CheckSum{1237} +% +%\iffalse % this is a METACOMMENT ! +% +%% File: slidenotes.dtx Copyright (C) 1993-1996 Hans van der Meer +%% +% +% \begin{macrocode} +%<*driver> +\documentclass{ltxdoc} +\ProvidesFile{slidenotes.dtx}[1998/04/23 3.27 Slides and notes] +\GetFileInfo{slidenotes.dtx} +\title{The \textsf{slidenotes} package% +\thanks{This file has version \fileversion\space dated \filedate.}} +\author{Hans van der Meer\\hansm@wins.uva.nl} +\date{Printed \today} +\DisableCrossrefs +\CodelineNumbered +%\RecordChanges +\begin{document} +\maketitle +\DocInput{slidenotes.dtx} +\end{document} +% +% \end{macrocode} +% +%\fi +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% \changes{3.00}{1994/03/21}{First version for LaTeX2E and docstrip} +% \changes{3.01}{1994/12/10}{Removed @vpt... macros} +% \changes{3.02}{1995/01/26}{sheets->slides, various changes} +% \changes{3.03}{1995/02/02}{small changes} +% \changes{3.04}{1995/08/11}{@currdir in folder defaults} +% \changes{3.05}{1995/08/28}{restructured documentation} +% \changes{3.06}{1995/08/29}{frame variations, LaTeX2e-isms} +% \changes{3.07}{1995/09/01}{frame variations, oval boxing problematic} +% \changes{3.08}{1995/09/04}{note (section) title -> toc error} +% \changes{3.09}{1995/09/05}{added vertical slide centering option} +% \changes{3.10}{1995/09/18}{cue macro changed} +% \changes{3.11}{1995/10/12}{everyslide, nofiles for slides added} +% \changes{3.12}{1995/10/23}{cue macro marginpar always same side} +% \changes{3.13}{1996/03/16}{changes to frame treatment} +% \changes{3.14}{1996/03/22}{check for slides that are too high} +% \changes{3.15}{1996/05/25}{nofiles removed} +% \changes{3.16}{1996/08/13}{test presence chapter, cleaning code} +% \changes{3.17}{1996/08/14}{on directory names changed pathseparator, +% disable tableofcontents if not notes} +% \changes{3.18}{1996/08/14}{added mixing of portrait and landscape} +% \changes{3.19}{1996/08/21}{added portrait/landscape selective code} +% \changes{3.20}{1996/08/23}{made all newcommands starred where appropiate, +% removed superfluous braces} +% \changes{3.21}{1997/03/08}{added better directory separator, +% changed slide dimensions to magnified sizes, +% corrected calculation of text dimensions, +% problem with missedslidecounter solved} +% \changes{3.22}{1997/03/14}{CurrentDirectory for @currdir added} +% \changes{3.23}{1998/02/17}{option to suppress newpage at slide} +% \changes{3.24}{1998/03/20}{ignorespaces in slide en note begin-commands} +% \changes{3.25}{1998/04/08}{stepcounter{slidecounter}->refstepcounter} +% \changes{3.26}{1998/04/15}{list in note environment zet parsep} +% \changes{3.27}{1998/04/23}{boldmath in titles on sheets} +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% \DoNotIndex{\#} +% \DoNotIndex{\@,} +% \DoNotIndex{\\} +% \DoNotIndex{\@dblarg} +% \DoNotIndex{\@empty} +% \DoNotIndex{\@firstoftwo} +% \DoNotIndex{\@height} +% \DoNotIndex{\@ifstar} +% \DoNotIndex{\@ifundefined} +% \DoNotIndex{\@m} +% \DoNotIndex{\@makeother} +% \DoNotIndex{\@namedef} +% \DoNotIndex{\@sanitize} +% \DoNotIndex{\@secondoftwo} +% \DoNotIndex{\@tempdima} +% \DoNotIndex{\@tempdimb} +% \DoNotIndex{\@title} +% \DoNotIndex{\@width} +% \DoNotIndex{\addtolength} +% \DoNotIndex{\addvspace} +% \DoNotIndex{\advance} +% \DoNotIndex{\begin} +% \DoNotIndex{\begingroup} +% \DoNotIndex{\bgroup} +% \DoNotIndex{\bigskip} +% \DoNotIndex{\bigskipamount} +% \DoNotIndex{\box} +% \DoNotIndex{\catcode} +% \DoNotIndex{\csname} +% \DoNotIndex{\def} +% \DoNotIndex{\dimen@} +% \DoNotIndex{\divide} +% \DoNotIndex{\dp} +% \DoNotIndex{\edef} +% \DoNotIndex{\egroup} +% \DoNotIndex{\end} +% \DoNotIndex{\endcsname} +% \DoNotIndex{\endgroup} +% \DoNotIndex{\endlist} +% \DoNotIndex{\enspace} +% \DoNotIndex{\expandafter} +% \DoNotIndex{\fbox} +% \DoNotIndex{\gdef} +% \DoNotIndex{\global} +% \DoNotIndex{\hbox} +% \DoNotIndex{\hfil} +% \DoNotIndex{\hfill} +% \DoNotIndex{\hrule} +% \DoNotIndex{\hspace} +% \DoNotIndex{\Huge} +% \DoNotIndex{\huge} +% \DoNotIndex{\ht} +% \DoNotIndex{\if,\else,\fi} +% \DoNotIndex{\ifcase,\or,\fi} +% \DoNotIndex{\ifdim,\fi} +% \DoNotIndex{\ifnum,\fi} +% \DoNotIndex{\ifodd,\fi} +% \DoNotIndex{\ifx,\fi} +% \DoNotIndex{\item} +% \DoNotIndex{\kern} +% \DoNotIndex{\LARGE} +% \DoNotIndex{\Large} +% \DoNotIndex{\large} +% \DoNotIndex{\let} +% \DoNotIndex{\list} +% \DoNotIndex{\m@ne} +% \DoNotIndex{\medskip} +% \DoNotIndex{\medskipamount} +% \DoNotIndex{\multiply} +% \DoNotIndex{\newcommand} +% \DoNotIndex{\newcounter} +% \DoNotIndex{\newenvironment} +% \DoNotIndex{\newif} +% \DoNotIndex{\newlength} +% \DoNotIndex{\newpage} +% \DoNotIndex{\newsavebox} +% \DoNotIndex{\newtoks} +% \DoNotIndex{\next} +% \DoNotIndex{\noexpand} +% \DoNotIndex{\noindent} +% \DoNotIndex{\null} +% \DoNotIndex{\p@} +% \DoNotIndex{\par} +% \DoNotIndex{\parbox} +% \DoNotIndex{\raggedright} +% \DoNotIndex{\relax} +% \DoNotIndex{\renewcommand} +% \DoNotIndex{\reserved@a} +% \DoNotIndex{\scriptsize} +% \DoNotIndex{\setbox} +% \DoNotIndex{\setlength} +% \DoNotIndex{\sloppy} +% \DoNotIndex{\small} +% \DoNotIndex{\smallskip} +% \DoNotIndex{\smallskipamount} +% \DoNotIndex{\space} +% \DoNotIndex{\stepcounter} +% \DoNotIndex{\string} +% \DoNotIndex{\strut} +% \DoNotIndex{\test} +% \DoNotIndex{\the} +% \DoNotIndex{\tiny} +% \DoNotIndex{\tw@} +% \DoNotIndex{\typeout} +% \DoNotIndex{\undefined} +% \DoNotIndex{\value} +% \DoNotIndex{\vbox} +% \DoNotIndex{\vfil} +% \DoNotIndex{\vfill} +% \DoNotIndex{\vskip} +% \DoNotIndex{\vspace} +% \DoNotIndex{\wd} +% \DoNotIndex{\xdef} +% \DoNotIndex{\z@} +% +% \begin{abstract} +% This article describes the use and the implementation of the +% \emph{slidenotes class}. +% Its purpose is the typesetting of slides and accompanying notes. +% Slides can be in portrait or landscape orientation. +% Options are the typesetting of the slides or slides plus notes, +% or a collection of slides in small format. +% \end{abstract} +% +% \tableofcontents +% +% \section{Usage} +% +% An input file may consist of a series of slides accompanied +% by notes. Below the format of a slide in a nutshell: +% +% \DescribeEnv{slide} +% \begin{verbatim} +% \begin{slide}[SLIDE TITLE (optional)] +% ... +% \slidesubtitle{SUBTITLE} +% ... +% +% ... +% \end{slide} +% \end{verbatim} +% +% or +% +% \DescribeEnv{portraitslide} +% \begin{verbatim} +% \begin{portraitslide}[SLIDE TITLE (optional)] +% ... +% \end{portraitslide} +% \end{verbatim} +% +% \DescribeEnv{landscapeslide} +% \begin{verbatim} +% \begin{landscapeslide}[SLIDE TITLE (optional)] +% ... +% \end{landscapeslide} +% \end{verbatim} +% +% Do not put anything text outside notes/slide, +% because it interferes destructively with the layout. +% +% \DescribeEnv{note} +% \begin{verbatim} +% \begin{note} +% ... +% \cue{MARGIN TEXT} +% ... +% +% ... +% \end{note} +% \end{verbatim} +% +% Use |\chapter| for the main structure, each note will +% be converted to a |\section|. +% Several parameters and font macro's are defined for various +% style features; they can be redefined, either in the document +% or in the \emph{slidenotes.cfg} file. +% These parameters exist for the dimensions of the slide, +% the font in the various text parts, several standard texts. +% +% Options exist for: +% \begin{itemize}\setlength{\itemsep}{0pt} +% \item choosing between slides, slides + notes, a collection of slides; +% \item landscape or portrait format; +% \item notes in a type one notch smaller than in the slides; +% \item variation in frame around slide. +% \item variation in vertical centering of the contents. +% \end{itemize} +% +% See the implementation sections for further details. +% +% \StopEventually{\PrintChanges} +% +% \section{Identification} +% +% This document class can only be used with \LaTeXe, so we make +% sure that an appropriate message is displayed when another \TeX{} +% format is used. +% +% \begin{macrocode} +%\NeedsTeXFormat{LaTeX2e}[1995/12/01] +% \end{macrocode} +% +% Announce class names and versions: +% \begin{macrocode} +%<*cls> +\ProvidesClass{slidenotes}[1998/04/23 3.27 Slides and notes] +% \end{macrocode} +% +% \section{Declaration of Class Options} +% +% In this part we define the options for this class that are additional +% to those of its parent class. +% +% \subsection{Show Options to User} +% +% Show options to the user with option |help|. +% +% \begin{macrocode} +\DeclareOption{help}{\ClassWarningNoLine{slidenotes}{% + Options (first one is default): + \MessageBreak + notes,slides,minis:\space type of production; + \MessageBreak + portrait,landscape:\space slide orientation; + \MessageBreak + mixed,unmixed,anti:\space both, chosen, anti orientation; + \MessageBreak + center,nocenter,squeeze:\space vertical slide position; + \MessageBreak + rect,oval,rules,drules,noframe:\space type of slideframe; + \MessageBreak + newpage,nonewpage:\space yes/no start slide on new page; + \MessageBreak + smallnotes:\space notes one notch smaller}} +% \end{macrocode} +% +% \subsection{Slides and/or Notes} +% +% \begin{macro}{\ifnotes} +% \begin{macro}{\ifslides} +% \begin{macro}{\ifminis} +% Flag |\ifnotes| governs the production of notes in the +% typesetting of slides and notes, +% flag |\ifslides| signals the typesetting of slides only +% and |\ifminis| is for the production of a smallsized slide collection. +% Options |notes|, |slides| and |minis| perform the selection +% of these modes. +% +% \begin{macrocode} +\newif\ifnotes +\newif\ifslides +\newif\ifminis +\DeclareOption{notes}{\notestrue\minisfalse\slidesfalse} +\DeclareOption{slides}{\notesfalse\minisfalse\slidestrue} +\DeclareOption{minis}{\notesfalse\ministrue\slidesfalse} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Portrait or Landscape Orientation} +% +% \begin{macro}{\iflandscape} +% Typesetting of slides can come in portrait or landscape format; +% even mixing of these within one document is possible. +% +% \begin{macrocode} +\newif\iflandscape +\DeclareOption{landscape}{\landscapetrue} +\DeclareOption{portrait}{\landscapefalse} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\ifmixed} +% \begin{macro}{\ifanti} +% The next series of flags control the production of mixed portrait\slash +% landscape slides or runs with one orientation only. +% +% With the |mixed| option one may mix portrait and landscape +% oriented slides. If a slide has an orientation differing +% from the one currently in effect (from the landscape and +% portrait class option), it will be rotated over 90 degrees. +% This however, requires the presence of one of the graphics +% styles (\emph{graphics.sty} or \emph{graphicx.sty}) and +% a conforming printer driver. +% If one of these styles is not already present, one +% will be loaded at the start of the document. +% +% The |unmixed| option is for the case where rotation is +% not possible (as for ex. the native OzTeX printer driver) +% or not wanted. Only slides conforming to the current +% orientation are typeset. E.g. if landscape format is chosen, +% then all slides produced from the environments |landscapeslide| +% and the neutral |slide| are done, those of |portraitslide| are skipped. +% If there are any slides skipped, +% then a warning will be issued and the job must be rerun with +% the |anti| option; this will produce the +% missing slides in the complementary orientation. +% The |anti| option can coexist with the |unmixed| option. +% +% \begin{macrocode} +\newif\ifmixed +\newif\ifanti +\DeclareOption{mixed}{\mixedtrue\antifalse} +\DeclareOption{unmixed}{\mixedfalse} +\DeclareOption{anti}{\mixedfalse\antitrue} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Vertical Centering of Slide Material} +% +% \begin{macro}{\ifcenter} +% \begin{macro}{\ifsqueeze} +% Everything below the title at the head of the slide can +% be centered vertically as well as kept tightly below the +% head, the options |center| and |nocenter| accomplish this. +% Filling will be done with |\vfil|, thereby allowing it +% to be overridden simply by the inclusion of a |\vfill|. +% Furthermore one can |squeeze| the slidebox to minimal height +% for the slides + notes combination. +% +% \begin{macrocode} +\newif\ifcenter +\newif\ifsqueeze +\DeclareOption{center}{\squeezefalse\centertrue} +\DeclareOption{nocenter}{\squeezefalse\centerfalse} +\DeclareOption{squeeze}{\squeezetrue\centerfalse} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Suppress Newpage with Slide} +% +% \begin{macro}{\ifnewpage} +% In typesetting notes it may be usefull to suppress the +% newpage at the beginning of a slide. +% This option has effect in note production only. +% +% \begin{macrocode} +\newif\ifnewpage +\DeclareOption{newpage}{\newpagetrue} +\DeclareOption{nonewpage}{\newpagefalse} +% \end{macrocode} +% \end{macro} +% +% \subsection{Notes in Smaller Type} +% +% \begin{macro}{\ifsmallnotes} +% The \texttt{smallnotes} option switches the font set +% in the notes one notch smaller than the standard +% sizes chosen in the style. The sizes in the slides +% are always those specified by the style. +% +% \begin{macrocode} +\newif\ifsmallnotes +\smallnotesfalse +\DeclareOption{smallnotes}{\smallnotestrue} +% \end{macrocode} +% \end{macro} +% +% \subsection{Variation in Slideframe} +% +% \begin{macro}{\framevariant} +% The frame of a slide can be rectangular, oval, +% delineated by rules or empty. +% +% \begin{macrocode} +\newcommand*\framevariant{} +\DeclareOption{noframe}{\renewcommand*\framevariant{n}} +\DeclareOption{rules}{\renewcommand*\framevariant{r}} +\DeclareOption{drules}{\renewcommand*\framevariant{d}} +\DeclareOption{rect}{\renewcommand*\framevariant{f}} +\DeclareOption{oval}{\renewcommand*\framevariant{o}} +% \end{macrocode} +% \end{macro} +% +% The |\obox| macro is in file \texttt{obox.sty}; +% if necessary it is read when document processing starts. +% +% \begin{macrocode} +\AtBeginDocument{\@ifundefined{obox}% + {\IfFileExists{obox.sty}{\RequirePackage{obox}}% + {\if\framevariant o + \ClassWarningNoLine{slidenotes}{oval option disabled}% + \renewcommand*\framevariant{f}\fi}}% + {}} +% \end{macrocode} +% +% \begin{macro}{\ovalslideframerule} +% An oval slideframe is drawn using LaTeX's picture command. +% Therefore the range of linethicknesses is restricted to +% those provided by the circle fonts. The following macro +% is defined to one of the standard linethickness commands. +% +% \begin{macrocode} +\newcommand*\ovalslideframerule{\thicklines} +% \end{macrocode} +% \end{macro} +% +% \subsection{Pass Options and Load Parent Class} +% +% \begin{macro}{\parentclass} +% Since the \emph{slidenotes class} is implemented as a modification +% of an existing document class, we must load the parent class. +% However in order to ease changes in parent class the +% name of this class is parametrized in macro |\parentclass|. +% An obvious candidate is \emph{report} or friends. +% +% Customize with a definition of |\parentclass| before +% calling |\documentclass|. +% +% \begin{macrocode} +\providecommand\parentclass{report} +% \end{macrocode} +% \end{macro} +% +% Set the class defaults. +% +% \begin{macrocode} +\ExecuteOptions{notes,portrait,mixed,rect,center,newpage} +% \end{macrocode} +% +% The options of the |\documentclass| call which are not specific for the +% \emph{slidenotes class} must be passed to the parent class. +% We take the opportunity to select some defaults, e.g. +% production of a titlepage in case the parent class is \emph{article}. +% +% \begin{macrocode} +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{\parentclass}} +\PassOptionsToClass{titlepage,a4paper}{\parentclass} +\ProcessOptions +% \end{macrocode} +% +% After this we load the parent class. +% Note that the landscape option is not passed if \texttt{notes} +% is also specified. +% For the production of skipped slides we may also need +% landscaped printing. +% +% \begin{macrocode} +\iflandscape\ifnotes\else + \PassOptionsToClass{landscape}{\parentclass}% +\fi\fi +\LoadClass{\parentclass} +% \end{macrocode} +% +% Show some of the options chosen. +% +% \begin{macrocode} +\ClassWarningNoLine{slidenotes}{% + \iflandscape LANDSCAPE\else PORTRAIT\fi + \space SLIDES\space + \ifminis COLLECTION \fi \ifnotes + NOTES \fi + PRODUCTION} +% \end{macrocode} +% +% \section{Some Useful Macros} +% +% We define some helpfull macros first, as we need them later on. +% Defining is with |\providecommand| just in case the parent class +% has already loaded them. +% +% \begin{macro}{\@swapdimens} +% This macro swaps two dimens with the help of a third. +% +% \begin{macrocode} +\providecommand*\@swapdimens[3]{#3=#1 #1=#2 #2=#3\relax} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@ifemptyarg} +% Testing for the presence or absence of a parameter. +% +% \begin{macrocode} +\providecommand{\@ifemptyarg}[1]{% {absence}{presence} + \ifx\@empty#1\@empty + \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} +% \end{macrocode} +% \end{macro} +% +% \subsection{Postprocessing of Options} +% +% Reset the squeeze option to false when slides or minis are produced. +% This is done to prevent the slide numbering jumping up and down. +% +% \begin{macrocode} +\ifminis\squeezefalse\fi +\ifslides\squeezefalse\fi +% \end{macrocode} +% +% Production of notes turns |mixed| on and |anti| off. +% When typesetting notes, no rotation on the part of the +% dvi driver is required; both can be displayed. +% +% \begin{macrocode} +\ifnotes\mixedtrue\antifalse\fi +% \end{macrocode} +% +% When the skipped slides are in production we must effectively +% change the orientation from landscape to portrait or vice versa. +% +% \begin{macrocode} +\ifanti + \iflandscape\landscapefalse\else\landscapetrue\fi + \ClassWarningNoLine{slidenotes}{ANTI OPTION => ORIENTATION CHANGED} +\fi +% \end{macrocode} +% +% \DescribeEnv{verbatim} +% We need the \emph{verbatim.sty} for skipping portions of the text. +% +% \begin{macrocode} +\RequirePackage{verbatim} +% \end{macrocode} +% +% \DescribeMacro{\rotatebox} +% We need the |\rotatebox| macro in case of mixed slides or minis; +% if necessary load \emph{graphics.sty}. +% We are even prepared for the case where this file cannot be found. +% +% \begin{macrocode} +\ifmixed\ifnotes\else + \AtBeginDocument{% + \@ifundefined{rotatebox}% + {\IfFileExists{graphics.sty}% + {\RequirePackage{graphics}}% + {\mixedfalse}% + }{}} +\fi\fi +% \end{macrocode} +% +% \section{Dimensions} +% +% \begin{macro}{\slidewidth} +% \begin{macro}{\slideheight} +% We give default values for height and width in portrait format, +% |\slideheight| and |\slidewidth| respectively. +% In the initialization section the landscape format is set +% by an exchange of height and width. Please note that +% these values are set for slides production: magnified values. +% They will be automatically diminished when slides \&\ notes are made. +% All other dimensions (frame separation, linethickness, etc.) +% must be given unmagnified values, just as one would do in +% normal typesetting. +% +% \begin{macrocode} +\newlength\slidewidth +\newlength\slideheight +\setlength\slidewidth{176mm} +\setlength\slideheight{248mm} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\slidemagnification} +% For the production of the slides the magnification is set to +% |\slidemagnification|. +% +% \begin{macrocode} +\newcommand*\slidemagnification{\magstep4} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\slideboxrule} +% \begin{macro}{\slideboxsep} +% \begin{macro}{\slidenotesep} +% \begin{macro}{\slidetitlesep} +% Furthermore we define special parameters for the +% separation between frame and contents of the slide, +% |\slideboxsep| and for the thickness of the frame, |\slideboxrule|. +% Length |\slidenotesep| is the distance between the slide +% and the note, |\slidetitlesep| the skip below a call of +% a (sub)title macro. +% +% \begin{macrocode} +\newlength\slideboxrule +\newlength\slideboxsep +\newlength\slidenotesep +\newlength\slidetitlesep +\setlength\slideboxrule{.2mm} +\setlength\slideboxsep{3mm} +\setlength\slidenotesep{8mm} +\setlength\slidetitlesep{\z@} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \section{Registers} +% +% \begin{macro}{\slidecounter} +% The slides are counted and the counter is reset whenever +% a new chapter is begun, if there is a chapter structure, of course. +% +% \begin{macrocode} +\@ifundefined{c@chapter}% + {\newcounter{slidecounter}}% + {\newcounter{slidecounter}[chapter]} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\missedslidecounter} +% If we have both the |mixed| and |anti| options off we must +% keep count of the number of slides passed over. +% Always define this counter, it may be present in the auxiliary +% files from a previous run. +% We cannot use the standard \LaTeX's |\newcounter| command, because the +% the value reported will be the value produced by the last +% included file; the reason being the recording of the counter +% in the auxiliary files. Therefore we use plain \TeX's |\newcount|. +% +% \begin{macrocode} +\newcount\missedslidecounter +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\minicounter} +% Minis come just four to a page, therefore we count them. +% +% \begin{macrocode} +\newcounter{minicounter} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\slidebox} +% Slides are typeset in a box for later placement and +% height adjustement. +% +% \begin{macrocode} +\newsavebox\slidebox +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\slidemarker} +% Slides are marked by a text and a number. The text by +% default comes from the |\chapter| macro and is put into +% a token register named |\slidemarker|. +% In the article style, however there is no chapter structure. +% There we intialize this +% token register from the |\title|; note that we need to do this +% at |\begin{document}|, because |\maketitle| interfers +% by setting |\@title| empty. +% +% \begin{macrocode} +\newtoks\slidemarker +\AtBeginDocument{% + \@ifundefined{@title}{\def\@title{\Collection}}{}% + \slidemarker={\@title}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\everyslide} +% \begin{macro}{\everynote} +% At the start of each slide a token register |\everyslide| is executed, +% where the user can place settings that should be local to each slide. +% The same for the start of each note where |\everynote| is executed. +% +% \begin{macrocode} +\newtoks\everyslide +\newtoks\everynote +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \section{Note Environment} +% +% \begin{environment}{note} +% In case of productions of slides the notes are simply left out; +% we effectuate this with the comment mechanism of the +% \emph{verbatim.sty}. Otherwise the material in +% the \texttt{note} environment is typeset. +% The environment for notes is started with font selections; +% the fontsize is initialized to normalsize, but all +% sizes are set one notch down for the |smallnotes| option. +% Execution starts the note with the code in token register |\everynote|. +% +% \begin{macrocode} +\ifnotes +\newenvironment{note}[1][]{% + \notesfont + \ifsmallnotes\smallersizes\fi + \normalsize + \the\everynote +% \end{macrocode} +% +% Separate slide and note with some whitespace. +% +% \begin{macrocode} + \addvspace{\slidenotesep}% +% \end{macrocode} +% +% We use the \texttt{list} environment for offsetting +% the margin inside the notes, a variation on the +% \texttt{quote} environment. However, the leftmargin is +% reduced to zero, because we do not want extra indentation +% for the text of the notes. +% +% \begin{macrocode} + \list{}{\leftmargin=\z@ + \rightmargin=\marginwidth + \parsep=\parskip}\item[] +% \end{macrocode} +% +% Finish the \texttt{note} environment, close page with a filler +% when newpage option is in effect. +% +% \begin{macrocode} + \ignorespaces}{\endlist\ifnewpage\vfill\fi} +% \end{macrocode} +% +% If notes are not wanted, |\let| the |note| environment to |comment|. +% +% \begin{macrocode} +\else + \let\note=\comment + \let\endnote=\endcomment +\fi +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\smallersizes} +% This macro switches all of \LaTeX's sizes one notch down (except +% for |\tiny|, the smallest size). +% +% \begin{macrocode} +\newcommand*\smallersizes{% + \let\Huge\huge + \let\huge\LARGE + \let\LARGE\Large + \let\Large\large + \let\large\normalsize + \let\normalsize\small + \let\small\footnootsize + \let\footnotesize\scriptsize + \let\scriptsize\tiny + } +% \end{macrocode} +% \end{macro} +% +% \section{Slide Environment} +% +% \subsection{Slide Orientation} +% +% \begin{environment}{portraitslide} +% \begin{environment}{landscapeslide} +% \begin{environment}{slide} +% Here we differentiate between the various possibilities +% for the slide orientation. +% Note that we set a flag for the current orientation +% in order to allow orientation dependent code. +% +% First the case of mixed orientations. +% +% \begin{macrocode} +\ifmixed +\newenvironment{portraitslide}{% + \landscapeslidefalse + \iflandscape\@swapdimens\slideheight\slidewidth\@tempdima + \fi + \@slide}{\@endslide + \iflandscape\putslide{90}\else\putslide{0}\fi} +\newenvironment{landscapeslide}{% + \landscapeslidetrue + \iflandscape\else\@swapdimens\slideheight\slidewidth\@tempdima + \fi + \@slide}{\@endslide + \iflandscape\putslide{0}\else\putslide{90}\fi} +\newenvironment{slide}{\@slide}{\@endslide\putslide{0}} +% \end{macrocode} +% +% Secondly the case where missed slides are produced. +% A tricky point here is that we have already complemented the +% value of |\iflandscape|; therefore no dimensions +% have to be interchanged and the tests all seem +% to point the wrong way. +% +% \begin{macrocode} +\else\ifanti +\newenvironment{portraitslide}{% + \landscapeslidefalse + \iflandscape + \refstepcounter{slidecounter}% + \let\@slide=\comment\let\@endslide=\endcomment + \fi + \@slide}{\@endslide + \iflandscape\else\putslide{0}\fi} +\newenvironment{landscapeslide}{% + \landscapeslidetrue + \iflandscape\else + \refstepcounter{slidecounter}% + \let\@slide=\comment\let\@endslide=\endcomment + \fi + \@slide}{\@endslide + \iflandscape\putslide{0}\fi} +\newenvironment{slide}{% + \refstepcounter{slidecounter}% + \let\@slide=\comment\let\@endslide=\endcomment + \@slide}{\@endslide} +% \end{macrocode} +% +% Finally the case of separate slide orientation. +% A skipped slide must be counted always in |slidecounter| +% in order to keep the numbers straight and is also recorded +% in |missedslidecounter|; the |comment| environment +% is used to get rid of a skipped slide. +% +% \begin{macrocode} +\else +\newenvironment{portraitslide}{% + \landscapeslidefalse + \iflandscape + \refstepcounter{slidecounter}% + \global\advance\missedslidecounter\@ne + \let\@slide=\comment\let\@endslide=\endcomment + \fi + \@slide}{\@endslide + \iflandscape\else\putslide{0}\fi} +\newenvironment{landscapeslide}{% + \landscapeslidetrue + \iflandscape\else + \refstepcounter{slidecounter}% + \global\advance\missedslidecounter\@ne + \let\@slide=\comment\let\@endslide=\endcomment + \fi + \@slide}{\@endslide + \iflandscape\putslide{}\fi} +\newenvironment{slide}{\@slide}{\@endslide\putslide{0}} +\fi\fi +% \end{macrocode} +% \end{environment} +% \end{environment} +% \end{environment} +% +% And then we have to report if there are any skipped slides. +% +% \begin{macrocode} +\ifmixed\else\ifanti\else +\AtEndDocument{\ifnum\missedslidecounter>\z@ + \ClassWarningNoLine{slidenotes}{Rerun with `anti' + for \the\missedslidecounter\space slide(s) skipped}% + \fi} +\fi\fi +% \end{macrocode} +% +% \subsection{Placing a Slide} +% +% \begin{macro}{\putslide} +% The positioning of a slide is split off from its +% production in the following macro. +% We define this positioning differently for the +% various production schemes. +% +% \begin{macrocode} +\ifnotes + \newcommand*\putslide[1]{\noindent\rputslide{#1}\par} +\fi +\ifslides + \newcommand*\putslide[1]{\begin{center}\rputslide{#1}\end{center}} +\fi +\ifminis + \newcommand*\putslide[1]{\noindent + \rputslide{#1}% + \stepcounter{minicounter}% + \ifnum\value{minicounter}=2 + \par + \else\ifnum\value{minicounter}=4 + \newpage\setcounter{minicounter}{0}% + \else\hfil\fi\fi} +\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\rputslide} +% We alse need variants in accordance with the need of slide rotation. +% +% \begin{macrocode} +\newcommand*\rputslide[1]{\usebox{\slidebox}} +\ifmixed\ifnotes\else + \renewcommand*\rputslide[1]{% + \ifnum#1=\z@\usebox{\slidebox}% + \else\rotatebox{#1}{\kern-.5\slidewidth\usebox{\slidebox}}% + \fi} +\fi\fi +% \end{macrocode} +% \end{macro} +% +% \subsection{Typeset Slide Contents} +% +% \begin{macro}{\@slide} +% Slides are collected between |\@slide| and |\@endslide|. +% Each slide starts a new page, except when a collection is made +% or possibly in note production. +% We program the |\newpage| here in order to get the pagenumbering +% in the table of contents right. +% The font is set to the special chosen |\slidefont|. +% The fontsize is initialized to the normal size. +% From the optional argument the title is put into the \emph{toc} file. +% +% \subsubsection{Starting a Slide} +% +% \begin{macrocode} +\newcommand*\@slide[1][]{% + \ifnotes + \ifnewpage\newpage\else\addvspace{\bigskipamount}\fi + \else + \ifminis\else\newpage\fi + \fi + \refstepcounter{slidecounter}% + \slidefont + \normalsize +% \end{macrocode} +% +% Write a line to the \emph{.toc} file when notes are in production. +% +% \begin{macrocode} +\ifnotes + \@ifemptyarg{#1}% + {\addcontentsline{toc}{section}{\Slide\,\theslidecounter}}% + {\addcontentsline{toc}{section}{#1}}% +\fi +% \end{macrocode} +% +% The contents of the slide is typeset in a \texttt{minipage}, +% which is captured in a box. +% Execution starts the box with the code in token register |\everyslide|. +% When the optional argument is not empty, this +% furnishes the slide title at its top. +% The width of the \texttt{minipage}, in which the contents of +% the slide are typeset, +% is the |\slidewidth| adjusted for the thickness of the +% surrounding frame and the separation between frame and contents. +% +% \begin{macrocode} + \@tempdima\slidewidth + \advance\@tempdima-\tw@\slideboxrule + \advance\@tempdima-\tw@\slideboxsep + \@tempdimb\slideheight + \advance\@tempdimb-\tw@\slideboxrule + \advance\@tempdimb-\tw@\slideboxsep + \begin{lrbox}{\slidebox}% + \the\everyslide + \ifsqueeze + \begin{minipage}{\@tempdima}% + \else + \begin{minipage}[][\@tempdimb][t]{\@tempdima}% + \fi +% \end{macrocode} +% +% We want to find out the height of the slide, therefore +% we catch the slide contents in a |\vbox|. +% +% \begin{macrocode} + \setbox\@tempboxa=\vbox\bgroup\leavevmode + \@ifemptyarg{#1}{}{\slidetitle{#1}}\ifcenter\vfil\fi + \ignorespaces} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Finishing a Slide} +% +% \begin{macro}{\@endslide} +% In the second part of slide typesetting we construct the slide. +% +% \begin{macrocode} +\newcommand*\@endslide{% +% \end{macrocode} +% +% First we do vertical centering with |\vfil| if required. +% +% \begin{macrocode} + \ifcenter\vfil\fi +% \end{macrocode} +% +% Here we close the catching box and check its height. +% +% \begin{macrocode} + \egroup + \chk@slideheight\@tempboxa + \unvbox\@tempboxa + \end{minipage}\end{lrbox}% +% \end{macrocode} +% +% The slide contents are enclosed in a framed box and +% then together with the marker placed into a |\parbox|. +% The height of the box is +% adjusted to slideheight minus frame. +% The complete slide is again captured in |\slidebox| because +% we may want to subject it to a rotation. +% +% \begin{macrocode} + \sbox\slidebox{\parbox{\slidewidth}{% + \fboxsep\slideboxsep + \fboxrule\slideboxrule + \csname frame@\framevariant\endcsname + \\*[\smallskipamount] + \makebox[\slidewidth]{% + \small\strut\the\slidemarker + \hfil\Slidenumber~\theslidecounter}% + }}} +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Framing a Slide} +% +% \begin{macro}{\frame@f} +% Rectangular box around slide contents. +% \begin{macrocode} +\newcommand*\frame@f{% + \fbox{\usebox\slidebox}% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\frame@o} +% Oval box around slide contents. +% \begin{macrocode} +\newcommand*\frame@o{% + \@tempdimb\dp\slidebox + \advance\@tempdimb-\fboxsep + \advance\@tempdimb-\fboxrule + \obox[][\ovalslideframerule]{% + \raisebox{\@tempdimb}{\usebox\slidebox}}% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\frame@n} +% Nothing around slide contents. +% \begin{macrocode} +\newcommand*\frame@n{% + \advance\fboxsep\fboxrule \fboxrule\z@ + \fbox{\usebox\slidebox}% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\frame@r} +% Rule above and below slide contents. +% \begin{macrocode} +\newcommand*\frame@r{% + \rule{\slidewidth}{\fboxrule}\\*[\fboxsep]% + \usebox{\slidebox}\\*[\fboxsep]% + \rule{\slidewidth}{\fboxrule}% + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\frame@d} +% Double rules above and below slide contents. +% \begin{macrocode} +\newcommand*\frame@d{% + \rule{\slidewidth}{\fboxrule}\\*[\tw@\fboxrule]% + \rule[\baselineskip]{\slidewidth}{\fboxrule}% + \vspace{-\baselineskip}\\*[\fboxsep]% + \usebox{\slidebox}\\*[\fboxsep]% + \rule{\slidewidth}{\fboxrule}\\*[\tw@\fboxrule]% + \rule[\baselineskip]{\slidewidth}{\fboxrule}% + \vspace{-\baselineskip}% + } +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Check Slide Height} +% +% \begin{macro}{\chk@slideheight} +% Here we define the macro that checks the height of slides and +% gives a warning when overfilling occurs. +% Keep the changes to |\dimen@| local by grouping. +% +% \begin{macrocode} +\newcommand*\chk@slideheight[1]{{% + \dimen@\ht#1 + \advance\dimen@\dp#1 + \ifnum\dimen@>\slideheight + \ClassWarning{slidenotes}{slide too high by \the\dimen@}% + \fi}} +% \end{macrocode} +% \end{macro} +% +% \subsection{Titles on Slides} +% +% \begin{macro}{\slidetitle} +% \begin{macro}{\slidesubtitle} +% Put centered title or subtitle on the slide. +% The first (and optional) argument controls the font setting. +% These titles are followed by a |\medskip|; whitespace before +% the title is the responsibility of the slidewriter. +% These titles are suppressed if their argument somehow +% turns out to be empty. +% +% \begin{macrocode} +\newcommand*\slidetitle{\@slidetitle{\slidetitlefont}} +\newcommand*\slidesubtitle{\@slidetitle{\slidesubtitlefont}} +\newcommand*\@slidetitle[2]{% + \@ifemptyarg{#2}{}% + {\begin{center}#1#2\end{center}\vspace{\slidetitlesep}}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Slideformat Dependent Typesetting} +% +% \begin{macro}{\iflandscapeslide} +% Here we define a flag to be used for the implementation +% of format dependent code selection. +% This flag is initialized to the current default orientation. +% +% \begin{macrocode} +\newif\iflandscapeslide +\iflandscape\landscapeslidetrue\else\landscapeslidefalse\fi +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\portraitonly} +% \begin{macro}{\landscapeonly} +% Material can be selected on the basis the slide's format, +% portrait or landscape orientation with respectively:\\ +% |\landscapeonly{...}|\\ +% |\portraitonly{...}|\\ +% For example, where a list can be placed without any difficulty +% on a portrait slide, it may require the use of |multicols| +% in landscapeformat. +% If problems arise, e.g. with the fixing of catcodes, then use the +% basic construction +% |\iflandscapeslide .. \else ..\fi| +% +% \begin{macrocode} +\newcommand\landscapeonly[1]{\iflandscapeslide#1\fi} +\newcommand\portraitonly[1]{\iflandscapeslide\else#1\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Cues in the Margin} +% +% \begin{macro}{\marginwidth} +% The length variable |\marginwidth| holds the margin space +% that will be reserved for short remarks. +% +% \begin{macrocode} +\newlength\marginwidth +\setlength\marginwidth{3cm} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\cue} +% Giving short remarks in the margin of the notes text. +% To be used for finding specific text parts with a glance. +% +% \begin{macrocode} +\newcommand*\cue[2][\cuefont]{% + \marginpar{\hspace*{-\marginwidth}% + \parbox{\marginparwidth}{\raggedright\sloppy#1#2}}} +% \end{macrocode} +% \end{macro} +% +% |\cue| cannot allow marginpar switching from left to +% right margin when typesetting twosided material; therefore +% force all marginpars into the same margin. +% +% \begin{macrocode} +\@mparswitchfalse +% \end{macrocode} +% +% \section{Style Features} +% +% \subsection{Redefine Chapter Code} +% +% In order to process the slide marking +% two macro's in the production of chapter heads are redefined. +% Also a new chapter starts a new page and the +% pagestyle for this page is set to \texttt{empty}. +% +% \begin{macrocode} +\@ifundefined{c@chapter}{}{% + \let\old@makechapterhead=\@makechapterhead + \let\old@makeschapterhead=\@makeschapterhead + \renewcommand*\@makechapterhead[1]{% + \global\slidemarker={#1}\old@makechapterhead{#1}% + \thispagestyle{empty}\newpage}% + \renewcommand*\@makeschapterhead[1]{% + \global\slidemarker={#1}\old@makeschapterhead{#1}% + \thispagestyle{empty}\newpage}% + } +% \end{macrocode} +% +% \subsection{Pagestyle} +% +% Slides and minis want the \texttt{empty} style. +% +% \begin{macrocode} +\ifnotes\else\pagestyle{empty}\fi +% \end{macrocode} +% +% \subsection{Fonts} +% +% \begin{macro}{\headerfont} +% \begin{macro}{\slidefont} +% \begin{macro}{\notesfont} +% \begin{macro}{\footnotefont} +% \begin{macro}{\slidetitlefont} +% \begin{macro}{\slidesubtitlefont} +% \begin{macro}{\cuefont} +% Choose fonts for the various elements of slides and notes. +% Their names speak for themselves. +% +% \begin{macrocode} +\newcommand*\headerfont{\rmfamily} +\newcommand*\slidefont{\sffamily} +\newcommand*\notesfont{\rmfamily} +\newcommand*\footnotefont{\sffamily\mdseries\upshape} +\newcommand*\slidetitlefont{\Large\bfseries\boldmath} +\newcommand*\slidesubtitlefont{\normalsize\bfseries\boldmath} +\newcommand*\cuefont{\sffamily\bfseries\boldmath} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \section{Language Adjustments} +% +% \begin{macro}{\Collection} +% \begin{macro}{\Slidenumber} +% \begin{macro}{\Slide} +% We define some language specific verbs, such +% as |\Collection| and |\Slidenumber|. +% To be customized by redefinition in the configuration file. +% +% \begin{macrocode} +\newcommand*\Collection{LECTURE NOTES} +\newcommand*\Slidenumber{\#} +\newcommand*\Slide{Slide} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Example of Adjustements in Configuration File} +% +% Example of a configuration file with dutch equivalents +% for language dependent items. +% +% \begin{macrocode} +% +%<*cfg> +\renewcommand*\Collection{COLLEGE AANTEKENINGEN} +\renewcommand*\Slidenumber{Nr.} +\renewcommand*\Slide{Transparant} +% +%<*cls> +% \end{macrocode} +% +% \section{Directory Localization} +% +% \begin{macro}{\CurrentDirectory} +% \begin{macro}{\DirectorySeparator} +% We can determine from |\@currdir| which +% character separates directories in a path name. +% E.g. in UNIX this is |/| from the string |./|, but +% in the MacOS the current directory and the separator are both |:|. +% Therefore we extract from |\@currdir| the last character +% (of two at most).\\ +% Make |\CurrentDirectory| a synonyme for |\@currdir|. +% +% \begin{macrocode} +\let\CurrentDirectory=\@currdir +\def\DirectorySeparator#1#2`\^^M{\@ifemptyarg{#2}{#1}{#2}} +\edef\DirectorySeparator{% + \expandafter\DirectorySeparator\CurrentDirectory`\^^M} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\LastChar} +% Another macro delivers the last character of a string. +% +% \begin{macrocode} +\providecommand*{\LastChar}[1]{% + \@ifemptyarg{#1}{}{\expandafter\@lastchar#1`\^^M}} +\def\@lastchar#1#2`\^^M{\@ifemptyarg{#2}{#1}{\@lastchar#2`\^^M}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\DirectoryName} +% The next macro ensures that a path name ends correctly, when +% a filename is concatenated with it. +% If the directory separator character isn't the last character, +% it is added. +% +% \begin{macrocode} +\providecommand*{\DirectoryName}[1]{\@ifemptyarg{#1}{}% + {\if\LastChar{#1}\DirectorySeparator\relax#1\else + #1\DirectorySeparator\fi}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\Setfolder} +% Macro |\Setfolder| can be used to install a standard +% folder (directory) name. +% E.g. a name |\figuresfolder| can be defined as the +% standard place for figures. +% Supply as first argument to |\Setfolder| the macro name +% for the folder. e.g. |\figuresfolder| and as second +% parameter its location on disk. +% Below three of these folders (here initialized +% with empty names) are defined in the example configuration file. +% \begin{macrocode} +\newcommand*\Setfolder[2]{\edef#1{\DirectoryName{#2}}} +% +%<*cfg> +\Setfolder{\mainfolder}{} +\Setfolder{\commonfolder}{} +\Setfolder{\figuresfolder}{} +% +%<*cls> +% \end{macrocode} +% \end{macro} +% +% \section{Read Configuration File} +% +% Last, but not least, see if there is a configuration +% file \texttt{slidenotes.cfg} and read it for the final adjustments. +% In this file one can change things like the +% font selection, size of various length variables, etc. +% +% \begin{macrocode} +\InputIfFileExists{slidenotes.cfg}{}{} +% \end{macrocode} +% +% \section{Process the Orientation Options} +% +% Final settings take place afterwards, because the variables +% involved may have been changed value in the configuration file. +% +% \subsection{Page Orientation} +% +% In case of landscape orientation the height and width of the page +% need to be exchanged for slides + notes, for slides +% in the anti orientation also. +% For notes we always use a portrait paperformat with +% both portrait and landscape oriented slides on it. +% +% \begin{macrocode} +\ifnotes + \iflandscape\@swapdimens\paperheight\paperwidth\@tempdima\fi +\else + \ifanti\@swapdimens\paperheight\paperwidth\@tempdima\fi +\fi +% \end{macrocode} +% +% \subsection{Slide Dimensions and Orientation} +% +% At this point height and width of the slides are known +% in their final sizes. For the proces of typesetting they +% have to be reduced by the magnification applied later on. +% +% \begin{macrocode} +\divide\slidewidth by\slidemagnification +\multiply\slidewidth by\@m +\divide\slideheight by\slidemagnification +\multiply\slideheight by\@m +% \end{macrocode} +% +% In case of landscape format the height and width of slides +% need to be exchanged, because they are defined in portrait format. +% +% \begin{macrocode} +\iflandscape\@swapdimens\slideheight\slidewidth\@tempdima\fi +% \end{macrocode} +% +% \section{Shutoff Titles if Necessary} +% +% \begin{macro}{\maketitle} +% Kill the title and the chapter pages for slide production, +% but not when a collection is prepared. +% Also allow for the fact that |\chapter| effects +% a change to pagestyle \texttt{plain}. +% +% \begin{macrocode} +\ifslides + \renewcommand\maketitle{} + \@ifundefined{c@chapter}{}{% + \renewcommand*\@makechapterhead[1]{\global\slidemarker={#1}% + \thispagestyle{empty}}% + \renewcommand*\@makeschapterhead[1]{\global\slidemarker={#1}% + \thispagestyle{empty}}% + } +\fi +% \end{macrocode} +% \end{macro} +% +% Disable typesetting of the table of contents unless notes are +% in production. +% +% \begin{macrocode} +\ifnotes\else\AtBeginDocument{\let\tableofcontents=\relax}\fi +% \end{macrocode} +% +% \section{Page Dimensions} +% +% Here we do some calculations on sizes and set the variables +% to their proper values. +% +% \subsection{Fullsize Slides} +% +% First we typeset with an enlarged magnification. +% +% \begin{macrocode} +\ifslides + \mag\slidemagnification\relax +% \end{macrocode} +% +% Horizontal dimensions: +% +% \begin{macrocode} + \setlength\hoffset{-1in} + \divide\hoffset by\slidemagnification + \multiply\hoffset by\@m + \setlength\textwidth{\paperwidth} + \divide\textwidth by\slidemagnification + \multiply\textwidth by\@m + \setlength\oddsidemargin{0pt} + \setlength\evensidemargin{0pt} +% \end{macrocode} +% +% Vertical dimensions: +% +% \begin{macrocode} + \setlength\voffset{-1in} + \divide\voffset by\slidemagnification + \multiply\voffset by\@m + \setlength\headheight{0pt} + \setlength\headsep{0pt} + \setlength\textheight{\paperheight} + \addtolength\textheight{-2\topmargin} + \divide\textheight by\slidemagnification + \multiply\textheight by\@m +\fi +% \end{macrocode} +% +% \subsection{Collection of Slides} +% +% \begin{macrocode} +\ifminis + \setlength\headheight{0pt} + \setlength\headsep{0pt} + \setlength\footskip{0pt} + \setbox\@tempboxa\vbox{\hbox{\slidefont\small\strut}\smallskip\null} + \@tempdima=2\slidewidth + \ifmixed + \advance\@tempdima by 2\ht\@tempboxa + \else + \advance\@tempdima by 8mm + \fi + \ifdim\@tempdima>\textwidth \setlength\textwidth{\@tempdima}\fi + \@tempdimb=2\slideheight + \advance\@tempdimb by 2\ht\@tempboxa + \ifdim\@tempdimb>\textheight + \setlength\textheight{\@tempdimb} + \@tempdimb\paperheight + \advance\@tempdimb-\textheight + \addtolength\topmargin{-\@tempdimb} + \fi + \setlength\oddsidemargin{0pt} + \setlength\evensidemargin{0pt} +\fi +% \end{macrocode} +% +% \subsection{Slides plus Notes} +% +% Change margin settings and enlarge |\marginparwidth| +% by the extra margin. +% +% \begin{macrocode} +\ifnotes + \setlength\marginparsep{5mm} + \addtolength\marginparwidth{\marginwidth} +\fi +% \end{macrocode} +% +% Initialize the font. +% +% \begin{macrocode} +\notesfont +% +% \end{macrocode} +% +% \section{Oval Macro's} +% +% Macro to translate dimensions\\ |#1{dimen}| or +% |#1(number)| $\rightarrow$ +% |#1{number\unitlength}| +% +% \begin{macrocode} +%<*obox> +\ProvidesClass{obox}[1995/09/04 vs 1.2 Oval box change] +\def\@pickonedim#1{\@ifnextchar(%) + {\@@pickonedim{#1}}{#1}} +\def\@@pickonedim#1(#2){#1{#2\unitlength}} +% \end{macrocode} +% +% Redefinition of oval from the picture environment to\\ +% |\oval[position](width,height)[optional lrtb=parts]|\\ +% position parameter determis how oval will be placed:\\ +% |o| midpoint (default as in LaTeX picture environment)\\ +% |t| top of oval at baseline\\ +% |b| bottom of oval at baseline\\ +% |c| halfheight of oval at baseline\\ +% |n| neutral placement +% +% \begin{macrocode} +\gdef\oval{\@ifnextchar[%] + {\@oval}{\@oval[o]}} +\gdef\@oval[#1](#2,#3){\@ifnextchar[%] + {\@@oval[#1](#2,#3)}{\@@oval[#1](#2,#3)[]}} +\gdef\@@oval[#1](#2,#3)[#4]{\begingroup\boxmaxdepth \maxdimen + \@ovttrue \@ovbtrue \@ovltrue \@ovrtrue + \@tfor\reserved@a :=#4\do{\csname @ov\reserved@a false\endcsname}% + \@ovxx #2\unitlength \@ovyy #3\unitlength + \@tempdimb \ifdim\the@ovalradius=\z@ + \ifdim \@ovyy >\@ovxx \@ovxx \else \@ovyy \fi + \else \the@ovalradius \fi + \advance \@tempdimb -\tw@\p@ + \@getcirc \@tempdimb + \@ovro \ht\@tempboxa \@ovri \dp\@tempboxa + \@ovdx\@ovxx \advance\@ovdx -\@tempdima \divide\@ovdx \tw@ + \@ovdy\@ovyy \advance\@ovdy -\@tempdima \divide\@ovdy \tw@ + \@circlefnt \setbox\@tempboxa + \hbox{\if@ovr \@ovvert32\kern -\@tempdima \fi + \if@ovl \kern \@ovxx \@ovvert01\kern -\@tempdima \kern -\@ovxx \fi + \if@ovt \@ovhorz \kern -\@ovxx \fi + \if@ovb \raise \@ovyy \@ovhorz \fi}% + \advance\@ovdx\@ovro \advance\@ovdy\@ovro + \if#1t\@ovdx\z@\@ovdy\tw@\@ovdy\fi + \if#1b\@ovdx\z@\@ovdy\z@\fi + \if#1c\@ovdx\z@\fi + \if#1n\@ovdx\z@\@ovdy\dp\@tempboxa\fi + \ht\@tempboxa\z@ \dp\@tempboxa\z@ + \@put{-\@ovdx}{-\@ovdy}{\box\@tempboxa}% + \endgroup} +% \end{macrocode} +% +% Oval analogon of |\fbox| is added:\\ +% |\obox[optional ovalradius(length)][linethickness-cmd]{box-contents}| +% +% \begin{macrocode} +\def\obox{\@ifnextchar[%] + {\@obox}{\@@obox[][]}} +\def\@obox[#1]{\@ifnextchar[%] + {\@@obox[#1]}{\@@obox[#1][]}} +\def\@@obox[#1][#2]#3{% + \begingroup + \@ifemptyarg{#1}{}{\ovalradius{#1}}% + \setbox\z@\hbox{\advance\fboxsep\@wholewidth \fboxrule\z@ \fbox{#3}}% + \dimen@\ht\z@ \advance\dimen@\dp\z@ #2\let\unitlength\@empty + \leavevmode\oval[n](\wd\z@,\dimen@)\box\z@ + \endgroup} +\def\ovalradius{\@pickonedim\@ovalradius} +\def\@ovalradius#1{\@tempdima#1\relax + \edef\the@ovalradius{\number\@tempdima sp}\ignorespaces} +\def\ovalfraction#1{% + \edef\the@ovalradius{#1\noexpand\@tempdimb}\ignorespaces} +\ovalradius{0pt} % initialisation +% +% \end{macrocode} +% \Finale +% diff --git a/macros/latex/contrib/slidenotes/slidenotes.ins b/macros/latex/contrib/slidenotes/slidenotes.ins new file mode 100644 index 0000000000..c36e0c24d6 --- /dev/null +++ b/macros/latex/contrib/slidenotes/slidenotes.ins @@ -0,0 +1,36 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% +%% --------------- start of docstrip commands ------------------ +%% +\def\batchfile{slidenotes.ins} +\input docstrip.tex + +\preamble +Copyright (C) 1993-1996 Hans van der Meer. All rights reserved. +\endpreamble + +\keepsilent + +\generate{\file{slidenotes.cls}{\from{slidenotes.dtx}{cls}} + \file{slidenotes.cfg}{\from{slidenotes.dtx}{cfg}} + \file{obox.sty}{\from{slidenotes.dtx}{obox}} + } + +\ifToplevel{ +\Msg{***********************************************************} +\Msg{*} +\Msg{* Move into a directory searched by TeX:} +\Msg{*} +\Msg{* \space\space slidenotes.cls} +\Msg{* \space\space slidenotes.cfg} +\Msg{* \space\space obox.sty} +\Msg{*} +\Msg{* For the documentation run slidenotes.dtx through LaTeX.} +\Msg{*} +\Msg{***********************************************************} +} +\endinput diff --git a/macros/latex/contrib/slidenotes/slidenotes.pdf b/macros/latex/contrib/slidenotes/slidenotes.pdf new file mode 100644 index 0000000000..9fe8157519 Binary files /dev/null and b/macros/latex/contrib/slidenotes/slidenotes.pdf differ diff --git a/macros/latex/contrib/slidenotes/slidenotes.readme b/macros/latex/contrib/slidenotes/slidenotes.readme new file mode 100644 index 0000000000..e0ace39955 --- /dev/null +++ b/macros/latex/contrib/slidenotes/slidenotes.readme @@ -0,0 +1,14 @@ +slidenotes.cls is a package for the easy production +of a slide collection with annotations. + +slidenotes.cls builds on the report style (or variants). + +TeX the file slidenotes.ins to produce slidenotes.cls, +TeX the file slidenotes.dtx to produce the documentation. + +File obox.sty contains some extra macros and a patch to \oval. + +The file exam.cfg is included as an example how to customize typesetting. + +Hans van der Meer +hansm@fwi.uva.nl -- cgit v1.2.3