Skip to content

jochen-rath/Arbeitsblattgenerator

Repository files navigation

Arbeitsblätter mit Python und LaTeX erzeugen

Inhalt

Beispiel

Wer diese Seite ohne vorherige Installation testen möchte, findet hier den Arbeitsblattgenerator Online.

Vorbemerkung

Ich habe mit diesem Projekt Python gelernt. Dadurch sind viele Funktionen in diesem Projekt je nach Kenntnisstand unterschiedlich aufgebaut. Außerdem hatte ich anfangs ich noch keine Ahnung, wie Module in Python funktionieren und wie man diese erstellt. Dadurch wird dies Skript unter Verwendung von exec(open("").read()) ausgeführt und nicht mit import. Ich hatte mal versucht, dieses Skript auf Module umzustellen, hatte es aus Zeitgründen nicht geschafft. Gleiche Probleme stellen sich an verschiedenen Stellen des Projektes. Z. B. gilt für die Webseite, dass ich vor diesem Projekt noch keine Webseite erstellt hatte, weshalb auch hier verschiedene Kenntnisstände aufeinander treffen.

Idee hinter dem Projekt

Als ich als Lehrer anfing, wurde mir sehr schnell klar, dass meine Schülerinnen und Schüler Probleme haben, Inhalte zu bearbeiten, wenn zwischen der Einführung und erneuten Behandlung ein halbes Jahr oder mehr vergangen ist. Es fehlt die regelmäßige Übung, um die Lerninhalte zu festigen. Weiter fehlte es mir aber auch an Material, um den Schülerinnen regelmäßige Übungsaufgaben zur Verfügung zu stellen. Und bei den Aufgaben, die ich hatte, fehlten entweder die Lösungen oder diese waren nur sehr kurz und knapp gehalten. Ich wollte aber meinen Schülerinnen regelmäßige Übungsaufgaben zur Verfügung stellen, welche sehr ausführlichen Lösungen haben, damit sie sich selber Schritt für Schritt kontrollieren können. Als das Projekt entsprechend gewachsen war, wollte ich es meinen Kollegen zur Verfügung stellen. Es ist daher nun so ausgelegt, dass eine Webseite erstellt wird, mit der man verschiedene Aufgaben auswählen kann. Python erzeugt entsprechend dieser Auswahl eine PDF Datei mit Aufgaben und ausführlichen Lösungen. Das Skript soll auf einem Raspberry Pi oder anderem Linux-Webserver laufen, damit ein im Umgang mit Computer erfahrener Kollege seinem Kollegium den Generator zur Verfügung stellen kann.

Voraussetzungen und Installation

  • Raspberry Pi
  • Python 3.8 oder höher
  • xelatex
  • Python Module: numpy matplotlib datetime sympy flask flask_wtf wtforms

Installation der Voraussetzungen:

sudo apt install texlive texlive-lang-german texlive-latex-extra texlive-xetex texlive-pstricks python3-pip libatlas-base-dev
pip3 install -r requirements.txt

bzw.

pip3 install numpy  matplotlib datetime sympy flask flask_wtf wtforms psutil openai

Probleme bei der Installation unter Ubuntu und python3.10

Bei mir hat die Installation unter Ubuntu und python3.10 fehlgeschlagen. Ich musst noch zwei zusätzliche Befehle ausführen:

sudo apt-get install python3.10-distutils

Und eine angepasste pip3 Version:

curl https://bootstrap.pypa.io/get-pip.py | sudo python3

Danach musste ich noch die "apt_pkg.so" wiederherstellen.

cd /usr/lib/python3/dist-packages
sudo cp apt_pkg.cpython-38-x86_64-linux-gnu.so apt_pkg.so

Und 2 fehlende oder fehlerhafte Module nachinstallieren:

pip3 install -U --ignore-installed psutil
pip3 install -U Pillow

Installation des Skriptes

Kopiere die gesamte Ordnerstruktur unter /home/pi/abgen.

Mandalas

Damit Mandalas genutzt werden können muss man RandomMandala und tikzplotlib installieren. Das Problem ist, dass tikzplotlib eine Version von webcolors nutzt, die wohl nicht mehr akutell ist. tikzplotlib ruft eine Funktion auf, die es nicht mehr gibt. Da wir eh nur Schwarz-Weiße Mandalas nutze, muss folgendes angepasst werden:

vi .local/lib/python3.10/site-packages/tikzplotlib/_color.py 

Und füge folgendes ein:

def _get_closest_colour_name(rgb):
    match = None
    mindiff = 1.0e15
    return 'black',0

Website

Starte das Skript mit dem Befehl

python3 starteSkriptDurchWebseite.py

In einem Webbrowser findet sich dann der Generator bei:

http://127.0.0.1:5000

Service

Im Ordner serverDateien befinden sich das Skript abgen.service mit dem man den Generator als Service starten kann, welcher im Hintergrund läuft. Kopiere die Datei nach /lib/systemd/system und aktivere den Service mit

sudo systemctl enable abgen
sudo systemctl daemon-reload
sudo systemctl start abgen

Apache2 Configdatei

Die Datei abgenerator.ddns.net.conf enthält eine Beispielkonfiguration, wie man mit einem als Reverse Proxy konfigurierten Apache-Server den Generator über eine Adresse aufrufen kann.

