% \iffalse meta-comment
%
% Copyright (C) 2020 Christoph Semken <christoph.ban@semken.info>
% -------------------------------------------------------
% 
% 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}
%</driver>
%<package> \ProvidesPackage{beamerappendixnote}
%<*package>
  [2020/05/13 v1.0 initial version]
%</package>
%<*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}
%</driver>
% \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
%</package>
% \fi
