2
1

Je mets en page un texte français parfaitement dépourvu des espaces insécables suivant le guillemet ouvrant ainsi que précédant le fermant. Je constate que LaTeX, bien qu'utilisant babel et son module « french », n'insère pas lesdites espaces. Comment faire pour qu'elles soient insérées lors de la compilation ?

Voici un ECM. Après compilation, son dernier mot, entre guillemets, est dépourvu desdites espaces insécables :

Ouvrir dans l'éditeur Overleaf
\documentclass[french]{article}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[oldstyle,largesmallcaps]{kpfonts}
\usepackage{babel}
\begin{document}
Car tout ce que veut le boubour, c’est jouir, comme avant, tranquille, «sans complexe, sans complexité, et sans culpabilité». Laisser libre cours à ses instincts, faire parler sa nature sauvage fantasmée, désignée ironiquement comme son côté «bonobo».
\end{document}

Posée 14 Déc '16, 20:45

Pathe's gravatar image

Pathe ♦♦
7.4k28196245
Taux d'acceptation : 55%

Modifiée 07 Aoû '17, 23:52


Placer simplement

Ouvrir dans l'éditeur Overleaf
\frenchbsetup{og=«, fg=»}

après l'appel à babel.

Lien permanent

Publiée 14 Déc '16, 21:45

Le%20TeXnicien%20de%20surface's gravatar image

Le TeXnicien de surface
2.0k814
Taux d'acceptation : 28%

Modifiée 07 Aoû '17, 23:53

Pathe's gravatar image

Pathe ♦♦
7.4k28196245

Fort bien, cela fonctionne. Mais pourquoi ?

  • Je pensais que l'appel à babel fermait la marche quoi qu'il arrive ; faut croire que non.

  • Il n'y a pas d'espaces insécables dans votre commande ; elle suffit pourtant à les insérer. Avouez que c'est singulier.

(14 Déc '16, 22:07) Pathe ♦♦ Pathe's gravatar image

De fait, cela doit transformer les guillemets en caractères actifs et en faire des alias des commandes \og et \fg qui, elles, insèrent cekivabien.

(14 Déc '16, 22:11) Le TeXnicien de surface Le%20TeXnicien%20de%20surface's gravatar image

@Le TeXnicien de surface : sur ce, je constate que l'espace insérée par la commande \frenchbsetup{og=«, fg=»} est codée U+0020. C'est donc une espace sécable.

L'espace insécable, qui aurait dû être insérée là, est codée U+00A0.

Que se passe-t-il donc ?

(15 Déc '16, 17:05) Pathe ♦♦ Pathe's gravatar image

@Le TeXnicien de surface : je précise avoir découvert cette espace sécable, codée U+0020, par un simple copier-coller depuis mon visualiseur pdf, acroread en l'occurence.

Se pourrait-il que celui-ci transcode U+00A0 en U+0020 ? Dans ce cas, la commande indiquée par le TeXnicien de surface aurait fonctionné, et seul le visualiseur ferait défaut. Je reconnais que c'est quelque peu capillotracté, mais comme je n'ai pas d'explication, j'en suis là.

(16 Déc '16, 19:05) Pathe ♦♦ Pathe's gravatar image

Une espace (ou plus généralement un ressort) est insécable en TeX si elle assortie d'une pénalité "infinie" ou si cette espace est insérée à l'aide de la primitive \kern. Cela n'a strictement rien à voir avec le code de caractère de l'espace en question.

Les espaces insérées par les caractères actifs « et » sont insécables puisque insérées avec une pénalité "infinie" de \M@ (voir ligne 629 du code de frenchb si je me trompe pas).

(16 Déc '16, 22:44) unbonpetit ♦♦ unbonpetit's gravatar image

Ah ben ça ! C'est précis.

Sont donc insérés des caractères appelés espace-mot, ou espace sécable, que LaTeX rend insécables. Pourquoi ne pas insérer des espaces insécables directement ? Cela permettrait de faire un copier-coller correct depuis un pdf généré par LaTeX.

(16 Déc '16, 23:15) Pathe ♦♦ Pathe's gravatar image

Vous faites une erreur de raisonnement. Vous ne considérez que le fichier de sortie (qui n'a d'ailleurs pas vocation à être copié collé, je précise !), alors que TeX agit au tout début du traitement et se moque éperdument du fichier de sortie. Vous imaginez bien que les espaces insérées par TeX existaient bien avant que la norme utf8 ne voit le jour et que l'espace U+00A0 ne soit imaginée et qu'on lui affecte ce code.

Bref, on se fiche pas mal du codage de sortie tant que l'espace insérée par TeX est bien insécable, c'est-à-dire qu'une coupure de ligne ne peut avoir lieu sur elle.

(17 Déc '16, 00:31) unbonpetit ♦♦ unbonpetit's gravatar image
1

@unbonpetit : j'entends votre argumentation, qui est historiquement fondée.

Mais elle ne colle pas aux usages actuels : en 2016, on copie du texte depuis des pdf ou des sites web, et il serait vraiment utile que l'extension babel utilise les caractères unicodes appropriés — puisqu'ils existent ! Sinon à quoi bon les coder ?

Et mon souci de fabriquer un document pdf aux caractères appropriés à leur place et au texte sélectionnable, et donc copiable, n'est pas moins légitime que d'autres.

En d'autres termes, je déplore que TeX se moque éperdument du fichier de sortie. C'est un tort de TeX.

(18 Déc '16, 00:47) Pathe ♦♦ Pathe's gravatar image
Affichage de 5 parmi 8 Afficher 3 commentaire(s) en plus

J'utilise habituellement le package csquotes. Dès lors, il suffit d'insérer la citation de cette façon : \frquote{citation}. Un peu fastidieux (moins qu'avec \og et \fg, selon moi), mais très efficace. csquotes permet bien d'autres choses : des citations tronquées, etc.

Lien permanent

Publiée 15 Déc '16, 01:50

fred02840's gravatar image

fred02840
4.2k17154187
Taux d'acceptation : 16%

Modifiée 15 Déc '16, 01:58

La documentation de l'extension csquotes est ici.

(15 Déc '16, 16:59) Pathe ♦♦ Pathe's gravatar image

@fred02840 : j'ai posé cette question parce que je mettais en forme un texte dactylographié ailleurs. J'aime bien les expressions régulières, mais de là à farcir des pages et des pages de \frquote{}, il y a un pas. D'où ma préférence pour la solution précédente.

La vôtre sera, je le pense, utile à quelque membre de la communauté ayant des besoins différents des miens.

(16 Déc '16, 19:08) Pathe ♦♦ Pathe's gravatar image
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.