Latex


Latex

Introduction

Latex est un système de composition de documents (traitement de texte) ainsi qu'un langage ayant pour objet la création de documents de grande qualité.

Latex est l'outil privilégié pour la rédaction de documents scientifiques, en particulier contenant toutes sortes de formules et symboles mathématiques (mais pas que), mais est aussi parfaitement adapté à la création de documents de toutes sortes: écrits non (exclusivement) scientifiques, lettres, transparents pour présentation, ..

Mise en forme générale

Dimensions d'une page

La commande suivante permet d'afficher au point courant du document les dimensions d'une page.
Chaque dimension peut-être modifiée à l'aide de la commande \setlength (voir ... et les unités de mesure reconnues par Latex).
Code: Select all
\layout
Affichage:
Différentes dimensions dans une page en Latex

Taille des fontes


Les commandes \tiny, \scriptsize, \footnotesize, \small, \normalsize, \large, \Large, \LARGE, \huge, \Huge permettent de modifier la taille du texte:
Code: Select all
\centerline{{\tiny tiny},
 {\scriptsize scriptsize},
 {\footnotesize footnotesize},  {\small small},}
\centerline{{\normalsize normalsize}, {\large large},}
\centerline{{\Large Large}, {\LARGE LARGE}, {\huge huge}, {\Huge Huge}.}
Affichage:
Différentes tailles de fonte
Pour une autre taille de texte (plus grande par exemple), on peut indiquer directement à Latex la taille, en points, à utiliser.
Cette commande n'a toutefois de sens qu'avec des fontes vectorielles (tels que Times, Palatino, ...), dans le cas contraire l'agrandissement à outrance risquant de fournir un résultat quelque peu décevant esthétiquement.
Code: Select all
\fontsize{30}{30}{\bf\LaTeX}
Le premier nombre en argument donne la taille de la fonte, le second la taille de l'interligne.

Mode mathématiques


Pour utiliser des symboles mathématiques ou rédiger des formules mathématiques, il faut indiquer à Latex de passer en mode mathématique.
L'environnement mathématique peut s'indiquer de deux manières:
  • Avec des $ simples, un au début de l'expression et un autre en fin de l'expression mathématique.
    La formule se trouve alors insérée dans la ligne courante, au même titre qu'un texte quelconque.
    Code: Select all
    Une formule bien connue: $\forall x\in\R, 1=\cos^x+\sin^2x$
    Affichage:
    cos^2+sin^2 en Latex
  • En ouvrant l'environnement mathématique par \[ et en le refermant par \].
    L'expression est alors mise à la ligne et centrée.
    Code: Select all
    Une autre formule moins connue:
    \[
    1=\ln\left[ \lim_{z\to 0} \left( 1+\frac{1}{z}\right)^z\right]
    \]
    Affichage:
    Une autre (bien plus) belle formaule mathématique en Latex

Taille des fontes en mode mathématique


Les commandes précédentes ne sont pas valides en mode mathématique. Sont disponibles par contre:
  • \textstyle: taille par défaut du texte courant
  • \displaystyle: défaut pour l'affichage d'équations
  • \scriptstyle: taille par défaut des indices et exposants de premier niveau
  • \scriptscriptstyle: taille par défaut pour indices et exposants de niveau supérieur

Les unités de mesure


Latex comprend six unités de mesure :
  • pt: point = 0,35 mm
  • cm: centimètre
  • mm: millimètre
  • ex: correspond à la hauteur d'un ``x'' dans la fonte courante
  • em: correspond à la largeur d'un ``m'' dans la fonte courante
  • in: pouce = 2,54 cm



Les longueurs prédéfinies et espaces


Un certain nombre de longueurs prédéfinies (c'est-à-dire existantes et ayant une valeur par défaut) existent, parmi lesquelles celles indiquées précédemment et fixant les dimensions de mise en page générale.
On peut y rajouter:
  • \parindent: la longueur de l'indentation (retrait) au début de chaque nouveau paragraphe (après un saut de ligne, ou de l'utilisation de la commande \par)
  • \parskip: l'espace vertical entre deux praragraphes (séparés par un saut de ligne, ou par la commande de la commande \par)
  • \baselineskip: l'interligne

Chaque longueur peut être (re)définie suivant, par exemple pour baselineskip:
Code: Select all
\setlength{\baselineskip}{0.3cm}

Espaces verticaux

  • \vspace{longueur}, ou \vspace*{longueur}, où longueur est ... une longueur (en cm, pt, \dots cf. unités de mesure en LaTex).
    La version étoilée force l'espacement, même en début de page.
  • \bigskip
  • \vfill correspond à un espace vertical de la hauteur de l'espace encore libre sur la page: ce qui suit est repoussé en bas de la page.


Espaces horizontaux

  • \,: espace d'un demi-caractère
  • \ : espace d'un caractère
  • \!: espace négatif (retrait) d'un demi-caractère
  • \hspace{largeur}, ou \hspace*{largeur}: commandes identiques à leurs analogues verticaux.
  • \hfill correspond à un espace horizontal de la largeur de l'espace encore libre sur la ligne: ce qui suit est repoussé à droite de la page.
  • Par exemple:
    Code: Select all
    \fbox{
     \begin{minipage}[t]{6cm}
      Début\hfill Milieu\hfill Fin

      \vspace{1cm}

      \centerline{Bas de (mini)page}
     \end{minipage}
    }
    Affichage:
    Différents espaces en Latex


Les compteurs


Latex permet de définir et d'utiliser des compteurs, et donc de numéroter automatiquement.
Certains sont prédéfinis et utilisés par Latex, par exemple pour la numérotation des pages, sections, ...
La valeur d'un compteur s'affiche à l'aide de la commande \thenom_compteur, par exemple
Code: Select all
\thepage
ou encore, à l'aide d'une des commandes
  • \alph{nom_compteur} pour la numérotation alphabétique en lettres minuscules,
  • \Alph{nom_compteur} pour la numérotation alphabétique en lettres majuscules,
  • \arabic{nom_compteur} pour la numérotation en chiffres arabes: 1,2,3, ..
  • \roman{nom_compteur} pour la numérotation en chiffres romains minuscules: i, ii, iii, iv, ..
  • \Roman{nom_compteur} pour la numérotation en chiffres romains majuscules: I, II, III, IV, ..


Un nouveau compteur peut être défini gâce à la commande \newcounter{nom_compteur}. Celui-ci peut être incrémenté (on ajoute une unité au compteur) à l'aide de la commande \stepcounter{nom_compteur}, tandis qu'on peut plus généralement ajouter directement une quantité à un compteur par la commande \addtocounter{nom_compteur}{nombre}.
Code: Select all
\newcounter{cpt}
\setcounter{cpt}{0}

\noindent
\stepcounter{cpt}
\thecpt\, -- \alph{cpt} \\
\addtocounter{cpt}{7}
\thecpt\, -- \Alph{cpt} \\
\addtocounter{cpt}{15}
\thecpt\, -- \arabic{cpt} \\
\addtocounter{cpt}{32}
\thecpt\, -- \roman{cpt} \\
\addtocounter{cpt}{10}
\thecpt\, -- \Roman{cpt}
Affichage:
Différents compteurs en Latex

Les listes: itemize et enumerate


Deux types d'environnement pour les listes: itemize, pour les listes simples, et enumerate pour les listes numérotées.
\begin{itemize}
\item 1er item 
\item 2ème item !
\item \dots et le 3ème...
\item[$\bullet$] suivi de 2 autres \dots \\ \dots avec une puce 
\item[$\bullet$] et voilà le 2ème
  \begin{itemize}
  \item[$\heartsuit$] dans une sous-liste imbriquée
  \item[$\heartsuit$] avec deux item \dots
    \dots et des c\oe urs comme puces 
  \end{itemize}
