feat(documentmodus): voetnoten, breedte en zoom, een kop die niet alleen blijft, en pijltjes in een tabel #1554
No reviewers
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!1554
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/documenteditor-schrijfcomfort"
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 er opviel tijdens het werken in een document
Vier waarnemingen, en wat elk ervan bleek te zijn.
1. De volle breedte gebruiken kon niet, zoomen helemaal niet
De instelling Schrijfbreedte editor had een optie "volledige breedte" die
niets leek te doen. Ze deed ook niets: de visuele stand trok de schrijfbreedte
naar die van het vel zodra de pagina-einden aanstonden, en die staan
standaard aan. Eén schakelaar stuurde twee losse dingen, en degene die de
gebruiker zag was de verkeerde.
Ze zijn nu uit elkaar. De werkbalk kiest de breedte — Paginabreedte,
Leeskolom, Volledige breedte — want dat is een keuze die je tijdens het
schrijven maakt: even het hele scherm voor een brede tabel, daarna terug naar
het vel. Ernaast staat een zoom (− / percentage / +) met
Cmd/Ctrl +,−en0. Buiten Paginabreedte worden de streepjeslijnen niet meer getekend en zegtde knop waarom: op een andere maat breekt het vel ergens anders dan de lijn
aanwijst.
De zoom is meetkundig eerlijk gemaakt: hij schaalt de tekst, de kolombreedte
én de paginahoogte waarmee de einden worden gerekend, alledrie met dezelfde
factor. Daardoor valt een pagina-einde op 250% op precies dezelfde plek in de
tekst als op 50%. In de Pagina's-stand schaalt hij het vel zelf — via
PagedDocumentView.scale, een parameter die al bestond maar die niemanddoorgaf — met een horizontale rol voor wat dan niet meer in het venster past.
2. Een kop bleef alleen onderaan een blad achter
De paginaverdeling kende alleen blokhoogtes, dus een kop kon prima het laatste
zijn wat op een vel paste. De regel die erbij komt: onder een kop moeten op
hetzelfde vel nog minstens twee regels tekst passen, geteld over zoveel
volgende blokken als nodig — anders schuift de kop mee. Twee regels en niet één,
want een kop met één losse regel eronder leest niet beter dan een kop die
helemaal alleen staat; dat was ook precies hoe de melding luidde.
Twee koppen op elkaar reizen als groep, en een te hoge tabel neemt de kop
erboven mee in plaats van een vers vel te eisen en hem achter te laten. Geldt in
de Pagina's-stand, in de streepjeslijnen van de schrijfstand, en bij het
afdrukken van de HTML-export (
break-after: avoidplus weduwen/wezen). LaTeXdeed dit al uit zichzelf.
3. Voetnoten
Op schijf de voetnootschrijfwijze van Pandoc, die GitHub en Obsidian ook lezen —
[^1]in de tekst,[^1]: …eronder. Het merkteken is het volgnummer inleesvolgorde; het label blijft van de auteur en blijft onaangeroerd in het
bestand staan, dus een noot ertussen voegen hernummert niets met de hand. Een
[^abc]zonder definitie blijft letterlijke tekst.Waar ze landen staat per document in de front matter, als
reference-location: document— een sleutel die Pandoc en Quarto zélfuitvoeren. De standaard (onderaan de bladzijde) schrijft niets: een document
dat niets bijzonders wil, blijft een
.mdzonder front matter. ZieFILE_FORMAT.md §14.9.
In de Pagina's-stand staan de noten echt onderaan het blad waar de verwijzing
valt. De ruimte ervoor hangt aan het blok dat de noot aanhaalt en niet aan de
pagina: schuift dat blok door, dan schuift de noot mee en komt de ruimte hier
vanzelf weer vrij. Dat is de reden dat dit in één doorloop kan in plaats van net
zo lang heen en weer te rekenen tot het stil ligt.
In de visuele editor reizen ze als twee embeds mee — de verwijzing inline,
de definitie als blok op zijn eigen plek. Bewust twee: met één embed die tekst
én merkteken droeg, zou de definitie bij de eerste bewerking naar de verwijzing
verhuizen, en dat is precies wat een byte-getrouwe documentmodus niet mag doen.
Daarmee vervalt de laatste reden waarom één voetnoot je terugwierp in de
brontekst.
4. Pijltjes in een tabelcel deden niets herkenbaars
Ze verplaatsten de cursor binnen de cel en liepen daarna dood (of schoten de
tekst buiten de tabel in). Nu doen ze wat een rekenblad doet: ←/→ lopen eerst
door de celtekst en springen aan de rand naar de buurcel, ↑/↓ gaan een rij op of
neer zodra de cursor de boven- of onderste regel heeft bereikt. Geen doorloop
voorbij de rand van de tabel — daarvoor is Tab, die de tabel ook laat groeien.
De regel staat op één plek en geldt voor de documenttabel én de diabouwer: twee
tabellen die anders op een pijltje reageren is precies wat een mens niet
begrijpt.
Afweging (bewaker)
Het formaat is de kern hier, en die houdt stand: alles wat er in het
.mdbelandt is Pandoc-vocabulaire dat andere gereedschappen uitvoeren, er komt geen
eigen sleutel bij, geen nieuwe afhankelijkheid en geen nieuwe partij om te
vertrouwen. Houdt OciDeck morgen op te bestaan, dan rendert Pandoc het document
inclusief de gekozen notenplaatsing.
Eén botsing, hardop: een voetnootdefinitie die in de bron over meerdere
ingesprongen regels stond, komt na een bewerking in de visuele editor als één
regel terug. De tekst is identiek, alleen de regelval in de bron niet. Dat
verzwakt de byte-getrouwheid van §14.3 in dat ene geval. Het alternatief was
voetnoten als bron-terugval houden, en dan is de visuele stand precies bij deze
functie onbruikbaar. Uitwisselbaarheid houdt stand (de bytes blijven geldige
Pandoc-voetnoten), dus die kant heeft voorrang gekregen — met de beperking in
FILE_FORMAT.md §14.9 in plaats van stilzwijgend. Ik verander van gedachten zodra
noten van meerdere alinea's gewoon worden: dan hoort de definitie-embed de
regelstructuur zelf te dragen.
Toetsing
Regressietests per onderdeel, elk één keer rood gezien tegen de onherstelde
code: de opmaakregels als pure tests op
documentPageOffsets(kopregel én degereserveerde ruimte voor noten), de voetnoot-ontleding, de round-trip door de
rijke-tekstlaag, de celnavigatie, de werkbalk met breedte en zoom, en beide
exportwegen. De projectie document → deck → document is apart vastgepind, want
daar reist een noot doorheen op weg naar de export.
Niet met eigen ogen gekeurd. Dit is visueel werk en dat vraagt een
beeldkeuring in de draaiende app; de schermtoegang werd geweigerd, dus die ronde
staat nog open. De widget-tests bevestigen de waarden en de boom, niet of het er
goed uitziet.
Poorten
make checkgroen (9781 tests, dekking 87,0%, per-bestandsvloer 0),make check-secretsgroen,make sastgroen (0 findings). DAST niet gedraaid —deze wijziging raakt geen geserveerd oppervlak.
pubspec.yamlongewijzigd, dusgeen SBOM-ronde.