Page 1 sur 1

Mettre plusieurs figures côte à côte

MessagePosté: Samedi 06 Janvier 2018, 22:43
par XANA
Bonsoir,
pour décrire le fonctionnement d'un algorithme (le Jeu de la Vie), j'ai besoin de faire des figures, et comme il y a plusieurs cas (4), je souhaite mettre ces figures sur deux colonnes (2 par 2) pour que ça ne prenne pas trop de place, mais l'utilisation de multicols ne fonctionne pas, et ça ne fonctionne pas non plus si je met dans deux cases d'un tableau.
En fait il ne s'agit pas d'images que j'insère avec includegraphics, mais des tableaux sur plusieurs colonnes que j'ai codé directement (j'ai mis un exemple d'une des quatre figures).

Code: Tout sélectionner
\begin{figure}
\begin{multicols}{3}
\begin{tabular}{|c|c|c|}
\hline
\mort & \mort & \mort\\
\hline
\mort & \vie & \mort\\
\hline
\vie & \deux & \vie\\
\hline
\end{tabular}
\begin{tabular}{c}
$\rightarrow$\\
{\bf \neni survie\neni}
\end{tabular}
\begin{tabular}{|c|c|c|}
\hline
\neni & \neni & \neni\\
\hline
 & \vie & \\
\hline
 & & \\
