82 lines
1.6 KiB
Typst
82 lines
1.6 KiB
Typst
|
#import "@preview/cetz:0.2.2": coordinate
|
||
|
|
||
|
#let val(value, alignment) = {
|
||
|
return (
|
||
|
type: "value",
|
||
|
value: value,
|
||
|
alignment: alignment
|
||
|
)
|
||
|
}
|
||
|
|
||
|
#let disc(eod: false, ..args) = {
|
||
|
let pargs = args.pos()
|
||
|
let left = pargs.at(0, default: (none, none))
|
||
|
let right = pargs.at(1, default: (none, none))
|
||
|
let center = pargs.at(2, default: (none, none))
|
||
|
|
||
|
let kwargs = args.named()
|
||
|
if "left" in kwargs { left = kwargs.left }
|
||
|
if "right" in kwargs { right = kwargs.right }
|
||
|
if "center" in kwargs { center = kwargs.center }
|
||
|
|
||
|
let (value-l, alignment-l) = left
|
||
|
let (value-r, alignment-r) = right
|
||
|
let (value-c, alignment-c) = center
|
||
|
return (
|
||
|
type: "discontinuity",
|
||
|
left: (
|
||
|
value: value-l,
|
||
|
alignment: alignment-l,
|
||
|
),
|
||
|
right: (
|
||
|
value: value-r,
|
||
|
alignment: alignment-r,
|
||
|
),
|
||
|
center: (
|
||
|
value: value-c,
|
||
|
alignment: alignment-c,
|
||
|
),
|
||
|
eod: eod
|
||
|
)
|
||
|
}
|
||
|
|
||
|
#let inter(value, start, end, i: auto) = {
|
||
|
return (
|
||
|
type: "intermediate",
|
||
|
value: value,
|
||
|
start: start,
|
||
|
end: end,
|
||
|
i: i,
|
||
|
)
|
||
|
}
|
||
|
|
||
|
#let get-anchor(
|
||
|
ctx,
|
||
|
line-i,
|
||
|
i,
|
||
|
alignment,
|
||
|
side,
|
||
|
dx: .1,
|
||
|
dy: .1
|
||
|
) = {
|
||
|
let (_, anchor) = coordinate.resolve(ctx, "anchor-" + str(i))
|
||
|
let (_, header-t) = coordinate.resolve(ctx, "header-" + str(line-i) + ".north")
|
||
|
let (_, header-b) = coordinate.resolve(ctx, "header-" + str(line-i) + ".south")
|
||
|
|
||
|
let x = anchor.at(0)
|
||
|
if side == "left" {
|
||
|
x -= dx
|
||
|
} else if side == "right" {
|
||
|
x += dx
|
||
|
}
|
||
|
|
||
|
let yt = header-t.at(1)
|
||
|
let yb = header-b.at(1)
|
||
|
let y = (yt + yb) / 2
|
||
|
if alignment == "top" {
|
||
|
y = yt - dy
|
||
|
} else if alignment == "bottom" {
|
||
|
y = yb + dy
|
||
|
}
|
||
|
return (x, y)
|
||
|
}
|