[Tikz] Position des labels sur les branches d'un arbre

Tout ce qui concerne le langage LaTeX et ses variantes. Ce langage est supporté sur le forum via les balises tex.

Modérateur : gdm_tex

Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

[Tikz] Position des labels sur les branches d'un arbre

Message par Fabrice Couvreur »

Bonjour à tous,
De plus en plus, je privilégie la compilation de mes fichiers.tex avec pdflatex.
Aussi, ayant besoin de construire un arbre, je me suis plongé partiellement dans la documentation (assez indigeste !) de pgf/tikz.
Je rencontre deux problèmes :
entourer le texte avec une ellipse, et non un rectangle (si je remplace rectangle par ellipse, il me parle de clef non trouvée.) ;
le positionnement des labels sur les branches.

Code : Tout sélectionner

\documentclass[a4paper]{article}
\usepackage{geometry}
\usepackage{tikz}
\usetikzlibrary{trees}
\begin{document}
\begin{center}
\begin{tikzpicture}
[level 1/.style={sibling distance=60mm},
level 2/.style={sibling distance=42mm}]
\node {}
child { node[rectangle,draw]{Ne pas franchir les brisants}
edge from parent
node[pos=0.5] {$\times{\frac{1}{5}}$}}
child {node[rectangle,draw]{Franchir les brisants}{ child {node[rectangle,draw]{Dévoré par les requins}edge from parent
node[pos=0.5] {$\times{\frac{1}{4}}$}} child { node[rectangle,draw]{Non dévoré par les requins}{child {node[rectangle,draw]{Se noyer}edge from parent
node[pos=0.5] {$\times{\frac{2}{5}}$}} child { node[rectangle,draw]{Ne pas se noyer }{child {node[rectangle,draw]{Crise cardiaque}edge from parent
node[pos=0.5] {$\times{\frac{3}{20}}$}} child {node[rectangle,draw]{Pas de crise cardiaque}edge from parent
node[pos=0.5] {$\times{\frac{17}{20}}$}}}edge from parent
node[pos=0.5] {$\times{\frac{3}{5}}$}}}edge from parent
node[pos=0.5] {$\times{\frac{3}{4}}$}}}edge from parent
node[pos=0.5] {$\times{\frac{4}{5}}$}};
\end{tikzpicture}
\end{center}
\end{document}
Peut-on améliorer ce code que j'ai fait un peu à la méthode "bourrin" ?
Merci pour votre aide.

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par pg »

Pour l'ellipse, il faut rajouter \usetikzlibrary{shapes}. Je te conseille par ailleurs de définir des styles pour pouvoir tout changer d'un coup sans problèmes.

Un petit soucis est que si les entrées sont des ellipses, alors il y a chevauchement, du coup il faut éloigner les entrées les unes des autres et alors tout ne tien plus dans la largeur de la page donc il faut passer en landscape.

Est-ce que c'est ce que tu voulais ?
tree.png

Code : Tout sélectionner

\documentclass[a4paper,landscape]{article}

\usepackage[latin1]{inputenc}
\usepackage[francais]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

\usepackage{geometry}

\usepackage{tikz}
\usetikzlibrary{trees}
\usetikzlibrary{shapes}

\begin{document}

\begin{center}
\tikzstyle{entree}=[ellipse,draw]
\tikzstyle{trait}=[pos=0.5,ellipse,fill=white,inner sep=0pt]
\begin{tikzpicture}
[level 1/.style={sibling distance=80mm},
level 2/.style={sibling distance=62mm}]
\node {}
child { node[entree]{Ne pas franchir les brisants}
edge from parent
node[trait] {$\times{\frac{1}{5}}$}}
child {node[entree]{Franchir les brisants}{ child {node[entree]{Dévoré par les requins}edge from parent
node[trait] {$\times{\frac{1}{4}}$}} child { node[entree]{Non dévoré par les requins}{child {node[entree]{Se noyer}edge from parent
node[trait] {$\times{\frac{2}{5}}$}} child { node[entree]{Ne pas se noyer }{child {node[entree]{Crise cardiaque}edge from parent
node[trait] {$\times{\frac{3}{20}}$}} child {node[entree]{Pas de crise cardiaque}edge from parent
node[trait] {$\times{\frac{17}{20}}$}}}edge from parent
node[trait] {$\times{\frac{3}{5}}$}}}edge from parent
node[trait] {$\times{\frac{3}{4}}$}}}edge from parent
node[trait] {$\times{\frac{4}{5}}$}};
\end{tikzpicture}
\end{center}

