1/ Généralités
    Guide d'utilisation
    Numéro de version
    Compatibilité CS5.5
    Mémorisation des préférences
    IndexBrutal vs IndexMatic²

2/ Portée, contexte et options de recherche
    Empêcher l'indexation de l'index !
    Extraction automatique de vocabulaire
    Concordances et Page Rank
    « Mot Entier » et Regex
    Texte conditionnel
    Cibler plusieurs styles de caractères
    Espaces et mots entiers
    Mode automatique vs requêtes explicites

3/ Requêtes simples
    Lettres majuscules et diacritiques
    Réécriture de terme / Sous-sujets / Références croisées
    Gestion des pluriels
    Requêtes et espaces
    Sites Web, URLs
    Taille d'une clé / Regroupement d'alternatives
    Utilisation du métacaractère "\w"
    Extraction de données XML
    Espaces spéciales

4/ Requêtes avancées
    Insertion d'intertitres (A, B, C…)
    Ponctuation
    Concordances et redondance
    Statistiques sur les lettres
    Utilisation isolée du symbole "$"

5/ Sortie
    Sortie XML
    Index multiples

6/ Limitations et problèmes connus
    Erreur système -982 / Verdana
    Conservation des enrichissements typographiques
    Alphabets non latins
    Barre de progression inerte / Indexation de tableaux
    Effet retard ?
    Styles de caractères « indirects »
    Mots interdits ?
    Erreur : « Incorrectement formé » (extrait InDesign)

VOS COMMENTAIRES


1/ Généralités

Guide d'utilisation

• IndexMatic² est facile à tester mais paraît beaucoup plus difficile à apprivoiser en profondeur. Où trouver un bon tutoriel expliquant pas à pas ses fonctionnalités avancées ?

[TOUTES VERSIONS] La seule référence complète est le manuel d'utilisation (PDF), disponible à la fois en anglais et en français. Ce dernier a été conçu pour guider l'utilisateur depuis la prise en main jusqu'aux opérations les plus raffinées impliquant l'interpréteur de requêtes et les expressions régulières, sans omettre de nombreuses précisions techniques liées à la procédure d'analyse des documents InDesign par IndexMatic.

Téléchargez le manuel d'IndexMatic² (PDF, 32 p.)

D'autres exemples concrets et études de cas case seront peu à peu abordés dans cette FAQ — qui s'alimentera je l'espère de vos commentaires !

Numéro de version

• Comment connaître la version d'IndexMatic² en cours d'utilisation ?

[TOUTES VERSIONS] Le numéro majeur de version s'affiche dans la barre de titre de la boîte de dialogue principale, typiquement : « IndexMatic PRO | 2.0 » (version pro) ou « IndexMatic TRY | 2.0 » (version d'essai). Par ailleurs, le numéro complet de version est indiqué en bas à droite de la boîte de dialogue principale. Par exemple : « 2.026 ».

Compatibilité CS5.5

• Nous avions acquis une licence d'IndexMatic² PRO et, ces jours-ci, nous effectuons une mise à niveau d'InDesign vers CS5.5. Le script est-il réutilisable ?

[TOUTES VERSIONS] IndexMatic² fonctionne sous InDesign CS3, CS4, CS5 et CS5.5. (Sous CS3, quelques rares fonctionnalités sont entravées.) Pour « installer » le script avec une nouvelle mouture d'InDesign, placez tout simplement le fichier IndexMaticPro.jsx (ou IndexMaticTry.jsx) dans le dossier Script Panels correspondant à ladite version d'InDesign.

Rappel. — La façon la plus simple de localiser le dossier Scripts Panel est de démarrer InDesign, d'ouvrir le panneau Scripts (Fenêtre > Utilitaires > Scripts), d'effectuer un clic droit sur l'élément « Utilisateur » ou « Application », puis de cliquer sur « Révéler dans le Finder / Explorateur ».

Mémorisation des préférences

• Y a-t-il un moyen de conserver-restaurer les dernières options choisies dans le dialogue d'IndexMatic ? C'est un peu frustrant de recommencer tout le paramétrage à chaque fois que je relance le script.

[VERSION TRY] La mémorisation des paramètres pendant votre session InDesign est seulement implémentée dans la version PRO d'IndexMatic².

IndexBrutal vs IndexMatic²

• J'ai exploité pendant des années votre script « IndexBrutal ». Puis-je réutiliser dans IndexMatic² les mêmes listes de mots, telles que je les avais préparées pour IndexBrutal ?

[TOUTES VERSIONS] Toutes les fonctionnalités d'IndexBrutal sont présentes dans IndexMatic² — et bien davantage ! — mais vous ne pourrez pas réutiliser les requêtes IndexBrutal telles quelles si des opérateurs syntaxiques étaient sollicités. En effet, IndexMatic² s'appuie sur une syntaxe différente pour gérer la sensibilité à la casse, la réécriture des termes et l'option « Mot entier ». Au minimum, vous aurez à appliquer les conversions suivantes :

