Farben eingeführt für farbige Displays

This commit is contained in:
2025-09-11 18:08:54 +02:00
parent a51c5219ae
commit 47e340ddda
19 changed files with 149 additions and 64 deletions

View File

@@ -5,3 +5,7 @@
margin-top: 0.25cm; margin-top: 0.25cm;
margin-bottom: 0.25cm; margin-bottom: 0.25cm;
} }
@import url("devices/css/general.css");
@import url("devices/css/color.css");

View File

@@ -1,30 +1,31 @@
[Navigation] [Navigation]
# Navigationsleiste auch auf Klassen- und Kursseiten einblenden: ja, nein
navileiste = ja
# Lerngruppenbezeichnung in der Navileiste (Zeilenumbruch vermeiden): kurz, normal # Lerngruppenbezeichnung in der Navileiste (Zeilenumbruch vermeiden): kurz, normal
bezeichnung = normal bezeichnung = normal
[Korrekturbogen] [Korrekturbogen]
# Anzahl der Aufgaben in der Korrekturtabelle: 1, 2, 3, ... # Anzahl der Aufgaben in der Korrekturtabelle: 1, 2, 3, ...
anzahl_aufgaben = 6 anzahl_aufgaben = 6
[SoMiNoten] [SoMiNoten]
# Anzahl der SoMi-Noten-Spalten # Anzahl der SoMi-Noten-Spalten
anzahl_noten = 16 anzahl_noten = 16
[Hausaufgaben] [Hausaufgaben]
# Anzahl der HA-Noten-Spalten # Anzahl der HA-Noten-Spalten
anzahl_ha = 10 anzahl_ha = 10
# Umschalten auf kleine Schrift ab X Schülern (Seitenumbruch vermeiden): 20, 21, 22, ...
umschalten_kleinschrift = 30
[Checkliste] [Checkliste]
# Anzahl der Check-Spalten # Anzahl der Check-Spalten
anzahl_checks = 10 anzahl_checks = 10
# Umschalten auf kleine Schrift ab X Schülern (Seitenumbruch vermeiden): 20, 21, 22, ...
umschalten_kleinschrift = 30

35
src/devices/css/color.css Normal file
View File

@@ -0,0 +1,35 @@
.n0 {
background-color: lightgrey;
}
.n1, .h1, .t1 {
background-color: lightpink;
}
.n2, .h2, .t2 {
background-color: powderblue;
}
.n3, .h3, .t3 {
background-color: lightgreen;
}
.n4, .h4, .t4 {
background-color: peachpuff;
}
.n5, .h5, .t5 {
background-color: lavender;
}
.n6, .h6, .t6 {
background-color: lemonchiffon;
}
.n7, .h7, .t7 {
background-color: darkseagreen;
}
.n8, .h8, .t8 {
background-color: cadetblue;
}

View File

@@ -44,12 +44,6 @@ table.lerngruppen td.home {
font-size: 100%; font-size: 100%;
border: none; border: none;
} }
td.group {
background-color: white;
}
td.current {
background-color: lightgrey;
}
/* Überschriftszeile mit Icon-Symbolen */ /* Überschriftszeile mit Icon-Symbolen */
@@ -107,7 +101,6 @@ table.timetable tr {
} }
table.timetable a { table.timetable a {
text-decoration: none; text-decoration: none;
background-color: #f2f2f2;
color: black; color: black;
} }
th.stunde, td.stunde { th.stunde, td.stunde {

13
src/devices/css/sw.css Normal file
View File

@@ -0,0 +1,13 @@
/* SW-Konzept: keine Farben in Navileiste, Überschrift, Stundenplan */
td.group {
background-color: white; /* keine Einfärbung */
}
td.current {
background-color: lightgrey; /* aktiv = schwach grau hinterlegt */
}
table.timetable a {
background-color: #f2f2f2; /* Links = leicht grau hinterlegt */
}

View File

@@ -5,3 +5,8 @@
margin-top: 0.25cm; margin-top: 0.25cm;
margin-bottom: 0.25cm; margin-bottom: 0.25cm;
} }
@import url("devices/css/general.css");
@import url("devices/css/color.css");

