summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/stex/sty/mikoslides/mikoslides.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/stex/sty/mikoslides/mikoslides.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/stex/sty/mikoslides/mikoslides.dtx')
-rw-r--r--macros/latex/contrib/stex/sty/mikoslides/mikoslides.dtx810
1 files changed, 810 insertions, 0 deletions
diff --git a/macros/latex/contrib/stex/sty/mikoslides/mikoslides.dtx b/macros/latex/contrib/stex/sty/mikoslides/mikoslides.dtx
new file mode 100644
index 0000000000..1fc76db644
--- /dev/null
+++ b/macros/latex/contrib/stex/sty/mikoslides/mikoslides.dtx
@@ -0,0 +1,810 @@
+% \iffalse meta-comment
+% A LaTeX Class for Jacobs University Slides
+% Copyright (c) 2007 Michael Kohlhase, all rights reserved
+% this file is released under the
+% Gnu Library Public Licences (LGPL)
+%
+% The original of this file is in the public repository at
+% http://github.com/KWARC/sTeX/
+% \fi
+%
+% \iffalse
+%<cls|package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<cls>\ProvidesClass{mikoslides}[2019/03/20 v1.2 MiKo slides Class]
+%<package>\ProvidesPackage{mikoslides}[2019/03/20 v1.2 MiKo slides Package]
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[utf8]{inputenc}
+\usepackage{url,array,float,xspace}
+\usepackage[show]{ed}
+\usepackage{graphicx,paralist}
+\usepackage[hyperref=auto,style=alphabetic]{biblatex}
+\addbibresource{kwarcpubs.bib}
+\addbibresource{extpubs.bib}
+\addbibresource{kwarccrossrefs.bib}
+\addbibresource{extcrossrefs.bib}
+\makeindex
+\floatstyle{boxed}
+\newfloat{exfig}{thp}{lop}
+\floatname{exfig}{Example}
+\def\githubissue#1{\cite{sTeX:github:on},
+\hyperlink{https://github.com/KWARC/sTeX/issues/#1}{issue #1}}
+\usepackage{hyperref}
+\begin{document}
+\RecordChanges
+\DocInput{mikoslides.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{469}
+%
+% \changes{v0.1}{2005/12/06}{Initial Version}
+% \changes{v0.2}{2006/01/11}{course notes back on seminar}
+% \changes{v0.3}{2007/05/16}{changing to Jacobs logo}
+% \changes{v0.4}{2007/10/16}{re-basing the whole thing on beamer}
+% \changes{v0.4}{2008/09/06}{moving line-end-comment to \texttt{omdoc.dtx}}
+% \changes{v0.5}{2009/06/17}{eliminating mytwocolumns, this is better done by \texttt{beamer.cls}}
+% \changes{v0.9}{2010/06/18}{this is almost done}
+% \changes{v0.9}{2012/09/17}{basic options handling for the \texttt{frame} environment in
+% notes mode}
+% \changes{v0.9}{2013/08/23}{numbered sectocframes}
+% \changes{v1.0}{2014/01/07}{adding \texttt{\textbackslash frameimage}}
+% \changes{v1.1}{2015/10/25}{Removing the old title macros (use the regular ones instead)}
+% \changes{v1.1}{2015/10/25}{reinterpreting omgroup}
+% \changes{v1.1}{2015/11/04}{moving MathHub support out to separate package}
+% \changes{v1.2}{2018/12/03}{changed to keyval class/package options, allowed arbitrary classes}
+%
+% \GetFileInfo{mikoslides.cls}
+% \MakeShortVerb{\|}
+%
+% \def\twin#1#2{\index{#1!#2}\index{#2!#1}}
+% \def\twintoo#1#2{{#1 #2}\twin{#1}{#2}}
+% \def\atwin#1#2#3{\index{#1!#2!#3}\index{#3!#2 (#1)}}
+% \def\atwintoo#1#2#3{{#1 #2 #3}\atwin{#1}{#2}{#3}}
+%
+% \def\scsys#1{{{\sc #1}}\index{#1@{\sc #1}}}
+% \def\stex{\hbox{\raisebox{-.5ex}S\kern-.5ex\TeX}}
+% \def\sTeX{\stex}
+% \def\cnxml{\scshape{CNXml}}
+% \def\connexions{\scshape{Connexions}}
+% \def\element#1{{\ttfamily{#1}}}
+% \def\snippet#1{{\ttfamily{#1}}}
+% \def\cnxlatex{CNX\LaTeX\xspace}
+% \def\mathml{{\scshape{MathML}}\xspace}
+% \def\omdoc{OMDoc\xspace}
+% \def\activemath{{\scshape{ActiveMath}}\xspace}
+% \def\textwarning{\includegraphics[width=1.2em]{dangerous-bend}\xspace}
+%
+% \title{Slides and Course Notes\thanks{Version {\fileversion}
+% (last revised {\filedate})}}
+% \author{Michael Kohlhase\\
+% FAU Erlangen-N\"urnberg\\
+% \url{http://kwarc.info/kohlhase}}
+% \maketitle
+%
+% \begin{abstract}
+% We present a document class from which we can generate both course slides and course
+% notes in a transparent way.
+% \end{abstract}
+%
+% \tableofcontents\newpage
+%
+%\section{Introduction}
+%
+% The |mikoslides| document class is derived from |beamer.cls|~\cite{beamerclass:on}, it
+% adds a ``notes version'' for course notes derived from the |omdoc|
+% class~\cite{Kohlhase:smomdl} that is more suited to printing than the one supplied by
+% |beamer.cls|.
+%
+%
+%\section{The User Interface}\label{sec:user}
+%
+% The |mikoslides| class takes the notion of a slide frame from Till Tantau's excellent
+% |beamer| class and adapts its notion of frames for use in the \sTeX and \omdoc. To
+% support semantic course notes, it extends the notion of mixing frames and explanatory
+% text, but rather than treating the frames as images (or integrating their contents into
+% the flowing text), the |mikoslides| package displays the slides as such in the course
+% notes to give students a visual anchor into the slide presentation in the course (and to
+% distinguish the different writing styles in slides and course notes).
+%
+% In practice we want to generate two documents from the same source: the slides for
+% presentation in the lecture and the course notes as a narrative document for home
+% study. To achieve this, the |mikoslides| class has two modes: \emph{slides mode} and
+% \emph{notes mode} which are determined by the package option.
+%
+% \subsection{Package Options}\label{sec:user:options}
+%
+% The |mikoslides| class takes a variety of class options:\ednote{leaving out noproblems
+% for the moment until we decide what to do with it.}
+% \begin{itemize}
+% \item The options \DescribeMacro{slides}|slides|\DescribeMacro and {notes}|notes| switch
+% between slides mode and notes mode (see Section~\ref{sec:user:notesslides}).
+% \item If the option \DescribeMacro{sectocframes}|sectocframes| is given, then special
+% frames with section table of contents are produced headers \ednote{document the functionality}
+% \item \DescribeMacro{showmeta}|showmeta|. If this is set, then the metadata keys are
+% shown (see~\cite{Kohlhase:metakeys:ctan} for details and customization options).
+% \item If the option \DescribeMacro{frameimages}|frameimages| is set, then slide mode
+% also shows the |\frameimage|-generated frames.
+% \item \DescribeMacro{topsect}|topsect=|\meta{sect} can be used to specify the
+% top-level sectioning level; the default for \meta{setc} is |section|.
+% \end{itemize}
+%
+% \subsection{Notes and Slides}\label{sec:user:notesslides}
+%
+% Slides are represented with the \DescribeEnv{frame}|frame| just like in the |beamer|
+% class, see~\cite{Tantau:ugbc} for details. The |mikoslides| class adds the
+% \DescribeEnv{note}|note| environment for encapsulating the course note
+% fragments.\footnote{MK: it would be very nice, if we did not need this environment, and
+% this should be possible in principle, but not without intensive LaTeX trickery. Hints to
+% the author are welcome.}
+%
+% \textwarning Note that it is essential to start and end the |notes| environment at the
+% start of the line -- in particular, there may not be leading blanks -- else {\LaTeX}
+% becomes confused and throws error messages that are difficult to decipher.
+%
+% \begin{exfig}
+% \begin{verbatim}
+% \begin{note}
+% We start this course with ...
+% \end{note}
+%
+% \begin{frame}
+% \frametitle{The first slide}
+% ...
+% \end{frame}
+% \begin{note}
+% ... and more explanatory text
+% \end{note}
+%
+% \begin{frame}
+% \frametitle{The second slide}
+% ...
+% \end{frame}
+% ...
+% \end{verbatim}
+% \caption{A typical Course Notes File}\label{fig:notesfile}
+% \end{exfig}
+%
+% By interleaving the |frame| and |note| environments, we can build course notes as shown
+% in Figure~\ref{fig:notesfile}.
+%
+% Sometimes, we want to integrate slides as images after all -- e.g. because we already
+% have a PowerPoint presentation, to which we want to add \sTeX notes. In this case we can
+% use \DescribeMacro{\frameimage}|\frameimage[|\meta{opt}|]{|\meta{path}|}|, where
+% \meta{opt} are the options of |\includegraphics| from the |graphicx|
+% package~\cite{CarRah:tpp99} and \meta{path} is the file path (extension can be left off
+% like in |\includegraphics|).
+%
+% If we want to transclude a the contents of a file as a note, we can use the
+% \DescribeMacro{\ninputref}|\ninputref| macro. |\ninputref{foo}| is equivalent to
+%\begin{verbatim}
+% \begin{note}
+% \inputref{foo}
+% \end{note}
+% \end{verbatim}
+%
+% There are some environments that tend to occur at the top-level of |note|
+% environments. We make convenience versions of these: e.g. the
+% \DescribeEnv{nomtext}|nomtext| environment is just an |omtext| inside a |note|
+% environemnt (but looks nicer in the source, since it avoids one level of source
+% indenting). Similarly, we have the \DescribeEnv{nomgroup}|nomgroup| environment.
+%
+% \subsection{Header and Footer Lines}\label{sec:user:headfootlines}
+%
+% \subsection{Colors and Highlighting}\label{sec:user:highlighting}
+% The \DescribeMacro{\textwarning}|\textwarning| macro generates a warning
+% sign: \textwarning
+%
+% \subsection{Front Matter, Titles, etc}\label{sec:user:matter}
+%
+% \subsection{Miscellaneous}\label{sec:user:misc}
+%
+% \section{Limitations}\label{sec:limitations}
+%
+% In this section we document known limitations. If you want to help alleviate them,
+% please feel free to contact the package author. Some of them are currently discussed in
+% the \sTeX GitHub repository~\cite{sTeX:github:on}.
+% \begin{enumerate}
+% \item when option |book| which uses |\pagestyle{headings}| is given and semantic macros
+% are given in the |omgroup| titles, then they sometimes are not defined by the time the
+% heading is formatted. Need to look into how the headings are made. This is a problem
+% of the underlying |omdoc| package.
+% \end{enumerate}
+%
+% \StopEventually{\newpage\PrintIndex\newpage\PrintChanges\printbibliography}
+%
+%\section{The Implementation}\label{sec:impl}
+%
+%\subsection{Class and Package Options}\label{sec:impl:init}
+%
+% We define some Package Options and switches for the |mikoslides| class and activate them
+% by passing them on to |beamer.cls| and |omdoc.cls| and the |mikoslides| package. We pass
+% the |nontheorem| option to the |statements| package when we are not in notes mode, since
+% the |beamer| package has its own (overlay-aware) theorem environments.
+%
+% \begin{macrocode}
+%<*cls>
+\RequirePackage{kvoptions}
+\RequirePackage{etoolbox}
+\SetupKeyvalOptions{family=mks@cls,prefix=mks@cls@}
+\DeclareStringOption[article]{class}
+\AddToKeyvalOption*{class}{\PassOptionsToClass{class=\mks@cls@class}{omdoc}
+ \ifdefstring{\mks@cls@class}{book}{\PassOptionsToPackage{topsect=part}{mikoslides}}{}
+ \ifdefstring{\mks@cls@class}{report}{\PassOptionsToPackage{topsect=part}{mikoslides}}}{}
+\DeclareBoolOption{notes}
+\DeclareComplementaryOption{slides}{notes}
+\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{omdoc}
+ \PassOptionsToClass{\CurrentOption}{beamer}
+ \PassOptionsToPackage{\CurrentOption}{mikoslides}}
+\ProcessKeyvalOptions{mks@cls}
+%</cls>
+% \end{macrocode}
+% now we do the same for the |mikoslides| package.
+% \begin{macrocode}
+%<*package>
+\RequirePackage{kvoptions}
+\SetupKeyvalOptions{family=mks@sty,prefix=mks@sty@}
+\DeclareStringOption[section]{topsect}
+\DeclareBoolOption{mh}
+\AddToKeyvalOption*{mh}{
+ \PassOptionsToPackage{mh}{stex}
+ \PassOptionsToPackage{mh}{smglom}
+ \PassOptionsToPackage{mh}{tikzinput}}
+\newif\ifnotes\notestrue
+\DeclareBoolOption{notes}
+\AddToKeyvalOption*{notes}{\notestrue\PassOptionsToPackage{notes}{statements}}
+\DeclareComplementaryOption{slides}{notes}
+\AddToKeyvalOption*{slides}{\notesfalse\PassOptionsToPackage{nontheorem}{statements}}
+\DeclareBoolOption{sectocframes}
+\AddToKeyvalOption*{sectocframes}{\PassOptionsToPackage{msection}{statements}}
+\DeclareBoolOption{frameimages}
+\DeclareBoolOption{noproblems}
+\DeclareDefaultOption{\PassOptionsToPackage{\CurrentOption}{stex}
+ \PassOptionsToPackage{\CurrentOption}{smglom}
+ \PassOptionsToPackage{\CurrentOption}{tikzinput}}
+\ProcessKeyvalOptions{mks@sty}
+%</package>
+% \end{macrocode}
+%
+% Depending on the options, we either load the |article|-based |omdoc| or the |beamer|
+% class (and set some counters).
+% \begin{macrocode}
+%<*cls>
+\ifmks@cls@notes
+ \LoadClass{omdoc}
+\else
+ \LoadClass[10pt,notheorems]{beamer}
+ \newcounter{Item}
+ \newcounter{paragraph}
+ \newcounter{subparagraph}
+ \newcounter{Hfootnote}
+\fi
+% \end{macrocode}
+% now it only remains to load the |mikoslides| package that does all the rest.
+% \begin{macrocode}
+\RequirePackage{mikoslides}
+%</cls>
+% \end{macrocode}
+%
+% In |notes| mode, we also have to make the |beamer|-specific things available to
+% |article| via the |beamerarticle| package. We use options to avoid loading theorem-like
+% environments, since we want to use our own from the $\sTeX$ packages. The first batch
+% of packages we want are loaded on |mikoslides.sty|. These are the general ones, we will
+% load the \sTeX-specific ones after we have done some work (e.g. defined the counters
+% |m*|). Only the |stex-logo| package is already needed now for the default theme.
+%
+% \begin{macrocode}
+%<*package>
+\ifmks@sty@notes
+\RequirePackage{a4wide}
+\RequirePackage{marginnote}
+\RequirePackage{xcolor}
+\RequirePackage{mdframed}
+\RequirePackage[noxcolor,noamsthm]{beamerarticle}
+\fi
+\ifmks@sty@mh\RequirePackage{mikoslides-mh}\fi
+\RequirePackage{etoolbox}
+\RequirePackage{amssymb}
+\RequirePackage{amsmath}
+\RequirePackage{comment}
+\RequirePackage{textcomp}
+\RequirePackage{url}
+\RequirePackage{graphicx}
+\RequirePackage{stex-logo}
+\RequirePackage{pgf}
+\ifmks@sty@notes
+\RequirePackage[bookmarks,bookmarksopen,bookmarksnumbered,breaklinks,
+linkcolor=black,citecolor=black,urlcolor=cyan,filecolor=cyan,colorlinks]{hyperref}
+\fi
+% \end{macrocode}
+%
+% finally, we require the |metakeys| package from \sTeX, so that we can use the
+% |\addmetakey| mechanism.
+%
+% \begin{macrocode}
+\RequirePackage{metakeys}
+% \end{macrocode}
+%
+% \subsection{Notes and Slides}\label{sec:impl:noteslides}
+%
+% For the lecture notes cases, we also provide the |\usetheme| macro that would otherwise
+% from the the |beamer| class. While the latter loads |beamertheme|\meta{theme}{.sty}, the
+% notes version loads |beamernotestheme|\meta{theme}|.sty|.\ednote{MK: This is not ideal, but
+% I am not sure that I want to be able to provide the full theme functionality there.}
+% \begin{macrocode}
+\ifmks@sty@notes
+\renewcommand\usetheme[2][]{\usepackage[#1]{beamernotestheme#2}}
+\fi
+% \end{macrocode}
+% We define the sizes of slides in the notes. Somehow, we cannot get by with the same
+% here.
+%
+% \begin{macrocode}
+\newcounter{slide}
+\newlength{\slidewidth}\setlength{\slidewidth}{12.8cm}
+\newlength{\slideheight}\setlength{\slideheight}{9cm}
+% \end{macrocode}
+%
+% \begin{environment}{note}
+% The |note| environment is used to leave out text in the |slides| mode. It does not have
+% a counterpart in OMDoc. So for course notes, we define the |note| environment to be a
+% no-operation otherwise we declare the |note| environment as a comment via the |comment|
+% package.
+% \begin{macrocode}
+\ifmks@sty@notes%
+ \renewenvironment{note}{\ignorespaces}{}%
+\else%
+ \excludecomment{note}%
+\fi%
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\ninputref}
+% \begin{macrocode}
+\newcommand\ninputref[2][]{\ifmks@sty@notes\inputref[#1]{#2}\fi}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% We first set up the slide boxes in |article| mode. We set up sizes and provide a
+% box register for the frames and a counter for the slides.
+%
+% \begin{macrocode}
+\ifmks@sty@notes
+ \newlength{\slideframewidth}
+ \setlength{\slideframewidth}{1.5pt}
+% \end{macrocode}
+%
+% \begin{environment}{frame}
+% We first define the keys.
+% \begin{macrocode}
+ \addmetakey{frame}{label}
+ \addmetakey[yes]{frame}{allowframebreaks}
+ \addmetakey{frame}{allowdisplaybreaks}
+ \addmetakey[yes]{frame}{fragile}
+ \addmetakey[yes]{frame}{shrink}
+ \addmetakey[yes]{frame}{squeeze}
+ \addmetakey[yes]{frame}{t}
+% \end{macrocode}
+% We define the environment, read them, and construct the slide number and label.
+% \begin{macrocode}
+ \renewenvironment{frame}[1][]{%
+ \metasetkeys{frame}{#1}%
+ \stepcounter{slide}%
+ \def\@currentlabel{\theslide}%
+ \ifx\frame@label\@empty%
+ \else%
+ \label{\frame@label}%
+ \fi%
+% \end{macrocode}
+% We redefine the |itemize| environment so that it looks more like the one in |beamer|.
+% \begin{macrocode}
+ \def\itemize@level{outer}%
+ \def\itemize@outer{outer}%
+ \def\itemize@inner{inner}%
+ \renewcommand\newpage{}%
+ \renewcommand\metakeys@show@keys[2]{\marginnote{{\scriptsize ##2}}}%
+ \renewenvironment{itemize}{%
+ \ifx\itemize@level\itemize@outer%
+ \def\itemize@label{$\rhd$}%
+ \fi%
+ \ifx\itemize@level\itemize@inner%
+ \def\itemize@label{$\scriptstyle\rhd$}%
+ \fi%
+ \begin{list}%
+ {\itemize@label}%
+ {\setlength{\labelsep}{.3em}%
+ \setlength{\labelwidth}{.5em}%
+ \setlength{\leftmargin}{1.5em}%
+ }%
+ \edef\itemize@level{\itemize@inner}%
+ }{%
+ \end{list}%
+ }%
+% \end{macrocode}
+% We create the box with the |mdframed| environment from the equinymous package.
+% \begin{macrocode}
+ \begin{mdframed}[linewidth=\slideframewidth,skipabove=1ex,skipbelow=1ex,userdefinedwidth=\slidewidth,align=center]\sf%
+ }{%
+ \medskip\miko@slidelabel\end{mdframed}%
+ }%
+% \end{macrocode}
+% \end{environment}
+%
+% Now, we need to redefine the frametitle (we are still in course notes mode).
+% \begin{macro}{\frametitle}
+% \begin{macrocode}
+ \renewcommand{\frametitle}[1]{{\Large\bf\sf\color{blue}{#1}}\medskip}%
+\fi %ifnotes
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\frameimage}
+% We have to make sure that the width is overwritten, for that we check the
+% |\Gin@ewidth| macro from the |graphicx| package\ednote{MK@DG; we need to do that in
+% the LaTeXML binding as well!}
+% \begin{macrocode}
+\newrobustcmd\frameimage[2][]{%
+ \stepcounter{slide}%
+ \ifmks@sty@frameimages%
+ \def\Gin@ewidth{}\setkeys{Gin}{#1}%
+ \ifmks@sty@notes\else\vfill\fi%
+ \ifx\Gin@ewidth\@empty%
+ \mycgraphics[width=\slidewidth,#1]{#2}\else\mycgraphics[#1]{#2}%
+ \fi%
+ \par\strut\hfill{\footnotesize Slide \arabic{slide}}%
+ \ifmks@sty@notes\else\vfill\fi%
+ \fi%
+}% ifframeimages
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pause}
+% \ednote{MK: fake it in notes mode for now}
+% \begin{macrocode}
+\ifmks@sty@notes\newcommand\pause{}\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{nomtext}
+% \begin{macrocode}
+\ifmks@sty@notes\newenvironment{nomtext}[1][]{\begin{omtext}[#1]}{\end{omtext}}%
+\else\excludecomment{nomtext}\fi%
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{environment}{nomgroup}
+% \begin{macrocode}
+\ifmks@sty@notes\newenvironment{nomgroup}[2][]{\begin{omgroup}[#1]{#2}}{\end{omgroup}}%
+\else\excludecomment{nomgroup}\fi%
+% \end{macrocode}
+% \end{environment}
+% \subsection{Header and Footer Lines}\label{sec:impl:headfootlines}
+%
+% Now, we set up the infrastructure for the footer line of the slides, we use boxes for
+% the logos, so that they are only loaded once, that considerably speeds up processing.
+%
+% \begin{macro}{\setslidelogo}
+% The default logo is the logo of Jacobs University. Customization can be done by |\setslidelogo{|\meta{logo name}|}|.
+% \begin{macrocode}
+\newlength{\slidelogoheight}
+\ifmks@sty@notes%
+ \setlength{\slidelogoheight}{.4cm}%
+\else%
+ \setlength{\slidelogoheight}{1cm}%
+\fi%
+\newsavebox{\slidelogo}%
+\sbox{\slidelogo}{\sTeX}%
+\newrobustcmd{\setslidelogo}[1]{%
+ \sbox{\slidelogo}{\includegraphics[height=\slidelogoheight]{#1}}%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setsource}
+% |\source| stores the writer's name. By default it is {\it Michael Kohlhase} since he is the main user and designer of this package. |\setsource{|\meta{name}|}| can change the writer's name.
+% \begin{macrocode}
+\def\source{Michael Kohlhase}% customize locally
+\newrobustcmd{\setsource}[1]{\def\source{#1}}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setlicensing}
+% Now, we set up the copyright and licensing. By default we use the Creative Commons
+% Attribuition-ShareAlike license to strengthen the public domain. If package |hyperref|
+% is loaded, then we can attach a hyperlink to the license
+% logo. |\setlicensing[|\meta{url}|]{|\meta{logo name}|}| is used for customization,
+% where ||\meta{url}|| is optional.
+% \begin{macrocode}
+\def\copyrightnotice{\footnotesize\copyright:\hspace{.3ex}{\source}}%
+\newsavebox{\cclogo}%
+\sbox{\cclogo}{\includegraphics[height=\slidelogoheight]{cc_somerights}}%
+\newif\ifcchref\cchreffalse%
+\AtBeginDocument{%
+ \@ifpackageloaded{hyperref}{\cchreftrue}{\cchreffalse}
+}%
+\def\licensing{%
+ \ifcchref%
+ \href{http://creativecommons.org/licenses/by-sa/2.5/}{\usebox{\cclogo}}%
+ \else%
+ {\usebox{\cclogo}}%
+ \fi%
+}%
+\newrobustcmd{\setlicensing}[2][]{%
+ \def\@url{#1}%
+ \sbox{\cclogo}{\includegraphics[height=\slidelogoheight]{#2}}%
+ \ifx\@url\@empty%
+ \def\licensing{{\usebox{\cclogo}}}%
+ \else%
+ \def\licensing{%
+ \ifcchref%
+ \href{#1}{\usebox{\cclogo}}%
+ \else%
+ {\usebox{\cclogo}}%
+ \fi%
+ }%
+ \fi%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\slidelabel}
+% Now, we set up the slide label for the |article| mode.\ednote{see that we can use the themes for the slides some day. This is all fake.}
+% \begin{macrocode}
+\newrobustcmd\miko@slidelabel{%
+ \vbox to \slidelogoheight{%
+ \vss\hbox to \slidewidth%
+ {\licensing\hfill\copyrightnotice\hfill\arabic{slide}\hfill\usebox{\slidelogo}}%
+ }%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Colors and Highlighting}\label{sec:impl:highlighting}
+%
+% We first specify sans serif fonts as the default.
+%
+% \begin{macrocode}
+\sffamily
+% \end{macrocode}
+%
+% Now, we set up an infrastructure for highlighting phrases in slides. Note that we use
+% content-oriented macros for highlighting rather than directly using color markup.
+% The first thing to to is to adapt the green so that it is dark enough for most beamers
+% \begin{macrocode}
+\AtBeginDocument{%
+\definecolor{green}{rgb}{0,.5,0}%
+\definecolor{purple}{cmyk}{.3,1,0,.17}%
+}%
+% \end{macrocode}
+%
+% We customize the |\defemph|, |\notemph|, and |\stDMemph| macros with colors for the use
+% in the |statements| package. Furthermore we customize the |\@@lec| macro for the
+% appearance of line end comments in |\lec|.
+%
+% \begin{macrocode}
+% \def\STpresent#1{\textcolor{blue}{#1}}
+\def\defemph#1{{\textcolor{magenta}{#1}}}
+\def\notemph#1{{\textcolor{magenta}{#1}}}
+\def\stDMemph#1{{\textcolor{blue}{#1}}}
+\def\@@lec#1{(\textcolor{green}{#1})}
+% \end{macrocode}
+%
+% I like to use the dangerous bend symbol for warnings, so we provide it here.
+% \begin{macro}{\textwarning}
+% as the macro can be used quite often we put it into a box register, so that it is only
+% loaded once.
+% \begin{macrocode}
+\pgfdeclareimage[width=.8em]{miko@small@dbend}{dangerous-bend}
+\def\smalltextwarning{%
+ \pgfuseimage{miko@small@dbend}%
+ \xspace%
+}%
+\pgfdeclareimage[width=1.2em]{miko@dbend}{dangerous-bend}
+\newrobustcmd\textwarning{%
+ \raisebox{-.05cm}{\pgfuseimage{miko@dbend}}%
+ \xspace%
+}%
+\pgfdeclareimage[width=2.5em]{miko@big@dbend}{dangerous-bend}%
+\newrobustcmd\bigtextwarning{%
+ \raisebox{-.05cm}{\pgfuseimage{miko@big@dbend}}%
+ \xspace%
+}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\newrobustcmd\putgraphicsat[3]{%
+ \begin{picture}(0,0)\put(#1){\includegraphics[#2]{#3}}\end{picture}%
+}%
+\newrobustcmd\putat[2]{%
+ \begin{picture}(0,0)\put(#1){#2}\end{picture}%
+}%
+% \end{macrocode}
+%
+% \subsection{Sectioning}
+%
+% If the |sectocframes| option is set, then we make section frames. We first define a set
+% of counters\ednote{I forget: why not use the counters from beamer/article? --> document
+% this.}
+% \begin{macrocode}
+\ifmks@sty@sectocframes%
+\ifdefstring\mks@sty@topsect{part}{%
+ \newcounter{mpart}\newcounter{mchapter}\newcounter{msection}[mchapter]}
+{\ifdefstring\mks@sty@topsect{chapter}{%
+ \newcounter{mchapter}\newcounter{msection}[mchapter]}
+ {\newcounter{msection}}}
+\newcounter{msubsection}[msection]%
+\newcounter{msubsubsection}[msubsection]%
+\newcounter{msubsubsubsection}[msubsubsection]%
+\fi% ifsectocframes
+% \end{macrocode}
+%
+% Now that we have defined the counters, we can load the \sTeX-specific packages (in
+% particular |statements| that needs these counters).
+%
+% \begin{macrocode}
+\RequirePackage{stex}
+\RequirePackage{smglom}
+\RequirePackage{tikzinput}
+% \end{macrocode}
+%
+% Finally, we set the \DescribeMacro{\section@level}|\section@level| macro that governs
+% sectioning.
+%
+% \begin{macrocode}
+\section@level=2
+\ifdefstring{\mks@sty@topsect}{part}{\section@level=0}{}
+\ifdefstring{\mks@sty@topsect}{chapter}{\section@level=1}{}
+% \end{macrocode}
+%
+% Now \sTeX is loaded, we redefine the |omgroup| environment to produce section toc frames
+% (if the option |sectocframes| is specified.)\ednote{MK: we should probably just redefine
+% omgroup@num and omgroup@nonum, since they do the actual work so that we can add the
+% sectocframes behavior here without having to copy the internals. Then there is less
+% material that can get out of sync. Additionally, we should have a hook in the original
+% code of those so that we can increment the slides counter in notes node (to keep slides
+% in sync)}
+%
+% \begin{macrocode}
+\ifmks@sty@notes\else% only in slides
+\def\part@prefix{\ifdefstring\mks@sty@topsect{part}{\arabic{mchapter}.}{}}
+\renewenvironment{omgroup}[2][]{%
+ \metasetkeys{omgroup}{#1}\sref@target%
+ \advance\section@level by 1%
+ \ifmks@sty@sectocframes%
+ \stepcounter{slide}
+ \begin{frame}[noframenumbering]%
+ \vfill\Large\centering%
+ \red{%
+ \ifcase\section@level\or
+ \stepcounter{mpart}
+ \def\@@label{Part \Roman{mpart}}
+ \def\currentsectionlevel{part}
+ \or%
+ \stepcounter{mchapter}
+ \def\@@label{Chapter \arabic{mchapter}}
+ \def\currentsectionlevel{chapter}
+ \or
+ \stepcounter{msection}
+ \def\@@label{\part@prefix\arabic{msection}}
+ \def\currentsectionlevel{section}
+ \or
+ \stepcounter{msubsection}
+ \def\@@label{\part@prefix\arabic{msection}.\arabic{msubsection}}
+ \def\currentsectionlevel{subsection}
+ \or
+ \stepcounter{msubsubsection}
+ \def\@@label{\part@prefix\arabic{msection}.\arabic{msubsection}.\arabic{msubsubsection}}
+ \def\currentsectionlevel{subsubsection}
+ \or
+ \stepcounter{msubsubsubsection}
+ \def\@@label{\part@prefix\arabic{msection}.\arabic{msubsection}.\arabic{msubsubsection}.\arabic{msubsubsubsection}}
+ \def\currentsectionlevel{subsubsubsection}
+ \fi% end ifcase
+ \@@label\sref@label@id\@@label
+ \quad #2%
+ }%
+ \vfill%
+ \end{frame}%
+ \fi %ifmks@sty@sectocframes
+}
+{\advance\section@level by -1}%
+\fi% ifmks@sty@notes
+% \end{macrocode}
+%
+% \subsection{Miscellaneous}
+%
+% We set up a |beamer| template for theorems like ams style, but without a block
+% environment.
+% \begin{macrocode}
+\def\inserttheorembodyfont{\normalfont}
+\defbeamertemplate{theorem begin}{miko}
+{\inserttheoremheadfont\inserttheoremname\inserttheoremnumber
+ \ifx\inserttheoremaddition\@empty\else\ (\inserttheoremaddition)\fi%
+ \inserttheorempunctuation\inserttheorembodyfont\xspace}
+\defbeamertemplate{theorem end}{miko}{}
+% \end{macrocode}
+% and we set it as the default one.
+% \begin{macrocode}
+\setbeamertemplate{theorems}[miko]
+% \end{macrocode}
+% The following fixes an error I do not understand, this has something to do with
+% beamer compatibility, which has similar definitions but only up to 1.
+% \begin{macrocode}
+\expandafter\def\csname Parent2\endcsname{}
+% \end{macrocode}
+% We need to disregard the columns macros introduced by the |beamer| class in the notes.
+% \begin{macrocode}
+\ifmks@sty@notes%
+ \renewenvironment{columns}[1][]{%
+ \par\noindent%
+ \begin{minipage}%
+ \slidewidth\centering\leavevmode%
+ }{%
+ \end{minipage}\par\noindent%
+ }%
+ \newsavebox\columnbox%
+ \renewenvironment<>{column}[2][]{%
+ \begin{lrbox}{\columnbox}\begin{minipage}{#2}%
+ }{%
+ \end{minipage}\end{lrbox}\usebox\columnbox%
+ }%
+\fi% ifnotes
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ifmks@sty@noproblems%
+ \newenvironment{problems}{}{}%
+\else%
+ \excludecomment{problems}%
+\fi%
+%</package>
+% \end{macrocode}
+% \Finale
+\endinput
+% \iffalse
+%%% Local Variables:
+%%% mode: doctex
+%%% TeX-master: t
+%%% End:
+% \fi
+% LocalWords: mikoslides dtx beamer omdoc notheorems noamsthm beamerarticle sc Licences
+% LocalWords: graphicx slidelabel stex amssymb tikz url CPERL amsmath filedate
+% LocalWords: LoadClass RequirePackage DefRegister DefEnvironment omgroup rgb frameimage
+% LocalWords: afterDigestBegin setProperty LookupValue DefConstructor hyperref Tantau's
+% LocalWords: cmyk lec DefMacro titleslide ttitle RawTeX metadata etoolbox cls emph ugbc
+% LocalWords: noproblems linkcolor bookmarksopen citecolor urlcolor colorlinks Tantau di
+% LocalWords: breaklinks plainpages pdfpagelabels srcref iffalse texttt atwin exfig dt
+% LocalWords: mytwocolumns twintoo atwintoo scsys sc hbox raisebox cnxml impl notesfile
+% LocalWords: scshape ttfamily cnxlatex mathml activemath fileversion newpage tpp99 dd
+% LocalWords: maketitle tableofcontents ednote compactitem showmeta showmeta beamerclass
+% LocalWords: sectocframes sectocframes textwarning textwarning compactenum eq omgroups
+% LocalWords: includegraphics tracissue printbibliography textsf langle textsf rangle
+% LocalWords: langle ltxml metakeys newif ifnotes notesfalse ifsectocframes rangle putat
+% LocalWords: sectocframesfalse ifproblems problemstrue notestrue marginnote frontmatter
+% LocalWords: problemsfalse sectocframestrue mdframed noxcolor newcounter ifx equinymous
+% LocalWords: Hfootnote usetheme tikzinput usepgflibrary usetikzlibrary rhd ignorespaces
+% LocalWords: tikzmark textcomp newlength slidewidth setlength slidewidth miko setkeys
+% LocalWords: slideheight slideheight renewenvironment excludecomment itenize Gin@ewidth
+% LocalWords: slideframewidth slideframewidth surroundwithmdframed addmetakey Gen@ewidth
+% LocalWords: allowframebreaks allowdisplaybreaks metasetkeys stepcounter sbox mpart baz
+% LocalWords: currentlabel theslide renewcommand scriptsize scriptstyle hspace mchapter
+% LocalWords: medskip linewidth skipabove skipbelow frametitle newenvironment msection
+% LocalWords: slidelogoheight newsavebox slidelogo slidelogo jacobs-logo vbox ifcase
+% LocalWords: Attribuition-ShareAlike copyrightnotice footnotesize cclogo vss minipage
+% LocalWords: cclogo somerights ifcchref cchreffalse ifpackageloaded usebox mycgraphics
+% LocalWords: cchreftrue usebox newcommand hfill hfill definecolor definecolor endinput
+% LocalWords: defemph notemph stDMemph STpresent textcolor textwarigrening ltx HorIacJuc
+% LocalWords: pgfdeclareimage dbend pgfuseimage xspace titleframe titlepage mycgraphics
+% LocalWords: titleframewith hline vspace ttitlejoint newbox boxwith boxwith msubsection
+% LocalWords: putgraphicsat beginomgroup ifnum vfill vfill noindent leavevmode cscpnrr11
+% LocalWords: columnbox lrbox needwrapper unlist omtext bgroup autoclose pgf readXToken
+% LocalWords: mygraphics doctex NeedsTeXFormat textbackslash userdefinedwidth foobar
+% LocalWords: includegrahics smalltextwarnings msubsubsection msubsubsubsection ldots
+% LocalWords: frameimages frameimages ifframeimages frameimagesfalse frameimagestrue
+% LocalWords: expandafter csname endcsname specializes customization flexiformal colors
+% LocalWords: initialize Initialization defindex realized itemize newrobustcmd
+% LocalWords: specialize centering itemizations setsource setlicensing