Syntaxe IndexBrutal Syntaxe IndexMatic²
chat|félin chat=>félin
>thérap thérap/W
!marguerite marguerite/I
!Urssaf Urssaf/i


2/ Portée, contexte et options de recherche

Empêcher l'indexation de l'index !

• Dans la mesure où je place l'index généré à la fin du livre soumis à l'indexation, je ne souhaite pas qu'IndexMatic² analyse les pages portant l'index lui-même ! Comment indiquer au script qu'il devra ignorer cette section ?

[TOUTES VERSIONS] Il y aurait maintes façons d'opérer. Je recommande l'une des deux suivantes :

(a) Dans le panneau Portée, sélectionnez Étendue > Pages... et saisissez explicitement l'intervalle de pages que vous souhaitez indexer, en excluant les pages correspondant à l'index. Par ex. : 1-250 si l'index démarre en page 251.

(b) Une autre stratégie consiste à aménager tout le contenu indexable sur un calque dédié — appelons-le « Indexable » — en prenant soin de placer l'index (ou autres éléments hors de propos) sur un autre calque. De cette façon, vous n'aurez plus à spécifier l'étendue d'indexation, il vous suffira de choisir le calque « Indexable » dans la liste Calque(s) du panneau Scope.

Extraction automatique de vocabulaire

• Je dois établir l'index d'un livre mais je ne dispose pas d'une liste de mots prédéterminée. Y a-t-il un moyen d'extraire automatiquement le vocabulaire puis d'affiner la liste avant de lancer le processus d'indexation ?

[VERSION PRO] IndexMatic² propose un mode de recherche « Automatique » permettant de collecter sans effort les mots les plus représentatifs de votre/vos document(s). Ouvrez tout d'abord le livre dans InDesign et démarrez le script. Dans le panneau Portée, rubrique Document(s), choisissez « Livre ». Dans le panneau Options par défaut, fixez le Page Rank à 3 ou 4 (ce sont habituellement des valeurs adéquates). Cliquez alors sur le bouton Occurrences..., qui ouvre une petite boîte de dialogue dédiée. Décochez la case « Afficher les statistiques » et cliquez sur le bouton Démarrer. Vous obtenez alors une liste de mots, facile à nettoyer et à personnaliser, qui constituera un bon point de départ pour l'indexation en mode « Liste de requêtes ».

Concordances et Page Rank

• Étant donné une expression régulière comme /Steve|Bill/, qui produit deux termes — "Steve" et "Bill" — le Page Rank s'applique-t-il à chaque terme ou en considération du nombre total d'expressions capturées par page ?

[TOUTES VERSIONS] Le filtre Page Rank opère sur chaque terme séparément (i. e. chaque terme implicitement produit par la requête). Supposons que "Steve" figure trois fois en page 10 et deux fois en page 11, tandis que "Bill" figure deux fois en page 10 et trois fois en page 11 :

    Page 10 : … Steve … Bill … Steve … Bill … Steve.
    Page 11 : … Bill … Steve … Bill … Steve … Bill.

Alors, la requête :

    /Steve|Bill/3

règle le Page Rank à 3 et conduit au résultat suivant :

    Bill: 11
    Steve: 10

Par contraste, si la requête fournissait un terme explicite :

    /Steve|Bill/3 => My Friends

alors IndexMatic² compterait chaque expression trouvée dans le Page Rank de "My Friends". Par conséquent, la requête ci-dessus produirait en sortie :

    My Friends: 10-11

(Comme le nombre total d'occurrences est de 5 sur chaque page, le Page Rank est largement satisfait.)

« Mot Entier » et Regex

• Notre document de travail repose sur un balisage spécial :
"...\index{mot à indexer}..."
Souhaitant extraire chaque expression ainsi identifiée, nous avons essayé la requête:
/\\index\{([^}]+)\}/ => $1, mais cela ne fonctionne pas.

[TOUTES VERSIONS] Ne perdez jamais de vue le contexte dans lequel les concordances se manifestent. Votre syntaxe, \index{mot à indexer}, semble s'imbriquer dans le texte sans aucune séparation. Donc, il vous faut vraisemblablement désactiver l'option « Mot entier ». Essayez l'une de ces solutions :

(a) Décochez l'option « Mot entier » dans le panneau Options par défaut (ainsi, le flag est globalement désactivé).

    OU

(b) Ajoutez le flag W à la fin du motif :
    /\\index\{([^}]+)\}/W => $1

Texte conditionnel

