Outils pour utilisateurs

Outils du site


issue124:inkscape

This month, we’ll be continuing our look at some of the new features of Inkscape 0.9x by looking at the Symbols dialog. This is a frequently requested addition that allows you to create and maintain collections of related images that can then be inserted into the current document as necessary. Think about the boxes and shapes in a flowchart, the bubbles and word balloons in a cartoon, or the component symbols in an electronic circuit diagram, and you’ll be on the right lines. The SVG format has always allowed for symbols. They are stored in the <defs> section of the XML, where various definitions are held that could be re-used throughout the document. This is where you’ll also find gradients and filters, for example. Just having a <symbol> element in this section won’t actually render it on the page, however. For that, you have to include one or more <use> elements which refer back to the symbol. This screenshot of the XML editor shows the basic idea: the <defs> section near the top of the tree holds a single <symbol> element, which itself acts like a group, holding all the various parts of the symbol; meanwhile, at the bottom of the tree you can see three <use> elements, all of which refer to the same symbol via the “xlink:href” attribute you can see in the right-hand panel.

Ce mois-ci, nous continuerons notre étude de quelques-unes des nouvelles fonctionnalités d'Inkscape 0.9x en regardant le dialogue des Symboles. C'est un ajout fréquemment demandé qui vous permet de créer et de gérer un ensemble d'images apparentées qui peuvent ensuite être insérées dans le document courant, si nécessaire. Pensez aux cases et formes d'un organigramme, les bulles et les mots-ballons dans une bande dessinée ou les symboles de composants dans le schéma d'un circuit électronique et vous en aurez une bonne idée.

Le format SVG a toujours permis les symboles. Il sont stockés dans la section <defs> du XML, où de nombreuses définitions qui y sont gardées peuvent être ré-utilisées dans le document. C'est aussi là que vous trouverez les dégradés et les filtres, par exemple. Cependant, le simple fait d'avoir un élément <symbol> dans cette section ne le rendra pas visible sur la page. Pour cela, vous devez inclure un ou plusieurs éléments <use> qui font référence au symbole. Cette copie d'écran de l'éditeur XML montre l'idée de base : la section <defs> près du haut de l'arborescence contient un seul élément <symbol>, qui lui-même réagit comme un groupe, en contenant les diverses parties du symbole : en même temps, en bas de l'arborescence vous pouvez voir trois éléments <use>, tous faisant référence au même symbole via l'attribut « xlink:href » que vous pouvez voir dans la zone à droite.

There are two advantages to this approach. The first is file size. You can see that repeating all the content of the <symbol> element three times would take up more space than simply referring to it with <use> tags, and the more complex the symbol the greater the savings. The second is that changes to the original symbol will automatically propagate to any instances of it in the document. If that sounds a lot like clones then you’d be right – clones are also implemented as <use> elements, except that the original target is an object within the document body, not in the defs section. So, in some regards, symbols can be thought of as being clones whose source object isn’t visible. If you’ve ever found yourself hiding the source of a clone behind another object, or outside the bounds of the drawing, you can probably see the advantages. If, however, you’re scratching your head as to why you would ever need to hide the source of a clone, read on. Consider drawing a flowchart, in which you want to use the “decision” block multiple times. The standard shape for a decision block is simply a diamond, so you might draw something like this:

Cette approche a deux avantages. La première est la taille du fichier. Vous pouvez voir que la triple répétition du contenu de l'élément <symbol> prendra plus d'espace que sa simple référence avec des balises <use> ; plus le symbole est complexe, plus grande sera l'économie. La seconde est que les modifications du symbole original se propageront automatiquement à toutes ses occurrences dans le document. Si ça vous rappelle beaucoup les clones, vous êtes dans le vrai - les clones sont aussi implémentés comme des éléments <use>, sauf que la cible d'origine est un objet dans le corps du document, et non dans la section defs. Ainsi, à certains égards, les symboles peuvent être vus comme des clones dont l'objet source n'est pas visible. S'il vous est déjà arrivé de cacher la source d'un clone derrière un autre objet, ou en dehors des limites du dessin, vous pouvez sans doute y voir des avantages. Cependant, si vous vous grattez la tête pour comprendre pourquoi vous auriez besoin de cacher la source d'un clone, poursuivez votre lecture.

