My Own Memory Hole
Blog♯LaTeX

tikz-pgf

tikz/pgf permet de réaliser des graphiques d'une très grande complexité comme vous pouvez le constater en vous rendant sur cette page. Je me propose de donner ici un aperçu de l'utilisation – très basique – que j'en ai faite : générer des modèles et grilles rythmiques pour un dossier de phonologie.

Une fois que vous avez téléchargé (ici) et installé ce package, il vous suffit, pour l'utiliser, de l'appeler dans le préambule de votre document :

\usepackage{tikz,pgf}

N'hésitez pas à vous plonger dans la documentation – plus que conséquente (plus de 500 pages !) – pour trouver votre bonheur et pour vérifier les informations livrées ici (ça fait un moment que je n'ai pas utilisé la bête).

Avant de se lancer, mieux vaut avoir une idée précise de ce que l'on veut faire : en effet, la création du graphique passe par la déclaration de point, de coordonnées, et peut s'avérer longue et fastidieuse.

Voici un exemple de grille rythmique (utilisation du package tipa) :

\newcommand{\sux}[1]{${\rm \stackrel{\textstyle x}{\raisebox{0ex}{#1}}}$}

\begin{tikzpicture}[black,scale=0.75]

 \draw (0,1.5) node[anchor=south] {x};
 \draw (1,1.5) node[anchor=south] {\sux{x}};
 \draw (2,1.5) node[anchor=south] {x};
 \draw (3,1.5) node[anchor=south] {\sux{x}};
 \draw (4,1.5) node[anchor=south] {x};
 \draw (6,1.5) node[anchor=south] {\sux{x}};
 \draw (7,1.5) node[anchor=south] {x};

 \foreach \x in {0,...,4} \draw (\x,1.5) [solid] -- (\x cm, 0.7cm);
\draw (5,0.7) -- (6,1.5);
 \foreach \x in {6,...,7} \draw (\x,1.5) [solid] -- (\x cm, 0.7cm);

 \draw (0,0) node[anchor=south] {\textipa{K}};
 \draw (1,0) node[anchor=south] {\textipa{@}};
 \draw (2,0) node[anchor=south] {\textipa{s}};
 \draw (3,0) node[anchor=south] {\textipa{@}};
 \draw (4,0) node[anchor=south] {\textipa{v}};
 \draw (5,0) node[anchor=south] {\textipa{w}};
 \draw (6,0) node[anchor=south] {\textipa{a}};
 \draw (7,0) node[anchor=south] {\textipa{K}};

\end{tikzpicture}

tikz

Tentons d'expliquer ce qui est fait dans ce code :

  • dans un premier temps (lignes 18 à 25) nous « dessinons » la « ligne » de texte (correspondant ici à une transcription phonétique) : draw (coordonnée x,coordonnée y) node[anchor=south}] {texte\_affiché} place un point aux coordonnées x,y et le texte correspondant à ce point (ici un symbole API) est placé au-dessus du point (au-dessous si on utilise [anchor=north])
  • ensuite (lignes 6 à 12) nous dessinons la « ligne » de « croix » : même chose que précédemment si ce n'est que le texte est ici constitué de croix (lettre x) (quelques précisions plus bas)
  • enfin nous traçons les traits nous permettant de relier les points de notre ligne de texte aux points de notre ligne de croix
    • le plus simple : à la ligne 15, \draw (5,0.7) -- (6,1.5); permet de tracer un trait entre le point d'abscisse 5 et d'ordonnée 0.7 au point d'abscisse 6 et d'ordonnée 1.5. On obtient donc un tracé en diagonale ;
    • pour tracer un trait vertical on aurait alors \draw (5,0.7) -- (5,1.5) ;
    • il est possible d'automatiser les tracés, d'où les lignes 14 et 16.
      Prenons la ligne 14 : \foreach \x in {0,...,4} \draw (\x,1.5) [solid] -- (\x cm, 0.7cm); : pour tout (\foreach) point d'abscisse (\x) entre 0 et 4 dessiner (\draw) de ce point au point d'abscisse identique et d'ordonnée 1.5 ((\x,1.5)) un trait plein ([solid]) ; cependant on précise que l'on part de l'ordonnée 0.7cm pour tout les points de départ ((\x cm, 0.7cm)) pour éviter que le trait ne recouvre le texte.

Demeurent deux questions : c'est quoi ce \sux{x} qui apparaît dans les lignes 7, 9 et 11 ? Et c'est quoi ce truc là, \newcommand ? En fait, dans la première ligne nous définissons la commande \sur que nous utilisons ensuite dans la définition du texte à « dessiner », pour faire en sorte que les les deux x soient placés verticalement et non pas horizontalement. Voici une petite démonstration :

\begin{tikzpicture}[black,scale=0.75]
 \draw (0,1.5) node[anchor=south] {o};
 \draw (1,1.5) node[anchor=south] {xx};
 \draw (2,1.5) node[anchor=south] {y};
 \draw (3,1.5) node[anchor=south] {xx};
 \draw (4,1.5) node[anchor=south] {arghh};

 \foreach \x in {0,...,4} \draw (\x,1.5) [solid] -- (\x cm, 0.7cm);

 \draw (0,0) node[anchor=south] {\textipa{K}};
 \draw (1,0) node[anchor=south] {\textipa{@}};
 \draw (2,0) node[anchor=south] {\textipa{s}};
 \draw (3,0) node[anchor=south] {\textipa{@}};
 \draw (4,0) node[anchor=south] {\textipa{v}};
\end{tikzpicture}

tikz_1

\begin{tikzpicture}[black,scale=1.25]
 \draw (0,1.5) node[anchor=south] {o};
 \draw (1,1.5) node[anchor=south] {xx};
 \draw (2,1.5) node[anchor=south] {y};
 \draw (3,1.5) node[anchor=south] {xx};
 \draw (4,1.5) node[anchor=south] {arghh};

 \foreach \x in {0,...,4} \draw (\x,1.5) [solid] -- (\x cm, 0.7cm);

 \draw (0,0) node[anchor=south] {\textipa{K}};
 \draw (1,0) node[anchor=south] {\textipa{@}};
 \draw (2,0) node[anchor=south] {\textipa{s}};
 \draw (3,0) node[anchor=south] {\textipa{@}};
 \draw (4,0) node[anchor=south] {\textipa{v}};
\end{tikzpicture}

tikz_2

\newcommand{\sux}[1]{${\rm \stackrel{\textstyle x}{\raisebox{0ex}{#1}}}$}
\newcommand{\suxx}[1]{${\rm \stackrel{\textstyle x}{\raisebox{0ex}{\sux{#1}}}}$}
\newcommand{\suxxx}[1]{${\rm \stackrel{\textstyle x}{\raisebox{0ex}{\suxx{#1}}}}$}
\newcommand{\suxxxx}[1]{${\rm \stackrel{\textstyle x}{\raisebox{0ex}{\suxxx{#1}}}}$}

\begin{tikzpicture}[black,scale=0.75]
 \draw (0,1.5) node[anchor=south] {\sux{x}};
 \draw (1,1.5) node[anchor=south] {\sux{xxx}};
 \draw (2,1.5) node[anchor=south] {\suxx{xx}};
 \draw (3,1.5) node[anchor=south] {\suxxx{x}};
 \draw (4,1.5) node[anchor=south] {\suxxxx{x}};

 \foreach \x in {0,...,4} \draw (\x,1.5) [solid] -- (\x cm, 0.7cm);

 \draw (0,0) node[anchor=south] {\textipa{K}};
 \draw (1,0) node[anchor=south] {\textipa{@}};
 \draw (2,0) node[anchor=south] {\textipa{s}};
 \draw (3,0) node[anchor=south] {\textipa{@}};
 \draw (4,0) node[anchor=south] {\textipa{v}};
\end{tikzpicture}

tikz_3

Dans le premier cas on constate que le texte attribué au point est dessiné horizontalement. Nous pouvons constater deux problèmes : problème d'alignement vertical lorsque les lettres utilisées ont des « jambes » et un problème de distance lorsque le texte est long. Ce second souci est résolu avec le second exemple où l'on joue sur l'échelle : lorsque l'on ouvre l'environnement tikzpicture on peut lui passer des options (entre crochets) et notamment scale.

Dans le dernier cas, nous avons défini quatre commandes : \sux, \suxx, \suxxx et \suxxxx et avons montré les possibilités que cela permettait.  

Vous trouverez le fichier avec ces exemples ici.

gb4e

Le package gb4e permet de présenter les exemples sous forme de listes ordonnées à la gestion fine, la possibilité d'indiquer un « jugement » et celle d'utiliser les commandes \label et \ref.

Pour la gestion des exemples sous LaTeX, consulter cette page du site LaTeX4Ling (ils présentent, outre gb4e, l'extension covington).

Nous allons voir ici l'utilisation basique de ce package ; pour plus détails, consulter la documentation présente dans l'archive.

Voici un exemple basique :

\begin{exe}
  \ex\label{adjv} He fucking told us that \ldots
  \ex\label{adja} I'm fucking tired.
\end{exe}

\begin{exe}
\ex
  \begin{xlist}
    \ex Il a foutrement maltraité cet enfant.
    \ex Il parle sacrément pour un si jeune enfant.
  \end{xlist}
\ex He fucking told us that he was happy.
\ex
  \begin{xlist}
    \ex Il est foutrement fatigué.
    \ex Il semble sacrément amoché.
  \end{xlist}
\ex He seems fucking tired.
\end{exe}

gb4e_1

Il est possible de sélectionner la numérotation des listes apparaissant dans l'environnement xlist, en rajoutant au nom de l'environnement le symbole que l'on souhaite parmi ceux-ci : a (alphabétique), A (Alphabétique), i (romain), I (Romain), n (numérique). De plus il est possible d'ajouter des « jugements » ainsi que des renvois grâce aux commandes \label et \ref. Voici un exemple :

Dans l'exemple \ref{adjv}... tandis qu'en \ref{adja}...
Eh c'est quoi ces exemples en \ref{wtf} (\ref{wtf1}
et \ref{wtf2}) ?

\begin{exe}
\ex\label{fradv} 
  \begin{xlista}
    \ex Il a foutrement maltraité cet enfant.
      \begin{xlistI}\label{wtf}
       \ex\label{wtf1}[??]{Blabla.... blabla}
    \ex\label{wtf2}[*]{Blobla bliblo}
      \end{xlistI}
    \ex Il parle sacrément pour un si jeune enfant.
  \end{xlista}
\ex[?]{He fucking told us that he was happy.}
\ex
  \begin{xlist}
  \ex Il est foutrement fatigué.
  \ex Il semble sacrément amoché.
\end{xlist}
\ex He seems fucking tired.
\end{exe}
\begin{exe}
  \ex\label{adjv} He fucking told us that \ldots
  \ex\label{adja} I'm fucking tired.
\end{exe}

gb4e_2

synttree

synttree, comme son nom le laisse présager, permet de créer, comme d'autres packages et outils (cf. LaTeX4Ling) des arbres syntaxiques. Pour le télécharger, rendez-vous ici.

Le package fourni l'instruction \synttree ; chaque élément de l'arbre vient s'imbriquer entre crochets. Mieux qu'un long discours, trois illustrations :

\synttree[A'
[A[fucking]]
[SN[.x my neighbour]]]

synttree_1

\synttree[SN
[Det[mes]]
[N''[putains]
[P''[Prep[de]][N[voisins]]]]]

synttree_2

\synttree[I''
[N'' [Everybody]]
[V''
[V'
[V [came]]
[P''
[P [with]
[Exp [fucking]
[N'' [.x their children]]
]]]]]]

synttree_3

Fichier d'exemple disponible ici.

avm

Ce package permet de réaliser des structures de traits, de la plus simple à la plus complexe.

Pour télécharger ce paquet et en avoir une démonstration plus poussée, rendez-vous sur cette page du site consacré à l'utilisation de LaTeX en Sciences du langage. Avant tout essai, penser bien à charger le package avec la commande

\usepackage{avm}

Notez que les exemples présentés ici nécessitent la présence du package tipa dont nous parlons ici.

En voici un exemple basique :

En voici un exemple un peu plus « imposant » :

Voici un ECM (exemple complet minimal, « concept » provenant de fr.comp.text.tex) de l'utilisation du package avm (nécessitant cependant le package tipa) téléchargeable ici ; les deux premières structures proviennent d'un dosier de phonologie que j'ai réalisé, la troisième vient de la documentation mentionnée précédemment :

\documentclass[a4paper,10pt]{article}
\usepackage[utf8x]{inputenc}
\usepackage{avm}
\usepackage{tipa}

\begin{document}

\begin{avm}\textipa{[kK@]} :
\[ \[ Seg : & \<\textipa{k}\> \cr
 Pos : & 1 \cr
 Pc : & i \]
& \[ Seg : & \<\textipa{K}\> \cr
 Pos : & 1 \cr
 Pc : & p \]
& \[ Seg : & \<\textipa{@}\> \cr
 Pos : & 2 \cr
 Pc : & s \] \]
\end{avm}

\vspace{2cm}

\begin{avm}
\[
\[ SEG : & \[ SLAR : & \[ MODE : & @ \@1 \cr
 PLACE : & h ; \textglotstop \cr
 VELUM : & \textsl{Velum} \cr
 LATERAL: & \textsl{Lateral} \cr
 \] \cr
 LAR : & \textsl{Lar} \cr
 TETE : & \@1 \] \cr
 Pos : & 1 \cr
 Pc : & i
 \] \cr
\[ SEG : & \[ SLAR : & \[ MODE : & @ \@1 ; R \cr
 PLACE : & \textsl{Place} \cr
 VELUM : & \textsl{Velum} \cr
 LATERAL: & \textsl{Lateral} \cr
 \] \cr
 LAR : & \textsl{Lar} \cr
 TETE : & \@1 \] \cr
 Pos : & 1 \cr
 Pc : & p \] \]
\end{avm}

\newpage

\newbox\matrixsynsem \newbox\headdtr
\newbox\compdtrone \newbox\compdtrtwo

{\scriptsize
\avmoptions{center}
\setbox\matrixsynsem=\hbox{\begin{avm}
\osort{synsem}{\[local & \[cat & \[ \] \\
 content & \[ \]\]\]}
\end{avm}}

\setbox\headdtr=\hbox{\begin{avm}
\osort{word}{\[ phon\;\<\rm likes\>\\
 synsem\;\[local\[ cat\;\[ head \; \@{5}\\
 arg-s\;\< \@{1},\@{2}\>\] \\
 content\;\@{6} \]\]\]} \end{avm}}

\setbox\compdtrone=\hbox{\begin{avm}
\sort{phrase}{\[ phon\;\<\rm fido\>\\
 synsem\;\@{1}\;\[local\[ cat\;\[ head\;noun\\
 arg-s\;\< \>\] \\
 content\;\@{3} \]\]\]} \end{avm}}

\setbox\compdtrtwo=\hbox{\begin{avm}
\sort{phrase}{\[ phon\;\<\rm bones\>\\
 synsem\;\@{2}\;\[local\[ cat\;\[ head\;noun\\
 arg-s\;\< \>\] \\
 content\;\@{4} \]\]\]} \end{avm}}

\avmoptions{active,sorted}
\begin{avm} \hspace{-1in}
[{phrase} phon\;\<\rm fido likes bones\> \\
 synsem\;[{synsem} local [{} cat & [{} head & @{5}\\
 arg-s & \< \; \>] \\
 content & @{6}[{psoa} reln\;like \\
 arg1\;@{3} \\
 arg2\;@{4} ]]]\\
 dtrs\;\sort{head-struc}{[{} head-dtr\;\box\headdtr \\
 comp-dtrs\;< \box\compdtrone , \\ \hspace{.5in}
 \box\compdtrtwo>]}]
\end{avm}}

\end{document}

tipa & vowel

Le package tipa vous permet d'insérer au sein d'un document les symboles de l'alphabet phonétique international (API). Je vous en propose une présentation générale, peu poussée.

Le package vowel permet de créer des triangles et trapèzes vocaliques.

tipa

Une fois installé le package (disponible ici), il vous suffit de l'appeler ainsi dans votre préambule :

\usepackage{tipa}

Puis pour pouvoir intégrer les symboles de l'API au sein de votre document, il vous suffit d'utiliser la commande \textipa{X} ou X est le caractère souhaité ou d'autres commandes comme \textschwa :

    
\textipa{a} 

\textipa{E}

\textturna 

\textschwa

tipa

Si la manipulation du package tipa est assez intuitive pour une utilisation basique, certains symboles de l'API sont plus délicats à obtenir ; heureusement la documentation est exhaustive et liste l'ensemble des symboles (à partir de la page 36).

vowel

L'environnement vowel est fourni par le package vowel proposé avec tipa. Il permet de créer des triangles et trapèzes vocaliques hautement « configurables ». Voici un exemple tiré de la documentation du package :

    
\begin{vowel}
\putcvowel[l]{i}{1}
\putcvowel[r]{y}{1}
\putcvowel[l]{e}{2}
\putcvowel[r]{\o}{2}
\putcvowel[l]{\textepsilon}{3}
\putcvowel[r]{\oe}{3}
\putcvowel[l]{a}{4}
\putcvowel[r]{\textscoelig}{4}
\putcvowel[l]{\textscripta}{5}
\putcvowel[r]{\textturnscripta}{5}
\putcvowel[l]{\textturnv}{6}
\putcvowel[r]{\textopeno}{6}
\putcvowel[l]{\textramshorns}{7}
\putcvowel[r]{o}{7}
\putcvowel[l]{\textturnm}{8}
\putcvowel[r]{u}{8}
\putcvowel[l]{\textbari}{9}
\putcvowel[r]{\textbaru}{9}
\putcvowel[l]{\textreve}{10}
\putcvowel[r]{\textbaro}{10}
\putcvowel{\textschwa}{11}
\putcvowel[l]{\textrevepsilon}{12}
\putcvowel[r]{\textcloserevepsilon}{12}
\putcvowel{\textsci\ \textscy}{13}
\putcvowel{\textupsilon}{14}
\putcvowel{\textturna}{15}
\putcvowel{\ae}{16}
\end{vowel}
    
vowel

Vous trouverez ici un ECM (nécessitant cependant les packages longtable et array) présentant un corpus de transcription de mots en alphabet phonétique international ; les exemples d'utilisation de vowel viennent de la documentation du package.

Bloc texte avec bordure

Un environnement permettant de créer un bloc de texte dont on peut faire varier la largeur avec une barre verticale à gauche à l'épaisseur modififable bien évidemment.

Code proposé par François Pétiard et Jean-Côme Charpentier sur fr.comp.text.tex.

À noter que cet environnement nécessite le package framed (ainsi que, pour l'exemple seulement, lipsum pour le faux texte).

Voici un ECM :

\documentclass{article}
% \usepackage[T1]{fontenc}
% \usepackage[latin1]{inputenc}
% \usepackage[a4paper]{geometry}
% \usepackage{lmodern}
\usepackage{framed}
\usepackage{lipsum}
% \usepackage[frenchb]{babel}

\newenvironment{barregauche}{%
% ajout pour une marge droite augmentée
\par
\addtolength{\hsize}{-1cm}%
% fin de l'ajout
\renewcommand\FrameCommand{%
\hspace*{1cm}%
\vrule width 1pt
\hspace{10pt}%
}%
\MakeFramed{%
\addtolength{\hsize}{-\width}%
\FrameRestore
}
}%
{\endMakeFramed}

\begin{document}
\lipsum[1]
\begin{barregauche}
\lipsum[1-4]
\end{barregauche}

\lipsum[1]
\end{document}