Soit une figure créée avec TikZ :

Ouvrir dans l'éditeur Overleaf
\documentclass[a4paper,12pt,
%DIV50
]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{graphicx} 
\usepackage[french]{babel}
\usepackage[]{tikz}
\usetikzlibrary{shapes,positioning}

\begin{document}
\begin{tikzpicture}
\begin{scope}[local bounding box=foo]
\node (A) at (1,0) {$A$};
\node (B) at (5,0) {$B$};
\node (C) at (10,0) {$C$};
\end{scope}
\draw (foo.south west) rectangle (foo.north east);

\node[below of = A,node distance=3cm] (A1) {A1}; 
\node[below of = B,node distance=3cm] (B1) {B1}; 
\node[below of = C,node distance=3cm] (C1) {C1}; 
\draw[->] (A.south) -- (A1);
\draw[->] (B.south) -- (B1);
\draw[->] (C.south) -- (C1);
\end{tikzpicture}
\end{document}

Comment la dupliquer en modifiant sa position, son orientation, sa taille, sa couleur etc ... ?


Voici un essai qui oblige à répéter le code de la figure, ce qui serait lourd pour une duplication :

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\usepackage{tikz}
\usepackage{lipsum}
\tikzset{quadri/.style={rectangle,draw,text=blue}}
\begin{document}
    bonjour
   \begin{tikzpicture}[remember picture,overlay]
        \node[shift={(current page.south west)},shift={(10,10)},scale=1,rotate=45]  
        {\begin{tikzpicture}[remember picture,overlay]
        \begin{tikzpicture}
            \begin{scope}[local bounding box=foo]
            \node (A) at (1,0) {$A$};
            \node (B) at (5,0) {$B$};
            \node (C) at (10,0) {$C$};
            \end{scope}
            \draw (foo.south west) rectangle (foo.north east);

            \node[below of = A,node distance=3cm] (A1) {A1}; 
            \node[below of = B,node distance=3cm] (B1) {B1}; 
            \node[below of = C,node distance=3cm] (C1) {C1}; 
            \draw[->] (A.south) -- (A1);
            \draw[->] (B.south) -- (B1);
            \draw[->] (C.south) -- (C1);
        \end{tikzpicture}

    \end{tikzpicture}
    };   
   \end{tikzpicture}
\end{document}
  • Ce serait bien de pouvoir nommer la figure, pour avoir juste à placer le nom de la figure, pas son code ;
  • je situe mal le centre de la figure qui ne me semble pas placé à (10,10) à partir du bas de la page.

Posée 09 Jul '19, 05:52

idefix's gravatar image

idefix
95594051
Taux d'acceptation : 14%

Modifiée 10 Jul '19, 18:31

Pathe's gravatar image

Pathe ♦♦
7.5k42204251

Que signifie « foo » ? je le vois souvent utilisé comme nom de variable dans les codes.

