|
9 | 9 | #let bblock(it, ..args) = context { |
10 | 10 | let def = default-settings.get() |
11 | 11 | let step = def.texts.step |
| 12 | + let ascender = def.texts.ascender |
12 | 13 |
|
13 | 14 | set text(top-edge: "bounds", bottom-edge: "bounds") |
14 | 15 | let height = measure({ |
15 | 16 | set text(top-edge: "bounds", bottom-edge: "bounds") |
16 | 17 | it |
17 | 18 | }).height |
18 | | - let desired-height = calc.round(height / step) |
19 | | - block(v(step * 2 / 3), spacing: 0pt, sticky: true) |
| 19 | + let desired-height = calc.round(height / step) + 1 |
20 | 20 | block( |
21 | 21 | height: desired-height * step, |
| 22 | + inset: (top: (step - ascender) / 2), |
22 | 23 | align(horizon, it), |
23 | | - // stroke: 1pt, |
24 | 24 | above: 0pt, |
25 | 25 | below: step, |
26 | | - sticky: true, |
27 | 26 | ..args, |
28 | 27 | ) |
29 | | - block(v(step / 3), spacing: 0pt, sticky: true) |
| 28 | +} |
| 29 | + |
| 30 | + |
| 31 | +#let true-metrics(eq) = { |
| 32 | + let total = measure(text( |
| 33 | + top-edge: "bounds", |
| 34 | + bottom-edge: "bounds", |
| 35 | + eq, |
| 36 | + )) |
| 37 | + let strut-height = 1000pt |
| 38 | + let strut = box( |
| 39 | + width: 0pt, |
| 40 | + height: strut-height, |
| 41 | + baseline: 0pt, |
| 42 | + ) |
| 43 | + |
| 44 | + let combined = measure(text( |
| 45 | + top-edge: "bounds", |
| 46 | + bottom-edge: "bounds", |
| 47 | + eq + strut, |
| 48 | + )) |
| 49 | + |
| 50 | + let descender = combined.height - strut-height |
| 51 | + let ascender = total.height - descender |
| 52 | + |
| 53 | + return ( |
| 54 | + height: total.height, |
| 55 | + ascender: ascender, |
| 56 | + descender: descender, |
| 57 | + ) |
30 | 58 | } |
31 | 59 |
|
32 | 60 | #let place-side(it, dx: 0pt, dy: 0pt, ..args) = context { |
|
37 | 65 | let half-gutter = def.side.half-gutter |
38 | 66 | let e-margin = def.margin.e |
39 | 67 | let text-height = def.texts.ascender |
| 68 | + let two-sided = def.paper.two-sided |
40 | 69 |
|
41 | 70 | let page-num = here().page() |
42 | | - let move = if calc.even(page-num) { |
| 71 | + let move = if calc.even(page-num) or not two-sided { |
43 | 72 | -side-width - half-gutter + dx |
44 | 73 | } else { |
45 | 74 | t-width + half-gutter + dx |
46 | 75 | } |
47 | | - let flush = if calc.even(page-num) { |
| 76 | + let flush = if calc.even(page-num) or not two-sided { |
48 | 77 | right |
49 | 78 | } else { |
50 | 79 | left |
|
69 | 98 | #let place-node(sym, dy: 0pt) = context { |
70 | 99 | let def = default-settings.get() |
71 | 100 | let half-gutter = def.side.half-gutter |
| 101 | + let two-sided = def.paper.two-sided |
72 | 102 | let page-num = here().page() |
73 | 103 | let width = measure(sym).width |
74 | | - let dx = if calc.even(page-num) { |
| 104 | + let dx = if calc.even(page-num) or not two-sided { |
75 | 105 | half-gutter + width / 2 |
76 | 106 | } else { |
77 | 107 | -half-gutter - width / 2 |
|
96 | 126 | let f-margin = def.margin.f |
97 | 127 | let step = def.texts.step |
98 | 128 | let ascender = def.texts.ascender |
| 129 | + let two-sided = def.paper.two-sided |
99 | 130 |
|
100 | 131 | let page-num = counter(page).get().first() |
101 | | - let is-odd = calc.odd(page-num) |
| 132 | + let is-odd = calc.odd(page-num) and two-sided |
102 | 133 |
|
103 | 134 | // Get the total number of sblocks in the document |
104 | 135 | let total-blocks = counter("__obelisk_sblock-id") |
|
279 | 310 |
|
280 | 311 | #let sidenote(it, dy: 0pt) = context { |
281 | 312 | let def = default-settings.get() |
| 313 | + let two-sided = def.paper.two-sided |
282 | 314 | let page-num = here().page() |
283 | 315 | let posx = here().position().x |
284 | 316 | sym.wj |
285 | | - let dx = if calc.even(page-num) { |
| 317 | + let dx = if calc.even(page-num) or not two-sided { |
286 | 318 | -posx + def.margin.e |
287 | 319 | } else { |
288 | 320 | -posx + def.margin.s |
|
0 commit comments