Meer grip op GREP (deel 1)


Vanaf InDesign CS3 heb je de mogelijkheid om GREP te gebruiken om gestructureerd tekst aan te kunnen passen en/of te wijzigen. Anders dan de standaard “Zoek/Vervang” functie. Wat betekent GREP eigenlijk? GREP is de afkorting voor “General Regular-Expression Print” of in “goed” Nederlands: “Globaal voor de Reguliere Expressie re en Print regels waarvoor de expressie waar is”. Nou fijn, en wat is daar dan het praktisch nut van? Dat ga ik je proberen duidelijk te maken aan de hand van een voorbeeld uit de praktijk. Ik gebruik hiervoor InDesign CS5 maar je kan deze tutorial ook volgen met CS4. Ik pas namelijk de mogelijkheid van GREP stijl in een Alineastijl toe. Deze feature zit niet in CS3 (weer een reden om CS5 aan te schaffen mocht je dit overzicht nog niet gezien hebben😉 )

Ok, daar gaan we! In dit voorbeeld ga ik even uit van een simpele GREP die ervoor zorgt dat alle tekst die tussen ( ) staat een ander uiterlijk (cursief) krijgen dan de rest van de tekst. Uiteraard is alle tekst al voorzien van een Alineastijl/Paragraph style, in dit geval “Brood tekst”. Het eindresultaat zie je in de afbeelding hieronder: Om de tekst cursief te krijgen hebben we een Tekenstijl/Character Style nodig. Om het proces overzichtelijk te houden maak ik die Tekenstijl voordat ik de GREP stijl ga definiëren/bewerken. De GREP stijl gaat namelijk gebruik maken van deze tekenstijl. Stap 1: Creëer de Tekenstijl De tekenstijl heb ik op de volgende manier gemaakt: Selecteer wat tekst in de “Brood tekst” alinea, verander de opmaak. In dit geval van “regular” naar “italic”. Selecteer uit het Tekenstijlen paneel/Character Styles panel, de optie “Nieuwe Tekenstijl”. Om het lekker makkelijk te houden noem ik de tekenstijl simpelweg “cursief”. Om de stijl daadwerkelijk toe te voegen, klik op OK. Zoals je ziet gebruik ik de optie “Stijl op selectie toepassen”/”Apply Style to Selection” niet omdat deze tekst alleen maar even is gebruikt om de Tekenstijl aan te maken. Dan gaan we nu de GREP stijl toevoegen aan de Alineastijl “Brood tekst” Rechtermuis klik (Ctrl-klik op de Mac) de Alineastijl en selecteer “Brood tekst bewerken” om de stijl aan te kunnen passen. Je krijgt nu het grote Alineastijl Opties dialoog op je scherm. Klik op “GREP-stijl” en daarna op “Nieuwe GREP-stijl” We gaan nu eerst de Tekenstijl aanwijzen die door de GREP stijl gebruikt moet worden. Kies de Tekenstijl “cursief” vanuit het menu “Stijl toepassen”.

Stap 1 overgeslagen? Gelukkig kan je nu vanaf InDesign CS4 ook vanuit de “Opties alineastijl” een Tekenstijl aanmaken. Kijk maar eens naar het “Stijl toepassen” pop-up menu, aan de onderkant ervan vind je de optie “Nieuwe tekenstijl….”

GREP Expressie
Tijd voor grip op GREP! We zoeken naar een patroon in onze voorbeeldtekst, namelijk een Haakje openen karakter, gevolgd door elk type tekst (cijfers, tekst, spates, witruimte enz. alles mag), afgesloten door Haakje sluiten karakter. Dat is alles, simpel toch? Ow wacht hoe gaan we dat “vertalen” naar GREP code? Gelukkig zitten er vele ingebakken functies en zoekopdrachten in de mogelijkheden van je GREP stijl. Zo kan je stap-voor-stap overzichtelijk je GREP expressie definiëren. InDesign “vertaalt” dat dan weer naar de correcte GREP symbolen/code.

Symbolen
Ok, we zoeken dus naar “Haakje openen”, dit karakter is onderdeel van de groep “Symbolen” (zie afbeelding).

