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