Idées sur la factorisation

La factorisation est le moyen par lequel nous tentons d'abstraire, de centraliser et de contrôler des invariants provisoires. Ma définition semble assez lyrique au premier abord, mais nous allons voir qu'elle reflète très concrètement deux exigences fondamentales du créateur graphique :

    1) Faire une seule fois ce qu'il n'y a aucune raison de refaire.
    2) Actualiser/synchroniser les éléments instanciés, et si possible à partir d'un seul endroit.

Le problème est le suivant : ce que nous voulons maintenir à l'identique et ce que nous voulons faire évoluer se situent sur une portée ou un registre différent selon le contexte. Dans une création graphique, une mise en page, une composition plurimédia, un nombre vertigineux de briques et de strates intervient. Examinons un instant la façon dont nous « factorisons » les choses dans InDesign à travers quelques exemples : mise en place d'un modèle de document en vue d'instanciations futures, application d'une planche type sur différentes pages, itération d'une transformation (ou d'une routine quelconque, via un script) sur un ensemble d'objets, synchronisation des textes au sein d'un document ou à travers plusieurs documents, unification des attributs de style sur l'ensemble d'une composition, prototypage de la structure XML d'un catalogue, redistribution d'un même squelette de mise en page vers différents supports et formats. Et ainsi de suite.

On constate que toutes ces procédures partagent la même équation profonde. Étant donné un attribut ou une action (A) à appliquer / effectuer en direction de plusieurs objects cibles (O1, O2, O3…), notre but est d'effectuer l'opération : A × (O1 + O2 + O3...) plutôt que de faire bêtement : A × O1 + A × O2 + A × O3... Autrement dit : nous voulons factoriser A !

À y bien regarder, presque toutes les fonctionnalités d'InDesign nous donnent un moyen, nous frayent un chemin, pour factoriser quelque chose. Mettons que A soit une Transformation et que (O1, O2, O3…) soit un ensemble d'objets graphiques quelconques. Alors nous ferons appel à la fonction Répéter la transformation en séquence individuellement. Si à présent nous souhaitons mettre en forme un flux de données selon une même logique de présentation, alors nous nous tournerons sans doute vers la Fusion de données ou la couche XML. Besoin de propager le même gabarit, y compris certains objets fixes, vers plusieurs pages ou planches ? Une Page type s'en chargera. Et si nous devons réinjecter le même texte en divers endroits, moult options s'offrent à nous — selon les cas : Variables de texte, Marques de section, pourquoi pas des Références croisées, ou tout bonnement une Liaison d'article ? Faut-il réemployer un même arsenal graphique dans différents documents ? Liens, Extraits, Bibliothèque. S'agit-il d'appliquer et de maintenir un jeu cohérent de paramètres entre des objets, des paragraphes, des bribes de texte ? Dégainons nos Styles d'objet, Styles de paragraphe, Styles de caractère — avec en arrière-cuisine leurs effets, leurs styles de contour, leurs nuances… Songez aux Calques, aux Styles Grep, aux États d'objet, aux En-têtes de tableaux, aux Grilles, aux Paramètres prédifinis d'export, aux Préférences en tout genre… La liste serait interminable !

Un point essentiel doit être souligné. Factoriser ne se résume pas à rendre partageables des invariants provisoires entre différentes entités, car de nombreux corollaires surgissent aussitôt : de quelle façon les actions ou attributs partagés sont-ils liés aux objets cibles, présents ou à venir ; quelles sortes de modifications ces objets peuvent-ils supporter relativement ou indépendamment du facteur parent ; le lien est-il dynamique ou statique, peut-on l'actualiser, le verrouiller, le surcharger, le casser ?

Tout l'enjeu de la factorisation pourrait donc se condenser ainsi : offrir de la flexibilité à tel niveau sans rompre la cohérence (la synchronie) à tel autre niveau. (D'ailleurs, c'est le principal défi auquel s'affrontent aujourd'hui les graphistes — et sans nul doute les concepteurs d'InDesign — lorsqu'ils s'attaquent au fameux problème du design fluide dans le cadre de l'édition multi-supports.)

Des clones intelligents

