\documentclass[10pt,a4paper]{article}
%%% taille 10 points et format de papier A4
%%% classe article

%%% Codage en unicode
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} 

\usepackage{multicol}%%%         écriture en multicolonnes
\usepackage[normalem]{ulem}%%%   pour texte barré \sout{}
\usepackage[french]{babel}%%%    écriture en français
\DecimalMathComma%%%             évite l'espace après la virgule en mode math
\usepackage{multido}%%%          pour faire des boucles
\usepackage{pst-all,pst-eucl,pst-func}%%% PsTricks etc.
\usepackage{graphicx}%%%         pour graphiques et couleurs	
\usepackage{amsmath,amsfonts,amssymb}%%% outils AMS
\usepackage{mathrsfs}%%%         police script \mathscr{}
\usepackage{tabularx}%%%         tableaux
\usepackage{fancybox}%%%         divers boîtes
\usepackage{lscape}%%%           mode paysage
\usepackage[np]{numprint}%%%     pour formater les nombres de plus de 3 chiffres
\usepackage{colortbl}%%%         pour griser des cases dans un tableau
\usepackage{makeidx}%%%          pour créer un index
\makeindex%%%                    indispensable après l'appel du package makeidx
\usepackage{lettrine}%%%         pour créer des lettrines
\usepackage{eurosym}%%%          sigle euro

%\usepackage{bez123}%%%     courbes de Bézier

\usepackage{vmargin}%%%          réglage des marges
\setmarginsrb{3cm}{2cm}{3cm}{2cm}{1cm}{1cm}{1cm}{1cm}
% 1 est la marge gauche
% 2 est la marge en haut
% 3 est la marge droite
% 4 est la marge en bas
% 5 fixe la hauteur de l'entête
% 6 fixe la distance entre l'entête et le texte
% 7 fixe la hauteur du pied de page
% 8 fixe la distance entre le texte et le pied de page

\setlength{\parindent}{0pt}%%% règle l'indentation en début de paragraphe 

%%%  Commandes perso FH

%%% Pour intégrale, somme et produit, etc.
\newcommand{\ds}{\displaystyle}%%% raccourci pour \displaystyle

%%% ensembles de nombres
%%% On réservera le style "double barre" à l'écriture au tableau
\newcommand{\R}{\textbf{R}}
\newcommand{\N}{\textbf{N}}
\newcommand{\Z}{\textbf{Z}}
\newcommand{\C}{\textbf{C}}
\newcommand{\Q}{\textbf{Q}}
\newcommand{\K}{\textbf{K}}

%%% différents repères
\newcommand{\Oij}{(\text{O}\,;\,\vec{\imath}\,,\,\vec{\jmath})}
\newcommand{\rep}{(\text{O},\text{I},\text{J})}
\newcommand{\Ouv}{(\text{O}\,;\,\vec{u}\,,\,\vec{v})}
%\newcommand{\Oijk}{(\text{O}\,;\,\vec{\imath}\,,\,\vec{\jmath}\,,\,\vec{k})}