##Impressum Um ein Impressum einzubinden, erzeuge die Datei "impressum.html" im Homeverzeichnis. Ist diese Datei vorhanden, bindet erzeugt der Arbeitsblattgenerator ein Link auf der Webseite zum Impressum.

Programmaufbau und Ablauf

Aufbau

Das Programm besteht aus folgenden Ordner: Aufrufe, Ausgabe, Erklaerungen, Funktionen. In Aufrufe befinden sich die Skripte, mit denen man unter Verwendung der Skripte im Ordner Funktionen Arbeitsblätter erstellen kann. Dies wird aber nur noch benötigt, wenn man die Webseite nicht nutzen möchte. In der Ausgabe wird das fertige Arbeitsblatt gespeichert. Im Ordner Erklaerungen sollen besondere Schwierigkeiten näher beleuchtet werden. Im Ordner Funktionen befinden sich die Skripte zum Erzeugen der verschiedenen Aufgaben.

Programmablauf, nach dem auf "senden" gedrückt wird.

Jeder ausgewählten Aufgabe wird ein Bezeichner zugewiesen. Dieser Bezeichner und andere gewählte Optionen von der Webseite werden dem Skript erzeugeTaeglicheRechnungenArgs als Parameter übergeben. Dies Skript findet sich unter "Aufrufe/taeglicheUebungen".

Das Skript erzeugeTaeglicheRechnungenArgs ruft die Funktion erzeugeArbeitsblattTaeglicheUebungen() auf. Diese Funktion ruft die einzelnen Funktionen auf, die zusammen ein LaTeX Dokument erzeugen. Dabei ruft es auch die Funktion erzeuge10minRechnung() aus der Datei "funktionenRechenBezeichnungen.py" auf. Diese Funktion besteht im Grunde nur aus einem Dictionary, welchem jedem Bezeichner von der Webseite einen Funktionsaufruf zuordnet. Je nach ausgewählten Bezeichner wird dann eine andere Funktion aufgerufen, welche die gewählte Aufgabe im LaTeX-Format erzeugt.

Eine neue Aufgabe der Webseite hinzufügen

  1. Erzeuge eine neue Funktion in einer vorhandenen oder in einer neuen Skriptdatei mit dem Namensformat funktionenNeuerName.py.
  2. Wichtig: Die Funktion muss eine Rückgabe der Form [aufgabe,loesung,[werte]] haben.
  3. Gib der Funktionen einen eindeutigen Bezeichner und füge diesem dem Dictionary in der Funktion erzeuge10minRechnung() hinzu.
  4. Füge in der Funktion MoeglicheRechnungen() einem neuen Eintrag in dem Dictionary listeRechnungen hinzu, indem ein neues Tuple im Format ('Bezeichner','Beschreibung der Funktion') in einer vorhanden Liste eingetragen wird.
  5. Oder erzeuge einen neuen Listeneintrag im Format 'NameErstesDropdownMenueAufWebseite':[('Bezeichner','Beschreibung der Funktion')]

Aufruf ohne Homepage

Einfaches Beispiel

Das Beispiel "einfachesArbeitsblatt.py" gibt einen einfachen Einstieg wie die Skripte funktionieren. In einer Main-Funktion werden allgemeine Informationen wie Datum, Titel, Anzahl an Rechnungen und sonstiges gesetzt. Diese Main-Funktion ruft eine Funktion auf, die zuerst die Aufgaben erzeugt und dann mit diesen Aufgaben und den in Main gesetzten Parametern ein LaTeX Dokument generiert. Mit den Befehlen os.system(), os.rename() wird dann mit XeLaTeX ein Dokument newFile.pdf erzeugt, welches in den gewünschten Dokumentenname umbenannt wird. os.remove() entfernt zum Schluss die LaTeX Dateien.

Aufgaben Erzeugen

Aufgaben werden in Funktionen erzeugt, die folgende Rückgabe enthalten müssen: [afg,lsg,zahlen]. afg enthält die gesamte Aufgabe, mit Beschreibung, Anweisungen und Bildern. Diese kann in Form einer Liste oder einem String vorliegen. lsg enthält passend zu afg eine ausführliche Lösung der Aufgabe. Möchte man von dem vorgegebenen Format der Aufgabe abweichen, kann man mit den Zahlen in zahlen einen eigenen Aufgabetext erzeugen.

Tägliche Übungen

Das Skript "erzeugeTaeglicheRechnungenKlasse8.py" benutzt die Klasse rechnungsFunktionen die in der Funktion "erzeuge10minRechnung(art)" gespeichert ist. Diese Klasse enthält Beispielaufrufe von den verschiedenen Funktionen um kurze Aufgaben zu erzeugen.

Probleme

Modules und Packages

Ich würde gerne das Paket in Form eines Python Moduls aufbauen, aber ich habe die Dateien und Funktionen so ineinander verschachtelt, dass ich einen Großteil umschreiben muss. Ich hoffe, irgendwann dafür Zeit zu finden.

Kaffee

Ich habe viele Stunden an dem Generator gesessen. Sollte er dir gefallen und du ihn gerne Nutzen würde ich mich über einen kleinen Kaffee freuen, damit ich mehr Energie zum Erweitern habe.

Donate

Danksagung

Ich danke meiner Schule der Haupt- und Realschule Loxstedt, dass sie mir die Möglichkeit geschaffen hat, die Webseite zu erstellen und somit anderen Lehrern den Zugriff auf den Generator ermöglichte.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages