summaryrefslogtreecommitdiff
path: root/raster.typ
blob: 22bbe485e39096a8efffc983f91c35ceca759281 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#let raster(
  paper: "a4",
  grid: 6mm,
  show-grid: false,
  body: 11pt,
  scale-base: 1.2,
  rest,
) = {
  let scale(l) = body * calc.pow(scale-base, 4 - l)
  let gridsize(l) = (
    size: scale(l),
    top-edge: calc.ceil(scale(l).mm() / grid.mm()) * grid,
  );

  let gridround(body) = context {
    let size = measure(body);
    box(height: calc.ceil(size.height.mm() / grid.mm()) * grid)[
      #set align(horizon)
      #body
    ]
  };

  set page(
    paper: paper,
    margin: (
      inside: grid * 6,
      rest: grid * 4,
    ),
  );
  set page(
    background: rect(
      width: 100%,
      height: 100%,
      fill: tiling(size: (grid, grid), {
        place(line(start: (0%, 0%), end: (100%, 0%), stroke: 2pt + rgb("#ccc")));
        place(line(start: (0%, 0%), end: (0%, 100%), stroke: 2pt + rgb("#ccc")));
      }),
    ),
  ) if show-grid;

  set text(
    font: "TeX Gyre Schola",
    ..gridsize(4)
  );
  set par(
    justify: true,
    leading: 0pt,
    spacing: 0pt,
    first-line-indent: grid,
  );
  set block(
    above: grid,
    below: 0pt,
  );
  set heading(
    numbering: "1.1",
  );

  show heading: it => block(
    above: grid,
    below: 0pt,
    text(
      baseline: grid / -4,
      ..gridsize(it.level),
    )[
      #counter(heading).display()
      #sym.dot
      #it.body
    ]
  );

  show figure: it => block(
    above: grid,
    below: grid,
  )[
    #gridround(it.body)
    #it.caption
  ]

  rest
}