%%%  Courbe représentative
\newcommand{\Cr}[1]{\mathscr{C}_{#1}}

%%% crochets gauche et droit
\newcommand{\cg}{\texttt{]}}
\newcommand{\cd}{\texttt{[}}

%%% crochet d'entiers
\newcommand{\cde}{\texttt{[}\!\!\texttt{[}}
\newcommand{\cge}{\texttt{]}\!\!\texttt{]}}

%%% inférieur ou égal, supérieur ou égal
\newcommand{\pg}{\geqslant}
\newcommand{\pp}{\leqslant}

\usepackage{fancyhdr}%%%       En-têtes et pieds de pages
\pagestyle{fancy}
\renewcommand\headrulewidth{1pt}%%% filet haut de page
\renewcommand\footrulewidth{0pt}%%% filet bas de page
\renewcommand{\headwidth}{\textwidth}
%%% head pour haut de page
%%% L C et R pour Left Center et Right
\fancyhead[L]{\url{http://latexetmath.canalblog.com}}
\fancyhead[R]{\today} %%% \today = date du jour
\fancyhead[C]{}
%%% foot pour pied de page
\fancyfoot[C]{\begin{small}-- \thepage\  --\end{small}}  
\fancyfoot[R]{}%%%     {\jobname}%%% nom du fichier tex
\fancyfoot[L]{\href{mailto:francois.hache@free.fr}{FH}}

%%% Pour les énumérations
%%% premier niveau 
\renewcommand{\theenumi}{\textbf{\arabic{enumi}}}
\renewcommand{\labelenumi}{\textbf{\theenumi.}}
%%% deuxième niveau
\renewcommand{\theenumii}{\textbf{\alph{enumii}}}
\renewcommand{\labelenumii}{\textbf{\theenumii.}}
%%% troisième niveau
\renewcommand{\theenumiii}{\textbf{\arabic{enumiii}}}
\renewcommand{\labelenumiii}{\textbf{\theenumiii)}}
%%% permet d'avoir a. au lieu de (a) dans une énumération de niveau 2
%%% voir : http://cahiers.gutenberg.eu.org/cg-bin/article/CG_1994___17_32_0.pdf

\newenvironment{changemargin}[2]
{\begin{list}{}{%
\setlength{\topsep}{0pt}%
\setlength{\leftmargin}{0pt}%
\setlength{\rightmargin}{0pt}%
\setlength{\listparindent}{\parindent}%
\setlength{\itemindent}{\parindent}%
\setlength{\parsep}{0pt plus 1pt}%
\addtolength{\leftmargin}{#1}%
\addtolength{\rightmargin}{#2}%
}\item }{\end{list}}
%%%% pour changer les marges gauche et droite sur un paragraphe
%%%% \begin{changemargin}{marge gauche}{marge droite}
%%%% ...
%%%% \end{changemargin}

\usepackage{hyperref}%%% pour les références

%%% paramètres des pdf
\hypersetup{
pdfauthor = {F. Hache},
pdftitle = {calibrage de texte},
pdfstartview = FitH,
pdfcreator = {LaTeX vers PDF}
allbordercolors = white,
colorlinks=true,
linkcolor=red,
urlcolor=red,
unicode=true}

%%% Autres commandes qui doivent être définies après hyperref
\newcommand{\e}{\,\text{e}}%%%               le e de l'exponentielle
\renewcommand{\d}{\,\text d}%%%              le d de l'intégration
\renewcommand{\i}{\,\text{i}\,}%%%           le i des complexes
\renewcommand{\v}[1]{\,\overrightarrow{\,\text{#1}\,}}%%% vecteur

%%% définitions de nouvelles couleurs
\newrgbcolor{rb}{0.804 0 0}
\newrgbcolor{vb}{0 0.545 0}

\begin{document}

\part*{\centering Alignement horizontal}

Qu'est-ce qui est le plus joli: 
${}\sqrt{a}\sqrt{b} = \sqrt{ab}$ ou 
$\sqrt{\mathstrut a}\sqrt{\mathstrut b} = \sqrt{\mathstrut ab}$? 
$\left ( \mathrm O\,;\,\overrightarrow{\imath},\overrightarrow{\jmath},\overrightarrow{k} \right )$ ou 
$\left ( \mathrm O\,;\,\overrightarrow{\imath \mathstrut},\overrightarrow{\jmath\mathstrut},\overrightarrow{k \mathstrut} \right )$?

Évidemment quand on écrit des mathématiques, ce qui compte en premier, c'est la justesse de ce que l'on écrit; mais l'intérêt de \LaTeX{} c'est aussi d'écrire de belle façon les formules. C'est d'ailleurs pour ça que \LaTeX{} a été conçu. 

\section{\textbackslash{}baselineskip}

La distance verticale entre deux lignes est donnée par la variable \verb!\baselineskip!. Cette variable a une valeur qui dépend de la police dans laquelle on écrit et de sa taille.

Je n'ai pas trouvé comment afficher la valeur de cette variable!

On peut modifier cette variable au moyen du coefficient multiplicateur \verb!\baselinestretch! en redéfinissant ce coefficient qui est à 1 par défaut:
\verb!\renewcommand{\baselinestretch}{2}! double l'interligne.

Cette commande doit être immédiatement suivie de \verb!\selectfont! si elle est située dans le corps du texte, c'est-à-dire après \verb!\begin{document}!; c'est inutile si elle est située dans le préambule.

\section{\textbackslash{}rule}

Pour bien comprendre ce qui se passe, il faut détailler un peu l'instruction \verb!\rule!.

Cette instruction crée une boîte rectangulaire dont on doit donner la largeur et la hauteur; il y a une option pour décaler la boite par rapport à la ligne de texte: \verb!\rule[position]{largeur}{hauteur}!.

\smallskip

Voyons trois exemples d'utilisation de \verb!\rule!:

\begin{tabularx}{\linewidth}{XXX}
\hrulefill\rule{0.5cm}{1cm}\hrulefill
&
\hrulefill\rule[0.2cm]{0.5cm}{1cm}\hrulefill
&
\hrulefill\rule[-0.2cm]{0.5cm}{1cm}\hrulefill\\
\hfill\verb!\rule{0.5cm}{1cm}!\hfill{}\,
&
\verb!\rule[0.2cm]{0.5cm}{1cm}!
&
\verb!\rule[-0.2cm]{0.5cm}{1cm}!
\end{tabularx}

\bigskip

Le premier rectangle est positionné sur la ligne, le deuxième est décalé de $0,2$~cm au-dessus de la ligne et le troisième de $0,2$~cm en-dessous.

\smallskip

On peut tracer une ligne, par exemple d'épaisseur $0,2$ point, avec l'instruction \verb!\rule!, même si ce n'est pas sa fonction première:

\rule{\linewidth}{0.2pt}

Il suffit de taper \verb!\rule{\linewidth}{0.2pt}! (\verb!\linewidth! désigne la largeur de la ligne courante).

\smallskip

J'utilise souvent cette instruction en prenant une largeur nulle pour le rectangle; cela forme ainsi une \og béquille \fg{} qui permet d'agrandir certaines interlignes pour écrire des fractions, par exemple:
$\dfrac{13\rule{0pt}{10pt}}{7}$ (regardez l'espacement qu'il y a au-dessus du 13). 

\smallskip

Enfin, je faisais ça avant d'avoir compris ce qu'étaient les instructions \verb!\strut! et \verb!\mathstrut!!

\section{\textbackslash{}strut}

L'instruction \verb!\strut! est une forme particulière de \verb!\rule!; d'après le Wikibook 
\href{https://en.wikibooks.org/wiki/File:LaTeX.pdf}{Latex.pdf}, c'est exactement \verb!\rule[-0.3\baselineskip]{0pt}{\baselineskip}!.

L'instruction \verb!\strut! correspond donc à un rectangle de largeur nulle, positionné à $0,3$ espacement de ligne en-dessous de la ligne courante, et d'une hauteur totale d'un espacement de ligne. 
Comme \verb!\strut! n'est qu'une \verb!\rule! particulière, on peut l'utiliser aussi bien en mode texte qu'en mode mathématique.

On va utiliser le mode mathématique pour bien voir l'effet de \verb!\strut!; voici ce que cela donne en coinçant une lettre entre un soulignement (\verb!\underline!) et un surlignement (\verb!\overline!):

\[\underline{\overline{a}}\underline{\overline{a \strut}}\underline{\overline{a \rule[-0.3\baselineskip]{0pt}{\baselineskip}}}\quad
\underline{\overline{b}}\underline{\overline{b \strut}}\underline{\overline{b \rule[-0.3\baselineskip]{0pt}{\baselineskip}}}\]


Ce résultat est obtenu en écrivant successivement:
\begin{list}{\textbullet}{}
\item \verb!$\underline{\overline{a}}$!
\item \verb!$\underline{\overline{a \strut}}$!
\item \verb!$\underline{\overline{a \rule[-0.3\baselineskip]{0pt}{\baselineskip}}}$!
\end{list}
puis en recommençant avec la lettre $b$.

On voit bien ainsi que \verb!\strut! n'est qu'un raccourci pour\\
 \verb!\rule[-0.3\baselineskip]{0pt}{\baselineskip}!.

\section{\textbackslash{}mathstrut}

Malgré l'abondante documentation que l'on peut trouver sur la toile, je n'ai rien trouvé comme explication convaincante sur \verb!\mathstrut! sinon quelque chose du style: \og c'est comme \verb!\strut! mais pour le mode mathématique \fg{}. Pour moi, c'est un peu léger comme explication, d'autant que l'on peut utiliser \verb!\strut! en mode mathématique!

On regarde d'abord la différence entre \verb!\strut! et \verb!\mathstrut!:

\[\underline{\overline{a \strut}}\underline{\overline{a \mathstrut}}\]

obtenu par \verb!$\underline{\overline{a \strut}}\underline{\overline{a \mathstrut}}$!.

On peut donc penser que \verb!\mathstrut! est un \verb!\rule! particulier dont il faut déterminer les paramètres.

Après quelques essais, j'ai trouvé que
\verb!\rule[-0.2\baselineskip]{0pt}{0.82\baselineskip}!
avait à peu près le même effet que \verb!\mathstrut!.

En reprenant l'exemple du dessus en remplaçant \verb!\strut! par \verb!\mathstrut!, et en ajustant les valeurs dans \verb!\rule!, cela donne:

\[\underline{\overline{a}}\underline{\overline{a \mathstrut}}\underline{\overline{a \rule[-0.2\baselineskip]{0pt}{0.82\baselineskip}}}\quad
\underline{\overline{b}}\underline{\overline{b \mathstrut}}\underline{\overline{b \rule[-0.2\baselineskip]{0pt}{0.82\baselineskip}}}\]


%%% https://commons.wikimedia.org/wiki/File:LaTeX-fr.pdf?uselang=fr

\section{Applications}

Revenons à ce qui était écrit en début de chronique en définissant certaines commandes.

\newcommand{\vect}[1]{\overrightarrow{\,#1\,\mathstrut}}
\newcommand{\barre}[1]{\overline{#1 \mathstrut}}
\newcommand{\Oijk}{\left (\mathrm O\,;\, \overrightarrow{\imath\mathstrut} , \overrightarrow{\jmath\mathstrut},\overrightarrow{k\mathstrut}\right )}
\newcommand{\rac}[1]{\sqrt{#1\mathstrut}}
\newcommand{\vectt}[1]{\overrightarrow{\,\mathrm{#1}\,\mathstrut}}

\begin{list}{\textbullet}{}
\item \textbf{Racine carrée}

\begin{list}{$\circ$}{}
\item Nouvelle commande \verb!\rac!: 
\verb!\newcommand{\rac}[1]{\sqrt{#1\mathstrut}}!
\item Utilisation: quels que soient $a$ et $b$ positifs, $\rac{a\times b} = \rac{a} \times \rac{b}$.
\item Obtenu par: \verb!$\rac{a\times b} = \rac{a} \times \rac{b}$!
\end{list}

\item \textbf{Conjugué}

\begin{list}{$\circ$}{}
\item Nouvelle commande \verb!\barre!:
\verb!\newcommand{\barre}[1]{\overline{#1\mathstrut}}! (merci Denis~\textsc{Vergès}).
\item Utilisation: $\barre{a\times b} = \barre{a} \times \barre{b}$.
\item Obtenu par: \verb!$\barre{a\times b} = \barre{a} \times \barre{b}$!
\end{list}

\newpage

\item \textbf{Repère}

\begin{list}{$\circ$}{}
\item Nouvelle commande \verb!\Oijk!:\\
\verb!\newcommand{\Oijk}{\left(\mathrm O\,;\, !\\
\verb!         \overrightarrow{\imath\mathstrut} ,!\\ 
\verb!         \overrightarrow{\jmath\mathstrut} ,!\\
\verb!         \overrightarrow{k\mathstrut}\right)}!
\item Utilisation: soit le repère $\Oijk$.
\item Obtenu par: \verb!$\Oijk$!
\end{list}


\item \textbf{Vecteur}

\begin{list}{$\circ$}{}
\item Nouvelle commande \verb!\vect!:\\
\verb!\newcommand{\vect}[1]{\overrightarrow{\,#1\,\mathstrut}}!
\item Utilisation: soient les vecteurs $\vect{u}$ et $\vect{v}$.
\item Obtenu par: \verb!$\vect{u}$! et \verb!$\vect{v}$!
\end{list}

\item \textbf{Vecteur défini par deux points}

L'écriture mathématique veut que l'on écrive les noms des points en grandes capitales et en romain, alors que le mode mathématique met automatiquement les lettres en grandes capitales en italique. C'est la fonction \verb!\mathrm! qui convertit d'italique en romain. On peut donc écrire le vecteur $\vect{\mathrm{AB}}$ par \verb!$\vect{\mathrm{AB}}$!. On peut aussi définir une nouvelle commande qui fait le travail!

\begin{list}{$\circ$}{}
\item Nouvelle commande \verb!\vectt! (avec deux fois la lettre t):\\
\verb!\newcommand{\vectt}[1]{\overrightarrow{\,\mathrm{#1}\,\mathstrut}}!
\item Utilisation: soient les vecteurs $\vectt{AB}$ et $\vectt{MN}$.
\item Obtenu par: \verb!$\vectt{AB}$! et \verb!$\vectt{MN}$!
\end{list}

On peut noter des espaces fines ajoutées avant la première lettre du vecteur et après la seconde dans la définition de la commande, ce qui a pour effet d'allonger un peu la flèche.

\end{list}

Ainsi grâce au \verb!\mathstrut! présent dans les définitions de \verb!\vect! et \verb!\vectt!, quand on écrit \[\vect{u} = \vectt{AB}\], obtenu par \verb!\[\vect{u} = \vectt{AB}\]!, les flèches sont parfaitement alignées!

\end{document}