Revenons à nos moutons clonés. Bien qu'InDesign propose des solutions évidentes pour produire des duplicatas (Copier/Coller, Dupliquer, Exécuter et répéter), une surprenante lacune est qu'il ne délivre aucun moyen (simple) de factoriser de tels objets, au sens de : « lier un prototype à plusieurs occurrences ». Certes, les pages types ménagent une sorte de canal par lequel on peut élaborer et contrôler des objets prototypes. Cependant, cette factorisation-là est terriblement rigide, elle exclut le libre positionnement des objets instanciés (sauf à briser leur lien avec la page type) et elle leur impose de toute façon une solidarité collective vis-à-vis de la page de référence. En réalité, cette fonctionnalité réalise la factorisation des pages et des planches elles-mêmes, considérées dans leur totalité. Par ailleurs, rien n'est plus simple que de factoriser l'apparence des objets (via les styles), mais là encore c'est une procédure qui ne regarde pas les objets en eux-mêmes, c'est-à-dire qu'elle ne vise pas leur géométrie interne, leur taille, les transformations qu'ils subissent, leur contenu, leur interactivité.

La capture ci-dessous présente trois blocs-texte (A, B, C) qui, apparemment, sont de pures copies indépendantes :

Sont-ces des clones intelligents, ou de vulgaires duplicatas?

Mon but est d'établir une connexion profonde entre ces blocs en instituant A comme un « objet maître », et (B, C) comme deux occurrences, ou clones, capables d'hériter de toute modification apportée à A. Ces clones pourraient se situer n'importe où dans le document actif. D'une certaine façon, on souhaite qu'ils se comportent comme des souscripteurs de A. Chaque fois qu'il arrive quelque chose à l'objet maître, on veut que tous ses souscripteurs soient avisés de l'événement et puissent se mettre à jour en parfaite synergie.

Par exemple, supposons que je change la couleur de fond de A :

Synchronisation de la nuance de fond.

Bon, vous allez me dire que j'aurais obtenu le même potentiel de factorisation à travers un style d'objet. OK, un point pour vous ! Alors, modifions plutôt le contenu de A :

Synchronisation du contenu.

Voilà qui est plus stimulant ! Mais, puisque je m'adresse à des utilisateurs d'InDesign CS5.5, vous savez probablement déjà qu'une telle synchronisation est possible par l'intermédiaire des articles liés. D'accord, c'est encore vous qui marquez ! À présent, j'aimerais appliquer une rotation à l'objet maître :

Synchronisation des transformations.

Là aussi, on pourrait arguer qu'InDesign permet fort aisément de répéter une même transformation sur une sélection d'objets. Décidément, vous êtes des contradicteurs coriaces ! Mais avez-vous aperçu l'indice qui se cache dans l'illustration ci-dessus ? Non ? Alors faisons un pas de plus et modifions carrément les points d'ancrage, donc la géométrie propre, du cadre A :

Synchronisation de la forme.

Une dernière expérience pour la route ? Injectons à tout hasard une image dans le bloc :

Synchronisation du contenu ancré.

Il est clair désormais que toute modification intrinsèque de l'objet maître se propage vers ses clones. Pour obtenir cette actualisation magique, je me contente de double-cliquer dans un certain panneau. Prenez en considération que les clones pourraient se situer absolument n'importe où dans ce même document, par exemple sur des planches ou des calques distincts. Aucune ressource externe n'est impliquée ou sollicitée pour produire et mettre à jour les clones tel que je l'illustre ci-dessus.

Solution de l'énigme sous InDesign CS5.5

Màj (19/02/2012). — J'espérais que ce problème donne du fil à retordre à mes lecteurs, mais c'était sans compter avec leur infinie sagacité. Quelques heures seulement après la formulation de l'énigme, kapooostin (v. commentaire #3 plus bas) avait déjà posté la solution: “Place this object as anchor object inside linked story.” (« Placer l'objet maître en tant qu'objet ancré dans un article lié. »)

Pour mieux saisir comment opère cette astuce, découvrons maintenant la structure intime du bloc-texte principal :

Structure intime du bloc-texte échantillon.

Comme dévoilé ci-dessus, le bloc « Sample text » est en réalité un OBJET ANCRÉ. Autrement dit, il est complètement emboîté au sein d'un ARTICLE CONTENEUR, essentiellement vide, dont la seule fonction est d'abriter l'ancre de l'objet.

