texlive[71170] Master/texmf-dist: frenchmath (4may24)

commits+karl at tug.org commits+karl at tug.org
Sat May 4 21:46:50 CEST 2024


Revision: 71170
          https://tug.org/svn/texlive?view=revision&revision=71170
Author:   karl
Date:     2024-05-04 21:46:50 +0200 (Sat, 04 May 2024)
Log Message:
-----------
frenchmath (4may24)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/frenchmath/frenchmath.pdf
    trunk/Master/texmf-dist/source/latex/frenchmath/frenchmath.dtx
    trunk/Master/texmf-dist/tex/latex/frenchmath/frenchmath.sty

Modified: trunk/Master/texmf-dist/doc/latex/frenchmath/frenchmath.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/frenchmath/frenchmath.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/frenchmath/frenchmath.dtx	2024-05-04 19:46:42 UTC (rev 71169)
+++ trunk/Master/texmf-dist/source/latex/frenchmath/frenchmath.dtx	2024-05-04 19:46:50 UTC (rev 71170)
@@ -20,7 +20,7 @@
 %<*package> 
 \NeedsTeXFormat{LaTeX2e}[2005/12/01]
 \ProvidesPackage{frenchmath}
-    [2024/02/25 v2.10 .dtx Typesetting mathematics according to French rules]
+    [2024/05/04 v3.0 .dtx Typesetting mathematics according to French rules]
 %</package>
 %<*driver>
 \documentclass{ltxdoc}
@@ -28,26 +28,21 @@
 \usepackage[T1]{fontenc}
 \usepackage[french]{babel}
 \usepackage{lmodern}
-\usepackage[lgrmath]{frenchmath}
-\usepackage[Euler]{upgreek}
-\usepackage{textalpha}
+\usepackage[lgrmath,savegreeks,otherfonts]{frenchmath}
 \usepackage{metalogo} % pour les logos XeLaTeX et LuaLaTeX
 \usepackage{sectsty}
 \usepackage{xcolor}
+%\usepackage{textalpha}
+\usepackage{tabls}
 
 \definecolor{darkbrown}{rgb}{0.5,0.1,0.1}
 \allsectionsfont{\color{darkbrown}}