\end{itemize}
Affichage
exemple de liste avec itemize
Les listes numérotées peuvent se faire avec l'environnement enumerate, qui permet entre autre de numéroter automatiquement chaque item.
Le type de numérotation s'indique en argument, et la numérotation peut être interrompue et reprise, ou manipuler de manières diverses via les compteurs enumi (1er niveau), enumii (2ème...) et enumiii (voir le paragraphe précédent sur les compteurs).
%\usepackage{enumerate}
\begin{enumerate}
\item alinéa 1
\item alinéa 2 
  \begin{enumerate}[a)]
    \item sous-alinéa 1
    \item sous-alinéa 2
    \item \dots 3 \\[1em]
      \dots\dots \\
      \setcounter{enumii}{5}
    \item On a sauté d'un coup quelques items intermédaires\dots
  \end{enumerate}
\item Fin des sous-alinéa, \\
  c'est-à-dire retour à la liste principale

% On sauvegarde dans le compteur LastEnumi 
% le numéro du dernier item utilisé
\newcounter{LastEnumi}
\setcounter{LastEnumi}{\theenumi}
\end{enumerate}

On peut sortir de cet environnement quelques instants, lignes, pages,
autres environnements, \dots 

puis y revenir 
\begin{enumerate}
% On recommence à numéroter automatiquement 
% là où on a cessé
\setcounter{enumi}{\theLastEnumi}
\item retour à la suite de la numérotation précédente !
\end{enumerate}
Affichage
exemple de liste avec enumerate

Les boîtes


Il existe un certain nombre de boîtes:
  • \mbox{texte}: créé une boîte de taille juste suffisante pour contenir le texte.
    La boîte est insécable: le texte qui y est contenu ne peut pas, entre autre, être coupé en fin de ligne (qui peut donc être utilisée en fin de ligne afin d'éviter une césure inoportune d'un mot).
    A l'intérieur du \mbox, on se trouve en mode texte. La commande \mbox permet donc en particulier d'introduire simplemenent du texte à l'intérieur d'un mode mathématique. Par exemple:
    Code: Select all
    \[1 = \ln(e)
    \mbox{ soit, }
    1=\ln\left[ \lim_{z\to 0} \left( 1+\frac{1}{z}\right)^z\right]
    \]
    Affichage:
    Une formule mathématique inline
  • \fbox{texte}: similaire à \mbox, excepté que le cadre de la boîte est tracé.
  • \makebox[largeur][position]{texte}: où largeur désigne la largeur de la boîte souhaitée, et position est
    • l : le texte sera justifié à gauche
    • r : le texte sera justifié à doite
    • s : le texte sera justifié à gauche et à droite
  • \framebox[largeur][position]{texte}: est similaire à \makebox, excepté que le cadre de la boîte est tracé.
  • \parbox[position]{largeur}{texte}
  • \raisebox{distance}[dist-sup][dist-inf]{texte}: permet de contrôler le positionnement vertical du texte.
    Code: Select all
    Un texte
    \raisebox{0pt}[0pt][0pt]{\Large%
    \textbf{Aaaa\raisebox{-0.3ex}{a}%
     \raisebox{-0.7ex}{aa}%
     \raisebox{-1.2ex}{r}%
     \raisebox{-2.2ex}{g}%
     \raisebox{-4.5ex}{h}}}
    qui s'écroule sur lui-même \ldots
    Affichage:
    Un texte qui s'écroule sur sa ligne
  • minipage: cet environnement permet, comme son nom l'indique, de créer une "mini" page dans la page.
    Code: Select all
    \begin{minipage}[t]{4cm}
     Une page étroite avec une formule:
     \[1+e^{i\pi}=0\]
    \end{minipage}
    \hspace{0.3cm}
    \begin{minipage}[t]{6cm}
     et une autre un peu plus large en vis-à-vis,
     avec une autre formule
     \[\cos z = \frac{e^{iz}+e^{-iz}}{2}\]
     (tout aussi vraie d'ailleurs)
    \end{minipage}
    Affichage:
    Exemples de mini pages
L'épaisseur des cadres, lorsque tracés, est spécifiée par la longueur \fboxrule.
On la change ainsi en modifiant cette longueur: \setlength{\fboxrule}{largeur}, où largeur est la largeur souhaitée du trait.

L'espace entre le texte et le cadre est géré par la longueur \fboxsep.
On peut ainsi facilement, en modifiant cette longueur, afficher un cadre beacoup plus large que le texte qu'il contient.

Pour finir, on peut aussi à encadrer du texte "à la main", en combinant fbox et minipage:
Code: Select all
\fbox{
\begin{minipage}{6cm}
 Texte...
\end{minipage}
}

Encore des boîtes: exemples


Code: Select all
\fbox{Un exemple serré dans sa boîte}
Affichage:
Exemple de texte encadré dans une boîte
Code: Select all
\fbox{\raisebox{0.2cm}[0.8cm][0.3cm]{Un exemple à l'aise dans sa boîte}}
Affichage:
Exemple de boîte élargie avec raisebox
Code: Select all
\setlength{\fboxsep}{0.5cm}
\fbox{Un exemple à l'aise dans sa boîte, II}
Affichage:
Exemple de boîte élargie en modifiant la longueur fboxsep
Code: Select all
\setlength{\fboxrule}{3pt}
\fbox{\raisebox{0.2cm}[0.8cm][0.3cm]{Un exemple avec un cadre épais}}
Affichage:
Epaisseur du cadre en modifiant fboxrule
Avec PSTricks, d'autres boîtes sont disponibles (utiliser alors le package pst, ou pst-all):
Code: Select all
\psframebox{cadre basique}
Affichage:
Texte encadré avec pstricks et psframebox
Code: Select all
\psdblframebox{cadre basique double}
Affichage:
Double encadrement d'un texte encadré avec pstricks et psdblframebox
Code: Select all
\psframebox[linearc=0.8,cornersize=absolute]{Un cadre arrondi}
Affichage:
Encadrement arrondi d'un texte avec pstricks et psframebox
Code: Select all
\psshadowbox{Cadre ombré}
Affichage:
Encadrement ombré d'un texte avec pstricks et psshadowbox
Code: Select all
\psovalbox{Oval}
Affichage:
Encadrement oval d'un texte avec pstricks et psovalbox
Code: Select all
\psdiabox{Losange}
Affichage:
Encadrement losange d'un texte avec pstricks et psdiabox
Code: Select all
\pstribox{Cadre triangulaire}
Affichage:
Encadrement triangulaire d'un texte avec pstricks et pstribox

Transformations d'objets: rotation et réduction / agrandissement


Les trois commandes scalebox, resizebox ,et rotatebox permettent de modifier (presque) n'importe quel objet.
Code: Select all
\scalebox{0.5}{abc}
\hspace{0.5cm}
\scalebox{1}{abc}
\hspace{0.5cm}
\scalebox{2}{abc}
Affichage:
Différentes tailles de texte avec scalebox
Code: Select all
\rotatebox{-45}{abc}
\hspace{0.5cm}
\rotatebox{45}{abc}
Affichage:
Orientation du texte avec rotatebox

En-tête et pied de pages


Des cadres d'en-tête et pied de page peuvent être insérés automatiquement par Latex.
Le package fancyheadings, à charger dans le préambule, permet cela:
Code: Select all
\usepackage{fancyheadings}
Le cadre d'en-tête se définit alors en utilisant les commandes \lhead{texte}, \chead{texte}, \rhead{texte} (respectivement en-tête gauche, centre et droite), et celui de pied de page avec \lfoot{texte}, \cfoot{texte}, \rfoot{texte}, (respectivement pied de page gauche, centre et droite).

Les longueurs \headrulewidth et \footrulewidth correspondent à l'épaisseur du trait séparateur du corps du texte avec les en-têtes et pieds.
Code: Select all
\setlength{\headrulewidth}{0.4pt}
\setlength{\footrulewidth}{0.pt}
\lhead{}
\chead{Titre du document}
\rhead{\thesection}
\lfoot{Auteur}
\cfoot{}
\rfoot{\thepage}
On indique alors à Latex par la commande \pagestyle{fancyplain} que l'on souhaite utiliser les en-têtes et pieds de page, tandis que la commande \pagestyle{empty} permet d'imposer des pages sans en-tête et pied de page (\thispagestyle{empty} ne l'impose que pour la page courante, utile par exemple pour la page de garde d'un document).

Coupures et espacements de lignes et de pages


Par défaut, Latex optimise la mise en page afin d'avoir un rendu le plus esthétique possible (en fait, le moins moche possible).
On peut néanmoins (et heureusement) imposer certaines exigences, dans les coupures de lignes et de pages:
  • \\, \\*: impose la fin de la ligne; la version étoilée indique de plus que la ligne suivante doit être sur la même page, et empêche ainsi un saut de page inopportun.
  • \\[hauteur]: impose la fin de la ligne avec un espace vertical indiqué par hauteur
    Par exemple,
    Code: Select all
    \[\left\{\begin{array}{cc}
    \\[-0.2cm]
    2x^2+\dfrac{2^{12}}{y}=36 \\[0.8cm]
    3x+e^{|y|^3}=-12\\[0.3cm]
    \end{array}\right. \]
    Affichage:
    Un système d'équation aéré, avec une grande interligne
  • \clearpage: termine la page ici, et force l'affichage de tous les graphiques et autres figures avant de reprendre la suite du texte sur une nouvelle page.
  • \newline: termine la ligne ici.
  • \newpage: termine la page ici. Le bas de la page coupée est vide, le texte reprend à la page suivante.
  • \linebreak,\pagebreak: termine aussi la ligne ou la page ici, à la différence que la ligne ou la page coupée est étirée de manière à utiliser tout l'espace disponible sur la ligne ou la page.
  • \newpage: termine la page ici. Le bas de la page coupée est vide, le texte reprend à la page suivante.
  • \nolinebreak[n], \nopagebreak[n]: évite de couper la ligne ou la page courante; l'argument optionnel n est un nombre entre 0 et 4 qui, plus grand il est, plus la coupure est empêchée.
  • \enlargethispage{longueur}: indique à Latex de comprimer (lorsque longueur est négatif) ou d'étirer (lorsque longueur est positif) le contenu de la page en cours, de manière, par exemple, à éviter que la page suivante ait trop peu de contenu).
    Par exemple
    Code: Select all
    \enlargethispage{1cm} % étend la page de 1 cm
    \enlargethispage{-2\baselineskip} % supprime deux lignes dans la page


Document en mode paysage et/ou avec 2 colonnes


On peut créer des documents au format paysage, et sur deux colonnes de la manière suivante:
Code: Select all
\documentclass[12pt,twocolumn]{article}
\usepackage[landscape]{geometry}
(bien sûr, avec onecolumn on obtient un document en mode landscape mais avec une seule colonne…)

Les longueurs columnsep et columnseprule permettent alors de jouer, comme leur nom l'indique, sur la largeur de la séparation entre les colonnes de droites et gauche, et sur l'épaisseur du trait séparant les deux colonnes (une épaisseur nulle supprime le trait).
Par exemple:
Code: Select all
\columnsep=10pt
\columnseprule=0.3pt
% ou de manière équivalente
\setlength{\columnsep}{30pt}
\setlength{\columnseprule}{1pt}
Dans un document "une colonne" on peut passer localement sur deux colonnes avec \twocolumn[titre]{texte}, où titre est le titre du passage suivant qui peut s'étendre sur toute la largeur des deux colonnes, et texte est le texte qui va s'étendre sur la première colonne … puis la deuxième…
Par exemple:
Code: Select all
\columnsep=20pt
\columnseprule=.3pt
\twocolumn[\centerline{Titre de la section bi-colonne}]{Texte à proprement parler.}
% et pour repasser sur une colonne:
\onecolumn
Du texte sur toute la largeur de la page,\\
sur une seule colonne
On peut aussi utiliser l'environnemenent twocolumn:
Code: Select all
\columnsep=20pt
\columnseprule=.3pt
\begin{twocolumn}
Du texte sur deux colonnes \dots\dots\\
\dots\dots
\end{twocolumn}


Quelques packages utiles



Package calc


Le package calc permet d'effectuer … des calculs. Par exemple,
Code: Select all
\usepackage{calc} % Dans le préambule...

\newlength{\col}
\setlength{\col}{13cm}

\newcommand{\bgdef}[2]{%
  \newlength{\ldef}\settowidth{\ldef}{#1}
 \paragraph{\underline{#1:}}
 \begin{minipage}[t]{\col-\ldef-2em}{\it #2}
 \end{minipage}
}
%%%%%%%%%
% Usage %
\bgdef{Titre}{Une longue propriété; une longue propriété;
une longue propriété; Une longue propriété
}
Affichage:
Une longue propriété, avec retour à la ligne automatique
Remarque: La longueur (13cm) peut judicieusement être remplacée par \textwidth

Voir aussi la section Dessins avec boucles et calculs pour un autre exemple d'utilisation.


Un peu de programmation


Nouvelle commande


Commande avec un argument optionnel


Avoir un argument optionnel dans une commande peut-être intéressant, pour au moins deux raisons:
  • on prévoit qu'un des arguments de notre commande va être, sauf cas (très) rare, toujours le même; on n'a donc pas spécialement envie de le repréciser à chaque appel de la commande, et on souhaiterait que lorsqu'il n'est pas précisé une valeur par défaut lui soit directement attribuée;
  • on a créé une commande qui fonctionne comme souhaité, et que l'on utilise déjà un certain nombre de fois dans notre document (ou même dans un certain nomrbe de documents qui utilisent tous le même fichier de commande et donc cette commande là).
    Néanmoins, avec le temps et la pratique, on s'aperçoit que l'on aimerait bien que cette commande puisse accepter un autre argument, mais sans pour autant avoir à modifier tous les appels à cette fonction, c'est-à-dire, en faisant en sorte que tous le texte déjà tapé et utilisant déjà cette commande continue à fonctionner correctement bien que la définition de la commande soit modifié

Pour créer une commande avec un argument optionnel, qui sera alors utilisé entre crochet: cmd[option]{arg_1}{arg_2}...{arg_n}, on peut procéder comme suit, en testant si le caractère qui suit l'appel de la commande est un crochet ou non.
On définit alors deux versions de la commande, une sans option et une avec option:
Code: Select all
\makeatletter
\def\mycmd{\@ifnextchar[{\@with}{\@without}}
\def\@with[#1]#2{#1 est optionnel, mais pas #2?}
\def\@without#1{Avec l'unique argument #1, mycmd fonctionne aussi !!}
\makeatother

% Utilisation, avec un ou deux arguments
\mycmd["Arg. en plus"]{"l'arg. original"}

\mycmd{"arg. originel"}
Affichage:



Un peu de maths


Caractères grecs


Les lettres grecques sont chroniquement utilisées en mathématiques. Tout l'alphabet est évidemment disponible an Latex, le voici:
Code: Select all
% Tableau contenant les 24 lettres, minuscule et majuscule,
% de l'alphabet grec
\renewcommand{\arraystretch}{1.3}
\begin{tabular}{cccc}
\small{Minuscule} & \small{Majuscule} &
\small{\bgmp[t]{1.45cm}Nom des lettres\enmp} &
\small{\bgmp[t]{2.85cm}Correspondance en alphabet latin\enmp}\\[.8cm]
$\alpha$& A & alpha & a\\
$\beta$ & B & bêta & b \\
$\gamma$ & $\Gamma$ & gamma & g \\
$\delta$ & $\Delta$& delta & d \\
$\varepsilon$ & E & epsilon & é \\
$\zeta$ & Z & dzêta & dz \\
$\eta$ & H & êta & è \\
$\theta$ & $\Theta$ & thêta & th \\
$\iota$ & I & iota & i \\
$\kappa$& K & kappa & k \\
$\lambda$ & $\Lambda$ & lambda & l \\
$\mu$ & M & mu & m \\
$\nu$ & N & nu & n \\
$\xi$ & $\Xi$ & xi & x\\
o & O & omicron & o \\
$\pi$ & $\Pi$ & pi & p\\
$\rho$ & P & rhô & r \\
$\sigma$ & $\Sigma$ & sigma & s \\
$\tau$ & T & tau & t \\
$\upsilon$ & $\Upsilon$ & upsilon & y \\
$\varphi$ & $\Phi$ & phi & ph \\
$\chi$ & X & khi & ch \\
$\psi$ & $\Psi$ & psi & ps \\
$\omega$ & $\Omega$ & oméga & ô
\end{tabular}
Affichage:
Alphabet grec

Caractères accentués, fléchés, tildés, hellip;


Pour un seul caractère:
Code: Select all
$\hat{\alpha}\hspace{0.8cm}
\tilde{\alpha}\hspace{0.8cm}
\vec{\alpha}$
Affichage:
Caractère fléchés, vecteurs, tildes, en Latex

Pour plus d'un caractère:
Code: Select all
$\widehat{AB}\hspace{0.5cm}
\widetilde{AB}\hspace{0.5cm}
\overrightarrow{AB}$
Affichage:
Caractères fléchés, vecteurs, tildés, en Latex

Tableaux de variations


Il existe des packages tout fait pour afficher des tableaux de variations. On peut aussi les faire à la main, simplement en utilisant un tableau (environnement tabular, ou array):
Code: Select all
\[\begin{array}{|c|ccccr|}
\hline
x & -\infty & & 0 & & +\infty \\
\hline
f'(x) & 5 & + & 0 & - & -10 \\
\hline
& & & 10 & & \\
f(x) & &\nearrow & &\searrow & \\
& -\infty & & & & -10 \\
\hline
\end{array}\]
Affichage:
Tableau de variation en Latex
Remarque: La taille des flèches utilisées peut être adaptée en modifiant la taille de la fonte. Néanmoins ces modifications ne sont permises en mode mathématique. Il faut adapter cela, par exemple:
Code: Select all
$\nearrow
\mbox{\Large{$\nearrow$}}
\mbox{\LARGE{$\nearrow$}}$
Affichage:
Différentes tailles de flèches


Composition de symboles


On peut composer tous les symboles (mathématiques et autres), par exemple en en positionnant un au-dessus de l'autre, …
Code: Select all
$X \stackrel{\ def}{=} Y$
Affichage:
Exemple d'utilisation de stackrel
ou encore
Code: Select all
$X\underset{\square}{\circ}Y$
Affichage:
Composition de symboles avec underset
ou encore
Code: Select all
$X\overset{\square}{\circ}Y$
Affichage:
Composition de symboles avec overset
Composition plus élaborée: On peut enfin bien sûr construire ses propres commandes et opérateurs, en utilisant par exemple la commande raisebox
Code: Select all
\newcommand{\limloi}{%
  \begin{array}{c}
    \raisebox{-0.2cm}[0.cm][0.cm]{$\mathcal{L}$} \\
    \mbox{\Large{$\longrightarrow$}} \\
    \raisebox{0.2cm}[0.cm][0.cm]{$\scriptstyle{ n\to \infty}$}
  \end{array}
}

%Usage
$X_n \limloi X$
Affichage:
Composition de symbole: limite en loi

Les tableaux


La commande générale est :
Code: Select all
\begin{tabular}{positions}
  % Données dans le tableau
\end{tabular}

positions est une suite de caractères qui peuvent être:
  • l: pour une colonne alignée à gauche (left)
  • r: pour une colonne alignée à droite (right)
  • c: pour une colonne centrée (center)
  • p{taille}: pour une colonne dans laquelle on souhaite affiché des paragraphes de texte justifié; la largeur est indiquée de manière classique, par exemple p{3cm} ou p{10em}.
L'insertion de paragraphe de texte peut aussi se faire au cas par cas, en utilisant la commande \parbox, ou l'environnement minipage, ou encore en utilisant une boîte ou cadre quelconque dans une cellule du tableaux (voir paragraphe sur les boîtes).

Dans le tableau, les colonnes sont marquées par des esperluettes &; les lignes sont terminées par des fins de lignes \\.
Les traits horizontaux séparant les colonnes sont indiqués entre les positions correspondantes de la chaîne de caractère positions par le séparateur |.
Les traits horizontaux séparant deux lignes du tableau sont indiqués par \hline (ligne horizontale) à la fin de la ligne concernée.

Premiers exemples


Code: Select all
\begin{tabular}{|l|c|r|}\hline
 A gauche & Au milieu & A droite\\\hline
 A & B & C\\\hline
\end{tabular}
Affichage:
Un exemple simple de tableau en LaTex
Code: Select all
\begin{tabular}{|c|p{3cm}|}\hline
1 & Première ligne Deuxième ligne\\\hline
\end{tabular}
Affichage:
Exemple de tableau contenant un paragraphe
Code: Select all
\begin{tabular}{|l|c|}\hline
A gauche & \parbox{1cm}{Au milieu}\\\hline
A & B\\\hline
\end{tabular}
Affichage:
Autre exemple de tableau contenant un paragrapĥe, avec parbox

Tableau avec un grand nombre de colonnes


Un nombre de colonnes identiques peut-être déclaré en une seule fois en argument de tabular:
Code: Select all
\begin{tabular}{|*{12}{l|}}\hline
 1&2&3&4&5&6&7&8&9&10&11&12\\\hline
\end{tabular}
Affichage:
Définition d'un tableau avec beaucoup de colonnes

Fusionner des cellules


On peut fusionner des cellules dans un tableau à l'aide la colonne \multicolumn{nombre_colonnes}{position}{Texte}.
Le texte Texte sera placé sur les nombre_colonnes fusionnées. L'argument position indique la position du texte dans la cellule fusionnée résultante.

La commande \cline{i-j} permet de placer un trait horizontal allant de la colonne i à la colonne j.
Code: Select all
\begin{tabular}{|c|c|c|}\hline
\multicolumn{2}{|c|}{AB}& C\\\cline{1-2}
\multicolumn{1}{|c}{D}&\multicolumn{1}{c|}{E}&F\\\hline
G & H & I\\\hline
\end{tabular}
Affichage:
Tableau plus complexe, avec lignes et colonnes fusionnés

Dessin dans un tableau


Code: Select all
\begin{tabular}{|p{3cm}|p{1cm}}\hline
\begin{pspicture}(0,0)(3,0.6)
\psline(-0.2,0.6)(3.2,-0.1)
\put(0,0){caract 2}
\put(2,0.25){caract 1}
\end{pspicture}
& A \\\hline
B & \\
\end{tabular}
Affichage:
Dessin dans un tableau

Caractactère spécial comme séparateur dans un tableau


Par défaut dans un tableau les colonnes sont séparées par des traits verticaux. On peut en fait utiliser tout type de caractère à cette fin.
Code: Select all
\begin{tabular}{|l|c@{\ $\heartsuit\rightarrow$\ }c} \hline
col1 & col2 & col3 \\\hline
col1 & col2 & col3 \\\hline
col1 & col2 & col3 \\\hline
\end{tabular}
Affichage:
Tableau avec des caractères comme séparteurs de colonnes

Hauteur des lignes


La commande arraystretch définit la hauteur des lignes dans les tableaux. Il suffit donc de la modifier:
Code: Select all
\renewcommand{\arraystretch}{2.4}
\begin{tabular}{|c|c}\hline
  $x$ & $\dfrac12$ \\\hline
  $f(x)$ & $\infty$\\\hline
\end{tabular}
Affichage:
Tableau avec lignes plus hautes

Tabelaux colorés


On peut colorer les lignes ou colonnes d'un tableau en utilisant le package colortbl:
Code: Select all
%\usepackage{colortbl}

\begin{tabular}{|c|c|}\hline
  \rowcolor{lightgray}1 & gris \\\hline
  \rowcolor{gray!30} 2 & gris clair \\\hline\hline
  \rowcolor{blue} 3 & bleu \\\hline
  \rowcolor{blue!60} 4 & bleu clair \\\hline\hline
  \rowcolor[RGB]{255,20,120} 5 & ??? \\\hline
\end{tabular}
Affichage:
Lignes colorées dans un tableau avec rowcolor du package colortbl
et presque de même pour colorer des colonnes:
Code: Select all
%\usepackage{colortbl}

\begin{tabular}{|>{\columncolor[RGB]{255,0,186}}c|c|>{\columncolor{gray!40}\color{white}\bf}c|}
  \hline
  col 1 & col 2 & col 3\\\hline
  lign 2 & ??? & ???\\\hline
\end{tabular}
Affichage:
Colonnes colorées dans un tableau avec columncolor du package colortbl
ou encore, pour finir, un seule cellule:
Code: Select all
%\usepackage{colortbl}

\begin{tabular}{|c|c|c|}\hline
  \cellcolor{gray!40}1.1 & 1.2 & 1.3 \\\hline
  2.1 & \cellcolor{red!60}\textcolor{white}{\bf 2.2} & 2.3 \\\hline
  3.1 & 3.2 & \cellcolor{red}{\bf 3.3} \\\hline
\end{tabular}
Affichage:
Cellules colorées dans un tableau avec cellcolor du package colortbl



Dessiner avec Latex


De nombreux packages permettent de faire de nombreuses choses, en particulier le package pspicture qui se charge dans le préambule avec \usepckage{pst-plot}, \usepackage{pst-text}, \usepackage{pst-tree}, … ou, plus simplement, on peut charger tous les packages relatifs à l'environnement en une seule fois grâce à: \usepackage{pst-all}.
L'environnement permettant de dessiner débute alors par \begin{pspicture}(x1,y1)(x2,y2), où (x1,y1) désigne le coint haut gauche du cadre de dessin et (x2,y2) le coin en bas à droite, et fini par \end{pspicture}.
La version étoilée: \begin{pspicture}*(x1,y1)(x2,y2) limite le dessin à la boîte (x1,y1),(x2,y2) créée (ce qui est à l'extérieur de cette boîte n'est pas affiché).

L'échelle du graphique peut être définie en ajustant la longueur unité, par exemple
Code: Select all
\psset{unit=1.5cm}


Dessins et textes


Les commandes de PSTricks peuvent être utilisées en dehors d'un environnement graphique; ce sont alors des objets de « dimensions nulles » (largeur et hauteur nulles: le caractère suivant est écrit comme s'il n'y avait ni dessin, ni espace).
Par exemple, on peut définir une commande permettant de rayer un mot suivant:
Code: Select all
\newlength{\longueur}
  \newcommand{\rayer}[1]{%
  \settowidth{\longueur}{#1}%
  #1\psline(0,0.5ex)(-\longueur,0.5ex)%
}
\rayer{ Erreur }\ mise en évidence .
Affichage:
Barrer un mot avec PSTricks
Sans l'utilisation de PSTricks, il faudrait penser, avant de tracer le trait horizontal barrant le mot souhaité, à indiquer un retrait négatif de la taille du mot:
Code: Select all
\newlength{\longueur}
\newcommand{\barrer}[1]{%
  \settowidth{\longueur}{#1}%
  #1\hspace{-\longueur}\rule[0.5ex]{\longueur}{0.5pt}%
}
\barrer{ Deuxième erreur} à signaler
Affichage:
Nouvelle commande pour barrer un mot


Lignes et flèches


Un certain nombre de possibilités existent: flèches simples ou doubles, vers l'extérieur ou l'intérieur du trait, crochets (donc segments et intervalles) ouverts ou fermés.
Code: Select all
\psset{arrowsize=6pt,linewidth=1.2pt}
\psline(0,0)(1,0)\psline{-}(2,0)(3,0)

\psline{->}(0,0)(1,0)\psline{<-}(2,0)(3,0)\psline{<->}(4,0)(6,0)

\psline{-<}(0,0)(1,0)\psline{>-}(2,0)(3,0)\psline{>-<}(4,0)(6,0)

\psline{->>}(0,0)(1,0)\psline{<<-}(2,0)(3,0)\psline{<<->>}(4,0)(6,0)

\psline{>>-}(0,0)(1,0)\psline{-<<}(2,0)(3,0)\psline{>>-<<}(4,0)(6,0)

\psline{|-|}(0,0)(1,0)\psline{[-]}(2,0)(3,0)\psline{(-[}(4,0)(6,0)

\psline{o-|*}(0,0)(1,0)\psline{oo-*}(2,0)(3,0)\psline{**-(}(4,0)(6,0)

\bigskip
\psset{linewidth=8pt}
\psline{cc-}(0,0)(1,0)\psline{C-**}(2,0)(3,0)

\bigskip
\psline{c-}(0,0)(1,0)\psline{-*}(2,0)(3,0)
Affichage:
Toutes les flèches en LaTex


Dessins avec boucles et calculs


Utilisation d'une boucle whiledo dans un environnement graphique:
Code: Select all
%\usepackage{pstricks}
%\usepackage{ifthen}
%\usepackage{calc}

\newcounter{i} \setcounter{i}{1}
\newcounter{j} \setcounter{j}{0}
\newcounter{r} \setcounter{r}{0}
\psset{unit=.66mm}
\begin{pspicture}*(0,0)(80, 80)
\pspolygon(0, 0)(80, 0)(80, 80)(0, 80)
\psset{linewidth=.1pt}
\whiledo{\value{i}<25}{%
  \setcounter{j}{\value{i}*4}
  \setcounter{r}{\value{i}*3}
  \pscircle(\value{j},\value{j}){\value{r}}
  \stepcounter{i}
}
\end{pspicture}

Affichage:
Programmation dans un dessin, utilisation d'une boucle whiledo


Texte suivant une courbe


Pourquoi écrire toujours tout droit, en suivant des lignes horizontales et verticales ?
Avec Latex, on peut définir une courbe, par exemple avec \pscurve(x1,y1)(x2,y2)(x3,y3)... qui permet de définir une courbe d'interpolation (courbe de Bézier) passant par les points (x1,y1), (x2,y2), (x3,y3), ..., puis ensuite s'en servir comme support pour la ligne courante.
Code: Select all
\begin{pspicture}(-4, -3.2)(3, 0.2)
\psset{linecolor=white} %On n'affiche pas la courbe porteuse...
\pstextpath
{\pscurve(-4, -4)(-2, 1)(0, -1)(-2, -1)
(0, -3)(0.5, -1)(1.,-0.5)(1.2,-0.4)}
{\color{blue}
  On peut alors écrire tout
  et n'importe quoi suivant
  n'importe quelle courbe\ldots
  Il suffit de savoir définir
  la courbe\ldots}
\end{pspicture}
Affichage:
Texte suivant une courbe de Bézier


Coloriage de l'aire sous une courbe


On peut colorier l'aire sous une courbe définie par une fonction, interprétation géométrique de l'intégrale de la fonction, ainsi:
Code: Select all
\psset{unit=1cm}
\begin{pspicture}(-1,0)(5,3)
%Définition de la fonction:
\nwc{\f}[1]{
  #1 1.6 mul 180 mul 3.14 div sin
  #1 div #1 add 1 add 0.8 mul}
%Définition du domaine hachuré:
\pscustom{
  \psplot{-1.}{3}{\f{x}} \gsave
  \psline(3,0)(-1,0)
  %\fill[fillstyle=solid,fillcolor=lightgray]
  \fill[fillstyle=vlines]
  \grestore
}
%On retrace la courbe par dessus:
\psplot[linewidth=1pt]{-1.2}{3.2}{\f{x}}
\put(2.2,2.8){$\Cf$}

\psline[linewidth=1pt]{->}(0,-0.4)(0,3)
\psline[linewidth=1pt]{->}(-2,0)(3,0)

\psline[linewidth=0.5pt,linestyle=dashed]
(-1,-0.2)(!-1 \space \f{-1} 0.4 add)\put(-1,-0.5){$a$}
\psline[linewidth=0.5pt,linestyle=dashed]
(3,-0.2)(!3 \space \f{3} 0.4 add)\put(2.9,-0.5){$b$}
\end{pspicture}
Affichage:
Représentation de l'aire sous une courbe: intégrale d'une fonction
On peut fixer quatre paramètres pour le hachurage de régions, avec donc fillstyle=vlines, hlines ou crosshatch:
  • fillcolor=color: la couleur de fond (background)
  • hatchwidth=dim: la largeur des traits
  • hatchcolor=color: la couleur des traits
  • hatchangle=angle: l'angle d'inclinaison des hachures

Par exemple:
Code: Select all
\psset{unit=1cm,xunit=2cm,yunit=1.2cm,arrowsize=7pt}
\begin{pspicture}(0,-1)(5,5)
\psline{->}(-1.2,0)(3,0)
\psline{->}(0,-0.8)(0,4)
\newcommand{\f}[1]{#1 3 exp 0.5 mul -1 #1 2 exp mul add 2 add}
\pscustom{
  \psplot{-0.6}{2.2}{\f{x}} \gsave
  \psline(2.2,0)(-.6,0)
  \fill[fillstyle=vlines,hatchcolor=blue,hatchwidth=1.8pt,hatchsep=8pt]
  \grestore
}
\psplot{-1.}{2.5}{\f{x}}
\psplot[linewidth=2pt,linecolor=red]{-.6}{2.2}{\f{x}}
\psline[linewidth=2pt,linecolor=red](-.6,0)(2.2,0)
\psline[linewidth=2pt,linecolor=red,linestyle=dashed](-0.6,0)(!-0.6 \space \f{-0.6})
\psline[linewidth=2pt,linecolor=red,linestyle=dashed](2.2,0)(!2.2 \space \f{2.2})
\pspolygon[fillstyle=solid,fillcolor=lightgray](0,0)(1,0)(1,1)(0,1)
\end{pspicture}
Affichage:
Aire sous une courbe


Coloriage de la réunion d'ensembles


Pour la réunion de deux figures, c'est assez simple, on dessine ces deux figures, qu'on colorie avec le même motif fillstyle=vlines, ou fillstyle=hlines, ou fillstyle=solid ...
Code: Select all
\begin{pspicture}(-5,-2.5)(5,2.5)
\psellipse[fillstyle=vlines](-2,0)(3,2)
\psellipse[fillstyle=vlines](2,0)(3,3)
\end{pspicture}
Affichage:
Représentation graphique de la réunion de deux ensembles


Coloriage de l'intersection d'ensembles


Pour l'intersection, c'est à peine plus compliqué avec l'aide de psclip:
Code: Select all
\begin{pspicture}(-5,-2.5)(5,2.5)
\psellipse(2,0)(3,2)
\begin{psclip}{%
\psellipse(-2,0)(3,2)}
% Dans le clip, on colorie l'intersection:
\psellipse[fillstyle=solid,fillcolor=lightgray](2,0)(3,3)
\end{psclip}
\end{pspicture}
Affichage:
Représentation graphique de l'intersection de deux ensembles
Un exemple plus évolué (pour les amateurs de probabilités, et plus particulièrement de la formule des probabilités totales):
Code: Select all
% On définit 3 niveaux de gris (ou 3 couleurs...):
\definecolor{gray1}{gray}{0.85}
\definecolor{gray2}{gray}{0.67}
\definecolor{gray3}{gray}{0.55}

\psset{unit=1cm}
\begin{pspicture}(-3,-4)(3,4)
\psellipse[fillstyle=solid,fillcolor=gray2](0,0)(2,3)
%
\begin{psclip}{\psellipse(0,0)(2,3)}
\psellipse[fillstyle=solid,fillcolor=gray1](0,3)(3,2.3)
\psellipse[fillstyle=solid,fillcolor=gray3](0,-3)(3,2.3)
\end{psclip}
% On retrace par dessus l'ellipse principale pour les contours
\psellipse(0,0)(2,3)
% puis la patate pour D
\psellipse[fillstyle=vlines](0.5,0.2)(1,1.8)
% puis le texte...
\rput(-1.3,2.7){\large$\Omega$}
\rput(-1.45,1.4){$A_1$}
\rput(-1.65,0){$A_2$}
\rput(-1.45,-1.4){$A_3$}
%
\psline{<-}(1.3,1.3)(2.6,2.6)\rput(2.8,2.7){$D$}
%
\end{pspicture}
Affichage:
Représentation graphique en LaTex de la formule des probabilités totales


Courbes avec Latex


Même si l'intérêt global de Latex est loin de résider uniquement dans la rédaction de textes scientifiques contenant de belles formules mathématiques, cela en reste néanmoins un de ses atouts. Tracer des courbes en tout genre (courbe définie par son expression $f(x)$, courbe paramétrique, en coordonnées polaires, ...) est donc la moindre des choses.

Courbe représentative d'une fonction


Tracer la courbe représentative d'une fonction définie par son expression f(x)=... est donc des plus naturels.

Par exemple, soit la fonction $f$ définie par l'expression Expression algébrique de la fonction f.
Sa représentation graphique peut se dessiner de la façon suivante, en utilisant psplot (dans un environnement pspicture ou non):
Code: Select all
\psset{unit=1cm,arrowsize=7pt}
\begin{pspicture}(-5,-1.5)(5,2.5)
  \psline[linewidth=1.3pt]{->}(-4,0)(4,0)
  \psline[linewidth=1.3pt]{->}(0,-1)(0,2)
  \psplot[plotpoints=1000]%
    {-4}{4}{ x 4 exp x add 2.718 -1 x 2 exp mul 0.2 add exp mul}
  \rput(1.8,1.){$\mathcal{C}_f$}
\end{pspicture}
Affichage:
Courbe représentative de la fonction $f$
La définition de l'expression de la fonction dans psplot se fait en notation polonaise inversée, voir par exemple.
L'expression peut aussi être donnée en notation algébrique "naturel" en incluant l'option "algebraic": \psset{unit=1 cm, algebraic=true}.


Représentation des lois binomiale et normale


Les lois normales et binomiales sont fournies prêtes à l'emploi dans le package ps-func, à charger donc dans le préambule par \usepackage{pst-func}

Pour la loi binomiale:
Code: Select all
\psset{xunit=0.4cm,yunit=18cm,arrowsize=5pt}
\begin{pspicture}(-4,-0.03)(25,0.34)
  \rput(12,0.22){$\mathcal{B}(10;0,6)$}
  \psaxes[Dx=4,Dy=0.05,dy=0.05\psyunit]{->}(0,0)(-1,0)(15,0.33)
  \psBinomial[linewidth=1.2pt]{10}{0.6}
\end{pspicture}
Affichage:
Loi binomiale en LaTex
et pour la loi normale:
Code: Select all
\psset{xunit=0.35cm,yunit=20cm,arrowsize=5pt}
\begin{pspicture}(-7,-0.03)(25,0.15)
  \rput(16,0.07){$\mathcal{N}(6;2,19)$}
  \psaxes[Dx=4,Dy=0.05,dy=0.05\psyunit]{->}(0,0)(-1,0)(24,0.25)
  \psGauss[linecolor=red,linewidth=1.5pt,mue=6,sigma=2.19]{-2}{21}
\end{pspicture}
Affichage:
Loi normale en LaTex



Courbes planes paramétrées


Les courbes planes paramétrées se tracent, non pas via psplot, mais via parametricplot, par exemple, pour la courbe paramétrée définie par Système définissant une courbe paramétrée
(ici aussi la notation polonaise inversée est utilisée, par défaut, mais on pourrait là aussi tout aussi bien utiliser l'option algebraic=true dans psset)
Code: Select all
\psset{xunit=4cm,yunit=4cm}
\begin{pspicture}(-0.3,-0.1)(2,1.75)
  \psaxes{->}(0,0)(-.2,-.2)(1.2,1.9)
  \rput(0.05,-0.1){$0$}
  \parametricplot[plotpoints=200,linecolor=red,linewidth=1.5pt]{0}{1}{
     -6 t 3 exp mul 6 t 2 exp mul add
     -6 t 2 exp mul 6 t mul add
}

  % Point 0
  \psline[linewidth=1.2pt,arrowsize=5pt]{->}(0,0)(0,0.55)
  \psline[linewidth=1.2pt,arrowsize=5pt]{->}(0,0)(0.5,0.5)
  \psline[linestyle=dashed](0,0)(1.2,1.2)
  \psline[linestyle=dashed](1,0)(1,1)(0,1)
  % Point A
  \psline[linestyle=dashed](0.75,0)(0.75,1.5)(0,1.5)
  \rput(0.75,-0.1){$\frac{3}{4}$}\rput(-0.1,1.5){$\frac{3}{2}$}
  \psline[arrowsize=5pt]{<->}(0.35,1.5)(1.15,1.5)
  \rput(0.75,1.6){$A$}
  % Point B
  \psline[linestyle=dashed](0.8888,0)(0.8888,1.3333)(0,1.3333)
  \rput(0.8888,-0.1){$\frac{8}{9}$}\rput(-0.1,1.3333){$\frac{4}{3}$}
  \psline[arrowsize=5pt]{<->}(0.8888,1.)(0.8888,1.8333)
  \rput(1.,1.3333){$B$}
\end{pspicture}
Affichage:
Représentation graphique d'une courbe paramétrée


Programmation avancée


Fonction définie récursivement simple:
Code: Select all
\newcommand\sayto[1]{%
 \ifnum#1=1
  to%
 \else
  to\sayto{\numexpr#1-1}%
 \fi
}

\sayto{5}
Un exemple typique est celui d'une suite définie par récurrence par une relation du type: $u_{n+1}=f(u_n)$$f$ est une fonction quelconque (continue par exemple...). Pour placer sur l'axe des abscisses les valeurs successives de la suite, $u_0$, $u_1$, $u_2$, $u_3$ ... on trace la courbe représentative de la fonction $f$ et la droite d'équation $y=x$, on trace alors, récursivement, un graphique en "escargot": Fonction définie récursivement:
Code: Select all
\psset{unit=1.5cm}
\begin{pspicture}(-1,-1)(8,7)
 \psline{->}(-0.5,0)(7.5,0)
 \psline{->}(0,-0.5)(0,6.5)
 \multido{\i=0+1}{8}{%
  \psline(\i,-0.1)(\i,0.1)%
  %\rput(\i,-0.3){$\i$}
 }
 \multido{\i=0+1}{7}{%
  \psline(-0.1,\i)(0.1,\i)%
  \rput(-0.3,\i){$\i$}%
 }
 % Definition de la fonction f de u_{n+1}=f(u_n)
 \newcommand{\f}[1]{6 5 #1 1 add div sub}
 % Et son tracer:
 \psplot[linewidth=1.4pt]{0}{7}{\f{x}}
 % ainsi que le tracer de la droite y=x
 \psplot{-0.2}{6.5}{x}

 % Defintion de la fonction itérée:
 % par ex.: fn{3}{x}=f(f(f(x)))
 \newcommand\fn[2]{%
  \ifnum#1=1
  \f{#2}%
  \else
  \f{\fn{\numexpr#1-1}{#2}}%
  \fi
 }
 % Valeur initiale (u_0)
 \def\xinit{0}
 \def\nmax{4}

 % Initialisation pour u_0
 \psline[linestyle=dashed]
 (\xinit,0)
 (!\xinit\space\f{\xinit})
 (!\f{\xinit}\space\f{\xinit})
 \rput(\xinit,-0.3){$A_0$}
 % Boucle pour u_1, u_2, ..., u_nmax
 \multido{\i=1+1}{\nmax}{
  \psline[linestyle=dashed]
  (!\fn{\i}{\xinit} \space 0)
  (!\fn{\i}{\xinit} \space \fn{\i}{\xinit})
  (!\fn{\i}{\xinit} \space \fn{\numexpr\i+1}{\xinit})
  (!\fn{\numexpr\i+1}{\xinit} \space \fn{\numexpr\i+1}{\xinit})
  \rput(!\fn{\i}{\xinit}\space 0){$\tm$}
  \rput(!\fn{\i}{\xinit}\space -0.3){$A_\i$}
 }
\end{pspicture}
Affichage:
Représentation graphique des premiers termes d'une suite récurrente


Programmation et dessins avancés - Graphe d'une fonction et planche de Galton


Graphe d'une fonction:
Code: Select all
% Avec les packages dans le préambule:
%\usepackage{pst-all}
%\usepackage{pstricks-add}
%\usepackage{pst-func}
%\usepackage{ifthen}

\psset{unit=1cm,arrowsize=7pt}
\begin{pspicture}(0,0)(10,10)
 \multido{\i=1+1}{6}{
  \pscircle[fillstyle=gradient,GradientCircle=true,%
    gradbegin=white,gradend=black,%
    GradientPos={(1.9,\i)},gradmidpoint=1](2,\i){0.35}
  \rput(2,\i){\white\bf \i}
 }
 %
 \multido{\i=1+2}{4}{
    \pscircle[fillstyle=gradient,GradientCircle=true,%
    gradbegin=white,gradend=black,%
    GradientPos={(6.9,\i)},gradmidpoint=1](7,\i){0.35}
    \rput(7,\i){\white\bf \i}
  }
  % Puis le graphe de la fonction:
  \pscurve{->}(2.4,1)(5,2)(6.6,3)
  \pscurve{->}(2.4,2)(5,2)(6.6,1)
  \pscurve{->}(2.4,3)(5,2.5)(6.6,1.15)
  \pscurve{->}(2.4,4)(5,6)(6.6,7)
  \pscurve{->}(2.4,5)(5,3)(6.7,1.3)
  \pscurve{->}(2.4,5.8)(4,4)(6.6,3)
\end{pspicture}
Affichage:
Représentation graphique en LaTex du graphe d'une fonction discrète

Exemple de la planche de Galton:
Code: Select all
% Avec les packages dans le préambule:
%\usepackage{pst-all}
%\usepackage{pstricks-add}
%\usepackage{pst-func}
%\usepackage{ifthen}

\psset{unit=1cm}
\begin{pspicture}(-8,0)(8,10)
\multido{\il=-4+1}{8}{
  \rput(\il,1){
    \psline[linewidth=1.4pt](0,0)(0.15,0.25)
    \psellipse[fillstyle=solid,fillcolor=black](0.15,0.25)(0.12,0.08)
}}
\nwc\f[1]{#1 0.5 sub}
\multido{\il=-3+1}{7}{
  \rput(! \f{\il} \space 2){
    \psline[linewidth=1.4pt](0,0)(0.15,0.25)
    \psellipse[fillstyle=solid,fillcolor=black](0.15,0.25)(0.12,0.08)
}}
\multido{\il=-3+1}{6}{
  \rput(! \il \space 3){
    \psline[linewidth=1.4pt](0,0)(0.15,0.25)
    \psellipse[fillstyle=solid,fillcolor=black](0.15,0.25)(0.12,0.08)
}}
\multido{\il=-2+1}{5}{
  \rput(! \f{\il} \space 4){
    \psline[linewidth=1.4pt](0,0)(0.15,0.25)
    \psellipse[fillstyle=solid,fillcolor=black](0.15,0.25)(0.12,0.08)
}}
\multido{\il=-2+1}{4}{
  \rput(! \il \space 5){
    \psline[linewidth=1.4pt](0,0)(0.15,0.25)
    \psellipse[fillstyle=solid,fillcolor=black](0.15,0.25)(0.12,0.08)
}}
\multido{\il=-1+1}{3}{
  \rput(! \f{\il} \space 6){
    \psline[linewidth=1.4pt](0,0)(0.15,0.25)
    \psellipse[fillstyle=solid,fillcolor=black](0.15,0.25)(0.12,0.08)
}}
\multido{\il=-1+1}{2}{
\rput(! \il \space 7){
  \psline[linewidth=1.4pt](0,0)(0.15,0.25)
  \psellipse[fillstyle=solid,fillcolor=black](0.15,0.25)(0.12,0.08)
}}
\rput(-0.5,8){
  \psline[linewidth=1.4pt](0,0)(0.15,0.25)
  \psellipse[fillstyle=solid,fillcolor=black](0.15,0.25)(0.12,0.08)
}
\pscircle[fillstyle=gradient,GradientCircle=true,%
   gradbegin=white,gradend=black,%
   GradientPos={(-0.3,9.5)},gradmidpoint=1](-0.4,9.4){.25}
\psline[linewidth=1.2pt,arrowsize=6pt]{->}(-0.4,9.1)(-0.4,8.6)
\psline[linewidth=1.2pt,arrowsize=6pt]{->}(-0.7,8.1)(-1.1,7.5)
\psline[linewidth=1.2pt,arrowsize=6pt]{->}(-0.1,8.1)(0.3,7.5)
%
\pscircle[fillstyle=gradient,GradientCircle=true,%
gradbegin=white,gradend=black,%
GradientPos={(-1.3,4.8)},gradmidpoint=1](-1.4,4.7){.25}
\psline[linewidth=1.2pt,arrowsize=6pt]{->}(-1.7,4)(-2.1,3.4)
\psline[linewidth=1.2pt,arrowsize=6pt]{->}(-1.1,4)(-0.7,3.4)
%
% Et la planche de récup tout en bas:
\psline[linewidth=1.5pt](-5.,-0.5)(4.,-0.5)
\multido{\i=-5+1}{10}{
  \psline(! \i \space -0.5)(! \i \space 0.)
}
\pscircle[fillstyle=gradient,GradientCircle=true,%
   gradbegin=white,gradend=black,%
   GradientPos={(-.15,-0.15)},gradmidpoint=1](-.25,-0.25){.25}
\pscircle[fillstyle=gradient,GradientCircle=true,%
   gradbegin=white,gradend=black,%
   GradientPos={(-0.65,-0.15)},gradmidpoint=1](-0.75,-0.25){.25}
\pscircle[fillstyle=gradient,GradientCircle=true,%
   gradbegin=white,gradend=black,%
   GradientPos={(-0.4,0.3)},gradmidpoint=1](-0.5,0.2){.25}
\pscircle[fillstyle=gradient,GradientCircle=true,%
   gradbegin=white,gradend=black,%
   GradientPos={(-2.4,-0.15)},gradmidpoint=1](-2.5,-0.25){.25}
\pscircle[fillstyle=gradient,GradientCircle=true,%
   gradbegin=white,gradend=black,%
   GradientPos={(1.6,-0.15)},gradmidpoint=1](1.5,-0.25){.25}
\pscircle[fillstyle=gradient,GradientCircle=true,%
   gradbegin=white,gradend=black,%
   GradientPos={(2.65,-0.15)},gradmidpoint=1](2.5,-0.25){.25}
\end{pspicture}
Affichage:
Dessin en LaTex: planche de Galton


Python / Latex - Génération de la table de valeurs de la loi normale


Un exemple de programme en Python qui permet de générer le code source Latex de la table de valeur de la fonction de répartition de la loi normale centrée réduite:
Code: Select all
# Probabilites associees a la loi normale centree reduite:
# Pi(u)=P(X <= u)
from math import *

N=10000 # nbre de points dans l'integration

def f(x):
return 1/sqrt(2*pi)*exp(-x**2/2)

def gauss(u,decimales):
  if u==0:
     return 0.5
  if u>0:
    du=abs(u)/N
    S=0
    for k in range(N):
      # integration numerique: methode des trapezes
      S=S+du*(f(k*du)+f((k+1)*du))/2.0
  S=S+0.5
  S=float(int(S*10**decimales))/10**decimales # arrondi a 10e-4
  return S

# On genere le tableau en latex:
print '\\renewcommand{\\arraystretch}{1.3}'
print '\\begin{tabular}{|>{\columncolor{lightgray}}c|*{10}{c|}}\hline'
print '\\rowcolor{lightgray}'
print '$t$',
for i in range(10): print '& $0,0',i,'$',
print '\\\ \hline'

for i in range(30):
  print i/10.0,
  for j in range(10):
     print '&',gauss(i/10.0+j/100.0,4),
  print "\\\ \hline"

print '\end{tabular}'

print ''
# table pour les grandes valeurs de t
print '\\vspt\\noindent{\\bf Table pour les grandes valeurs de $t$}'
print ''

print '\\begin{tabular}{|c|*{10}{c|}}\hline'
print '$t$&$3.0$&$3.1$&$3.2$&$3.3$&$3.4$&$3.5$&$3.6$&$3.8$&$4.0$&$4.5$\\\ \hline'
print '$\Pi(t)$ & ', for i in range(7): print '$',gauss(3+i/10.0,5),'$ &',
print '$',gauss(3.8,5),'$ & $',gauss(4.0,5),'$ & $',gauss(4.5,5),'$ \\\ \hline'
print '\end{tabular}'
Affichage:
Après compilation avec Latex on obtient:
Extrait de la table de valeurs de la fonction de répartition de la loi normale centrée réduite générée en Python et interprété en LaTex


Divers - Autres …


  • A signaler de plus, la possibilité d'emporter (et d'apporter !) une distribution Latex complète sur une simple clé USB, cf. USBTeX.
  • Latex2html est un script en Perl permettant de générer du html à partir d'une source latex. Pour plus d'infos, voir le site officiel de latex2html.
    A noter aussi une solution magique pour résoudre le problème de génération des images de Latex2html sous Mandriva (et autres ?).


Doc téléchargeable


Ci-dessous une (très) ancienne version pdf téléchargeable de cette page:
Doc. Latex
Haut de la page Haut de la page