\end{document}
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par Fabrice Couvreur »

Bonjour pg,

Merci pour ta proposition, mais il doit y avoir un soucis avec ma bécane : en effet, en compilant ton code, les deux ellipses les plus grandes se chevauchent ( dévoré par les requins et non dévoré par les requins), et les caractères accentués ne sont pas pris en compte (é remplacé par un A surmonté d'un ~suivi d'un cecle où est inscrit un c).

PS : dans un précédent post, tu m'avais proposé une macro :

Code : Tout sélectionner

\newcommand{\intoo}[2]{\mathopen{]}#1\,;#2\mathclose{[}}
Que veulent dire \mathopen{]} et \mathclose{]} ?
Merci.

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par pg »

\mathopen dit à TeX de considérer ce qu'il y a à l'intérieur comme un délimiteur ouvrant tandis que \mathclose lui dit de considérer que c'est un délimiteur fermant. Cela permet de changer la nature de ] (qui est normalement fermant, mais ici on le veut ouvrant). Si on ne le fait pas, on obtient un espacement incorrect des deux côtés du crochet, comme dans $x \in ]-1\,;2[$ (le rendu correct est $x \in {]}{-}1\,;2[$ ; il faut une espace forte après le $\in$ et aucune espace entre le $]$, le $-$ et le $1$).

Concernant les A~, je pense que c'est un problème d'encodage d'entrée. Il faut essayer de changer \usepackage[latin1]{inputenc} en \usepackage[utf8]{inputenc} ou je ne sais pas quoi d'autre que tu as l'habitude d'utiliser.

Concernant le télescopage des ellipses, change la ligne [level 1/.style={sibling distance=80mm},level 2/.style={sibling distance=62mm}] en y mettant des distances plus élevées.

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par Fabrice Couvreur »

Bonjour et bonne année à tous,
Merci pg pour toutes ces explications, c'est nickel !
Pour ce qui est de l'arbre et de l'encodage, c'est réglé.
pg a écrit :Il faut essayer de changer \usepackage[latin1]{inputenc} en \usepackage[utf8]{inputenc} ou je ne sais pas quoi d'autre que tu as l'habitude d'utiliser.
Pourquoi ce qui a fonctionné chez toi, ne l'a pas fait chez moi ?

Code : Tout sélectionner

\tikzstyle{trait}=[pos=0.5,ellipse,fill=white,inner sep=0pt]
Je suppose que c'est pour faire un "trou", et y mettre le label . Que veut dire inner sep =0pt ?
J'aimerai concevoir de nouvelles entêtes de devoirs, de cours,...
PGF/TIKZ est-il bien approprié pour cela ?
Par exemple, peut-on utiliser tabular ou tabularx avec le style rectangle?
Merci.

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par pg »

Fabrice Couvreur a écrit :Pourquoi ce qui a fonctionné chez toi, ne l'a pas fait chez moi ?
Ça dépend de l'éditeur de texte utilisé. Le tien doit encoder ses fichiers en unicode tandis que le mien utilise du cp1252 (compatible avec latin1, alors que utf8 ne l'est pas d'où les accents transformés en A~).
Fabrice Couvreur a écrit :Que veut dire inner sep =0pt ?
inner sep permet de contrôler la taille du blanc autour du texte. Le défaut est 5pt, ce qui est beaucoup trop ici (essaye pour voir).
Fabrice Couvreur a écrit :J'aimerai concevoir de nouvelles entêtes de devoirs, de cours,...
PGF/TIKZ est-il bien approprié pour cela ?
Oui. Il faut juste savoir exactement ce que tu veux faire. Quelques exemples de ce qui est possible : Fancy chapter headings with TikZ et Recherche de modèles de mise en page LaTeX.

