<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">\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}
</pre></body></html>