#import "palette.typ": * #let envc = counter("environment") #let count(counter, follows) = { let c = counter; if c == auto { c = envc; } if type(c) == str { c } else if not follows { c.step() context c.display() } else { context c.display() } } #let environment(body, name: "Environment", subtitle: none, counter: auto, follows: false, boxed: true, margin: 2.5cm, scheme: light) = [ #v(10pt) // #v(margin + 2pt) #pad(block( width: 100% + 2*margin, inset: (left: margin, right: margin, top: 1em, bottom: 1em), fill: scheme.env.bg, stroke: (top: scheme.env.stroke, bottom: scheme.env.stroke), breakable: true, text(fill: scheme.env.fg)[ #place( block( fill: scheme.env.bg, inset: .4em, radius: .2em, stroke: scheme.env.title-stroke, )[ #text( name + if counter != none { " " + count(counter, follows) } + if subtitle != none { ":" }, weight: if not follows { "bold" } else { "regular" }, style: if follows { "italic" } else { "normal" }, fill: scheme.env.fg ) #if cite != none { subtitle } ], dx: -3em, dy: -1.8em ) #body ]), left: -margin, right: margin) // top: -margin - 2pt, // bottom: -margin - 2pt) // #v(margin + 2pt) ] #let environment_(body, name: "Environment", counter: auto, follows: false, boxed: true, margin: 2.5cm, scheme: light) = { scheme.env.insert("bg", scheme.bg) scheme.env.insert("title-stroke", none) scheme.env.insert("stroke", scheme.env.sub-stroke) environment(body, name: name, counter: counter, follows: follows, boxed: boxed, margin: margin, scheme: scheme) }