On peut aussi faire cela (c'est une tentative de reproduction de la présentation de la collection Transmath pour Terminale S chez Nathan de 1998) :
exemple_trm.pdf
Fabrice Couvreur a écrit :Par exemple, peut-on utiliser tabular ou tabularx avec le style rectangle?
Qu'est-ce que tu as en tête exactement ? xcolor permet déjà de faire pas mal de choses avec la couleur dans les tableaux.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par Fabrice Couvreur »

Re,
Avant, pour mes entêtes, j'utilisais \psshadowbox, et pour le positionnement du texte, j'utilisais tabularx ou tabular.

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par pg »

Voici un équivalent de psshadow box :

Code : Tout sélectionner

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{shadows}

\begin{document}

\begin{tikzpicture}
\node[rectangle,draw,fill=white,drop shadow={fill=gray,opacity=1}] {shadow box};
\end{tikzpicture}

\end{document}
Concernant tabular et tabularx, je ne vois pas bien ce que tu veux dire, mais a priori, tout ce qui fonctionnait avec des psshadowbox fonctionnera avec des tikzpicture.

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par Fabrice Couvreur »

Bonjour pg,
Merci beaucoup,on approche de ce que je cherche à faire :D
pg a écrit :Concernant tabular et tabularx, je ne vois pas bien ce que tu veux dire, mais a priori, tout ce qui fonctionnait avec des psshadowbox fonctionnera avec des tikzpicture.

Code : Tout sélectionner

\documentclass[landscape,twocolumn,a4]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[frenchb]{babel}
\usepackage{tikz}
\usetikzlibrary{shadows}
\usetikzlibrary{trees}
\usetikzlibrary{shapes}
\usepackage{tabularx}
\definecolor{0.9white}{rgb}{0.9,0.9,0.9}
\begin{document}
\begin{tikzpicture}
\node[rectangle,rounded corners=8pt,draw,fill=0.9white,drop shadow={fill=gray,opacity=1}] {\begin{tabularx}{\textwidth}{lXr}
{\bfseries Seconde~2}&  & {\bfseries \`{A} rendre le mardi 6 janvier 2009}\tabularnewline
\multicolumn{3}{c} {\large\bfseries Devoir libre de   Mathématiques n$^{\textrm{o}}$10 }
\end{tabularx}};
\end{tikzpicture}

\begin{center}
\tikzstyle{entree}=[ellipse,draw]
\tikzstyle{trait}=[pos=0.5,ellipse,fill=white,inner sep=0pt]
\begin{tikzpicture}
[level 1/.style={sibling distance=90mm},
level 2/.style={sibling distance=65mm}]
\node {}
child { node[entree]{Ne pas franchir les brisants}
edge from parent
node[trait] {$\times{\frac{1}{5}}$}}
child {node[entree]{Franchir les brisants}{ child {node[entree]{Dévoré par les requins}edge from parent
node[trait] {$\times{\frac{1}{4}}$}} child { node[entree]{Non dévoré par les requins}{child {node[entree]{Se noyer}edge from parent
node[trait] {$\times{\frac{2}{5}}$}} child { node[entree]{Ne pas se noyer }{child {node[entree]{Crise cardiaque}edge from parent
node[trait] {$\times{\frac{3}{20}}$}} child {node[entree]{Pas de crise cardiaque}edge from parent
node[trait] {$\times{\frac{17}{20}}$}}}edge from parent
node[trait] {$\times{\frac{3}{5}}$}}}edge from parent
node[trait] {$\times{\frac{3}{4}}$}}}edge from parent
node[trait] {$\times{\frac{4}{5}}$}};
\end{tikzpicture}
\end{center}
\end{document}

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par pg »

Au lieu d'utiliser

Code : Tout sélectionner

n$^{\textrm{o}}$
pour l'abréviation de numéro, tu devrais utiliser la commande \no de frenchb.

Je peux aussi te proposer une petite amélioration, qui permet de produire le titre uniquement avec la commande \maketitle (utile si plus tard tu veux faire une classe de document pour ce type de documents) et des choses du genre \numerodevoir{10}, \classe{Seconde~2} et \date{mardi 6 janvier 2009} :

Code : Tout sélectionner

\documentclass[landscape,twocolumn,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[frenchb]{babel}
\usepackage{tikz}
\usetikzlibrary{shadows}
\usetikzlibrary{trees}
\usetikzlibrary{shapes}
\usepackage{tabularx}

\definecolor{0.9white}{rgb}{0.9,0.9,0.9}

\makeatletter
\def\classe#1{\gdef\@classe{#1}}
\def\numerodevoir#1{\gdef\@numerodevoir{#1}}
\def\@maketitle{\noindent\begin{tikzpicture}
\node[rectangle,rounded corners=8pt,draw,fill=0.9white,drop shadow={fill=gray,opacity=1}] {\begin{tabularx}{\textwidth}{lXr}
{\bfseries \@classe}&  & {\bfseries \`{A} rendre le \@date}\tabularnewline
\noalign{\vspace*{0.25em}}\multicolumn{3}{c} {\large\bfseries Devoir libre de Mathématiques \no \@numerodevoir \vspace*{0.25em}}
\end{tabularx}};
\end{tikzpicture}\vspace*{0.5em}}
\makeatother

\begin{document}
\numerodevoir{10}
\classe{Seconde~2}
\date{mardi 6 janvier 2009}
\maketitle

\begin{center}
\tikzstyle{entree}=[ellipse,draw]
\tikzstyle{trait}=[pos=0.5,ellipse,fill=white,inner sep=0pt]
\begin{tikzpicture}
[level 1/.style={sibling distance=90mm},
level 2/.style={sibling distance=65mm}]
\node {}
child { node[entree]{Ne pas franchir les brisants}
edge from parent
node[trait] {$\times{\frac{1}{5}}$}}
child {node[entree]{Franchir les brisants}{ child {node[entree]{Dévoré par les requins}edge from parent
node[trait] {$\times{\frac{1}{4}}$}} child { node[entree]{Non dévoré par les requins}{child {node[entree]{Se noyer}edge from parent
node[trait] {$\times{\frac{2}{5}}$}} child { node[entree]{Ne pas se noyer }{child {node[entree]{Crise cardiaque}edge from parent
node[trait] {$\times{\frac{3}{20}}$}} child {node[entree]{Pas de crise cardiaque}edge from parent
node[trait] {$\times{\frac{17}{20}}$}}}edge from parent
node[trait] {$\times{\frac{3}{5}}$}}}edge from parent
node[trait] {$\times{\frac{3}{4}}$}}}edge from parent
node[trait] {$\times{\frac{4}{5}}$}};
\end{tikzpicture}
\end{center}

\end{document}

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par Fabrice Couvreur »

Bonjour pg,
Je vois qu'il me reste encore beaucoup à apprendre !
Je me prépare un document maître perso.sty, et toutes tes suggestions sont les bienvenues :D
Dernières petites requêtes :) :
- pourquoi les pages sont numérotées, alors que je ne l'ai pas spécifié dans le préambule ?
- tu utilises \makeatletter et \makeatother car tu veux créer une nouvelle commande \maketitle (créée avec des @) qui est une commande native de LaTeX ? Est-ce utile si je mets ton code directement dans mon perso.sty ?
- cette commande n'est valable que si je veux créer des énoncés de devoir libre ?
- si je veux faire la même chose avec une correction de devoir surveillé, comment créer un "\maketitlebis", et ainsi de suite.
Encore merci.

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par pg »

Fabrice Couvreur a écrit :- pourquoi les pages sont numérotées, alors que je ne l'ai pas spécifié dans le préambule ?
Par défaut, les pages sont toujours numérotées. Il faut dire \pagestyle{empty} (ou \thispagestyle{empty} pour les pages récalcitrantes) si on ne veut pas la numérotation. Le principal problème est que la fonction \maketitle insère un numéro de page, donc il faut la redéfinir elle aussi (voir code ci-dessous).
Fabrice Couvreur a écrit :- tu utilises \makeatletter et \makeatother car tu veux créer une nouvelle commande \maketitle (créée avec des @) qui est une commande native de LaTeX ? Est-ce utile si je mets ton code directement dans mon perso.sty ?
Non seulement ce n'est pas utile, mais cela peut causer des problèmes. Il vaut mieux ne jamais mettre de \makeatletter et \makeatother dans un fichier .sty.
Fabrice Couvreur a écrit :- cette commander n'est valable que si je veux créer des énoncés de devoir libre ?
- si je veux faire la même chose avec une correction de devoir surveillé, comment créer un "\maketitlebis", et ainsi de suite.
Si tu n'as vraiment que deux types de devoirs, le plus simple est de rajouter une déclaration du type \typededevoir. Pour un devoir libre, il suffira alors de rajouter la ligne \typededevoir{libre} tandis que pour un devoir surveillé ce sera \typededevoir{surveillé} :

Code : Tout sélectionner

\documentclass[landscape,twocolumn,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[frenchb]{babel}
\usepackage{tikz}
\usetikzlibrary{shadows}
\usetikzlibrary{trees}
\usetikzlibrary{shapes}
\usepackage{tabularx}
\pagestyle{empty}

\definecolor{0.9white}{rgb}{0.9,0.9,0.9}

\makeatletter
\def\classe#1{\gdef\@classe{#1}}
\def\numerodevoir#1{\gdef\@numerodevoir{#1}}
\def\typededevoir#1{\gdef\@typededevoir{#1}}
\def\@maketitle{\noindent\begin{tikzpicture}
\node[rectangle,rounded corners=8pt,draw,fill=0.9white,drop shadow={fill=gray,opacity=1}] {\begin{tabularx}{\textwidth}{lXr}
{\bfseries \@classe}&  & {\bfseries \`{A} rendre le \@date}\tabularnewline
\noalign{\vspace*{0.25em}}\multicolumn{3}{c} {\large\bfseries Devoir \@typededevoir\ de Mathématiques \no \@numerodevoir \vspace*{0.25em}}
\end{tabularx}};
\end{tikzpicture}\vspace*{0.5em}}
\renewcommand\maketitle{\par
  \begingroup
    \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
    \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
    \long\def\@makefntext##1{\parindent 1em\noindent
            \hb@xt@1.8em{%
                \hss\@textsuperscript{\normalfont\@thefnmark}}##1}%
    \if@twocolumn
      \ifnum \col@number=\@ne
        \@maketitle
      \else
        \twocolumn[\@maketitle]%
      \fi
    \else
      \newpage
      \global\@topnum\z@   % Prevents figures from going at top of page.
      \@maketitle
    \fi
    \thispagestyle{empty}\@thanks
  \endgroup
  \setcounter{footnote}{0}%
  \global\let\thanks\relax
  \global\let\maketitle\relax
  \global\let\@maketitle\relax
  \global\let\@thanks\@empty
  \global\let\@author\@empty
  \global\let\@date\@empty
  \global\let\@title\@empty
  \global\let\title\relax
  \global\let\author\relax
  \global\let\date\relax
  \global\let\and\relax
}
\makeatother

\begin{document}
\typededevoir{libre}
\numerodevoir{10}
\classe{Seconde~2}
\date{mardi 6 janvier 2009}
\maketitle

\begin{center}
\tikzstyle{entree}=[ellipse,draw]
\tikzstyle{trait}=[pos=0.5,ellipse,fill=white,inner sep=0pt]
\begin{tikzpicture}
[level 1/.style={sibling distance=90mm},
level 2/.style={sibling distance=65mm}]
\node {}
child { node[entree]{Ne pas franchir les brisants}
edge from parent
node[trait] {$\times{\frac{1}{5}}$}}
child {node[entree]{Franchir les brisants}{ child {node[entree]{Dévoré par les requins}edge from parent
node[trait] {$\times{\frac{1}{4}}$}} child { node[entree]{Non dévoré par les requins}{child {node[entree]{Se noyer}edge from parent
node[trait] {$\times{\frac{2}{5}}$}} child { node[entree]{Ne pas se noyer }{child {node[entree]{Crise cardiaque}edge from parent
node[trait] {$\times{\frac{3}{20}}$}} child {node[entree]{Pas de crise cardiaque}edge from parent
node[trait] {$\times{\frac{17}{20}}$}}}edge from parent
node[trait] {$\times{\frac{3}{5}}$}}}edge from parent
node[trait] {$\times{\frac{3}{4}}$}}}edge from parent
node[trait] {$\times{\frac{4}{5}}$}};
\end{tikzpicture}
\end{center}

\end{document}

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par Fabrice Couvreur »

Bonsoir pg,
Merci pour toutes ces explications, j'ai beaucoup appris.
Toutefois, il y a un petit problème avec la commande \typededevoir :

Code : Tout sélectionner

! Undefined control sequence.
l.13 \typededevoir
                  {surveillé}
? 

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par Fabrice Couvreur »

Bonsoir pg,
J'ai encore besoin de ton aide. J'ai ajouté dans mon fichier perso.sty le code suivant :

Code : Tout sélectionner

\def\classe#1{\gdef\@classe{#1}}
\def\numerodevoir#1{\gdef\@numerodevoir{#1}}
\def\typededevoir#1{\gdef\@typededevoir{#1}}
\def\@maketitle{\noindent\begin{tikzpicture}
\node[rectangle,rounded corners=8pt,draw,fill=0.9white,drop shadow={fill=gray,opacity=1}] {\begin{tabularx}{\textwidth}{lXr}
{\bfseries \@classe}&  & {\bfseries \`{A} rendre le \@date}\tabularnewline
\noalign{\vspace*{0.25em}}\multicolumn{3}{c} {\large\bfseries \@typededevoir\ de Mathématiques \no \@numerodevoir \vspace*{0.25em}}
\end{tabularx}};
\end{tikzpicture}\vspace*{0.5em}}
\renewcommand\maketitle{\par
  \begingroup
    \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
    \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
    \long\def\@makefntext##1{\parindent 1em\noindent
            \hb@xt@1.8em{%
                \hss\@textsuperscript{\normalfont\@thefnmark}}##1}%
    \if@twocolumn
      \ifnum \col@number=\@ne
        \@maketitle
      \else
        \twocolumn[\@maketitle]%
      \fi
    \else
      \newpage
      \global\@topnum\z@   % Prevents figures from going at top of page.
      \@maketitle
    \fi
    \thispagestyle{empty}\@thanks
  \endgroup
  \setcounter{footnote}{0}%
  \global\let\thanks\relax
  \global\let\maketitle\relax
  \global\let\@maketitle\relax
  \global\let\@thanks\@empty
  \global\let\@author\@empty
  \global\let\@date\@empty
  \global\let\@title\@empty
  \global\let\title\relax
  \global\let\author\relax
  \global\let\date\relax
  \global\let\and\relax
}
Je compile ensuite le fichier suivant :

Code : Tout sélectionner

\documentclass[landscape,svgnames,a4paper,10pt]{article}
\input{perso.sty}
\begin{document}
\typededevoir{Corrigé du dl de Mathématiques}
\numerodevoir{2}
\classe{Seconde~2}
\date{le 6 janvier 2009}
\maketitle
\setlength{\columnseprule}{0.4pt} 
\begin{multicols}{2}
\ex
J'obtiens alors le message d'erreur suivant :

Code : Tout sélectionner

! LaTeX Error: No \title given.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.8 \maketitle
              
? 
Je ne comprends pas.
Merci.

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par pg »

Si je crée un fichier nommé perso.sty contenant les lignes suivantes :

Code : Tout sélectionner

\RequirePackage[latin1]{inputenc}
\RequirePackage[frenchb]{babel}
\RequirePackage[T1]{fontenc}
\RequirePackage{lmodern}
\RequirePackage{textcomp}
\RequirePackage{xcolor}
\RequirePackage{tikz}
\usetikzlibrary{shadows}
\RequirePackage{tabularx}
\definecolor{0.9white}{rgb}{0.9,0.9,0.9}
\def\classe#1{\gdef\@classe{#1}}
\def\numerodevoir#1{\gdef\@numerodevoir{#1}}
\def\typededevoir#1{\gdef\@typededevoir{#1}}
\def\@maketitle{\noindent\begin{tikzpicture}
\node[rectangle,rounded corners=8pt,draw,fill=0.9white,drop shadow={fill=gray,opacity=1}] {\begin{tabularx}{\textwidth}{lXr}
{\bfseries \@classe}&  & {\bfseries \`{A} rendre le \@date}\tabularnewline
\noalign{\vspace*{0.25em}}\multicolumn{3}{c} {\large\bfseries \@typededevoir\ de Mathématiques \no \@numerodevoir \vspace*{0.25em}}
\end{tabularx}};
\end{tikzpicture}\vspace*{0.5em}}
\renewcommand\maketitle{\par
  \begingroup
    \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
    \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
    \long\def\@makefntext##1{\parindent 1em\noindent
            \hb@xt@1.8em{%
                \hss\@textsuperscript{\normalfont\@thefnmark}}##1}%
    \if@twocolumn
      \ifnum \col@number=\@ne
        \@maketitle
      \else
        \twocolumn[\@maketitle]%
      \fi
    \else
      \newpage
      \global\@topnum\z@   % Prevents figures from going at top of page.
      \@maketitle
    \fi
    \thispagestyle{empty}\@thanks
  \endgroup
  \setcounter{footnote}{0}%
  \global\let\thanks\relax
  \global\let\maketitle\relax
  \global\let\@maketitle\relax
  \global\let\@thanks\@empty
  \global\let\@author\@empty
  \global\let\@date\@empty
  \global\let\@title\@empty
  \global\let\title\relax
  \global\let\author\relax
  \global\let\date\relax
  \global\let\and\relax
}
alors tout fonctionne parfaitement si j'essaie de compiler le fichier tex suivant

Code : Tout sélectionner

\documentclass[landscape,svgnames,a4paper,10pt]{article}
\usepackage{perso}
\begin{document}
\typededevoir{Corrigé du dl de}
\numerodevoir{2}
\classe{Seconde~2}
\date{le 6 janvier 2009}
\maketitle
\end{document}

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par Fabrice Couvreur »

Bonsoir pg,
Encore merci, cela fonctionne. Un jour, quand tu en auras le temps, j'aimerais que tu m'expliques ce qui n'a pas fonctionné chez moi.
@+

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par pg »

Je ne peut pas te dire, je ne suis pas parvenu à reproduire ton message erreur.

Une chose est sûre, c'est qu'utiliser \input{perso.sty} au lieu de \usepackage{perso} cause des problèmes car \usepackage permet d'utiliser @ dans les codes de macros sans \makeatletter et \makeatother, ce qui n'est pas le cas de \input.

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par Fabrice Couvreur »

Bonjour pg,
Encore merci pour tes explications.
Ce matin au bahut, j'ai remarqué que sur un document de deux pages, la première n'était pas numérotée, mais la deuxième oui.
Puis-je me permettre de te demander autre chose ?
Pourquoi, dans un environnement multicol, LaTeX laisse un aussi grand espace entre le dernier et l'avant dernier système ?
Est-ce parce qu'il se trouve lui-même dans un environnement multipage ?

Image

Code : Tout sélectionner

\setlength{\columnseprule}{0.4pt} 
\begin{multicols}{2}
\ex
Soit $x$ le prix d'un repas, et $y$ celui de la chambre.\\
Le prix de la pension complète est de 690\,\EUR\, par jour, donc on a~:~
\[2x+y=690.\]
Le  montant du séjour sans les frais divers est égal à~:~\\ $\nombre{13650}-\nombre{1500}=\nombre{12150}$.\\
On en déduit alors l'équation suivante~:~
\begin{align*}
 14(2x+y)+4(2x+0,8y)&=\nombre{12150}\\
 36x+17,2y & =\nombre{12150}. 
\end{align*}
Les systèmes suivants sont équivalents~:~\\
\begin{minipage}[c]{\linewidth}
\vspace*{2em}
\setlength{\columnseprule}{0pt}
\begin{multicols}{2}
\renewcommand{\arraycolsep}{1.4pt}
\null\vspace{-2\baselineskip}
\syst{2x+y}{690}{36x+17,2y}{\nombre{12150}}
\syst{2x+y}{690}{18x+8,6y}{\nombre{6075}}
\syst{17,2x+8,6y}{\nombre{5934}}{18x+8,6y}{\nombre{6075}}
\syst{0,8x}{141}{2x+y}{690}
\syst{x}{\nombre{176,25}}{y}{\nombre{337,5}}
\end{multicols}
\end{minipage}
Le prix d'une chambre est donc de 337,5\,\EUR, et celui d'un repas de 176,25\,\EUR.

pg
Modérateur
Modérateur
Messages : 2600
Inscription : vendredi 15 juin 2007, 00:31

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par pg »

Fabrice Couvreur a écrit :Ce matin au bahut, j'ai remarqué que sur un document de deux pages, la première n'était pas numérotée, mais la deuxième oui.
Tu as dû oublier de mettre un \pagestyle{empty} dans ton fichier perso.sty.
Fabrice Couvreur a écrit :Pourquoi, dans un environnement multicol, LaTeX laisse un aussi grand espace entre le dernier et l'avant dernier système ?
Est-ce parce qu'il se trouve lui-même dans un environnement multipage ?
Et avec un \begin{multicols*}{2}...\end{multicols*} ? Si ça ne fonctionne pas, il faudra me donner le code complet de la page de sorte qu'il soit compilable (donc avec le contenu perso.sty) et je pourrai te répondre précisément.

Il y a aussi des choses bizarres avec ton code. Pourquoi mettre un \vspace*{2em} et puis après un \null\vspace{-2\baselineskip} ? Les deux vont s'annuler, non ?

Fabrice Couvreur
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 604
Inscription : samedi 18 août 2007, 01:55

Re: [Tikz] Position des labels sur les branches d'un arbre

Message par Fabrice Couvreur »

Bonsoir,
pg a écrit :Tu as dû oublier de mettre un \pagestyle{empty} dans ton fichier perso.sty.
Exact !
pg a écrit :Et avec un \begin{multicols*}{2}...\end{multicols*} ?
Cela est beaucoup mieux ! J'ai supprimé mon environnement minipage et j'ai mis :

Code : Tout sélectionner

\setlength{\columnseprule}{0.4pt} 
\begin{multicols}{2}
\ex
Soit $x$ le prix d'un repas, et $y$ celui de la chambre.\\
Le prix de la pension complète est de 690\,\EUR\, par jour, donc on a~:~
\[2x+y=690.\]
Le  montant du séjour sans les frais divers est égal à~:~\\ $\nombre{13650}-\nombre{1500}=\nombre{12150}$.\\
On en déduit alors l'équation suivante~:~
\begin{align*}
 14(2x+y)+4(2x+0,8y)&=\nombre{12150}\\
 36x+17,2y & =\nombre{12150}. 
\end{align*}
Les systèmes suivants sont équivalents~:~
\setlength{\columnseprule}{0pt}
\begin{multicols*}{2}
\renewcommand{\arraycolsep}{1.4pt}
\syst{2x+y}{690}{36x+17,2y}{\nombre{12150}}
\syst{2x+y}{690}{18x+8,6y}{\nombre{6075}}
\syst{17,2x+8,6y}{\nombre{5934}}{18x+8,6y}{\nombre{6075}}
\syst{0,8x}{141}{2x+y}{690}
\syst{x}{\nombre{176,25}}{y}{\nombre{337,5}}
\end{multicols*}
\noindent Le prix d'une chambre est donc de 337,5\,\EUR, et celui d'un repas de 176,25\,\EUR.
\ex
Soit $x$ le montant placé en actions, et $y$ celui placé en obligations.\\
Les systèmes suivants sont équivalents~:~
\setlength{\columnseprule}{0pt}
\begin{multicols*}{2}
\renewcommand{\arraycolsep}{1.4pt}
\syst{x+y}{\nombre{50000}}{\mfrac{8}{100}x+\mfrac{11}{100}y}{\nombre{4500}}
\syst{x+y}{\nombre{50000}}{8x+11y}{\nombre{450000}}
\syst{11x+11y}{\nombre{550000}}{8x+11y}{\nombre{450000}}
\syst{3x}{\nombre{100000}}{x+y}{\nombre{50000}}
\syst{x}{\mfrac{\nombre{100000}}{3}}{y}{\mfrac{\nombre{50000}}{3}}
\end{multicols*}
 J'avais placé environ \nombre{33333,33}\,\EUR\, en actions, et environ \nombre{16666,67}\,\EUR\, en obligations.
\end{multicols}
La macro \ex étant :

Code : Tout sélectionner

\newcounter{exercice}
\newcommand{\ex}{\par\noindent\stepcounter{exercice}\begin{tikzpicture}\node[rectangle,rounded corners=2pt,draw,fill=LightGrey,drop shadow={fill=gray,opacity=1}]{\begin{tabular}{c}
{\bfseries {Exercice~\arabic{exercice}}}\end{tabular}};\end{tikzpicture}\par\noindent
 }
pg a écrit :Pourquoi mettre un \vspace*{2em} et puis après un \null\vspace{-2\baselineskip} ?
Abus de copier/coller de codes probablement !
Je suis loin de maîtriser toutes les commandes de LaTeX. Ainsi, je sais ce que fait la commande \vspace*{2em} (initialement, le texte après la résolution du système était "collé" au dernier système), par contre, pour la commande \null\vspace{-2\baselineskip}, je ne suis pas certain de comprendre ce qu'elle fait exactement. Tu me l'avais proposée dans un post précédent, je l'avais utilisée, sans chercher à l'analyser faute de temps !
Merci beaucoup.