• Notre rapport annuel est établi en plusieurs langues qui cohabitent dans le même document InDesign via des « textes conditionnels » (plutôt que des calques linguistiques). IndexMatic² est-il capable de cibler chaque condition séparément, afin de produire un index pour chaque langue ?

[TOUTES VERSIONS] En matière de texte conditionnel, la politique d'IndexMatic² consiste à inspecter le contenu disponible dans l'état actuel du document au moment où vous lancez le script. Ainsi, il suffit d'activer la condition qui correspond à la langue à indexer et vous obtiendrez les résultats escomptés.

Cibler plusieurs styles de caractères

• Les données que nous devons indexer sont formatées ainsi : "Name/Reference". Le premier élément (Name) possède le style de caractère "Product Name" alors que le second élément (/Reference) possède le style de caractère "Product Ref". Lorsque nous sélectionnons le style "Product Name" dans IndexMatic² et que nous lançons la requête /[a-z]+\/[0-9]+/i, le script ne renvoie aucun résultat. Comment procéder ? Est-il alors possible de produire les lignes d'index sous la forme : "Name (Reference): numéros de page" ?

[TOUTES VERSIONS] IndexMatic² ne peut pas cibler directement un motif de texte distribué sur plusieurs styles de caractères (sauf à ne spécifier aucun style). Cependant, une solution simple consiste à rassembler les différents styles sollicités au sein d'un groupe de styles. Vous pourrez alors sélectionner ce groupe dans la rubrique Styles de la boîte de dialogue — les groupes de styles sont listés sous la forme: [nom_du_groupe] *. Voici en détail comment procéder dans votre cas :

1. Dans InDesign, ajoutez un groupe de styles de caractère — disons "Product" — puis déplacez les deux styles désirés — "Product Name" et "Product Reference" — dans le groupe nouvellement créé.

2. Démarrez IndexMatic². Dans la liste des Styles de caractère, choisissez : [Product] *.

3. Envoyez la requête : /([a-z]+)\/([0-9]+)/i => $1 ($2).

Espaces et mots entiers

• Je souhaite indexer des expressions contenant des espaces, telles que "a priori" ou "cordon bleu". Faut-il désactiver l'option « Mot entier » ?

[TOUTES VERSIONS] Non. Le rôle de l'option « Mot entier » est de s'assurer qu'une concordance n'est ni précédée ni suivie d'un caractère appartenant à l'alphabet actif. Cela n'interdit en rien la présence d'espaces — ou même de n'importe quel autre caractère non alphabétique — dans la clé de recherche.

Ainsi, lorsque l'option « Mot entier » est active (par défaut), une requête telle que a priori trouvera toute occurrence de la locution "a priori", mais ignorera des concordances fragmentaires comme dans "ma priorité".

En général, désactiver « Mot entier » est utile lorsqu'une unité lexicale partielle apparaît dans de multiples expressions qui renvoient sans ambiguïté au même sujet, par exemple: modern/W => modernité

Sous réserve que la sous-chaîne modern ne se manifeste que dans des mots relatifs à la modernité, la clé :

    modern/W

se révèle beaucoup plus performante qu'une expression régulière du genre :

    /modern(e|(i(sme|té|ser)))/

Mode automatique vs requêtes explicites

• J'ai tenté d'établir un index basé sur un style de caractère et me suis aperçu qu'IndexMatic² ne prenait en compte que des mots simples, pas des expressions complexes comme “Premier ministre”, y compris lorsque ces expressions (avec espaces) se voient appliquer globalement le style de caractère voulu. Y a-t-il une possibilité de capturer les plages entièrement soumises à un style ?

[TOUTES VERSIONS] Vous avez probalement utilisé le mode de recherche Automatique, lequel n'est pas adapté à votre exemple. En mode automatique, IndexMatic² se borne à capturer des mots au sens de l'Alphabet actif. Pour obtenir des résultats plus étendus, vous devez sélectionner le mode Requête simple (ou Liste de requêtes) afin d'envoyer vos propres commandes à l'interpréteur. Voici quelques requêtes usuelles qu'on peut appliquer lors d'un filtrage selon un style de caractère :

Pour capturer entièrement les plages stylées :
    /.+/

Pour capturer les expressions formées de lettres et d'espace(s) :
    /[\w ]+/

Pour capturer les mots (sans espace) :
    /\w+/


3/ Requêtes simples

Lettres majuscules et diacritiques

• La requête /[A-Z]\w+/I détecte tous les mots commençant par une majuscule non accentuée, mais je souhaiterais également capturer les autres majuscules telles que À or É. Comment procéder ?

