[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.

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

Messagepar pg » Mercredi 07 Janvier 2009, 00:01

Fabrice Couvreur a écrit:La macro \ex étant :

Il manque surtout la macro \syst

Fabrice Couvreur a écrit: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 !

C'était dans ce post, c'est ça ?

La commande \null\vspace{-2\baselineskip} est équivalente à \vspace*{-2\baselineskip} et -2\baselineskip c'est à peu près la même chose que -2em.

Cet espacement supplémentaire servait à compenser le fait qu'une minipage suivie d'un \[...\] introduit un espacement supplémentaire indésirable. Donc selon comment est définie la macro \syst, ce n'est pas forcément utile ici.
pg
Modérateur
 
Messages: 2593
Inscription: Jeudi 14 Juin 2007, 23:31

Publicité

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

Messagepar Fabrice Couvreur » Mercredi 07 Janvier 2009, 17:56

Bonjour pg,
pg a écrit:Il manque surtout la macro \syst

Code: Tout sélectionner
\newcommand{\syst}[4]{\renewcommand{\arraystretch}{1.6}\renewcommand{\arraycolsep}{1.4pt}\[\left\{
        \begin{array}{ccc}
          #1 & = & #2\\
          #3 & = & #4\\
        \end{array}
\right.
\]}

pg a écrit:Cet espacement supplémentaire servait à compenser le fait qu'une minipage suivie d'un \[...\] introduit un espacement supplémentaire indésirable.

Nous avions un environnement muticol suivi de \[....\].
Minipage et multicol, des similitudes dans le comportement ?
Merci.
PS : je sais que tout est histoire de goût, mais est-ce que la macro \ex est correcte, notamment au niveau des espacements avant et après ?
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 » Vendredi 09 Janvier 2009, 00:29

Quelques remarques sur le code :

  • il est inutile d'écrire "blabla~:~\[...\]", "blabla~:\[...\]" suffit (du point de vue de la présentation du code, c'est même mieux de faire un saut de ligne entre le : et le \[)
  • au lieu d'utiliser des \\ et des \noindent partout, il vaut mieux faire un \parindent=0pt et ensuite taper le texte normalement (c'est-à-dire en laissant une ligne blanche lorsqu'on veut changer de paragraphes)
  • les \renewcommand{\arraycolsep}{1.4pt} sont déjà dans \syst, donc inutile de les répéter à chaque début de multicols
  • il vaut mieux rajouter un \nobreak après le \par à la fin de \ex pour qu'il n'y ait pas une éventuelle coupure de page intempestive juste après \ex
  • je définirai bien une commande \euros{xxx} qui prend en argument un nombre et affiche la somme en euros correspondante :

    Code: Tout sélectionner
    \newcommand{\euros}[1]{\nombre{#1}\text{\,\texteuro}}


    J'ai supprimé l'espace après le symbole euro qui, me semble-t-il, n'est pas utile et j'ai utilisé \texteuro à la place de \EUR (a priori, \texteuro a été conçu pour s'harmoniser un peu mieux que le logo officiel de l'euro, mais à toi de voir ce que tu préfère).

Concernant l'espacement autour de \ex, effectivement, tu peux probablement rajouter un petit \vspace{3pt} après, mais surtout rajouter un \vskip 3pt plus 9pt avant, cela fera que TeX de mettra toujours au moins 3pt avant et mettre au plus 3pt+9pt=12pt si besoin est. Ça rajoute un peu d'extensibilité à cet endroit. La commande ressemblera donc à ça (j'ai supprimé le tableau qui est inutile, rajouté "inner sep = 5pt" et changé la couleur en 0.9white pour qu'elle soit cohérente avec celle du titre, mais peut-être as-tu fait le contraire en changeant la couleur du titre en LightGrey).

Code: Tout sélectionner
\newcounter{exercice}
\newcommand{\ex}{\par\vskip 3pt plus 9pt\stepcounter{exercice}%
\begin{tikzpicture}\node[rectangle,rounded corners=2pt,draw,fill=0.9white,drop shadow={fill=gray,opacity=1},inner sep=5pt]
{\bfseries Exercice~\arabic{exercice}};
\end{tikzpicture}\par\nobreak\vspace{3pt}}


Concernant la macro \syst, il vaut mieux tout mettre entre un \begingroup et un \endgroup afin que les redéfinitions soient locales (afin d'éviter tout effet de bord indésirable). J'ai aussi changé le ccc en un ccr pour l'alignement des nombres du membre de droite (à voir) :

Code: Tout sélectionner
\newcommand{\syst}[4]{\begingroup\renewcommand{\arraystretch}{1.6}%
\renewcommand{\arraycolsep}{1.4pt}%
\[\left\{
        \begin{array}{ccr}
          #1 & = & #2\\
          #3 & = & #4\\
        \end{array}
\right.
\]\endgroup}


Avec tout ça, voici le résultat :

dl_math.png


Pour obtenir ceci, voici le contenu de perso.sty (probablement différent du tien) :

Code: Tout sélectionner
\RequirePackage[latin1]{inputenc}
\RequirePackage[frenchb]{babel}
\RequirePackage[autolanguage]{numprint}
\RequirePackage[T1]{fontenc}
\RequirePackage{lmodern}
\RequirePackage{textcomp}
\RequirePackage{xcolor}
\RequirePackage{tikz}
\usetikzlibrary{shadows}
\RequirePackage{tabularx}
\RequirePackage{multicol}
\RequirePackage{marvosym}
\RequirePackage{amsmath}
\RequirePackage{nccmath}
\RequirePackage{geometry}
\geometry{a4paper}
\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
}

\newcommand{\syst}[4]{\begingroup\renewcommand{\arraystretch}{1.6}%
\renewcommand{\arraycolsep}{1.4pt}%
\[\left\{
        \begin{array}{ccr}
          #1 & = & #2\\
          #3 & = & #4\\
        \end{array}
\right.
\]\endgroup}

\newcounter{exercice}
\newcommand{\ex}{\par\vskip 3pt plus 9pt\stepcounter{exercice}%
\begin{tikzpicture}\node[rectangle,rounded corners=2pt,draw,fill=0.9white,drop shadow={fill=gray,opacity=1},inner sep=5pt]
{\bfseries Exercice~\arabic{exercice}};
\end{tikzpicture}\par\nobreak\vspace{3pt}}

\parindent=0pt
\pagestyle{empty}
\newcommand{\euros}[1]{\nombre{#1}\text{\,\texteuro}}


et le contenu du fichier principal

Code: Tout sélectionner
\documentclass[landscape,svgnames,a4paper,10pt]{article}
\usepackage{perso}
\begin{document}
\typededevoir{Corrigé du dl}
\numerodevoir{2}
\classe{Seconde~2}
\date{le 6 janvier 2009}
\maketitle
\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 \euros{690} 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}
\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*}
Le prix d'une chambre est donc de \euros{337,5} et celui d'un repas de \euros{176,25}.

\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}
\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 \euros{33333,33} en actions, et environ \euros{16666,67} en obligations.
\end{multicols}
\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 09 Janvier 2009, 18:10

Bonsoir pg,

Un simple merci ne suffit plus pour exprimer toute ma gratitude. J'apprends énormément de tes conseils toujours très judicieux.
Je viens d'analyser toutes les améliorations que tu proposes, je pense avoir compris sauf peut-être :

Concernant la macro \syst, il vaut mieux tout mettre entre un \begingroup et un \endgroup afin que les redéfinitions soient locales (afin d'éviter tout effet de bord indésirable).


Merci infiniment.
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 10 Janvier 2009, 00:05

Le fait de redéfinir \arraycolsep et \arraystretch change tout ce qui en dépend, notamment les matrices. Par exemple, le code suivant

Code: Tout sélectionner
\documentclass{article}
\usepackage{amsmath}
\newcommand{\syst}[4]{%\begingroup
\renewcommand{\arraystretch}{1.6}%
\renewcommand{\arraycolsep}{1.4pt}%
\[\left\{
        \begin{array}{ccr}
          #1 & = & #2\\
          #3 & = & #4\\
        \end{array}
\right.
\]%\endgroup
}
\begin{document}

\[\begin{pmatrix}1 & 2 \\ 3 & 4\end{pmatrix}\]

\syst{x}{2}{y}{3}

\[\begin{pmatrix}1 & 2 \\ 3 & 4\end{pmatrix}\]

\end{document}

donne

pmatrix_syst.png
pmatrix_syst.png (4.7 Kio) Vu 1945 fois

La deuxième matrice n'a pas un espacement correct car les valeurs de \arraycolsep et \arraystretch ont changé à cause de l'appel de \syst. Si on met un \begingroup et un \endgroup à l'intérieur de \syst, le problème disparaît car les redéfinitions sont alors locales, sans effet sur le reste. C'est ce que je voulais dire par éviter des effets de bord indésirables.
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 10 Janvier 2009, 12:12

Bonjour pg,
Je pense avoir compris ce que cela voulait dire, mais il y a encore un petit détail que j'aimerais régler.
Dans le code que tu as proposé, l'instruction

Code: Tout sélectionner
%\begingroup


voulait bien dire que l'environnement \begingroup était inopérant, j'ai donc testé ton code en le rendant opérant, c'est-à-dire en enlevant %.
Pourquoi mets-tu un % dans l'instruction

Code: Tout sélectionner
\renewcommand{\arraystretch}{1.6}%
\renewcommand{\arraycolsep}{1.4pt}%


Ce symbole est en général utilisé pour rendre inopérante une commande ou ajouter un commentaire dans un code source.
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 10 Janvier 2009, 16:00

Mettre des % en fin de lignes quand on définit des commandes est une bonne habitue à prendre pour éviter les mauvaises surprises. Ici, on pourrait les enlever, mais en général les oublier peut mettre des espaces supplémentaires là où on ne veut pas (pour TeX, une fin de ligne est interprétée comme un espace). Voici un petit exemple simple qui montre la différence entre mettre des % et ne pas les mettre :

Code: Tout sélectionner
\documentclass{article}
\newcommand{\A}{
A
}
\newcommand{\Abis}{%
A%
}
\begin{document}
b\A{}b

b\Abis{}b
\end{document}


Dans le premier cas, on obtient "b A b" (car il y a deux sauts de lignes qui sont convertis en espaces) et dans le deuxième "bAb".
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 » Dimanche 11 Janvier 2009, 00:42

Bonsoir pg,
Excuses mon côté perfectioniste :)

pg a écrit:Mettre des % en fin de lignes quand on définit des commandes


Toutes les nouvelles commandes ou un certain type ?
Par exemple, quand tu proposes la nouvelle commande

Code: Tout sélectionner
\newcommand{\euros}[1]{\nombre{#1}\text{\,\texteuro}}


tu ne mets pas ce symbole.
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 12 Janvier 2009, 21:29

Le % à la fin d'une accolade de définition n'est utile que lorsqu'une définition est à l'intérieur d'une autre (et encore, pas dans tous les cas) ou quand la définition de la commande est dans le texte (ce qui est plutôt rare, usuellement, les définitions sont dans le préambule). Pour les définitions du type de \euros dans le préambule, il n'y a aucun problèmes de ce genre.
pg
Modérateur
 
Messages: 2593
Inscription: Jeudi 14 Juin 2007, 23:31

Précédente

Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Google Adsense [Bot] et 7 invités