<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>