← typeset example-two-column.typ Download

example-two-column.typ

A conformance sample for the Typst implementation — two columns, equal. Rendered below from typeset.typ; the checker compiles it fresh on every commit.

two-column, page 1

91 lines · 3.6 KB

1// A conformance check for the two-column template.
2#import "typeset.typ": *
3
4#show: two-column.with(
5 front: [
6 #frontmatter-title-block(
7 title: [The Measure of a Column],
8 subtitle: [What changes when a page is divided in two, and what must not],
9 author: [Adilson Carvalho],
10 place-date: [Sydney, 28 August 2026],
11 )
12 #frontmatter-abstract(width: 100%)[
13 Dividing an A4 page into two equal columns leaves 82mm of measure. At the
14 single-column base of 11pt that carries 42 characters — below the floor at
15 which a line of prose stays readable. This note works through what a
16 two-column template must therefore change, and what it must leave alone.
17 ]
18 ],
19)
20
21== The arithmetic
22
23A4 is 210mm wide. Take off the standard margin, 20mm on each side, and 170mm of
24text width remains. A 6mm gutter divides it into two columns of 82mm.
25
26At 11pt, an 82mm column carries about 42 characters. This specification sets 45
27as the floor for a line of prose, so neither 11pt nor 10.5pt (44) is available
28here. Dropping the base to 9.5pt restores 49 characters, and every other step
29in the scale comes down with it.
30
31=== What follows from the size change
32
33Leading tightens from 1.45 to 1.4. A shorter line needs less vertical separation
34for the return sweep to stay unambiguous, and the saving is real: at 13.3pt of
35advance a column holds 54 lines instead of 45.
36
37Headings come down hardest. A 24pt level-2 heading inside an 82mm column spends
38three lines saying two words, so the scale runs 20/13/11/9.5 and the level-1
39heading keeps display size only because it spans both columns.
40
41#callout(title: [What does not change])[
42 The colour palette, the rule weights, the numeral conventions, the treatment of
43 quotations and the pagination rules are all identical. A template sets the page
44 and the scale; it does not get its own typography.
45]
46
47== Justification stops being optional
48
49At 49 characters a ragged right edge serrates the column visibly, and the word
50gaps in an unhyphenated justified column read as rivers. Both faults are
51tolerable at 66 characters and neither is tolerable here.
52
53#quote(type: "pullquote")[This is the one place the spec removes a choice it otherwise offers.]
54
55So the two-column template asserts justification rather than accepting it as a
56parameter. An implementation that offers ragged-right two columns is not
57conformant.
58
59=== Spanning
60
61An element spans both columns fully or neither. Spanning costs a break in both
62columns, so it is opt-in per instance and belongs at the top or the bottom of a
63page — interrupting both columns mid-page makes the reader find their place
64twice.
65
66#span(at-bottom: true)[
67 #figure(
68 caption: [Characters per line for an 82mm column, by base size. The floor is 45: 11pt and 10.5pt both fall short, 10pt clears it by two, and the template still drops one step further, to 9.5pt, for headroom rather than a bare pass.],
69 ts-table(
70 columns: (1fr, auto, auto, auto, auto, auto),
71 rows: 2,
72 table.header[Base size][11pt][10.5pt][10pt][9.5pt][9pt],
73 [Characters], [42], [44], [47], [49], [52],
74 [Conformant], [no], [no], [yes], [yes], [yes],
75 ),
76 )
77]
78
79== What the template forbids
80
81Sidenotes have nowhere to go: there is no margin left. They become footnotes or
82endnotes, and an implementation should degrade them visibly rather than
83positioning them off the page.
84
85A three-line drop cap at 3.05em is 29pt — 10mm of the column given to one
86letter. The opening words go in small caps instead.
87
88#frontmatter-colophon[
89 Set in EB Garamond, 9.5 on 13.3 points, two columns of 82mm with a 6mm gutter.
90 Composed in Typst.
91]