Discussion:
cleveref & babel | babel-french ne font pas bon ménage
(trop ancien pour répondre)
Vincent Belaïche
2022-09-10 18:13:25 UTC
Permalink
Voici un ECM :

--------8<-----------8<-----------8<-----------8<-----------8<-------
\documentclass[french]{article}
\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{cleveref}
\usepackage{babel}
\crefformat{footnote}{#2\footnotemark[#1]#3}
\begin{document}
Une note\footnote{\label{fn/xxx}Le texte de la note.}.

Et avec la même marque d'appel\cref{fn/xxx}.
\end{document}
--------8<-----------8<-----------8<-----------8<-----------8<-------

Il faut faire deux compilations de l'ECM pour que les références soient
à jour.

Si on met « \usepackage{babel} » en commentaire, ça marche, c'est à dire
que la marque d'appel de note, juste après « Et avec la même marque
d'appel » est bien un « 1 » en indice supérieur. Par contre avec babel,
ça ne marche pas, c'est à dire que j'ai un « ?? » en gras à la place.

À noter, j'utilise un « / » pour éviter les pb de caractère actif « : »,
mais ça n'a rien à voir, car cleveref est agnostique par rapport à
l'étiquette, j'aurais pu faire le même ECM avec « xxx » au lieu de
« fn/xxx ».

À noter aussi :

- avec babel,
- dans le .aux on a :

--------8<-----------8<-----------8<-----------8<-----------8<-------
\newlabel{fn/xxx}{{1}{1}}
\newlabel{fn/***@cref}{{}{[1][1][]1}}
--------8<-----------8<-----------8<-----------8<-----------8<-------

- dans le .log on a :

--------8<-----------8<-----------8<-----------8<-----------8<-------
LaTeX Warning: cref reference format for label type `' undefined on input line
10.
--------8<-----------8<-----------8<-----------8<-----------8<-------

- sans babel,

- dans le .aux on a :

--------8<-----------8<-----------8<-----------8<-----------8<-------
\newlabel{fn/xxx}{{1}{1}}
\newlabel{fn/***@cref}{{[footnote][1][]1}{[1][1][]1}}
--------8<-----------8<-----------8<-----------8<-----------8<-------

- dans le .log, il n'y a plus l'avertissement.


En changeant l'ordre de chargement de cleveref et babel, c'est toujours
le même pb.

Tout début de piste est le bien venu …

V.
--
Jean-Côme Charpentier
2022-09-11 14:53:36 UTC
Permalink
Post by Vincent Belaïche
--------8<-----------8<-----------8<-----------8<-----------8<-------
\documentclass[french]{article}
\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{cleveref}
\usepackage{babel}
\crefformat{footnote}{#2\footnotemark[#1]#3}
\begin{document}
Une note\footnote{\label{fn/xxx}Le texte de la note.}.
Et avec la même marque d'appel\cref{fn/xxx}.
\end{document}
--------8<-----------8<-----------8<-----------8<-----------8<-------
[couic exposé très clair du problème]
Tout début de piste est le bien venu …
Je n'ai pas vraiment de début de piste sauf que je sais que french
modifie les codes des notes de bas de page et que, comme tu le dis, ça
met un peu le bazar avec d'autres extensions qui font joujou avec les
notes. Je propose une solution bourrine qui ne te conviendra peut être
pas : désactiver la partie note de bas de page de french.

\documentclass[french]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\frenchsetup{FrenchFootnotes=false}
\usepackage[french]{cleveref}
\crefformat{footnote}{#2\footnotemark[#1]#3}
\begin{document}
Une note\footnote{\label{fn/xxx}Le texte de la note.}.

Et avec la même marque d'appel\cref{fn/xxx}.
\end{document}

Jean-Côme Charpentier
--
mon logo << doit >> être écrit avec un savant mélange (je vais tuer
l'épicier qui m'a pondu ce logo) de haut/bas de casse (et même les
placards du fond, sous l'escalier... je suis pratiquement sûr que ses
petits plombs, il a été les chercher à la poubelle ce bozo).
-+- draxar in fr.comp.text.tex -+-
Denis Bitouzé
2022-09-11 15:15:02 UTC
Permalink
Post by Vincent Belaïche
--------8<-----------8<-----------8<-----------8<-----------8<-------
\documentclass[french]{article}
\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{cleveref}
\usepackage{babel}
\crefformat{footnote}{#2\footnotemark[#1]#3}
\begin{document}
Une note\footnote{\label{fn/xxx}Le texte de la note.}.
Et avec la même marque d'appel\cref{fn/xxx}.
\end{document}
--------8<-----------8<-----------8<-----------8<-----------8<-------
Il faut faire deux compilations de l'ECM pour que les références soient
à jour.
Si on met « \usepackage{babel} » en commentaire, ça marche, c'est à dire
que la marque d'appel de note, juste après « Et avec la même marque
d'appel » est bien un « 1 » en indice supérieur. Par contre avec babel,
ça ne marche pas, c'est à dire que j'ai un « ?? » en gras à la place.
Tout début de piste est le bien venu …
J'ai l'impression que tu dévoies l'usage de `cleveref`, qui a pour objet
de faire automatiquement figurer la nature de l'objet référencé avant sa
référence. Ainsi, si `toto` est le label d'une figure numérotée disons
« 3 » :

- `\ref{toto}` va inscrire « 3 » ;
- `\cref{toto}` va inscrire « figure 3 ».

En l'espèce, j'aurais plutôt fait usage de la commande
`\footref`. L'exemple suivant donne le résultat escompté :

--8<---------------cut here---------------start------------->8---
\documentclass[french]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{cleveref}

\crefformat{footnote}{#2\footnotemark[#1]#3}

\begin{document}
Une note\footnote{\label{fn/xxx}Le texte de la note.}.

Et avec la même marque d'appel\footref{fn/xxx}.
\end{document}
--8<---------------cut here---------------end--------------->8---
--
Denis
news.free.fr
2022-09-12 13:44:21 UTC
Permalink
Bonjour,

\documentclass[french]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{cleveref}
\crefformat{footnote}{#2\footnotemark[#1]#3}
\frenchsetup{FrenchFootnotes=false}
\begin{document}
Une note\footnote{\label{xxx}Le texte de la note.}.

Et avec la même marque d'appel\cref{xxx}.
\end{document}

donne le résultat mais il faudra peut-être jouer avec les autres options
de french pour franciser les notes de bas de pages.
Jean-Yves
--
C'est fou tout ce qui peut se cacher sous une bête formule hein ?
Une vraie boîte de Pandore...
-+- Sébastien M. in fr.comp.text.tex -+-
Vincent Belaïche
2022-09-24 17:39:58 UTC
Permalink
Post by news.free.fr
Bonjour,
\documentclass[french]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{cleveref}
\crefformat{footnote}{#2\footnotemark[#1]#3}
\frenchsetup{FrenchFootnotes=false}
\begin{document}
Une note\footnote{\label{xxx}Le texte de la note.}.
Et avec la même marque d'appel\cref{xxx}.
\end{document}
donne le résultat mais il faudra peut-être jouer avec les autres options
de french pour franciser les notes de bas de pages.
Jean-Yves
Salut,

Merci à vous trois pour vos réponses …

Pour répondre en particulier à Denis ( « J'ai l'impression que tu
dévoies l'usage de `cleveref` » ), ce n'est pas moi personnellement
l'auteur de ce « dévoiement », c'est un exemple tiré de la version
anglaise de l'Officieux LaTeX, sur un amendement fait par J. Hefferon
(cf. dernier exemple du nœud
https://latexref.xyz/_005cfootnotemark.html) que je n'ai pas encore
propagé en français (voir
https://latexref.xyz/fr/_005cfootnotemark.html).

En effet, en testant cet exemple dans un document babel-frenchisé, je me
suis aperçu que ça coinçait, et c'est à ce moment que j'ai posté la
question sur fctt, ce qui a initié ce fil, en pensant que qq'un
trouverait une correction à apporter à babel-french.

Du coup, il faut que je réfléchisse un peu à comment je vais faire. Je
suis très réticent à fournir un exemple qui ne fonctionnerait pas pour
un document en français et typographié à la française, mais d'un autre
côté j'essaie quand même de garder les versions française et anglaise de
l'Officieux alignées, même si je ne me fais pas une obligation qu'elles
le soient littéralement (par exemple j'ai remplacé un certain nombre
d'exemples à la gloire d'Abraham Lincoln, ou d'extraits de l'œuvre de
Patrick O'Brian, parce que je les trouvais trop pathétiquement
ÉUA-centriques ou polémiques).

Vincent.
--
Vincent Belaïche
2022-09-25 21:11:23 UTC
Permalink
[...]
Post by Vincent Belaïche
Salut,
Merci à vous trois pour vos réponses …
[...]
Post by Vincent Belaïche
Vincent.
J'ai regardé un peu le code de cleveref.sty et celui de french.ldf, et
le fond du problème c'est que tout deux surchargent \@makefntext.

Comme cleveref.sty le fait à son chargement, alors que french.ldf le
fait dans un \AtBeginDocument, french.ldf fait la surcharge en second et
cleveref en premier, alors qu'il faudrait que ce soit dans l'autre sens
pour que ça marche (ou bien il faudrait que french.ldf n'efface pas
certaines données de contexte). Donc un contournement simple pour que
tout ça fonctionne ensemble est de mettre les surcharges dans l'ordre
inverse, comme ceci :

--------8<-----------8<-----------8<-----------8<-----------8<-------
\documentclass[french]{article}
\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{cleveref}
\usepackage{babel}
\crefformat{footnote}{#2\footnotemark[#1]#3}
\begin{document}
\makeatletter
\begingroup
% original
\let\@tempa\***@old@makefntext
% babel
\let\@tempb\@makefntext
% cleveref
\let\@tempc\@makefntextORI
% inverse l'ordre de surcharge
\global\let\@makefntext\@tempc
\global\let\***@old@makefntext\@tempb
\global\let\@makefntextORI\@tempa
\endgroup
\makeatother
Une note\footnote{\label{fn/xxx}Le texte de la note.}.

Et avec la même marque d'appel\cref{fn/xxx}.
\end{document}

--------8<-----------8<-----------8<-----------8<-----------8<-------

Bon, ce n'est pas très satisfaisant. Il vaudrait mieux que french.ldf
n'écrase pas le contexte.

--
Daniel Flipo
2022-09-26 13:32:27 UTC
Permalink
Post by Vincent Belaïche
J'ai regardé un peu le code de cleveref.sty et celui de french.ldf, et
Comme cleveref.sty le fait à son chargement, alors que french.ldf le
fait dans un \AtBeginDocument, french.ldf fait la surcharge en second et
cleveref en premier, alors qu'il faudrait que ce soit dans l'autre sens
pour que ça marche (ou bien il faudrait que french.ldf n'efface pas
certaines données de contexte). Donc un contournement simple pour que
tout ça fonctionne ensemble est de mettre les surcharges dans l'ordre
--------8<-----------8<-----------8<-----------8<-----------8<-------
\documentclass[french]{article}
\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{cleveref}
\usepackage{babel}
\crefformat{footnote}{#2\footnotemark[#1]#3}
\begin{document}
\makeatletter
\begingroup
% original
% babel
% cleveref
% inverse l'ordre de surcharge
\endgroup
\makeatother
Une note\footnote{\label{fn/xxx}Le texte de la note.}.
Et avec la même marque d'appel\cref{fn/xxx}.
\end{document}
--------8<-----------8<-----------8<-----------8<-----------8<-------
Bon, ce n'est pas très satisfaisant. Il vaudrait mieux que french.ldf
n'écrase pas le contexte.
Yaka…

Jean-Yves Baudais a déjà indiqué un moyen simple d'empêcher french.ldf
de toucher au formatage des notes de bas-de-page :
\frenchsetup{FrenchFootnotes=false}

On ne peut pas demander à french.ldf /à la fois/ de modifier la
présentation de ces notes et /en même temps/ de ne pas toucher à
\@makefntext, il faut /choisir/.

Le clash avec cleveref arrivera avec toute extension modifiant
\@makefntex. Essayer par exemple de remplacer babel/french par
\usepackage[symbol]{footmisc}.

L'intervention de french.ldf a lieu au \begin{document} justement afin
de prendre en compte le contexte, en particulier si une autre extension
a modifié les notes de bas-de-page (bigfoot par exemple).

Conclusion : aucune « amélioration » n'est à espérer du côté de
babel-french pour résoudre ce clash.
--
Daniel Flipo
Loading...