summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/schule/devModule.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-08-22 21:20:03 +0000
committerKarl Berry <karl@freefriends.org>2018-08-22 21:20:03 +0000
commitd73c922e3d1cc0085aab0488d1b8d2c7ff4f09d9 (patch)
tree9cf07e9b1056e59e30a1fb55c026822bc416777d /Master/texmf-dist/doc/latex/schule/devModule.tex
parenta5b8f028298d5555872bdd3858a8132094a12688 (diff)
restore schule, tikz symbols and all
git-svn-id: svn://tug.org/texlive/trunk@48453 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/schule/devModule.tex')
-rw-r--r--Master/texmf-dist/doc/latex/schule/devModule.tex184
1 files changed, 184 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/schule/devModule.tex b/Master/texmf-dist/doc/latex/schule/devModule.tex
new file mode 100644
index 00000000000..981950a01be
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/schule/devModule.tex
@@ -0,0 +1,184 @@
+\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 einem Unterverzeichnis
+ mit dem Namen des Moduls, das im Unterverzeichnis \enquote{Module}
+ des Pakets liegt.
+
+ Ist ein solches Verzeichnis vorhanden, kann das Modul direkt über
+ seinen Namen eingebunden werden, \vgl\space\prettyref{sec:module}.
+ 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{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{HalloWelt/pakete.tex}
+\begin{sourcecode}[gobble=0]
+% ********************************************************************
+% * Paketabhängigkeiten *
+% ********************************************************************
+
+\RequirePackage{ifthenelse}
+\end{sourcecode}
+
+ \paragraph{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 besteht aus einem
+ Unterverzeichnis mit dem Namen des Fachmoduls, das im
+ Unterverzeichnis \enquote{Faecher} des Pakets liegt.
+
+ Ist ein solches Verzeichnis vorhanden, kann das Fachmodul direkt
+ über seinen Namen eingebunden werden,
+ \vgl\space\prettyref{sec:faecher}.
+ Der Modulmechanismus sorgt dafür, dass die entsprechenden
+ Abschnitte des Fachmoduls an den richtigen Stellen des Quelltextes
+ eingebunden werden. Es sind die folgenden vier 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, die unabhängig von der Art der Einbindung des
+ Faches geladen wird.
+ \item[\texttt{standalone.tex}] $\rightarrow$ Implementierung,
+ die nur geladen wird, wenn das Fach als Hauptfach
+ angegeben wird, \dsh\space wenn das Fach mit der
+ Paketoption \keyis{fach}{Fach} geladen wurde, jedoch
+ nicht, wenn das Fach mit \keyis{weitereFaecher}{\dots
+ Fach,\dots} geladen wurde.
+ \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.
+
+ Siehe auch das Beispiel für die Implementierung eines Moduls in
+ \prettyref{sec:devmoduleModulBeispiel}.
+
+ \subsection{Aufbau eines Dokumenttyps}
+
+ \label{sec:devDokumenttyp}
+
+ Ein Dokumenttyp für das Schule-Paket besteht aus einem
+ Unterverzeichnis mit dem Namen des Dokumenttyps, das im
+ Unterverzeichnis \enquote{Dokumenttypen} des Pakets liegt.
+
+ Ist ein solches Verzeichnis vorhanden, kann der Dokumenttyp
+ direkt über seinen Namen eingebunden werden,
+ \vgl\space\prettyref{sec:typen}.
+ Der Modulmechanismus sorgt dafür, dass die entsprechenden
+ Abschnitte des Dokumenttyps an den richtigen Stellen des
+ Quelltextes eingebunden werden. Es sind die folgenden drei
+ Abschnitte definiert:
+
+ \begin{description}
+ \item[\texttt{optionen.tex}] $\rightarrow$ Paketoptionen des
+ Dokumenttyps, \vgl\space Paket \pkg{pgfopts}
+ \item[\texttt{pakete.tex}] $\rightarrow$ Paketabhängigkeiten
+ des Dokumenttyps
+ \item[\texttt{code.tex}] $\rightarrow$ Implementierung des
+ Dokumenttyps.
+ \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.
+
+ Sind die Abschnitte nicht vorhanden, so wird in jedem Fall der
+ entsprechende Abschnitt des Dokumenttyps \enquote{Arbeitsblatt}
+ (ab) geladen. Soll dies unterbleiben, muss der Abschnitt also
+ auf jeden Fall angelegt werden.
+
+ Siehe auch das Beispiel für die Implementierung eines Moduls in
+ \prettyref{sec:devmoduleModulBeispiel}. \ No newline at end of file