Compare commits

...

1 commit

Author SHA1 Message Date
orangerot 88a4cc128e fix(lib, nachpruefung): reduce redundancy by include bachelor.typ in lib 2025-09-07 10:28:58 +02:00
2 changed files with 172 additions and 235 deletions

View file

@ -2,123 +2,157 @@
#set text(lang: "de", size: 10.5pt) #set text(lang: "de", size: 10.5pt)
#set par(justify: true, leading: .5em, spacing: 0.5em) #set par(justify: true, leading: .5em, spacing: 0.5em)
#set block(spacing: 0pt) #set block(spacing: 0pt)
#set table(inset: (top: 2pt, x: 8pt), stroke: .5pt) #set table(inset: (top: 2pt, bottom: 4pt, x: 8pt), stroke: .5pt)
#set grid(inset: (y: 3pt, x: 6pt)) #set grid(inset: (y: 3pt, x: 6pt))
#set grid.vline(stroke: .5pt) #set grid.vline(stroke: .5pt)
#let checkbox(b) = if (b) {$times.square$} else {$square$}
#set linebreak(justify: true) #set linebreak(justify: true)
#show underline: it => box(it) #let checkbox(checked: false) = if (checked) {$times.square$} else {$square$}
#let input(width: 1fr, name: "", body) = box(width: width, inset: (bottom: 2pt), baseline: 2pt, stroke: (bottom: (dash: "dotted")),align(right, [#body #label(name)]))
#let textarea(name: "", body) = [#body #label(name)]
#show emoji.pencil: "✎" #show emoji.pencil: "✎"
#let pruefungsrahmen = (
"Prüfungsdatum": [],
"PrüferIn (Prof.)": [],
"BeisitzerIn": [],
)
#let modul = ""
#let bestanden = none
#let pruefungsdauer_minuten = 0
#grid(columns: (2cm, 15cm), align: bottom, #grid(columns: (2cm, 15cm), align: bottom,
box(inset: (x: 3pt), image(width: 1.3cm, "fsmi-logo.svg")), box(inset: (x: 3pt), image(width: 1.3cm, "fsmi-logo.svg")),
[ [
#set text(size: 15pt) #set text(size: 15pt)
#set par(spacing: 3pt) #set par(spacing: 3pt)
Fragebogen der Fachschaft zu Fragebogen der Fachschaft zu
*mündlichen Vordiplomsprüfungen* im Informatikstudium *mündlichen Vordiplomsprüfungen* im Informatikstudium
]) ]
#grid(columns: 2*(1fr,), grid.vline(x:1), [
Dieser Fragebogen gibt den KommilitonInnen, die nach
Dir die Prüfung ablegen wollen, einen Einblick in Ab-
lauf und Inhalt der Prüfung. Das erleichtert die Vorbe-
reitung.
Bitte verwende zum Ausfüllen einen schwarzen Stift.
Das erleichtert das Einscannen.
#for (key,value) in pruefungsrahmen {box(inset: (top: 1.2em), [*#key:*#box(width: 1fr, repeat[.])#value])}
],
[
#block(width: 7cm, inset: .3cm, align(center, [
Barcode:
#grid(
columns: (.1cm, 7.8cm, .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},
))
]))
*Fach:* \
#let modules = (
"Algo I",
"Algo II",
"Betriebssysteme",
"GdI",
"HM",
"KomDat",
"Programmierparadigmen",
"SWT I",
"Theoretische Grundlagen der Informatik",
"TI",
) )
#for (module) in modules {box(inset: (right: 5pt))[#checkbox(false) #module]}
]) #grid(columns: 2*(1fr,), grid.vline(x:1),
#table(columns: (7.4cm,2.4cm,8.2cm), [
table.header( Dieser Fragebogen gibt den KommilitonInnen, die nach
Dir die Prüfung ablegen wollen, einen Einblick in Ab-
lauf und Inhalt der Prüfung. Das erleichtert die Vorbe-
reitung.
Bitte verwende zum Ausfüllen einen schwarzen Stift.
Das erleichtert das Einscannen.
#box(height: 2em, align(bottom)[
*Prüfungsdatum:*#input(name: "date")[
// Hier ist Platz für deinen Kommentar.
]
])
#box(height: 2em, align(bottom)[
*PrüferIn (Prof.):*#input(name: "examiner")[
// Hier ist Platz für deinen Kommentar.
]
])
#box(height: 2em, align(bottom)[
*BeisitzerIn:*#input(name: "assistant")[
// Hier ist Platz für deinen Kommentar.
]
])
],
[
#block(width: 7cm, inset: (top: 1.5em, bottom: .3cm, rest: .2cm), align(center,
[
Barcode: #v(2pt)
#grid(
columns: (.1cm, 7.8cm, .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},
))
]))
*Fach:* \
#set box(height: .5em, inset: (left: 5pt))
#textarea(name: "lecture", {
// box[#checkbox(checked: true) Dein Fach]
box[#checkbox() Algo I]
box[#checkbox() Algo II]
box[#checkbox() Betriebssysteme]
box[#checkbox() GdI]
box[#checkbox() HM]
box[#checkbox() KomDat]
box[#checkbox() Programmierparadigmen]
box[#checkbox() SWT I]
box[#checkbox() Theoretische Grundlagen der Informatik]
box[#checkbox() TI]
})
]
)
#table(columns: (7.4cm,2.4cm,8.2cm), table.header(
[Veranstaltung ],[Jahr],[regelmäßig besucht?]), [Veranstaltung ],[Jahr],[regelmäßig besucht?]),
[*Vorlesung*#v(.2cm)],[ ],[ ], [Vorlesung ],[ ],[ ],
[*Übung* #v(.2cm)],[ ],[ ], [Übung ],[ ],[ ],
[*Tutorium* #v(.2cm)],[ ],[ ], [Tutorium ],[ ],[ ],
) ) <attendance>
#grid(columns: 2*(1fr,), grid.vline(x:1), inset: (y: .5cm), #grid(columns: 2*(1fr,), inset: (y: .5cm), grid.vline(x:1),
[*Bestanden? #checkbox(bestanden == true) Ja / #checkbox(bestanden == false) Nein*], textarea(name: "did_pass")[
*Bestanden?
#checkbox(checked: false) Ja /
#checkbox(checked: false) Nein*
],
box(width: 6cm)[ box(width: 6cm)[
*Prüfungsdauer: #box(width: 1fr, repeat[.]) *Prüfungsdauer: #input(name: "exam_duration")[
#if (pruefungsdauer_minuten > 0) {pruefungsdauer_minuten} // Hier ist Platz für deinen Kommentar.
]
Minuten* Minuten*
]) ]
)
#grid(columns: 2*(1fr,), rows: (3.5cm,2.8cm,7.3cm), grid.vline(x:1), #grid(columns: 2*(1fr,), rows: (3.5cm,2.8cm,7.3cm), grid.vline(x:1),
[ [
#emoji.pencil Wie lange und wie hast Du Dich #emoji.pencil Wie lange und wie hast Du Dich \
#underline[alleine bzw. mit anderen vorbereitet]? #underline[alleine bzw. mit anderen vorbereitet]?
], #textarea(name: "preparation_time")[
grid.cell(rowspan: 2)[ // Hier ist Platz für deinen Kommentar.
#emoji.pencil Welche #underline[Tips zur Vorbereitung] kannst Du geben? \ ]
#text(size: 8.5pt)[(Wichtige / Unwichtige Teile des Stoffes, gute Bücher / Skripten, Lernstil)] ],
], grid.cell(rowspan: 2)[
[ #emoji.pencil Welche #underline[Tips zur Vorbereitung] kannst Du geben? \
#emoji.pencil Fanden vor der Prüfung #underline[Absprachen] zu Form oder #text(size: 8.5pt)[(Wichtige / Unwichtige Teile des Stoffes, gute Bücher / Skripten, Lernstil)]
Inhalt statt? Wurden sie #underline[eingehalten]? #textarea(name: "preparations")[
], // Hier ist Platz für deinen Kommentar.
[ ]
#emoji.pencil Kannst Du Ratschläge für das #underline[Verhalten in der Prüfung] geben? ],
], [
[ #emoji.pencil Fanden vor der Prüfung #underline[Absprachen] zu Form oder
#emoji.pencil Wie war der #underline[Prüfungsstil des Prüfers / der Prüferin?] \ Inhalt statt? Wurden sie #underline[eingehalten]?
#text(size: 8.5pt)[(Prüfungsathmosphäre, (un)klare Fragestellungen, Fragen nach \ #textarea(name: "agreements")[
Einzelheiten oder eher größeren Zusammenhängen, kamen häufiger Zwischenfragen // Hier ist Platz für deinen Kommentar.
oder ließ er/sie Dich erzählen, wurde Dir weitergeholfen, wurde in Wissenslücken ]
gebohrt?)] ],
] [
#emoji.pencil Kannst Du Ratschläge für das \ #underline[Verhalten in der Prüfung] geben?
#textarea(name: "examinee_behavior")[
// Hier ist Platz für deinen Kommentar.
]
],
[
#emoji.pencil Wie war der #underline[Prüfungsstil des Prüfers / der Prüferin?] \
#text(size: 8.5pt)[
(Prüfungsathmosphäre, (un)klare Fragestellungen, Fragen nach \
Einzelheiten oder eher größeren Zusammenhängen, kamen häufiger
Zwischenfragen oder ließ er/sie Dich erzählen, wurde Dir weitergeholfen,
wurde in Wissenslücken gebohrt?)
]
#textarea(name: "examiner_behavior")[
// Hier ist Platz für deinen Kommentar.
]
]
) )
#line(length: 100%, stroke: .5pt) #line(length: 100%, stroke: .5pt)
#v(2pt) #v(2pt)
#[ #text(size: 13pt)[*Inhalte der Prüfung:*] $-->$ Bitte auf die Rückseite und weitere Blätter!
#text(size: 13pt)[*Inhalte der Prüfung:*] $-->$ Bitte auf die Rückseite und weitere Blätter! #v(1.2em)
#v(1.2em)
#set list(spacing: 1.2em, indent: 1.5em) #set list(spacing: 1.2em, indent: 1.5em)
- Schreibe bitte möglichst viele Fragen und Antworten auf. - Schreibe bitte möglichst viele Fragen und Antworten auf.
- Wo wurde nach Herleitungen oder Beweisen gefragt oder sonstwie nachgehakt? - Wo wurde nach Herleitungen oder Beweisen gefragt oder sonstwie nachgehakt?
- Worauf wollte der Prüfer / die Prüferin hinaus? - Worauf wollte der Prüfer / die Prüferin hinaus?
- Welche Fragen gehörten nicht zum eigentlichen Stoff? - Welche Fragen gehörten nicht zum eigentlichen Stoff?
]
#colbreak()
// Hier ist Platz für deinen Kommentar.