View File

@@ -1,30 +1,31 @@
[Navigation] [Navigation]
# Navigationsleiste auch auf Klassen- und Kursseiten einblenden: ja, nein
navileiste = ja
# Lerngruppenbezeichnung in der Navileiste (Zeilenumbruch vermeiden): kurz, normal # Lerngruppenbezeichnung in der Navileiste (Zeilenumbruch vermeiden): kurz, normal
bezeichnung = kurz bezeichnung = kurz
[Korrekturbogen] [Korrekturbogen]
# Anzahl der Aufgaben in der Korrekturtabelle: 1, 2, 3, ... # Anzahl der Aufgaben in der Korrekturtabelle: 1, 2, 3, ...
anzahl_aufgaben = 5 anzahl_aufgaben = 5
[SoMiNoten] [SoMiNoten]
# Anzahl der SoMi-Noten-Spalten # Anzahl der SoMi-Noten-Spalten
anzahl_noten = 15 anzahl_noten = 15
[Hausaufgaben] [Hausaufgaben]
# Anzahl der HA-Noten-Spalten # Anzahl der HA-Noten-Spalten
anzahl_ha = 9 anzahl_ha = 9
# Umschalten auf kleine Schrift ab X Schülern (Seitenumbruch vermeiden): 20, 21, 22, ...
umschalten_kleinschrift = 24
[Checkliste] [Checkliste]
# Anzahl der Check-Spalten # Anzahl der Check-Spalten
anzahl_checks = 9 anzahl_checks = 9
# Umschalten auf kleine Schrift ab X Schülern (Seitenumbruch vermeiden): 20, 21, 22, ...
umschalten_kleinschrift = 22

View File

@@ -5,3 +5,7 @@
margin-top: 0.25cm; margin-top: 0.25cm;
margin-bottom: 0.25cm; margin-bottom: 0.25cm;
} }
@import url("devices/css/general.css");
@import url("devices/css/sw.css");

View File

@@ -1,23 +1,30 @@
[Navigation] [Navigation]
# Navigationsleiste auch auf Klassen- und Kursseiten einblenden: ja, nein
navileiste = nein
# Lerngruppenbezeichnung in der Navileiste (Zeilenumbruch vermeiden): kurz, normal # Lerngruppenbezeichnung in der Navileiste (Zeilenumbruch vermeiden): kurz, normal
bezeichnung = kurz bezeichnung = kurz
[Korrekturbogen] [Korrekturbogen]
# Anzahl der Aufgaben in der Korrekturtabelle: 1, 2, 3, ... # Anzahl der Aufgaben in der Korrekturtabelle: 1, 2, 3, ...
anzahl_aufgaben = 5 anzahl_aufgaben = 5
[SoMiNoten] [SoMiNoten]
# Anzahl der SoMi-Noten-Spalten # Anzahl der SoMi-Noten-Spalten
anzahl_noten = 14 anzahl_noten = 14
[Hausaufgaben] [Hausaufgaben]
# Anzahl der HA-Noten-Spalten # Anzahl der HA-Noten-Spalten
anzahl_ha = 8 anzahl_ha = 8
[Checkliste] [Checkliste]
# Anzahl der Check-Spalten # Anzahl der Check-Spalten

View File

