Hoppa till innehåll

Etapp 1 - PDF-motor

Typst-motor för PDF

Typst-motorn i typst/ producerar tryckfärdiga PDF:er med millimeterprecision och mikrotypografi. Den läser samma värden som layoutmotorn använder, så att planerad layout och färdig PDF överensstämmer.


01

Installera & kompilera

Etapp 1 levererar källfilerna. Använd kommandona nedan för att bygga exempel-PDF:en lokalt på Macen.

# brew install typst

# typst compile --root typst typst/main.typ typst/output.pdf

Filerna använder relativa #import "lib.typ"-sökvägar, därav --root typst.


02

Filstruktur

Tre Typst-filer och ett JSON-datakontrakt.

typst/lib.typ
Motorn: sidgeometri (mm), mikrotypografi, spaltnät, mm-to-pt-konverterare.
typst/template.typ
Byggblock för varje artikelmodul: rubrik(), ingress(), faktaruta(), etc.
typst/main.typ
Referenspipeline som sätter en komplett artikelsida via byggblocken.
typst/example.json
Datakontraktet från SQLite till Typst: profil, format, spaltnät och ordnade moduler.

03

Mikrotypografi

doc-setup i lib.typ aktiverar följande typografiska inställningar.

Medgärda (hyphenation)
Aktiverad med lang: sv, region: SE. Typst bryter svenska ord automatiskt.
Ligaturer & kerning
Aktiverade. Optisk storlek via features: (opt: true) för renare teckenformer.
Glesning (tracking)
Brödtext +0.2pt för förbättrad läsbarhet i satt text.
Justering
Brödtext justerad med par(justify: true) enligt trycktidningspraxis.

04

Milimeterprecision

Alla geometriska mått används konsekvent mellan layoutmotorn och Typst.

Sid-/marginalmått
Millimeter. width: 210mm, margin-top: 18mm, bleed: 3mm.
Teckengrad
Punkt. body-size: 10.5pt, body-leading: 16pt.
mm-to-pt-konvertering
En plats i lib.typ: 1 pt = 72/25.4 mm. col-width-mm beräknar spaltbredd med samma ekvation som layoutmotorn.

05

Datakontrakt (databas → Typst)

Varje article_modules.kind renderas av motsvarande byggblock i template.typ i samma ordning som i databasen.

article_modules.kindtemplate.typ
headlinerubrik()
decknedryckare()
ledeingress()
subheadmellanrubrik()
bodybrödtext()
pull_quotecitat()
fact_boxfaktaruta()
bylinebyline()
sourceskällblock()
imagebild()