Paginaweergave kan een lange voetnoot onderaan de pagina afknippen #1655

Closed
opened 2026-08-21 12:00:31 +00:00 by brenno · 1 comment
Owner

Probleem

Een voetnoot die onderaan hetzelfde vel moet staan wordt als één los, onderaan gepositioneerd blok behandeld. Als die noot plus tussenruimte hoger is dan de beschikbare pagina, kan zij niet over pagina's worden verdeeld en raakt zij buiten het vel afgeknipt/overlapt zij de hoofdtekst.

Reproductie

  1. Kies voetnoten onderaan de pagina.
  2. Maak één voetnoot langer dan de beschikbare teksthoogte van een vel.
  3. Open de paginaweergave.

Verwacht

Een te lange noot wordt veilig doorgeschoven of over pagina's verdeeld, zonder clipping of overlap.

Technische aanwijzing

lib/widgets/reader/paged_document_view.dart reserveert de volledige noothoogte bij één verwijzend blok en tekent de noot afzonderlijk onderaan één _sheet.

Gevonden bij audit van commit d439638c6b.

## Probleem Een voetnoot die onderaan hetzelfde vel moet staan wordt als één los, onderaan gepositioneerd blok behandeld. Als die noot plus tussenruimte hoger is dan de beschikbare pagina, kan zij niet over pagina's worden verdeeld en raakt zij buiten het vel afgeknipt/overlapt zij de hoofdtekst. ## Reproductie 1. Kies voetnoten onderaan de pagina. 2. Maak één voetnoot langer dan de beschikbare teksthoogte van een vel. 3. Open de paginaweergave. ## Verwacht Een te lange noot wordt veilig doorgeschoven of over pagina's verdeeld, zonder clipping of overlap. ## Technische aanwijzing lib/widgets/reader/paged_document_view.dart reserveert de volledige noothoogte bij één verwijzend blok en tekent de noot afzonderlijk onderaan één _sheet. Gevonden bij audit van commit d439638c6bd1b519d68d87680cb022b7d5eddc85.
Author
Owner

Triage: accepted

Bevestigd tegen main (e93ef205c). De noot eist ruimte op bij het blok dat ernaar verwijst (_reservedRoom, lib/widgets/reader/paged_document_view.dart) en wordt daarna als één Positioned(bottom: …) in de vel-Stack getekend. Die stack heeft de vaste velhoogte; een noot die hoger is dan het tekstvlak groeit naar boven weg en wordt afgeknipt of legt zich over de tekst heen.

documentPageOffsets vangt dit niet af: de tak height + reservedFor(index) > pageHeight (lib/services/document_pagination.dart) verdeelt het verwijzende blok over meerdere vensters, maar de noot zelf blijft één ondeelbaar ding op één vel.

Oplossingsrichting

Begrens wat een noot onderaan een vel mag opeisen. Is noothoogte + _noteGapPx groter dan het beschikbare tekstvlak, dan hoort die noot niet onderaan de bladzijde maar in de stroom — dat is de eindnotenweg, en die verdeelt zich al netjes over vellen. Concreet: in _notesPerPage/_reservedRoom de noten die niet passen apart houden, ze niet reserveren en niet onderaan tekenen, en ze als gewoon blok laten meelopen. Het merkteken en het nummer blijven staan, dus de lezer raakt de noot niet kwijt.

Tweede keus als dat te veel schuift: de noot laten afbreken over opeenvolgende vellen. Dat vraagt een noot-in-stukken-model en is een aanzienlijk grotere ingreep — niet nu.

Regressietest (verplicht)

test/paged_document_view_test.dart: footnotePlacement=page met één noot van ruim een paginahoogte → geen afknipping (de getekende noot past binnen het vel op elk vel) en de noottekst is in de boom aanwezig.

Kosten

Eén bestand, plus test. De lastige kant is dat noothoogtes pas ná de meetronde bekend zijn; de beslissing hoort dus in _onMeasured/_pages, niet in _measure.

Prioriteit

Middel: zeldzaam, maar de uitkomst is onleesbare of verdwenen tekst.

## Triage: accepted **Bevestigd tegen `main` (e93ef205c).** De noot eist ruimte op bij het blok dat ernaar verwijst (`_reservedRoom`, `lib/widgets/reader/paged_document_view.dart`) en wordt daarna als één `Positioned(bottom: …)` in de vel-`Stack` getekend. Die stack heeft de vaste velhoogte; een noot die hoger is dan het tekstvlak groeit naar boven weg en wordt afgeknipt of legt zich over de tekst heen. `documentPageOffsets` vangt dit niet af: de tak `height + reservedFor(index) > pageHeight` (`lib/services/document_pagination.dart`) verdeelt het *verwijzende blok* over meerdere vensters, maar de noot zelf blijft één ondeelbaar ding op één vel. ## Oplossingsrichting Begrens wat een noot onderaan een vel mag opeisen. Is `noothoogte + _noteGapPx` groter dan het beschikbare tekstvlak, dan hoort die noot niet onderaan de bladzijde maar in de stroom — dat is de eindnotenweg, en die verdeelt zich al netjes over vellen. Concreet: in `_notesPerPage`/`_reservedRoom` de noten die niet passen apart houden, ze niet reserveren en niet onderaan tekenen, en ze als gewoon blok laten meelopen. Het merkteken en het nummer blijven staan, dus de lezer raakt de noot niet kwijt. Tweede keus als dat te veel schuift: de noot laten afbreken over opeenvolgende vellen. Dat vraagt een noot-in-stukken-model en is een aanzienlijk grotere ingreep — niet nu. ## Regressietest (verplicht) `test/paged_document_view_test.dart`: `footnotePlacement=page` met één noot van ruim een paginahoogte → geen afknipping (de getekende noot past binnen het vel op elk vel) en de noottekst is in de boom aanwezig. ## Kosten Eén bestand, plus test. De lastige kant is dat noothoogtes pas ná de meetronde bekend zijn; de beslissing hoort dus in `_onMeasured`/`_pages`, niet in `_measure`. ## Prioriteit Middel: zeldzaam, maar de uitkomst is onleesbare of verdwenen tekst.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#1655
No description provided.