From d7aa0164e38b2a632dbdd187aec4735861386f1b Mon Sep 17 00:00:00 2001 From: orangerot Date: Mon, 8 Sep 2025 14:13:40 +0200 Subject: style(lib, pruefung): reduce redundancy by include bachelor.typ in lib --- muendliche-pruefung/lib.typ | 193 ++++++++++---------------------------------- 1 file changed, 44 insertions(+), 149 deletions(-) (limited to 'muendliche-pruefung/lib.typ') diff --git a/muendliche-pruefung/lib.typ b/muendliche-pruefung/lib.typ index ea9194c..bc593ae 100644 --- a/muendliche-pruefung/lib.typ +++ b/muendliche-pruefung/lib.typ @@ -2,17 +2,17 @@ // // SPDX-License-Identifier: MIT -#let kind = (: - "wahlpflicht": "Wahlpflicht", - "vertiefungsfach": "Vertiefungsfach", - "ergaenzungsfach": "Ergänzungsfach", - "none": "" +#let KIND = (: + "WAHLPFLICHT": "Wahlpflicht", + "VERTIEFUNGSFACH": "Vertiefungsfach", + "ERGAENZUNGSFACH": "Ergänzungsfach", + "NONE": "" ) #let oral-exam( study: "", // Studiengang lecture: "", // Fach - kind: kind.none, // Prüfungsart (Wahlpflicht, Vertiefungsfach, Ergänzungsfach) + kind: KIND.NONE, // Prüfungsart KIND.{WAHLPFLICHT, VERTIEFUNGSFACH, ERGUENZUNGSFACH} date: datetime(year: 0, month: 1, day: 1), // Prüfungsdatum examiner: "", // PrüferIn (Prof) assistant: "", // BeisitzerIn @@ -41,7 +41,7 @@ examiner_behavior: [ // Wie war der Prüfungsstil des Prüfers / der Prüferin? ], - examiner_recommendation: (none, [ + examiner_recommendation: (none, [ // true, false // Kannst du ihn / sie weiterempfehlen? Warum? ]), examinee_behavior: [ @@ -49,155 +49,50 @@ ], doc ) = [ - #set page("a4", margin: 1.1cm) - #set text(lang: "de", size: 10pt) - #set grid(column-gutter: .5cm, inset: (bottom: 10pt)) - #set table(stroke: 0.5pt) - #show emoji.hand.write: box(height: 10pt, clip: true, scale(x:-100%)[🖎]) - #show table.cell: it => block(inset: (bottom: 4pt, rest: 8pt), box(height: 1em, it.body)) #let radiobox(checked: false) = if checked {$circle.filled$} else {$circle$} - #let input(width: 1fr, body) = box(width: width, height: 1em, inset: (bottom: 2pt), baseline: 2pt, stroke: (bottom: (dash: "loosely-dotted")),align(right, body)) - #let question(q, body) = [ - #grid(columns: 2, inset: 0pt, emoji.hand.write, box(inset: (top: 3pt))[*#q*]) - #body - ] - - #page([ - #grid(columns: 2 * (1fr,), - [ - #v(1em) - #grid(columns: 2, - image(width: 1.8cm, "fsmi-logo.svg"), - text(size: 15pt)[ - Fragebogen der Fachschaft zu - *mündlichen Prüfungen* \ - im Informatikstudium - ]) - ], - [ - ], - [],[ - #align(center)[Barcode:] - ], - par(justify: true)[ - Dieser Fragebogen gibt den Studierenden, die nach dir die Prüfung ablegen - wollen, einen Einblick in Ablauf und Inhalt der Prüfung. Das erleichtert die - Vorbereitung. \ - Bitte verwende zum Ausfüllen einen schwarzen Stift. Das erleichtert das - Einscannen. \ - Vielen Dank für deine Mitarbeit! - ], - [ - #grid( - columns: (.1cm, 1fr, .1cm), - rows: (.1cm, 2.5cm, .1cm), - stroke: (x,y) => (: - top: if x != 1 and y == 0 {.5pt}, - bottom: if x != 1 and y == 2 {.5pt}, - left: if y != 1 and x == 0 {.5pt}, - right: if y != 1 and x == 2 {.5pt}, - )) - #v(2em) - ], - [ - Dein Sudiengang: #input[#study] - - Prüfungsart: - #let module_kinds = ( - "Wahlpflicht", - "Vertiefungsfach", - "Ergänzungsfach", - ) - #for module_kind in module_kinds [ - \ #radiobox(checked: kind == module_kind) #module_kind - ] - - Welches? #input[#lecture] - ], - [ - #grid(columns: (auto, 1fr), - [Prüfungsdatum:], input[#if date.year() > 0 {date.display("[day].[month].[year]")}], - [Prüfer(in): ], input[#examiner], - [Beisitzer(in):], input[#assistant], - ) - ]) - - #let modules = attendance + 4 * ((lecture: "", lecturer: "", year: "", did_attend: ""),) - - *Prüfungsfächer und Vorbereitung:* - - #table(columns: 4 * (1fr,), row-gutter: (2pt, ..(3*(0pt,))), - table.header[Veranstaltung][Dozent(in)][Jahr][regelmäßig besucht?], - ..modules.map(((lecture, lecturer, year, did_attend)) => - (lecture, lecturer, year, did_attend) - ).slice(0,4).flatten() - ) - - #v(1em) - #grid(columns: 2 * (1fr,),[ - Note: #input[#if grade_received > 0.0 {str(grade_received+0.01).slice(0,3).replace(".",",")}] - ],[ - Prüfungsdauer:#input[#if exam_duration.minutes() > 0 {exam_duration.minutes()}] Minuten - ]) - - #v(1em) - War diese Note angemessen? #input[#grade_reasonable] - - #v(1em) - #question[Wie war der Prüfungsstil des Prüfers / der Prüferin?][ - Prüfungsatmosphäre, (un)klare Fragestellungen, Frage nach Einzelheiten oder eher größeren Zusammenhängen, kamen häufiger Zwi- - schenfragen oder ließ er/sie dich erzählen, wurde dir weitergeholfen, wurde in Wissenslücken gebohrt? - - #examiner_behavior + #show : study + #show : lecture + #show : if date.year() > 0 {date.display("[day].[month].[year]")} + #show : examiner + #show : assistant + #show : if grade_received > 0.0 {str(grade_received+0.01).slice(0,3).replace(".",",")} + #show : grade_reasonable + #show : if exam_duration.minutes() > 0 [#exam_duration.minutes()] + #show : attendance_worth + #show : preparation_time + #show : agreements + #show : it => [#it #preparations] + #show : examiner_behavior + #show : it => [#it #examinee_behavior] + #show : { + for exam_kind in KIND.values().filter(it => it != KIND.NONE) [ + #radiobox(checked: kind == exam_kind) #exam_kind \ ] + } + #show : [ + #let can_recommend = examiner_recommendation.at(0) + #radiobox(checked: can_recommend == true) Ja \ + #radiobox(checked: can_recommend == false) Nein - ], footer: [#h(1fr)$arrow.r.hook$ *Rückseite bitte nicht vergessen!*]) - - #page()[ - #grid(rows: (3 * (22em,)), columns: 2 * (1fr,), - question[ - Hat sich der Besuch / Nichtbesuch der Veran- - staltung für dich gelohnt? - ][#attendance_worth], - question[ - Kannst du ihn / sie weiterempfehlen? Warum? \ \ - ][ - #radiobox(checked: examiner_recommendation.at(0) == true) Ja \ - #radiobox(checked: examiner_recommendation.at(0) == false) Nein - - #examiner_recommendation.at(1) - ], - question[ - Wie lange und wie hast du dich alleine oder - mit anderen auf die Prüfung vorbereitet? - ][#preparation_time], - question[ - Fanden vor der Prüfung Absprachen zu Form - oder Inhalt statt? Wurden sie eingehalten? - ][#agreements], - question[ - Welche Tipps zur Vorbereitung kannst du ge-\ ben? - ][ - Wichtige / unwichtige Teile des Stoffes, gute Bücher / Skrip- - ten, Lernstil, ... - - #preparations - ], - question[ - Kannst du Ratschläge für das Verhalten in der - Prüfung geben? - ][#examinee_behavior] + #examiner_recommendation.at(1) + ] + #show : it => { + let g = it.fields() + let _ = g.remove("children") + let _ = g.remove("label") + let events = attendance.map(((lecture, lecturer, year, did_attend)) => + (lecture, lecturer, year, did_attend) + ).flatten() + + table(..g, + ..it.fields().children.at(0).children, + ..(events + 4*4*([],)).slice(0,4*4) ) + } - *Inhalte der Prüfung (bitte auf weitere Blätter):* + #include "bachelor.typ" - #set list(spacing: 1.2em, indent: 1.5em) - - Schreibe bitte möglichst viele Fragen und Antworten auf. - - Wo wurde nach Herleitungen oder Beweisen gefragt oder sonstwie nachgehakt? - - Worauf wollte der Prüfer / die Prüferin hinaus? - - Welche Fragen gehörten nicht zum eigentlichen Stoff? - ] #doc ] -- cgit v1.2.3