Cloner et synchroniser des objets sous ID CS5.5
February 18, 2012 | Extras | fr | en
Factoriser est un paradigme omniprésent en design graphique. Il va de soi qu'un graphiste/maquettiste doit pouvoir se concentrer sur ce qu'il invente. Une fois qu'un élément est fixé, il déteste perdre son temps à le reproduire. Mais c'est un combat difficile, car le geste créatif repose lui-même sur la mise en œuvre de procédures ou de motifs itératifs, analogies, répétitions, déclinaisons, variations, mises à jour, tant et si bien que dans ce métier, on passe le plus clair de son temps à redéployer ce qui est déjà là, mais sous un angle différent. Essayons d'approfondir cette question.
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 :
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 :
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 :
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 :
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 :
Une dernière expérience pour la route ? Injectons à tout hasard une image dans le bloc :
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 :
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 :
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 :
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 :
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 :
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é »).
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 !
Comments
Hello! I'd say Smart Objects, but I don't know if they are available in ID...
@PECourtejoie
“Smart Objects” is basically a Photoshop feature. Of course you can place a PSD file in InDesign and address the original Photoshop layer(s) from within the app, which indirectly allows you to benefit from the underlying smart objects. But a native InDesign object (or layer) cannot be 'smart' in that sense—unfortunately!
Try again ;-)
Marc
Place this object as anchor object inside linked story.
@kapooostin
CONGRATS! YOU WON :-)
It's a bit frustrating to me that you found the solution so quickly, but I knew Indiscripts' readers were very cunning. Your answer is correct.
Now we need to expend further on preparing the master object, syncing the clones through the Links panel, and exploring interesting applications of this technique. Rest of my article coming soon…
@+
Marc
Thank you! You've left several hints in your article, so it was amazing I found the answer earlier than anyone else.
The idea itself is great. Linking objects inside InD is already very promising. And we can add context changes (because we are dealing with an anchor), i.e. position to spine and size and rotation of containing frame.
> And we can add context changes (because we are dealing with
> an anchor), i.e. position to spine and size and rotation
> of containing frame.
Yes ;-) And even SCALING of containing frame(s), which allows to manage smart clones having a different size relative to the master…
Yep. I'll looking forward to use it in the upcoming project :)
I do not have CS5.5, but I do have a solution for CS5 or CS4 which also works most probably in CS3 or 2: See the video that proves it here:
http://dl.dropbox.com/u/2009516/sam...
Greets, Stibi
@Stibi
Brilliant!!!
Do you use a Table Header or something?
@+
Marc
sure, that's a table header. The graphics are scalable and you can rotate or mirror them as you like.
Do I get a special price for the solution for all those without CS5.5 ? ;-)
Stibi, great job! May be you'll get dome benefits from Marc =)
Well, it's fair to reward Stibi for her killer trick, I agree.
@Stibi
As a “special price” we'll offer you a PRO script from your choice. Tell me which.
@+
Marc
Passionnant !
En plus je découvre cette nouvelle fonction d'ID CS_5.5, les "articles liés".
Peut-être même qu'ils vont m'être bien utile dans le cas d'onglets par exemple : un objet identique, mais dont le positionnement varie au fil du livre :)
Merci Marc, vos articles sont toujours riches d'enseignement pour moi.
Hi,
I used the sample javacript "ScriptMenuAction.jsx" to create a custom menu.
When i Quit and reopen Indesign, menu script was not working.
please help us.
Hi Ramki,
Are you sure you've posted your message into the right topic? The 'ScriptMenuAction' script seems more related to this page:
http://www.indiscripts.com/post/201...
@+
Marc
Bonjour,
un big problem avec Xml et ObjectStyle. Je n'arrive pas à faire en sorte qu'au moment de l'importation d'un Xml dans des blocs ayant un ObjectStyle appliqué, celui ci soit rspecté 100%. En effet la justification verticale et autres attributs fonctionnent mais pas celui de Style de parragraphe et suivant.
Je voudrais que les style de ¶ soient appliqué par le StyleObjet et ne pas avoir a le definir dans mon Xml (via tags).
Je sais que ce n'est pas facile de décrire le probleme par ecrit et ose vous l'exposer car personne n'arrive à me répondre. J'ai même trouvé un post de qq'un qui a le même problème: http://forums.adobe.com/message/479...
Je vous remercie bcp et apprécis énormément votre travail.
Cordialement
Patryck Aguilar
I would be very interested in a way to have synchronized strokes. Let's say I have two identical strokes, one is parent stroke, and the other is a child stroke. I want the points and the handles on the stroke to stay synchronized, but be able to apply different stroke styles to each stroke (and have the appearance stay independent). So if I move or add a point on the parent stroke, the same changes to the points and handles would happen in the child stroke.
I guess I could compare it to the behavior of the appearance panel in Illustrator, where you can have multiple strokes on a single object.
I'm not sure how it would be possible, but I thought I'd throw it out there as something of interest, as it is kind of along the same lines as this blog post.
Great article! I learned some new tricks.
Ok, I get how to do this, but I'm trying to do even more complex (I believe). I'm not sure if it's possible, but here is the situation:
Working on different files, I'd like to have the text update the changes automatically in all files, but also be able to add + to the style (I want some story aligned right and others left in the same page). Duplicating styles would not be practical because the different stories have a lot of different styles in them.
I tried using InCopy export, but it does not allow changing the alignment of the text without updating all files...
Hopefully someone knows a solution!