vorlagen-muendliche-pruefungen

git clone git://source.orangerot.dev/university/vorlagen-muendliche-pruefungen.git
Log | Files | Refs | README

lib.typ (3537B)


      1 // SPDX-FileCopyrightText: 2025 Gero Beckmann <orangerot@orangerot.dev>
      2 //
      3 // SPDX-License-Identifier: MIT
      4 
      5 #let KIND = (:
      6   "WAHLPFLICHT":     "Wahlpflicht",
      7   "VERTIEFUNGSFACH": "Vertiefungsfach",
      8   "ERGAENZUNGSFACH": "Ergänzungsfach",
      9   "NONE":            ""
     10 )
     11 
     12 #let event(name: "", lecturer: "", semester: "", did_attend: "") = (
     13   name, lecturer, semester, did_attend
     14 )
     15 
     16 #let exam-report(
     17   study: "",                                 // Studiengang
     18   lecture: "",                               // Fach
     19   kind: KIND.NONE,                           // Prüfungsart KIND.{WAHLPFLICHT, VERTIEFUNGSFACH, ERGAENZUNGSFACH}
     20   date: datetime(year: 0, month: 1, day: 1), // Prüfungsdatum
     21   examiner: "",                              // PrüferIn (Prof)
     22   assistant: "",                             // BeisitzerIn
     23   grade_received: 0.0,                       // Note
     24   grade_reasonable: "",                      // War die Note angemessen?
     25   exam_duration: duration(minutes: 0),       // Prüfungsdauer
     26   attendance: (
     27   /* Veranstaltung, Dozent(in), Jahr, regelmäßig besucht? */
     28     event(name: "", lecturer: "", semester: "", did_attend: ""),
     29     event(name: "", lecturer: "", semester: "", did_attend: ""),
     30     event(name: "", lecturer: "", semester: "", did_attend: ""),
     31     event(name: "", lecturer: "", semester: "", did_attend: ""),
     32   ),
     33   attendance_worth: [
     34     // Hat sich der Besuch / Nichtbesuch der Veranstaltung für dich gelohnt?
     35   ],
     36   preparation_time: [
     37     // Wie lange und wie hast du dich alleine oder mit anderen auf die Prüfung vorbereitet?
     38   ],
     39   agreements: [
     40     // Fanden vor der Prüfung Absprachen zu Form oder Inhalt statt? Wurden sie eingehalten?
     41   ],
     42   preparations: [
     43     // Welche Tipps zur Vorbereitung kannst du geben?
     44   ],
     45   examiner_behavior: [
     46     // Wie war der Prüfungsstil des Prüfers / der Prüferin?
     47   ],
     48   examiner_recommendation: (none, [          // true, false
     49     // Kannst du ihn / sie weiterempfehlen? Warum?
     50   ]),
     51   examinee_behavior: [
     52     // Kannst Du Ratschläge für das Verhalten in der Prüfung geben?
     53   ],
     54   doc
     55 ) = [
     56   #let radiobox(checked: false) = if checked {$circle.filled$} else {$circle$}
     57 
     58   #show <study>: study
     59   #show <lecture>: lecture
     60   #show <date>: if date.year() > 0 {date.display("[day].[month].[year]")}
     61   #show <examiner>: examiner
     62   #show <assistant>: assistant
     63   #show <grade_received>: if grade_received > 0.0 {str(grade_received+0.01).slice(0,3).replace(".",",")}
     64   #show <grade_reasonable>: grade_reasonable
     65   #show <exam_duration>: if exam_duration.minutes() > 0 [#exam_duration.minutes()]
     66   #show <attendance_worth>: attendance_worth
     67   #show <preparation_time>: preparation_time
     68   #show <agreements>: agreements
     69   #show <preparations>: it => [#it #preparations]
     70   #show <examiner_behavior>: it => [#it #examinee_behavior]
     71   #show <examinee_behavior>: examiner_behavior
     72   #show <kind>: {
     73     for exam_kind in KIND.values().filter(it => it != KIND.NONE) [
     74       #radiobox(checked: kind == exam_kind) #exam_kind \
     75     ]
     76   }
     77   #show <examiner_recommendations>: [
     78     #let can_recommend = examiner_recommendation.at(0)
     79     #radiobox(checked: can_recommend == true) Ja \
     80     #radiobox(checked: can_recommend == false) Nein
     81 
     82     #examiner_recommendation.at(1)
     83   ]
     84   #show <attendance>: it => {
     85     let g = it.fields()
     86     let _ = g.remove("children")
     87     let _ = g.remove("label")
     88 
     89     table(..g,
     90       ..it.fields().children.at(0).children,
     91       ..(attendance + 4*(event(),)).slice(0,4).flatten()
     92     )
     93   }
     94 
     95   #include "muendliche-pruefung.typ"
     96 
     97   #doc
     98 ]
     99