Avec TikZ, j'ai dessiné un carré. Grâce au paramètre rounded corners, il présente des angles arrondis. Et grâce à even odd rule, il est évidé, un peu comme si j'avais utilisé un emporte-pièce : en son centre, il n'y a rien, c'est transparent.

Si maintenant je désire en ôter un coin, je dessine un triangle à cet endroit-là, par la commande \filldraw[transparent!0] (0, 0) -- (0, 1) -- (1, 0) -- cycle ;. J'ai spécifié une couleur transparente, mais en fait ce coin est devenu blanc opaque, là où je voudrais qu'il n'y ait plus rien.

Comment faire pour ôter complètement une partie d'une figure TikZ ?

Ouvrir dans l'éditeur Overleaf
\documentclass[tikz, convert]{standalone}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[light, largesmallcaps]{kpfonts}
\begin{document}
\begin{tikzpicture}
\filldraw[blue, rounded corners, even odd rule] (0, 0) rectangle (3, 3) (1, 1) rectangle (2, 2) ;
\filldraw[transparent!0] (0, 0) -- (0, 1) -- (1, 0) -- cycle ;
\end{tikzpicture}
\end{document}

J'ai rédigé cet ECM pour l'occasion ; ma figure est bien plus complexe, de telle sorte que je ne saurais la corriger pour ne pas dessiner la partie à effacer : j'ai réellement besoin d'effacer celle-ci.

Posée 14 Déc '20, 15:58

Pathe's gravatar image

Pathe ♦♦
7.5k42204251
Taux d'acceptation : 55%

Modifiée 14 Déc '20, 16:07


Avec transparency group=knockout (cf. section 23.5 du pgfmanual) : dans un tel group, opacity=0 veut dire "transparent" (à l'intérieur de ce group). Par exemple :

Ouvrir dans l'éditeur Overleaf
\begin{tikzpicture}
  \filldraw[yellow] (0,0) rectangle (4,4);
  \begin{scope}[transparency group=knockout]
    \filldraw[blue, rounded corners, even odd rule] 
      (0, 0) rectangle (3, 3)
      (1, 1) rectangle (2, 2) ;
  \filldraw[opacity=0] (0, 0) -- (0, 1) -- (1, 0) -- cycle ;
  \end{scope}
\end{tikzpicture}

alt text

Lien permanent

Publiée 14 Déc '20, 22:05

nmarkey's gravatar image

nmarkey
1.4k29
Taux d'acceptation : 45%

Modifiée 15 Déc '20, 09:32

1

@nmarkey : la suggestion est très intéressante. Mais c'est curieux, chez moi, le coin à ôter reste présent. Et sur overleaf aussi.

(15 Déc '20, 00:41) Pathe ♦♦ Pathe's gravatar image
1

Le manuel de TikZ dit que le rendu dépend du logiciel de lecture du PDF. J'utilise Xpdf, qui donne le bon rendu. Mais effectivement, evince, okular, xournal ne donnent pas le bon rendu. :-(

(15 Déc '20, 09:29) nmarkey nmarkey's gravatar image

La fonction clip peut aider :

Ouvrir dans l'éditeur Overleaf
\begin{tikzpicture}
\clip (1,0) -- (0,1)--(0,4)--(4,4)--(4,0); 
\filldraw[blue, rounded corners, even odd rule] (0, 0) rectangle (3, 3) (1, 1) rectangle (2, 2) ;
\end{tikzpicture}
Lien permanent

Publiée 14 Déc '20, 16:56

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

Modifiée 15 Déc '20, 12:31

Pathe's gravatar image

Pathe ♦♦
7.5k42204251

Mais c'est bien sûr ! La fonction \clip ! Cher @touhami, heureusement que vous êtes là pour suppléer aux carences de mon esprit fatigué !

(14 Déc '20, 16:58) Pathe ♦♦ Pathe's gravatar image

@touhami : pour cet exemple, ça fonctionne bien. Malheureusement, pour un tracé plus complexe, ce n'est pas le cas : j'ai besoin d'ôter des parties de la figure se trouvant à l'intérieur de celle-ci (et pour lesquelles le paramètre even odd rule ne fonctionne pas plus).

(14 Déc '20, 19:01) Pathe ♦♦ Pathe's gravatar image

Voici un exemple qui peut fonctionner

\begin{tikzpicture} \clip (0,0) rectangle (4,4) (0.5,0.5) circle [radius=.5] (0.4,0.5) circle [radius=.3]; \filldraw[blue, rounded corners, even odd rule] (0, 0) rectangle (3, 3) (1, 1) rectangle (2, 2) ; \end{tikzpicture}

(15 Déc '20, 15:42) touhami touhami's gravatar image
Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.