Retour à la ligne et retour à la ligne - Line wrap and word wrap

Le saut de ligne , également appelé retour à la ligne , consiste à diviser une section de texte en lignes afin qu'elle tienne dans la largeur disponible d'une page, d'une fenêtre ou d'une autre zone d'affichage. Dans l'affichage de texte, le retour à la ligne se poursuit sur une nouvelle ligne lorsqu'une ligne est pleine, de sorte que chaque ligne s'insère dans la fenêtre visible, permettant au texte d'être lu de haut en bas sans aucun défilement horizontal . Le retour à la ligne est la fonctionnalité supplémentaire de la plupart des éditeurs de texte , des traitements de texte et des navigateurs Web , consistant à casser les lignes entre les mots plutôt qu'à l'intérieur des mots, dans la mesure du possible. Le retour à la ligne rend inutile le codage en dur des délimiteurs de nouvelle ligne dans les paragraphes et permet à l'affichage du texte de s'adapter de manière flexible et dynamique à des affichages de différentes tailles.

Retours doux et durs

Un retour progressif ou un retour à la ligne est le saut résultant d'un retour à la ligne ou d'un retour à la ligne (qu'il soit automatique ou manuel), tandis qu'un retour ou un retour à la ligne est un saut intentionnel, créant un nouveau paragraphe. Avec un retour forcé, la mise en forme des sauts de paragraphe peut (et doit) être appliquée (soit par indentation, soit par espace vertical). L'habillage souple permet aux longueurs de ligne de s'ajuster automatiquement avec des ajustements de la largeur de la fenêtre de l'utilisateur ou des paramètres de marge, et est une fonctionnalité standard de tous les éditeurs de texte, traitements de texte et clients de messagerie modernes . Les pauses logicielles manuelles sont inutiles lorsque le retour à la ligne est effectué automatiquement, donc appuyer sur la touche "Entrée" produit généralement un retour dur.

Alternativement, "retour progressif" peut signifier un saut de ligne intentionnel et stocké qui n'est pas un saut de paragraphe. Par exemple, il est courant d'imprimer des adresses postales dans un format à plusieurs lignes, mais les plusieurs lignes sont considérées comme un seul paragraphe. Des sauts de ligne sont nécessaires pour diviser les mots de l'adresse en lignes de la longueur appropriée.

Dans les traitements de texte graphiques contemporains Microsoft Word et OpenOffice.org , les utilisateurs doivent taper un retour chariot ( ) entre chaque paragraphe. Les paramètres de mise en forme, tels que le retrait de la première ligne ou l'espacement entre les paragraphes, prennent effet lorsque le retour chariot marque la rupture. Un saut de ligne sans paragraphe, qui est un retour progressif, est inséré à l'aide de + ou via les menus, et est fourni pour les cas où le texte doit commencer sur une nouvelle ligne mais aucun des autres effets secondaires du début d'un nouveau paragraphe n'est souhaité . EnterShiftEnter

Dans les langages de balisage orientés texte, un retour progressif est généralement proposé sous forme de balise de balisage. Par exemple, en HTML, il existe une balise <br> qui a le même objectif que le retour progressif dans les traitements de texte décrits ci-dessus.

Unicode

L' algorithme de rupture de ligne Unicode détermine un ensemble de positions, appelées opportunités de rupture , qui sont des endroits appropriés pour commencer une nouvelle ligne. Les positions de saut de ligne réelles sont sélectionnées parmi les opportunités de saut par le logiciel de niveau supérieur qui appelle l'algorithme, et non par l'algorithme lui-même, car seul le logiciel de niveau supérieur connaît la largeur de l'écran sur lequel le texte est affiché et la largeur de les glyphes qui composent le texte affiché.

Le jeu de caractères Unicode fournit un caractère séparateur de ligne ainsi qu'un séparateur de paragraphe pour représenter la sémantique du retour progressif et du retour ferme.

SÉPARATEUR DE LIGNE 0x2028
* peut être utilisé pour représenter cette sémantique sans ambiguïté
SÉPARATEUR DE PARAGRAPHES 0x2029
* peut être utilisé pour représenter cette sémantique sans ambiguïté

Limites de mots, césure et espaces durs

Les retours progressifs sont généralement placés après la fin des mots complets ou après la ponctuation qui suit les mots complets. Cependant, le retour à la ligne peut également se produire après un trait d'union à l' intérieur d'un mot. Ceci n'est parfois pas souhaité et peut être bloqué en utilisant un trait d'union insécable , ou un trait d'union ferme , au lieu d'un trait d'union normal.

Un mot sans traits d'union peut être rendu enveloppable en y insérant des traits d'union souples . Lorsque le mot n'est pas enveloppé (c'est-à-dire qu'il n'est pas interrompu entre les lignes), le trait d'union conditionnel n'est pas visible. Mais si le mot est enroulé sur plusieurs lignes, cela se fait au niveau du trait d'union souple, auquel cas il est affiché sous la forme d'un trait d'union visible sur la ligne supérieure où le mot est rompu. (Dans le cas rare d'un mot qui est censé être enroulable en le brisant sur plusieurs lignes mais sans jamais faire apparaître de trait d'union, un espace de largeur zéro est placé au(x) point(s) de rupture autorisé(s) dans le mot.)

Parfois, le retour à la ligne n'est pas souhaitable entre des mots adjacents. Dans de tels cas, le retour à la ligne peut généralement être bloqué en utilisant un espace dur ou un espace insécable entre les mots, au lieu d'espaces normaux.

Habillage de mots dans du texte contenant du chinois, du japonais et du coréen