En soi, l'ancre est un élément invisible, mais toute l'astuce repose sur le fait qu'InDesign traite cet élément comme un caractère pleinement fonctionnel, qui incarne l'objet ancré sous-jacent. Ainsi, il suffirait de copier/coller le caractère d'ancrage pour dupliquer instantanément l'objet ancré. Mais il y a bien mieux à faire…

InDesign CS5.5 nous autorise à créer un ou plusieurs Articles liés basés sur l'article original. Un article lié se comporte grosso modo comme un lien traditionnel. Il permet de gérer et de synchroniser plusieurs répliques d'un contenu textuel dans le même document. Puisque le caractère d'ancrage est considéré comme du contenu textuel, l'objet ancré rattaché hérite à son tour du mécanisme de liaison. C'est ainsi qu'ont été élaborés les « clones intelligents » figurés plus haut. Je vous invite à cliquer sur l'image ci-dessous pour étudier plus précisément leur connectique :

Système d'objets ancrés et liés.

Chaque réplique du bloc « Sample text » est donc accrochée à un article lié dérivant directement de l'article d'origine. Le panneau Liens rend compte de l'état de ces différentes liaisons et, bien entendu, aussitôt que l'objet maître est modifié, une icône nous avertit de cette désynchronisation. Il suffit alors de double-cliquer sur cette icône pour actualiser toutes les occurrences.

Faites-le vous-mêmes !

L'animation ci-dessous, en anglais, détaille toutes les étapes requises pour produire le clone d'un objet quelconque sous InDesign CS5.5 :

Les clones intelligents sous InDesign CS5.5 (démo en anglais).

Applications pratiques

La technique exposée dans cet article me semble très fertile. Avant tout, gardez à l'esprit que les articles liés sont par définition solidaires du texte mais n'héritent pas des réglages, styles, effets ou transformations appliqués aux blocs conteneurs. Ainsi, par exemple, si vous appliquez une rotation au bloc conteneur — et non à l'objet ancré ! — cette dernière sera sans effet sur les liens enfants, ce qui permet de gérer des clones possédant des orientations ou échelles différentes :

Clonage d'une composition typographique.

Ce principe permet en particulier d'élaborer et d'affiner, à partir d'un seul endroit, un motif basé sur des répétitions d'objets vectoriels agencés selon des symétries ou effets de transparence variés :

Plusieurs occurrences d'une même forme vectorielle gérées par le truchement d'un unique objet maître.

Observez que dans la capture ci-dessus, ni les effets ni les transformations ne sont directement appliqués aux clones — ce qui aurait pour conséquence de désynchroniser les liens — mais uniquement à leurs conteneurs respectifs. Lorsque je souhaite faire évoluer la forme élémentaire du motif, il me suffit d'opérer sur l'objet « maître » (situé en haut à gauche) et à actualiser le groupe de liens.

Autre application : rien n'interdit de placer dans le même article conteneur autant d'ancres qu'on le souhaite. Cela permet de « piloter » un ensemble d'objets homogènes depuis un même emplacement, de cloner intégralement cet ensemble, mais d'appliquer un arrangement différent aux éléments en jouant sur les propriétés du bloc conteneur. Dans l'exemple suivant, une séquence de six images est clonée puis agencée de deux façons différentes. L'article maître (à gauche) organise les images en colonne grâce à une ligne de base personnalisée — sachant que les caractères d'ancrage sont, pour la plupart, séparés par un saut de ligne forcé. Cependant, l'article lié (en haut) affiche la même séquence de photos sur deux lignes, tout en l'augmentant de plusieurs effets (mise à l'échelle, inclinaison, ombre portée, fusion « luminosité »).

Séquence d'images clonée, avec effets et réagencement.

En jouant sur les options de bloc-texte, la ligne de base, les styles de paragraphe ou de caractères, on découvre d'incroyables possibilités de moduler l'apparence des clones tout en préservant la parfaite correspondance entre les images. Dans ce cas particulier, il m'a fallu cocher la case « Supprimer les sauts de ligne forcés » du dialogue Option de lien pour les articles (panneau Liens) afin d'inhiber l'effet des caractères de saut saisis dans l'article maître. (Cliquez sur l'image pour examiner d'autres détails.)

Bon, à votre tour de jouer aux apprentis cloneurs !