Prenez le dessin d'un organigramme, dans lequel vous voulez utiliser plusieurs fois le bloc « décision ». La forme classique du bloc de décision est un simple losange, qui vous pourriez dessiner ainsi :

You could use that one for the first block in your chart, then clone it for subsequent blocks, and everything is fine… right up to the point where you decide to color-code areas of the chart. Now some of your decision blocks need a different colored background, or a different stroke. A simple clone will no longer do the job. The solution was described in detail in part 30 of this series: you have to unset the fill and stroke on the original, then you can set them individually on the clones. Great! Now you can style each block exactly the way you want to. But you also have the unset original to contend with. The unset fill appears black, and the unset stroke isn’t visible at all, so it’s unlikely that you can use it as a decision block in your diagram as it stands. If you try to make it invisible, say by reducing its opacity to 0, you’ll find all the clones disappear as well. So you have little choice but to hide it in some way – sneaking it behind another element in the drawing, or placing it outside the bounds of the drawing so that it doesn’t appear in a web browser, or if you export the page as a PNG image. Arguably the most sensible approach is to put it onto its own layer, which you can then hide, but it makes it more awkward to use if you have to clone from it again.

Vous pourriez utiliser celui-là pour le premier bloc de votre graphique, puis le cloner dans les blocs suivants et tout irait bien… jusqu'au moment où vous décideriez d'ajouter des codes couleur dans des zones du graphique. Maintenant, certains des fonds de vos blocs de décision ont besoin d'être colorés différemment ou le leur contour doit être différent. Un simple clone ne convient plus. La solution a été décrite en détail dans la partie 30 de cette série : vous devez indéfinir le contour et le remplissage de l'original puis les régler individuellement pour chaque clone.

Super ! Maintenant, vous pouvez ajuster le style de chaque bloc exactement comme vous le souhaitez. Mais vous devez aussi vous coltiner l'original. Le remplissage indéfini apparaît en noir et le contour indéfini n'est pas du tout visible ; il vous est ainsi impossible de l'utiliser dans cet état comme bloc de décision dans votre diagramme. Si vous essayez de le rendre invisible, disons en réduisant son opacité à 0, vous allez voir disparaître tous les clones. Aussi, vous pouvez vous en sortir en le cachant d'une manière quelconque - en le glissant derrière un autre élément dans le dessin ou en le plaçant en dehors des limites du dessin, de sorte qu'il n'apparaît pas dans un navigateur Web ou qu'il n'est pas exporté dans une image PNG. En fait, la méthode la plus judicieuse est de le mettre sur son propre calque, que vous pouvez ensuite masquer, mais sa ré-utilisation pour créer d'autres clones devient plus difficile.

In theory, Symbols should avoid all these problems. But, in practice, the Inkscape implementation brings along enough quirks and issues that it’s nowhere near as straightforward to use as it should be. Let’s begin by opening the Symbols dialog via the Object > Symbols menu (CTRL-SHIFT-Y by default). You’ll probably see a rather empty dialog with a pop-up menu at the top and some buttons at the bottom. Using the pop-up, switch to the pre-defined Flow Chart symbols. You can use the buttons at the bottom-right of the dialog to change the size of the thumbnails, and whether they are individually scaled to fit, or all shown at the same relative size. Note that the latter can result in symbols that are cut off in the dialog, though they’ll be fine when inserted into a document. Find the Decision symbol – in my screenshot it’s the penultimate shape on the top row. Note that each symbol also has a tooltip to help identify it. Select the Decision symbol and then either copy it to the clipboard (CTRL-C) and paste it into your document (CTRL-V), or simply drag it from the dialog onto your page.

En théorie, les Symboles devraient éviter tous ces problèmes. Mais, en pratique, l'implémentation dans Inkscape contient suffisamment de bizarreries et de problèmes pour qu'il soit à peu près impossible de l'utiliser comme il faudrait. Commençons par ouvrir le dialogue des Symboles via le menu Objet > Symboles (CTRL-MAJ-Y par défaut).