-% pour les lettres de upgreek avec l'option Symbol :
-\DeclareSymbolFont{ugrfm}{U}{psy}{m}{n}
-\DeclareMathSymbol{\upalphasym}{\mathord}{ugrfm}{`a}
-\DeclareMathSymbol{\upbetasym}{\mathord}{ugrfm}{`b}
-\DeclareMathSymbol{\uppisym}{\mathord}{ugrfm}{`p}
-% symbole \emptyset de computer modern au cas où veut changer la police de ce doc :
-\DeclareSymbolFont{cmsymbols}{OMS}{cmsy}{m}{n} 
-\DeclareMathSymbol{\cmemptyset}{\mathord}{cmsymbols}{'73} % code octal dans cmsy
+
+% symbole \emptyset de computer modern au cas où on change la police de ce doc :
+\def\CMemptyset{\mathord{\text{\usefont{OMS}{cmsy}{m}{n}\symbol{'73}}}}
 % pour avoir le mu de micro :
 \DeclareTextSymbol{\textmicro}{TS1}{181}
-\DeclareTextSymbolDefault{\textmicro}{TS1}
+%\DeclareTextSymbolDefault{\textmicro}{TS1}
 
 \DisableCrossrefs
 %\CodelineIndex
@@ -62,6 +57,7 @@
     pdfauthor={Antoine Missier}
 }
 \begin{document}
+%\MakeShortVerb" % incompatible si placé avant
 \DocInput{frenchmath.dtx}
 %\PrintChanges
 %\PrintIndex
@@ -69,7 +65,7 @@
 %</driver>
 % \fi
 %
-% \CheckSum{594}
+% \CheckSum{320}
 %
 % \CharacterTable
 %  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -118,7 +114,7 @@
 %    - ajout des macros pour les bases (i,j) et (i,j,k).}
 %
 % \changes{v1.6}{2022/10/16}{
-%    - Remplacement de icomma par ncccomma, grâce à une proposition de J. F. Burnol,
+%    - Remplacement de icomma par ncccomma, grâce à un "patch" de J. F. Burnol,
 %    - amélioration du code redéfinissant les majuscules mathématiques,
 %    - suppression de l'option capsup (capsit à false suffit),
 %    - remplacement de tgh par th pour la tangente hyperbolique.}
@@ -182,17 +178,28 @@
 %    - compatibilité des options de lettres grecques avec unicode-math (XeLaTeX uniquement)
 %        -> nouvelles macros SaveGreekItalics et upgreekUndefined,
 %    - commentaires dans la doc pour la compatibilité avec unicode-math.}
-
+%
 %  \changes{v2.10}{22/02/2024}{
 %    - Changements dans la doc concernant la gestion des lettres grecques et unicode-math.}
 %
+% \changes{v3.0}{04/03/2024}{
+%    - Redéfinition de cmod qui correspond au pod de amsmath,
+%    - Modification du chargement conditionnel de dotlessj,
+%    - Copie du code de legslant, geqslant, varnothing sans importer amssymb,
+%    - Utilisation de AtEndPreamble pour pouvoir charger frenchmath avant unicode-math,
+%    - Ajout d'une table des matières.}
+% \changes{v3.0}{12/04/2024}{
+%    - Développement et intégration de l'extension mathgreeks
+%    - Mise à jour de la documentation}
+%
 % \GetFileInfo{frenchmath.sty}
 %
 % \title{L'extension \textsf{frenchmath}\thanks{Ce document
-%     correspond à \textsf{frenchmath}~\fileversion, dernière modification le 25/02/2024.}}
+%     correspond à \textsf{frenchmath}~\fileversion, dernière modification le 04/05/2024.}}
 % \author{Antoine Missier \\ \texttt{antoine.missier at ac-toulouse.fr}}
-% \date{25 février 2024}
+% \date{4 mai 2024}
 % \maketitle
+% \tableofcontents
 %
 % \section{Introduction}
 % Cette extension, inspirée à l'origine de \textsf{mafr} de Christian Obrecht~\cite{MAFR},
@@ -206,19 +213,20 @@
 % \footnote{Contrairement à \textsf{mafr} nous avons choisi de ne pas
 % conserver le même nom de commande pour substituer 
 % des symboles français aux symboles anglais.}.
-% Depuis la version 2.0, \textsf{frenchmath} propose en outre deux options permettant
+% Depuis la version 2.0, \textsf{frenchmath} propose en outre des options permettant
 % de composer les minuscules grecques du mode mathématique en forme droite.
 %
 % \medskip
 % D'autres solutions existent pour composer les majuscules mathématiques en romain,
 % par exemple avec \XeLaTeX\ ou \LuaLaTeX\ et l'extension \textsf{unicode-math}~\cite{UNIC}.
-% Celle-ci peut être utilisée avec \textsf{frenchmath} à condition d'être chargée \emph{avant}.
 % Pour pdf\LaTeX\, nous avons les extensions \textsf{fourier} de Michel Bovani~\cite{FOUR} 
-% (avec la famille des fontes Adobe Utopia)
-% ou encore \textsf{mathdesign} de Paul Pichaureau~\cite{DESIGN} 
-% (avec les polices Adobe Utopia, URW Garamond ou Bitstream Charter). 
+% (avec la famille des fontes Adobe Utopia),
+% \textsf{mathdesign} de Paul Pichaureau~\cite{DESIGN} 
+% (avec les polices Adobe Utopia, URW Garamond ou Bitstream Charter)
+% ou encore \textsf{kpfonts} de Christophe Caignaert~\cite{KPF}.
 % Mais \textsf{frenchmath} fournit une solution générique 
-% s'adaptant à n'importe quelle police de caractères.
+% s'adaptant à n'importe quelle police de caractères
+% (et compatible avec \textsf{unicode-math}).
 %
 % \medskip
 % Certaines préconisations, telles que composer en lettre droite
@@ -250,10 +258,11 @@
 % (cf. \cite{RTIN} p.107, voir aussi~\cite{IGEN}).
 % En utilisant \XeLaTeX\ ou \LuaLaTeX, 
 % avec l'option \texttt{math-style=french} de l'extension \textsf{unicode-math},
-% cette convention est assez commode à mettre en œuvre,
-% y compris avec les polices TrueType ou OpenType ;
+% cette convention est commode à mettre en œuvre,
 % par contre, avec \LaTeX\ ou pdf\LaTeX, elle est peu respectée
-% et les extensions précitées ne fonctionnent qu'avec des polices particulières.
+% et les extensions comme \textsf{mathdesign} (avec \texttt{uppercase=upright}),
+% \textsf{fourier} (avec \texttt{upright}) ou \textsf{kpfonts} (avec \texttt{uprightRoman})
+% ne fonctionnent qu'avec des polices particulières.
 % Par défaut \textsf{frenchmath} compose automatiquement les majuscules
 % mathématiques latines en romain,
 % quelle que soit la police utilisée.
@@ -302,28 +311,30 @@
 % (sans espace), sinon c'est un caractère de ponctuation.
 % \end{itemize}
 %
-% Cette deuxième approche parait meilleure, néanmoins \textsf{ncccomma}
+% Cette deuxième approche est plus souple, néanmoins \textsf{ncccomma}
 % ne fonctionne pas avec \textsf{babel-french} utilisé conjointement avec
-% l'extension \textsf{numprint} et son option \texttt{autolanguage}
+% l'option \texttt{autolanguage} 
 % \footnote{L'option \texttt{autolanguage} de \textsf{numprint} utilisée 
 % conjointement avec l'option \texttt{french} de \textsf{babel} garantit un espacement
 % correct entre les groupes de trois chiffres dans les grands nombres,
 % qui doit être une espace insécable et non dilatable~\cite{RTIN},
-% légèrement plus grande que l'espace que l'on obtient sans cette option.}.
+% légèrement plus grande que l'espace que l'on obtient sans cette option.}
+% de l'extension \textsf{numprint}.
 % En outre \textsf{ncccomma} ne fonctionne pas non plus
 % avec l'extension \textsf{unicode-math} (et bugue à l'appel |\setmathfont|).
 % Dans son article \emph{Intelligent commas}~\cite{BECC},
 % Claudio Beccari propose une autre solution,
 % voisine de \textsf{ncccomma}, mais qui produit le même type d'incompatibilités.
-% Le code a donc été revu et simplifié afin de régler proprement ces incompatibilités.
-% Comme bien des pays utilisent la virgule comme
+% Le code a donc été revu afin de régler ces incompatibilités.
+% Comme de nombreux pays utilisent la virgule comme
 % séparateur décimal, il fait l'objet d'une extension séparée,
 % \mbox{\textsf{decimalcomma}}~\cite{DECC}, qui est chargée par \textsf{frenchmath}
 % (depuis la version 2.7).
-% Mais, si on utilise \textsf{unicode-math}, il est alors impératif de charger 
-% \textsf{frenchmath} \emph{après}.
+% Bien que \textsf{decimalcomma} ne fonctionne avec \textsf{unicode-math}
+% que s'il est chargé après 
 % \footnote{L'extension \textsf{icomma} présente la même limitation et doit être chargée
-% après \textsf{unicode-math}.}.
+% après \textsf{unicode-math}.},
+% \textsf{frenchmath} s'est affranchi de cette contrainte (depuis la version 2.11).
 %
 % \medskip
 % Lorsque l'on utilise l'extension \textsf{pstricks-add} de \textsf{PSTricks}
@@ -340,7 +351,7 @@
 % avec \textsf{frenchmath} ;
 % le comportement de \og ;\fg devient identique à celui de \og:\fg.
 % 
-% \medskip
+% \bigskip
 % \DescribeMacro{crochets}
 % Alors que les Anglais utilisent généralement les parenthèses 
 % pour les intervalles ouverts $(0, +\infty)$, l'usage en français est d'utiliser
@@ -349,7 +360,7 @@
 % Nous avons redéfini les crochets dans l'extension \textsf{ibrackets}~\cite{BRACKETS}
 % qui est chargée par \textsf{frenchmath},
 % \DescribeMacro{[noibrackets]}
-% sauf si l'on active l'option \texttt{noibrackets}
+% sauf si on la désactive avec l'option \texttt{noibrackets}
 % \footnote{D'autres solutions existent,
 % par exemple avec l'extension \textsf{interval}
 % ou encore avec la macro \texttt{\string\DeclarePairedDelimiter}
@@ -374,8 +385,8 @@
 % et le signe}: par exemple |$x \in ] -\infty, 0]$| produit 
 % $x \in ] -\infty, 0]$ au lieu de $x \in ]-\infty, 0]$.
 % Mais au contraire lorsque l'on veut faire de l'algèbre sur les intervalles,
-% \emph{il faut laisser une espace entre le second crochet et l'opération} + ou -,
-% par exemple, |$[a,b] + [c,d]$| produit $[a,b] + [c,d]$
+% \emph{il faut laisser une espace entre le second crochet et l'opération} + ou --,
+% par exemple, |$[a,b] +[c,d]$| donne $[a,b] +[c,d]$
 % mais |$[a,b]+ [c,d]$| produit $[a,b]+ [c,d]$.
 %
 % En cas de comportement problématique, par exemple si
@@ -405,16 +416,24 @@
 % \DescribeMacro{\infeg} \DescribeMacro{\supeg}
 % Les relations $\infeg$ et $\supeg$ s'obtiennent avec les commandes |\infeg| et |\supeg|
 % et diffèrent des versions anglaises de |\leq| ($\leq$) et |\geq| ($\geq$).
-% Ce sont des alias de |\leqslant| et |\geqslant| de l'extension \textsf{amssymb},
-% chargée par \textsf{frenchmath}.
+% Ce sont des alias de |\leqslant| et |\geqslant| de l'extension \textsf{amssymb}
+% (non chargée par \textsf{frenchmath}).
 %
 % \medskip
 % \DescribeMacro{\vide}
 % Le symbole de l'ensemble vide $\vide$ 
-% s'obtient avec |\vide| (alias de la commande |\varnothing| de l'extension \textsf{amssymb}) ;
+% s'obtient avec |\vide| (alias de la commande |\varnothing| 
+% de l'extension \textsf{amssymb}) ;
 % il diffère de celui obtenu avec |\emptyset|,
-% particulièrement laid dans la fonte classique Latin Modern : $\cmemptyset$.
+% particulièrement laid dans la fonte classique Latin Modern : $\CMemptyset$.
 %
+% \DescribeMacro{\AMSvarnothing}
+% Avec \textsf{unicode-math} et la fonte mathématique Latin Modern Math
+% (appelée avec |\setmathfont|), |\varnothing| produit le même glyphe
+% laid que |\emptyset|. Pour corriger cela, on dispose de la commande
+% |\AMSvarnothing|, qui doit être appelée dans le préambule
+% et permet d'obtenir le même glyphe que celui de \textsf{amssymb}.
+%
 % \medskip
 % \DescribeMacro{\paral}
 % La commande |\paral| fournit la \emph{relation} 
@@ -431,10 +450,10 @@
 %
 % \medskip
 % \DescribeMacro{\cmod}
-% Le modulo se compose normalement entre parenthèses, avec |\pmod|,
-% mais on rencontre aussi, en français, le modulo entre crochets,
-% ce que permet la commande |\cmod| en respectant le bon espacement
-% propre au modulo : $ 53 \equiv 5 \cmod{12}$.
+% Le modulo se compose normalement entre parenthèses, avec |\pod| ou |\pmod|,
+% mais, en français, on le rencontre aussi entre crochets,
+% ce que permet la commande |\cmod|, en respectant le bon espacement
+% propre au modulo : $53 \equiv 5 \cmod{12}$.
 %
 % \subsection{Identifiants de \og fonctions\fg classiques}
 %
@@ -492,8 +511,9 @@
 % Les repères classiques du plan ou de l'espace seront composés 
 % avec des hauteurs de flèches homogénéisées :
 % |\Oij| compose \Oij, |\Oijk| compose \Oijk et |\Ouv| compose \Ouv
-% (utilisé dans le plan complexe). \DescribeMacro{\Ouv}
-% On peut écrire ces commandes en mode texte, sans les délimiteurs du mode mathématique.
+% (utilisé dans le plan complexe). 
+% \DescribeMacro{\Ouv}
+% Ces commandes peuvent être utilisées sans expliciter les délimiteurs du mode mathématique.
 %
 % \DescribeMacro{\Oij*} \DescribeMacro{\Oijk*} \DescribeMacro{\Ouv*}
 % Les versions étoilées utilisent le point-virgule et non la virgule
@@ -503,9 +523,10 @@
 % \medskip
 % \DescribeMacro{\ij} \DescribeMacro{\ijk}
 % Enfin les macros |\ij|
-% \footnote{Notons que la macro \texttt{\string\ij} existait déjà 
-% (ligature entre i et j pour le hollandais) et a été redéfinie.}
-% et |\ijk| composent les bases du plan et de l'espace, \ij
+% \footnote{Notons que la macro \texttt{\string\ij} existe déjà 
+% (ligature entre i et j pour le hollandais) ; elle a été redéfinie pour le mode
+% mathématique uniquement, qui doit donc ici être explicite : \texttt{\$\string\ij \$}.}
+% et |\ijk| composent les bases du plan et de l'espace, $\ij$
 % et \ijk, en homogénéisant la hauteur des flèches.
 %
 % Signalons que, pour l'extension \textsf{mathptmx} (basée sur la police de texte Times),
@@ -514,8 +535,9 @@
 % ce qui permet aux macros ci-dessus de fonctionner normalement.
 %
 % \subsection{Lettres grecques}
-% La norme concernant l'usage des lettres grecques en italique ou en forme droite
-% pour les mathématiques françaises ne semble pas aussi claire que pour les lettres romaines
+% Dans les mathématiques françaises, la norme concernant l'usage 
+% des lettres grecques minuscules en italique ou en forme droite
+% ne semble pas aussi claire que pour les lettres romaines
 % et il y a parfois divergence sur ce point. 
 % Beaucoup recommandent l'usage des lettres grecques
 % minuscules en forme droite (\cite{FOUR}~\cite{DESIGN}~\cite{PMISO}), mais certains
@@ -538,29 +560,17 @@
 % la documentation de \textsf{isomath} de Günter Milde~\cite{ISOM} 
 % expose différentes méthodes pour obtenir les lettres grecques
 % en forme droite.
-% Par exemple les extensions \textsf{mathdesign}~\cite{DESIGN},
-% \textsf{fourier}~\cite{FOUR}
+% Par exemple les extensions \textsf{fourier}~\cite{FOUR}
+% \mbox{\textsf{mathdesign}}~\cite{DESIGN}, 
 % ou \textsf{kpfonts}~\cite{KPF} disposent d'options permettant
 % l'écriture automatique des lettres grecques minuscules en forme droite 
-% (ou des majuscules en italique).
+% (et aussi des majuscules en italique) dans la police donnée.
 % Citons également \textsf{newpxmath}, \textsf{newtxmath} 
-% \footnote{L'extension \textsf{newtxmath} doit être chargée
-% après \textsf{frenchmath} qui utilise \textsf{amssymb} car la compilation
-% produit sinon un message d'erreur ;
-% ou sinon on peut ajouter \texttt{\string\let\string\Bbbk\string\relax}
-% avant de charger \textsf{frenchmath}.}
-% et \textsf{libertinust1math} 
-% de Michael Sharpe,
+% et \textsf{libertinust1math} de Michael Sharpe ou
 % \textsf{pxgreeks}, \textsf{txgreeks} 
-% \footnote{Si on utilise \textsf{amsmath} (ou \textsf{mismath}),
-% \textsf{pxgreeks} ou \textsf{txgreeks} doit être chargée 
-% \emph{après} \textsf{amsmath} (ou \textsf{mismath}),
-% pour éviter une erreur de compilation due à la redéfinition des commandes 
-% \texttt{\string\iint}, \texttt{\string\iiint}, \texttt{\string\iiiint}, 
-% \texttt{\string\idotsint}.}
 % et \textsf{libgreek} de Jean-François Burnol,
-% qui donnent de beaux résultats pour une utilisation avec 
-% respectivement les polices Palatino, Times et Libertinus.
+% qui fournissent les formes droites avec
+% les polices Palatino, Times et Libertine respectivement.
 %
 % Jean-François Burnol a également développé l'extension \textsf{lgrmath}~\cite{LGR}
 % qui permet d'utiliser, en mode mathématique, les différentes fontes de lettres
@@ -571,171 +581,206 @@
 % \medskip
 % Enfin, comme pour les majuscules, l'extension \textsf{unicode-math}
 % réalise cette tâche automatiquement avec l'option \texttt{math-style=french},
-% mais nécessite une compilation avec \XeLaTeX\ ou \LuaLaTeX. 
+% mais nécessite une compilation \XeLaTeX\ ou \LuaLaTeX. 
 %
 % \medskip
-% L'extension \textsf{frenchmath} fournit les options décrites ci-dessous
-% qui permettent d'obtenir les lettres grecques en forme droite.
-% Ces options peuvent être utilisées y compris avec \textsf{unicode-math},
-% mais \textsf{frenchmath} doit toujours être chargé 
-% \emph{après} \textsf{unicode-math}.
+% Avant la version 3.0, \textsf{frenchmath} disposait de deux options pour composer
+% les lettres grecques en forme droite : \texttt{lgrmath} et \texttt{upgreek}
+% \footnote{En fait il y avait une troisième option, \texttt{Upgreek}, mais celle-ci
+% est désormais obsolète.}.
+% Inspiré par le travail de Jean-François Burnol, nous avons développé, et intégré
+% à \textsf{frenchmath}, l'extension \textsf{mathgreeks}~\cite{MGREEK} 
+% qui permet d'utiliser de nombreuses fontes de lettres grecques
+% sans modifier les autres caractères et symboles.
+% Il suffit d'appeler \textsf{frenchmath} avec une des options de fonte de 
+% \textsf{mathgreeks}, de la forme \texttt{clé=valeur}. 
+% Par exemple, les lettres grecques droites de la police Utopia,
+% telles que fournies par l'extension \textsf{mathdesign}, s'obtiennent avec
+% \begin{center}
+% |\usepackage[mathdesign=Utopia]{frenchmath}|.
+% \end{center}
+% L'extension \textsf{mathdesign} elle-même ne sera pas chargée.
+% Lorsqu'une valeur n'est pas précisée, il y a toujours une valeur par défaut.
+% Par exemple pour \texttt{mathdesign}, nous avons choisi \texttt{Charter}.
+% Pour \texttt{upgreek}, la fonte par défaut est \texttt{Symbol}.
+% Pour \texttt{lgrmath}, nous avons choisi \texttt{fcm}
+% \footnote{Il faut que l'extension \textsf{cm-lgc} (développée par Alexej Kryukov)
+% soit installée sur votre distribution,
+% sans quoi la fonte de substitution LGR/lmr/m/n sera utilisée.
+% Les formes italiques du thêta $\ittheta$ ou du rho $\itrho$ de \texttt{fcm}
+% ne sont pas vraiment ceux d'usage en mathématiques, mais les formes droites
+% sont bien adaptées.
+% \texttt{Alegreya-LF} est une autre fonte assez élégante pour \texttt{lgrmath}, 
+% {\mathgreeksfont{enc=LGR,fam=Alegreya-LF,shape=n}\
+% mais produit un \texttt{\string \phi} $\phi$} moins courant et sans la variante
+% $\phi$.
+% }
+% qui se marie particulièrement bien avec la police usuelle Latin Modern.
 %
+% Les commandes |\alpha|, |\beta|, \ldots |\pi|, etc.
+% produisent alors les lettres en forme droite $\alpha$, $\beta$, \ldots, $\pi$, etc.
+% tandis que |\italpha|, |\itbeta|, \ldots, |\itpi|, etc. produisent les formes italiques
+% $\italpha$, $\itbeta$, \ldots, $\itpi$, etc.
+% Si ces dernières déplaisent, on peut activer l'option \texttt{savegreeks}
+% (option booléenne passée à \textsf{mathgreeks}) pour conserver les lettres
+% d'origine avec |\backalpha|, |\backbeta|, \ldots, |\backpi|, etc. : 
+% $\backalpha$, $\backbeta$, \ldots, $\backpi$, etc.
+%
 % \medskip
-% \DescribeEnv{[lgrmath]}
-% En activant l'option \texttt{lgrmath}, \textsf{frenchmath}  
-% charge l'extension du même nom avec son option \texttt{style=french} 
-% et la fonte \texttt{fcm} (de l'extension \textsf{cm-lgc})
-% \footnote{Évidemment il faut que \textsf{cm-lgc} soit installée
-% sur votre distribution sans quoi la fonte de substitution LGR/cmr/m/n sera utilisée.}.
-% Celle-ci se marie particulièrement bien avec la police usuelle Latin Modern.
-% Les commandes |\alpha|, |\beta|, etc.
-% produisent alors les lettres en forme droite 
-% $\alphaup$, $\betaup$, \ldots, $\piup$, etc.,
-% tandis que |\alphait|, |\betait|, etc. produisent des formes italiques
-% $\alphait$, $\betait$, \ldots, $\piit$, etc.
-% Ces dernières sont peu à notre goût, mais on conserve les lettres
-% d'origine avec |\italpha|, |\itbeta| : $\italpha$, $\itbeta$, \ldots, $\itpi$, etc.
+% Nous présentons ci-après quelques unes des nombreuses options possibles.
+% On se référera à la documentation de \textsf{mathgreeks}~\cite{MGREEK}
+% pour d'autres exemples ou pour les formes italiques correspondantes.
+% La seconde ligne de chaque exemple contient, outre les majuscules,
+% des variantes obtenues avec |\varpepsilon|, |\vartheta|, etc.
+% (sans effet avec la clé \texttt{lgrmath}, excepté pour |\varsigma|).
+% Les clés sans valeur sont en fait des booléens dont la valeur par défaut est \texttt{true}.
 %
-% \DescribeMacro{\SaveGreekItalics}
-% On peut aussi choisir d'autres fontes en chargeant l'extension
-% \textsf{lgrmath} indépendamment de \textsf{frenchmath} 
-% (voir par exemple les options \texttt{font=Alegreya-LF} ou \texttt{font=Cochineal-LF}
-% de \textsf{lgrmath}).
-% Dans ce cas, il ne faut pas activer l'option \texttt{lgrmath} de \textsf{frenchmath}
-% et, si l'on veut conserver les lettres italiques d'origine,
-% il faut précéder le chargement
-% de \textsf{lgrmath} de la commande |\SaveGreekItalics| ;
-% avec \textsf{unicode-math}, il faut en outre placer cette commande
-% dans un |\AtBeginDocument| avec |\usepackage[style=french,font=...]{lgrmath}|
-% et \emph{après} le chargement de \textsf{unicode-math}.
-%
 % \medskip
-% \DescribeEnv{[upgreek]}
-% Avec la même philosophie, \textsf{frenchmath} fournit aussi l'option \texttt{upgreek}
-% basée sur l'extension \textsf{upgreek} de Walter Schmidt~\cite{UPGREEK} qui donne
-% accès à d'autres fontes de lettres grecques minuscules en forme droite avec 
-% |\upalpha|, |\upbeta|, etc. 
-% L'extension \textsf{upgreek} sera chargée avec son option \texttt{Symbol}
-% \footnote{L'option	\texttt{Symbol} de \textsf{upgreek} se marie bien 
-% avec une police comme Times par exemple.}
-% utilisant la police Adobe Symbol et qui produit des lettres grecques assez grasses : 
-% $\upalphasym$, $\upbetasym$, \ldots, $\uppisym$, etc.
+% \DeleteShortVerb{\|}
+% \newcommand\eg{\texttt{=}}
+% \noindent\begin{tabular}{|l|c|}
+% \hline
+% Option \texttt{clé=valeur} & Résultat \\
+% \hline
+% \textbf{lgrmath\eg Cochineal-LF} &
+% \mathgreeksfont{enc=LGR, fam=Cochineal-LF, shape=n}
+% \greektable \\
+% \hline
+% \textbf{lgrmath\eg fcm} &
+% \mathgreeksfont{enc=LGR, fam=fcm, shape=n}
+% \greektable \\
+% \hline
+% \textbf{upgreek\eg Euler} &
+% \mathgreeksfont{enc=U, fam=eur, shape=n} 
+% \greektable \\
+% \hline
+% \textbf{upgreek\eg Symbol} &
+% \mathgreeksfont{enc=U, fam=psy, shape=n}
+% \greektable \\
+% \hline
+% \textbf{mathdesign\eg Charter} &
+% \mathgreeksfont{enc=OML, fam=mdbch, shape=n} 
+% \greektable \\
+% \hline
+% \textbf{fourier} &
+% \mathgreeksfont{enc=FML, fam=futm} 
+% \greektable \\
+% \hline
+% \textbf{pxfonts} &
+% \mathgreeksfont{enc=U, fam=pxmia} 
+% \greektable \\
+% \hline
+% \textbf{txfonts} &
+% \mathgreeksfont{enc=U, fam=txmia} 
+% \greektable \\
+% \hline
+% \textbf{libertinus} &
+% \mathgreeksfont{enc=LS1, fam=libertinust1math, shape=n} 
+% \greektable \\
+% \hline
+% \end{tabular}
+% \MakeShortVerb{|}
+
+% \bigskip
+% Une option spéciale, \texttt{libsans} (booléen), permet d'obtenir une fonte
+% sans empattement pour \texttt{libertinus}.
+% Une autre option, non présentée dans le tableau, est \textbf{kpfonts}, 
+% avec deux valeurs possibles. Enfin
+% deux autres options sont disponibles, mais pour une compilation avec
+% \LuaLaTeX\ (ou \XeLaTeX):
+% \begin{description}
+% \item[fontspec\eg \ldots] De nombreuses valeurs sont possibles, par exemple
+% \texttt{FreeSerif}, 
+% \texttt{LiberationSerif}, 
+% \texttt{GFS Artemisia},
+% \texttt{GFS Didot} (valeur par défaut)\ldots
+% mais aussi des polices non libres comme \texttt{Cambria}, \texttt{Arial},
+% \texttt{Palatino Linotype}, \texttt{Times New Roman}\ldots\
+% si elles sont installées sur votre système ;
+% nécessite de charger l'extension \textsf{fontspec}
+% \footnote{L'extension \textsf{fontspec} est chargée automatiquement par 
+% \textsf{unicode-math} ou \textsf{mathspec} (cette dernière étant spécifique à
+% \XeLaTeX), mais l'option \texttt{fontspec} permet une variété de polices 
+% TrueType ou OpenType bien plus grande que l'option \texttt{unicode-math}.}.
 %
-% Si l'on veut utiliser l'extension \textsf{upgreek}
-% avec l'une des deux autres options disponibles, \texttt{Euler}
-% (qui produit $\upalpha, \upbeta, \ldots, \uppi$, etc.)
-% ou \texttt{Symbolsmallscale},
-% il faut charger l'extension \textsf{upgreek} avec l'option souhaitée 
-% indépendamment de \mbox{\textsf{frenchmath}}.
-% Par contre, pour que les commandes |\alpha|, |\beta|\ldots correspondent 
-% aux formes droites (comme alias de |\upalpha|, |\upbeta|\ldots),
-% il faut ici conserver l'option \texttt{upgreek} de \textsf{frenchmath}.
-% Comme pour \textsf{lgrmath}, si l'on veut que les formes italiques d'origine
-% restent toujours disponibles avec les commandes 
-% |\italpha|, |\itbeta|, etc.,
-% il faut précéder le chargement de l'extension \textsf{upgreek} de la commande 
-% |\SaveGreekItalics| ;
-% \DescribeMacro{\upgreekUndefined}
-% et si l'on utilise \textsf{unicode-math}, il faut en outre ajouter la commande
-% |\upgreekUndefined| avant le |\usepackage[...]{upgreek}| et les trois
-% dans un |\AtBeginDocument| placé \emph{entre} le chargement de \textsf{unicode-math}
-% et celui de \textsf{frenchmath}
-% \footnote{Tout cela est bien contraignant, mais c'est lié au fonctionnement capricieux
-% de \textsf{unicode-math} qui génère de nombreuses incompatibilités. Ceci dit,
-% on n'a en principe besoin de nos options de lettres grecques droites que si l'on n'est
-% pas satisfait de celles fournies par \textsf{unicode-math}.}.
+% \item[unicode-math\eg \ldots] 
+% Donne un beau résultat avec \texttt{Latin Modern Math} (valeur par défaut)
+% ou \texttt{STIX Two Math} ; nécessite le module \textsf{unicode-math}.
+% 
+% \end{description}
 %
 % \medskip
-% \DescribeEnv{[Upgreek]}
-% Avec \LaTeX, les lettres grecques majuscules sont automatiquement composées
-% en forme droite et l'option \texttt{upgreek} ne concerne que les minuscules.
-% Cependant l'extension \textsf{upgreek}
-% propose aussi |\Upgamma|, \ldots, |Upomega| : $\Upgamma, \ldots, \Upomega$.
-% Afin de conserver majuscules et minuscules dans le même style, 
-% \textsf{frenchmath} fournit l'option \texttt{Upgreek} qui redéfinit les majuscules 
-% |\Gamma|, \ldots, |\Omega| pour correspondre à ces variantes.
-% Par contre l'on n'a alors plus accès aux caractères d'origine : $\Gamma, \ldots, \Omega$.
-% L'option \texttt{Upgreek} reprend aussi
-% les minuscules grecques de l'option \texttt{upgreek}, qu'il est donc 
-% inutile d'invoquer simultanément.
+% Par défaut \LaTeX\ compose les majuscules grecques en forme droite et il
+% n'est donc pas indispensable de recoder celles-ci. L'option \texttt{uppercase=false}
+% permet de conserver les majuscules d'origine : $\backGamma$, $\backDelta$, \ldots,
+% $\backOmega$ (sans le préfixe |\back...|).
 %
 % \medskip
-% Signalons aussi l'extension \textsf{textalpha} de Günter Milde~\cite{ALPHA} qui 
-% donne accès aux lettres en forme droite \textalpha, \textbeta, \ldots,
-% \textpi, etc.,
-% mais en mode texte avec |\textalpha|, |\textbeta|, etc.
-% Ces glyphes, semblables à celles de la fonte \texttt{lmr} accessible avec \textsf{lgrmath},
-% se marient également bien avec la police Latin Modern,
-% par contre le thêta produit, \texttheta, n'est pas vraiment 
-% celui qui est d'usage en mathématiques.
-%
-% \medskip
 % Mentionnons pour finir ce commentaire de Walter Schmidt~\cite{UPGREEK} que le mu
-% utilisé pour le préfixe des unités physiques, \textmicro, doit se composer avec |\textmu|
+% utilisé pour le préfixe des unités physiques, \textmu, doit se composer avec |\textmu|
 % \footnote{L'extension \textsf{textalpha} fournit à la place \texttt{\string\textmicro}
 % (depuis 2020) car elle redéfinit \texttt{\string\textmu}.},
 % disponible en mode texte dans beaucoup de fontes (ou avec \textsf{textcomp}) ;
-% il diffère du $\mu$ droit mathématique.
+% il diffère du $\mu$ droit mathématique, obtenu avec |$\mu$| si l'on a activé
+% une des options de fonte précédentes.
 %
+%
 % \StopEventually{}
 %
 % \section{Le code}
 %
+% Les seules options de \textsf{frenchmath} sont \texttt{capsit} et \texttt{noibrackets}.
+% Tout le travail sur les lettre grecques est dorénavant géré par \textsf{mathgreeks}
+% et toute option inconnue de \textsf{frenchmath} sera passée à \textsf{mathgreeks}.
+% Auquel cas, l'on y ajoute automatiquement l'option \texttt{upright} 
+% pour composer les lettres grecques en forme droite.
+% Si l'on donne une clé ou une valeur invalide, c'est alors \textsf{mathgreeks} qui produira
+% un message d'erreur.
+%
 %    \begin{macrocode}
-\newif\ifcapsit
-\DeclareOption{capsit}{\capsittrue}
-\newif\iflgrmath
-\DeclareOption{lgrmath}{\lgrmathtrue}
-\newif\ifupgreek
-\DeclareOption{upgreek}{\upgreektrue}
-\newif\ifUpgreek
-\DeclareOption{Upgreek}{\Upgreektrue\upgreektrue}
-\newif\ifnoibrackets
-\DeclareOption{noibrackets}{\noibracketstrue}
+\newif\iffrenchmath at capsit
+\DeclareOption{capsit}{\frenchmath at capsittrue}
+\newif\iffrenchmath at noibrackets
+\DeclareOption{noibrackets}{\frenchmath at noibracketstrue}
+\newif\iffrenchmath at mathgreeks
+\DeclareOption*{\frenchmath at mathgreekstrue
+    \PassOptionsToPackage{\CurrentOption,upright}{mathgreeks}}
 \ProcessOptions \relax
 
-\@ifpackageloaded{unicode-math}{
-    \@ifpackageloaded{mathdesign}{
-        \PackageInfo{frenchmath}{Package mathdesign
-            is loaded, \MessageBreak
-            I don't load mathrsfs and amssymb}
-    }{
-        %\let\circledS\relax % utilisé uniquement par mathdesign
-        \let\eth\relax   % 3 incompatibilités unicode-math / amssymb
-        \let\digamma\relax
-        \let\backepsilon\relax
-        \RequirePackage{amssymb}
-        \PackageInfo{frenchmath}{Package unicode-math
-            is loaded, \MessageBreak
-            I don't load mathrsfs}
-    }
-    \let\vide\varnothing % \varnothing sera écrasé par unicode-math
-}{
-  \AtBeginDocument{
-    \@ifpackageloaded{mathdesign}{
-        \PackageInfo{frenchmath}{Package mathdesign
-            is loaded, \MessageBreak
-            I don't load mathrsfs and amssymb}
-    }{
-        \RequirePackage{amssymb} % \leqslant, \geqslant, \varnothing
-        \@ifundefined{mathscr}{\RequirePackage{mathrsfs}}{
-            \PackageInfo{frenchmath}{Command \string\mathscr\space
-                already defined, \MessageBreak
-                I don't load mathrsfs}        
-        }
-    }
-  }
-}
+%    \end{macrocode}
+% Assurer une bonne compatibilité avec \textsf{unicode-math} est un peu compliqué
+% car \textsf{unicode-math} définit ou redéfinit de nombreux symboles, lettres, 
+% signes dans |\AtBeginDocument|. Les extensions \textsf{decimalcomma} 
+% et \textsf{ibrackets} font déjà appel à |\AtBeginDocument| mais pour garantir
+% que leur action soit bien postérieure à celle de \textsf{unicode-math}
+% leur appel a été placé dans un |\AtEndPreamble|, fourni par l'extension \textsf{etoolbox}.
+% Il y a par contre un problème si on utilise une instruction comme |\MakeShortVerb"| du
+% module \textsf{shortvrb} ou |\lstMakeShortInline"| du module \mbox{\textsf{listings}}.
+% Ce type d'instruction doit agir \emph{après} \textsf{frenchmath}, donc être
+% placée après |\begin{document}| ou bien dans un |\AtBeginDocument{...}|.
+%
+% L'extension \textsf{mathptmx} ne fournit pas de |\jmath| mais considère néanmoins
+% cette commande comme existante. Dans ce cas, nous la rendons donc \og indéfinie \fg
+% pour la définir ensuite dans une commande générale faisant appel
+% à l'extension \textsf{dotlessj}.
+%    \begin{macrocode}
 \RequirePackage{amsopn} % fournit \DeclareMathOperator
-\@ifpackageloaded{mathptmx}{\RequirePackage{dotlessj}}{}
 \RequirePackage{xspace} % utile pour les commandes \ssi, \Oij
-\ifnoibrackets\else\RequirePackage{ibrackets}\fi % intelligent brackets
-\RequirePackage{decimalcomma} %  depuis frenchmath 2.7
+\RequirePackage{etoolbox} % fournit \AtEndPreamble
+\iffrenchmath at mathgreeks \RequirePackage{mathgreeks} \fi
+\AtEndPreamble{
+  \RequirePackage{decimalcomma}
+  \iffrenchmath at noibrackets\else\RequirePackage{ibrackets}\fi
+  \@ifpackageloaded{mathptmx}{\let\jmath\@undefined}{}
+  \@ifundefined{jmath}{\RequirePackage{dotlessj}}{}
+  \@ifpackageloaded{pstricks-add}{\psset{comma=true}}{} 
+}
 
 %    \end{macrocode}
 %
 % \DescribeMacro{\DeclareMathUp}
-% Sauf si l'option \texttt{capsit} est activée, on redéfinit toutes les lettres majuscules
+% Sauf si l'on a invoqué l'option \texttt{capsup=false} (ou \texttt{capsit}),
+% on redéfinit toutes les lettres majuscules
 % du mode mathématique grâce à la commande |\DeclareMathUp|.
 % Contrairement aux bascules |\MathUp| et |\MathIt| de l'extension \textsf{mismath},
 % |\DeclareMathUp| ne fonctionne que dans le préambule, mais son code est bien plus simple
@@ -753,7 +798,7 @@
 % se trouve sur le forum de discussion \texttt{iterate190.rssing.com},
 % en réponse à \og TeX How to iterate over a comma separated list$?$\fg.
 % Que son auteur, Petr Olšák, soit remercié.
-% Cette macro a été définie de manière identique dans \textsf{mismath}, 
+% Cette macro a d'ailleurs été utilisée de manière identique dans \textsf{mismath}, 
 % mais cela ne génère pas d'incompatibilité.}.
 % |\AtBeginDocument| est nécessaire pour que ces définitions 
 % soient prises en compte avec la classe \textsf{beamer} par exemple,
@@ -760,7 +805,7 @@
 % ou avec \textsf{unicode-math}.
 % \smallskip
 %    \begin{macrocode}
-\newcommand*\DeclareMathUp[1]{
+\providecommand*\DeclareMathUp[1]{
     \DeclareMathSymbol{#1}{\mathalpha}{operators}{`#1}}
     
 \def\apply#1#2{\apply@#1#2,\apply@,}
@@ -768,33 +813,102 @@
     \else #1{#2}\afterfi@{\apply@#1}\fi}
 \def\afterfi@#1#2\fi{\fi#1}
 
-\ifcapsit\else\AtBeginDocument{
+\AtEndPreamble{\iffrenchmath at capsit\else\AtBeginDocument{
   \apply\DeclareMathUp{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z}
+  }\fi
+}  
+
+%    \end{macrocode}
+% En utilisant |\AtEndPreamble| (de l'extension \mbox{\textsf{etoolbox}}),
+% avec |\AtBeginDocument| à l'intérieur, on garantit que certaines actions
+% auront bien lieu après celles de \textsf{unicode-math},
+% même si \textsf{frenchmath} est chargé avant \mbox{\textsf{unicode-math}}.
+%
+% Certains symboles, provenant de \textsf{amssymb} sont déjà définis par certaines 
+% extensions (\textsf{mathdesign} ou \textsf{unicode-math}) et ne seront pas redéfinis.
+% Un avertissement sera affiché dans ce cas. Comme \textsf{amssymb} 
+% (qui utilise \textsf{amsfonts}) charge plusieurs fontes mathématiques et un grand
+% nombre de symboles pas forcément nécessaires, nous n'avons extrait que les 
+% trois symboles dont nous avons besoin dans cette extension :
+% |\leqslant|, |\geqslant| et |\varnothing|.
+%    \begin{macrocode}
+\AtEndPreamble{% au cas où frenchmath est chargé avant unicode-math 
+  \AtBeginDocument{% après actions de unicode-math
+    \DeclareMathSymbol{;}{\mathbin}{operators}{'73} % et non \mathpunct
+    \@ifundefined{mathscr}{\RequirePackage{mathrsfs}}{
+        \PackageWarningNoLine{frenchmath}{Command \string\mathscr\space
+            already defined, \MessageBreak
+            I don't load mathrsfs}
+    }
+    \@ifundefined{leqslant}{
+        \DeclareSymbolFont{AMSa}{U}{msa}{m}{n}% de amsfonts
+        \DeclareMathSymbol{\leqslant}{\mathrel}{AMSa}{"36}% de amssymb
+        \DeclareMathSymbol{\geqslant}{\mathrel}{AMSa}{"3E}
+    }{
+        \PackageWarningNoLine{frenchmath}{\string\leqslant\space
+            and \string\geqslant\space already defined,
+            \MessageBreak
+            they will not be redefined}
+    }
+    \@ifundefined{varnothing}{% de amssymb
+        \newcommand\varnothing{% \usefont évite de déclarer AMSb
+            \mathord{\text{\usefont{U}{AMSb}{m}{n}\symbol{"3F}}}}
+    }{  
+        \PackageWarningNoLine{frenchmath}{\string\varnothing\space
+            already defined,
+            \MessageBreak
+            it will not be redefined,
+            \MessageBreak
+            except by using \string\AMSvarnothing}
+    }
   }
-\fi    
+}
 
-\AtBeginDocument{\@ifpackageloaded{pstricks-add}{\psset{comma=true}}{}}
-\DeclareMathSymbol{;}{\mathbin}{operators}{'73} % \mathpunct à l'origine
-
 %    \end{macrocode}
-% Passons aux alias et identifiants de fonctions classiques.
+% Voyons les alias et quelques commandes particulières.
+%
+% La commande |\varnothing| produit $\varnothing$ mais par contre, 
+% le symbole fournit par \textsf{unicode-math}, avec \textsf{Latin Modern Math}, 
+% est très laid et malheureusement identique à |\emptyset| : $\CMemptyset$.
+% Afin de récupérer le symbole de \textsf{amssymb}, sans être obligé de charger 
+% cette extension, nous proposons la commande |\AMSvarnothing|, 
+% à placer dans le préambule, après l'appel de \textsf{unicode-math}.
 %    \begin{macrocode}
 \newcommand\curs{\mathscr}
 \newcommand\infeg{\leqslant}
 \newcommand\supeg{\geqslant}
-\@ifundefined{vide}{\newcommand\vide{\varnothing}}{}
+\newcommand\vide{\varnothing}
+\newcommand\AMSvarnothing{% doit être appelé après \setmathfont ?
+    \AtEndPreamble{\AtBeginDocument{% après actions de unicode-math
+        \renewcommand\varnothing{%
+            \mathord{\text{\usefont{U}{AMSb}{m}{n}\symbol{"3F}}}}
+    }}
+}
 %    \end{macrocode}
 % La définition de |\paral| remplace, depuis la version 2.2,
 % l'ancienne définition plus simple |\mathrel{/\!\!/}|, mais qui donnait des barres 
-% trop serrées avec \textsf{mathastext} + \textsf{times} ou avec \textsf{libertinust1math}.
+% trop serrées avec \mbox{\textsf{mathastext}} + \textsf{times} 
+% ou avec \textsf{libertinust1math}.
 % Merci à Jean-François Burnol de me l'avoir fait remarquer 
 % et pour ses suggestions dans la mise au point d'une macro plus efficace.
+%
+% La macro |\cmod|, copiée du |\pod| de \textsf{amsmath} (depuis v2.11),
+% permet de gérer différemment
+% l'espacement en mode \og mathématiques centrées \fg (hors-ligne) 
+% ou en mode \og en ligne \fg.
 %    \begin{macrocode}
 \newcommand\paral{\mathrel{\ooalign{$\mkern-1.75mu/\mkern1.75mu$\cr%
     $\mkern1.75mu/\mkern-1.75mu$}}}
 \newcommand\ssi{si, et seulement si,\xspace}
-\newcommand*\cmod[1]{\quad[#1]}
+%\newcommand*\cmod[1]{\quad[#1]}
+\newif\if at display % provient de amsmath, peut être appelé 2 fois
+\everydisplay\@xp{\the\everydisplay \@displaytrue}
+\newcommand*\cmod[1]{\penalty \z@ % similaire à amsmath \allowbreak
+    \if at display\mkern 18mu\else\mkern 8mu\fi [#1]}
 
+%    \end{macrocode}
+% Passons aux identifiants de fonctions classiques.
+%    \begin{macrocode}
 \DeclareMathOperator{\pgcd}{pgcd}
 \DeclareMathOperator{\ppcm}{ppcm}
 \DeclareMathOperator{\card}{card}
@@ -811,7 +925,7 @@
 \DeclareMathOperator{\cosech}{cosech}
 
 %    \end{macrocode}
-% Présentons les commandes pour les bases et repères, qui peuvent être utilisées
+% Les commandes pour les bases et repères peuvent être utilisées
 % en mode texte grâce à |\ensuremath| (et |\xspace| qui garantit le bon espacement).
 %    \begin{macrocode}
 \newcommand\@Oij{%
@@ -838,9 +952,10 @@
     \ensuremath{\left(O ; \vec{u}, \vec{v}\,\right)}\xspace}
 \newcommand\Ouv{\@ifstar{\@@Ouv}{\@Ouv}}
 
-\AtBeginDocument{
-    \renewcommand\ij{%
-        \ensuremath{\left(\vec{\imath}, \vec{\jmath}\,\right)}\xspace}}
+\AtBeginDocument{\let\oldij\ij %\ij existe déjà (mode texte)
+    \renewcommand\ij{\TextOrMath{\oldij}{%
+        \left(\vec{\imath}, \vec{\jmath}\,\right)}}
+}
 \newcommand\ijk{%
     \ensuremath{%
         \left(\vec{\vphantom{t}\imath}, \vec{\vphantom{t}\jmath},
@@ -848,141 +963,9 @@
     \xspace}
 
 %    \end{macrocode}
-% Ce n'est qu'à la fin du préambule, donc avec |\AtBeginDocument|, que l'on examine
-% les options \texttt{lgrmath} ou \texttt{upgreek},
-% pour que cela fonctionne avec \textsf{unicode-math} et
-% pour laisser à l'utilisateur la possibilité de charger \textsf{upgreek} 
-% après \textsf{frenchmath} et éviter un conflit d'option.
-% On sauvegarde les lettres grecques d'origine dans les macros |\italpha|, \ldots, 
-% |\itomega|, grâce à la commande |\SavedGreekItalics|.
-% La macro |\upgreekUndefined| ne sert que si l'on veut utiliser \textsf{upgreek}
-% avec \textsf{unicode-math} : elle permet de \og vider \fg la définition
-% de |\upalpha|, |\upbeta|\ldots, car sinon leur redéfinition par \textsf{upgreek}
-% est impossible.
-%    \begin{macrocode}
-\providecommand\SaveGreekItalics{% pourrait être définie ailleurs
-    \let\italpha\alpha
-    \let\itbeta\beta
-    \let\itgamma\gamma
-    \let\itdelta\delta
-    \let\itepsilon\epsilon
-    \let\itzeta\zeta
-    \let\iteta\eta
-    \let\ittheta\theta
-    \let\itiota\iota
-    \let\itkappa\kappa
-    \let\itlambda\lambda
-    \let\itmu\mu
-    \let\itnu\nu
-    \let\itxi\xi
-    \let\itpi\pi
-    \let\itrho\rho
-    \let\itsigma\sigma
-    \let\ittau\tau
-    \let\itupsilon\upsilon
-    \let\itphi\phi
-    \let\itchi\chi
-    \let\itpsi\psi
-    \let\itomega\omega
-    \let\itvarepsilon\varepsilon
-    \let\itvartheta\vartheta
-    \let\itvarpi\varpi
-    \let\itvarsigma\varsigma
-    \let\itvarphi\varphi
-}
-
-\providecommand\upgreekUndefined{
-    \let\upalpha\@undefined
-    \let\upbeta\@undefined
-    \let\upgamma\@undefined
-    \let\updelta\@undefined
-    \let\upepsilon\@undefined
-    \let\upzeta\@undefined
-    \let\upeta\@undefined
-    \let\uptheta\@undefined
-    \let\upiota\@undefined
-    \let\upkappa\@undefined
-    \let\uplambda\@undefined
-    \let\upmu\@undefined
-    \let\upnu\@undefined
-    \let\upxi\@undefined
-    \let\uppi\@undefined
-    \let\uprho\@undefined
-    \let\upsigma\@undefined
-    \let\uptau\@undefined
-    \let\upupsilon\@undefined
-    \let\upphi\@undefined
-    \let\upchi\@undefined
-    \let\uppsi\@undefined
-    \let\upomega\@undefined
-    \let\upvarepsilon\@undefined
-    \let\upvartheta\@undefined
-    \let\upvarpi\@undefined
-    \let\upvarrho\@undefined
-    \let\upvarsigma\@undefined
-    \let\upvarphi\@undefined    
-}
-
-\AtBeginDocument{
-  \iflgrmath
-    \SaveGreekItalics
-    \RequirePackage[font=fcm,style=french]{lgrmath}
-  \fi
-  \ifupgreek
-    \@ifpackageloaded{upgreek}{}{
-      \@ifpackageloaded{unicode-math}{\upgreekUndefined}{}
-      \SaveGreekItalics
-      \RequirePackage[Symbol]{upgreek}
-    }
-    \renewcommand\alpha{\upalpha}
-    \renewcommand\beta{\upbeta}
-    \renewcommand\gamma{\upgamma}
-    \renewcommand\delta{\updelta}
-    \renewcommand\epsilon{\upepsilon}
-    \renewcommand\zeta{\upzeta}
-    \renewcommand\eta{\upeta}
-    \renewcommand\theta{\uptheta}
-    \renewcommand\iota{\upiota}
-    \renewcommand\kappa{\upkappa}
-    \renewcommand\lambda{\uplambda}
-    \renewcommand\mu{\upmu}
-    \renewcommand\nu{\upnu}
-    \renewcommand\xi{\upxi}
-    \renewcommand\pi{\uppi}
-    \renewcommand\rho{\uprho}
-    \renewcommand\sigma{\upsigma}
-    \renewcommand\tau{\uptau}
-    \renewcommand\upsilon{\upupsilon}
-    \renewcommand\phi{\upphi}
-    \renewcommand\chi{\upchi}
-    \renewcommand\psi{\uppsi}
-    \renewcommand\omega{\upomega}
-    \renewcommand\varepsilon{\upvarepsilon}
-    \renewcommand\vartheta{\upvartheta}
-    \renewcommand\varpi{\upvarpi}
-    \renewcommand\varrho{\upvarrho}
-    \renewcommand\varsigma{\upvarsigma}
-    \renewcommand\varphi{\upvarphi}
-  \fi
-  \ifUpgreek
-    % unicode-math utilise \upGamma, \upDelta...
-    \renewcommand\Gamma{\Upgamma}
-    \renewcommand\Delta{\Updelta}
-    \renewcommand\Theta{\Uptheta}
-    \renewcommand\Lambda{\Uplambda}
-    \renewcommand\Xi{\Upxi}
-    \renewcommand\Pi{\Uppi}
-    \renewcommand\Sigma{\Upsigma}
-    \renewcommand\Upsilon{\Upupsilon}
-    \renewcommand\Phi{\Upphi}
-    \renewcommand\Psi{\Uppsi}
-    \renewcommand\Omega{\Upomega}
-  \fi
-}
-%    \end{macrocode}
 %
 % \medskip
-% \begin{thebibliography}{31}
+% \begin{thebibliography}{32}
 % \begin{raggedright}
 % \bibitem{RTIN} \emph{Lexique des règles typographiques en usage à l’Imprimerie Nationale},
 % édition du 26/08/2002.
@@ -1010,6 +993,12 @@
 % Claudio Beccari, CTAN, v1.2.00 2021/08/04.
 % \bibitem{MAFR} \emph{La distribution \textsf{mafr}}, Christian Obrecht, 
 % CTAN, v1.0 17/09/2006.
+% \bibitem{BABEL} \emph{A Babel language definition file for French}, extension \LaTeX\ 
+% \textsf{babel-french} de Daniel Flipo, CTAN, v3.5c 14/09/2018.
+% \bibitem{FRM} \emph{L'extension \textsf{tdsfrmath}}, Yvon Henel, 
+% CTAN, v1.3 22/06/2009.
+% \bibitem{TABL} \emph{L'extension \textsf{tablvar}}, Antoine Missier,
+% CTAN, v2.0 23/12/2023.
 % \bibitem{UNIC} \emph{Experimental Unicode mathematical typesetting: 
 % The \textsf{unicode-math} package}, Will Robertson, Philipp Stephani, Joseph Wright, 
 % Khaled Hosny, and others, CTAN, v0.8r 13/08/2023.
@@ -1017,16 +1006,12 @@
 % Michel Bovani, CTAN, v1.3 30/01/2005.
 % \bibitem{DESIGN} \emph{The \textsf{mathdesign} package},
 % Paul Pichaureau, CTAN, v2.31 29/08/2013.
-% \bibitem{MIS} \emph{\textsf{mismath} -- Miscellaneous mathematical macros},
-% Antoine Missier, CTAN, v2.10 20/02/2024.
+% \bibitem{KPF} \emph{\textsf{Kp-Fonts} -- The Johannes Kepler project},
+% Christophe Caignaert, CTAN, v3.34 20/09/2022.
+% \bibitem{MIS} \emph{Miscellaneous mathematical macros -- The \textsf{mismath} package},
+% Antoine Missier, CTAN, v3.0 04/05/2024.
 % \bibitem{VECT} \emph{\textsf{esvect}  -- Typesetting vectors with beautiful 
 % arrow with \LaTeXe}, Eddie Saudrais, CTAN, v1.3 11/07/2013.
-% \bibitem{FRM} \emph{L'extension \textsf{tdsfrmath}}, Yvon Henel, 
-% CTAN, v1.3 22/06/2009.
-% \bibitem{TABL} \emph{L'extension \textsf{tablvar}}, Antoine Missier,
-% CTAN, v2.0 23/12/2023.
-% \bibitem{BABEL} \emph{A Babel language definition file for French}, extension \LaTeX\ 
-% \textsf{babel-french} de Daniel Flipo, CTAN, v3.5c 14/09/2018.
 % \bibitem{ICOMMA} \emph{The \textsf{icomma} package for \LaTeXe}. 
 % Walter Schmidt, CTAN, v2.0 10/03/2002.
 % \bibitem{NCC} \emph{The \textsf{ncccomma} package}. Alexander I.~Rozhenko, 
@@ -1043,12 +1028,12 @@
 % \bibitem{MATAL} \emph{The \textsf{mathalpha}, \textsc{aka} \textsf{mathalfa} package}, 
 % Michael Sharpe, CTAN, v1.143 18/11/2021.
 % \bibitem{DLJ} \emph{\textsf{dotlessj}}, David Carlisle, CTAN, v0.03 09/12/1998.
-% \bibitem{KPF} \emph{\textsf{Kp-Fonts} -- The Johannes Kepler project},
-% Christophe Caignaert, CTAN, v3.34 20/09/2022.
 % \bibitem{LGR} \emph{The \textsf{lgrmath} package}, Jean-François B., CTAN, 
 % v1.0 16/11/2022.
 % \bibitem{UPGREEK} \emph{The \textsf{upgreek} package for \LaTeXe}, Walter Schmidt, CTAN, 
 % v2.0 12/03/2003.
+% \bibitem{MGREEK} \emph{The \textsf{mathgreeks} package}, Antoine Missier, CTAN, 
+% v1.1 04/05/2024.
 % \bibitem{ALPHA} \emph{The \textsf{textalpha} package}
 % (partie de l'extension \textsf{greek-fontenc}), Günter Milde, CTAN, v2.1 14/06/2022.
 % \bibitem{COMP} \emph{\LaTeX\ Companion}, Frank Mittelbach, Michel Goossens,

Modified: trunk/Master/texmf-dist/tex/latex/frenchmath/frenchmath.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/frenchmath/frenchmath.sty	2024-05-04 19:46:42 UTC (rev 71169)
+++ trunk/Master/texmf-dist/tex/latex/frenchmath/frenchmath.sty	2024-05-04 19:46:50 UTC (rev 71170)
@@ -22,59 +22,30 @@
 %% 
 \NeedsTeXFormat{LaTeX2e}[2005/12/01]
 \ProvidesPackage{frenchmath}
-    [2024/02/25 v2.10 .dtx Typesetting mathematics according to French rules]
+    [2024/05/04 v3.0 .dtx Typesetting mathematics according to French rules]
 
-\newif\ifcapsit
-\DeclareOption{capsit}{\capsittrue}
-\newif\iflgrmath
-\DeclareOption{lgrmath}{\lgrmathtrue}
-\newif\ifupgreek
-\DeclareOption{upgreek}{\upgreektrue}
-\newif\ifUpgreek
-\DeclareOption{Upgreek}{\Upgreektrue\upgreektrue}
-\newif\ifnoibrackets
-\DeclareOption{noibrackets}{\noibracketstrue}
+\newif\iffrenchmath at capsit
+\DeclareOption{capsit}{\frenchmath at capsittrue}
+\newif\iffrenchmath at noibrackets
+\DeclareOption{noibrackets}{\frenchmath at noibracketstrue}
+\newif\iffrenchmath at mathgreeks
+\DeclareOption*{\frenchmath at mathgreekstrue
+    \PassOptionsToPackage{\CurrentOption,upright}{mathgreeks}}
 \ProcessOptions \relax
 
-\@ifpackageloaded{unicode-math}{
-    \@ifpackageloaded{mathdesign}{
-        \PackageInfo{frenchmath}{Package mathdesign
-            is loaded, \MessageBreak
-            I don't load mathrsfs and amssymb}
-    }{
-        %\let\circledS\relax % utilisé uniquement par mathdesign
-        \let\eth\relax   % 3 incompatibilités unicode-math / amssymb
-        \let\digamma\relax
-        \let\backepsilon\relax
-        \RequirePackage{amssymb}
-        \PackageInfo{frenchmath}{Package unicode-math
-            is loaded, \MessageBreak
-            I don't load mathrsfs}
-    }
-    \let\vide\varnothing % \varnothing sera écrasé par unicode-math
-}{
-  \AtBeginDocument{
-    \@ifpackageloaded{mathdesign}{
-        \PackageInfo{frenchmath}{Package mathdesign
-            is loaded, \MessageBreak
-            I don't load mathrsfs and amssymb}
-    }{
-        \RequirePackage{amssymb} % \leqslant, \geqslant, \varnothing
-        \@ifundefined{mathscr}{\RequirePackage{mathrsfs}}{
-            \PackageInfo{frenchmath}{Command \string\mathscr\space
-                already defined, \MessageBreak
-                I don't load mathrsfs}
-        }
-    }
-  }
-}
 \RequirePackage{amsopn} % fournit \DeclareMathOperator
-\@ifpackageloaded{mathptmx}{\RequirePackage{dotlessj}}{}
 \RequirePackage{xspace} % utile pour les commandes \ssi, \Oij
-\ifnoibrackets\else\RequirePackage{ibrackets}\fi % intelligent brackets
-\RequirePackage{decimalcomma} %  depuis frenchmath 2.7
+\RequirePackage{etoolbox} % fournit \AtEndPreamble
+\iffrenchmath at mathgreeks \RequirePackage{mathgreeks} \fi
+\AtEndPreamble{
+  \RequirePackage{decimalcomma}
+  \iffrenchmath at noibrackets\else\RequirePackage{ibrackets}\fi
+  \@ifpackageloaded{mathptmx}{\let\jmath\@undefined}{}
+  \@ifundefined{jmath}{\RequirePackage{dotlessj}}{}
+  \@ifpackageloaded{pstricks-add}{\psset{comma=true}}{}
+}
 
-\newcommand*\DeclareMathUp[1]{
+\providecommand*\DeclareMathUp[1]{
     \DeclareMathSymbol{#1}{\mathalpha}{operators}{`#1}}
 
 \def\apply#1#2{\apply@#1#2,\apply@,}
@@ -82,22 +53,60 @@
     \else #1{#2}\afterfi@{\apply@#1}\fi}
 \def\afterfi@#1#2\fi{\fi#1}
 
-\ifcapsit\else\AtBeginDocument{
+\AtEndPreamble{\iffrenchmath at capsit\else\AtBeginDocument{
   \apply\DeclareMathUp{A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z}
+  }\fi
+}
+
+\AtEndPreamble{% au cas où frenchmath est chargé avant unicode-math
+  \AtBeginDocument{% après actions de unicode-math
+    \DeclareMathSymbol{;}{\mathbin}{operators}{'73} % et non \mathpunct
+    \@ifundefined{mathscr}{\RequirePackage{mathrsfs}}{
+        \PackageWarningNoLine{frenchmath}{Command \string\mathscr\space
+            already defined, \MessageBreak
+            I don't load mathrsfs}
+    }
+    \@ifundefined{leqslant}{
+        \DeclareSymbolFont{AMSa}{U}{msa}{m}{n}% de amsfonts
+        \DeclareMathSymbol{\leqslant}{\mathrel}{AMSa}{"36}% de amssymb
+        \DeclareMathSymbol{\geqslant}{\mathrel}{AMSa}{"3E}
+    }{
+        \PackageWarningNoLine{frenchmath}{\string\leqslant\space
+            and \string\geqslant\space already defined,
+            \MessageBreak
+            they will not be redefined}
+    }
+    \@ifundefined{varnothing}{% de amssymb
+        \newcommand\varnothing{% \usefont évite de déclarer AMSb
+            \mathord{\text{\usefont{U}{AMSb}{m}{n}\symbol{"3F}}}}
+    }{
+        \PackageWarningNoLine{frenchmath}{\string\varnothing\space
+            already defined,
+            \MessageBreak
+            it will not be redefined,
+            \MessageBreak
+            except by using \string\AMSvarnothing}
+    }
   }
-\fi
+}
 
-\AtBeginDocument{\@ifpackageloaded{pstricks-add}{\psset{comma=true}}{}}
-\DeclareMathSymbol{;}{\mathbin}{operators}{'73} % \mathpunct à l'origine
-
 \newcommand\curs{\mathscr}
 \newcommand\infeg{\leqslant}
 \newcommand\supeg{\geqslant}
-\@ifundefined{vide}{\newcommand\vide{\varnothing}}{}
+\newcommand\vide{\varnothing}
+\newcommand\AMSvarnothing{% doit être appelé après \setmathfont ?
+    \AtEndPreamble{\AtBeginDocument{% après actions de unicode-math
+        \renewcommand\varnothing{%
+            \mathord{\text{\usefont{U}{AMSb}{m}{n}\symbol{"3F}}}}
+    }}
+}
 \newcommand\paral{\mathrel{\ooalign{$\mkern-1.75mu/\mkern1.75mu$\cr%
     $\mkern1.75mu/\mkern-1.75mu$}}}
 \newcommand\ssi{si, et seulement si,\xspace}
-\newcommand*\cmod[1]{\quad[#1]}
+\newif\if at display % provient de amsmath, peut être appelé 2 fois
+\everydisplay\@xp{\the\everydisplay \@displaytrue}
+\newcommand*\cmod[1]{\penalty \z@ % similaire à amsmath \allowbreak
+    \if at display\mkern 18mu\else\mkern 8mu\fi [#1]}
 
 \DeclareMathOperator{\pgcd}{pgcd}
 \DeclareMathOperator{\ppcm}{ppcm}
@@ -138,9 +147,10 @@
     \ensuremath{\left(O ; \vec{u}, \vec{v}\,\right)}\xspace}
 \newcommand\Ouv{\@ifstar{\@@Ouv}{\@Ouv}}
 
-\AtBeginDocument{
-    \renewcommand\ij{%
-        \ensuremath{\left(\vec{\imath}, \vec{\jmath}\,\right)}\xspace}}
+\AtBeginDocument{\let\oldij\ij %\ij existe déjà (mode texte)
+    \renewcommand\ij{\TextOrMath{\oldij}{%
+        \left(\vec{\imath}, \vec{\jmath}\,\right)}}
+}
 \newcommand\ijk{%
     \ensuremath{%
         \left(\vec{\vphantom{t}\imath}, \vec{\vphantom{t}\jmath},
@@ -147,126 +157,7 @@
         \vec{\vphantom{t}\smash{k}}\,\right)}%
     \xspace}
 
-\providecommand\SaveGreekItalics{% pourrait être définie ailleurs
-    \let\italpha\alpha
-    \let\itbeta\beta
-    \let\itgamma\gamma
-    \let\itdelta\delta
-    \let\itepsilon\epsilon
-    \let\itzeta\zeta
-    \let\iteta\eta
-    \let\ittheta\theta
-    \let\itiota\iota
-    \let\itkappa\kappa
-    \let\itlambda\lambda
-    \let\itmu\mu
-    \let\itnu\nu
-    \let\itxi\xi
-    \let\itpi\pi
-    \let\itrho\rho
-    \let\itsigma\sigma
-    \let\ittau\tau
-    \let\itupsilon\upsilon
-    \let\itphi\phi
-    \let\itchi\chi
-    \let\itpsi\psi
-    \let\itomega\omega
-    \let\itvarepsilon\varepsilon
-    \let\itvartheta\vartheta
-    \let\itvarpi\varpi
-    \let\itvarsigma\varsigma
-    \let\itvarphi\varphi
-}
 
-\providecommand\upgreekUndefined{
-    \let\upalpha\@undefined
-    \let\upbeta\@undefined
-    \let\upgamma\@undefined
-    \let\updelta\@undefined
-    \let\upepsilon\@undefined
-    \let\upzeta\@undefined
-    \let\upeta\@undefined
-    \let\uptheta\@undefined
-    \let\upiota\@undefined
-    \let\upkappa\@undefined
-    \let\uplambda\@undefined
-    \let\upmu\@undefined
-    \let\upnu\@undefined
-    \let\upxi\@undefined
-    \let\uppi\@undefined
-    \let\uprho\@undefined
-    \let\upsigma\@undefined
-    \let\uptau\@undefined
-    \let\upupsilon\@undefined
-    \let\upphi\@undefined
-    \let\upchi\@undefined
-    \let\uppsi\@undefined
-    \let\upomega\@undefined
-    \let\upvarepsilon\@undefined
-    \let\upvartheta\@undefined
-    \let\upvarpi\@undefined
-    \let\upvarrho\@undefined
-    \let\upvarsigma\@undefined
-    \let\upvarphi\@undefined
-}
-
-\AtBeginDocument{
-  \iflgrmath
-    \SaveGreekItalics
-    \RequirePackage[font=fcm,style=french]{lgrmath}
-  \fi
-  \ifupgreek
-    \@ifpackageloaded{upgreek}{}{
-      \@ifpackageloaded{unicode-math}{\upgreekUndefined}{}
-      \SaveGreekItalics
-      \RequirePackage[Symbol]{upgreek}
-    }
-    \renewcommand\alpha{\upalpha}
-    \renewcommand\beta{\upbeta}
-    \renewcommand\gamma{\upgamma}
-    \renewcommand\delta{\updelta}
-    \renewcommand\epsilon{\upepsilon}
-    \renewcommand\zeta{\upzeta}
-    \renewcommand\eta{\upeta}
-    \renewcommand\theta{\uptheta}
-    \renewcommand\iota{\upiota}
-    \renewcommand\kappa{\upkappa}
-    \renewcommand\lambda{\uplambda}
-    \renewcommand\mu{\upmu}
-    \renewcommand\nu{\upnu}
-    \renewcommand\xi{\upxi}
-    \renewcommand\pi{\uppi}
-    \renewcommand\rho{\uprho}
-    \renewcommand\sigma{\upsigma}
-    \renewcommand\tau{\uptau}
-    \renewcommand\upsilon{\upupsilon}
-    \renewcommand\phi{\upphi}
-    \renewcommand\chi{\upchi}
-    \renewcommand\psi{\uppsi}
-    \renewcommand\omega{\upomega}
-    \renewcommand\varepsilon{\upvarepsilon}
-    \renewcommand\vartheta{\upvartheta}
-    \renewcommand\varpi{\upvarpi}
-    \renewcommand\varrho{\upvarrho}
-    \renewcommand\varsigma{\upvarsigma}
-    \renewcommand\varphi{\upvarphi}
-  \fi
-  \ifUpgreek
-    % unicode-math utilise \upGamma, \upDelta...
-    \renewcommand\Gamma{\Upgamma}
-    \renewcommand\Delta{\Updelta}
-    \renewcommand\Theta{\Uptheta}
-    \renewcommand\Lambda{\Uplambda}
-    \renewcommand\Xi{\Upxi}
-    \renewcommand\Pi{\Uppi}
-    \renewcommand\Sigma{\Upsigma}
-    \renewcommand\Upsilon{\Upupsilon}
-    \renewcommand\Phi{\Upphi}
-    \renewcommand\Psi{\Uppsi}
-    \renewcommand\Omega{\Upomega}
-  \fi
-}
-
 \endinput
 %%
 %% End of file `frenchmath.sty'.



More information about the tex-live-commits mailing list.