Skip to content

Points Table

The points-table function generates a summary table of all (or selected) questions and their point values.

#points-table(orientation: <str>, columns: <auto|array>, score: <bool>, ...)
ParameterTypeDefaultDescription
orientationstr"vertical""vertical" = questions as rows; "horizontal" = questions as columns
columnsauto or arrayautoWhich columns to show
scoreboolfalseAppend a blank “Score” column for hand-grading
fill-scoresboolfalseFill score cells with max points when answers shown
totalauto, number, or dictautoOverride the total row
depthint1How many levels of hierarchy to show
questionsauto or arrayautoFilter to specific question numbers
group-by-parentboolfalseShow parent questions as header rows
max-per-groupnone or intnoneAuto-split into sub-tables
labelsdictionary(:)Override display labels
renderauto or functionautoCustom renderer
#examst-set(
  render-question-counter: it => numbering("1.", it.get().last()),
)

#question(points: 10)[Why is there air?]
#question(points: 15)[Explain gravity.]
#question(points: 20)[What is energy?]

#align(center, points-table())
#examst-set(
  render-question-counter: it => numbering("1.", it.get().last()),
)

#question(points: 10)[Why is there air?]
#question(points: 15)[Explain gravity.]
#question(points: 20)[What is energy?]

#align(center, points-table(orientation: "horizontal"))
#examst-set(
  render-question-counter: it => numbering("1.", it.get().last()),
)

#question(points: 10)[Why is there air?]
#question(points: 15)[Explain gravity.]
#question(points: 20)[What is energy?]

#align(center, points-table(score: true))
#examst-set(
  render-question-counter: it => numbering("1.", it.get().last()),
)

#question(points: 10)[Warum gibt es Luft?]
#question(points: 15)[Erklären Sie die Schwerkraft.]

#align(center, points-table(
  score: true,
  labels: (
    question: "Aufgabe",
    points: "Punkte",
    score: "Note",
    total: "Summe",
  ),
))

For exams with many questions, split the table into manageable groups:

// Vertical: splits side-by-side
#align(center, points-table(max-per-group: 5))
// Horizontal: stacks vertically
#align(center, points-table(
orientation: "horizontal",
max-per-group: 5,
))