PDF-export: sub-hoofdstuk (##/###/####) geen weeskop, houdt 1-2 regels mee #1758
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#1758
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Wat wordt gevraagd
Bij de PDF-export mag een sub-hoofdstuk (
##,###,####) nooit als laatste regel onderaan een pagina staan (weeskop / orphan). Bovendien: als er onder zon kop maar 1-2 regels tekst op dezelfde pagina passen, dan verhuist het geheel (kop + die regels) naar de volgende pagina (keep-with-next).Onderzoek
De PDF-export gebruikt
pw.MultiPageuitpackage:pdfvoor paginering (lib/services/pdf/document_pdf_renderer.dart:200-238).MultiPagedeelt de blokken zelf over bladzijden — er is geen keep-with-next- of widow/orphan-logica aanwezig.De blokkenlaag (
lib/services/pdf/document_pdf_blocks.dart) kent welPdfPageBreakBlock(een expliciet pagina-einde), maar geen "blijf-met-het-volgende-blok"-markering. EenPdfHeadingBlockis gewoon het volgende blok in de lijst;MultiPageplaatst het waar het past, ook als dat de laatste regel van een bladzijde is.De widgets-laag (
lib/services/pdf/document_pdf_widgets.dart) zet elk blok om in éénpw.Widgeten geeft die lijst aanMultiPage.build. Er is geen hook om te zeggen "deze kop hoort bij het blok eronder."package:pdfsMultiPagebiedt geen native keep-with-next. De enige widgets die over een bladovergang mogen lopen zijnFlex,Table,Wrap,ColumnenRichTextopspan(zie de kop-opmerking indocument_pdf_widgets.dart:8-16). EenColumndie de kop én het volgende blok samen houdt, zou dus over een bladzijde heen mogen lopen — maar breekt dan wél binnen het blok, wat bij een lange alinea niet de bedoeling is.Voorgestelde oplossing
Voeg een "keep-with-next"-regel toe in de blokkenlaag, zodat deze toetsbaar is zonder een PDF te hoeven renderen:
Nieuw blok of markering: voeg een
keepWithNext-veld toe aanPdfHeadingBlock(of een apartePdfKeepWithNextBlock-wrapper), dat aangeeft dat dit blok niet als laatste op een pagina mag staan. Voor H2-H4 zet de converter dit optrue.Pagineringslogica: in
document_pdf_widgets.dartde blokkenlijst groeperen: een kop metkeepWithNextwordt samen met het volgende blok in éénpw.Columngeplaatst. OmdatColumnover een bladovergang mag lopen, schuiftMultiPagehet geheel naar de volgende pagina wanneer het niet meer past. Voor de "1-2 regels"-regel: deColumnbevat de kop + het eerste volgende blok (alinea). Past dat geheel niet, dan verhuist de heleColumn.Begrenzing: de
Columnbevat maximaal de kop + één blok (niet de hele sectie), anders kan een lange sectie niet meer breken en slaat de export stuks. Deponytail:-commentaarregel benoemt dit plafond.Tests: in
test/pdf/een test die een blokkenlijst met een H2 onderaan een bijna-vol vel voert aan de renderer en controleert dat de H2 op de volgende pagina landt. De blokkenlaag-test controleert datkeepWithNextop H2-H4 staat en niet op H1.Impact
.md-bron verandert niet.\section/\subsectionhebben al keep-with-next in LaTeX), dus daar is geen wijziging nodig.