Illustration avec tex — Les-mathematiques.net The most powerful custom community solution in the world

Illustration avec tex

Bonjour,
Je désire illustrer le Théorème de Bendixson en analyse numérique avec la matrice quelconque .
Comment y parvenir ? Ci-joint le fichier image.91046

Réponses

  • \documentclass{article}
    
    \usepackage{tikz}
    \usetikzlibrary{patterns}
    
    \begin{document}
    \begin{tikzpicture}
      \draw[>=latex,->] (-1,0)--(5,0) node[below]{$\Re$};
      \draw[>=latex,->] (0,-5)--(0,5) node[ right]{$\Im$};
      \draw[very thick] (1.5,0)--(3.5,0);
      \draw[very thick] (1.5,0) node[below left]{$a$}--(3.5,0) node[below right]{$b$};
      \draw[very thick] (0,-4) node[ left]{$(-d=)c$}--(0,4) node[ left]{$d$};
      \draw[fill,pattern=north east lines[ size=5pt]] (1.5,-4) rectangle (3.5,4);
      \draw[dash pattern=on 2pt off 2pt] (0,4)--(1.5,4);
      \draw[dash pattern=on 2pt off 2pt] (0,-4)--(1.5,-4);
      \draw[>=latex,->] (-.7,2.7) node[above left]{$\sigma(\Sigma)$} -- (0,2);
      \draw[>=latex,->] (1.3,.7) node[above left]{$\sigma(S)$} -- (2.,0);
      \draw[>=latex,->] (2.6,4.2) node[above]{rectangle contenant $\sigma(A)$} -- (3,3.5);
    \end{tikzpicture}
    \end{document}
    
  • Bonjour
    Il m'affiche un message d'erreur à la compilation sur la ligne"draw[fill, pattern ...]".
    Voici la capture de ce message (photo 1).

    Et lorsque je place le symbole de commentaire devant cette ligne, la compilation passe très bien mais sans le rectangle (photo2).91078
    91086
  • L'option
    pattern=north east lines[ size=5pt]
    
    ne fonctionne pas chez moi. Je ne sais pas si Math Coss a une version plus récente de TikZ où ça marche, mais ce qui suit fonctionne pour moi et permet de régler facilement l'aspect des hachures (à l'exception de ces dernières, il s'agit du code de Math Coss) :
    \documentclass{article}
    \usepackage{tikz}
    \usetikzlibrary{patterns}
    
    % D'après <https://tex.stackexchange.com/a/405505>,
    % <https://tex.stackexchange.com/a/119711>,
    % <https://tex.stackexchange.com/a/467631> et le manuel de TikZ & PGF.
    \makeatletter
    
    \tikzset{
      hatch distance/.store in=\hatchdistance,
      hatch distance=10pt,
      hatch thickness/.store in=\hatchthickness,
      hatch thickness=0.4pt,
    }
    
    \pgfdeclarepatternformonly[\hatchdistance,\hatchthickness,\tikz@pattern@color]
      {flexible hatch}
      {\pgfpointorigin}
      {\pgfqpoint{\hatchdistance}{\hatchdistance}}
      % Bidouille pour que les segments « alignés » se chevauchent et semblent ne
      % former qu'une droite. Il faut hélas ajuster le “-1pt” en fonction de
      % l'épaisseur du trait.
      {\pgfpoint{\hatchdistance-1pt}{\hatchdistance-1pt}}
      {
        \pgfsetstrokecolor{\tikz@pattern@color}
        \pgfsetlinewidth{\hatchthickness}
        \pgfpathmoveto{\pgfpointorigin}
        \pgfpathlineto{\pgfqpoint{\hatchdistance}{\hatchdistance}}
        \pgfusepath{stroke}
      }
    
    \makeatother
    
    \begin{document}
    
    \begin{tikzpicture}
      \draw[>=latex,->] (-1,0)--(5,0) node[below]{$\Re$};
      \draw[>=latex,->] (0,-5)--(0,5) node[ right]{$\Im$};
      \draw[very thick] (1.5,0)--(3.5,0);
      \draw[very thick] (1.5,0) node[below left]{$a$}
                     -- (3.5,0) node[below right]{$b$};
      \draw[very thick] (0,-4) node[ left]{$(-d=)c$}--(0,4) node[ left]{$d$};
      \draw[fill, pattern=flexible hatch, pattern color=blue!60,
            hatch thickness=0.4pt, hatch distance=15pt] (1.5,-4) rectangle (3.5,4);
      \draw[dash pattern=on 2pt off 2pt] (0,4)--(1.5,4);
      \draw[dash pattern=on 2pt off 2pt] (0,-4)--(1.5,-4);
      \draw[>=latex,->] (-.7,2.7) node[above left]{$\sigma(\Sigma)$} -- (0,2);
      \draw[>=latex,->] (1.3,.7) node[above left]{$\sigma(S)$} -- (2.,0);
      \draw[>=latex,->] (2.6,4.2) node[above]
        {rectangle contenant $\sigma(A)$} -- (3,3.5);
    \end{tikzpicture}
    
    \end{document}
    
    Edit :
    • remplacement de '/tikz/hatch color' par la clé standard '/tikz/pattern color' et son pendant \tikz@pattern@color ;
    • remplacement de \pgfqpoint{0pt}{0pt} par \pgfpointorigin ;
    • mise à jour des références et explication sommaire de la bidouille avec \pgfpoint{\hatchdistance-1pt}{\hatchdistance-1pt} (plus d'explications dans un message ultérieur).
    91090
  • Oups, désolé, la partie avec « size=5pt » était une tentative naïve d'espacer les hachures mais non, cela ne fonctionne pas chez moi non plus. Je pensais l'avoir supprimé après avoir renoncé à comprendre ce qu'a fait Brian.
  • Merci beaucoup @Brian et @Math Coss .
    Oui, l'option dont vient d'evoquer brian posait probleme. Je t'ai bien compris Math Coss .
    Encore merci pour cet effort .
    Tout marche très bien maintenant !
  • Bonjour
    Pour tracer les hachures, une solution moins experte B-)
    Alain
    \documentclass{article}
    
    \usepackage{tikz}
    %\usetikzlibrary{patterns}
    
    \begin{document}
    \begin{tikzpicture}
      \draw[>=latex,->] (-1,0)--(5,0) node[below]{$\Re$};
      \draw[>=latex,->] (0,-5)--(0,5) node[ right]{$\Im$};
      \draw[very thick] (1.5,0)--(3.5,0);
      \draw[very thick] (1.5,0) node[below left]{$a$}--(3.5,0) node[below right]{$b$};
      \draw[very thick] (0,-4) node[ left]{$(-d=)c$}--(0,4) node[ left]{$d$};
      %  \draw[fill,pattern=north east lines,[ size=5pt]] (1.5,-4) rectangle (3.5,4)[color=#006666]
      \begin{scope}
        \draw (1.5,-4) rectangle (3.5,4);
        \clip (1.5,-4) rectangle (3.5,4);
        \foreach \y in {-6.2,-5.5,...,4} {
          \draw (1.5,\y)--(3.5,\y+2);
        }
      \end{scope} %[/color]
      \draw[dash pattern=on 2pt off 2pt] (0,4)--(1.5,4);
      \draw[dash pattern=on 2pt off 2pt] (0,-4)--(1.5,-4);
      \draw[>=latex,->] (-.7,2.7) node[above left]{$\sigma(\Sigma)$} -- (0,2);
      \draw[>=latex,->] (1.3,.7) node[above left]{$\sigma(S)$} -- (2.,0);
      \draw[>=latex,->] (2.6,4.2) node[above]{rectangle contenant $\sigma(A)$} -- (3,3.5);
    \end{tikzpicture}
    \end{document}
    
    91100
  • J'ai un peu modifié le code. La méthode d'Alain est bien aussi. L'avantage des motifs (patterns) de PGF & TikZ, en dehors de la facilité d'utilisation une fois qu'on les a définis, c'est qu'ils sont censés être beaucoup plus rapides car ils sont entièrement gérés par les langages de bas niveau sous-jacents (PDF ou SVG, voir Patterns vers la page 1152 du manuel de TikZ & PGF).

    Cela dit, il y a un prix à payer pour ces avantages, et j'espère répondre ici un peu à Math Coss qui semblait perplexe. Il y a quelques contraintes à respecter lorsqu'on définit un motif. Par exemple, il faut explicitement déclarer les paramètres qui peuvent varier, sinon ils ne varieront pas (TikZ crée pour nous un « motif bas niveau » différent pour chaque combinaison des paramètres utilisée dans le document ; il faut comprendre ces « motifs bas niveau » comme des textures qui ne changent pas au cours du document). De plus, en me penchant sur le code que j'avais pompé comme indiqué sur TeX.SE, j'ai pu confirmer ce dont on se doutait : le {\pgfpoint{\hatchdistance-1pt}{\hatchdistance-1pt}} est une bidouille qui marche avec des largeurs de traits de l'ordre de 1pt ou plus petites. Si l'on veut des hachures très épaisses, il faut diminuer la valeur \hatchdistance-1pt. La soustraction sert à compenser la façon dont sont tracées les extrémités des segments, c'est-à-dire en pointe pour moi (sortie PDF). D'après mes essais, les commandes telles que \pgfsetroundcap, \pgfsetbuttcap & Cie ne fonctionnent pas dans les motifs, pas plus que \pgflinewidth (sans doute à cause de la gestion très bas niveau des motifs). Voilà pourquoi, à mon avis, les réglages des hachures ne sont pas proposés de manière simple et standard par TikZ, et pourquoi ceux qui souhaitent s'en servir semblent tous utiliser cette technique « pas très satisfaisante pour l'esprit » (clin d'œil à mon prof de Spé ;-)).

    J'espère que j'ai à peu près répondu aux interrogations. Pour ceux qui veulent bien comprendre comment sont définis ces motifs, il faut évidemment lire la section Patterns du manuel de TikZ & PGF. Par ailleurs, le code commenté ci-dessous peut aider un peu (il y a des hachures épaisses avec joints bien visibles — faciles à combler comme expliqué ci-dessus — et une technique plus « pure » pour les motifs monochromes comme on a ici, mais avec elle aussi quelques limitations, semble-t-il).
    \documentclass{article}
    \usepackage{tikz}
    \usetikzlibrary{patterns}
    
    \makeatletter
    \tikzset{
      hatch distance/.store in=\hatchdistance,
      hatch distance=10pt,
      hatch thickness/.store in=\hatchthickness,
      hatch thickness=0.4pt,
    }
    
    % Important, le \tikz@pattern@color, sinon on ne peut pas avoir plusieurs fois
    % le motif 'flexible hatch' avec les mêmes \hatchdistance et \hatchthickness
    % mais des couleurs différentes.
    \pgfdeclarepatternformonly[\hatchdistance,\hatchthickness,\tikz@pattern@color]
      {flexible hatch}
      {\pgfpointorigin}
      {\pgfqpoint{\hatchdistance}{\hatchdistance}}
      % Bidouille pour que les segments « alignés » se chevauchent et semblent ne
      % former qu'une droite. Il faut hélas ajuster le “-1pt” en fonction de
      % l'épaisseur du trait. En effet, \pgflinewidth ne convient pas ici (les
      % motifs sont gérés à un très bas niveau, c'est sans doute aussi pour ça
      % que \pgfsetroundcap, \pgfsetbuttcap, etc., n'ont aucun effet dans ce
      % contexte — testé avec TikZ 2019/08/03 v3.1.4b).
      {\pgfpoint{\hatchdistance-1pt}{\hatchdistance-1pt}}
      {
        % Normalement, il ne faudrait pas toucher aux couleurs dans une définition
        % de motif faite avec \pgfdeclarepatternformonly, mais à moins de se
        % contenter de \pgfusepath{fill}, on ne peut alors pas changer la couleur,
        % c'est bizarre. C'est contraire aux recommandations du manuel de TikZ et
        % PGF, mais tout le monde le fait sur TeX.SE !
        \pgfsetstrokecolor{\tikz@pattern@color}
        \pgfsetlinewidth{\hatchthickness}
        \pgfpathmoveto{\pgfpointorigin}
        \pgfpathlineto{\pgfqpoint{\hatchdistance}{\hatchdistance}}
        \pgfusepath{stroke}
      }
    
    \tikzset{
      test distance/.store in=\testdistance,
      test distance=10pt,
      test thickness/.store in=\testthickness,
      test thickness=0.4pt,
    }
    
    % Exemple avec \pgfusepath{fill} qui ne fait rien d'interdit avec les
    % couleurs, mais... si l'on met les variables [\testdistance,\testthickness]
    % ou encore [\testdistance,\testthickness,\tikz@pattern@color], la pattern
    % color n'est pas prise en compte. Donc ce n'est pas terrible non plus (en
    % gros, avec cette méthode, il faut renoncer à changer les dimensions d'une
    % utilisation à l'autre du motif).
    \pgfdeclarepatternformonly{test}
      {\pgfqpoint{0pt}{0pt}}
      {\pgfqpoint{\testdistance}{\testdistance}}
      {\pgfpoint{2*\testdistance}{2*\testdistance}}
      {
        \pgfsetlinewidth{\testthickness}
        \pgfpathmoveto{\pgfpointorigin}
        \pgfpathlineto{\pgfqpoint{0pt}{\testdistance}}
        \pgfpathlineto{\pgfqpoint{\testdistance}{\testdistance}}
        \pgfpathlineto{\pgfqpoint{\testdistance}{0pt}}
        \pgfpathclose
        \pgfusepath{fill}
      }
    
    \makeatother
    
    \begin{document}
    
    \noindent
    \begin{tikzpicture}
      \filldraw[ultra thin, pattern=flexible hatch, pattern color=blue!60,
                hatch thickness=20pt, hatch distance=45pt] (-2,-2) rectangle (4,2);
    
      \filldraw[ultra thin, pattern=flexible hatch, pattern color=red!60,
                hatch thickness=10pt, hatch distance=25pt] (6,-2) rectangle (10,2);
    
      \begin{scope}[yshift=-5cm]
        \filldraw[pattern=test, pattern color=blue!60,
                  test thickness=3.4pt, test distance=15pt] (-2,-2) rectangle (4,2);
      \end{scope}
    \end{tikzpicture}
    
    \end{document}
    
  • Bonjour,
    Je remercie brian pour son message ci-dessus qui m'a bien aidé. :-)
  • Bonjour Calli,

    Merci pour ton message. Je crois n'avoir pas mentionné la bibliothèque TikZ 'patterns.meta' ; elle doit être plus récente que 'patterns'. Voir le manuel de TikZ & PGF ('texdoc pgfmanual' en local) à Libraries -> Pattern Library -> User-Defined Patterns.

    L'intro dit :
    Define your own patterns with a syntax similar to arrows.meta.

    Caveat: This library is currently experimental and might change without notice. There are some known shortcomings that will hopefully be fixed in the future.

    Il faut donc faire attention (éviter, sans doute) si la compatibilité du document avec les versions futures de cette bibliothèque est importante.
Connectez-vous ou Inscrivez-vous pour répondre.
Success message!