Compare commits

...

2 commits

Author SHA1 Message Date
orangerot f028dde18d feat(lib, mathe): template lib for Pruefungsfragebogen Mathematik 2025-09-05 07:17:39 +02:00
orangerot f8b904e1a5 feat: LICENSE and gitignore 2025-09-05 07:17:30 +02:00
6 changed files with 168 additions and 25 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
*.pdf

21
LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2025 Gero Beckmann <orangerot@orangerot.dev>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -1,3 +1,7 @@
// SPDX-FileCopyrightText: 2025 Gero Beckmann <orangerot@orangerot.dev>
//
// SPDX-License-Identifier: MIT
#let oral-post-exam(
lecture: "", // Fach
date: datetime(year: 0, month: 1, day: 1), // Prüfungsdatum

View file

@ -0,0 +1,110 @@
#let KIND = (:
"DIPLOM": "Diplomprüfung",
"STAATSEXAM": "Staatsexamensprüfung",
"STUDIENBEGLEITEND": "Studienbegleitende Prüfung",
"BACHELOR": "Bachelorprüfung",
"MASTER": "Masterprüfung",
"NONE": ""
)
#let oral-exam(
study: "", // Studiengang
lecture: "", // Fach
kind: KIND.NONE, // Prüfungsart (Diplom, Staatsexam, Studienbegleitend, Bachelor, Master)
date: datetime(year: 0, month: 1, day: 1), // Prüfungsdatum
examiner: "", // PrüferIn (Prof)
grade_received: 0.0, // Note
grade_reasonable: "", // War die Note angemessen?
exam_duration: duration(minutes: 0), // Prüfungsdauer
checked_knowledge_gaps: none, // Wurde Unwissen abgeprüft?
attendance: (
// Titel der Vorlesung, Dozent, Wann gehört, SWS, ECTS, LP
(lecture: "", lecturer: "", year: "", sws: "", ects: "", lp: ""),
(lecture: "", lecturer: "", year: "", sws: "", ects: "", lp: ""),
(lecture: "", lecturer: "", year: "", sws: "", ects: "", lp: ""),
(lecture: "", lecturer: "", year: "", sws: "", ects: "", lp: ""),
(lecture: "", lecturer: "", year: "", sws: "", ects: "", lp: ""),
),
attendance_worth: [
// Wie regelmäßig hast du die Lehrveranstaltungen besucht? Hat sich der
// Besuch/Nichtbesuch in der Prüfung positiv/negativ ausgewirkt?
],
literature: [
// Welche Literatur hast du benutzt (Bücher, Skripten, Vorlesungsmitschriften)?
],
preparation_time: [
// Hast du dich alleine/zu mehreren auf die Prüfung vorbereitet? Wie lange?
// Hat es etwas gebracht?
],
agreements: [
// Fanden vor der Prüfung Absprachen statt (Form, Inhalt, ...)?
// Wenn ja, welche? Wurden sie eingehalten?
],
preparations: [
// Welche Tipps zur Vorbereitung kannst du geben?
// (wichtige/unwichtige Teile des Stoffs, gute Literatur, Lernstil)
],
examiner_behavior: [
// Was kannst du zum Prüfungsstil des/der Prüfenden sagen?
// (Prüfungsatmosphäre, (un)klare Fragestellungen, Fragen nach Einzelheiten
// oder eher gröÿere Zusammenhänge, gezielte Zwischenfragen oder lässt
// er/sie dich erzählen, Weiterhelfen bei Unsicherheiten ...)
],
examiner_recommendation: (none, [
// Kannst du die Prüfenden weiterempfehlen?
]),
examinee_behavior: [
// Welche Ratschläge für das Verhalten in der Prüfung kannst du geben?
],
doc
) = [
#let checkbox(checked: false) = if (checked) {$times.square$} else {$square$}
#let input(width: 1fr, name: "", body) = box(width: width, height: 1em, inset: (bottom: 2pt), baseline: 2pt, stroke: (bottom: 0.5pt),align(right, [#body #label(name)]))
#let grid_arguments(it) = {
let g = it.fields()
let _ = g.remove("label")
let _ = g.remove("children")
return g
}
#show <study>: study
#show <lecture>: lecture
#show <date>: if date.year() > 0 {date.display("[day].[month].[year]")}
#show <examiner>: examiner
#show <literature>: literature
#show <preparation_time>: preparation_time
#show <attendance_worth>: attendance_worth
#show <agreements>: agreements
#show <preparations>: preparations
#show <exam_duration>: if exam_duration.minutes() > 0 {exam_duration.minutes()}
#show <examiner_behavior>: examiner_behavior
#show <examinee_behavior>: examinee_behavior
#show <grade_received>: if grade_received > 0.0 {str(grade_received+0.01).slice(0,3).replace(".",",")}
#show <grade_reasonable>: grade_reasonable
#show <examiner_recommendation>: examiner_recommendation.at(1)
#show <kind>: it => grid(..grid_arguments(it),
..KIND.values().filter(it => it != KIND.NONE).map(exam_kind => [
#checkbox(checked: kind == exam_kind) #exam_kind
]),
[#checkbox(checked: kind not in KIND.values() and kind != "")
#input(width: 1fr)[ #if kind not in KIND.values() [#kind] ]
]
)
#show <attendance>: it => table(..grid_arguments(it),
..it.fields().children.at(0).children,
..(attendance.map(lecture => lecture.values()).flatten() + 5*6*([],)).slice(0,count: 5*6)
)
#show <checked_knowledge_gaps>: [
#h(1fr)
#checkbox(checked: checked_knowledge_gaps == true) ja
#h(0.8cm)
#checkbox(checked: checked_knowledge_gaps == false) nein
]
#include "muendliche-pruefung.typ"
#doc
]
#oral-exam()[]