[TOUTES VERSIONS] Utilisez \m plutôt que [A-Z]. L'ensemble [A-Z] ne voit que les majuscules Ascii, alors que le métacaractère \m, spécifique à IndexMatic², détecte toute lettre majuscule de l'alphabet courant, diacritiques inclus. (Symétriquement, le métacaractère \l concorde avec toute lettre minuscule de l'alphabet courant.)

Réécriture de terme / Sous-sujets / Références croisées

• Je souhaiterais intégrer à l'index des termes qui n'apparaissent pas réellement dans les pages (par ex. indexer sous le terme "France" les pages qui mentionnent "Paris"). Comment procéder ?

[TOUTES VERSIONS] Tirez parti de l'opérateur de réécriture (=>). Toute occurrence du nom « Paris » dans le document peut être réécrite « France » dans l'index, grâce à la requête :

   Paris => France

Il va de soi que vous pouvez aussi produire les deux termes en utilisant deux requêtes :

   Paris
   Paris => France

La première ligne indexe « Paris » en tant que tel (sujet homonyme), tandis que la seconde crée parallèlement le sujet « France » (à partir des occurrences de « Paris »).

Une autre approche consisterait à présenter « Paris » comme une sous-entrée du sujet « France » :

   Paris => France > $0

La requête ci-dessus est plus avisée, en ce qu'elle prépare l'adjonction d'autres membres dans le sujet « France », comme :

   Bordeaux => France > $0

Une façon plus compacte d'exprimer tout cela est :

   /Paris|Bordeaux/ => France > $0

L'index résultant ressemblera à ceci :

   France
      Bordeaux: folios
      Paris: folios

Par ailleurs, si vous souhaitez que « Paris » apparaisse également au premier niveau de l'index, il est aisé de rediriger le lecteur vers le sujet « France » en ajoutant une référence croisée (notez la double barre oblique au début de la requête) :

   // Paris => Voir France

Au final, votre liste de requêtes complète pourrait alors ressembler à ceci :

   // Bordeaux => Voir France
   // Paris => Voir France
   /Paris|Bordeaux/ => France > $0

• Dans le sujet "FRANCE", j'aimerais aménager une sous-entrée, "Paris", qui n'indique aucun numéro de page mais renvoie le lecteur vers un autre sujet nommé "PARIS". Comment faire ?

[TOUTES VERSIONS] La syntaxe des références croisées permet de placer un renvoi au sein de n'importe quel sujet ou membre (existant ou virtuel). Il suffit de mettre en forme le faux terme (cf. manuel, page 20) selon la syntaxe d'un membre :

    // FRANCE > Paris => Voir PARIS.

Considérons maintenant la liste de requêtes suivante :

    ...
    FRANCE
    PARIS
    // FRANCE > Paris => Voir PARIS.
    ...

Elle aura pour effet de produire un index de la forme :

    …
    FRANCE: folios
        Paris: Voir PARIS
    …
    PARIS: folios
    …

Gestion des pluriels

• Est-il possible d'indexer, à partir d'une liste de mots au singulier, à la fois le singulier et le pluriel ?

[TOUTES VERSIONS] IndexMatic² est incapable de « calculer » tout seul les formes plurielles des expressions fournies, c'est pourquoi il est nécessaire de spécifier les formes concurrentes au sein des requêtes.

Pour indexer des formes au singulier et au pluriel — ou même d'autres alternatives — sous la même entrée d'index, il convient d'ajuster vos requêtes pour qu'elles capturent ces variantes via une expression régulière. Voici un exemple canonique (pluriel en 's') :

    /chats?/ => chat

qui peut aussi s'exprimer plus symboliquement:

    /(chat)s?/ => $1

Du coup, si vous avez à traiter plusieurs mots reposant sur la même transformation au pluriel, il est facile et très économique de « factoriser les clés » comme suit :

    /(chat|chien|serpent)s?/ => $1

Bien entendu, vous devrez traiter de façon plus chirurgicale les pluriels spéciaux :

    /cheva(l|ux)/ => cheval
    /hiboux?/ => hibou
    /œil|yeux/ => œil
    etc.

Requêtes et espaces

• Nous devons indexer la chaîne " EUR" (avec espace initiale), mais la requête " EUR" semble être interprétée comme "EUR" sans espace. Pourquoi ?

[TOUTES VERSIONS] Lorsqu'une clé est basée sur un simple vocable (absence de barre oblique initiale), les espaces initiales sont automatiquement ignorées. De même, les espaces finales sont ignorées en l'absence de barre oblique finale. Examinons les requêtes suivantes :

    exemple
        exemple/w
      exemple    => Mots > $0

Dans chacune, le vocable retenu est "exemple" (sans espace).

Pour forcer IndexMatic² à prendre en compte les espaces initiales et/ou finales, délimitez la clé par des barres obliques :

    / EUR/

Notez que l'expression est alors analysée comme une expression régulière, ce qui reste sans effet indésirable tant que vous n'utilisez pas d'opérateurs spécifiques aux motifs d'expressions régulières.

Sites Web, URLs

• Est-il possible d'indexer tous les sites Web mentionnés dans mon document et de présenter les entrées d'index sous la forme :
"nom [url], numéros de pages" ?

[TOUTES VERSIONS] Cela dépend avant tout de la façon dont ces éléments sont identifiés dans le document.

Si un style de caractère dédié est attribué au nom des sites et/ou à leur adresse, il n'est pas difficile de capturer ces entités en sélectionnant le filtre Style et en appliquant une requête générique telle que : /.+/

Si les données ne sont pas « stylées », vous devez établir vous-même la liste des noms à inspecter, car le script ne peut pas savoir a priori en quoi consiste le nom d'un site Web !

Dans le cas où vous auriez seulement à collecter les URLs, utilisez une requête comme :
    /(http:\/\/|www\.)[^ ]+/I
(ou plus sophistiquée si besoin). Cette technique peut d'ailleurs s'envisager comme une étape préparatoire à l'identification des sites et de leurs noms. Une fois les URLs connues et rassemblées (bouton Occurrences...), il ne vous restera qu'à établir et affiner votre liste de requêtes de façon à capturer les noms et les URLs des sites.

Taille d'une clé / Regroupement d'alternatives

• Je trouve très pratique de pouvoir cibler un ensemble d'entrées de second niveau avec des requêtes du genre :
/Jean|Bernard|Caroline/=>Auteurs>$0. Mais, combien de termes peut-on inscrire dans cette expression? J'ai plusieurs centaines d'éléments analogues. La requête peut-elle supporter une telle quantité ? À défaut, quelle alternative suggérez-vous ?

[TOUTES VERSIONS] La taille maximum d'une clé, dans une requête IndexMatic², est fixée à 172 caractères depuis la version 2.025. Cela permet de fabriquer des expressions régulières complexes, mais pas au point d'inclure des centaines d'alternatives. La seule solution est donc d'utiliser une traditionnelle Liste de requêtes :

    Jean => Auteurs > $0
    Bernard => Auteurs > $0
    Caroline => Auteurs > $0
    ...

Toutefois, rien ne vous interdit d'optimiser la liste par regroupement de termes alternatifs, sous réserve de ne pas aboutir à des clés de recherche de plusieurs kilomètres. Voici une approche possible, basée sur des regroupements alphabétiques :

    // A...
    /Alfred|Adèle|Alban|André|Arnaud|Anna/ => Auteurs > $0
    // B...
    /Baptiste|Béatrice|Benjamin|Bernard|Berthe/ => Auteurs > $0
    // C...
    /Céleste|Charles|Caroline|Constance|Carlos/ => Auteurs > $0
    ...

Utilisation du métacaractère "\w"

• Quelle est la portée exacte du métacaractère \w ?

[TOUTES VERSIONS] Le métacaractère\w s'ajuste automatiquement à l'alphabet : il capture tout caractère disponible dans l'alphabet sélectionné, ainsi que le trait d'union, les chiffres, les apostrophes et/ou le tiret bas si les cases correspondantes sont cochées (panneau Alphabet). Je vous renvoie au manuel d'utilisation pour une vue plus détaillée de ces options.

Soulignons que le comportement du symbole \w est propre à IndexMatic. Dans une pure expression régulière JavaScript, \w capture uniquement un caractère alphanumérique ou le tiret bas. En conséquence, si vous avez besoin d'utiliser \w au sens du JavaScript, sélectionnez l'alphabet ASCII et cochez les cases « Inclure les chiffres » et « Inclure le tiret bas ». À défaut, vous pouvez aussi travailler avec la classe de caractères équivalente : [a-zA-Z0-9_].

Extraction de données XML

• IndexMatic² est-il capable d'analyser une syntaxe comme :
"...<index>New Orleans</index>..." ?
Peut-il également extraire un attribut XML ? Par exemple :
"...<index entry="New Orleans, LA">New Orleans</index>..."

[TOUTES VERSIONS] Pour extraire le contenu de l'élément <index>, utilisez la requête :
    /<index>([ \w]+)<\/index>/ => $1

Et pour récupérer l'attribut :
    /<index entry="([ \w,]+)">/ => $1

Espaces spéciales

• À tel emplacement de mon expression régulière, je souhaite spécifier une espace fine OU ultra-fine plutôt que « l'espace générique » d'IndexMatic². Est-ce possible ?

[TOUTES VERSIONS] Il suffit de forger une classe de caractères correspondant aux espaces désirées : [~<~|] (syntaxe GREP) ou [\u2009\u200A] (rangs Unicode). Reportez-vous au tableau, page 22, du manuel d'utilisation.

Note. — Que l'option « Espace générique » soit active ou inactive, IndexMatic² prend toujours en compte les caractères spéciaux que vous lui indiquez expressément.


4/ Requêtes avancées

Insertion d'intertitres (A, B, C…)

• Je souhaite insérer des intertitres A, B, C, etc., au sein de mon index. (Il s'agit purement de mise en forme.) Dois-je ajouter ces lignes manuellement ? Si tel est le cas, y a-t-il un moyen de spécifier ces intertitres directement dans ma liste de requêtes de façon que je n'ai pas à resaisir cette information à chaque fois que je reconstruis l'index ?

[TOUTES VERSIONS] La version actuelle d'IndexMatic² n'offre pas la possibilité d'ajouter des titres « externes », à moins d'exploiter le mécanisme des références croisées sous la forme :

    // Mon Sujet Titre => voir aussi...

Cependant, dans la syntaxe ci-dessus, la portion "voir aussi…" (située à droite de l'opérateur =>) ne peut pas rester vide ni se contenter de caractères d'espace. Par conséquent, le script ne peut pas produire de simples titres tels que A, B, C… sans élément connexe. (Nous tenterons de résoudre cette limitation dans la prochaine version d'IndexMatic.)

Pour le moment, la seule technique de contournement qui m'apparaît consiste à utiliser un caractère postiche — par exemple un point — pour former les requêtes suivantes :

    // A => .
    // B => .
    etc.

Dès lors vous pourrez créer une règle de style Grep visant à appliquer la nuance [Sans] au motif \t\. (i.e. TABULATION + POINT).

Par ailleurs, dans le cas particulier où votre index est basé sur des expressions régulières produisant seulement des SUJETS de premier niveau, par exemple :

    /\w{3,}/

il vous reste toujours l'option d'extraire la première lettre en tant que SUJET et de déplacer les entrées d'index comme MEMBRES dudit sujet :

    /(\w)\w{2,}/ => $1 > $0

Il suffit alors de choisir l'option "Maj > Auto" dans la rubrique Casse du panneau de sortie. Ce faisant, vous obtiendrez un index de la forme suivante :

    A
        {Entrées commençant par A}
    B
        {Entrées commençant par B}
    etc.

Ponctuation

• Quelle est la façon la plus générique de cibler n'importe quel signe de ponctuation dans une expression régulière ?

[TOUTES VERSIONS] Le métacaractère Unicode \p{P} permet de capturer tout signe de ponctuation. D'autres raffinements sont disponibles. Pour une vue complète des propriétés Unicode implémentées dans IndexMatic², reportez-vous au manuel, page 22.

Concordances et redondance

• L'ouvrage dont je suis en train d'établir l'index possède des prénoms abrégés sous trois formes distinctes : "P. H. Nielsen", "L.-D. Nisipeanu", "G. Kasparov". Je récupère ces éléments depuis un style de caractère. J'utilise alors les trois requêtes suivantes :
    // 1. Capture "P. H. Nielsen" etc.
    /([A-Z]\. [A-Z]\. )([A-Z]\w+)/ => $2, $1
    // 2. Capture "L.-D. Nisipeanu" etc.
    /([A-Z]\.\-[A-Z]\. )([A-Z]\w+)/ => $2, $1
    // 3. Capture "G. Kasparov" etc.
    /([A-Z]\. )([A-Z]\w+)/ => $2, $1
Mais Nielsen sort dupliqué, à la fois sous la forme "Nielsen, H." et "Nielsen, P. H." Comment corriger cela ?

[TOUTES VERSIONS] Sachant qu'IndexMatic² ne supporte pas le “lookbehind”, il n'est pas possible d'empêcher la concordance partielle de "P. H. Nielsen" avec la troisième requête, concordance parasite puisque que l'expression complète est déjà repérée et correctement traitée par la première requête. Ce problème classique se pose à chaque fois que nous devons contrôler le contexte de démarrage d'une expression régulière. Par chance, dans le cas que vous me soumettez, le problème peut être réglé en remplaçant les trois requêtes par une seule :

    // Traite tous les cas d'un coup:
    /([A-Z]\.(?:[ -][A-Z]\.)?) ([A-Z]\w+)/ => $2, $1

Cela fonctionne parce que l'opérateur ?, en milieu de requête, est gourmand : il oblige le moteur à prendre "P. H." plutôt que "P." tout seul quand l'élément optionnel est présent. La meilleure stratégie, lorsqu'il faut capturer les variantes d'une même forme générale, est d'intégrer tous les cas de figures dans une même requête. L'utilisation de requêtes multiples tend à créer de la redondance dès lors que deux expressions régulières distinctes sont susceptibles de capturer la même chaîne, en tout ou partie.

Note. — Dans la regex ci-dessus, la syntaxe (?: a pour fonction de déclarer une parenthèse non capturante. Cela permet de créer un groupe optionnel,
(?:[ -][A-Z]\.)?
sans risquer d'augmenter le numéro d'ordre des variables capturées. Ainsi, $2 désigne toujours la dernière portion du motif : ([A-Z]\w+).

À l'attention des lecteurs francophones. — Un développement plus étoffé a été consacré aux problèmes de concordance et de redondance dans le fil de commentaires de l'article « IndexMatic² et les expressions régulières » publié chez Indigrep.com. Vous y trouverez notamment une solution pour indexer « Premier ministre » séparément de « ministre ». ACCÈS DIRECT AU COMMENTAIRE

Statistiques sur les lettres

• Je souhaite identifier toutes les lettres (et seulement les lettres) d'un document, y compris celles provenant d'alphabets non latins, puis afficher leur fréquence d'apparition grâce à la fonction « Occurrences ». Quelle requête envoyer ?

[VERSION PRO]

1. Utilisez l'expression suivante :
    /[\p{Ll}\p{Lu}\p{Lt}]/IW

2. Dans la rubrique Casse, sélectionnez « [À l'identique] ».

3. Cliquez sur le bouton Occurrences...

Note. — Le métacaractère \p n'est pas affecté par l'alphabet courant : on peut l'utiliser en toute circonstance pour extraire des caractères à partir de propriétés Unicode.

Utilisation isolée du symbole "$"

• Nous testons différentes expressions régulières afin de déterminer laquelle est la plus apte à extraire des adresses Internet. IndexMatic² peut-il indiquer en sortie quel motif de départ a produit tel ensemble de résultats ?

[TOUTES VERSIONS] Dans le terme d'une requête, le symbole $ représente toujours la clé originale dans sa forme littérale. Par exemple :

    /[a-z]{3}\d/ => $

regroupe dans un unique sujet, "[a-z]{3}\d", les pages contenant une séquence de trois lettres suivies d'un chiffre.

Par suite, on peut facilement garder trace de la correspondance entre une requête et les concordances trouvées. Dans le cas considéré, une solution consiste à produire chaque motif testé en tant que sujet (1er niveau) et les URLs trouvées en tant que membres (2e niveau) :

    /motif1/ => $ > $0
    /motif2/ => $ > $0
    etc.


5/ Sortie

Sortie XML

• Je ne saisis pas le fonctionnement de l'option de sortie XML. Une fois que j'ai édité le fichier XML généré par IndexMatic², comment réinjecter ces données dans InDesign de façon à produire un index ?

[VERSION PRO] La sortie XML est totalement indépendante d'InDesign. Elle permet d'exprimer un index en langage XML, dans un fichier ad hoc, en vue de traitements ultérieurs (base de données, etc.). Cependant, le flux résultant n'est pas censé offrir une quelconque compatibilité avec la couche XML propre à InDesign.

Index multiples

• Mon objectif est de créer plusieurs index à partir du même livre (index des villes séparément de l'index des personnages). IndexMatic² peut-il faire cela ?

[TOUTES VERSIONS] Fondamentalement, IndexMatic² ne peut gérer et constituer qu'un index à la fois. Vous devez d'abord configurer les options et les requêtes correspondant à l'index des VILLES, puis relancer le script et faire de nouveaux réglages pour l'index des PERSONNAGES, etc. L'Éditeur de requêtes permet de basculer rapidement d'une liste de requêtes à une autre si vous travailler avec des fichiers autonomes sauvegardés sur disque (ce qui est recommandé, dans tous les cas de figures).

Cela étant dit, si chaque index repose exclusivement sur des termes de premier niveau, vous pourriez envisager de créer une seule liste de requêtes avec pour sujets principaux VILLES, PERSONNAGES, etc., et en traitant comme des membres respectifs les éléments de chaque index. Par exemple :

    /Boston|Atlanta|Paris/ => VILLES > $0
    /Jean|Bernard|Jules/ => PERSONNAGES > $0

Bien que cela conduise stricto sensu à un seul index, sa structure se rapproche assez de ce que vous recherchez et il est aisé d'en isoler les différentes parties :

    PERSONNAGES
        Bernard 5, 12-13, 20...
        Jean 14, 18, 22...
        Jules 17, 20-23...
    VILLES
        Atlanta 7, 9, 12-13...
        Boston 15...
        Paris 12-15, 17-22...


6/ Limitations et problèmes connus

Erreur système [-982] / Verdana

• Lorsque je tente d'exécuter IndexMatic² sur InDesign CS5 / Mac (Lion), je récolte un message d'erreur JavaScript mentionnant une "Erreur système [-982]".

[TOUTES VERSIONS] Ce message d'erreur est lié à l'absence ou à la corruption d'une police de caractères. Assurez-vous que la fonte Verdana est correctement installée sur votre système.

Conservation des enrichissements typographiques

• Y a-t-il un moyen de préserver la mise en forme du texte dans une entrée d'index ? Par exemple, les titres d'œuvres, les noms d'espèces, etc., sont typiquement composés en italique dans le texte source.

[TOUTES VERSIONS] Hélas, le script ne gère pas cet aspect — ce qui constitue, j'en conviens, une limitation importante. Fondamentalement, IndexMatic² reste un moteur de recherche « plein texte », il peut cibler tel ou tel style mais, en sortie, il ne conserve aucune trace des enrichissements appliqués au texte.

Notons qu'une telle fonctionnalité n'est pas aussi simple qu'il y paraît, car la même expression (ou le même motif de texte) peut se manifester dans différentes mises en forme au sein du document. Supposons qu'IndexMatic² trouve le terme « New York Times » en italique sur la page 1, puis la même chaîne de caractère en romain sur la page 2... S'agit-il du même SUJET ? Dans ce contexte, comment décompter les occurrences, le Page Rank, etc. ? La réponse n'a rien d'univoque.

Alphabets non latins

• IndexMatic² ne fonctionne pas correctement avec des textes écrits en russe. Envisagez-vous la prise en charge de l'alphabet cyrillique ?

[TOUTES VERSIONS] IndexMatic² peut adresser tout caractère Unicode du plan multilingue de base (Basic Multinlingual Plane) mais en effet il n'offre pas de moyen pratique de cibler et de trier des lexiques basés sur l'alphabet cyrillique. Pour l'instant, seuls les alphabets latins sont pleinement pris en charge à cet égard. Nous étudions la possibilité de faire évoluer cela dans une future version.

Barre de progression inerte / Indexation de tableaux

• La barre de progression d'IndexMatic² semble se figer complètement quand j'indexe un gros document contenant un certain nombre de tableaux.

[TOUTES VERSIONS] Les tableaux InDesign reposent sur une structure interne particulièrement lourde qui n'offre guère de compromis. Cela explique que l'indexation des tableaux puisse se révéler très lente, avec pour effet d'immobiliser la barre de progression. Soyez patient(s) !

Effet retard ?

• J'ai d'abord cru qu'IndexMatic² avait planté. Puis, après une bonne période d'inactivité, l'index final est soudain apparu ! Comment savoir si le script est encore en train de travailler ?

[TOUTES VERSIONS] Ce problème a été rapporté par des utilisateurs Mac. Il semble que la barre de progression puisse « disparaître » (ou en donner l'impression) alors que le processus d'indexation est encore en cours. Il est probable que la barre de progression se trouve en réalité masquée par un autre élément du système, mais bien entendu ce n'est pas le comportement désiré ! Nous essayons d'en savoir plus sur ce problème.

Styles de caractères « indirects »

• Lors d'une indexation basée sur des styles de caractère, IndexMatic² ne trouve que les expressions explicitement soumises au style considéré, mais pas celles qui revêtent ce style sous l'effet d'un style imbriqué ou d'un style GREP. Pourquoi ?

[TOUTES VERSIONS] IndexMatic² en effet n'analyse pas les « styles indirects ». Il considère uniquement les styles de caractère ou de paragraphe expressément appliqués — peu importe les enrichissements que le texte subit par ailleurs.

Comme l'a suggéré Laurent Tournier, une solution de secours consiste à utiliser un script d'appoint capable de convertir les formatages indirects en styles réels. Différents outils ont été présentés dans ce billet d'InDesign Secrets (en anglais) : « Free Scripts Help Fix Word Formatting ».

Mots interdits ?

• Existe-t-il un moyen d'empêcher l'indexation des mots-outils (« le », « est », « un », etc.) lorsqu'on opère en mode Automatique ?

[TOUTES VERSIONS] On peut filtrer les mots courts par l'intermédiaire du paramètre “Taille mini.” du panneau Mode de recherche. Cependant, IndexMatic² ne possède pas de liste préétablie de mots interdits (comme le propose Wordalizer). Nous pourrions ajouter cette fonctionnalité dans une future version.

Erreur : « Incorrectement formé » (extrait InDesign)

• J'obtiens parfois une erreur lors de l'export de mon index sous la forme d'un extrait InDesign. Il semble que ce problème résulte spécialement de la présence du caractère '&' dans ma clé de recherche. Lorsque je produis l'index sous forme de texte brut, tout fonctionne normalement ; mais quand je génère un extrait InDesign je récolte l'erreur suivante : « Incorrectement formé ». Y a-t-il à faire un traitement particulier pour le caractère '&' ?

[VERSION PRO] Bug corrigé dans la version 2.027.