Pour la forme Cercle d'un nœud, l'option inner sep fixe le rayon du cercle de manière a ce qu'il soit circonscrit au rectangle ou au carré du nœud dont les dimensions sont fixées par inner xsep et inner ysep. Inner sep est un raccourcis pour fixer une valeur unique à inner xsep et inner ysep en une seule commande (et on est donc dans le cas d'un carré)

Ouvrir dans l'éditeur Overleaf
\documentclass[]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
[every node/.style={line width=1pt}]
% Le style par défaut pour les nœuds (épaisseur de ligne de 1 pt)

% La grille de repérage
\draw[help lines] (-4,-4) grid (10,4);

% Sans coordonnée pour la position du nœud, c'est la position par défaut (0,0)

% cas du rectangle
% Avec xsep et ysep le cercle est circonsrit au rectangle et a pour rayon racine carré de (xsep au carré plus ysep au carré) par Pythagore. Par exemple xsep=3 et ysep=4, donne un rayon de 5.

\node [draw,rectangle,inner xsep=2cm, inner ysep= 3cm,blue]  {};
\node [draw,circle,inner xsep=2cm, inner ysep= 3cm,red]  {};

% triangle
\draw[line width=1pt] (0,0) -- (2,0) node [midway,below]{$xsep$}-- (2,3) node [midway,sloped,below]{$ysep$}--cycle node [midway,sloped,above] {$\sqrt{xsep^2+ysep^2 }$};

% cas du carré
% Avec sep, le cercle est circonscrit au carrée et a pour rayon sep * racine de 2 (même résultat qu'avec deux valeurs identiques pour xsep et ysep, sep=xsep=ysep)
\coordinate (C) at(7,0);
\node [draw,rectangle,inner xsep=2cm, inner ysep= 2cm,blue] at (C) {};
\node [draw,circle,inner xsep=2cm, inner ysep= 2cm,red] at (C) {};

% triangle
\draw[line width=1pt] (C) -- (9,0) node [midway,below]{$sep$}-- (9,2) node [midway,sloped,below]{$sep$}--cycle node [midway,sloped,above] {$\sqrt{2 }\times sep$};

\end{tikzpicture}
\end{document}

Il y a une bizarrerie dont je ne comprend pas la logique. Si on met inner xsep=0, alors inner ysep devrait fixer la valeur du rayon (ou vice versa), or ce n'est pas exactement le cas.

On trouve un rayon très légèrement plus petit et l'écart augmente avec la taille du cercle. Pour que inner xsep soit exactement le rayon du cercle, il ne faut pas préciser inner ysep, ou bien ce qui revient au même fixer sa valeur à sa valeur initiale qui est égale à 0.3333em d'après la documentation.

Ouvrir dans l'éditeur Overleaf
\begin{tikzpicture}
[every node/.style={draw,circle,line width=0.1pt}]
% Le style par défaut pour les noeuds (dessine la forme du noeud, cercle, épaisseur de ligne de 0.1 pt, petite pour bien voir)

% La grille de repérage
\draw[help lines] (-7,-7) grid (7,7);

% Avec une seule dimension xsep ou ysep, le cercle a le bon rayon (égal à la valeur de xsep ou ysep)
\node [inner xsep=1cm,  black]  {};

% Si on met la seconde valeur à zéro, on obtient un cercle légèrement plus petit, l'écart augmente avec la taille du cercle
\node [inner ysep=2cm, inner xsep=0 cm,green]  {};
\node [inner ysep=6cm, inner xsep=0 cm,green]  {};

% Pour retrouver exactement le bon cercle, il faut mettre pour la seconde valeur sa valeur initiale, xsep ou ysep = 0.3333em
\node [inner ysep=2cm, inner xsep=0.3333em,blue]  {};
\node [inner ysep=6cm, inner xsep=0.3333em,blue]  {};
\node [inner ysep=6cm,red]  {};
% le rouge se superpose parfaitement sur le cercle bleu (qu'on ne voit plus du coup)

\end{tikzpicture}
\end{document}

En zoomant on peut voir la différence. Cercle vert avec inner ysep=O et cercle rouge avec inner ysep non précisé ou égal à 0.3333em.

La question est pourquoi inner xsep n'est pas exactement le rayon du cercle quand inner ysep=0 (ou vice versa). L'écart est minime alors ça n'a pas vraiment d'implication pratique, mais j'aimerais comprendre.

PS : Tout ceci suppose que le noeud est vide. Inner xspace et inner yspace se rajoute autour du contenu du nœud.

Posée 20 Aoû '20, 22:57

idefix's gravatar image

idefix
95594051
Taux d'acceptation : 14%

Modifiée 23 Aoû '20, 00:03

Pathe's gravatar image

Pathe ♦♦
7.4k28196245

Ce n'est pas une histoire d'épaisseur de trait ?

(20 Aoû '20, 23:56) Pathe ♦♦ Pathe's gravatar image

Avec une épaisseur de trait plus grande, le décalage persiste, simplement les cercles se superposent et une partie du cercle dessiné en premier est masquée par le second, ce qui donne l'impression de deux traits de largeurs différentes

(21 Aoû '20, 01:50) idefix idefix's gravatar image

Quand on regarde dans le code (pgfmoduleshapes.code.tex), en effet, les lignes 1189 et 1198 divisent un compteur par 255 alors qu'elles devraient diviser par 256. En modifiant ces deux lignes, le cercle vert arrive parfaitement au niveau de la grille (et le cercle rouge est un peu plus grand).

Par ailleurs, il faut prendre en compte les erreurs d'arrondi : en faisant

Ouvrir dans l'éditeur Overleaf
\node [inner ysep=6cm, inner xsep=.16em,blue]  {};
\node [inner ysep=6cm, inner xsep=.08em,blue]  {};
\node [inner ysep=6cm, inner xsep=.04em,blue]  {};
\node [inner ysep=6cm,red]  {};

on ne voit toujours que le cercle rouge (qui a xsep=0.3333em)...

Lien permanent

Publiée 21 Aoû '20, 15:05

nmarkey's gravatar image

nmarkey
1.4k19
Taux d'acceptation : 44%

Modifiée 21 Aoû '20, 20:10

Où est installé le fichier pgfmoduleshapes.code.tex ? Je ne parviens pas à le trouver. Je l'ai cherché dans TEXMF\tex\latex\pgf, mais sans succès. Je l'ai trouvé en téléchargement mais pas sur mon poste

(22 Aoû '20, 22:19) idefix idefix's gravatar image

Ça dépend sans doute des distributions, mais dans la TeXlive, il est dans ..../texlive/2020/texmf-dist/tex/generic/pgf/modules/.

(22 Aoû '20, 23:43) nmarkey nmarkey's gravatar image

Merci. Sur Windows avec MiKTeX C:\MiKTeX\tex\generic\pgf\modules\pgfmoduleshapes.code.tex donc \TEXMF\tex\generic\pgf\modules\pgfmoduleshapes.code.tex Avec TEXMF=C:\MiKTeX dans mon cas

(23 Aoû '20, 00:15) idefix idefix'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.