Hoppa till innehåll

Etapp 1 - Layoutmotor

Sidplanering och paginering

Layoutmotorn styr två arbetslägen som avgörs av issues.page_model: print för tryck (multiplar av 4) och screen för skärm (dynamiskt, inga fasta sidantal).


01

Tryckpaginering: multiplar av 4

Tryckta nummer måste planeras i 4-sidorsintervall eftersom tryckpressen kräver det. Databasen tvingar fram detta på databasnivå, inte bara i applikationslogik.

CHECK (
    page_model = 'screen' OR
    target_pages IS NULL OR
    (target_pages % 4) = 0
)

Ett trycknummer med target_pages = 84 accepteras; 86 avvisas. Skärmnummer är undantagna.


02

Spaltnätsberäkning

Samma ekvation som Typst-motorn använder, så att planerad layout och färdig PDF överensstämmer.

spaltbredd_mm = (textytabredd_mm - (antal_spalter - 1) × spaltavstånd_mm) / antal_spalter
textytabredd_mm = sidbredd_mm - vänstermarginal_mm - högermarginal_mm

03

Planeringens tabeller

Fyra tabeller styr nummer, sektioner och placeringar.

issues
Ett nummer/utgivning. Innehåller sidmodell, status, target_pages, actual_pages och layout_locked-flagga.
issue_sections
Sektioner i numret (t.ex. Ledare, Fördjupning, Medlemsnyheter) för att organisera innehållet.
pages
En sida med sidnummer, format, underordnad sektion och status (empty / planned / locked / exported).
page_placements
Vilka artiklar som ligger var i spaltnätet: columns_span, slot (JSON för kolumn/rad/höjd i mm) och sort.