summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/schule/doc/devModule.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/schule/doc/devModule.tex')
-rw-r--r--macros/latex/contrib/schule/doc/devModule.tex120
1 files changed, 120 insertions, 0 deletions
diff --git a/macros/latex/contrib/schule/doc/devModule.tex b/macros/latex/contrib/schule/doc/devModule.tex
new file mode 100644
index 0000000000..ddd2c358c4
--- /dev/null
+++ b/macros/latex/contrib/schule/doc/devModule.tex
@@ -0,0 +1,120 @@
+\section{Modularität}
+ \label{sec:devmodule}
+ \subsection{Erläuterungen zum Modulsystem}
+ Ein zentrales Problem des alten Schule-Pakets bis Version 0.6
+ war, dass es sehr monolithisch aufgebaut und alles integrierte,
+ was im Schulalltag und in der Lehrerausbildung nützlich sein
+ könnte. So wurden die Weiterentwicklung und Übergabe an neue
+ Maintainer schwierig, da stets eine Einarbeitung in alle Bereiche
+ erforderlich war.
+
+ Die grundlegende Entscheidung für das neue Schule-Paket ist es
+ also, eine Modularisierung zu etablieren, die, zusätzlich zu
+ einem stabilen Kern, verschiedene Funktionen und Fachspezifika
+ entsprechend kapselt und von diesem Kern trennt.
+
+ Ein eindeutiger Aufbau dieser Module soll dafür sorgen, dass es
+ leichter wird, neue Funktionen zu ergänzen, ohne den gesamten
+ Quelltext des Pakets kennen und verstehen zu müssen.
+
+ Grundsätzlich gibt es drei verschiedene Arten von Modulen im
+ Schule-Paket: \textbf{Module}, \textbf{Fachmodule} und
+ \textbf{Zusatzpakete}, \vgl\space \prettyref{sec:begriffe}.
+
+ Erweiterungen ohne direkten Bezug (also alles, das auch ohne das
+ Schule-Paket sinnvoll genutzt werden kann) zum Paket sollten in
+ Form unabhängiger Zusatzmodule implementiert werden.
+
+ \subsection{Aufbau eines Moduls}
+
+ \label{sec:devmoduleModul}
+
+ Ein Modul für das Schule-Paket besteht aus mehreren Dateien, deren erster Teil des Namens \texttt{schule.mod.Modulname} identisch ist. Je nach Funktion werden dort drei Möglichkeiten angehangen, die als Abschnitte bezeichnet werden. Sobald eine der Dateien mit diesem Schema vorhanden ist, kann das Modul über seinen Namen eingebunden werden, \vgl\space\prettyref{sec:module}. Alle Dateien vorgegebenen Dateien liegen dazu im Verzeichnis \enquote{latex}.
+
+ Der Modulmechanismus sorgt dafür, dass die entsprechenden Abschnitte des Moduls an den richtigen Stellen des Quelltextes eingebunden werden. Es sind die folgenden drei Abschnitte definiert:
+
+ \begin{description}
+ \item[\texttt{optionen.tex}] $\rightarrow$ Paketoptionen des Moduls, \vgl\space Paket \pkg{pgfopts}
+ \item[\texttt{pakete.tex}] $\rightarrow$ Paketabhängigkeiten des Moduls
+ \item[\texttt{code.tex}] $\rightarrow$ Implementierung des Moduls
+ \end{description}
+
+ All diese Abschnitte sind optional und werden geladen, wenn sie vorhanden sind. Ein Modul kann also beispielsweise nur aus einer \texttt{code.tex}-Datei bestehen, wenn es nur einige Makros definiert.
+
+ \subsubsection{Beispiel}
+ \label{sec:devmoduleModulBeispiel}
+ \paragraph{schule.mod.HalloWelt.optionen.tex}
+\begin{sourcecode}[gobble=0]
+% ********************************************************************
+% * Paketoptionen *
+% ********************************************************************
+
+% Boolesche Optionen
+% ********************************************************************
+\newboolean{schule@nutzeGoodbye}
+
+% Standardwerte
+% ********************************************************************
+\newcommand{\schule@weltname}{Welt}
+
+% Definition der Paketoptionen
+% ********************************************************************
+\pgfkeys{
+ /schule/.cd,
+ weltname/.store in=\schule@weltname,
+ nutzeGoodbye/.value forbidden,
+ nutzeGoodbye/.code=\setboolean{schule@datumAnzeigen}{true},
+}
+\end{sourcecode}
+
+ \paragraph{schule.mod.HalloWelt.pakete.tex}
+\begin{sourcecode}[gobble=0]
+% ********************************************************************
+% * Paketabhängigkeiten *
+% ********************************************************************
+
+\RequirePackage{ifthenelse}
+\end{sourcecode}
+
+ \paragraph{schule.mod.HalloWelt.code.tex}
+\begin{sourcecode}[gobble=0]
+% ********************************************************************
+% * Hallo Welt! *
+% ********************************************************************
+
+\newcommand{\halloWelt}{
+ \ifthenelse{\boolean{schule@nutzeGoodbye}}{
+ Goodbye \schule@weltname!
+ }{
+ Hallo \schule@weltname!
+ }
+}
+\end{sourcecode}
+
+
+ \subsection{Aufbau eines Fachmoduls}
+
+ \label{sec:devmoduleFachmodul}
+
+ Ein Fachmodul für das Schule-Paket wird analog zu einem normalen Modul erstellt, \vgl\space\prettyref{sec:devmoduleModul}. Hier steht nur im Dateinamen nach dem zweiten Punkt \texttt{fach} anstatt \texttt{mod}.
+
+ Die Dateien für das Fach Geschichte sind dann beispielsweise folgende:
+ \begin{itemize}
+ \item \texttt{schule.fach.Geschichte.optionen.tex}
+ \item \texttt{schule.fach.Geschichte.pakete.tex}
+ \item \texttt{schule.fach.Geschichte.code.tex}
+ \end{itemize}
+
+
+ \subsection{Aufbau eines Dokumenttyps}
+
+ \label{sec:devDokumenttyp}
+
+ Auch ein Dokumenttyp für das Schule-Paket hat den gleichen Aufbau wie ein normales Modul, \vgl\space\prettyref{sec:devmoduleModul}. Hier steht nur im Dateinamen nach dem zweiten Punkt \texttt{typ} anstatt \texttt{mod}.
+
+ Die Dateien für das Arbeitsblatt (Typ ab) sind dann beispielsweise folgende:
+ \begin{itemize}
+ \item \texttt{schule.typ.ab.optionen.tex}
+ \item \texttt{schule.typ.ab.pakete.tex}
+ \item \texttt{schule.typ.ab.code.tex}
+ \end{itemize}