summaryrefslogtreecommitdiff
path: root/muendliche-pruefung
diff options
context:
space:
mode:
Diffstat (limited to 'muendliche-pruefung')
-rw-r--r--muendliche-pruefung/bachelor.typ180
-rw-r--r--muendliche-pruefung/lib.typ193
-rw-r--r--muendliche-pruefung/muendliche-pruefung.typ4
3 files changed, 226 insertions, 151 deletions
diff --git a/muendliche-pruefung/bachelor.typ b/muendliche-pruefung/bachelor.typ
new file mode 100644
index 0000000..12d0b92
--- /dev/null
+++ b/muendliche-pruefung/bachelor.typ
@@ -0,0 +1,180 @@
+#set page("a4", margin: 1.1cm, footer: context if counter(page).get() == (1,) [#h(1fr)$arrow.r.hook$ *Rückseite bitte nicht vergessen!*])
+#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%)[🖎])
+#let radiobox(checked: false) = if checked {$circle.filled$} else {$circle$}
+#let input(width: 1fr, name: "", body) = box(width: width, height: 1em, inset: (bottom: 2pt), baseline: 2pt, stroke: (bottom: (dash: "loosely-dotted")),align(right, [#body #label(name)]))
+#let question(name: "", question, body) = [
+ #grid(columns: 2, inset: 0pt, emoji.hand.write, box(inset: (top: 3pt))[*#question*])
+
+ #body #label(name)
+]
+
+#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(name: "study")[
+ // Hier ist Platz für deinen Kommentar.
+ ]
+
+ Prüfungsart: \
+ #[
+ #radiobox(checked: false) Wahlpflicht \
+ #radiobox(checked: false) Vertiefungsfach \
+ #radiobox(checked: false) Ergänzungsfach \
+ ] <kind>
+
+ Welches? #input(name: "lecture")[
+ // Hier ist Platz für deinen Kommentar.
+ ]
+ ],
+ [
+ #grid(columns: (auto, 1fr),
+ [Prüfungsdatum:],
+ input(name: "date")[
+ // Hier ist Platz für deinen Kommentar.
+ ],
+ [Prüfer(in):],
+ input(name: "examiner")[
+ // Hier ist Platz für deinen Kommentar.
+ ],
+ [Beisitzer(in):],
+ input(name: "assistant")[
+ // Hier ist Platz für deinen Kommentar.
+ ],
+ )
+ ],
+)
+
+*Prüfungsfächer und Vorbereitung:*
+
+#table(columns: 4 * (1fr,), row-gutter: (2pt, ..(3*(0pt,))), rows: 2em, align: horizon,
+ table.header(
+ [Veranstaltung],[Dozent(in)],[Jahr],[regelmäßig besucht?]),
+ [ ],[ ],[ ],[ ],
+ [ ],[ ],[ ],[ ],
+ [ ],[ ],[ ],[ ],
+ [ ],[ ],[ ],[ ],
+) <attendance>
+
+#v(1em)
+#grid(columns: 2 * (1fr,),
+ [
+ Note:
+ #input(name: "grade_received")[
+ // Hier ist Platz für deinen Kommentar.
+ ]
+ ],
+ [
+ Prüfungsdauer:
+ #input(name: "exam_duration")[
+ // Hier ist Platz für deinen Kommentar.
+ ] Minuten
+ ],
+)
+
+#v(1em)
+War diese Note angemessen?
+#input(name: "grade_reasonable")[
+ // Hier ist Platz für deinen Kommentar.
+]
+
+#v(1em)
+#question(name: "examiner_behavior")[
+ 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?
+
+ // Hier ist Platz für deinen Kommentar.
+]
+
+#pagebreak()
+
+#grid(rows: (3 * (22em,)), columns: 2 * (1fr,),
+ question(name: "attendance_worth")[
+ Hat sich der Besuch / Nichtbesuch der Veran- staltung für dich gelohnt?
+ ][
+ // Hier ist Platz für deinen Kommentar.
+ ],
+ question(name: "examiner_recommendations")[
+ Kannst du ihn / sie weiterempfehlen? Warum?
+ ][
+ #radiobox(checked: false) Ja \
+ #radiobox(checked: false) Nein
+
+ // Hier ist Platz für deinen Kommentar.
+ ],
+ question(name: "preparation_time")[
+ Wie lange und wie hast du dich alleine oder mit anderen auf die Prüfung vorbereitet?
+ ][
+ // Hier ist Platz für deinen Kommentar.
+ ],
+ question(name: "agreements")[
+ Fanden vor der Prüfung Absprachen zu Form oder Inhalt statt? Wurden sie eingehalten?
+ ][
+ // Hier ist Platz für deinen Kommentar.
+ ],
+ question(name: "preparations")[
+ Welche Tipps zur Vorbereitung kannst du ge-\ ben?
+ ][
+ Wichtige / unwichtige Teile des Stoffes, gute Bücher / Skrip- ten, Lernstil, ...
+
+ // Hier ist Platz für deinen Kommentar.
+ ],
+ question(name: "examinee_behavior")[
+ Kannst du Ratschläge für das Verhalten in der Prüfung geben?
+ ][
+ // Hier ist Platz für deinen Kommentar.
+ ],
+)
+
+*Inhalte der Prüfung (bitte auf weitere Blätter):*
+#[
+ #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?
+]
+
+#colbreak()
+
+// Hier ist Platz für deinen Kommentar.
+
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>: study
+ #show <lecture>: lecture
+ #show <date>: if date.year() > 0 {date.display("[day].[month].[year]")}
+ #show <examiner>: examiner
+ #show <assistant>: assistant
+ #show <grade_received>: if grade_received > 0.0 {str(grade_received+0.01).slice(0,3).replace(".",",")}
+ #show <grade_reasonable>: grade_reasonable
+ #show <exam_duration>: if exam_duration.minutes() > 0 [#exam_duration.minutes()]
+ #show <attendance_worth>: attendance_worth
+ #show <preparation_time>: preparation_time
+ #show <agreements>: agreements
+ #show <preparations>: it => [#it #preparations]
+ #show <examiner_behavior>: examiner_behavior
+ #show <examinee_behavior>: it => [#it #examinee_behavior]
+ #show <kind>: {
+ for exam_kind in KIND.values().filter(it => it != KIND.NONE) [
+ #radiobox(checked: kind == exam_kind) #exam_kind \
]
+ }
+ #show <examiner_recommendations>: [
+ #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 <attendance>: 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
]
diff --git a/muendliche-pruefung/muendliche-pruefung.typ b/muendliche-pruefung/muendliche-pruefung.typ
index ef2ea4d..40e8da0 100644
--- a/muendliche-pruefung/muendliche-pruefung.typ
+++ b/muendliche-pruefung/muendliche-pruefung.typ
@@ -1,9 +1,9 @@
-#import "lib.typ": oral-exam, kind
+#import "lib.typ": oral-exam, KIND
#show: oral-exam.with(
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