En chinois , japonais et coréen , le retour à la ligne peut généralement se produire avant et après n'importe quel caractère han , mais certains caractères de ponctuation ne sont pas autorisés à commencer une nouvelle ligne. Les kana japonais , lettres de l'alphabet japonais, sont traités de la même manière que les caractères Han ( Kanji ) par extension, ce qui signifie que les mots peuvent et ont tendance à être brisés sans trait d'union ou autre indication que cela s'est produit.

Dans certaines circonstances, cependant, l'habillage de mots n'est pas souhaité. Par exemple,

  • l'habillage de mots peut ne pas être souhaité dans les noms de personnes, et
  • l'habillage de mots peut ne pas être souhaité dans les mots composés (lorsque le texte est aligné à gauche, mais uniquement dans certains styles).

La plupart des logiciels de traitement de texte et de composition existants ne peuvent gérer aucun des scénarios ci-dessus.

La ponctuation CJK peut ou non suivre des règles similaires aux circonstances spéciales mentionnées ci-dessus. Cela dépend des règles de saut de ligne en CJK .

Cependant, un cas particulier de règles de saut de ligne en CJK s'applique toujours : le retour à la ligne ne doit jamais se produire à l'intérieur du tiret et des points de suspension CJK. Même si chacun de ces signes de ponctuation doit être représenté par deux caractères en raison d'une limitation de tous les codages de caractères existants , chacun d'eux est intrinsèquement un seul signe de ponctuation de deux ems de largeur, et non pas deux signes de ponctuation d'un em de largeur.

Algorithme

L'habillage de mots est un problème d'optimisation . Selon ce qui doit être optimisé, différents algorithmes sont utilisés.

Nombre minimum de lignes

Un moyen simple de faire un wrapping de mots est d'utiliser un algorithme glouton qui met autant de mots que possible sur une ligne, puis de passer à la ligne suivante pour faire de même jusqu'à ce qu'il n'y ait plus de mots à placer. Cette méthode est utilisée par de nombreux traitements de texte modernes, tels que OpenOffice.org Writer et Microsoft Word. Cet algorithme utilise toujours le nombre minimum de lignes possible mais peut conduire à des lignes de longueurs très variables. Le pseudocode suivant implémente cet algorithme :

SpaceLeft := LineWidth
for each Word in Text
    if (Width(Word) + SpaceWidth) > SpaceLeft
        insert line break before Word in Text
        SpaceLeft := LineWidth - Width(Word)
    else
        SpaceLeft := SpaceLeft - (Width(Word) + SpaceWidth)

LineWidthest la largeur d'une ligne, SpaceLeftest la largeur de l'espace restant sur la ligne à remplir, SpaceWidthest la largeur d'un seul caractère d'espacement, Textest le texte d'entrée sur lequel itérer et Wordest un mot dans ce texte.

Raggedness minimum

Un algorithme différent, utilisé dans TeX , minimise la somme des carrés des longueurs des espaces à la fin des lignes pour produire un résultat plus esthétique. L'exemple suivant compare cette méthode avec l'algorithme glouton, qui ne minimise pas toujours l'espace au carré.

Pour le texte saisi

AAA BB CC DDDDD

avec une largeur de ligne de 6, l'algorithme glouton produirait :

------    Line width: 6
AAA BB    Remaining space: 0
CC        Remaining space: 4
DDDDD     Remaining space: 1

La somme de l'espace au carré laissé par cette méthode est . Cependant, la solution optimale atteint la somme la plus petite :

------    Line width: 6
AAA       Remaining space: 3
BB CC     Remaining space: 1
DDDDD     Remaining space: 1

La différence ici est que la première ligne est interrompue avant BBau lieu d'après, ce qui donne une meilleure marge à droite et un coût inférieur 11.

En utilisant un algorithme de programmation dynamique pour choisir les positions auxquelles couper la ligne, au lieu de choisir des coupures avidement, la solution avec un minimum d'irrégularités peut être trouvée dans le temps , où est le nombre de mots dans le texte d'entrée. Typiquement, la fonction de coût de cette technique doit être modifiée pour qu'elle ne compte pas l'espace laissé sur la dernière ligne d'un paragraphe ; cette modification permet à un paragraphe de se terminer au milieu d'une ligne sans pénalité. Il est également possible d'appliquer la même technique de programmation dynamique pour minimiser des fonctions de coût plus complexes qui combinent d'autres facteurs tels que le nombre de lignes ou les coûts de césure de mots longs. Des algorithmes de temps linéaire plus rapides mais plus compliqués basés sur l' algorithme SMAWK sont également connus pour le problème d'irrégularité minimum et pour certaines autres fonctions de coût qui ont des propriétés similaires.

Histoire

Une fonction de saut de ligne primitive a été utilisée en 1955 dans une "unité de contrôle d'imprimante de page" développée par Western Union . Ce système utilisait des relais plutôt que des ordinateurs numériques programmables et nécessitait donc un algorithme simple pouvant être mis en œuvre sans tampons de données . Dans le système Western Union, chaque ligne était interrompue au premier caractère d'espacement à apparaître après le 58e caractère, ou au 70e caractère si aucun caractère d'espacement n'a été trouvé.

L'algorithme glouton pour le saut de ligne est antérieur à la méthode de programmation dynamique décrite par Donald Knuth dans un mémo non publié de 1977 décrivant son système de composition TeX et publié plus tard plus en détail par Knuth & Plass (1981) .

Voir également

Les références

Liens externes

L'algorithme de Knuth

Autres liens de mots-clés