View file

@ -8,7 +8,8 @@
#show heading: it => box(inset: (bottom: 1em), it)
#let checkbox(checked: false) = if (checked) {$times.square$} else {$square$}
#let input(width: 1fr, body) = box(width: width, height: 1em, inset: (bottom: 2pt), baseline: 2pt, stroke: (bottom: 0.5pt),align(right, body))
#let input(width: 1fr, name: "", body) = box(width: width, height: 1em, inset: (bottom: 2pt), baseline: 2pt, stroke: (bottom: 0.5pt),align(right, [#body #label(name)]))
#let textfield(..args, name: "", body) = block(..args)[#body #label(name)]
#v(4em)
#align(center)[
@ -17,7 +18,7 @@
#text(size: 16pt)[der Fachschaft Mathematik]
#v(3.5em)
#block(width: 14cm)[
#textfield(width: 14cm)[
#align(left)[
#par(first-line-indent: (amount: 0.5em, all: true))[
Dieser Fragebogen dient dazu, den Studierenden, die nach dir die Prüfung
@ -36,15 +37,15 @@
[
_Welchen Studiengang/Profl studierst du?_
],
input[
input(name: "study")[
// Hier ist Platz für deinen Kommentar.
],
[
_Wann hast du die Prüfung abgelegt (Monat/Jahr)?_
],
input[
input(name: "date")[
// Hier ist Platz für deinen Kommentar.
]
],
)
_Was war es für eine Prüfung?_
@ -70,14 +71,14 @@ _Was war es für eine Prüfung?_
// Hier ist Platz für deinen Kommentar.
]
]
)
) <kind>
_Wer hat die Prüfung abgenommen?_ #input[
_Wer hat die Prüfung abgenommen?_ #input(name: "examiner")[
// Hier ist Platz für deinen Kommentar.
]
_Welche Vorlesungen wurden geprüft und bei wem hast du sie gehört?_
#block(height: 1em)[
#textfield(height: 1em, name: "lecture")[
// Hier ist Platz für deinen Kommentar.
]
@ -96,13 +97,13 @@ _Welche Vorlesungen wurden geprüft und bei wem hast du sie gehört?_
)}, rows: (auto,) + 5 * (2.5em,),
table.header[Titel der Vorlesung][Dozent][Wann gehört][SWS][ECTS][LP],
..(lectures + 5*6*([hi],)).slice(0,5*6)
)
) <attendance>
#pagebreak()
_Wie *regelmäßig* hast du die Lehrveranstaltungen besucht?
Hat sich der Besuch/Nicht- besuch in der Prüfung positiv/negativ ausgewirkt?_
#block(height: 1cm)[
#textfield(height: 1cm, name: "attendance_worth")[
// Hier ist Platz für deinen Kommentar.
]
@ -110,25 +111,25 @@ Hat sich der Besuch/Nicht- besuch in der Prüfung positiv/negativ ausgewirkt?_
== Vorbereitung auf die Prüfung
_Welche *Literatur* hast du benutzt (Bücher, Skripten, Vorlesungsmitschriften)?_
#block(height: 2cm)[
#textfield(height: 2cm, name: "literature")[
// Hier ist Platz für deinen Kommentar.
]
_Hast du dich *alleine/zu mehreren* auf die Prüfung vorbereitet? Wie lange?
Hat es etwas gebracht?_
#block(height: 1cm)[
#textfield(height: 1cm, name: "preparation_time")[
// Hier ist Platz für deinen Kommentar.
]
_Fanden vor der Prüfung *Absprachen* statt (Form, Inhalt ...)? Wenn ja, welche?
Wur- den sie eingehalten?_
#block(height: 3cm)[
#textfield(height: 3cm, name: "agreements")[
// Hier ist Platz für deinen Kommentar.
]
_Welche *Tipps* zur Vorbereitung kannst du geben? (wichtige/unwichtige Teile des
Stoffs, gute Literatur, Lernstil)_
#block(height: 3cm)[
#textfield(height: 3cm, name: "preparations")[
// Hier ist Platz für deinen Kommentar.
]
@ -142,7 +143,7 @@ Beweisen gefragt wurde, wo besonders nachgehakt wurde. Schreibe wenn möglich
auch auf, worauf der Prüfer hinaus wollte. Kennzeichne bitte Fragen, die
eigentlich nicht direkt zum Stoff gehören._
_Dauer der Prüfung?_ #input[
_Dauer der Prüfung?_ #input(name: "exam_duration")[
// Hier ist Platz für deinen Kommentar.
]
@ -150,18 +151,20 @@ _Was kannst du zum *Prüfungsstil* des/der Prüfenden sagen? (Prüfungsatmosphä
(un)klare Fragestellungen, Fragen nach Einzelheiten oder eher gröÿere
Zusammenhänge, gezielte Zwischenfragen oder lässt er/sie dich erzählen,
Weiterhelfen bei Unsicherhei- ten...)_
#block(height: 3cm)[
#textfield(height: 3cm, name: "examiner_behavior")[
// Hier ist Platz für deinen Kommentar.
]
_Wurde an Stelle deines Wissens auch dein Unwissen abgeprüft?_
#h(1fr)
#checkbox(checked: false) ja
#h(0.8cm)
#checkbox(checked: false) nein
#[
#h(1fr)
#checkbox(checked: false) ja
#h(0.8cm)
#checkbox(checked: false) nein
] <checked_knowledge_gaps>
_Welche *Ratschläge für das Verhalten* in der Prüfung kannst du geben?_
#block(height: 3.5cm)[
#textfield(height: 3.5cm, name: "examinee_behavior")[
// Hier ist Platz für deinen Kommentar.
]
@ -171,20 +174,20 @@ _Welche *Ratschläge für das Verhalten* in der Prüfung kannst du geben?_
[
_Welche Note hast du bekommen?_
],
input[
input(name: "grade_received")[
// Hier ist Platz für deinen Kommentar.
],
[
_Empfandest du sie als angemessen?_
],
input[
input(name: "grade_reasonable")[
// Hier ist Platz für deinen Kommentar.
],
[
_Kannst du die Prüfenden weiterempfehlen?_
],
input[
input(name: "examiner_recommendation")[
// Hier ist Platz für deinen Kommentar.
]
],
)

View file

@ -1,3 +1,7 @@
// SPDX-FileCopyrightText: 2025 Gero Beckmann <orangerot@orangerot.dev>
//
// SPDX-License-Identifier: MIT
#let kind = (:
"wahlpflicht": "Wahlpflicht",
"vertiefungsfach": "Vertiefungsfach",