(10 Jul '19, 00:55) idefix idefix's gravatar image
3

En gros, l'équivalent anglophone de « truc, machin, bidule » est, en informatique du moins, « foo, bar, baz ».

(10 Jul '19, 01:24) denis ♦♦ denis's gravatar image

@samcarter Si je comprends bien vous donnez le nom « foo » au contour (invisible) du scope (de la sous-figure avec les 3 lettres), et juste après vous tracez ce contour en utilisant son nom et l'opération de chemin rectangle

\draw (foo.south west) rectangle (foo.north east);

Peut-on nommer la sous-figure entière (tout les tracés du scope) pour la redessiner avec son nom?

(10 Jul '19, 17:05) idefix idefix's gravatar image
3

On trouvera une explication officielle du terme foo ici. Elle est en anglais.

(10 Jul '19, 18:42) Pathe ♦♦ Pathe's gravatar image
2

@idefix : non, ce n'est pas possible. Mais vous pouvez créer une \newcommand ou utiliser un \pic (pgfmanual, chapitre 18) ou une \savebox...

(10 Jul '19, 19:46) samcarter samcarter's gravatar image

Bonjour,

Je rebondis sur ce fil car il est très proche de ce que je recherche. J'ai un code tikz très lourd (que je ne reproduis pas ici : plus de 3000 lignes) que je veux reproduire à plusieurs reprises sur un même document latex ; malheureusement, le code est trop lourd et la sentence tombe, irrévocable : ! TeX capacity exceeded, sorry [main memory size=5000000].

Est-il possible de dupliquer une figure via tikz (ou autre !) à l'intérieur d'un même document sans relancer toute la machine à calculer ?

(03 Fév '21, 17:23) gnut gnut's gravatar image
2

Merci de poser une nouvelle question.

(03 Fév '21, 18:06) touhami touhami's gravatar image
1

La nouvelle question de @gnut est ici.

(04 Fév '21, 13:49) Pathe ♦♦ Pathe's gravatar image
Affichage de 5 parmi 8 Afficher 3 commentaire(s) en plus

Pour ce genre de chose, j'aime bien utiliser \foreach:

Ouvrir dans l'éditeur Overleaf
\documentclass{article}
\usepackage[]{tikz}
\usetikzlibrary{shapes,positioning}
\begin{document}
\begin{tikzpicture}
  \foreach \r/\y/\x/\c in
           {20/-170/-100/black,
           -20/-100/-20 /red}
   {\begin{scope}[transform canvas={rotate=\r,scale=1.5},yshift=\y,xshift=\x,\c]
       \node (A) at (1,0) {$A$};
       \node (B) at (5.5,0) {$B$};
       \node (C) at (10,0) {$C$};
       \draw (A.south west) rectangle (C.north east);
       \node[below of = A,node distance=3cm] (A1) {A1}; 
       \node[below of = B,node distance=3cm] (B1) {B1}; 
       \node[below of = C,node distance=3cm] (C1) {C1}; 
       \draw[->] (A.south) -- (A1);
       \draw[->] (B.south) -- (B1);
       \draw[->] (C.south) -- (C1);
     \end{scope}}
\end{tikzpicture}
\end{document}
Lien permanent

Publiée 26 Nov '19, 12:45

nmarkey's gravatar image

nmarkey
1.4k29
Taux d'acceptation : 45%

Essayez d'éviter un tikzpicture dans un autre tikzpicture. Pour obtenir un résultat analogue, on peut faire quelque chose comme ça :

Ouvrir dans l'éditeur Overleaf
\documentclass[a4paper,12pt,
%DIV50
]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{graphicx} 
\usepackage[french]{babel}
\usepackage[]{tikz}
\usetikzlibrary{shapes,positioning}

\begin{document}
\begin{tikzpicture}
\begin{scope}[transform canvas={rotate=20,scale=1.5},yshift=-170,xshift=-100]
\node (A) at (1,0) {$A$};
\node (B) at (5.5,0) {$B$};
\node (C) at (10,0) {$C$};
\draw (A.south west) rectangle (C.north east);
\node[below of = A,node distance=3cm] (A1) {A1}; 
\node[below of = B,node distance=3cm] (B1) {B1}; 
\node[below of = C,node distance=3cm] (C1) {C1}; 
\draw[->] (A.south) -- (A1);
\draw[->] (B.south) -- (B1);
\draw[->] (C.south) -- (C1);
\end{scope}
\end{tikzpicture}
\end{document}

La même chose plusieurs fois :

Ouvrir dans l'éditeur Overleaf
\documentclass[a4paper,12pt,
%DIV50
]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{graphicx} 
\usepackage[french]{babel}
\usepackage[]{tikz}
\usetikzlibrary{shapes,positioning}

\newcommand{\foo}{%
\node (A) at (1,0) {$A$};
\node (B) at (5.5,0) {$B$};
\node (C) at (10,0) {$C$};
\draw (A.south west) rectangle (C.north east);
\node[below of = A,node distance=3cm] (A1) {A1}; 
\node[below of = B,node distance=3cm] (B1) {B1}; 
\node[below of = C,node distance=3cm] (C1) {C1}; 
\draw[->] (A.south) -- (A1);
\draw[->] (B.south) -- (B1);
\draw[->] (C.south) -- (C1);
}

\begin{document}
\begin{tikzpicture}
\begin{scope}[transform canvas={rotate=20,scale=1.5},yshift=-170,xshift=-100]
\foo
\end{scope}
\begin{scope}[transform canvas={rotate=-20,scale=1.5},yshift=-100,xshift=-20,red]
\foo
\end{scope}
\end{tikzpicture}
\end{document}
Lien permanent

Publiée 09 Jul '19, 15:05

samcarter's gravatar image

samcarter
8.4k2817
Taux d'acceptation : 56%

Modifiée 04 Fév '21, 13:46

Pathe's gravatar image

Pathe ♦♦
7.5k42204251

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.