#import "@preview/tablex:0.0.7": tablex, cellx #import "/tpl.typ": apply, signature, list-of-assignments, apply-page-borders #apply(page-numbering: "(i)" , [ #let heading-format(content) = cellx(align: center + horizon, content) #let column-alignments = (right, auto, center + horizon, center + horizon, auto) #let preprocess-alist(assignment-list, last-page-number) = { let index = 0 let last-index = assignment-list.len() - 1 let page-number-list = () while index < last-index { let item = assignment-list.at(index) let next-item = assignment-list.at(index + 1) let starting-page-number = item.page-number let finishing-page-number = next-item.page-number - 1 page-number-list.push((starting-page-number, finishing-page-number)) index = index + 1 } page-number-list.push((assignment-list.at(last-index).page-number, last-page-number)) let new-assignment-list = () index = 0 for (start, end) in page-number-list { let page-number = if start == end [#start] else [#start - #end] let assignment = assignment-list.at(index) let serial-number = [#{assignment.number}. ] let description = stack(dir: ltr, v(5em), assignment.description) let item = (serial-number, description, page-number, assignment.date, []) new-assignment-list.push(item) index = index + 1 } new-assignment-list } #list-of-assignments((assignment-list, last-page-number) => { counter(page).update(1) align(center, [== Contents]) tablex( columns: (3em, 1fr, 4em, 6em, 11em), stroke: 1pt + gray, repeat-header: true, map-cols: (i, cells) => (cells.first(), ..cells.slice(1).map(cell => (..cell, align: column-alignments.at(i)))), heading-format[*Sl.* \ *No.*], heading-format[*Description*], heading-format[*Page No.*], heading-format[*Date*], heading-format[*Teacher’s* \ *Signature*], ..preprocess-alist(assignment-list, last-page-number).flatten(), ) // signature() }) ]) #colbreak()