diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/stex/mikoslides/mikoslides.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/stex/mikoslides/mikoslides.dtx | 811 |
1 files changed, 460 insertions, 351 deletions
diff --git a/Master/texmf-dist/source/latex/stex/mikoslides/mikoslides.dtx b/Master/texmf-dist/source/latex/stex/mikoslides/mikoslides.dtx index 0384b64b182..7d8d226146c 100644 --- a/Master/texmf-dist/source/latex/stex/mikoslides/mikoslides.dtx +++ b/Master/texmf-dist/source/latex/stex/mikoslides/mikoslides.dtx @@ -4,41 +4,52 @@ % this file is released under the % Gnu Library Public Licences (LGPL) % -% The development version of this file can be found at -% https://svn.kwarc.info/repos/kwarc/projects/stex/sty/mikoslides.dtx +% The original of this file is in the public repository at +% http://github.com/KWARC/sTeX/ % \fi % % \iffalse -%<cls>\NeedsTeXFormat{LaTeX2e}[1999/12/01] -%<cls>\ProvidesClass{mikoslides}[2012/01/28 v0.9 Jacobs slides] +%<cls|package>\NeedsTeXFormat{LaTeX2e}[1999/12/01] +%<cls>\ProvidesClass{mikoslides}[2016/04/07 v1.1 Jacobs slides Class] +%<package>\ProvidesPackage{mikoslides}[2016/04/07 v1.1 Jacobs slides Package] % %<*driver> \documentclass{ltxdoc} -\usepackage{url,array,float} +\usepackage{url,array,float,xspace} \usepackage[show]{ed} \usepackage{graphicx} \usepackage[hyperref=auto,style=alphabetic]{biblatex} -\bibliography{kwarc} +\addbibresource{kwarcpubs.bib} +\addbibresource{extpubs.bib} +\addbibresource{kwarccrossrefs.bib} +\addbibresource{extcrossrefs.bib} \makeindex \floatstyle{boxed} \newfloat{exfig}{thp}{lop} \floatname{exfig}{Example} \def\tracissue#1{\cite{sTeX:online}, - \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} +\hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} \usepackage{hyperref} \begin{document}\DocInput{mikoslides.dtx}\end{document} %</driver> % \fi % -% \CheckSum{364} +% \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.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} % % \GetFileInfo{mikoslides.cls} % \MakeShortVerb{\|} @@ -48,20 +59,21 @@ % \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\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} -% \def\mathml{{\scshape{MathML}}} -% \def\latexml{\hbox{{\LaTeX}ML}} -% \def\omdoc{OMDoc} -% \def\activemath{{\scshape{ActiveMath}}} +% \def\cnxlatex{CNX\LaTeX\xspace} +% \def\mathml{{\scshape{MathML}}\xspace} +% \def\latexml{\hbox{{\LaTeX}ML}\xspace} +% \def\omdoc{OMDoc\xspace} +% \def\activemath{{\scshape{ActiveMath}}\xspace} +% \def\textwarning{\includegraphics[width=1.2em]{dangerous-bend}\xspace} % -% \title{Slides and Course Notes for Jacobs University\thanks{Version {\fileversion} +% \title{Slides and Course Notes\thanks{Version {\fileversion} % (last revised {\filedate})}} % \author{Michael Kohlhase\\ % Jacobs University, Bremen\\ @@ -70,37 +82,101 @@ % % \begin{abstract} % We present a document class from which we can generate both course slides and course -% notes in a transparent way. Furthermore, we present a set of {\latexml} bindings for -% these, so that we can also generate {\omdoc}-based course materials, e.g. for -% inclusion in the {\activemath} system. +% notes in a transparent way. % \end{abstract} +% % \tableofcontents\newpage +% %\section{Introduction} -% This Document class is derived from |beamer.cls|, specializes it with Jacobs stuff and -% adds a notes version that is more suited to printing than the one supplied by -% |beamer.cls|. +% +% This Document class is derived from |beamer.cls|~\cite{beamerclass:on}, specializes it +% with a simple theme (Jacobs as a default) and 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 momeent until we decide what to do with it.} +% for the moment until we decide what to do with it.} % \begin{compactitem} -% \item q\DescribeMacro{showmeta}|showmeta|. If this is set, then the metadata keys are shown -% (see~\cite{Kohlhase:metakeys:ctan} for details and customization options). % \item The options \DescribeMacro{slides}|slides|\DescribeMacro and {notes}|notes| switch -% between slides mode and notes mode (see Section~\ref{sec:user:notesslides}). +% 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 producedheaders \ednote{document the functionality} +% 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. % \end{compactitem} % % \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|). +% % \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: \includegraphics[width=1.2em]{dangerous-bend} +% 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} @@ -109,110 +185,104 @@ % % 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 TRAC~\cite{sTeX:online}. +% the \sTeX GitHub repository~\cite{sTeX:github:on}. % \begin{compactenum} -% \item the class should be divided into concerns. \tracissue{1684} +% \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{compactenum} % % \StopEventually{\newpage\PrintIndex\newpage\PrintChanges\printbibliography} % %\section{The Implementation}\label{sec:impl} % -% The |mikoslides| package generates two files: the {\LaTeX} package (all the code between -% {\textsf{$\langle$*package$\rangle$}} and {\textsf{$\langle$/package$\rangle$}}) and the -% {\latexml} bindings (between {\textsf{$\langle$*ltxml$\rangle$ and -% $\langle$/ltxml$\rangle$}}). We keep the corresponding code fragments together, -% since the documentation applies to both of them and to prevent them from getting out of -% sync. +%\subsection{Class and Package Options}\label{sec:impl:init} % -%\subsection{Initialization and Class Options}\label{sec:impl:init} -% -% For the {\latexml} bindings, we make sure the right perl packages are loaded. -% -% \begin{macrocode} -%<*ltxml> -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -%</ltxml> -% \end{macrocode} -% -% For {\LaTeX} we define some Package Options and switches for the |mikoslides| class and activate -% them by passing them on to |beamer.cls| the appropriate packages. +% 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. % % \begin{macrocode} %<*cls> -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} \newif\ifnotes\notesfalse -\newif\ifsectocframes\sectocframesfalse -\newif\ifproblems\problemstrue +\DeclareOption{notes}{\notestrue\PassOptionsToPackage{\CurrentOption}{mikoslides}} +\DeclareOption{slides}{\notesfalse\PassOptionsToPackage{\CurrentOption}{mikoslides}} +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{omdoc} + \PassOptionsToClass{\CurrentOption}{beamer} + \PassOptionsToPackage{\CurrentOption}{mikoslides}} +\ProcessOptions +%</cls> +% \end{macrocode} +% now we do the same for the |mikoslides| package. Note that we also have to define the +% same switches\ednote{MK: we may think about making all of them internal}, since we might +% use |mikoslides.sty| in a different class. +% \begin{macrocode} +%<*package> +\newif\if@mikoslides@mh@\@mikoslides@mh@false +\DeclareOption{mh}{\@mikoslides@mh@true + \PassOptionsToPackage{\CurrentOption}{stex} + \PassOptionsToPackage{\CurrentOption}{smglom} + \PassOptionsToPackage{\CurrentOption}{tikzinput}} +\newif\ifnotes\notesfalse \DeclareOption{notes}{\notestrue} \DeclareOption{slides}{\notesfalse} -\DeclareOption{noproblems}{\problemsfalse} +\newif\ifsectocframes\sectocframesfalse \DeclareOption{sectocframes}{\sectocframestrue} -\ifnotes -\DeclareOption*{\PassOptionsToClass{\CurrentOption}{omdoc}} -\else -\DeclareOption*{\PassOptionsToClass{\CurrentOption}{beamer}} -\fi +\newif\ifframeimages\frameimagesfalse +\DeclareOption{frameimages}{\frameimagestrue} +\newif\if@part\@partfalse +\DeclareOption{report}{\@parttrue\PassOptionsToPackage{\CurrentOption}{omdoc}} +\DeclareOption{book}{\@parttrue\PassOptionsToPackage{\CurrentOption}{omdoc}} +\newif\ifproblems\problemstrue +\DeclareOption{noproblems}{\problemsfalse} +\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{stex} + \PassOptionsToPackage{\CurrentOption}{smglom} + \PassOptionsToPackage{\CurrentOption}{tikzinput}} \ProcessOptions -%</cls> -%<*ltxml> -RawTeX('\newif\ifnotes\notesfalse'); -RawTeX('\newif\ifproblems\problemsfalse'); -%</ltxml> +%</package> % \end{macrocode} % -% Depending on the options, we either load the |article|-based |omdoc| or the |beamer| class. In the first -% case, 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. +% Depending on the options, we either load the |article|-based |omdoc| or the |beamer| +% class. In the first case, 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. On the \latexml +% side we just load the omdoc class and provide the |\usetheme| macro that would otherwise +% from the the |beamer| class. % \begin{macrocode} %<*cls> \ifnotes -\LoadClass{omdoc} -\RequirePackage{a4wide} -\RequirePackage{marginnote} -\RequirePackage[notheorems,noamsthm]{beamerarticle} + \LoadClass{omdoc} + \RequirePackage{a4wide} + \RequirePackage{marginnote} + \RequirePackage{mdframed} + \RequirePackage[notheorems,noamsthm,noxcolor]{beamerarticle} + \RequirePackage[bookmarks,bookmarksopen,bookmarksnumbered,breaklinks, + linkcolor=black,citecolor=black,urlcolor=cyan,filecolor=cyan,colorlinks]{hyperref} \else -\LoadClass[notheorems,noamsthm,10pt]{beamer} -\newcounter{Item} -\newcounter{paragraph} -\newcounter{subparagraph} -\newcounter{Hfootnote} -\usetheme{Jacobs} + \LoadClass[notheorems,noamsthm,10pt]{beamer} + \newcounter{Item} + \newcounter{paragraph} + \newcounter{subparagraph} + \newcounter{Hfootnote} + \usetheme{Jacobs} \fi +\RequirePackage{mikoslides} %</cls> -%<*ltxml> -LoadClass('omdoc'); -DefConstructor('\usetheme{}',''); -%</ltxml> % \end{macrocode} % -% now, we load the remaining packages for both versions. \ednote{MK: eventually (when tikz -% support is fully realized in \latexml) get rid of the standalone package} +% now, we load the remaining packages for both versions. % % \begin{macrocode} -%<*cls> +%<*package> +\if@mikoslides@mh@\RequirePackage{mikoslides-mh}\fi \RequirePackage{stex} -\RequirePackage{latexml} +\RequirePackage{smglom} +\RequirePackage{tikzinput} \RequirePackage{amssymb} -\RequirePackage{tikz} -\usepgflibrary{shapes}\usetikzlibrary{arrows} -\RequirePackage{url} \RequirePackage{amsmath} \RequirePackage{comment} -\RequirePackage{standalone} -%</cls> -%<*ltxml> -RequirePackage('stex'); -RequirePackage('latexml'); -RequirePackage('amssymb'); -RequirePackage('graphicx'); -RequirePackage('tikz'); -RequirePackage('amsmath'); -%</ltxml> +\RequirePackage{textcomp} +\RequirePackage{url} % \end{macrocode} % % \subsection{Notes and Slides}\label{sec:impl:noteslides} @@ -221,145 +291,202 @@ RequirePackage('amsmath'); % here. % % \begin{macrocode} -%<*cls> \newcounter{slide} -\newlength{\slidewidth}\setlength{\slidewidth}{13.5cm} +\newlength{\slidewidth}\setlength{\slidewidth}{12.8cm} \newlength{\slideheight}\setlength{\slideheight}{9cm} -%</cls> -%<*ltxml> -DefRegister('\slidewidth' => Dimension('13.5cm')); -DefRegister('\slideheight' => Dimension('9cm')); -%</ltxml> % \end{macrocode} % -% 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{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} -%<*cls> -\ifnotes\renewenvironment{note}{}{}\else\excludecomment{note}\fi -%</cls> -%<*ltxml> -DefEnvironment('{note}','#body'); -%</ltxml> +\ifnotes% + \renewenvironment{note}{\ignorespaces}{}% +\else% + \excludecomment{note}% +\fi% % \end{macrocode} % \end{environment} % % -% the next step is to 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. +% We start by giving the {\latexml} binding for the |frame| environment from the |beamer| +% class. 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} -%<*cls> \ifnotes -\newlength{\slideframewidth}\setlength{\slideframewidth}{2pt} -\newsavebox{\myframebox} -%</cls> + \newlength{\slideframewidth} + \setlength{\slideframewidth}{1.5pt} % \end{macrocode} % % \begin{environment}{frame} -% For the |frame| environment we construct a |lrbox| in the |\myframebox| register that -% we can later put into an |\fbox| so that it looks like a slide. Furthermore, we -% redefine the |itenize| environment so that it looks more like the one in |beamer| with -% |Jacobs| theme. +% We first define the keys. % \begin{macrocode} -%<*cls> -\renewenvironment{frame}[1][]% -{\stepcounter{slide} -\def\itemize@level{outer} -\def\itemize@outer{outer} -\def\itemize@inner{inner} -\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}} - \noindent\hfill\begin{lrbox}{\myframebox} - \begin{minipage}{\slidewidth}\sf}% - {\miko@slidelabel\end{minipage}\end{lrbox}% - \begin{center}\fbox{\usebox\myframebox}\end{center}\hfill} -%</cls> -%<*ltxml> -DefEnvironment('{frame}[]', - "<omdoc:omgroup layout='slide'>" - . "#body\n" - ."</omdoc:omgroup>\n\n", - afterDigestBegin=>sub { - $_[1]->setProperty(theory=>LookupValue('current_module')); }); -%</ltxml>#$ + \addmetakey{frame}{label} + \addmetakey[yes]{frame}{allowframebreaks} + \addmetakey{frame}{allowdisplaybreaks} + \addmetakey[yes]{frame}{fragile} + \addmetakey[yes]{frame}{shrink} + \addmetakey[yes]{frame}{squeeze} +% \end{macrocode} +% We redefine the |itemize| environment so that it looks more like the one in |beamer| +% with |Jacobs| theme. We create the box with the |mdframed| environment from the +% equinymous package. +% Then 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| +% with |Jacobs| theme. +% \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} % -% the next step is to set up the slide boxes in |article| mode. -% +% Now, we need to redefine the frametitle (we are still in course notes mode). +% \begin{macro}{\frametitle} % \begin{macrocode} -%<*cls> -\renewcommand{\frametitle}[1]{{\Large\bf\sf\color{blue}{#1}}} -\fi -\makeindex -%</cls> -%<*ltxml> -DefConstructor('\frametitle{}', - "\n<omdoc:metadata><dc:title>#1</dc:title></omdoc:metadata>"); -%</ltxml> + \renewcommand{\frametitle}[1]{{\Large\bf\sf\color{blue}{#1}}\medskip}% +\fi %ifnotes % \end{macrocode} +% \end{macro} % -% We start by giving the {\latexml} binding for the |frame| environment from the |beamer| -% class. The |note| environment is used to blend out text in the |slides| mode. It does -% not have a counterpart in OMDoc. -% +% \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} -%<*cls> -\ifproblems\newenvironment{problems}{}{}\else\excludecomment{problems}\fi -%</cls> -%<*ltxml> -DefEnvironment('{problems}','#body'); -%</ltxml> +\newrobustcmd\frameimage[2][]{% + \stepcounter{slide}% + \ifframeimages% + \def\Gin@ewidth{}\setkeys{Gin}{#1}% + \ifnotes% + \else% + \vfill% + \fi% + \ifx\Gin@ewidth\@empty% + \mycgraphics[width=\slidewidth,#1]{#2}\else\mycgraphics[#1]{#2}% + \fi% + \par\strut\hfill{\footnotesize Slide \arabic{slide}}% + \ifnotes% + \else% + \vfill% + \fi% + \fi% +}% ifframeimages % \end{macrocode} -%\ednote{subtitle is difficult to model in DC metadata. I guess that we want to collect -%the subtitle into dc:title} -% +% \end{macro} +% % \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} -%<*cls> \newlength{\slidelogoheight} -\ifnotes\setlength{\slidelogoheight}{.4cm}\else\setlength{\slidelogoheight}{1cm}\fi -\newsavebox{\slidelogo}\sbox{\slidelogo}{\includegraphics[height=\slidelogoheight]{jacobs-logo}} +\ifnotes% + \setlength{\slidelogoheight}{.4cm}% +\else% + \setlength{\slidelogoheight}{1cm}% +\fi% +\newsavebox{\slidelogo}% +\sbox{\slidelogo}{\includegraphics[height=\slidelogoheight]{jacobs-logo}}% +\newrobustcmd{\setslidelogo}[1]{% + \sbox{\slidelogo}{\includegraphics[height=\slidelogoheight]{#1}}% +}% % \end{macrocode} -% -% Now, we set up the copyright and licensing, the copyright remains with the author, but -% we use the Creative Commons Attribuition-ShareAlike license to strengthen den public -% domain. Here the problem is that we want a hyperref on the CC logo, if hyperref is -% loaded, and otherwise not. As hyperref is always loaded, we have to find out at the -% beginning of the document whether it is, set up a switch, and later in the footer line -% decide what to do. +% \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 -\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{\setsource}[1]{\def\source{#1}}% % \end{macrocode} -% -% 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.} +% \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} -\newcommand{\miko@slidelabel}% -{\vbox to \slidelogoheight{\vss\hbox to \slidewidth% -{\licensing\hfill\copyrightnotice\hfill\arabic{slide}\hfill\usebox{\slidelogo}}}} -%</cls> +\newrobustcmd\miko@slidelabel{% + \vbox to \slidelogoheight{% + \vss\hbox to \slidewidth% + {\licensing\hfill\copyrightnotice\hfill\arabic{slide}\hfill\usebox{\slidelogo}}% + }% +}% % \end{macrocode} % \end{macro} % @@ -369,8 +496,10 @@ DefEnvironment('{problems}','#body'); % 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} -%<*cls> -\AtBeginDocument{\definecolor{green}{rgb}{0,.5,0}\definecolor{purple}{cmyk}{.3,1,0,.17}} +\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 @@ -383,194 +512,174 @@ DefEnvironment('{problems}','#body'); \def\notemph#1{{\textcolor{magenta}{#1}}} \def\stDMemph#1{{\textcolor{blue}{#1}}} \def\@@lec#1{(\textcolor{green}{#1})} -%</cls> -%<*ltxml> -#DefMacro('\defemph{}','{\textcolor{magenta}{#1}}'); -#DefMacro('\notemph{}','{\textcolor{magenta}{#1}}'); -%</ltxml> % \end{macrocode} % % I like to use the dangerous bend symbol for warnings, so we provide it here. -% \begin{macro}{\textwarigrening} +% \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} -%<*cls> +\pgfdeclareimage[width=.9em]{miko@small@dbend}{dangerous-bend} +\def\smalltextwarning{% + \pgfuseimage{miko@small@dbend}% + \xspace% +}% \pgfdeclareimage[width=1.5em]{miko@dbend}{dangerous-bend} -\def\textwarning{\raisebox{-.05cm}{\pgfuseimage{miko@dbend}}\xspace} -%</cls>b -%<*ltxml> -DefMacro('\textwarning',""); -%</ltxml> +\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} % % \subsection{Front Matter, Titles, etc} % -% We need to redefine the frontmatter macros inherited from the |beamer| class, since -% there they take an optional argument. +% We need to redefine the frontmatter macros inherited from the |beamer| class for +% LaTeXML, since there they take an optional argument. % \begin{macrocode} -%<*ltxml> -DefMacro('\title[]{}', '\@add@frontmatter{ltx:title}{#1}'); -DefMacro('\date[]{}', '\@add@frontmatter{ltx:date}[role=creation]{#1}'); -DefMacro('\author[]{}', sub { andSplit(T_CS('\@author'),$_[1]); });#$ % \end{macrocode} -%</ltxml> -% -% Now, we specialize the slide environment that we have implemented above or inherited -% from |seminar.cls| for some abbreviations, e.g. separator slides and title slides. % \begin{macrocode} -%<*cls> -\newcommand\titleframe{\begin{frame}\titlepage\end{frame}} -\newenvironment{titleframewith}{\begin{frame}\titlepage}{\end{frame}} -\newenvironment{ttitle}{\begin{center}\LARGE\begin{tabular}{|c|}\hline}% - {\\\hline\end{tabular}\end{center}\vspace{1ex minus 1ex}} -\newenvironment{ttitlejoint}[1]% -{\newbox\boxwith\setbox\boxwith\hbox{\begin{tabular}{c}{\em joint work with}\\#1\end{tabular}}% -\begin{center}\LARGE\begin{tabular}{c}\color{red}}% -{\\\box\boxwith\end{tabular}\end{center}% -\vspace{1ex minus 1ex}} -%</cls> -%<*ltxml> -DefConstructor('\titleframe',"<omdoc:ignore>titleframe elided here</omdoc:ignore>"); -DefEnvironment('{titleframewith}', - "<omdoc:ignore>begin elided titleframe</omdoc:ignore>" - . "#body" - ."<omdoc:ignore>end elided titleframe</omdoc:ignore>"); -DefEnvironment('{titleslide}',""); -DefEnvironment('{titleslide}',"<omdoc:omgroup>#body</omdoc:omgroup>"); -DefEnvironment('{ttitle}', "\n<dc:title>#body</dc:title>"); -%</ltxml> +% Must be first command on slide to make positioning work. +\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 % \begin{macrocode} -% Must be first command on slide to make positioning work. -%<*cls> -\newcommand{\putgraphicsat}[3]{% - \begin{picture}(0,0)\put(#1){\includegraphics[#2]{#3}}\end{picture}} -\newcommand{\putat}[2]{\begin{picture}(0,0)\put(#1){#2}\end{picture}} -%</cls> -%<*ltxml> -%</ltxml> +\ifsectocframes% + \if@part% + \newcounter{mpart}% + \newcounter{mchapter}% + \newcounter{msection}[mchapter]% + \else% + \newcounter{msection}% + \fi% + \newcounter{msubsection}[msection]% + \newcounter{msubsubsection}[msubsection]% + \newcounter{msubsubsubsection}[msubsubsection]% +\fi% ifsectocframes % \end{macrocode} +% and then % \begin{macrocode} -%<*cls> -\ifsectocframes -%\AtBeginChapter[]{\begin{frame}<beamer>\frametitle{Chapter Outline}\tableofcontents[currentsection]\end{frame}} -%\AtBeginSection[]{\begin{frame}<beamer>\frametitle{Section Outline}\tableofcontents[currentsection]\end{frame}} -%\AtBeginSubsection[]{\begin{frame}<beamer>\frametitle{Subsection Outline}\tableofcontents[currentsubsection]\end{frame}} -%\AtBeginSubsubsection[]{\begin{frame}<beamer>\frametitle{Subsubsection Outline}\tableofcontents[currentsubsubsection]\end{frame}} -\def\at@begin@omgroup#1{\message{atbeginomgroup}\begin{frame}<beamer>\frametitle{Outline}\tableofcontents[section]\end{frame}} -\fi -%</cls> +\ifnotes\else% only in slides + \renewenvironment{omgroup}[2][]{% + \metasetkeys{omgroup}{#1}\sref@target% + \advance\section@level by 1% + \ifsectocframes% + \begin{frame}% + \vfill\Large\centering% + \red{% + \ifcase\section@level\or% + \stepcounter{mpart}Part \Roman{mpart}\or% + \stepcounter{mchapter}Chapter \arabic{mchapter}\or + \stepcounter{msection}\if@part\arabic{mchapter}.\fi\arabic{msection}\or + \stepcounter{msubsection}\if@part\arabic{mchapter}.\fi\arabic{msection}.\arabic{msubsection}\or + \stepcounter{msubsubsection}\if@part\arabic{mchapter}.\fi\arabic{msection}.\arabic{msubsection}.\arabic{msubsubsection}.\or + \stepcounter{msubsubsubsection}\if@part\arabic{mchapter}.\fi\arabic{msection}.\arabic{msubsection}.\arabic{msubsubsection}.\arabic{msubsubsubsection}% + \fi% end ifcase + \quad #2% + }% + \vfill% + \end{frame}% + \fi %ifsectocframes + } + {\advance\section@level by -1}% +\fi% ifnotes +% \end{macrocode} % % \subsection{Miscellaneous} % -% the following macro is only to work around problems in the |tikz| support in \latexml. +% 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} -%<*cls> -\newcommand\tikzinput[2][]{\input{#2}} -%</cls> -%<*ltxml> -DefMacro('\tikzinput[] {}','\includegraphics[#1]{#2}'); -%</ltxml> -% \end{macrocode} - -% We need to disregard the columns macros introduced by the |beamer| class +\expandafter\def\csname Parent2\endcsname{} % \begin{macrocode} -%<*ltxml> -DefEnvironment('{columns}','#body'); -DefEnvironment('{column}{}','#body'); -%</ltxml> -% \end{macrocode} % -% We also need to deal with overlay specifications introduced by the |beamer| -% class.\ednote{this is just to keep latexml quiet, no real functionality here.} -% -% \ednote{Deyan: We reuse the CMP itemizations defined in the omdoc.cls.ltxml binding, -% adjusting the parameters to be overlay-sensitive } +% We need to disregard the columns macros introduced by the |beamer| class % \begin{macrocode} -%<*ltxml> -DefConstructor('\uncover','#1'); -#Define a Beamer Overlay Parameter type - DefParameterType('BeamerOverlay', sub { - my ($gullet) = @_; - my $tok = $gullet->readXToken; - if (ref $tok && ToString($tok) eq '<') { - $gullet->readUntil(T_OTHER('>')); - } else { - $gullet->unread($tok) if ref $tok; - undef; }}, - reversion=> sub { - (T_OTHER('<'), $_[0]->revert, T_OTHER('>')); - }); - -#Take the "from" field of the overlay range -sub overlayFrom { - return "" unless defined $_[0]; - my $overlay=ToString($_[0]); $overlay =~ /^(\d+)/; $1;} - -#Reuse the CMP itemizations, only adjust the \item constructors. -DefMacro('\beamer@group@item[] OptionalBeamerOverlay IfBeginFollows', sub { - my($gullet,$tag,$overlay,$needwrapper)=@_; - $overlay=$overlay||T_OTHER(""); - ( T_CS('\group@item@maybe@unwrap'), - ($needwrapper ? (Invocation(T_CS('\beamer@group@item@wrap'),$tag,$overlay)->unlist) : ()) ); }); -DefConstructor('\beamer@group@item@wrap {} OptionalBeamerOverlay', - "<omdoc:omtext ?#2(overlay='&overlayFrom(#2)')()>" - . "?#1(<dc:title>#1</dc:title>)()" - . "<omdoc:CMP>", - beforeDigest=>sub { - Let('\group@item@maybe@unwrap','\group@item@unwrap'); - #$_[0]->bgroup; -return; }, - properties=>sub{ RefStepItemCounter(); }); - - -#DefConstructor('\beamer@itemize@item[] OptionalBeamerOverlay', -# "<omdoc:li ?#2(overlay='&overlayFrom(#2)')() >" -# . "?#1(<dc:title>#1</dc:title>)()", -# properties=>sub{ RefStepItemCounter(); }); -DefConstructor('\beamer@enumerate@item[] OptionalBeamerOverlay', - "<omdoc:li ?#2(overlay='&overlayFrom(#2)')() >" - . "?#1(<dc:title>#1</dc:title>)()", - properties=>sub{ RefStepItemCounter(); }); -DefConstructor('\beamer@description@item[] OptionalBeamerOverlay', - "<omdoc:di ?#2(overlay='&overlayFrom(#2)')() >" - . "?#1(<omdoc:dt>#1</omdoc:dt>)()<omdoc:dd>", # trust di and dt to autoclose - properties=>sub{ RefStepItemCounter(); }); -%</ltxml>#$ +\ifnotes% + \renewenvironment{columns}{% + \par\noindent% + \begin{minipage}% + \slidewidth\centering\leavevmode% + }{% + \end{minipage}\par\noindent% + }% + \newsavebox\columnbox% + \renewenvironment{column}[1]{% + \begin{lrbox}{\columnbox}\begin{minipage}{#1}% + }{% + \end{minipage}\end{lrbox}\usebox\columnbox% + }% +\fi% % \end{macrocode} % Now, some things that are imported from the |pgf| and |beamer| packages: % \begin{macrocode} -%<*ltxml> -DefMacro('\putgraphicsat{}{}{}','\mygraphics[#2]{#3}'); -DefMacro('\putat{}{}','#2'); -%</ltxml> % \end{macrocode} % -% \subsection{Finale} % -% Finally, we set the slide body font to the sans serife, and we terminate the {\latexml} -% bindings file with a success mark for perl. % \begin{macrocode} -%<cls>\ifnotes\else\sf\fi -%<ltxml>1; +\ifproblems% + \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 -% LocalWords: graphicx slidelabel stex latexml amssymb tikz url CPERL amsmath -% LocalWords: LoadClass RequirePackage DefRegister DefEnvironment omgroup rgb -% LocalWords: afterDigestBegin setProperty LookupValue DefConstructor hyperref -% LocalWords: cmyk lec DefMacro titleslide ttitle RawTeX metadata etoolbox -% LocalWords: noproblems linkcolor bookmarksopen citecolor urlcolor colorlinks -% LocalWords: breaklinks plainpages pdfpagelabels srcref +% LocalWords: mikoslides dtx beamer omdoc notheorems noamsthm beamerarticle sc Licences +% LocalWords: graphicx slidelabel stex latexml 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 smalltextwarning 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 |