Vous verrez probablement une boîte de dialogue à peu près vide avec une liste déroulante en haut et quelques boutons en bas. Dans la liste déroulante, passez aux symboles pré-définis Éléments d'organigrammes. Vous pouvez utiliser les boutons en bas à droite du dialogue, pour changer la taille des vignettes, et pour les mettre à l'échelle individuellement ou tous les présenter avec la même taille relative. Notez qu'avec le dernier, certains peuvent être tronqués dans le dialogue, mais ils sont corrects lors de leur insertion dans le dessin.

Trouvez le symbole Décision - dans ma copie d'écran, c'est la troisième forme à droite dans la première ligne. Notez que chaque symbole a aussi une info-bulle pour aider à son identification. Sélectionnez le symbole Décision et, ensuite, copiez-le dans le presse-papier (CTRL-C) et collez-le dans votre document (CTRL-V), ou tirez-le simplement du dialogue vers votre page.

With the symbol selected in the document you should see that the status bar specifically identifies the object as a “Symbol called Decision”. Duplicating, or copy-pasting it gets you another symbol, as does dragging in an extra one from the dialog. With one of your symbols selected you can change the fill and stroke color, and even the stroke style. In other words, it behaves pretty much like a clone with unset fill and stroke, but without the original object being present on the page. But all is not perfect: try changing the stroke width and you’ll find it stubbornly stuck at one size, regardless of how thick or thin the UI claims it to be. In fairness, this is an affliction that can also affect clones. Although most of the stroke properties are unset on the original object, it does have a stroke width defined, and no amount of fiddling with the cloned version will override it. The only solution is to remove the stroke width from the original object, which in this case means modifying the source symbol that’s in the <defs> section of your document. There are two ways to do this: the easy way involving the XML editor, or the tricky way via the GUI. Yes, those sentences are the right way round – somehow the Inkscape developers have made GUI editing of symbols so unintuitive that it’s often easier to wade into the XML!

Ayant sélectionné le symbole dans le document, vous devriez voir que la barre de statut identifie précisément l'objet comme « Symbole nommé Décision ». Une duplication ou un copier/coller vous fournit un autre symbole, comme le ferait un nouveau tirage à partir du dialogue. Ayant sélectionné un de vos symboles, vous pouvez changer son contour ou sa couleur de remplissage, et même le style du contour.

En d'autres termes, il se comporte plutôt comme un clone avec les remplissage et contour indéfinis, mais sans que l'objet original soit présent sur la page. Mais tout n'est pas parfait : essayez de changer la largeur du contour et vous verrez qu'il est obstinément rivé à une taille unique, quelle que soit l'épaisseur annoncée dans l'interface utilisateur.

À dire vrai, c'est aussi une maladie qui peut affecter les clones. Bien que la plupart des propriétés du contour sont indéfinies dans l'objet original, la largeur du trait est quand même définie et aucun bricolage dans le clone ne permet de passer outre. La seule solution est de supprimer la largeur du contour dans l'objet original, ce qui signifie, dans ce cas-ci, une modification du symbole source qui est dans la section <defs> de votre document. Il y a deux manières de le faire : tout simplement à l'aide de l'éditeur XML, ou - et c'est plus délicat - via l'interface utilisateur. Oui, ces phrases sont dans le bon sens, car, d'une façon mystérieuse, les développeurs d'Inkscape ont rendu l'édition de symboles dans l'interface graphique si peu intuitive qu'il est souvent plus facile de le faire dans le XML !

