% Patch cnltx-doc class \AddToHook{class/scrartcl/after}{ \NewCommandCopy{\originalAfterPackage}{\AfterPackage} \RenewDocumentCommand{\AfterPackage}{t! m m}{ \IfBooleanTF{#1}{#3}{% \originalAfterPackage{#2}{#3} } } } \makeatother \typeout{*** Patch cnltx-doc} \documentclass[ babel-options={ngerman}, load-preamble-, scrartcl={headings=small} ]{cnltx-doc} \usepackage[oldstyle]{libertine} \usepackage[scaled=.81]{DejaVuSansMono} \usepackage{microtype} \usepackage{enumitem} % Since the cnltx class doesn't do examples with lualatex, % we can't include our package. % Thus, we use readprov to get file information. \usepackage{readprov} \ReadFileInfos{seatingchart.sty} \providecommand{\packagename}{seatingchart} \def\thepkg{\pkg*{\packagename}} \setcnltx{ name = seatingchart, package = \packagename, version = \UseVersionOf{\packagename.sty}, date = \UseDateOf{\packagename.sty}, title = Das \thepkg-Paket, info = Erstellung von Sitzplänen, authors = {Matthias Werner[matthias.werner@informatik.tu-chemnitz.de]}, abstract = {Das Paket ermöglicht es, Sitzpläne, wie sie z. B. für Prüfungen benötigt werden, einfach zu erstellen. Eine Reihe verschiedener automatischer Platzierungsschemata sind vordefiniert, aber man kann auch feingranular eigene Platzierungen vornehmen. Während das Paket zunächst für den internen Gebrauch an der TU Chemnitz gedacht war und für (einige) der Räume der TU~Chemnitz vordefinierte Sitzlayouts enthält, sind jedoch einerseits sowohl die Raumdaten leicht erweiter- oder ersetzbar, andererseits können Räume auch ad hoc erstellt werden.}, url =https://github.com/tuc-osg/seatingchart, build-title } \begin{document} \section{Einführung} Für die Durchführung von Prüfungen benötigen wir mitunter Sitzpläne. So haben sich über die einige mit Pläne in Form von TikZ-unterstützten \LaTeX-Dateien angesammelt. Je nach Anzahl der Studierenden in einer Prüfung (und für wie groß wir die Gefahr eines Betrugsversuches bewerten) nutzen wir unterschiedliche Platzierungsschemata, so dass wir die Dateien in anpassen müssen. Außerdem wird uns von Zeit zu Zeit ein neuer Raum zugewiesen, für den wir noch keine Pläne haben. Dies war die Motivation zur Erschaffung des \thepkg-Pakets. Es \ldots \begin{itemize}[itemsep=0pt] \item ermöglicht eine schnelle und einfach Erstellung von Sitzplänen; \item trennt das Sitzlayout und das Platzierungsschema voneinander; \item bietet eine Reihe von Standardschemata für die Platzierung an; \item enthält bereits eine Anzahl vordefinierter Räume mit Layouts der Sitze; \item erlaubt eine \emph{Ad-hoc}-Erstellung neuer Räume und Platzierungsschemata. \end{itemize} \section{Abhängigkeiten} Das \thepkg-Paket arbeitet nur mit Lua\LaTeX\ und benötigt eine hinreichend moderne \LaTeX-Version, mindestens vom Juli 2022. Es lädt folgende Pakete: \begin{itemize}[nosep] \item \pkg{etoolbox} \item \pkg{luacode} \item \pkg{tikz} \end{itemize} Diese Pakete sind in allen gängigen \TeX-Distributionen vorhanden und haben wiederum andere Pakete als Abhängigkeit. Insbesondere wird durch \pkg*{tikz} das Paket \pkg{xcolor} geladen, dessen Farbdefinition auch in \thepkg\ verwendet werden. \section{Sitzlayout} \label{sec:layout} Das Paket wird wie üblich mit % %\centerline{ \cs{usepackage}\oarg{optionen}\{\thepkg\} %} geladen. Dabei kann bereits weitgehend das Layout der Sitze festgelegt werden, also die Darstellung der Sitze im Raum. Die Zuweisung der Sitzbelegung erfogt später, siehe Abschnitt~\ref{sec:seat-assignment}. \subsection{Klassenoptionen} \label{sec:class-options} Durch die Nutzung bzw. Nichtnutzung der Option \option{room} werden zwei grundsätzliche Anwendungsfälle unterschieden: \begin{options} \keyval-{room}{Raum}\Default{} Diesen Optionsschlüssel sollte man nutzen, wenn der gewünschte Raum ist bereits in der Datenbank von \thepkg\ vorhanden ist. \keyval{layout}{Institution}\Default{tu-chemnitz} Die Daten für die vordefinierten Räume werden aus der Datei \code{seatingchart-}\meta{Institution}\code{.sc} gelesen. Dieser Schlüssel kann genutzt werden, wenn eigene vordefinierte Räume deklariert wurden, siehe Abschnitt~\ref{sec:new-rooms}. \end{options} Falls der Raum noch nicht bekannt ist, werden einige Schlüssel-Wert-Paar zur Beschreibung des Raumslayout gebraucht. \begin{options} \keychoice{shape}{rectangle,arc}\Default{rectangle} Hier wird beschrieben, ob das Layout der Sitze rechteckig (\choices{rectangle}) oder bogenförmig (\choices{arc})\footnote{Z.\,B.\ an der TU~Chemnitz der Raum A10.316.} ist. \keyval-{rows}{Anzahl der Sitzreihen}\Default*!{}\vspace{-.3\baselineskip} \keyval-{seats per row}{Sitze pro Sitzreihe}\Default!{} Besimmt Anzahl der Sitzreihen und Sitze pro Reihe. Dabei muss immer von der jeweils maximalen Anzahl ausgegangen werden. Für unvollständige Reihen werden später Sitze entfernt, aber es können keine Sitze mehr zugefügt werden, die außerhalb des einmal festgelegten Layoutrahmens liegen. \textbf{Achtung:} Auch Gänge zwischen Blöcken von Sitzen müssen hier als Sitze mitgezählt werden. \end{options} Wenn Sie bei den Klassenoptionen \textbf{sowohl} den Schlüssel \option*{room}, \textbf{als auch} eine der Schlüssel \option*{rows} oder \option*{seats per row} angeben, ist das Ergebnis unbestimmt. Entsprechend wird eine Warnung ausgegeben.\medskip Alle weiteren Klassenoptionen legen die Darstellung des Raumlayouts fest. Sie können auch später mit \cs{scConfig} gesetzt werden, vgl.\ Abschnitt~\ref{sec:late-options}. \begin{options} \keybool{blackboard}\Default{false} Zeichnet eine Tafel ein. \keyval-{seat distance}{Abstand}\Default{2pt} Abstand der Sitze zueinander. Damit wird auch der Reihenabstand bestimmt. Möchte man beides unterschiedlich haben, so muss man die beiden folgenden Schlüssel nutzen: \keyval-{seat neighbor distance}{Abstand}\Default*{2pt}\vspace{-.3\baselineskip} \keyval-{row distance}{Abstand}\Default{2pt} \keychoice{rownumbers}{none,left,right,both}\Default{none} Legt beim Rechteck-Layout fest, ob links und oder rechts der Reihen die Nummer der Sitzreihe angegeben wird. Dabei wird von vorn (Tafel) gezählt.\newline \emph{Anmerkung:} Für das bogenförmige Layout ist diese Funktion derzeit nicht implementiert. \keyval-{rownumber distance}{Abstand}\Default{2pt} Abstand der Reihennummern zu den äußeren Sitzen, wenn \option*{rownumbers} nicht \code{none} ist. \keyval-{empty seat background color}{Farbe}\Default*{lightgray!20}\vspace{-.3\baselineskip} \keyval-{empty seat border color}{Farbe}\Default*{lightgray}\vspace{-.3\baselineskip} \keyval-{assigned seat background color}{Farbe}\Default*{lightgray!30}\vspace{-.3\baselineskip} \keyval-{assigned seat border color}{Farbe}\Default{black} Legt die Farben für den Hintergrund und die Umrandung von leeren bzw.\ durch ein Sitzschema belegten Sitzen fest. Falls die Sitze nicht farblich unterschieden werden sollen, können auch die Schlüssel \keyval-{seat background color}{Farbe}\Default*\vspace{-.3\baselineskip} \keyval-{seat border color}{Farbe}\Default verwendet werden. \keyval{assigned seat label font}{Fontbefehl}\Default*{\cs*{small}}\vspace{-.3\baselineskip} \keyval-{assigned seat label color}{Farbe}\Default{black} Setzt die Größe und Farbe der Sitzbeschriftung. \end{options} \subsection{Späte Optionswahl} \label{sec:late-options} \begin{commands} \command{scConfig} Mit diesem Kommando können außer \option{room}, \option{shape}, \option{rows} und \option{seats per row} alle im Abschnitt~\ref{sec:class-options} genannten Schlüssel auch außerhalb von \cs*{documentclass}-Optionen gesetzt werden. \end{commands} \subsection{Modifikation des Sitzlayouts} \label{sec:modify-layout} Häufig ist sind nicht in jeder Reihe alle Sitze vorhanden. Bei Angabe eine Raums ist dies bereits berücksichtigt, aber auch hier kann es vorkommen, dass beispielsweise ein Klappsitz defekt ist und aus dem Layout genommen werden muss. Beim Erstellen eines eigenen Layouts ist die Modifikation die Regel. Dafür stellt \pkg\ folgende Kommandos zur Verfügung \begin{commands} \command{scRemoveSeatAt}[\marg{Reihe}\marg{Sitznummer}] Entfernt den Sitz \meta{Sitznummer} in der Reihe \meta{Reihe} aus dem Layout. Dabei beziehen sich \meta{Reihe} und \meta{Sitznummer} auf das vollständige Layout, ändern sich also nicht durch bereits entfernte Sitze. Wenn die \meta{Sitznummer} negativ ist, wird von rechts aus gezählt \command{scRemoveSeats}[\marg{Liste}] Entfernt alle in der Liste vorkommenden Sitze aus dem Layout. Die Liste enthält dabei kommaseparierte Einträge der Form \code{\{\meta{Reihe},\meta{Sitznummer}\}}. Für \meta{Reihe} und \meta{Sitznummer} gilt wie bei \cs*{scRemoveSeatAt} das urspüngliche Layout. Im folgenden Beispiel werden die ersten drei Sitze links und der erste Sitz rechts in der ersten Reihe entfernt: \begin{example}[code-only] \scRemoveSeats{{1,1},{1,2},{1,3}{1,-1}} \end{example}\vspace{-1.3\baselineskip} \command{scSetAisle}[\Oarg{\meta{Startreihe}-\meta{Endreihe}}\marg{Sitznummer}] %\Default{\meta{erste Reihe}-\meta{letzte Reihe}} An der Stelle von \meta{Sitznummer} wird durch alle Reihen ein Gang eingefügt. Nutzen Sie das optionale Argument, wenn der Gang nicht alle Reihen erfassen soll (Stichgang). Für horizontale Gänge (die also einen Sitzblock in einen vorderen und hinteren Teil zerlegen, anstatt einen rechten und einen linke) nutzen Sie bitte \cs*{scRemoveSeats}. Das ist im Prinzip auch bei vertikalen Gängen möglich, jedoch können bei der automatischen Sitzschemazuweisung mit \cs*{scSetAisle} erzeugte Gänge anders als die mit \cs*{scRemoveSeats} erzeugten Gänge behandelt werden. \end{commands} \subsection{Ausgabe} \label{sec:drawing} \begin{commands} \command{scDrawSeating}[\Oarg{seat width=\meta{Breite}, seat height=\meta{Höhe}}] Gibt den Sitzplan aus. Dabei versucht \thepkg, die Ausmaße der Sitz so zu berechnen, dass der zur Verfügung stehenden Platz des Gesamtplans vollständig ausgenutzt wird. Da damit nicht immer alle Bedürfnisse getroffen werden, können in der über das optionale Argument die Breite und Höhe der Sitze auf dem Sitzplan einzeln eingestellt werden. \end{commands} Das folgende Beispiel zeigt den Code und das Ergebnis für ein einfaches Sitzplanlayout mit einem Mittelgang und zwei fehlenden Sitzen in der ersten Reihe. \begin{example}[compile,program=lualatex,pages=1,add-frame,code-sep=\bigskip,graphics={scale=.25}] \documentclass{article} \usepackage[shape=rectangle, rows = 9, seats per row=15]{seatingchart} \begin{document} \scSetAisle{8} \scRemoveSeats{{1,1},{1,2}} \scDrawSeating \end{document} \end{example} \section{Sitzplatzbelegung} \label{sec:seat-assignment} \subsection{Parameter zur Konstruktion von Belegungsschemata} \label{sec:constr-scheme} Natürlich ist ein Sitzplan ohne die Markierung von belegten Plätzen nur bedingt nützlich. Die Belegung wird in \thepkg\ mit Sitzplatzschemata realisiert. Zur Erzeugung eines Sitzschemas gibt es den Befehl \begin{commands} \command{scSeatingScheme}[\oarg{Schlüsselliste}\marg{Name}] \vspace{-1.3\baselineskip} \command{scSeatingScheme}[\sarg\oarg{Schlüsselliste}\marg{Schema}] Das Pflichtargument enthält in der Standardvariante des Befehls eine Bezeichnung für ein vorgegebenes Sitzschema, siehe Abschnitt~\ref{sec:defined-schemes}. In der Sternvariante wird hier eine Zeichenkette von "`\code{X}"' und "`\code{-}"' übergeben, die (den Anfang) eines Sitzschemas für eine einzelne Reihe beschreibt, wobei "`\code{X}"' für einen belegten und "`\code{-}"' für einen leeren Platz steht. Ist die Zeichenkette kürzer als die Anzahl der Sitze in der Reihe, wird sie wiederholt angewendet. Reihe mehr Plätze als Beispielsweise wird mit \begin{example}[code-only] \scSeatingScheme*{X--} \end{example}\vspace{-1.3\baselineskip} jeder dritte Sitz belegt. Im optionalen Argument kann wieder eine Liste von Schlüssel-Wert-Paaren übergeben werden, die die restlichen Einstellung für das Sitzschema steuern. Es ist insbesondere in der Sternvariante wichtig, kann aber auch in der Standardvariante genutzt werden. werden: \begin{options} \keyval-{row sep}{Anzahl}\Default{2} Legt fest, in jeder wievielten Reihe Sitze belegt werden. \keyval-{start row}{Nummer}\Default*{1}\vspace{-.3\baselineskip} \keyval-{end row}{Nummer}\Default{\meta{Anzahl Reihen}} Durch diese beiden Schlüssel wird gesteuert, in welchen Reihen ein Schema angewendet wird. Dadurch können unterschiedliche Schemata für verschiedene Reihen genutzt werden. \keyval-{row restart after}{Anzahl}\Default Das Sitzschema wird nach \meta{Anzahl} Reihen zurückgesetzt. Damit wird es möglich, alternanierende Reihenabstände zu erzielen, vergleiche Beispiel in Abschnitt~\ref{sec:ex:own1}. \keyval-{aisle counts}{Anzahl}\Default{1} Legt fest, wie viele Sitze ein Gang zählt. Dadurch kann berücksichtigt werden, dass ein Gang häufig breiter als ein Sitzplatz ist. \keybool{aisle restarts scheme}\Default{false} Startet das Schema nach einem Gang erneut. Der Schlüssel \option*{aisle counts} wird damit wirkungslos. \keybool{ignore aisle}\Default*{false}\vspace{-.3\baselineskip} \keybool{ignore removed seats}\Default{false} Bei der Zählung von Sitzen, die im Platzlabel genutzt werden kann (vgl.\ Abschnitt~\ref{sec:seat-label}) werden auch entfernte Sitze und Gänge mitgezählt. Dies ist sinnvoll, damit in Reihen (im Rechteck-Grundlayout) sich gleiche Sitznummern hintereinander befinden. Wird einer der Schlüssel gesetzt, werden entfernte Sitze bzw. Gänge nicht mitgezählt. Dies bietet sich insbesondere im Bogen-Grundlayout an. \keyval{assigned seat label}{Formatzeichenkette}\Default{m\{\{\string\,\}\}D} Über diesen Schlüssel kann festgelegt werden, wie die belegten Sitze beschriftet werden. Voreingestellt ist die Nummer der Reihe, gefolgt von einem schmalen Leerzeichen und einem Buchstaben für den laufenden belegten Sitz (z.\,B. "`3\,c"'). Es sind hier eine Reihe anderer Möglichkeiten einstellbar. Details dazu sind im Abschnitt~\ref{sec:seat-label} beschrieben. \end{options} \command{scConfigScheme\marg{Schlüsselliste}} Setzt die Schlüssel wie beim optionalen Argument von \cs*{scSeatingScheme}, führt aber keine Zuweisung von Sitzen aus. \end{commands} Schlüsselwerte, die durch \cs*{scSeatingScheme} oder \cs*{scConfigScheme} gesetzt werden, bleiben erhalten, bis sie explizit neu gesetzt werden. \subsection{Vordefinierte Sitzschemata} \label{sec:defined-schemes} Das \thepkg-Paket definiert eine Reihe vordefinierter Platzierungsschemata. Manche haben auch einen Alternativnamen. \begin{options} \opt{1x1} Jeder Platz ist markiert.\newline Alternativname: \option{all} \opt{2x2} Zwischen zwei belegten Plätzen ist jeweils ein Platz bzw.\ eine Reihe Abstand.\newline Alternativname: \option{simple} \opt{2x2-} Zwischen zwei belegten Plätzen ist jeweils ein freier Platz. Nach einer freien Reihe kommen \emph{zwei} Reihen mit belegten Plätzen. Dies ist das Schema, mit dem in einer Prüfung die größtmögliche Zahl an Studierenden in einem Raum untergebracht werden können, aber trotzdem ein seitlicher Minimalabstand gegeben ist und sich die Aufsicht zu jedem Studierenden kommen kann (entweder von vorn, oder von hinten). \newline Alternativname: \option{dense} \opt{2x3} Belegte Sitze haben einen seitlichen Abstand von zwei Sitzen und belegte Reihen einen Abstand von einer Leerreihe. Dies wird in unser Gruppe als das anzustrebende Standardschema für Prüfungen betrachtet.\newline Alternativname: \option{sixpack} \opt{2x3-} Die Reihen werden wie bei \option{2x2-} belegt, der seitliche Abstand innerhalb einer belegten Reihe beträgt jedoch zwei Sitze. \opt{2x4} Belegte Sitze haben einen seitlichen Abstand von drei Sitzen und belegte Reihen einen Abstand von einer Leerreihe. \opt{3x4} Belegte Sitze haben einen seitlichen Abstand von drei Sitzen und belegte Reihen einen Abstand von zwei Leerreihen. \end{options} \subsection{Sitzbeschriftung} \label{sec:seat-label} Die Beschriftung der zugewiesenen Sitzplätze kann auf unterschiedliche Weise erfolgen, die durch Zuweisung einer Formatzeichenkette an den Schlüssel \option{assigned seat label} gesteuert wird. Es stehen dafür vier Zähler zur Verfügung: \begin{itemize} \item absolute Reihe: die Nummer der Reihe im Sitzlayout \item laufende Reihe: die Nummer der \emph{belegten} Reihe. Reihen, in denen keine Sitz zugewiesen werden, werden hier übersprungen. \item absolute Sitznummer: die Nummer des Sitzes im Sitzlayout. Ob hier auch entfernte Sitze berücksichtigt werden, hängt vom Wert des Schlüssels \option*{ignore removed seats} ab. \item laufende Sitznummer: die Nummer der \emph{belegten} Sitze. Unbelegte Sitze werden bei der Zählung übersprungen. \end{itemize} Jeder dieser Zähler kann unterschiedlich formatiert werden. Dafür werden in der Formatzeichenkette verschiedene Formatierungszeichen benutzt, die in der folgenden Tabelle gelistet sind:\medskip \begin{tabular}{llccccc}\hline \textbf{\sffamily Zähler}&\textbf{\sffamily Anmerkung}&\multicolumn{5}{c}{\textbf{\sffamily Darstellung als\ldots}}\\ &&\rotatebox{90}{(arabische) Zahl}&\rotatebox{90}{Kleinbuchstabe}&\rotatebox{90}{Großbuchstabe}& \rotatebox{90}{kleine römische Zahl}&\rotatebox{90}{große römische Zahl}\\\hline absolute Reihe&\emph{bezieht sich auf das Sitzlayout}&\code{m}&\code{a}&\code{A}&\code{y}&\code{Y}\\ laufende Reihe&\emph{bezieht sich auf das Belegungsschema}&\code{r}&\code{b}&\code{B}&\code{i}&\code{I}\\ absolute Sitznummer&\emph{bezieht sich auf das Sitzlayout}&\code{n}&\code{c}&\code{C}&\code{x}&\code{X}\\ laufende Sitznummer&\emph{bezieht sich auf das Belegungsschema}&\code{s}&\code{d}&\code{D}&\code{j}&\code{J}\\\hline \end{tabular}\medskip \noindent Teile der Beschriftung, die nicht als Formatierungszeichen interpretiert werden sollen, werden in doppelte geschweifte Klammern gesetzt (\code{\{\{\meta{geschützte Zeichenkette}\}\}}). Beispielsweise erzeugt \begin{example}[code-only] \scSeatingScheme[assigned seat label=Y{{-}}D]{2x3} \end{example}\vspace{-1.3\baselineskip} beim vierten Sitz (von links) in der dritten Reihe die Beschriftung "`III-B"'. \subsection{Sitzplatzliste} \label{sec:seats-list} Insbesondere wenn es um den Anwendungsfall einer Prüfung geht, ist es nützlich, eine Sitzplatzliste zu erhalten, also eine tabellarische Zuordnung zwischen Prüfling und Sitzplatz. In der aktuellen Version erstellt \thepkg\ keine (\LaTeX)-Tabelle, kann aber die Tabellenerstellung (mit \LaTeX\ oder einer Tabellenkalkulation) unterstützen. \begin{commands} \command{scSeatingList}[\oarg{Eingabedatei}\marg{Ausgabedatei}]\vspace{-1.3\baselineskip} \command{scSeatingList}[\sarg\oarg{Eingabedatei}\marg{Ausgabedatei}] Erstellt eine CVS-Datei \meta{Ausgabedatei} mit den Labels der belegten Plätze, jeweils einen pro Zeile.\medskip \framebox{\parbox{\linewidth}{ \textbf{Achtung!} Die in die \meta{Ausgabedatei} geschriebenen Labeltexte werden aus den entsprechenden \LaTeX-Boxen extrahiert und nur die druckbaren Zeichen ausgegeben. Es empfiehlt sich bei Nutzung dieser Funkion daher, in der Formatzeichenkette von \option*{assigned seat label} auf zuviel \TeX-Magie zu verzichten. }}\medskip In der Sternvariante werden in jeder Zeile die absoluten Koordinaten (Reihe, Platznummer, bezogen auf das Grundlayout) kommasepariert dem Labeln vorangestellt. Wenn eine Eingabedatei angegeben wurde, wird ihr Inhalt zweilenweise den erzeugten Zeilen vorangestellt. Diese Eingabedatei könnte beispielsweise die Namen oder/und die Immatrikulationsnummern von Studierenden enthalten, die dann in der Ausgabedatei den markierten Plätzen zugeordnet werden. Sind weniger Einträge in \meta{Eingabedatei} als Sitze belegt sind, werden die Felder in der Ausgabe leer gelassen. Wenn dagegen die Anzahl der Sitze nicht ausreicht, gibt \thepkg\ eine Information aus, wer nicht platziert werden konnte. \end{commands} \section{Beispiele} \label{sec:examples} Zur Demonstration des Verhaltens von \thepkg\ sind hier einige Beispiele des Einsatzes dokumentiert. \subsection{Dichte Belegung für den Beispielraum aus Abschnitt~\ref{sec:drawing}} \label{sec:ex-simple} \begin{example}[compile,program=lualatex,pages=1,add-frame,code-sep=\bigskip,graphics={scale=.25}] \documentclass{article} \usepackage[shape=rectangle, rows = 9, seats per row=15]{seatingchart} \begin{document} \scSetAisle{8} \scRemoveSeats{{1,1},{1,2}} \scSeatingScheme{2x2-} \scDrawSeating \end{document} \end{example} \subsection{Vordefinierter Raum, rechteckig} \label{sec:ex:std-rect} \begin{example}[compile,program=lualatex,pages=1,add-frame,code-sep=\bigskip,graphics={scale=.5}] \documentclass{scrartcl} % Um das Papier gut auszunutzen, nehmen wir es Landscape-Format % und reduzieren die Ränder \usepackage[a4paper,landscape,inner=10pt,outer=10pt,top=1cm,bottom=1cm]{geometry} \usepackage[ room=C10.115, blackboard ]{seatingchart} \begin{document} % Standardtitelei nimmt viel Platz weg. \centering\textbf{\Huge\sffamily Sitzplan C10.115}\bigskip \scSeatingScheme{sixpack} \scDrawSeating \end{document} \end{example} \subsection{Vordefinierter Raum, bogenförmig} \label{sec:ex:std-arc} \begin{example}[compile,program=lualatex,pages=1,add-frame,code-sep=\bigskip,graphics={scale=.5}] \documentclass{scrartcl} % Um das Papier gut auszunutzen, nehmen wir es Landscape-Format % und reduzieren die Ränder \usepackage[a4paper,landscape,inner=10pt,outer=10pt,top=1cm,bottom=1cm]{geometry} \usepackage[ room=A10.316, blackboard, assigned seat label color=blue ]{seatingchart} \begin{document} % Standardtitelei nimmt viel Platz weg. \centering\textbf{\Huge\sffamily Sitzplan A10.316}\bigskip \scSeatingScheme[ignore removed seats]{2x2} \scDrawSeating \end{document} \end{example} \subsection{Eigenes Platzlayout und angepasstes Sitzschema} \label{sec:ex:own1} \begin{example}[compile,program=lualatex,pages=1,add-frame,code-sep=\bigskip,graphics={scale=.5}] \documentclass{scrartcl} % Um das Papier gut auszunutzen, nehmen wir es Landscape-Format % und reduzieren die Ränder \usepackage[a4paper,landscape,inner=10pt,outer=10pt,top=1cm,bottom=1cm]{geometry} \usepackage[ shape=rectangle, rows=9, seats per row=9, assigned seat background color=yellow ]{seatingchart} \begin{document} \scRemoveSeats{{1,1},{1,-1},{2,1},{2,-1},{3,1},{3,-1}} \scSeatingScheme[ignore removed seats,end row=3]{2x3} \scSeatingScheme[start row=5, end row=10]{2x4} \scDrawSeating \end{document} \end{example} \subsection{Dame} \label{sec:ex:dame} \begin{example}[compile,program=lualatex,pages=1,add-frame,code-sep=\bigskip,graphics={scale=.5}] \documentclass{scrartcl} \usepackage[a5paper,landscape,top=1cm,bottom=1cm]{geometry} \usepackage[shape=rectangle, rows=10,seats per row=10, assigned seat label color=blue, assigned seat background color=teal, empty seat background color=lime!50, seat distance=0pt]{seatingchart} \usepackage{stix} \begin{document} \centering\textbf{\Huge\sffamily Let's play Checkers}\bigskip \scConfigScheme{assigned seat label={}} \scSeatingScheme*[start row=5, end row=5]{X-} \scSeatingScheme*[start row=6, end row=6]{-X} \scConfigScheme{assigned seat label font=\Huge, assigned seat label={{{\textcolor{white}{$\circledbullet$}}}}} \scSeatingScheme*[start row=1, end row=3,row sep=2]{X-} \scSeatingScheme*[start row=2, end row=4]{-X} \scConfigScheme{assigned seat label={{{\textcolor{yellow}{$\circledbullet$}}}}} \scSeatingScheme*[start row=7, end row=9]{X-} \scSeatingScheme*[start row=8, end row=10]{-X} \scDrawSeating[seat width=1cm, seat height=1cm] \end{document} \end{example} \section{Deklaration neuer Raumlayouts} \label{sec:new-rooms} In der augenblicklichen Version hat das \thepkg-Paket erst eine relativ geringe Anzahl von Räumen der TU~Chemnitz mit ihrem Sitzlayout erfasst. Nutzer werden daher häufig darauf angewiesen sein, eigene Layouts anzulegen. Neben der Möglichkeit zur Ad-hoc-Kreation von Layouts, wie sie im Abschnitt~\ref{sec:layout} beschrieben sind, besteht auch die Möglichkeit das Paket selbst zu erweitern und damit Layouts für neue Räume anzulegen, die dann einfach über den \option{room}-Schlüssel angesprochen werden können. Dazu können eigene \code{seatingchart-*.sc}-Dateien angelegt und über die \option{layout} eingebunden werden. In einer \code{seatingchart-*.sc} können zwei Befehle genutzt werden: \begin{commands} \command{scDeclareRoom}[\marg{Raumbezeichnung}\marg{Schlüsselliste}] Ein neues Raumlayout wird für den Raum \meta{Raumbezeichnung} angelegt. Die Schlüsselliste \emph{muss} die drei Schlüssel \begin{options} \keychoice{shape}{rectangle,arc}\Default*!{}%\vspace{-.3\baselineskip} \keyval-{rows}{Anzahl der Sitzreihen}\Default*!{}%\vspace{-.3\baselineskip} und \keyval-{seats per row}{Sitze pro Sitzreihe}\Default!{} enthalten, die die analoge Bedeutung zu den gleichnamigen Schlüsseln aus Abschnitt~\ref{sec:layout} haben. Diese Angaben zum Basislayout \emph{müssen} von dem Schlüssel \opt{init}\Default! gefolgt werden. Anschließend kann mit \keyval-{aisle}{Sitznummer}\vspace{-1.3\baselineskip} \keyval{remove}{Liste} das Layout angepasst werden. Die beiden Schlüssel funktionieren analog zu \cs*{scSetAisle} und \cs*{scRemoveSeats}, vgl.\ Abschnitt~\ref{sec:modify-layout}. \end{options} \begin{example}[code-only] \scDeclareRoom{C10.115}{ shape=rectangle, rows=21, seats per row=35, init, aisle=18, remove={{1,1},{1,2},{1,3},{1,4},{1,-1},{1,-2},{1,-3},{1,-4}} } \end{example}\vspace{-1.3\baselineskip} \command{scAliasRoom}[\marg{Aliasname}\marg{Originalname}] Setzt \meta{Aliasname} als einen Ersatznamen für \meta{Originalname}. \end{commands} Wenn Sie wünschen, dass eine Layoutdatei ihrer Institution Bestandteil des Pakets auf CTAN wird, schicken Sie bitte dem Maintainer ihre Datei oder initiieren Sie einen Pull-Request auf \url{https://github.com/tuc-osg/seatingchart}. Geben Sie in diesem Fall der Datei einen aussagekräftigen und unterscheidungsfähigen Namen. Beispielsweise sollte die \emph{Lummerland Maschinenbau Universität} eher \code{seatingchart-lummerland-mu.sc} oder \code{seatingchart-lummerland-machbau-uni.sc} nutzen, als \code{seatingchart-lmu.sc}. \section{Beschränkungen und Bugs} \label{sec:bugs} Auch wenn das \thepkg-Paket zumindest in unserer Gruppe im praktischen Einsatz ist, ist es als experimentell zu betrachten. Die \code{0} in der Hauptversionsnummer deutet diesen Umstand an. Er bedeutet insbesondere, dass sich die API noch ändern kann. Das Pakte unterliegt einigen Einschränkungen. Ob diese in kommenden Versionen behoben werden, steht noch nicht fest. Das Paket ist auf die Erstellung separater Sitzpläne ausgelegt und kann daher nicht dafür genutzt werden, mehrere Sitzpläne in einem Dokument darstellen. Ebenfalls können keine Sitzlayouts mit versetzten Sitzreihen dargestellt werden. Die Anzahl der vordefinierten Räume ist derzeit noch eher gering. Es besteht die Absicht, in künftigen Patches weitere Räume der TU~Chemnitz aufzunehmen. Layoutdateien von anderen Institutionen sind willkommen. Bogenförmiges Raumlayout ist bei kleineren Reihenlängen problematisch. Bitte nutzen Sie für Bugs-Reports oder Pull-Requests GitHub: \url{https://github.com/tuc-osg/seatingchart}. \section{Lizenz} Es ist erlaubt, diese Software unter den Bedingungen der \LaTeX Project Public License (LPPL), Version 1.3c oder später, zu kopieren und zu verteilen (\url{http://www.latex-project.org/lppl.txt}). \end{document}