@@ -63,16 +63,6 @@ css_devicefile = 'devices/'+device+'.css'
if (not(os.path.exists(css_devicefile))): if (not(os.path.exists(css_devicefile))):
print(css_devicefile+" nicht vorhanden!") print(css_devicefile+" nicht vorhanden!")
exit(0) exit(0)
fd = open(css_devicefile)
devicestyle = fd.read()
# CSS Formatierung für alle Devices einlesen
css_file = 'devices/general.css'
if (not(os.path.exists(css_file))):
print(css_file+" nicht vorhanden!")
exit(0)
f = open(css_file)
style = f.read()
# 4. Vorbereitungen für Verarbeitung # 4. Vorbereitungen für Verarbeitung
@@ -170,7 +160,7 @@ for datei in dateien:
gebdaten_all = False gebdaten_all = False
# Übersichtsseite Noten zusammenbauen # Übersichtsseite Noten zusammenbauen
body = body + uebersicht.erstelleUebersicht(klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs) body = body + uebersicht.erstelleUebersicht(kursid, klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs)
# optional: Korrekturbögen zusammenbauen # optional: Korrekturbögen zusammenbauen
try: try:
@@ -179,10 +169,10 @@ for datei in dateien:
print('Der Schlüssel "schr_anzahl" fehlt im Bereich "'+kursid+'" der Input-Datei!') print('Der Schlüssel "schr_anzahl" fehlt im Bereich "'+kursid+'" der Input-Datei!')
exit(0) exit(0)
if (schr_anzahl>0): if (schr_anzahl>0):
body = body + korrektur.erstelleKorrekturbogen(klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs) body = body + korrektur.erstelleKorrekturbogen(kursid, klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs)
# SoMi-Bogen zusammenbauen # SoMi-Bogen zusammenbauen
body = body + somi.erstelleSoMiBogen(klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs) body = body + somi.erstelleSoMiBogen(kursid, klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs)
# optional: HA-Bogen zusammenbauen # optional: HA-Bogen zusammenbauen
try: try:
@@ -191,24 +181,25 @@ for datei in dateien:
print('Der Schlüssel "ha_zeilen" fehlt im Bereich "'+kursid+'" der Input-Datei!') print('Der Schlüssel "ha_zeilen" fehlt im Bereich "'+kursid+'" der Input-Datei!')
exit(0) exit(0)
if (ha_zeilen>0): if (ha_zeilen>0):
body = body + ha.erstelleHABogen(klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs) body = body + ha.erstelleHABogen(kursid, klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs)
# Checkliste(n) zusammenbauen # Checkliste(n) zusammenbauen
body = body + checkliste.erstelleCheckliste(klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs) body = body + checkliste.erstelleCheckliste(kursid, klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs)
# Geburtstagsseite zusammenbauen # Geburtstagsseite zusammenbauen
if (len(gebdaten)==0): if (len(gebdaten)==0):
print(' - Geburtstagsliste wird weggelassen.') print(' - Geburtstagsliste wird weggelassen.')
else: else:
body = body + birthday.erstelleGeburtstagsBogen(klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs) body = body + birthday.erstelleGeburtstagsBogen(kursid, klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs)
# Planungsseite für das Halbjahr zusammenbauen # Planungsseite für das Halbjahr zusammenbauen
body = body + halbjahr.erstelleHalbjahresuebersicht(klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs) body = body + halbjahr.erstelleHalbjahresuebersicht(kursid, klassekurs_name, lerngruppen, path, namen, gebdaten, config, inputs, kurs_inputs)
# 6. Abschluss: PDF Generierung # 6. Abschluss: PDF Generierung
html_source = '<html><head>' html_source = '<html><head>'
html_source += '<style>'+devicestyle+style+'</style></head><body>'+body+'</body></html>' html_source += '<link rel="stylesheet" href="'+css_devicefile+'">'
html_source += '</head><body>'+body+'</body></html>'
pisa.showLogging() pisa.showLogging()

View File

