summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2015-07-17 22:42:45 +0000
committerKarl Berry <karl@freefriends.org>2015-07-17 22:42:45 +0000
commit836bd4773e861a6ea3ac4e8c9606bbb0fdd3f44c (patch)
tree2e68afa431d3566c160198fdb9e9d2821242a579 /Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.tex
parent19b8c17ca1c0af54d194ebc1d1c39f5cfbe1d06a (diff)
jslectureplanner (16jul15)
git-svn-id: svn://tug.org/texlive/trunk@37878 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.tex')
-rw-r--r--Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.tex537
1 files changed, 431 insertions, 106 deletions
diff --git a/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.tex b/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.tex
index 77c58a8cbc7..60d9a49e7f4 100644
--- a/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.tex
+++ b/Master/texmf-dist/doc/latex/jslectureplanner/jslectureplanner.tex
@@ -1,7 +1,7 @@
\documentclass[english]{article}
-\usepackage{charter}
-\usepackage[scaled=0.87]{beramono}
+\usepackage[osf]{libertine}
+\usepackage[scaled=0.7]{beramono}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{url}
@@ -13,65 +13,104 @@
\newcommand*\jfmacro[1]{\texttt{#1}}
\newcommand*\jfcsmacro[1]{\jfmacro{\textbackslash{#1}}}
+% macros
+\newcommand*\jslp{\textsf{jslectureplanner}}
+\newcommand*\jsmt{\textsf{jsmembertable}}
+
+% improve layout
+\tolerance 1414
+\hbadness 1414
+\emergencystretch 1.5em
+\hfuzz 0.3pt
+\widowpenalty = 10000
+\vfuzz \hfuzz
+\raggedbottom
+
+\usepackage{microtype}
+
\usepackage{babel}
+
\usepackage{listings}
\lstset{language={[LaTeX]TeX},
basicstyle={\small\ttfamily},
frame=single}
-\renewcommand{\lstlistingname}{Listing}
\setcounter{tocdepth}{2}
\begin{document}
-\title{The jslectureplanner package}
+\title{The \jslp\ bundle}
\author{Jürgen Spitzmüller%
\thanks{Please report issues via \protect\url{https://github.com/jspitz/jslectureplanner}.}}
-\date{Version 1.0.2, 2015/07/07}
+\date{Version 1.1, 2015/07/15}
\maketitle
+\begin{abstract}
+\noindent The \jslp\ bundle provides a collection of packages
+I have written in order to facilitate, and somewhat systematize,
+the planning of my university courses and the generation of course material
+(and thus, ultimately, to relieve me from some of the more boring and
+time-consuming part of teaching work).
+Currently, the bundle consists of the main, title-giving package \jslp\
+that provides an interface to central, partly dynamically generated course
+metadata as well as routines to generate programs, bibliographies etc., and one
+smaller companion package: \jsmt, a package that can construct course
+member and presence tables. This manual documents these packages.
+\end{abstract}
+
\tableofcontents
+\clearpage
+
+\part{The \jslp\ package}
+
+This part of the manual describes the basic user interface of the
+\jslp\ package.
+Please also refer to the example files included in the bundle in order to
+see how \jslp\ is supposed to be used ``in practice''.
+
\section{Aim of this package}
-I have written this package in order to facilitate (and somewhat systematize)
-the planning of my university courses. The basic idea of this package
-is that you record all general data of a course (date, semester, type,
-course title, session titles, general information etc.) in a central
-tex file and then input this file to all documents related to the
-course (such as the course program, bibliography, scripts, handouts, beamer
-presentations, exercises etc.), in order to re-use the recorded data.
+The basic idea of the \jslp\ package is that you record
+all general data of a course (date, semester, type, course title, session titles,
+general information etc.) in a central tex file and then input this
+file to all documents related to the course (such as the course program,
+bibliography, scripts, handouts, beamer presentations, exercises etc.),
+in order to re-use the recorded data.
This is particularly helpful if you have standard courses which
are held every other semester: instead of changing the data in every
single file, you just need to change it once, in the metadata file.
-To further facilitate the planning, the package is able to calculate
-the session dates of a whole semester, if the sessions of the course
-follow at regular intervals.
+To further facilitate the planning, the \jslp\ package
+is able to calculate the session dates of a whole semester, if the sessions
+of the course follow at regular intervals.
You only need to set the date of the first session, the package does
the rest. Moreover, the package can be used to generate a sectioned
bibliography for the course via \textsf{biblatex}.
-Since the package was written for my own needs, it is somewhat tied
+Since the package has been written for my own needs, it is somewhat tied
to my workflow. Particularly, it is tied to my context: teaching in
the Humanities at a German-speaking university. Hence, the categorization
of the package draws on this context. In particular, all strings and
-formats are German. However, it is possible add new categories as well as
-to customize and translate the strings.
+formats are German. However, it is possible to add new categories as
+well as to customize and translate the strings.
This is described later in this manual.
-This manual describes the basic user interface of the package. Please
-also refer to the example files included in the package in order to
-see how it is supposed to be used ``in practice''.
-
+\section{Requirements of \jslp}\label{sec:req-jslp}
-\section{Requirements}
-
-The following packages are required: \textsf{etoolbox}, \textsf{advdate},
-\textsf{xkeyval}, \textsf{datetime}, \textsf{calc}.
+The following packages are required and loaded by \jslp:
+\begin{itemize}
+ \setlength\itemsep{2pt}
+ \item \textsf{advdate}
+ \item \textsf{calc}
+ \item \textsf{datetime}
+ \item \textsf{etoolbox}
+ \item \textsf{ifthen}
+ \item \textsf{xkeyval}
+\end{itemize}
\section{General idea}
@@ -107,72 +146,81 @@ or via specific macros (see sec.~\ref{sec:via-macros}).
\subsubsection{Course classification\label{sec:lecture-classification}}
-The default course classification draws on the conventions at German universities
-(or those where I have worked, for that matter). Each type is connected
-to a verbose string (such as ``Seminar''), a short form (such as
-``SE'') and a form that is used to denote individual sessions (as
+The default course classification draws on the conventions at German-speaking
+universities (or those where I have worked, for that matter). Each type is
+connected to a verbose string (such as \emph{Seminar}), a short form (such as
+\emph{SE}) and a form that is used to denote individual sessions (as
in ``the second \emph{session} of this course'').
\begin{description}
-\item [{type=<type>}] Defines the course type. Preset values:
+\item [\joption{type=<type>}] defines the course type. Predefined values are:
\begin{itemize}
-\item \joption{vl}: A lecture (verbose form: ``Vorlesung''\footnote{Sec.~\ref{sec:customizing-strings}
-explains how to customize these strings.}, short form: ``VL'', session form: ``Vorlesung'')
-\item \joption{ps}: Undergraduate seminar (verbose form: ``Proseminar'',
-short form: ``PS'', session form: ``Sitzung'')
-\item \joption{se}: Seminar (verbose form: ``Seminar'', short form: ``SE'',
-session form: ``Sitzung'')
-\item \joption{ue}: Practical course (verbose form: ``Übung'', short
-form: ``UE'', session form: ``Sitzung'')
-\item \joption{ko}: Colloquium (verbose form: ``Kolloquium'', short form:
-``KO'', session form: ``Sitzung'')
-\item \joption{pv}: Research seminar (verbose form: ``Privatissimum'',
-short form: ``PV'', session form: ``Sitzung'')
+\item \joption{vl}: A lecture (verbose form: \emph{Vorlesung}, short form:
+ \emph{VL}, session form: \emph{Vorlesung})
+\item \joption{ps}: Undergraduate seminar (verbose form: \emph{Proseminar},
+ short form: \emph{PS}, session form: \emph{Sitzung})
+\item \joption{se}: Seminar (verbose form: \emph{Seminar}, short form:
+ \emph{SE}, session form: \emph{Sitzung})
+\item \joption{ue}: Practical course (verbose form: \emph{Übung}, short
+ form: \emph{UE}, session form: \emph{Sitzung})
+\item \joption{ko}: Colloquium (verbose form: \emph{Kolloquium}, short form:
+ \emph{KO}, session form: \emph{Sitzung})
+\item \joption{pv}: Research seminar (verbose form: \emph{Privatissimum},
+ short form: \emph{PV}, session form: \emph{Sitzung})
\end{itemize}
-Sec.~\ref{sec:customizing-strings} explains how to customize and extend this list.
-Also cf. sec.~\ref{sec:styles} on the concept of ``styles''.
+Section~\ref{sec:customizing-strings} explains how to extend this list and how
+to customize the strings.
+Please also cf. sec.~\ref{sec:styles} on the concept of ``styles''.
\end{description}
\subsubsection{Course title}
\begin{description}
-\item [{title=<title>}] Main title of the course
-\item [{titlesep=<separator>}] Separator between title and subtitle
-\item [{subtitle=<subtitle>}] Subtitle of the course
-\item [{shorttitle=<shorttitle>}] Short title of the course (for headings etc.)
+\item [\joption{title=<title>}] Main title of the course
+\item [\joption{titlesep=<separator>}] Separator between title and subtitle
+\item [\joption{subtitle=<subtitle>}] Subtitle of the course
+\item [\joption{shorttitle=<shorttitle>}] Short title of the course (for headings etc.)
\end{description}
\subsubsection{Date and place\label{sec:date-and-place}}
\begin{description}
-\item [{semester=<term>,}] where \joption{<term>} is one of
+\item [\joption{semester=<term>,}] where \joption{<term>} is one of
\begin{itemize}
-\item \joption{fs}: Spring term (``Frühjahrssemester'', short form: ``FS'')
-\item \joption{hs}: Fall term (``Herbstsemester'', short form: ``HS'')
-\item \joption{ss}: Summer term (``Sommersemester'', short form: ``SoSe'')
-\item \joption{ws}: Winter term (``Wintersemester'', short form: ``WS'')
+\item \joption{fs}: Spring term (\emph{Frühjahrssemester}, short form: \emph{FS})
+\item \joption{hs}: Fall term (\emph{Herbstsemester}, short form: \emph{HS})
+\item \joption{ss}: Summer term (\emph{Sommersemester}, short form: \emph{SoSe})
+\item \joption{ws}: Winter term (\emph{Wintersemester}, short form: \emph{WS})
\end{itemize}
Sec.~\ref{sec:customizing-strings} explains how to customize and extend this list.
Also cf. sec.~\ref{sec:styles}.
-\item [{year=<year>}]~
-\item [{uni=<university>}]~
-\item [{institute=<institute>}]~
-\item [{room=<room>}]~
-\item [{startdate=<startdate>}] Date of the first session (argument\emph{
-must} have the form DD/MM/YYYY). If no startdate is given, \jfcsmacro{today} is used.
-\item [{interval=<interval>}] Interval (in days) between two sessions.
+\item [\joption{year=<year>}] Year of the term
+\item [\joption{uni=<university>}] Your university
+\item [\joption{institute=<institute>}] Your institute/department
+\item [\joption{room=<room>}] The room where the course generally takes place.
+ It is possible to specify diverging rooms for individual sessions
+ (see sec. \ref{sec:lecplan}).
+\item [\joption{startdate=<startdate>}] The date of the first session (the argument
+ \emph{must} have the form DD/MM/YYYY). If no startdate is given,
+ \jfcsmacro{today} is used.
+\item [\joption{interval=<interval>}] The interval (in days) between two sessions.
The preset interval is 7 (=~weekly courses).
\end{description}
\subsubsection{Additional information}
\begin{description}
-\item [{instructor=<name>}] Instructor's name
-\item [{platform=<data>}] Information (e.\,g., URL) of the e-learning platform
-\item [{officehours=<data>}] Date of your office hours
-\item [{officenumber=<data>}] Your office number
+\item [\joption{instructor=<name>}] (General) course instructor's name.
+ It is possible to specify different or specific instructors for individual sessions
+ (see sec. \ref{sec:lecplan}).
+\item [\joption{platform=<data>}] Information of the e-learning platform
+ (such as the URL)
+\item [\joption{officehours=<data>}] Date of your office hours
+\item [\joption{officenumber=<data>}] Your office (room) number
\end{description}
+\clearpage
+
\subsection{Via macros\label{sec:via-macros}}
The following macros provide an alternative way to set up the course metadata.
@@ -199,8 +247,8 @@ description.}
\joption{<package options>} might be any set of package options described
in sec.~\ref{sub:package-options}, so this macro can actually be used to record
all metadata.
-\item \jcsmacro{LecTitleSep\{<title separator>\}}: Specify course
-title-subtitle separator (e.\,g., ``. '' or `` -- '')
+\item \jcsmacro{LecTitleSep\{<title separator>\}}: Specify a separator between course
+title and subtitle (e.\,g., ``. '' or `` -- '')
\item \jcsmacro{LecSubTitle\{<subtitle>\}}: Record course subtitle
\end{itemize}
@@ -218,10 +266,10 @@ description.}
\end{itemize}
\item \jcsmacro{LecUni\{<university>\}}: Record the name of
your university
-\item \jcsmacro{LecInstitute\{<institute>\}}: Record your institute's name
-\item \jcsmacro{LecRoom\{<room>\}}: Record the room where the course takes place
-\item \jcsmacro{LecStartDate\{<startdate>\}}: Set date of
-the first session (argument\emph{ must} have the form DD/MM/YYYY)
+\item \jcsmacro{LecInstitute\{<institute>\}}: Record your institute's/department's name
+\item \jcsmacro{LecRoom\{<room>\}}: Record the room where the course (generally) takes place
+\item \jcsmacro{LecStartDate\{<startdate>\}}: Set the date of
+the first session (the argument \emph{must} have the form DD/MM/YYYY)
\item \jcsmacro{LecInterval\{<interval>\}}: Adjust the interval (in days) between two sessions.
The preset interval is 7 (=~weekly courses).
\item \jcsmacro{SetAutoOffset\{<n>\}\{<days>\}}: Automatically shift all subsequent sessions
@@ -232,16 +280,16 @@ the first session (argument\emph{ must} have the form DD/MM/YYYY)
also be a negative integer value.
\end{itemize}
-\subsubsection{Additional information}
+\subsubsection{Additional information}\label{ses-add}
\begin{itemize}
-\item \jcsmacro{LecInstructor\{<name>\}}: Record the instructor's name
+\item \jcsmacro{LecInstructor\{<name>\}}: Record the (general) instructor's name
\item \jcsmacro{SetOfficeHours\{<office hours>\}}: Record date of your office hours
-\item \jcsmacro{SetOfficeNumber\{<office number>\}}: Record your office number
+\item \jcsmacro{SetOfficeNumber\{<office number>\}}: Record your office (room) number
\item \jcsmacro{SetPlatform\{<platform information>\}}: Record information
(such as URL) of the e-learning platform
\end{itemize}
-\section{Setting up a course schedule\label{sec:lecplan}}
+\section{Setting up a course schedule}\label{sec:lecplan}
In the metadata file, you can set up a schedule for the course by entering
session information in chronological order. This is done via the following
@@ -250,7 +298,7 @@ macro:
\item \jcsmacro{NewSession[<options>]\{Session title\}}
-Valid \joption{<options>}:
+Valid \joption{<options>} include:
\begin{itemize}
\item \joption{titlesep=<separator>}: Separator between session title and
subtitle
@@ -260,6 +308,7 @@ Valid \joption{<options>}:
\item \joption{instructor=<name>}: Specific instructor for this session
(if it differs from the usual course instructor)
\item \joption{presstudents=<names>}: Students presenting in this session
+ (used for student presentation lists, see below sec.~\ref{sec:preslists})
\item \joption{room=<room>}: Specific room for this session (if it differs
from the usual course room)
\item \joption{bibsec=<keyword>}: Session keyword for the bibliography
@@ -299,7 +348,7 @@ an optional argument \joption{<span>}, the macro will expand to
\textbf{(<span>: Break)}
\par\end{center}
-E.\,g., \jcsmacro{SetBreak[28.05.-{}-3.06.]\{Whitsun holidays\}}
+So for instance, \jcsmacro{SetBreak[28.05.-{}-3.06.]\{Whitsun holidays\}}
expands to
@@ -331,8 +380,8 @@ Possible \jmacro{<options>} are:
the beamer program at this position (more precisely, start a new frame).
This also increments the frame counter which is used for subsequent program
frame titles. Note that you can insert maximally 3 breaks.
-\item \jcsmacro{SetBeamerHook\{<code>\}}: Add arbitrary \LaTeX{}
-code to the beamer program
+\item \jcsmacro{SetBeamerHook\{<code>\}}: Add arbitrary LaTeX code to the
+beamer program
\item \jcsmacro{begin\{SessionBlock\}\{<Block title>\}}\\
\ldots{} \\
\jcsmacro{end\{SessionBlock\}}:\\
@@ -369,20 +418,20 @@ of the course title
\item \jcsmacro{lecsemshort}: Outputs the short version of
the term type (e.\,g., ``WS'')
\item \jcsmacro{lecsemverb}: Outputs the verbose version
-of the term type (e.\,g., ``Wintersemester'')
+of the term type (such as ``Winter\-semester'')
\item \jcsmacro{lecyear}: Outputs the year
\item \jcsmacro{lecsemester}: Outputs the short version of
the semester (e.\,g., ``WS 2014'')
\item \jcsmacro{lecsemesterverb}: Outputs the verbose version
-of the semester (e.\,g., ``Wintersemester 2014'')
+of the semester (such as ``Winter\-semester 2014'')
\item \jcsmacro{lecuniversity}: Outputs the university's name
-\item \jcsmacro{lecinstitute}: Outputs the institute's name
-\item \jcsmacro{lecinstructor}: Outputs the instructor's name
-\item \jcsmacro{lecroom}: Outputs the course room
+\item \jcsmacro{lecinstitute}: Outputs the institute's/department's name
+\item \jcsmacro{lecinstructor}: Outputs the (general) instructor's name
+\item \jcsmacro{lecroom}: Outputs the (general) course room
\item \jcsmacro{lecplatform}: Outputs information on the
e-learning platform
\item \jcsmacro{officehours}: Outputs the office hours
-\item \jcsmacro{officenumber}: Outputs the office number
+\item \jcsmacro{officenumber}: Outputs the office (room) number
\end{itemize}
\subsection{Generating course programs}
@@ -404,7 +453,7 @@ e-learning platform
The \jmacro{labeling} environment is defined by the KOMA classes.
-The package provides a fallback, however, if another class is used.
+The package provides a fallback, however, if a different class is used.
\item \jcsmacro{makebeamerprogram[<options>]}: Generates
a beamer-suited lecture program from the metadata in the form
@@ -428,7 +477,7 @@ a beamer-suited lecture program from the metadata in the form
\joption{<options>} can be one of
\begin{itemize}
\item \joption{title=<title>}: Program title (<Heading>)
-\item \joption{options=<bfoptions>}: Beamer frame options. Note that yey-value
+\item \joption{options=<bfoptions>}: Beamer frame options. Note that key-value
beamer frame options need to be embraced, as in\\
\jcsmacro{makebeamerprogram[options=\{shrink=10\}]}
\end{itemize}
@@ -464,7 +513,60 @@ So if you specify your session with a keyword via the \joption{bibsec}
option, and tag your Bib\TeX{} database entries with that keyword,
you will get a list of session-specific literature.
-\clearpage
+
+\subsection{Generating student presentation lists}\label{sec:preslists}
+
+The package provides macros to produce a list with the name of the students presenting
+stuff, or generally being particularly involved, in specific sessions.
+
+The names of the presenting students are assigned in the metadata to specific sessions
+by means of the \joption{presstudents} option of the \jcsmacro{NewSession} command
+(see above sec.~\ref{ses-add}). The macro
+
+\begin{quote}
+\jcsmacro{makepreslist}
+\end{quote}
+outputs a list that consists of the session dates and titles as well as the names of the
+presenting students, i.\,e., it expands to code in the form:
+
+\begin{lstlisting}[language={[LaTeX]TeX},basicstyle={\small\ttfamily},frame=single]
+\begin{labeling}{\lecprogramlistindent}
+\item[<short date>] <session full title>\par
+ <presenting students>
+...
+\end{labeling}
+\end{lstlisting}
+If no presenting students have been assigned to a given session,
+an em-dash (---) is output instead.
+
+A starred version of the macro outputs a ``blank'' presentation list that just consists of
+the session dates and titles with enough space to fill in student names manually.
+This version might be useful to schedule the presentations of your students in the first
+session:
+
+\begin{quote}
+\jcsmacro{makepreslist*}
+\end{quote}
+For beamer presentations, finally, a specific macro
+
+\begin{quote}
+\jcsmacro{makebeamerpreslist}
+\end{quote}
+is provided (with no starred version). The main difference is the more compact design that makes
+the list fit better on a slide.
+
+If you want to start your presentation list only from a given session number (e.\,g., since you
+do not have any presentations in the first session of the course), you can use
+
+\begin{quote}
+\jcsmacro{setfirstpressession\{<session number>\}}
+\end{quote}
+to set the first session number to be printed on the list. Likewise,
+\begin{quote}
+\jcsmacro{setlastpressession\{<session number>\}}
+\end{quote}
+can be used to determine the last session number to be printed on the list.
+
\section{Retrieving session-specific information\label{sec:session-specific-info}}
@@ -582,8 +684,6 @@ package. By default, the two formats are defined as follows:
\newcommand*\lecdateshortformat{%
\THEDAY.\,\twodigit{\THEMONTH}.}
\end{lstlisting}
-
-
Use \jfcsmacro{renewcommand*} to redefine them.
@@ -596,25 +696,18 @@ following macro
\begin{lstlisting}[language={[LaTeX]TeX},basicstyle={\small\ttfamily},frame=single]
\newcommand*\leccancel{\ -- keine \lectypesession}
\end{lstlisting}
-
-
The default program string used in beamer frames can be changed by
redefining
\begin{lstlisting}[language={[LaTeX]TeX},basicstyle={\small\ttfamily},frame=single]
\newcommand*\lecprogram{Programm}
\end{lstlisting}
-
-
The indentation used in program lists can be changed by redefining
\begin{lstlisting}[language={[LaTeX]TeX},basicstyle={\small\ttfamily},frame=single]
\newcommand*\lecprogramlistindent{\textbf{88.\,88.}}
\end{lstlisting}
-
-
-Again, use \jfcsmacro{renewcommand{*}} to redefine
-those.
+Again, use \jfcsmacro{renewcommand{*}} for the redefinitions.
\subsection{Using styles}\label{sec:styles}
@@ -640,10 +733,242 @@ If you provide me with other style files, in particular
translations to other languages than German (but also other university conventions), I consider
them for inclusion to the package.
+\clearpage
+
+\part{Companion packages}
+
+\section{The \jsmt\ package}
+
+This section of the manual describes the user interface of the \jsmt\
+package. Please also refer to the example files included in the bundle.
+
+\subsection{Aim of this package}
+
+This package provides a way to easily generate tables to track the members of a
+university course (a table where you, or your students, can fill in names,
+student IDs and e-mail adresses) and a table to record their presence,
+should this be a requisite at your institute.
-\section{History}
+The package somewhat integrates with \jslp\ and can use the
+metadata and styles of that package where necessary (see part~I of this
+manual for details on metadata and styles).
+Since the package was written for my own needs, the table design might not fit yours.
+However, with some basic LaTeX knowledge, it should not be too hard to adapt it.
+Like for \jslp, the default strings are German.
+However, it is possible to customize and translate them.
+This is described later in this manual.
+
+
+\subsection{Requirements of \jsmt}\label{sec:req-jsmt}
+
+The following packages are required and loaded by \jsmt:
\begin{itemize}
+ \setlength\itemsep{2pt}
+ \item \textsf{datatool} (only if the option \joption{datafile} is used)
+ \item \textsf{ifthen}
+ \item \textsf{calc}
+ \item \textsf{longtable}
+ \item \textsf{hhline}
+ \item \textsf{xkeyval}
+\end{itemize}
+\jsmt\ can be used independently of
+\jslp\ to some degree. The latter package is only required for specific
+features (see below) and must be loaded explicitly in that case.
+
+\subsection{Loading the package}
+
+The package is loaded as usual:
+\begin{quote}
+\jcsmacro{usepackage[<options>]\{jsmembertable\}}
+\end{quote}
+Currently, one package option is available:
+\begin{itemize}
+ \item \joption{datafile=<csv-file>}: Use external student data file (see sec.~\ref{sec:ext-data}).
+\end{itemize}
+
+
+\subsection{Loading external data}\label{sec:ext-data}
+
+Both course member and presence tables can be filled with external student data. To this end,
+the package option \joption{datafile=<csv-file>} is provided. If it is used, the package tries
+to access a comma-separated data file. Note that the external file must have the extension \emph{.csv},
+and the extension must be omitted in the option, so
+\begin{quote}
+ \jcsmacro{usepackage[datafile=mystudents]\{jsmembertable\}}
+\end{quote}
+loads the file \texttt{mystudents.csv}.
+
+The external csv file must follow the following structure:
+
+\begin{lstlisting}[language={},basicstyle={\small\ttfamily},frame=single]
+Prename1, Surname1, StudentID1, Email1
+Prename2, Surname2, StudentID2, Email2
+...
+\end{lstlisting}
+
+\subsection{Generating a course member table}
+
+In order to generate a course member table, simply insert
+
+\begin{quote}
+\jcsmacro{makemembertable\{<number of blank rows>\}}
+\end{quote}
+If an external data file has been loaded, \joption{<number of blank rows>} can either be empty or a positive
+integer value. If no external data file has been loaded, \joption{<number of blank rows>} \emph{must} be a
+positive integer value.
+
+If no external data file has been loaded, the command generates a table with \joption{<number of blank rows>}
+blank rows, to which your students can fill in their name, student ID and e-mail address.
+
+If an external data file has been loaded, an appropriate number of rows is generated and the
+respective student data is filled in. Additionally, \joption{<number of blank rows>} blank rows are
+\emph{appended} after the filled-in rows (for the late birds that have not registered themselves yet).
+If the command's argument is empty or \joption{0}, no extra rows are appended.
+
+The number of columns of the member table is always 3, tracking \emph{student id},
+\emph{name} and \emph{e-mail address}.
+If you want to have more or less columns, you need to redefine the
+\jcsmacro{makemembertable} command.
+The header strings, though, can easily be changed by redefining the following three
+macros (using \jfcsmacro{renewcommand*}), for instance like this:
+
+\begin{lstlisting}[language={[LaTeX]TeX},basicstyle={\small\ttfamily},frame=single]
+% Student Name
+\renewcommand*\jsmnameheader{\textbf{Student name}}
+% Student ID
+\renewcommand*\jsmidheader{\textbf{Student ID}}
+% Email
+\renewcommand*\jsemailheader{\textbf{Email address}}
+\end{lstlisting}
+If you use the \jslp\ package, you can use the \jslp\
+style files in order to store those redefinitions globally.
+See the \texttt{german-default.lps} style file for a model.\footnote{%
+Note that within styles, you must use \jfcsmacro{newcommand*} instead of
+\jfcsmacro{renewcommand*}, since the styles are loaded before the \jsmt\ package.}
+Of course, you need to load \jslp\ with the respective \joption{style} option then
+(\emph{before} \jsmt).
+See above section~\ref{sec:styles} for details on styles.
+
+\subsection{Generating a presence table}
+
+Presence tables consist of rows with your students' names and columns for each session
+of your course where each student can sign and mark her/his presence in the respective
+session. As with the member tables, the package can fill in student data (the student
+name in this case) from an external data file if the \joption{datafile} package option
+is used.
+
+The package provides two kinds of presence tables: A presence table with real session dates
+and a simpler one just with session numbers (``Session~1'' etc.). The first variant requires
+the \jslp\ package, since it uses the course metadata in order to generate a matching number
+of columns with the respective session date in the column headers. The second one also works
+without \jslp\, since the session numbers can be simply derived from an internal counter and
+you can manually set the total number of sessions.
+
+Note that if you use \jslp, you must load the \jslp\ package and also input the metadata file
+\emph{before} \jsmt.
+
+The first presence table variant (with real session dates) is produced with the following macro:
+
+\begin{quote}
+\jcsmacro{makeprestable\{<number of blank rows>\}}
+\end{quote}
+As with the member table, an appropriate number of rows, pre-filled with student data, is
+generated if an external data file has been loaded. Then, \joption{<number of blank rows>}
+blank rows are \emph{appended} after the filled-in rows (if \joption{<number of blank rows>}
+is not empty or \joption{0}). If no external data file has been loaded, simply a table with
+\joption{<number of blank rows>} blank rows is constructed.
+
+The number of columns/sessions is automatically calculated from the metadata. If you want a different
+number, you can use the optional argument of the command to override this calculation:
+
+\begin{quote}
+\jcsmacro{makeprestable[<number of sessions>]\{<number of blank rows>\}}
+\end{quote}
+The second kind of presence table (with session numbers instead of session dates) is provided
+via the starred version of the command:
+
+\begin{quote}
+\jcsmacro{makeprestable*[<number of sessions>]\{<number of blank rows>\}}
+\end{quote}
+Like with the unstarred version, if the \jslp\
+metadata is used/available, the number of columns/sessions is calculated from the metadata.
+Again, the optional argument can be used to override this calculation.
+If the \jslp\ metadata is not used/available, and no session number is given via the optional
+argument, the table will use a preset number of sessions, namely 15. The starred version uses,
+like the unstarred variant, the external student data if the \joption{datafile} option has been
+used.
+
+For courses of 2--16 sessions, the package tries to produce reasonably sized tables that
+fit the page width (more than 16 sessions are currently not supported).
+From 7 sessions upwards, two separate tables, each for half a term,
+are produced. In general, it is assumed that you use landscape page format for presence tables.
+The tables will be too wide for portrait page format. Also, the tables have been optimized for A4
+page size.
+
+The header strings of the presence tables can be adjusted by redefining the following
+macros (using \jfcsmacro{renewcommand*}), for instance like this:
+
+\begin{lstlisting}[language={[LaTeX]TeX},basicstyle={\small\ttfamily},frame=single]
+% Student Name
+\renewcommand*\jsmnameheader{\textbf{Student name}}
+% "Session" string for the starred macro version
+\renewcommand*\jsmsession{Session}}
+% Session header for the starred macro version
+% (\thesession outputs the counter value)
+\renewcommand*\jsmsessionheader{\textbf{\jsmsession\ \thesession}}
+% The advice for students to sign
+\renewcommand*\jssigheader{Students' signature}
+\end{lstlisting}
+Again, if you use \jslp, you can use the \jslp\
+style files in order to store those redefinitions globally.
+See the \texttt{german-default.lps} style file for a model.\footnote{%
+Note that within styles, you must use \jfcsmacro{newcommand*} instead of
+\jfcsmacro{renewcommand*}, since the styles are loaded before the \jsmt\ package.}
+Of course, you need to load \jslp\ with the respective \joption{style} option then
+(\emph{before} \jsmt).
+See above section~\ref{sec:styles} for details on styles.
+
+Note, furthermore, that the ``Session'' string (value of \jcsmacro{jsmsession}) is by default
+linked to \jslp's \jcsmacro{lectypesession} value if
+\jslp\ is loaded before \jsmt. So if \jcsmacro{lectypesession} fits, you do not have to redefine
+\jcsmacro{jsmsession}.
+
+
+\clearpage
+
+\appendix
+
+\part{Appendix}
+
+\section{Acknowledgements}
+
+I could not have written the packages of the \jslp\ bundle without the expertise of the incredible \LaTeX\
+community. The packages heavily rely on functions and features
+provided by other packages (which are listed in sec.~\ref{sec:req-jslp} and \ref{sec:req-jsmt}).
+I am deeply indepted to the authors of those packages.
+Furthermore, \emph{stackexchange} proved to be a great source of knowledge which
+provided me with solutions for specific tasks:
+\jsmt\ heavily draws on code for dynamic table generation that has been
+provided by Herbert Voss (\url{http://tex.stackexchange.com/a/7594}); \jslp\ and \jsmt\
+use code to test for \jfcsmacro{romannumeral} arguments which has been taken from
+a \emph{stackexchange} post by Enrico Gregorio (\url{http://tex.stackexchange.com/a/50131}).
+Thank you, Herbert and Enrico! Finally, Dominik Waßenhoven tested the package and provided
+me with multiple suggestions, which effectively manifested in major new features such as
+the \jslp\ style files. Thanks, Dominik.
+
+\section{Release History}
+
+\begin{itemize}
+\item 2015/07/15 (v. 1.1):
+ \begin{itemize}
+ \item Include and document the \jsmt\ package.
+ \item Add support for student presentation lists. This introduces the new macros
+ \jcsmacro{makepreslist}, \jcsmacro{makepreslist*},
+ \jcsmacro{makebeamerpreslist}, \jcsmacro{setfirstpressession} and
+ \jcsmacro{setlastpressession}.
+ \item Major revision of the manual.
+ \end{itemize}
\item 2015/07/07 (v. 1.0.2):
\begin{itemize}
\item Permit \jcsmacro{LecType} and \jcsmacro{LecYear} in the document body again
@@ -658,25 +983,25 @@ them for inclusion to the package.
\begin{itemize}
\item Lecture types and term types are not hardcoded anymore and can be freely
modified and extended via \jcsmacro{DefLecType} and \jcsmacro{DefSemType}.
- \item Add option to add the instructor's name to both the course (via
+ \item Add option to add the instructor's name to both the course (via macro
\jcsmacro{LecInstructor} or \joption{instructor} package option) and
to specific sessions (via \joption{instructor} option of
\jcsmacro{NewSession}).
- \item Add option to add names of presenting students to a session (via
- \joption{presstudents} option).
+ \item Add option to add names of presenting students to a session (via option
+ \joption{presstudents}).
\item Add option to record the office number (\jcsmacro{SetOfficeNumber}
or package option \joption{officenumber}).
\item Fix expansion issue in \joption{options} option of \jcsmacro{makebeamerprogram}.
\item Add option to automatically shift all subsequent sessions by a certain value
after every \emph{n}th session (\jcsmacro{SetAutoOffset}).
- \item Add \joption{cologne} style file.
+ \item Add \joption{cologne} style file (suggested by Dominik Waßenhoven).
\end{itemize}
\item 2015/02/08 (v. 0.9):
\begin{itemize}
\item Add a way to adjust the interval between two sessions
(\joption{interval} package option and \jcsmacro{LecInterval} macro).
\item Add a way to shift session dates from the regular interval
- (macro \jcsmacro{SetLecOffset}).
+ (by means of macro \jcsmacro{SetLecOffset}).
\item Add option and macro to set a room for the course as well as
a session-specific room.
\item Rename option \joption{weeks} of the \jcsmacro{SetBreaks} macro
@@ -695,9 +1020,9 @@ them for inclusion to the package.
\item 2015/01/04 (v.\,0.7):
\begin{itemize}
\item Add macro for resetting \jfcsmacro{today}.
- \item Minor corrections in the manual.
+ \item Minor corrections of the manual.
\end{itemize}
-\item 2014/12/12 (v.\,0.6\,b): Minor corrections in the manual and example files.
+\item 2014/12/12 (v.\,0.6\,b): Minor corrections of the manual and example files.
\item 2014/12/12 (v.\,0.6): Initial release to CTAN.
\end{itemize}