Op het moment dat je dit onderdeel selecteert veranderd er iets in het Tekst veld. Daar staat nu: \( . Hè? Da’s gek? Waar komt nou ineens die “\” vandaan? Tja, er zijn een aantal karakters gereserveerd door/voor GREP expressie onderdelen en de haakjes zijn daar onderdeel van. Om ervoor te zorgen dat onze GREP definitie de “(” herkent als echt “(” karakter moet het voorgegaan worden door een “\”. Deze “\” is bekend als het “Escape karakter”.

Elk van de volgende karakters is gereserveerd door/voor GREP:
*  ^ {  [  (  $  .  )  ]  }  |  +  ?  ~
Als je dus één of meerder van deze karakters wil gebruiken als daadwerkelijk karakter (zoals de ( in ons voorbeeld) moet je ze dus vooraf laten gaan met een “\”.

Jokertekens
Op naar het volgende stukje van onze GREP code. Het gedeelte dat voor het “Haakje sluiten” karakter staat. We zoeken naar ALLES. ALLES kan dus ook echt ALLES zijn, dat kan een “e” zijn maar ook een “3” of een spatie. Door gebruik te maken van de Jokertekens kunnen we dat makkelijker definiëren. In Dit geval kiezen we dus ook voor Jokertekens->Willekeurig teken.

Nu wordt een “.” toegevoegd aan de GREP code.
Nou mooi, bijna klaar toch? Niet helemaal, de GREP code moet namelijk ook weten hoe vaak dit “Willekeurige teken” kan voorkomen. We gaan er nu vanuit dat er in onze tekst geen “()” voorkomt (dus geen tekst tussen de haakjes). Dat betekent dat het “Willekeurig teken” Één of meer keer voorkomt.

Kleinste overeenkomst
Er komt meer dan eens “()” voor in de tekst toch? Nu gaan we de optie Kleinste overeenkomst gebruiken. Deze optie zorgt ervoor dat GREP zoekt naar de eerste “(” en de eerste “)”, het kleinste mogelijke resultaat in de alinea, precies wat we zoeken. Dus we kiezen Herhalen->Één of meer keren (kleinste overeenkomst). Dit resulteert in de toevoeging “+?” in de GREP code. Nu schiet het op! Het enige dat we nu nog moeten doen is de boel afsluiten met het “Haakje sluiten”. Dit vinden we onder “Symbolen->Haakje sluiten“.

GREP code klaar, proberen maar
De code die we nu gemaakt hebben is \ ( . +? \ )

Elke tekst die tussen haakjes staat wordt nu “behandeld” door de GREP stijl. Klik op OK om de GREP stijl toe te passen in de Alineastijl en ziehier het eindresultaat!

Dit is maar een heel klein voorbeeld van de kracht van GREP. Je kan in een alineastijl ook meerdere GREP stijlen toepassen, denk bijvoorbeeld aan een combinatie met afkortingen die in kleinkapitaal moeten en/of eigennamen die een andere kleur moeten hebben, webadressen die “automatisch” als daadwerkelijke link herkend worden enz. enz.

Maarrrrrrrr…..het lijkt makkelijker gezegd dan gedaan. Het grappige aan GREP is dat het meer een uiterlijk heeft van een wiskundige formule dan van duidelijk leesbare tekst. Lastige voor grafische mensen die, volgens wetenschappelijk onderzoek, meer met hun linkerhersenhelft werken dan met de rationele rechterhersenhelft. Gelukkig zijn er veel meer mensen die dieper in het GREP gebeuren gedoken zijn, een aantal voorbeelden: Frans van der Geest (zoek naar GREP), InDesignsecrets en de “inspiratie” voor deze blogpost: Cari Jansen (dat #broodjekroket wordt steeds groter geloof ik😉 )

Wat ik je zeker nog moet vertellen is dat je GREP codes kan delen met andere InDesign gebruikers! Uiteraard kan je je InDesign document incl. Alineastijlen delen maar je kan ook de GREP opdrachten die in je “Zoek/Wijzigen” (Mac: Cmnd-F, PC: Ctrl-F) staan opslaan in een aparte opdracht en deze opdracht/set kan je versturen naar andere.

Je vind deze opdrachten in: ~/Bibliotheek/Preferences/Adobe InDesign/Version 7.0/nl_NL/Find-Change Queries/GREP/ Je kan dit .xml bestand gewoon kopiëren en mailen naar iemand anders die het dan weer in hetzelfde pad zet (~ staat voor de gebruikersnaam op je Mac).

15 thoughts on “Meer grip op GREP (deel 1)

  1. ik word zo blij van GREP🙂

    mijn favoriet is:
    find: (?i)(http|ftp|www)(\S+)|(\S+) (\.gov|\.us|\.net|\.com|\.edu|\.org|\.biz\|.nl)
    change to: $0
    en dan in het stukje ‘change format’ aangeven hoe de url eruit moet komen te zien…

    • of deze:
      \b[\S/]+@?\S+\.\S+\b
      samen met een no break character style om geen afgebroken url’s of email adressen te krijgen
      (en wat dacht je van een erg simpele maar erg doeltreffende manier om een font zonder euro teken te voorzien van een € teken: alleen maar een €-teken in grep-style en voorzien van eurofont character-style)

  2. Hoi! vraagje🙂
    ik snap GREP wel beetje maar niet hoe ik ook kan verwijderen… (werk in cs5)
    moet cijfers tussen [] veranderen (dus [3] , maar ook [1,2] of [4-7] ) naar datgene wat tussen de haken staat in superscript en dan dus zonder de haken.

    Met \[\d+\,*\-?\d\] vind ik ze allemaal en lukt ook om in superscript te zetten…
    MAAR hoe verwijder ik die haken [ ] nu?

    thanx, ruth

    • niet helemaal duidelijk wat je wilt: de haken echt verwijderen (dan moet je met $ strings gaan werken) of de haken geen superscript, dan moet je met voorwaardelijk zoeken werken.
      Dus: wat is het precies dat je wilt??

      • Ik wil de haken totaal verwijderen
        er staat nu bv platus [3] en dit moet worden: platus 3 (maar de 3 dan in superscript)
        soms staat er echter ook [3,4,5] of [3-5] wat dus 3,4,5 in superscript wordt of 3-5 in superscript.
        dank voor de hulp!
        ps hoe werkt dat met strings?

      • Hoi Ruth, leuk dat je mijn blog gelezen heb en ik hoop dat je snel antwoord krijgt. Misschien een idee om je vraag ook even te stellen op het forum van de Netherlands InDesign User Group? De link daarvoor vind je aan de rechterkant tussen de andere links😉

  3. Merk trouwens nu dat ie met \[\d+\,*\-? ?\d\] ze toch niet allemaal vind!
    hoe kan ik zoeken naar alles tussen [ ] de haken is er een soort teken dat het niets uitmaakt wat er uberhaupt staat?
    thanx

  4. Pingback: Meer grip op GREP stijlen (deel 2) | Met MacMickey Meer Muis

  5. Dank voor de reactie!
    ik heb de GREP nog iets aangapast naar:
    (\[)(.*?)(\])
    en dan uitvoer met $2 en superscript stijl!
    Is nu helemaal gelukt! wat een mooie materie dit😉 ook al ben ik vormgever, mijn beta-hart ging toch weer een beetje harder slaan hierdoor.

  6. Als je echt alles wilt vinden tussen de haken en de haken wilt verwijderen:

    Zoek naar:
    (])(.+)([)

    vervang door:
    $2

    Als die dat niet pakt kan het zijn dat je moet zoeken naar:
    (\[)(.+)(\])

    De laatste denk ik moet je hebben, ik doe dit even uit het hoofd.

    Je zoekt naa haak openen, alles, haak sluiten. Je wilt alleen alles terugzetten niet de haken. Daarom deel je het op in drie strings (haak, alles, haak), en je zet alleen de tweede gevonden string, alles, weer terug. Uiteraard kun je ook een stijl of tekenstijl etc. aan de teruggeplaatst string toekennen.

  7. Kwam vandaag dit blog tegen. Erg handig en informatief, waarvoor dank.

    Ik kom er nog niet helemaal uit. In mijn tekst staat:

    De teksten [cursief]dit moet cursief[#cursief] dit niet [cursief]en dit ook weer[#cursief] resterende tekst

    Ik heb een GREP geformuleerd aan de hand van info in dit blog, maar die pakt vanaf het eerste [cursief] tot het laatste [#cursief] in dezelfde3 alinea. Als het maar een keer voorkomt werkt het goed.

    Zoek: (\[cursief])(.+)(\[#cursief])

    Vervang door: $2 en dan in een character style Cursief

    Weet iemand wat ik niet goed doe?

    Thanks

  8. Hoi, mooi om te lezen hoe ik waarschijnlijk een stap verder kom met mijn uitdaging.
    Ik wil juist een email adres opbreken omdat deze te lang is voor de ruimte waar deze moet komen te staan.
    Het opbreken wil ik doen vanaf het ‘@’ teken. Deze moet dan op een volgende regel komen, zonder dat eerst een andere ‘woordafbreking’ plaats vind. Kan ik dat met bijvoorbeeld met vooraf tekens te tellen (gebasseerd op een gemiddelde letterbreedte).
    Ik lees graag jullie input.
    Alvast dankjewel.

Geef een reactie

Vul je gegevens in of klik op een icoon om in te loggen.

WordPress.com logo

Je reageert onder je WordPress.com account. Log uit / Bijwerken )

Twitter-afbeelding

Je reageert onder je Twitter account. Log uit / Bijwerken )

Facebook foto

Je reageert onder je Facebook account. Log uit / Bijwerken )

Google+ photo

Je reageert onder je Google+ account. Log uit / Bijwerken )

Verbinden met %s