je profite lâchement de ce qu'il y a quelques messages concernant TikZ
pour poser moi aussi une question à son sujet...
Y aurait-il un équivalent sous TikZ de la commande \psgrid de
PSTricks ?
Pour ceux qui ne connaîtraient pas, c'est très pratique pour créer des
grilles de repérage :
\documentclass{article}
\usepackage{pstricks}
\begin{document}
\begin{pspicture}(-3,-3)(3,3)
\psgrid
\end{pspicture}
\end{document}
Avec TikZ, on peut certes reproduire ça (en moins bien) à la main à
grand coups de \foreach :
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (-3,-3) grid (3,3);
\foreach \x in {-3,...,3}
\draw (\x cm,-3.1cm) -- (\x cm,-2.99cm) node[anchor=north] {$\x$};
\foreach \y in {-3,...,3}
\draw (-3.1cm,\y cm) -- (-2.99cm,\y cm) node[anchor=east] {$\y$};
\end{tikzpicture}
\end{document}
mais je trouve ça trèèèès lourd... Y a-t-il plus simple ?
Merci d'avance.
--
Denis
\draw[help lines] (0,0) grid (3,2);
avec le pas par défaut
ou
\draw [ xstep=0.3cm,ystep=0.2cm] (-3,-3.) grid (3.5,5);
en changeant le pas
> \draw[help lines] (0,0) grid (3,2);
> avec le pas par défaut
> ou
> \draw [ xstep=0.3cm,ystep=0.2cm] (-3,-3.) grid (3.5,5);
>
> en changeant le pas
Merci, mais ceci ne génère pas les graduations, ni la sous-grille...
--
Denis
> Avec TikZ, on peut certes reproduire ça (en moins bien) à la main à
> grand coups de \foreach :
>
> \documentclass{article}
> \usepackage{tikz}
> \begin{document}
> \begin{tikzpicture}
> \draw (-3,-3) grid (3,3);
> \foreach \x in {-3,...,3}
> \draw (\x cm,-3.1cm) -- (\x cm,-2.99cm) node[anchor=north] {$\x$};
> \foreach \y in {-3,...,3}
> \draw (-3.1cm,\y cm) -- (-2.99cm,\y cm) node[anchor=east] {$\y$};
> \end{tikzpicture}
> \end{document}
>
> mais je trouve ça trèèèès lourd... Y a-t-il plus simple ?
On peut faire un peu plus simple et joli :
\begin{tikzpicture}
\draw[gray!50] (-3.1,-3.1) grid[step=.2] (3,3);
\draw[red!50] (-3.2,-3.2) grid (3,3);
\foreach \coord in {-3,...,3}{
\node[below=1mm] at (\coord,-3) {$\coord$};
\node[left=1mm] at (-3,\coord) {$\coord$};
}
\end{tikzpicture}
Mais il n'y a pas de commande toute faite...
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
bonjour
Presque dans tkz-base ( envoi sur ctan cette semaine )
\tkzInit[ .......]
\tkzGrid[sub]
\tkzAxeXY
on peut définir tout définir suivant ses désirs etc..
mais c'est un gros truc pour avoir seulement une grille
Alain
> On peut faire un peu plus simple et joli :
>
> \begin{tikzpicture}
> \draw[gray!50] (-3.1,-3.1) grid[step=.2] (3,3);
> \draw[red!50] (-3.2,-3.2) grid (3,3);
> \foreach \coord in {-3,...,3}{
> \node[below=1mm] at (\coord,-3) {$\coord$};
> \node[left=1mm] at (-3,\coord) {$\coord$};
> }
> \end{tikzpicture}
Effectivement !
> Mais il n'y a pas de commande toute faite...
Oui. En particulier, je trouve regrettable d'avoir à spécifier des
dimensions. La commande \psgrid de PSTricks, qui se charge de tout
toute seule comme une grande, est quand même très pratique...
Merci.
--
Denis
> bonjour
Bonjour,
> Presque dans tkz-base ( envoi sur ctan cette semaine )
>
> \tkzInit[ .......]
> \tkzGrid[sub]
> \tkzAxeXY
>
> on peut définir tout définir suivant ses désirs etc..
> mais c'est un gros truc pour avoir seulement une grille
Ah ! J'attends avec impatience alors...
Merci.
--
Denis
> Oui. En particulier, je trouve regrettable d'avoir à spécifier des
> dimensions. La commande \psgrid de PSTricks, qui se charge de tout
> toute seule comme une grande, est quand même très pratique...
Mais on peut très bien utiliser le pseudo noeud (current bounding box)
pour faire ses dessins. Un truc du genre :
\usepackage{tikz}
\usetikzlibrary{background}
\begin{tikzpicture}
% un dessin...
\draw (-1,-3) -- (5,3);
% un fond millimétré
\begin{pgfonlayer}{background}
\draw[gray!50]
(current bounding box.south west)
grid[step=.2] (current bounding box.north east);
\draw[red!50]
(current bounding box.south west)
grid (current bounding box.north east);
\end{pgfonlayer}
\end{tikzpicture}
Il reste un peu de boulot pour extraire les min et max sur x et y et
afficher les valeurs...
> Mais on peut très bien utiliser le pseudo noeud (current bounding box)
> pour faire ses dessins. Un truc du genre :
>
> \usepackage{tikz}
> \usetikzlibrary{background}
\usetikzlibrary{backgrounds}
> \begin{tikzpicture}
>
> % un dessin...
> \draw (-1,-3) -- (5,3);
>
> % un fond millimétré
> \begin{pgfonlayer}{background}
> \draw[gray!50]
> (current bounding box.south west)
> grid[step=.2] (current bounding box.north east);
> \draw[red!50]
> (current bounding box.south west)
> grid (current bounding box.north east);
> \end{pgfonlayer}
> \end{tikzpicture}
Aaaahhhh, c'est déjà beaucoup mieux !
> Il reste un peu de boulot pour extraire les min et max sur x et y et
> afficher les valeurs...
Ouaip ! Je suis surpris de ne voir quasiment aucun repère sur les
grilles des exemples dans la documentation de TikZ.
Merci !
--
Denis
>> Mais il n'y a pas de commande toute faite...
>
> Oui. En particulier, je trouve regrettable d'avoir à spécifier des
> dimensions. La commande \psgrid de PSTricks, qui se charge de tout
> toute seule comme une grande, est quand même très pratique...
j'utilise une macro \tikzgrid que j'ai récupéré je sais plus
(probablement chez Alain) qui trace une grille "sous" la figure à
partir de la bounding box
à adapter
============
\newcommand{\tikzgrid}{
\draw[step=2mm,ultra thin,blue] (current bounding box.south west) grid
(current bounding box.north east);
\draw[step=1cm,thin,red] (current bounding box.south west) grid (current
bounding box.north east);
\draw[step=5cm,thick,red] (current bounding box.south west) grid
(current bounding box.north east);
}
===========
>
> Merci.
On peut la mettre réellement en dessous, soit en la traçant en premier, soit
avec des couches. En plus, on peut utiliser opacity sous pdflatex pour
la rendre encore plus discrète.
On peut automatiser l'épaisseur des traits et la couleur de la sous
grille par par rapport
à la grille principale. En fait tout est assez facilement programmable.
Alain
Mon package est destiné à constuire un repère orthogonal dans lequel
on peut placer une grille. Mantenant si l'idée, est de placer une grille
sous un dessin pour lire des coordonnées, c'est un peu différent.
Tu as une solution correcte comme celle de Paul
Il utilise background, pgfonlayer et current bounding box
qui sont les mots clefs pour ce que tu veux.
Plus simple est peut être de partir du centre de la feuille pour automatiser
l'affichage en faisant quatre grilles. ( quatre quadrants )
Alain
> Le mardi 11/01/11 à 08h31,
> Paul Gaborit <Paul.G...@invalid.invalid> a écrit :
>
>> Mais on peut très bien utiliser le pseudo noeud (current bounding box)
>> pour faire ses dessins. Un truc du genre :
>>
>> \usepackage{tikz}
>> \usetikzlibrary{background}
>
> \usetikzlibrary{backgrounds}
>
>> \begin{tikzpicture}
>>
>> % un dessin...
>> \draw (-1,-3) -- (5,3);
>>
>> % un fond millimétré
>> \begin{pgfonlayer}{background}
>> \draw[gray!50]
>> (current bounding box.south west)
>> grid[step=.2] (current bounding box.north east);
>> \draw[red!50]
>> (current bounding box.south west)
>> grid (current bounding box.north east);
>> \end{pgfonlayer}
>> \end{tikzpicture}
>
> Aaaahhhh, c'est déjà beaucoup mieux !
Tant mieux...
>> Il reste un peu de boulot pour extraire les min et max sur x et y et
>> afficher les valeurs...
>
> Ouaip ! Je suis surpris de ne voir quasiment aucun repère sur les
> grilles des exemples dans la documentation de TikZ.
En fait, en TikZ (mais ça doit être vrai en PSTricks), on essaye de se
servir le moins possible des coordonnées absolues (qui nécessite une
grille mais qui resiste mal au changement d'échelle) : soit on utilise
du positionnement relatif (entre les éléments) soit on utilise des
unités qui ne sont pas celles par défaut (c'est le cas lorsqu'onb trace
une courbe ou qu'on utilise pgfplots).
> En fait, en TikZ (mais ça doit être vrai en PSTricks), on essaye de se
> servir le moins possible des coordonnées absolues (qui nécessite une
> grille mais qui resiste mal au changement d'échelle) : soit on utilise
> du positionnement relatif (entre les éléments) soit on utilise des
> unités qui ne sont pas celles par défaut (c'est le cas lorsqu'onb
> trace une courbe ou qu'on utilise pgfplots).
Effectivement. En fait, si j'ai posé cette question, c'est que j'ai
besoin de placer des indications sur une capture d'écran et là, le
positionnement absolu est nécessaire...
--
Denis
> Effectivement. En fait, si j'ai posé cette question, c'est que j'ai
> besoin de placer des indications sur une capture d'écran et là, le
> positionnement absolu est nécessaire...
Même pas ! ;-)
Je faisais comme toi... avant. Jusqu'au jour où une même figure
intégrant une image externe devait apparaître sur des transparents
(beamer), dans un rapport (A4) et sur un poster (format A0). Évidemment,
il fallait changer d'échelle à chaque fois...
J'ai donc adopté une approche légèrement différente (qui peut nécessiter
aussi une grille mais relative à la taille de l'image).
L'exemple ci-dessous (qui utilise une image externe à fournir) montre
cela :
%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{article}
\usepackage{tikz}
\begin{document}
\newcommand\grilleimage[1]{
\foreach \x in {0,0.1,...,1.01}{
\path (#1.south west) -- (#1.north west) coordinate[pos=\x] (x);
\draw[gray]
(#1.south west |- x) ++(-.1,0)
node[left]{\pgfmathprintnumber{\x}} -- (#1.south east |- x);
\path (#1.south west) -- (#1.south east) coordinate[pos=\x] (x);
\draw[gray]
(#1.south west -| x) ++(0,-.1)
node[rotate=90,left]{\pgfmathprintnumber{\x}} -- (#1.north west -| x);
}
}
\newcommand\defpt[4]{
\path (#1.south west) -- (#1.south east) coordinate[pos=#2] (x);
\path (#1.south west) -- (#1.north west) coordinate[pos=#3] (y);
\coordinate (#4) at (x |- y);
}
\begin{tikzpicture}
\node[inner sep=0cm] (image) {\includegraphics[width=5cm]{image}};
\grilleimage{image}
\defpt{image}{0.5}{0.5}{milieu}
\defpt{image}{0.75}{0}{trois quart bas}
\fill[red] (milieu) circle[radius=2pt];
\fill[red] (trois quart bas) circle[radius=2pt];
\end{tikzpicture}
\end{document}
%%%%%%%%%%%%%%%%%%%%%%%
L'intérêt est de pouvoir changer la largeur de 5cm sans rien changer
d'autre et que les dessins ajoutés au-dessus de l'image continue à
fonctionner !
Il est faisable de singer pstricks sur ce coup , comme le dit Tantau, Tikz
est fait pour "programmer" ses dessins.
1) Voici une pdfGrid, pdf n'a rien à voir dans cette affaire mais bon
je ne savais pas quoi mettre
comme nom
On peut définir la couleur principale mais la couleur secondaire est
fonction de la première
On peut changer le coefficient de la relation pdfCoeffSubColor.
Par défaut la couleur c'est gray
Les valeurs par défaut sont ici
\def\pdfCoeffSubColor{50}
\def\pdfgridsubstep{0.2}
\def\pdfgridcolor{gray}
\def\@xa{-5}
\def\@ya{-5}
\def\@xb{5}
\def\@yb{5}
En suite, l'épaisseur des traits pour la sous grille est .4pt
c'est l'épaisseur par défaut dans TikZ, et celle de la grille principale est
.8 pt mais il suffit de mettre en option line width ou thick pour changer cela.
Il est possible de faire comme pour la couleur, une relation entre lw et sublw.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{article}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\makeatletter
\newif\ifpdf@grid@sub
\def\pdfCoeffSubColor{50}
\def\pdf@grid@substep{0.2}
\def\pdf@grid@color{gray}
\def\@xa{-5}
\def\@ya{-5}
\def\@xb{5}
\def\@yb{5}
\pgfkeys{
/pdfGrid/.cd,
color/.code = {\def\my@grid@color{#1}%
\edef\my@grid@subcolor{%
\my@grid@color!\pdfCoeffSubColor}},
substep/.code = {\def\my@grid@step{#1}},
sub/.is if = pdf@grid@sub,
sub/.default = true,
/pdfGrid/.unknown/.code = {\let\searchname=\pgfkeyscurrentname
\pgfkeysalso{\searchname/.try=#1,
/tikz/\searchname/.retry=#1}}}
\def\pdfGrid{\pgfutil@ifnextchar[{\pdf@Grid}{\pdf@Grid[]}}
\def\pdf@Grid[#1]{%
\pgfutil@ifnextchar({%
\pdf@@Grid[#1]}{%
\pdf@@Grid[#1](\@xa,\@ya)(\@xb,\@yb)}%
}
\def\pdf@@Grid[#1](#2,#3)(#4,#5){%
\begingroup
\pgfkeys{
/pdfGrid/.cd,
sub = false,
color = \pdf@grid@color,
substep = \pdf@grid@substep
}
\pgfqkeys{/pdfGrid}{#1}
\pgf@xa=\pgflinewidth
\begin{pgfonlayer}{background}
\ifpdf@grid@sub
\draw [xstep = \my@grid@step,
ystep = \my@grid@step,
color = \my@grid@subcolor] (#2,#3) grid (#4,#5);
\fi
\draw [color = \my@grid@color,
line width= .8pt,
/pdfGrid/.cd,#1] (#2,#3) grid (#4,#5);
\foreach \coord in {#2,...,#4}{
\node[below=1mm] at (\coord,#3) {$\coord$};
\node[left=1mm] at (#2,\coord) {$\coord$};
}
\end{pgfonlayer}
\endgroup
}
\makeatother
\begin{document}
\begin{tikzpicture}
\draw[color=red,fill=red!50] (1,1) circle (2cm);
\pdfGrid[sub,color=orange,thin,subxstep=.5,subystep=.5]
\end{tikzpicture}
\begin{tikzpicture}
\pdfGrid[sub,thick](-3,-3)(3,3)
\end{tikzpicture}
\end{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 ) si tu prends tkz-base sur mon site alors il ya encore plus simple.
Pour l'occasion, j'ai créé une macro pour mettre l'affichage en dehors
de la grille
car pour moi c'est le long des axes de coordonnées
On peut soit faire une macro qui englobe le tout voir un environnement
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{article}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{tkz-base}
\makeatletter
\newcommand\LabelGrid{%
\begin{scope}[yshift=\tkz@init@ymin cm]
\tkzLabelX
\end{scope}
\begin{scope}[xshift=\tkz@init@xmin cm]
\tkzLabelY
\end{scope}
}
\makeatother
\begin{document}
\begin{tikzpicture}
\tkzInit[xmin=-3,xmax=3,ymin=-3,ymax=3]
\tkzGrid[sub]
% tkzLabelXY
\LabelGrid
\end{tikzpicture}
\end{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Alain Matthes
/usr/local/texlive/2010/texmf-dist/doc/generic/pstricks/images/tiger.eps
Il suffit de faire :
\begin{tikzpicture}
\node[inner sep=0cm]{\includegraphics[width=8cm]{tiger}};
\pdfGrid[sub,color=orange]
\end{tikzpicture}
Alain
> Même pas ! ;-)
>
> Je faisais comme toi... avant. Jusqu'au jour où une même figure
> intégrant une image externe devait apparaître sur des transparents
> (beamer), dans un rapport (A4) et sur un poster (format A0).
> Évidemment, il fallait changer d'échelle à chaque fois...
>
> J'ai donc adopté une approche légèrement différente (qui peut
> nécessiter aussi une grille mais relative à la taille de l'image).
>
> L'exemple ci-dessous (qui utilise une image externe à fournir) montre
> cela :
> [...]
C'est beau !
> L'intérêt est de pouvoir changer la largeur de 5cm sans rien changer
> d'autre et que les dessins ajoutés au-dessus de l'image continue à
> fonctionner !
Effectivement.
Merci !
--
Denis
> On 2011-01-11 08:19:22 +0100, Denis Bitouzé said:
> > Oui. En particulier, je trouve regrettable d'avoir à spécifier des
> > dimensions. La commande \psgrid de PSTricks, qui se charge de tout
> > toute seule comme une grande, est quand même très pratique...
>
> Il est faisable de singer pstricks sur ce coup , comme le dit Tantau,
> Tikz est fait pour "programmer" ses dessins.
>
> 1) Voici une pdfGrid, pdf n'a rien à voir dans cette affaire mais bon
> je ne savais pas quoi mettre
> comme nom
>
> On peut définir la couleur principale mais la couleur secondaire est
> fonction de la première
> On peut changer le coefficient de la relation pdfCoeffSubColor.
> Par défaut la couleur c'est gray
>
> [...]
C'est beau aussi ! Enfin, le résultat... parce que le code est assez
indigeste ! ;)
> 2 ) si tu prends tkz-base sur mon site alors il ya encore plus simple.
> Pour l'occasion, j'ai créé une macro pour mettre l'affichage en
> dehors de la grille
> car pour moi c'est le long des axes de coordonnées
> On peut soit faire une macro qui englobe le tout voir un environnement
>
> [...]
Je n'ai pas le temps de tester ça ce soir, mais je le fais dès que
possible.
Merci !
--
Denis
> Le mardi 11/01/11 à 15h18,
> Alain Matthes <al...@pomme.com> a écrit :
>
>> On 2011-01-11 08:19:22 +0100, Denis Bitouzé said:
>>> Oui. En particulier, je trouve regrettable d'avoir à spécifier des
>>> dimensions. La commande \psgrid de PSTricks, qui se charge de tout
>>> toute seule comme une grande, est quand même très pratique...
>>
>> Il est faisable de singer pstricks sur ce coup , comme le dit Tantau,
>> Tikz est fait pour "programmer" ses dessins.
>>
>> 1) Voici une pdfGrid, pdf n'a rien à voir dans cette affaire mais bon>
>> je ne savais pas quoi mettre
>> comme nom
>>
>> On peut définir la couleur principale mais la couleur secondaire est>
>> fonction de la première
>> On peut changer le coefficient de la relation pdfCoeffSubColor.
>> Par défaut la couleur c'est gray
>>
>> [...]
>
> C'est beau aussi ! Enfin, le résultat... parce que le code est assez
> indigeste ! ;)
Je me doutais un peu de cette réaction mais ce n'est pas un code
utilisateur, c'est pour obtenir une macro singeant \psgrid.
Que cela soit avec xkeyval ou bien comme ici pgfkeys, le code
pour traiter les options n'est pas très gai, ensuite il faut
parfois par TeX pour encore un peu plus efficace que par LaTeX.
Là ce n'était pas un concours de beauté, ni beautex ( osé !) mais
d'efficacité. Le code est près à être inséré dans un package ou dans
un préambule et ensuite tu l'oublies !!
Pour l'utilisateur, il reste \pdfGrid, cela vaut bien un \psGrid non ?
Bonne journée
Alain
La méthode est en effet à retenir !
Alain
> Je me doutais un peu de cette réaction mais ce n'est pas un code
> utilisateur, c'est pour obtenir une macro singeant \psgrid.
> Que cela soit avec xkeyval ou bien comme ici pgfkeys, le code
> pour traiter les options n'est pas très gai, ensuite il faut
> parfois par TeX pour encore un peu plus efficace que par LaTeX.
>
> Là ce n'était pas un concours de beauté, ni beautex ( osé !) mais
> d'efficacité. Le code est près à être inséré dans un package ou dans
> un préambule et ensuite tu l'oublies !!
Oui, oui, je sais bien ! C'était pour te taquiner :)
> Pour l'utilisateur, il reste \pdfGrid, cela vaut bien un \psGrid non ?
Toutafé.
Merci encore !
--
Denis