View file

@ -32,142 +32,45 @@
], ],
doc doc
) = [ ) = [
#set page("a4", margin: (top: 1cm, bottom: 0cm, rest: 1.55cm)) #let checkbox(checked: false) = if (checked) {$times.square$} else {$square$}
#set text(lang: "de", size: 10.5pt)
#page[
#set par(justify: true, leading: .5em, spacing: 0.5em)
#set block(spacing: 0pt)
#set table(inset: (top: 2pt, bottom: 4pt, x: 8pt), stroke: .5pt)
#set grid(inset: (y: 3pt, x: 6pt))
#set grid.vline(stroke: .5pt)
#set linebreak(justify: true)
#let checkbox(b) = if (b) {$times.square$} else {$square$}
#let input(width: 1fr, body) = box(width: width, inset: (bottom: 2pt), baseline: 2pt, stroke: (bottom: (dash: "dotted")),align(right, body))
#show emoji.pencil: "✎"
#grid(columns: (2cm, 15cm), align: bottom, #let events = (
box(inset: (x: 3pt), image(width: 1.3cm, "fsmi-logo.svg")), "Vorlesung": (year: "", did_attend: ""),
[ "Übung": (year: "", did_attend: ""),
#set text(size: 15pt) "Tutorium": (year: "", did_attend: ""),
#set par(spacing: 3pt) ..attendance
Fragebogen der Fachschaft zu )
*mündlichen Vordiplomsprüfungen* im Informatikstudium #show <date>: if date.year() > 0 {date.display("[day].[month].[year]")}
]) #show <examiner>: examiner
#grid(columns: 2*(1fr,), grid.vline(x:1), [ #show <assistant>: assistant
Dieser Fragebogen gibt den KommilitonInnen, die nach #show <exam_duration>: if exam_duration.minutes() > 0 [#exam_duration.minutes()]
Dir die Prüfung ablegen wollen, einen Einblick in Ab- #show <preparation_time>: preparation_time
lauf und Inhalt der Prüfung. Das erleichtert die Vorbe- #show <agreements>: agreements
reitung. #show <preparations>: preparations
#show <examinee_behavior>: examinee_behavior
Bitte verwende zum Ausfüllen einen schwarzen Stift. #show <examiner_behavior>: examiner_behavior
#show <did_pass>: [
Das erleichtert das Einscannen. *Bestanden?
#checkbox(checked: did_pass == true) Ja /
#let pruefungsrahmen = ( #checkbox(checked: did_pass == false) Nein*
"Prüfungsdatum": if date.year() > 0 {date.display("[day].[month].[year]")},
"PrüferIn (Prof.)": examiner,
"BeisitzerIn": assistant,
)
#for (key,value) in pruefungsrahmen {
box(height: 2em, align(bottom)[*#key:*#input(value)])
}
],
[
#block(width: 7cm, inset: (top: 1.5em, bottom: .3cm, rest: .2cm), align(center,
[
Barcode: #v(2pt)
#grid(
columns: (.1cm, 7.8cm, .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},
))
]))
*Fach:* \
#v(-2pt)
#let modules = if lecture.len() > 0 {(lecture,)} else {(
"Algo I",
"Algo II",
"Betriebssysteme",
"GdI",
"HM",
"KomDat",
"Programmierparadigmen",
"SWT I",
"Theoretische Grundlagen der Informatik",
"TI",
)}
#for module in modules.flatten() {
box(height: .5em, inset: (left: 5pt))[#checkbox(lecture.len() > 0) #module]
}
])
#let events = (
"Vorlesung": (year: "", did_attend: ""),
"Übung": (year: "", did_attend: ""),
"Tutorium": (year: "", did_attend: ""),
..attendance
)
#table(columns: (7.4cm,2.4cm,8.2cm),
table.header(
[Veranstaltung ],[Jahr],[regelmäßig besucht?]),
..events.pairs().map(((location, (year, did_attend))) =>
(box(height: 1.2em)[*#location*], [#year], [#did_attend])
).flatten()
)
#grid(columns: 2*(1fr,), grid.vline(x:1), inset: (y: .5cm),
[*Bestanden? #checkbox(did_pass == true) Ja / #checkbox(did_pass == false) Nein*],
box(width: 6cm)[
*Prüfungsdauer: #input[
#if (exam_duration.minutes() > 0) {exam_duration.minutes()}
]
Minuten*
])
#grid(columns: 2*(1fr,), rows: (3.5cm,2.8cm,7.3cm), grid.vline(x:1),
[
#emoji.pencil Wie lange und wie hast Du Dich \
#underline[alleine bzw. mit anderen vorbereitet]?
#preparation_time
],
grid.cell(rowspan: 2)[
#emoji.pencil Welche #underline[Tips zur Vorbereitung] kannst Du geben? \
#text(size: 8.5pt)[(Wichtige / Unwichtige Teile des Stoffes, gute Bücher / Skripten, Lernstil)]
#preparations
],
[
#emoji.pencil Fanden vor der Prüfung #underline[Absprachen] zu Form oder
Inhalt statt? Wurden sie #underline[eingehalten]?
#agreements
],
[
#emoji.pencil Kannst Du Ratschläge für das \ #underline[Verhalten in der Prüfung] geben?
#examinee_behavior
],
[
#emoji.pencil Wie war der #underline[Prüfungsstil des Prüfers / der Prüferin?] \
#text(size: 8.5pt)[(Prüfungsathmosphäre, (un)klare Fragestellungen, Fragen nach \
Einzelheiten oder eher größeren Zusammenhängen, kamen häufiger Zwischenfragen
oder ließ er/sie Dich erzählen, wurde Dir weitergeholfen, wurde in Wissenslücken
gebohrt?)]
#examiner_behavior
])
#line(length: 100%, stroke: .5pt)
#v(2pt)
#text(size: 13pt)[*Inhalte der Prüfung:*] $-->$ Bitte auf die Rückseite und weitere Blätter!
#v(1.2em)
#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?
] ]
#show <lecture>: it => if lecture.len() > 0 {
box[#checkbox(checked: true) #lecture]
} else {it}
#show <attendance>: it => {
let g = it.fields()
let _ = g.remove("children")
let _ = g.remove("label")
table(..g,
..it.fields().children.at(0).children,
..events.pairs().map(((location, (year, did_attend))) =>
(box(height: 1.2em)[*#location*], [#year], [#did_attend])).flatten()
)
}
#include "bachelor.typ"
#doc #doc
] ]