@@ -4,7 +4,7 @@ from datetime import datetime
import header import header
def erstelleGeburtstagsBogen(klassekurs_name, dateien, path, namen, gebdaten, config, inputs, kurs_inputs): def erstelleGeburtstagsBogen(kursid, klassekurs_name, dateien, path, namen, gebdaten, config, inputs, kurs_inputs):
table = '' table = ''
@@ -29,7 +29,7 @@ def erstelleGeburtstagsBogen(klassekurs_name, dateien, path, namen, gebdaten, co
table += '<a name="'+klassekurs_name+'Birthday"></a>' table += '<a name="'+klassekurs_name+'Birthday"></a>'
table += header.erstelleHeader('Geburtstage', klassekurs_name, gebdaten, dateien, path, config, inputs, kurs_inputs) table += header.erstelleHeader(kursid, 'Geburtstage', klassekurs_name, gebdaten, dateien, path, config, inputs, kurs_inputs)
table += '<table class="home" repeat="1">' table += '<table class="home" repeat="1">'

View File

@@ -3,7 +3,7 @@ import os
import header import header
def erstelleCheckliste(klassekurs_name, dateien, path, namen, gebdaten, config, inputs, kurs_inputs): def erstelleCheckliste(kursid, klassekurs_name, dateien, path, namen, gebdaten, config, inputs, kurs_inputs):
table = '' table = ''
@@ -26,7 +26,7 @@ def erstelleCheckliste(klassekurs_name, dateien, path, namen, gebdaten, config,
if check_seiten > 1: if check_seiten > 1:
line += 'n' line += 'n'
table += header.erstelleHeader(line, klassekurs_name, gebdaten, dateien, path, config, inputs, kurs_inputs) table += header.erstelleHeader(kursid, line, klassekurs_name, gebdaten, dateien, path, config, inputs, kurs_inputs)
css = 'check' css = 'check'

View File

@@ -3,7 +3,7 @@ import os
import header import header
def erstelleHABogen(klassekurs_name, dateien, path, namen, gebdaten, config, inputs, kurs_inputs): def erstelleHABogen(kursid, klassekurs_name, dateien, path, namen, gebdaten, config, inputs, kurs_inputs):
table = '' table = ''
@@ -27,7 +27,7 @@ def erstelleHABogen(klassekurs_name, dateien, path, namen, gebdaten, config, inp
table += '<a name="'+klassekurs_name+'HA"></a>' table += '<a name="'+klassekurs_name+'HA"></a>'
table += header.erstelleHeader('HA', klassekurs_name, gebdaten, dateien, path, config, inputs, kurs_inputs) table += header.erstelleHeader(kursid, 'HA', klassekurs_name, gebdaten, dateien, path, config, inputs, kurs_inputs)
table += '<table class="'+css+'" repeat="1">' table += '<table class="'+css+'" repeat="1">'

View File

@@ -3,7 +3,7 @@ import os
import header import header
def erstelleHalbjahresuebersicht(klassekurs_name, dateien, path, namen, gebdaten, config, inputs, kurs_inputs): def erstelleHalbjahresuebersicht(kursid, klassekurs_name, dateien, path, namen, gebdaten, config, inputs, kurs_inputs):
table = '' table = ''
@@ -24,7 +24,7 @@ def erstelleHalbjahresuebersicht(klassekurs_name, dateien, path, namen, gebdaten
table += '<a name="'+klassekurs_name+'Halbjahr"></a>' table += '<a name="'+klassekurs_name+'Halbjahr"></a>'
table += header.erstelleHeader('Planung', klassekurs_name, gebdaten, dateien, path, config, inputs, kurs_inputs) table += header.erstelleHeader(kursid, 'Planung', klassekurs_name, gebdaten, dateien, path, config, inputs, kurs_inputs)
css = 'halbjahr' css = 'halbjahr'

View File

@@ -7,12 +7,16 @@ def erstelleNavigation(klassekurs_name, lerngruppen, path, config, inputs):
myclass = "group" myclass = "group"
if (klassekurs_name==''): if (klassekurs_name==''):
header += '<td class="current">Startseite</td>' header += '<td class="current n0">Startseite</td>'
else: else:
header += '<td class="group"><a href="#Home">Startseite</a></td>' header += '<td class="group n0"><a href="#Home">Startseite</a></td>'
count = 0
for kursid in lerngruppen: for kursid in lerngruppen:
count = count + 1
try: try:
kurs_inputs_aktuell = inputs[kursid] kurs_inputs_aktuell = inputs[kursid]
except KeyError: except KeyError:
@@ -35,11 +39,11 @@ def erstelleNavigation(klassekurs_name, lerngruppen, path, config, inputs):
print('Der Schlüssel "(kurz)bezeichnung" fehlt im Bereich "'+kursid+'" der Input-Datei!') print('Der Schlüssel "(kurz)bezeichnung" fehlt im Bereich "'+kursid+'" der Input-Datei!')
exit(0) exit(0)
myclass = "group" myclass = ' n'+str(count) # Navileisten-CSS nX
if (klassekurs_aktuell == klassekurs_name): if (klassekurs_aktuell == klassekurs_name):
header += '<td class="current">'+klassekurs_print+'</td>' header += '<td class="current'+myclass+'">'+klassekurs_print+'</td>'
else: else:
header += '<td class="group"><a href="#'+klassekurs_aktuell+'">'+klassekurs_print+'</a></td>' header += '<td class="group'+myclass+'"><a href="#'+klassekurs_aktuell+'">'+klassekurs_print+'</a></td>'
header += '</tr></table>' header += '</tr></table>'
@@ -47,13 +51,26 @@ def erstelleNavigation(klassekurs_name, lerngruppen, path, config, inputs):
def erstelleHeader(line, klassekurs_name, gebdaten, lerngruppen, path, config, inputs, kurs_inputs): def erstelleHeader(kursid, line, klassekurs_name, gebdaten, lerngruppen, path, config, inputs, kurs_inputs):
# vorerst abgeschaltet: Navigation für alle Lerngruppen # Navigationsleiste für die Lerngruppen
# header = erstelleNavigation(klassekurs_name, lerngruppen, path, config, inputs) try:
navileiste = config["Navigation"]["navileiste"]
except KeyError:
print('Der Schlüssel Navigation oder "kurzbezeichnung" existiert nicht in der Device-Datei!')
exit(0)
# Icons für die aktuelle Lerngruppe zeige_navi = False
header = '' if (navileiste=='ja'):
zeige_navi = True
if (zeige_navi):
header = erstelleNavigation(klassekurs_name, lerngruppen, path, config, inputs)
else:
header = ''
# Überschrift inkl. verlinkte Icons für die aktuelle Lerngruppe
header += '<table class="headline"><tr class="headline">' header += '<table class="headline"><tr class="headline">'
# Icon # Icon
@@ -72,13 +89,22 @@ def erstelleHeader(line, klassekurs_name, gebdaten, lerngruppen, path, config, i
myline = str(zschuljahr) + '/' + str((zschuljahr-2000)+1) + ', ' + halbjahr + '. Hj.' myline = str(zschuljahr) + '/' + str((zschuljahr-2000)+1) + ', ' + halbjahr + '. Hj.'
# Überschrift links # Überschrift links
header+= '<td class="left headline">'+klassekurs_name+' - '+myline+'</td>' count = 0
for gruppe in lerngruppen:
count = count + 1
if (gruppe==kursid):
break
mycss = 'h'+str(count) # Headline-CSS hX
header+= '<td class="left headline"><span class="'+mycss+'">'+klassekurs_name+'</span> - '+myline+'</td>'
# Iconleiste rechts # Iconleiste rechts
header += '<td class="right headline">' header += '<td class="right headline">'
# Link zur Startseite # Link zur Startseite, falls keine Navileiste
header += '<a href="#Home">&nbsp;<img class="icon" src="img/home-2.svg"/></a>' if (not(zeige_navi)):
header += '<a href="#Home">&nbsp;<img class="icon" src="img/home-2.svg"/></a>'
# Notenübersicht # Notenübersicht
header += '<a href="#'+klassekurs_name+'Overview">&nbsp;<img class="icon" src="img/user-multiple-4.svg"/></a>' header += '<a href="#'+klassekurs_name+'Overview">&nbsp;<img class="icon" src="img/user-multiple-4.svg"/></a>'

View File

@@ -3,7 +3,7 @@ import os
import header import header
def erstelleKorrekturbogen(klassekurs_name, dateien, path, namen, gebdaten, config, inputs, kurs_inputs): def erstelleKorrekturbogen(kursid, klassekurs_name, dateien, path, namen, gebdaten, config, inputs, kurs_inputs):
table = '' table = ''
@@ -37,7 +37,7 @@ def erstelleKorrekturbogen(klassekurs_name, dateien, path, namen, gebdaten, conf
line = schr_bez+' Nr. '+str(no) line = schr_bez+' Nr. '+str(no)
table += header.erstelleHeader(line, klassekurs_name, gebdaten, dateien, path, config, inputs, kurs_inputs) table += header.erstelleHeader(kursid, line, klassekurs_name, gebdaten, dateien, path, config, inputs, kurs_inputs)
table += '<table class="korrektur" repeat="1">' table += '<table class="korrektur" repeat="1">'

View File

@@ -3,7 +3,7 @@ import os
import header import header
def erstelleSoMiBogen(klassekurs_name, dateien, path, namen, gebdaten, config, inputs, kurs_inputs): def erstelleSoMiBogen(kursid, klassekurs_name, dateien, path, namen, gebdaten, config, inputs, kurs_inputs):
table = '' table = ''
@@ -35,7 +35,7 @@ def erstelleSoMiBogen(klassekurs_name, dateien, path, namen, gebdaten, config, i
line += 'SoMi Q'+str(no) line += 'SoMi Q'+str(no)
line += '/Q'+str(no+1) line += '/Q'+str(no+1)
table += header.erstelleHeader(line, klassekurs_name, gebdaten, dateien, path, config, inputs, kurs_inputs) table += header.erstelleHeader(kursid, line, klassekurs_name, gebdaten, dateien, path, config, inputs, kurs_inputs)
table += '<table class="somi" repeat="'+str(somi_zeilen)+'">' table += '<table class="somi" repeat="'+str(somi_zeilen)+'">'

View File

@@ -4,7 +4,7 @@ import markdown
import header import header
def erstelleStartseite(lerngruppen, path,config, inputs): def erstelleStartseite(lerngruppen, path,config, inputs):
table = '' table = ''
@@ -60,8 +60,13 @@ def erstelleStartseite(lerngruppen, path,config, inputs):
<td class="tag">''','''<tr><td class="luecke">&nbsp;</td><td class="stunde">''') <td class="tag">''','''<tr><td class="luecke">&nbsp;</td><td class="stunde">''')
# ggf. Links zu Lerngruppen einfügen # ggf. Links zu Lerngruppen einfügen
count = 0
for kursid in lerngruppen: for kursid in lerngruppen:
count = count + 1
mycss = 't'+str(count) # Timetable-CSS tX
try: try:
kurs_inputs_aktuell = inputs[kursid] kurs_inputs_aktuell = inputs[kursid]
except KeyError: except KeyError:
@@ -75,7 +80,7 @@ def erstelleStartseite(lerngruppen, path,config, inputs):
print('Der Schlüssel "bezeichnung" fehlt im Bereich "'+kursid+'" der Input-Datei!') print('Der Schlüssel "bezeichnung" fehlt im Bereich "'+kursid+'" der Input-Datei!')
exit(0) exit(0)
html = html.replace('['+kursid+']','<a href="#'+klassekurs_aktuell+'">'+klassekurs_aktuell_kurz+'</a>') html = html.replace('['+kursid+']','<span class="'+mycss+'"><a href="#'+klassekurs_aktuell+'">'+klassekurs_aktuell_kurz+'</a></span>')
table += html table += html

View File

@@ -2,7 +2,7 @@ import os
import header import header
def erstelleUebersicht(klassekurs_name, dateien, path, namen, gebdaten, config, inputs, kurs_inputs): def erstelleUebersicht(kursid, klassekurs_name, dateien, path, namen, gebdaten, config, inputs, kurs_inputs):
table = '' table = ''
@@ -18,7 +18,7 @@ def erstelleUebersicht(klassekurs_name, dateien, path, namen, gebdaten, config,
if (kurs_inputs["halbjahresnote"]=='ja'): if (kurs_inputs["halbjahresnote"]=='ja'):
halbjahresnote = True halbjahresnote = True
table += header.erstelleHeader('Übersicht', klassekurs_name, gebdaten, dateien, path, config, inputs, kurs_inputs) table += header.erstelleHeader(kursid, 'Übersicht', klassekurs_name, gebdaten, dateien, path, config, inputs, kurs_inputs)
schr_bez = kurs_inputs["schriftlich_bez"] schr_bez = kurs_inputs["schriftlich_bez"]
schr_anzahl = int(kurs_inputs["schriftlich_anzahl"]) schr_anzahl = int(kurs_inputs["schriftlich_anzahl"])