\hline
\end{tabular}
\end{multicols}
\caption{Survie d'une cellule}
\label{GLsurvie}
\end{figure}


Avec photofiltre, j'ai fait un petit montage pour montrer ce que j'aimerais bien que ça fasse :
J'ai pas trop compris comment insérer une image, du coup je met un lien : https://1drv.ms/i/s!ApKvfpopznQZh-FpGbNU-fTxi5w8SQ
Et ça c'est ce que ça fait pour l'instant : https://1drv.ms/i/s!ApKvfpopznQZh-FqXdonffNxmeSdOQ

Re: Mettre plusieurs figures côte à côte

MessagePosté: Dimanche 07 Janvier 2018, 04:45
par alfa8my
Pourriez-vous s'il vous plaît insérer la définition de la commande
Code: Tout sélectionner
\mort
de façon à ce que l'exemple fonctionne ?
Je pense pouvoir vous aider, mais je ne peux pas compiler le tableau sans cette commande.

Re: Mettre plusieurs figures côte à côte

MessagePosté: Dimanche 07 Janvier 2018, 11:51
par rebouxo
À mon avis cela vaut le coup d'investir dans un langage graphique pour LaTeX. Je pense ici particulièrement Asymptote, mais je me demande si TiKz n'est pas capable de faire cela très rapidement avec la librairie Lindenmayer (p. 635 de la doc).

Olivier

Re: Mettre plusieurs figures côte à côte

MessagePosté: Dimanche 07 Janvier 2018, 12:20
par XANA
alfa8my a écrit:Pourriez-vous s'il vous plaît insérer la définition de la commande
Code: Tout sélectionner
\mort
de façon à ce que l'exemple fonctionne ?
Je pense pouvoir vous aider, mais je ne peux pas compiler le tableau sans cette commande.


Oh pardon ! En fait il s'agit juste de petits ronds, blancs ou noirs, pour symboliser la vie ou la mort d'une cellule (et \neni c'est juste pour que les cases vides restent de la même taille)

Code: Tout sélectionner
\usepackage{wasysym}
\newcommand{\vie}{\CIRCLE}
\newcommand{\mort}{\Circle}
\newcommand{\deux}{\LEFTcircle}
\newcommand{\neni}{\hphantom{\CIRCLE}}

Re: Mettre plusieurs figures côte à côte

MessagePosté: Dimanche 07 Janvier 2018, 13:56
par XANA
rebouxo a écrit:À mon avis cela vaut le coup d'investir dans un langage graphique pour LaTeX. Je pense ici particulièrement Asymptote, mais je me demande si TiKz n'est pas capable de faire cela très rapidement avec la librairie Lindenmayer (p. 635 de la doc).

Olivier


Je connais juste un peu Tikz, j'ai essayé de placer les figures dedans, mais ça ne marche pas non plus...

Re: Mettre plusieurs figures côte à côte

MessagePosté: Dimanche 07 Janvier 2018, 15:51
par balf
Voici une façon de faire plus simple qu'avec multicols : les deux tables sont reliées par un \xrightarrow (flèche extensible qui accepte qu'on écrive au-dessus et au-dessous et dont la longueur s'adapte au texte). Pour être sûr que toutes les flèches aient la même longueur, je mets le texte dans une commande \eqmakebox (extension eqparbox), qui prend un label pour premier argument et le text pour second argument. Le principe est que toutes les boîtes avec le même label auront la longueur du plus grand contenu (ceci nécessite deux compilations).

D'autre part, comme j'imagine que vous voulez garder ces figures ensembles, chacune est placée dans une ligne d'un environnement tabularx, à cause du mécanisme de placement des flottants en LaTeX, ce qui amène à utiliser la commande \captionof{figure}{...}, définie entre autres par l'extension caption.

Code: Tout sélectionner
\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[nointegrals]{wasysym}
\usepackage{mathtools}
\usepackage{eqparbox}
\usepackage{tabularx}
\usepackage{caption}
    \newcommand{\vie}{\CIRCLE}
    \newcommand{\mort}{\Circle}
    \newcommand{\deux}{\LEFTcircle}
    \newcommand{\nenni}{\hphantom{\CIRCLE}}

\begin{document}

 \begin{tabularx}{\linewidth}{>{\centering\arraybackslash}X}
\centering
 \begin{tabular}{|c|c|c|}
 \hline
 \mort & \mort & \mort\\
 \hline
 \mort & \vie & \mort\\
 \hline
 \vie & \deux & \vie\\
 \hline
 \end{tabular}
 \quad $\xrightarrow[{\eqmakebox[label]{\bfseries\normalsize\,survie\,}}]{} $ \quad
 \begin{tabular}{|c|c|c|}
 \hline
 \nenni & \nenni & \nenni\\
 \hline
 & \vie & \\
 \hline
 & & \\
 \hline
 \end{tabular}
 \captionof{figure}{Survie d'une cellule}
 \label{GLsurvie}
 \tabularnewline[2ex]
 %%%%%%%%%%%%%%%%%%%%%
 \begin{tabular}{|c|c|c|}
 \hline
 \mort & \mort & \mort \\
 \hline
 \mort & \vie & \mort \\
 \hline
 \mort & \deux & \mort \\
 \hline
 \end{tabular}
 \quad $\xrightarrow[{\eqmakebox[label]{\bfseries\normalsize\,isolement \,}}]{} $ \quad
 \begin{tabular}{|c|c|c|}
 \hline
 \nenni & \nenni & \nenni\\
 \hline
 & \mort & \\
 \hline
 & & \\
 \hline
 \end{tabular}
 \captionof{figure}{Mort par isolement d'une cellule}
 \label{GLsurvie}\
 \end{tabularx}
 
\end{document}

Résultat en p.j. J'espère que ça convient.

B. A.

Re: Mettre plusieurs figures côte à côte

MessagePosté: Dimanche 07 Janvier 2018, 16:58
par XANA
balf a écrit:Voici une façon de faire plus simple qu'avec multicols [...] Résultat en p.j. J'espère que ça convient.
B. A.


En fait ce n'étais pas vraiment ce que je demandais, ce que je voulais, c'est mettre les deux figures côte à côte, mais par contre c'est plus joli avec la longue flèche, et le fait qu'ils soient groupés entre eux est aussi nettement mieux que ce que j'avais, merci :)

Re: Mettre plusieurs figures côte à côte

MessagePosté: Dimanche 07 Janvier 2018, 17:08
par balf
J'ai juste essayé de reproduire la flèche figurant sur les liens que vous avez fourni. On peut diminuer la distance entre les tableaux en supprimant les deux cadratins de part et d'autre de la flèche, ou se contenter d'un demi-cadratin, et en mettant le texte sous la flèche en \footnotesize – elle en sera diminuée d'autant.

B. A.

Re: Mettre plusieurs figures côte à côte

MessagePosté: Dimanche 07 Janvier 2018, 21:32
par rebouxo
Une version tikz vite fait sur le coup.
Code: Tout sélectionner
% !-*-coding:utf-8-*-
\documentclass[10pt,french]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{kpfonts}
\usepackage{tikz}
\usepackage[paper=a4paper,margin=1cm]{geometry}

\begin{document}

\newcommand{\deux}[1]
{
  \begin{scope}[shift={(#1)}]
    \draw (0,0) circle [radius  = 0.25] ;
    \fill[rotate=90] (0,0) -- (0.25,0)  arc[start angle = 0,end angle = 180,
    radius = 0.25] -- cycle ;
  \end{scope}
}

\newcommand{\grille}
{
  \foreach \x in {0.5,1.5,2.5}
  {
    \foreach \y in {0.5,1.5,2.5}
    {
      \draw (\x,\y) circle [radius = 0.25] ;
    }
  }
}

\begin{tikzpicture}
  \draw (0,0) grid (3,3) ;
  \grille
  \foreach \coor in {{0.5,0.5},{1.5,1.5},{2.5,0.5}}
  {
    \fill (\coor) circle [radius = 0.25] ;
  }
  \deux{1.5,0.5}
\end{tikzpicture}
\hfill
\begin{tikzpicture}
  \draw (0,0) grid (3,3) ;
  % \grille
  \foreach \coor in {{1.5,1.5}}
  {
    \fill (\coor) circle [radius = 0.25] ;
  }
\end{tikzpicture}
\hfill
\begin{tikzpicture}
  \draw (0,0) grid (3,3) ;
  \grille
  \foreach \coor in {{1.5,1.5}}
  {
    \fill (\coor) circle [radius = 0.25] ;
  }
  \deux{1.5,0.5}
\end{tikzpicture}
\hfill
\begin{tikzpicture}
  \draw (0,0) grid (3,3) ;
  \draw (1.5,1.5) circle [radius = 0.25] ;
\end{tikzpicture}


\end{document}

Je te laisse mettre ce que tu veux entre les figures.
Moi perso, je ferais une figure avec deux subfigures.

Olivier