% \iffalse meta-comment % % Copyright (C) 2020 Christoph Semken % ------------------------------------------------------- % % This file may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in: % % http://www.latex-project.org/lppl.txt % % and version 1.3 or later is part of all distributions of LaTeX % version 2005/12/01 or later. % % \fi % % \iffalse % % %<*driver> \ProvidesFile{beamerappendixnote.dtx} % % \ProvidesPackage{beamerappendixnote} %<*package> [2020/05/13 v1.0 initial version] % %<*driver> \documentclass{l3doc} \usepackage{beamerappendixnote} \usepackage{listings} \lstset{ basicstyle=\ttfamily, columns=fullflexible, keepspaces=true, } \usepackage{graphicx} \begin{document} \changes{v1.0}{2020/05/13}{Initial version} \GetFileInfo{beamerappendixnote.dtx} \title{The \pkg{beamerappendixnote} package} \author{Christoph Semken% \thanks{E-mail: \href{mailto:christoph.ban@semken.info} {christoph.ban@semken.info}% }% } \date{\fileversion\ --- \filedate} \maketitle \begin{documentation} \noindent Beamer appendix note introduces the \cs{beamerappxnote} command, which puts the note's content on a separate beamer frame, shown by the command \cs{printappxnotes}. It also creates interactive buttons to move back and forth between the two frames: \lstinputlisting{example-basic.tex} \includegraphics[page=1,width=.49\linewidth]{example-basic.pdf} \includegraphics[page=2,width=.49\linewidth]{example-basic.pdf} \clearpage \section{Usage} \begin{function}{\appxnote} \begin{syntax} \cs{appxnote}\marg{title}\marg{content} \end{syntax} Create a new appendix note. Inserts a \cs{beamergotobutton} to a frame that contains \marg{content}. The appendix frame is created using \cs{printappxnotes}. The button’s text and the title of the appendix frame are both set to \marg{title}. \end{function} \begin{function}{\printappxnotes} \begin{syntax} \cs{printappxnotes} \end{syntax} Prints appendix notes in the order they are created using \cs{appxnote}. Has to be used after the last appendix note. Uses one frame per note. Inserts a \cs{beamerreturnbutton} button to the frame where \cs{appxnote} was called, followed by the content, separated by a \cs{vfill}. \end{function} \end{documentation} \begin{implementation} \section{Implementation} \DocInput{beamerappendixnote.dtx} \end{implementation} \end{document} % % \fi % \iffalse %<*package> %<@@=ban> % \fi % % \subsection{Dependencies} % % Load the essential support (\pkg{expl3}). % \begin{macrocode} \RequirePackage{expl3} % \end{macrocode} % % Make sure that the version of \pkg{l3kernel} in use is sufficiently new. % \begin{macrocode} \@ifpackagelater {expl3}{2018/04/22} {} {% \PackageError {beamerappendixnote} {Support package expl3 too old} {% You need to update your installation of the bundles 'l3kernel' and 'l3packages'.\MessageBreak Loading~beamerappendixnote~will~abort!% }% \endinput }% % \end{macrocode} % % Identify the package and give the over all version information. % \begin{macrocode} \ProvidesExplPackage {beamerappendixnote} {2020/05/07} {1.0} {Create notes in appendix frames} % \end{macrocode} % % User level interfaces are all created by \pkg{xparse} % \begin{macrocode} \RequirePackage {xparse} % \end{macrocode} % % \subsection{Data structures} % % Initialise sequences used to store notes. % \begin{macrocode} \seq_new:N \g_ban_titles \seq_new:N \g_ban_content % \end{macrocode} % % \subsection{Macros} % % \begin{macro}{\appxnote} % Create a new appendix note and insert a link % \begin{macrocode} \NewDocumentCommand{\appxnote}{m m}{ \seq_gput_right:Nn \g_ban_titles {#1} \seq_gput_right:Nn \g_ban_content {#2} \hyperlink{ban-\seq_count:N \g_ban_titles}{\beamergotobutton{#1}}% \label{ban-back-\seq_count:N \g_ban_titles} } % \end{macrocode} % \end{macro} % % \begin{macro}{\@@_print_func:n} % Print an appendix note % \begin{macrocode} \cs_set:Npn \print_func:n #1 { \begin{frame}[label=ban-#1]{\seq_item:Nn \g_ban_titles {#1}} \hyperlink{ ban-back-#1 }{\beamerreturnbutton{Back}} \vfill \seq_item:Nn \g_ban_content {#1} \end{frame} } % \end{macrocode} % \end{macro} % % \begin{macro}{\printappxnotes} % Print all appendix notes % \begin{macrocode} \NewDocumentCommand{\printappxnotes}{}{ \int_step_function:nN {\seq_count:N \g_ban_titles} \print_func:n } % \end{macrocode} % \end{macro} % % \iffalse % % \fi