• # Mon petit grain de sel

    Posté par (site web personnel) . En réponse au journal rétrospective sur la mise en page en console. Évalué à 3.

    Salut, merci pour ton travail!

    J'ai deux petits grains de sel à mettre. Le plus pertinent est que certains des sujets dont tu parles sont abordés dans le TeXbook. Ce livre se trouve ici

    https://ctan.org/pkg/texbook?lang=en

    la distribution sous forme de PDF n'est pas autorisée mais celle du source bel et bien.

    La méthode de justification de TeX est décrite au chapitre 14 "How TeX breaks paragraphs into lines." En très bref, l'idée est de trouver tous les points de césure possible, de leur associer une mesure de laideur (par exemple c'est moins laid de casser sur une espace que dans l'intérieur d'un mot) puis quand on a un candidat de paragraphe, ajouter à ce score de laideur une valeur qui dépend de la dilatation ou compression des espaces sur les lignes consécutives (c'est horrible d'avoir une ligne très compressée suivie d'une ligne très dilatée).

    La méthode qu'utilise TeX pour trouver les points de césure est décrite dans l'appendice H. Elle est basée sur un modèle un peu compliqué basé sur des n-grammes et des valeurs numériques qui indiquent les bons ou mauvais points de césures... par exemple u1pe et 2id Quoiqu'il en soit Liang, dont parle Knuth dans son livre, arrive à construire 4447 de ces n-grammes qui permettent de couper correctement 89.3% des 115000 mots de la langue anglaise de son dictionnaire des césures, c'est à dire trouver 89,3% de tous les points de césure du dictionnaire, sans en créer de faux. On peut ensuite parfaire l'algorithme en ajoutant un petit dictionnaire d'exceptions. L'avantage de cette méthode (par rapport au dictionnaire) est qu'elle s'adapte bien aux évolutions de langue comme les néologismes ou les emprunts, surtout si la langue de l'emprunt est proche de l'anglais (comme le français par exemple). Il y a des dictionnaires de ngrammes pour beaucoup de langues, et ils sont tous dans TeXlive.

    Mon grain de sel un peu moins dans le sujet est que le shell n'aime pas trop les boucles du genre

    for letter in $(print_many_letters); do
     ...
    done

    alors que

    print_many_letters | {
     while read letter; do
     ...
     done
    }

    est plus robuste.

    Il y a aussi les petits cat ... | grep par exemple qui s'écrivent mieux grep < .... (Oui j'ai déjà eu le message d'erreur ssh: fork failed, cannot create process :-) )