Suivant le conseil de touhami, je pose cette question de façon indépendante :

pourquoi faut-il préciser « french » dans la classe de document ET dans l'appel de Babel ? Dans quels cas la classe ne sait-elle pas gérer l'option « french » et pourquoi cela ne pose-t-il pas de problème malgré tout ?

Cette question renvoie aussi à la question du forum intitulée Écrire en français avec latex en 2019.

Posée 26 Jui '19, 02:29

idefix's gravatar image

idefix
95594051
Taux d'acceptation : 14%

Modifiée 26 Jui '19, 15:48

Pathe's gravatar image

Pathe ♦♦
7.4k28196245

Modestement, je pense qu'il suffit d'indiquer french dans l'appel de classe, mais non dans babel (je suis les préconisations indiquées sur ce forum il y a un certain temps). À moins qu'on veuille utiliser d'autres langues (et encore : on me contredira volontiers…)

(26 Jui '19, 02:31) fred02840 fred02840's gravatar image

Pour un document avec une seule langue, \documentclass[french]{article}\usepackage{babel} suffit. Il y a un exemple dans la documentation de babel.

(26 Jui '19, 02:42) samcarter samcarter's gravatar image

Les options de l'extension sont plus flexible. Par exemple on peut utiliser \usepackage[latin.medieval]{babel}, ce ne marche pas avec documentclass

(26 Jui '19, 02:46) samcarter samcarter's gravatar image

Réponse brève — Préciser l'option « french » dans la classe de document n'est pas obligatoire mais c'est recommandé. Toute option passée à la classe est vue par toutes les extensions chargées par le document ; donc, si vous aviez précisé « french » dans la classe, alors inutile de l'ajouter à babel... à une exception près : pour un document multilingue (avec le français comme langue principale), si french est passée comme option globale et si par la suite on veut passer une autre langue à babel, il faut alors charger babel comme suit : \usepackage[english,main=french]{babel}.

Réponse longue — Chaque classe possède un nombre fini des options prédéfinies. Par exemple la classe standard book possède les options suivantes :

  • a4paper, a5paper, b5paper, letterpaper, legalpaper, executivepaper, landscape,
  • 10pt, 11pt, 12pt,
  • oneside, twoside, openright, openany, onecolumn, twocolumn,
  • titlepage, notitlepage, leqno, fleqn, openbib, draft, final.

Toute autre option est inconnue par la classe. Elle n'indique rien à la classe. On dit que la classe ne sait pas gérer une telle option. Par exemple, la classe standard minimal ne sait gérer aucune option.

Toute option (connue ou non) passée à la classe est dite globale car elle sera vue par toutes les extensions chargées par le document (après \documentclass bien sûr).

Exemple — avec le code suivant :

Ouvrir dans l'éditeur Overleaf
\documentclass[a3paper]{article}
\usepackage{geometry}

\usepackage{mwe}

\begin{document}
\blinddocument
\end{document}

... le format est A3, bien qu'un message d'avertissement disant Unused global option(s): [a3paper]. est affiché. En effet, c'est vrai, l'option n'est pas utilisée par la classe mais par l'extension geometry.

Lien permanent

Publiée 26 Jui '19, 03:07

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

Modifiée 26 Jui '19, 15:46

Pathe's gravatar image

Pathe ♦♦
7.4k28196245

1

Pour un document multilingue (avec le français comme langue principale), si french est passée comme option globale et si par la suite on veut passer une autre langue à babel, il me semble non nécessaire de recourir à \usepackage[english,main=french]{babel} : il devrait suffire de stipuler \documentclass[english,french]{...} puis de charger babel sans option de langue.

(26 Jui '19, 20:40) denis ♦♦ denis's gravatar image

@denis "...et si par la suite on veut ..." signifie que pour une raison ou autre english ne peut pas être globale.

(26 Jui '19, 21:25) touhami touhami's gravatar image
1

Je ne suis pas sûr de comprendre : \documentclass[english,french]{...} fait certes de english une option globale mais la langue par défaut reste la dernière stipulée (ici french) et on ne passe en anglais que si explicitement stipulé (p. ex. au moyen de \selectlanguage{english}).

(26 Jui '19, 21:58) denis ♦♦ denis's gravatar image

@denis Ce que je veux est empêcher english d'être une option globale, ou encore empêcher certaines extensions de voir cet option. Je veux (et je dois) passer english à babel car j'ai besoin d'écrire avec mais sans que l'option english soit passée à une extension particulière X.

(27 Jui '19, 03:19) touhami touhami's gravatar image

Avec \documentclass[english,french]{article}, english est peut-être globale, mais supplantée par french. Ainsi, \SIrange{1}{10}{\m} donne « 1 m à 10 m » (et donne d'ailleurs « 1 m to 10 m » si après \selectlanguage{english}). Je ne vois pas de cas pratique où est problématique le fait que english soit globale.

(28 Jui '19, 02:23) denis ♦♦ denis's gravatar image

@denis c'est vrai que c'est très rare en pratique, mais il reste possible. Un exemple (je ne sait pas si c'est vraiment pratique ou pas) est l'extension fancyref avec \documentclass[german,french]{article}. Il faut penser aussi aux cas plus critiques, par exemple l'option arabic.

(28 Jui '19, 03:06) touhami touhami's gravatar image

Concernant fancyref, OK mais ce package n'a pas été actualisé depuis 20 ans et peut avantageusement être remplacé par, par exemple, cleveref. Concernant l'option arabic, je ne peux que vous croire sur parole :)

(28 Jui '19, 12:47) denis ♦♦ denis's gravatar image
1

@denis À vrai dire je ne peux pas penser à un exemple concret, mais c'est comme ça que je vois la chose.

(28 Jui '19, 13:25) touhami touhami's gravatar image
Affichage de 5 parmi 8 Afficher 3 commentaire(s) en plus
Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.