Avec tikzpeople comment est-il possible de remplacer la chemise par un maillot de club de football par exemple ?

Posée 18 Mar '21, 20:26

Jacques's gravatar image

Jacques
5113
Taux d'acceptation : 0%

Modifiée 18 Mar '21, 20:28

Les TikZducks ont des maillots de club de football https://texnique.fr/osqa/upfiles/Screen_Shot_2021-03-18_at_20.40.48.png

(18 Mar '21, 20:44) samcarter samcarter's gravatar image

Et comment y mettre le maillot du PSG ou de l'OM ? :)

(18 Mar '21, 20:47) Jacques Jacques's gravatar image

Pour PSG \documentclass{standalone} \usepackage{tikzducks} \begin{document} \begin{tikzpicture} \duck[tshirt=white,stripes={ \stripes[color=blue!50!black,rotate=0,width=1.5,distance=2,initialx=-1.175] \stripes[color=red,rotate=0,width=0.4,distance=2,initialx=0.375] },football] \end{tikzpicture} \end{document}

(18 Mar '21, 21:00) samcarter samcarter's gravatar image

Excellent !

(18 Mar '21, 21:12) Jacques Jacques's gravatar image

Et pour l'OM : \documentclass{standalone} \usepackage{tikzducks} \pagecolor{gray} \definecolor{OM}{RGB}{45,153,229} \begin{document} \begin{tikzpicture} \duck[tshirt=OM, jacket=white, football=gray!50!white, ] \end{tikzpicture} \end{document}

(18 Mar '21, 21:14) samcarter samcarter's gravatar image

Super, également !

(18 Mar '21, 21:16) Jacques Jacques's gravatar image
(18 Mar '21, 21:19) samcarter samcarter's gravatar image

Et sans le duck, en utilisant tikzpeople...

(18 Mar '21, 21:34) Jacques Jacques's gravatar image
Affichage de 5 parmi 8 Afficher 3 commentaire(s) en plus

Pas des TikZpeople, mais quelque chose de similaire :

\documentclass{standalone}
\usepackage{tikzducks}
\pagecolor{gray}
\definecolor{OM}{RGB}{45,153,229}
\begin{document}

\begin{tikzpicture}
   \duck[tshirt=white,stripes={
   \stripes[color=blue!50!black,rotate=-5,width=1.5,distance=2,initialx=-1.15]
   \stripes[color=red,rotate=-5,width=0.4,distance=2,initialx=0.4]
   },football]
\end{tikzpicture}

\begin{tikzpicture}
   \duck[tshirt=OM,
    jacket=white,
    football=gray!50!white,
  ]
   \end{tikzpicture}
\end{document}

alt text

Lien permanent

Publiée 18 Mar '21, 21:34

samcarter's gravatar image

samcarter
8.4k2817
Taux d'acceptation : 56%

Modifiée 18 Mar '21, 21:35

Solution

On peut créer un nouveau type de personnage pour chaque maillot différent. Et même mettre des écussons à partir d'images ! (Ils ne sont pas très bien placés dans mon exemple, mais c'est possible.) Pour les écussons il suffit de remplacer example-image-a et example-image-b par les noms des fichiers images souhaités.

\begin{filecontents*}{tikzpeople.shape.footballeurOM.sty}
  \newcommand{\tikzpeople@footballeurOM@paint}{
    \tikzpeople@person@paintshirt
    \tikzpeople@footballeurOM@paintmaillot
    \tikzpeople@person@paintrighthorn
    \tikzpeople@person@painthead
    \tikzpeople@bob@painthair
    \tikzpeople@person@paintgoatee
    \tikzpeople@person@paintlefthorn
    \tikzpeople@person@painthalo
  }

  \newcommand{\tikzpeople@footballeurOM@paintmaillot}{
    % fond du maillot
    \draw[gray,fill=black!5] 
      (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) .. 
      ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) .. 
      (-4.0pt,-8.0pt) -- cycle;
    % col du maillot
    \begin{scope}
      \clip 
        (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) .. 
        ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) .. 
        (-4.0pt,-8.0pt) -- cycle;
      \fill[cyan] (0pt,-.5pt) circle (3pt);
    \end{scope}
    % logo du club (d'après businessman)
    {
      \pgftransformrotate{20}
      \pgf@xa=1.2pt*\scalingfactor
      \if@tikzpeople@mirrored
        \pgftransformxscale{-1}
        \pgftext[at=\pgfpoint{2pt}{-5pt}]{\resizebox{\pgf@xa}{!}{\includegraphics{example-image-a}}}
      \else
        \pgftext[at=\pgfpoint{1pt}{-5pt}]{\resizebox{\pgf@xa}{!}{\includegraphics{example-image-a}}}
      \fi
    }
  }
\end{filecontents*}
\begin{filecontents*}{tikzpeople.shape.footballeurPSG.sty}
  \newcommand{\tikzpeople@footballeurPSG@paint}{
    \tikzpeople@person@paintshirt
    \tikzpeople@footballeurPSG@paintmaillot
    \tikzpeople@person@paintrighthorn
    \tikzpeople@person@painthead
    \tikzpeople@bob@painthair
    \tikzpeople@person@paintgoatee
    \tikzpeople@person@paintlefthorn
    \tikzpeople@person@painthalo
  }

  \newcommand{\tikzpeople@footballeurPSG@paintmaillot}{
    % fond du maillot
    \draw[black,fill=blue!40!black] 
      (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and ( 3pt,-9pt) .. 
      ( 5.0pt,-7.0pt) .. controls ( 5pt, 0pt) and (-5pt, 0pt) .. 
      (-4.0pt,-8.0pt) -- cycle;
    % rayures (d'après pilot)
    \begin{scope}
      \clip
        (-4.0pt,-8.0pt) .. controls (-2pt,-10pt) and (3pt,-9pt) .. (5.0pt,-7.0pt) 
        .. controls ( 5pt,  0pt) and (-5pt, 0pt) .. (-4.0pt,-8.0pt);
      \fill[red] 
        ([xshift=0.55pt]230:3pt) .. controls +(2pt,-3pt) and +(0,2.5pt) .. ++(2.25pt,-7pt) -- 
        ([shift={(2.7pt,-7pt)}]300:2pt) .. controls +(0,2.5pt) and +(2pt,-3pt) ..
        +(-2.25pt,7pt) -- cycle;
      \fill[white] 
        ([xshift=0.5pt]230:3pt) .. controls +(2pt,-3pt) and +(0,2.5pt) .. ++(2.25pt,-7pt) -- 
        ++(0.5pt,0) .. controls +(0,2.5pt) and +(2pt,-3pt) .. +(-2.25pt,7pt) --cycle;
      \fill[white]
        (300:2pt) .. controls +(2pt,-3pt) and +(0,2.5pt) .. ++(2.25pt,-7pt) -- 
        ++(0.5pt,0) .. controls +(0,2.5pt) and +(2pt,-3pt) .. +(-2.25pt,7pt) --cycle;
    \end{scope}
    % logo du club (d'après businessman)
    {
      \pgftransformrotate{20}
      \pgf@xa=1.2pt*\scalingfactor
      \if@tikzpeople@mirrored
        \pgftransformxscale{-1}
        \pgftext[at=\pgfpoint{2pt}{-5pt}]{\resizebox{\pgf@xa}{!}{\includegraphics{example-image-b}}}
      \else
        \pgftext[at=\pgfpoint{1pt}{-5pt}]{\resizebox{\pgf@xa}{!}{\includegraphics{example-image-b}}}
      \fi
    }
  }
\end{filecontents*}

\documentclass{article}

\usepackage{mwe}
\usepackage{tikzpeople}
\makeatletter
\tikzpeople@declareshape{footballeurOM}
\tikzpeople@declareshape{footballeurPSG}
\makeatother

\begin{document}

  \begin{tikzpicture}
    \node [footballeurOM,minimum width=4cm] {};
    \node [footballeurPSG,mirrored,minimum width=4cm,xshift=4.5cm] {};
  \end{tikzpicture}

  \begin{tikzpicture}
    \node [footballeurPSG,minimum width=4cm] {};
    \node [footballeurOM,mirrored,minimum width=4cm,xshift=4.5cm] {};
  \end{tikzpicture}

\end{document}

Explications

Pour créer le personnage ⟨perso⟩, on commence par créer un fichier tikzpeople.shape.⟨perso⟩.sty (ici pour que l'exemple compile j'ai utilisé l'environnement filecontents, mais bien entendu ce n'est pas obligatoire).

Dans ce fichier, on définit la commande \tikzpeople@⟨perso⟩@paint qui permettra de dessiner notre personnage. Dans cette commande on peut soit utiliser des commandes déjà définies par le package tikzpeople, soit utiliser des commandes que l'on définit après. L'ordre d'appel (pas de définition) de ces commandes est important car les différentes couches de dessin vont se superposer.

Une fois le fichier \tikzpeople@⟨perso⟩@paint écrit, il faut ajouter dans le préambule de notre document, après avoir chargé le package tikzpeople, \tikzpeople@declareshape{⟨perso⟩} (comme il y a un @ dans le nom de la commande, on doit mettre \makeatletter avant, et \makeatother après). Maintenant, on peut utiliser notre personnage ⟨perso⟩ comme les autres personnages de tikzpeople.

Pour aller plus loin sur les dessins

Comme dit plus haut le package tikzpeople définit des commandes de dessins que l'on pourra utiliser pour notre personnage (ici la coupe de cheveux de bob par exemple). Pour connaître les noms de ces commandes on pourra consulter les fichiers sources du package ici.

Pour faire des dessins avec tikzpeople on utilise TikZ et PGF, on pourra se référer, entre autres, à la documentation officielle ici, en anglais, ou à TikZ pour l'impatient de Gérard Tisseau et Jacques Duma ici, en français.

Lien permanent

Publiée 21 Mar '21, 23:32

YannD's gravatar image

YannD
465310
Taux d'acceptation : 25%

Modifiée 21 Mar '21, 23:36

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.