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

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

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

Messagepar Fabrice Couvreur » Mercredi 31 Décembre 2008, 13:40

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.
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

Publicité

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

Messagepar pg » Mercredi 31 Décembre 2008, 14:25

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}
pg
Modérateur
 
Messages: 2593
Inscription: Jeudi 14 Juin 2007, 23:31

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

Messagepar Fabrice Couvreur » Mercredi 31 Décembre 2008, 14:45

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.
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

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

Messagepar pg » Mercredi 31 Décembre 2008, 19:10

\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.
pg
Modérateur
 
Messages: 2593
Inscription: Jeudi 14 Juin 2007, 23:31

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

Messagepar Fabrice Couvreur » Jeudi 01 Janvier 2009, 12:08

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.
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

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

Messagepar pg » Jeudi 01 Janvier 2009, 12:32

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
(167.54 Kio) Téléchargé 534 fois


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.
pg
Modérateur
 
Messages: 2593
Inscription: Jeudi 14 Juin 2007, 23:31

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

Messagepar Fabrice Couvreur » Jeudi 01 Janvier 2009, 13:00

Re,
Avant, pour mes entêtes, j'utilisais \psshadowbox, et pour le positionnement du texte, j'utilisais tabularx ou tabular.
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

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

Messagepar pg » Jeudi 01 Janvier 2009, 13:17

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.
pg
Modérateur
 
Messages: 2593
Inscription: Jeudi 14 Juin 2007, 23:31

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

Messagepar Fabrice Couvreur » Vendredi 02 Janvier 2009, 01:10

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}
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

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

Messagepar pg » Vendredi 02 Janvier 2009, 09:22

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}
pg
Modérateur
 
Messages: 2593
Inscription: Jeudi 14 Juin 2007, 23:31

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

Messagepar Fabrice Couvreur » Vendredi 02 Janvier 2009, 12:14

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.
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

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

Messagepar pg » Samedi 03 Janvier 2009, 13:50

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}
pg
Modérateur
 
Messages: 2593
Inscription: Jeudi 14 Juin 2007, 23:31

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

Messagepar Fabrice Couvreur » Samedi 03 Janvier 2009, 22:43

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
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

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

Messagepar Fabrice Couvreur » Lundi 05 Janvier 2009, 19:48

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.
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

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

Messagepar pg » Lundi 05 Janvier 2009, 21:04

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}
pg
Modérateur
 
Messages: 2593
Inscription: Jeudi 14 Juin 2007, 23:31

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

Messagepar Fabrice Couvreur » Lundi 05 Janvier 2009, 23:18

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.
@+
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

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

Messagepar pg » Mardi 06 Janvier 2009, 00:48

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.
pg
Modérateur
 
Messages: 2593
Inscription: Jeudi 14 Juin 2007, 23:31

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

Messagepar Fabrice Couvreur » Mardi 06 Janvier 2009, 17:35

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.
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

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

Messagepar pg » Mardi 06 Janvier 2009, 20:59

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 ?
pg
Modérateur
 
Messages: 2593
Inscription: Jeudi 14 Juin 2007, 23:31

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

Messagepar Fabrice Couvreur » Mardi 06 Janvier 2009, 23:34

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.
Fabrice Couvreur
Giga-utilisateur
 
Messages: 601
Inscription: Samedi 18 Août 2007, 00:55

Suivante

Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot], Google [Bot] et 14 invités