De uitdaging: zinnen die beginnen met Een, U, We, Wij, Het, De, Je, enzovoorts mogen niet op het eind van de regel starten. In dat geval moet het automatisch door naar de volgende regel.
Eerst tekenstijl aanmaken in InDesign
Eerst maak je een tekenstijl aan die letters bijeen houdt. Dat kun je doen door te kiezen voor ‘Geen onderbreking’ bij de eigenschappen van een nieuwe tekenstijl. In het Hamburgermenu rechts van de bliksem in het besturingspalet heet deze functie overigens ‘Niet Afbreken’.
Deze tekenstijl pas je toe op de volgende situatie (stel het in bij GREP in je alineastijl-definitie):
((?<=[\.\?\!]s).\s)|((?<=[\.\?\!]s)..\s)|((?<=[\.\?\!]s)...\s)
Dat is nogal een hoop instructie, maar het werkt wèl. Je kunt de code vanaf hier ook gewoon kopiëren en plakken. InDesign en GREP vinden automatisch de zinnen die beginnen met een woord van 1, 2, of 3 tekens (. .. en … gevolgd door een willekeurige spatie \s). In het voorbeeld zijn die gemarkeerd met groen. Op die tekens met die spatie er achter wordt de tekenstijl ‘BijeenHouden’ toegepast. Maar alleen maar als die woorden het begin van een nieuwe zin markeren. Een nieuwe zin is er een die voorafgegaan is door een andere zin. Een markering voor het einde van een andere zin is dat die eindigt op een punt, vraagteken of uitroepteken gevolgd door een willekeurige spatie. Het voorafgaan is gedefinieerd door (?<=), waarbij de blauwe tekst steeds staat voor wàt er aan vooraf gaat: een punt, een vraagteken of een uitroepteken.
Het is raar dat het kan, maar profiteer er van!
Kortere manier om InDesign en GREP te combineren
Ooit heeft een bezoeker van mijn website hier eens naar gekeken. Hij reageerde: “Wat doe je ingewikkeld. Die code kan toch veel korter?” Het kan inderdaad nog korter: in plaats van die lange regel kun je ook kiezen voor
(?<=[\.\?\!]\s).{1,3}\s
Nu is het aantal tekens (1, 2 of 3) met een willekeurige spatie er achter gewoon vervangen door .{1,3}\s
En nog beter: ook met aanhalingstekens
In het bovenstaande voorbeeld hou je geen rekening met uitspraken in de tekst, die vaak worden voorzien van aanhalingstekens. En dan kan een uitspraak die begint met “U… toch nog verkeerd uitpakken. Hoe los je dat op? Door de code nog verder aan te passen. InDesign en GREP to the rescue!
(?<=[\.\?\!("|')?]\s)("|')?.{1,3}\s
Nu kan een voorgaande zin dus ook een uitspraak zijn. De aanhalingstekens staan dan achter de punt, het uitroepteken of het vraagteken. En de nieuwe zin die begint met een kort woord kan óók een uitspraak zijn.
Grep gebruiken bij Zoeken & Wijzigen om de content te veranderen
Je houdt natuurlijk wel dat de tekst het zelfde blijft: je past er alleen maar andere vormgeving op toe. De tekenstijl kan bij sommige export wel meegenomen worden (ePub bijvoorbeeld) zodat je in de CSS van je vloeibare ePub nog een instructie nodig hebt om dit ook in de ePub goed te laten gaan. Denk bijvoorbeeld aan whitespace: nowrap. Maar je kunt ook argumenten hebben om de tekst echt aan te passen. Er staat dan een vaste spatie in de tekst, in plaats van een gewone spatie met andere vormgeving. Met InDesign en GREP wordt de code dan:
([\.\?\!])(\s)(.{1,3})(\s)
Dat is de code voor de tekst waar je naar zoekt. Dat is het einde van een zin, een willekeurige spatie, een woord van 1 tot 3 tekens, en een willekeurige spatie. Al deze ‘units’ zijn omgeven door ronde haakjes. Daardoor kunnen ze als aparte eenheid gevonden worden. Wij kunnen dan zelf bepalen wat daar mee moet gebeuren. In bovenstaand voorbeeld zijn er dus vier ‘units’. Alleen de laatste willen we dan veranderen, want die moet een vaste spatie worden. De code daarvoor is ~S. Omdat we de eerste drie ‘units’ niet kwijt willen, kun je die aanduiden met $1, $2, $3.
$1$2$3~S
Je kunt helaas niet een Zoek&Wijzig opdracht maken waar nog misschien een extra unit in zit. Zoek&Wijzig in InDesign is heel rechtlijnig. Als je een zoekopdracht wilt waarin ook de optionele aanhalingtekens worden gevonden, moet je daar aparte zoekopdrachten voor maken: zowel voor aanhalingstekens openen als sluiten.
Er staan meerdere artikelen over GREP op mijn website. Gebruik bovenin het zoekvenster, of bekijk dit artikel over hoe je ‘vierkante meter’ automatisch goed kunt zetten.
En het kan nog korter/efficiënter:
[\.\?\!(“|’)?]\s\K(“|’)?.{1,3}\s
Alles voor \K wordt meegenomen als look behind. Het typt makkelijker en je kunt nu meer combinaties maken die bij de klassieke look behind niet kunnen 🙂
Bedankt Roland,
Leuk dat je meedenkt en zelfs nog aanvult.
Goedenavond Ronald,
Zeer interessant allemaal zeg. Ik ga me er zeker in verdiepen.
Zou je me willen helpen met het volgende?
Voor nu ben ik namelijk op zoek naar de Grepcode voor het selecteren van de eerste letter in een verankerd kader. De tekst in het verankerd kader heeft een Alineastijl. De teksten in het verankerd kader beginnen met een onderkast letter en dat moet een kapitaal worden.
Heb jij enig idee hoe ik dat voor elkaar box met Grep?
Alvast bedankt en groet,
Ron
hallo Ron, ik zou het bestand wel willen zien. Want ik vermoed dat je moet gaan werken met Zoek&Wijzig, in plaats van met GREP in een alineastijl. Ook bij Zoek&Wijzig kun je GREP inzetten, trouwens.
Dag Peter,
het is me ondertussen gelukt om een GREP te bedenken die werkte. Zou er sowieso graag meer van willen weten. Kun en wil je me daar eventueel mee helpen?
Hoor graag.
Groet,
Ron
Hoi Peter, ik zou graag een GREP hebben die ervoor zorgt dat een enkel woord (dus het eerste woord van een zin) aan de rechterkant van een kolom naar de volgende regel gaat. Is dit mogelijk?
Zo te zien moet je het aantal letters aanpassen waaruit een woord zou bestaan, en moet je de komma nog toevoegen.
De code
(?<=[\.\?\!("|')?]\s)("|')?.{1,3}\s Moet je dan veranderen in (?<=[\.\?\!("|’)?,]\s)("|')?.{1,4}\s Of misschien wel moet je die laatste 4 nog veranderen in een 5, zodat woorden van 1 tot en met 5 letters bij elkaar gehouden worden met het woord erachter.