After opening the XML editor (Edit > XML Editor, or CTRL-SHIFT-X) and selecting one of the symbols in my document you can see that the relevant line is highlighted in the left-hand panel of the dialog. The attributes on the right include “xlink:href”, which tells you the ID of the original symbol in the <defs> section, prefixed by a “hash” or “pound” character (#). Looking at the left-hand panel you should be able to see the symbol in question (in this document it’s actually the only symbol, which makes finding it even easier). Expanding the symbol using the triangle on the left reveals the elements inside it. Because this is a really simple symbol, it’s easy to guess that the element that needs to be edited is the path. The screenshot below shows how the XML editor looks with the symbol expanded and the path selected:

Après l'ouverture de l'éditeur XML (Édition > Éditeur XML ou CTRL-MAJ-X) et la sélection d'un des symboles dans le document, vous pouvez voir que la ligne en question est surlignée dans le panneau de gauche du dialogue.

À droite, les attributs comprennent « xlink:href », qui vous indique l'ID du symbole d'origine de la section <defs>, préfixé par un caractère « hash » ou « pound » (#). En regardant le panneau de gauche, vous devriez pouvoir voir le symbole en question (dans ce document, c'est le seul symbole, ce qui en facilite la recherche). En déroulant le symbole par l'utilisation du triangle sur la gauche, les éléments qu'il contient sont révélés. Comme c'est vraiment un symbole simple, il est facile de deviner que l'élément qui doit être édité est le chemin (path). La copie d'écran ci-dessous montre l'éditeur XML avec le symbole déroulé et le « path » sélectionné :

You can see that I’ve also selected the “style” attribute in the right-hand panel. Because this only contains the stroke-width property, I could remove the entire attribute by clicking on the “Delete Attribute” button in the toolbar at the top. In other cases, however, there may be additional style properties that you wish to keep. In that case you need to select the attribute, then edit the value in the bottom-right panel before clicking the “Set” button to apply your change. In this specific case the end result is exactly the same, as removing the entire text has the effect of also removing the attribute, rather than leaving it in place with an empty value. With that change made, you can now close the dialog, return to your symbols, and change their stroke widths to whatever value you choose. Of course you’ll sometimes want to make changes to a symbol that go beyond just removing or altering an attribute or two, and in that case you have little choice but to use the GUI method for editing it. In order to do that, however, you’ll first have to convert it from a hidden object in the <defs> section to a real object in the page. During this feature’s early development, this was done through a “Convert to Group” menu option, which seemed to me to be a simple and sensible approach. So, of course, it was removed from the release version.

Vous pouvez voir que j'ai aussi sélectionné l'attribut « style » dans le panneau de droite. Comme il est le seul qui contient la propriété stroke-width (largeur du contour), je pourrais retirer tout l'attribut en cliquant sur le bouton « Supprimer l'attribut » de la barre d'outils du haut. Cependant, dans d'autres cas, il pourrait y avoir des propriétés de style supplémentaires que vous voudriez conserver. Dans ce cas, vous devez sélectionner l'attribut, puis éditer la valeur dans le panneau du bas à droite avant de cliquer sur le bouton « Définir » pour appliquer votre modification. Dans ce cas précis, le résultat final est exactement le même, car le retrait du texte en entier a aussi l'effet de retirer l'attribut, plutôt que de le laisser en place avec une valeur vide. Une fois la modification faite, vous pouvez fermer le dialogue, retourner à vos symboles et modifier l'épaisseur des contours pour la valeur que vous choisissez.

Bien sûr, parfois, vous voudrez modifier un symbole en allant plus loin que la suppression ou la modification d'un ou deux attributs et, dans ce cas, vous n'avez que le choix d'utiliser l'interface utilisateur pour le modifier. Cependant, pour ce faire, vous devez d'abord le convertir d'un objet caché dans la section <defs> en un vrai objet dans la page. Au début du développement de cette fonctionnalité, ça se faisait avec l'option du menu « Convertir en groupe », ce qui me semblait une approche simple et judicieuse. Et, bien entendu, elle a été retirée de la version publiée.

Instead you have to start with a trip back to the Symbols dialog. Switch the pop-up menu to “Current Document” – the same view that was empty when you first opened the dialog earlier. Assuming you’ve added some symbols to your document, this view will now contain an image of each of them. You can think of this as being a sneaky view into the normally hidden world of the <defs>. To edit a symbol, you have to remove it from the <defs> section and insert it into the main document by selecting it in the dialog, then clicking the second button at the bottom left. Confusingly this has a tooltip that says it’s going to remove the symbol from the current document – whereas the actual behaviour is to insert the symbol, as a group, into the document, removing it from the <defs> section and therefore from this view in the dialog. The editable version that is put into your page has far more in common with a clone parent than you might expect. Because it has an unset fill and stroke, it will appear black, and if you select any of the symbols on the page that were created from it, you’ll find that the status bar now declares them to be clones, rather than symbols. If you were to check the XML editor, you’d find that they haven’t changed – they are still <use> elements with an xlink:href attribute that links them via an ID – it’s just that the object with that ID is now in the page itself, not in the <defs> section. See, a symbol is quite literally just a clone parent that’s stored in the <defs> rather than on the page. This duality also means that, if you do need to convert an individual symbol into a real object, Edit > Clone > Unlink Clone will work.

À la place, vous devez démarrer en revenant dans le dialogue des Symboles. Choisissez « Document courant » dans la liste déroulante, c'est la même vue qui était vide à la première ouverture. En partant du principe que vous avez ajouté des symboles à votre document, cette vue contient maintenant une image de chacun d'eux. Vous pouvez vous dire que c'est une vue insidieuse du monde normalement caché des <defs>. Pour éditer un symbole, vous devez le retirer de la section <defs> et l'insérer dans le document principal en le sélectionnant dans le dialogue, puis en cliquant sur le second bouton en bas à gauche. Pour ajouter à la confusion, une info-bulle dit que cela permet le retrait du symbole du document courant, alors que son comportement est d'insérer le symbole dans le document courant sous forme de groupe, en le retirant de la section <defs> et donc de cette vue du dialogue.

La version modifiable qui est mise sur votre page a beaucoup plus de choses en commun avec un parent de clones que vous pourriez imaginer. Parce que ses remplissage et contour sont indéfinis, il apparaît en noir et, si vous sélectionnez un des symboles de la page qui ont été créés à partir de lui, vous verrez que la barre d'état les déclare maintenant comme des clones plutôt que comme symboles. Si vous vérifiez l'éditeur XML, vous verrez qu'ils n'ont pas changé ; ils sont toujours des éléments <use> avec un attribut xlink:href qui les relie via un ID - c'est tout simplement que l'objet avec cet ID se trouve maintenant dans la page elle-même et non dans la section <defs>. Comprenez bien : un symbole n'est littéralement qu'un parent de clones qui est stocké dans la section <defs> plutôt que sur la page. Cette dualité signifie aussi que, si vous avez besoin de convertir un symbole individuel en vrai objet, Édition > Cloner > Délier le clone fonctionnera.

You can now enter the group and edit as you would normally. You can add extra elements into the group, change the shape of the path, or explicitly set (or unset) the fill and stroke to determine what parts of your symbol can be overridden when it’s used in a document. If you examine the Object Properties for the enclosing group, you’ll find that it’s got a title and ID (as well as some other properties). Leave the ID alone, unless you want to break the link to any existing instances of the symbol in your document, but feel free to change the title to distinguish your newly edited symbol from the original. Finally, with it still selected in your document, use the bottom-left button in the Symbols dialog (“Add symbol from the current document”) to insert it back into the <defs> section of the document. It also converts the copy you’ve been editing into a symbol – so you’ll need to manually delete it if you don’t need another one on your page. Once again, the early builds had a simple menu option (“Convert to symbol”), but with the release version we’re stuck with confusingly tooltipped buttons in the dialog.

Vous pouvez maintenant entrer dans le groupe et faire des modifications normalement. Vous pouvez ajouter des éléments supplémentaires au groupe, modifier la forme du chemin ou définir (ou indéfinir) explicitement le remplissage et le contour pour déterminer quelles parties de votre symbole peuvent être modifiées quand il est utilisé dans votre document. Si vous examinez les Propriétés de l'objet du groupe englobant, vous verrez qu'il a un titre et un ID (ainsi que d'autres propriétés). Ne touchez pas à l'ID, sauf si vous voulez casser le lien avec toutes les occurrences de ce symbole dans votre document, mais n'hésitez pas à modifier le titre pour distinguer votre symbole nouvellement édité de l'original. Enfin, en le laissant sélectionné dans votre document, utilisez le bouton en bas à gauche dans le dialogue des symboles (« Ajouter un symbole à partir du document courant ») pour l'insérer de nouveau dans la section <defs> du document. Ceci convertit aussi la copie que vous avez modifiée en symbole, et vous devrez l'effacer à la main si vous n'en voulez pas d'autre dans votre page. Une fois encore, les premières versions avaient une simple option de menu ( « Convertir en symbole »), mais, dans la publication officielle, nous sommes limités à des boutons aux info-bulles confuses dans le dialogue.

In practice you can turn any group into a symbol. Inkscape automatically creates an ID for your group, but it’s probably best to open the object properties and set something more human-readable, as well as giving it a title. Then just select it and use the bottom-left button in the Symbols dialog to convert it. Don’t forget to unset fills and strokes if you want to be able to alter them for each instance of the symbol in your document. Once you have got to grips with creating one or two symbols, you might feel that you need an entire set, whether it be symbols for electronic components, crochet stitches or, in my case, a handy place to keep some cartoon characters. All you need to do is create all the related symbols in a single document, then give it a title in the File > Document Properties dialog (Metadata tab). Save the document to /usr/share/inkscape/symbols (for those you wish to share with other users on the machine), or ~/.config/inkscape/symbols (for use by a single user – though you’ll probably have to create the “symbols” directory). The next time you start Inkscape, you’ll find a new entry in the Symbols dialog’s pop-up, showing the title you gave to your document. Select it to gain access to your own symbols.

En pratique, vous pouvez transformer n'importe quel groupe en symbole. Inkscape crée automatiquement un ID pour votre groupe, mais c'est probablement mieux d'ouvrir les propriétés de l'objet et de mettre quelque chose de plus compréhensible pour un être humain, tout comme de lui donner un titre. Puis, sélectionnez-le et utilisez le bouton en bas à gauche dans le dialogue des Symboles pour le convertir. N'oubliez pas d'indéfinir les remplissages et contours si vous voulez pouvoir les modifier à chaque occurrence du symbole dans le document.

Une fois que vous avez appréhendé la création d'un ou deux symboles, vous pourriez sentir le besoin d'une mise en place globale, que vos symboles soient pour des composants électroniques, des points de broderie, ou, dans mon cas, un endroit pratique pour conserver des personnages de bande dessinée. Tout ce que vous avez à faire est de créer tous les symboles apparentés dans un seul document, de lui donner ensuite un titre dans la boîte de dialogue Fichier > Propriétés du document (onglet Métadonnées). Sauvegardez le document dans /usr/share/inkscape/symbols (pour ceux qui souhaitent le partager avec les autres utilisateurs de la machine), ou ~/.config/inkscape/symbols (pour l'usage d'un seul utilisateur - vous devrez probablement créer le répertoire « symbols »). Au prochain démarrage d'Inkscape, vous trouverez une nouvelle ligne dans la liste déroulante de la boîte de dialogue Symboles, portant le titre que vous avez donné à votre document. Sélectionnez-la pour accéder à vos propres symboles.

As this image shows, symbols aren’t restricted to simple shapes or single colors. Here I’ve got complex groups of paths with a variety of colors in each. It does also show, however, that there are still limitations: the sarcophagus on the right is supposed to be a shimmering gold color, but the repeating gradient of the original failed to make it into the symbol version. In general you may find similar issues with anything that links to a definition in another part of the document – such as gradients, patterns, filters or other symbols. But the Symbols dialog is really intended for simpler shapes – for domain-specific tags, markers and building blocks that might be needed to annotate or create an informative image, rather than an artistic one. The standard symbols shipped with Inkscape are okay as a starting point, but somewhat limited in scope. So if you do create any symbol libraries that are generally useful, then please consider sharing them with the wider community – it’s a great way that you can give back to the project without having to write any code.

Comme le montre cette image, les symboles ne sont pas limités à des formes simples ou des couleurs uniques. Ici, j'ai regroupé des groupes de chemins complexes, chacun avec une variété de couleurs. Cependant, cela montre bien aussi qu'il y a encore des limitations : le sarcophage de droite est supposé être dans une couleur dorée brillante, mais les dégradés à répétition de l'original ont du mal à se retrouver dans la version en symbole. En général, vous pourriez trouver de tels problèmes avec tout ce qui est lié à une définition dans une autre partie du document, tels que les dégradés, les motifs, les filtres ou autres symboles.

Mais le dialogue des Symboles est vraiment ciblé sur les formes simples, pour les étiquettes propres à un domaine, les marquages et les éléments de base qui peuvent être nécessaires pour annoter ou créer une image informative, plutôt qu'artistique. Les symboles standards livrés avec Inkscape sont bien comme point de départ, mais leur étendue est un peu limitée. Aussi, si vous créez des bibliothèques de symboles qui sont en général utiles, pensez ensuite à les partager avec la communauté élargie ; c'est une excellente façon de contribuer au projet sans écrire la moindre ligne de code.

issue124/inkscape.txt · Dernière modification : 2017/09/05 11:47 de auntiee