web-dev-qa-db-fra.com

LaTeX met parfois trop ou trop peu d'espace après les règles

LaTeX essaie de deviner si un point termine une phrase, auquel cas il met de l'espace supplémentaire après. Voici deux exemples où il devine mal:

I watched Superman III. Then I went home. 

(Trop peu d'espace après "Superman III.".)

After brushing teeth etc. I went to bed.

(Trop d'espace après "etc.".)

Notez que la quantité d'espace que vous utilisez dans la source LaTeX n'a ​​pas d'importance car LaTeX l'ignore.

49
dreeves

J'ai trouvé la réponse ici: http://john.regehr.org/latex/ . Extrait:

Lorsqu'une période sans fin de phrase doit être suivie d'un espace, l'espace doit être un espace explicite. Le deuxième exemple devrait donc être:

After brushing teeth etc.\ I went to bed.

L'inverse de ce problème se produit lorsqu'une majuscule précède une période de fin de phrase dans l'entrée, comme dans le premier exemple. Dans ce cas, LaTeX suppose que la période termine une abréviation et la suit avec un espace inter-mots plutôt qu'un espace inter-phrases. La solution consiste à mettre "\@ "avant la période. Le premier exemple doit donc être

I watched Superman III\@. Then I went home.

Un moyen pratique de trouver cette erreur est:

grep '[A-Z]\.' *.tex
75
dreeves

Vous pouvez contourner le problème d'espacement si vous préférez les espaces simples à la fin des phrases: mettez \frenchspacing on (pour les anciennes versions de Latex, c'était une commande fragile). Knuth suivait la dénomination traditionnelle en l'appelant l'espacement français, bien qu'appeler le double espacement après les phrases l'espacement français est devenu dominant dans l'édition.

Dirk Margulis a écrit un article de Nice résumant certaines des raisons de la prévalence de l'espacement simple: Espace entre les phrases .

13
Charles Stewart

J'aime la réponse de dreeves et la recherche pratique qu'il suggère aussi. Je n'ai pas les points "rep" de Stackoverflow à commenter, mais ...

Comme les lignes en raw * .tex ont tendance à être très longues, la sortie de grep peut être écrasante (c'est-à-dire des paragraphes entiers); Je suggère une variante pour afficher uniquement les mots se terminant par "[A-Z]". (suivi d'un ou plusieurs espaces, suivi d'un nouveau mot en majuscule). C'est,

grep -o -E '[A-Z]+\. +[A-Z]+[A-Za-z]+' *.tex
5
boringusername