Objet du format de fichier «Texte ASCII, avec surimpression»

46

Après avoir téléchargé le code source de Bash, je parcourais le docrépertoire et tombai sur les fichiers suivants:

Ces caractères de contrôle ne sont pas affichés dans la représentation fournie par l'interface Web de Git, mais le fichier réel peut être téléchargé et examiné dans un éditeur de texte tel que Vim.

L'exécution de la filecommande sur bash.0imprime la sortie suivante:

bash.0: ASCII text, with overstriking

Je n'avais jamais rencontré ce format de fichier auparavant et je me demandais quel était son but et comment il était utilisé. Rechercher sur le Web la phrase «Texte ASCII avec surimpression» n'a pas été très instructif.

Anthony G - justice pour Monica
la source

Réponses:

14

Une recherche sur le Web pour "backspace" et "surimpression" donnerait de meilleurs résultats.

Le fichier est une page de manuel - formatée avec nroff. Habituellement, les fichiers tels que bash.0sont simplement générés et ignorés. Il y a quelque temps, ils ont été sauvés, afin de réduire le travail pour le manprogramme. Plutôt que de /usr/share/man/man1lire vos pages de manuel /usr/share/man/cat1. Lire la description de catmanpar exemple.

nroffest la commande Unix pour formater les pages de manuel et d’autres fichiers. À l'époque de sa première écriture, il existait plusieurs autres utilitaires, chacun avec son propre langage de balisage. J'ai utilisé au moins une douzaine de différents. Mais ils ont tous résolu le problème de l’impression de texte souligné de la même manière: en utilisant le contrôle chariot. Les espaces de retour ne sont visibles que parce qu'ils ne sont pas utilisés dans d'autres fichiers en texte brut. Onglets , retours chariot , sauts de ligne- et forme des flux ont tous un rôle dans des fichiers texte (bien-forme des aliments sont beaucoup moins importants qu'ils ne l' étaient à l' origine).

nroffutilise le soulignement pour indiquer les italiques et le surligneur pour indiquer les caractères gras . La technique est datée: elle est utile pour les appareils de copie papier où plusieurs caractères peuvent être imprimés dans la même position. Très peu de terminaux vidéo font cela. Dans terminfo(5), ce serait

   over_strike               os     os   terminal can over-
                                         strike

ou plus complètement :

Si le terminal frappe excessivement (plutôt que de dégager une position lorsqu'un personnage est renversé ), il devrait en avoir la os capacité.

Dans le cas habituel, le dernier caractère écrit sur une ligne / colonne donnée d'un terminal vidéo serait tout ce qui est affiché. nrofforganisé la sortie de sorte qu'un caractère souligné soit écrit comme soulignement, un retour arrière et le caractère réel. Cela garantissait que les terminaux sans fonction de superposition imprimaient quelque chose d’utile.

Parmi les rares terminaux vidéo répertoriés qui ont la capacité de surimpression, je vois le DEC gt40 , que j'ai utilisé pendant environ trois ans (1976-1979). Il n'y avait pas d'Unix sur ce système (il utilisait la RT-11), mais j'ai écrit un formateur de texte utilisant le même type de texte en surimpression. En fin de compte, j’avais besoin d’une copie papier et j’ai écrit un utilitaire pour y arriver - quelque chose du genre col, peut-être - mais en résolvant un problème connexe. Le terminal imprimait très lentement quand il y avait beaucoup de texte souligné, jusqu'à ce que mon programme réorganise le texte afin de réduire le nombre de commutations entre les mouvements aller / retour.

Avec les terminaux vidéo, cela n’est pas nécessaire. Mais ils ne font pas trop de grève. Au lieu de cela, nous avons des programmes qui reconnaissent le soulignement et montrent le soulignement, ou ont groff, qui pourraient montrer du texte coloré au lieu du soulignement (et en gras).

Lectures complémentaires:

Thomas Dickey
la source
Merci pour la réponse complète avec un contexte historique intéressant. Il est tard dans la nuit pour moi alors je vais le lire correctement demain. FWIW, j’ai en fait voté votre réponse sur la création de pages de manuel plus tôt aujourd’hui, alors que je recherchais la famille * roff de formateurs de texte.
Anthony G - justice pour Monica Le
43

La superposition est une méthode utilisée nroff(voir l' article de Troff ) pour offrir davantage de possibilités typographiques que ne le permet l'ASCII ordinaire:

  • texte en gras (en surimprimant le même caractère)
  • texte souligné (en surimpression _)
  • accents et signes diacritiques ( par exemple, é produits en surchargeant eavec )

et divers autres symboles, comme le permet le périphérique de sortie cible.

En bash, ces .0fichiers sont produits directement par nroff, avec des Makefilerègles telles que

.1.0:
        $(RM) $@
        -${NROFF} -man $< > $@

Vous pouvez visualiser ces fichiers en utilisant less: il traitera les séquences en surbrillance et les remplacera au besoin:

less bash.0

A l'origine nroff, les périphériques de sortie de type machine à écrire ciblés en sortie, étaient sauvegardés chaque fois qu'ils recevaient un caractère de retour arrière; une surenchère produirait la sortie visuelle souhaitée. Comme le soulignait Chirlu , frapper deux fois le même personnage aurait généralement pour résultat une apparence plus hardie grâce au désalignement inévitable des frappes successives. l'augmentation de la quantité d'encre déposée aiderait également.

( troffmachines à composer ciblées.)

Stephen Kitt
la source
Merci pour le lien vers le manuel de l'utilisateur Troff et les informations sur la manière dont les fichiers sont produits. Dans ma question, j'ai également demandé comment ces fichiers devaient être utilisés. J'ai essayé de fonctionner nroff bash.0sur mon système Ubuntu mais cela a généré un certain nombre d'avertissements, la sortie était encapsulée à 65 caractères et il n'y avait pas de formatage spécial.
Anthony G - justice pour Monica
1
Ah oui, j'ai oublié cette partie; J'ai édité ma réponse. nroffest utilisé pour produire ces fichiers, pas pour les visualiser.
Stephen Kitt
2
Oui, et c'est à peu près comme ça man bashmarche; il utilise nroff -manpour traiter le .1fichier (ou toute section pertinente), qui est un nrofffichier, avant de le transmettre au pageur approprié.
Stephen Kitt
5
@ Anthony Geoghegan: L'idée était que vous envoyiez ce fichier à une imprimante à impact, telle qu'une imprimante à marguerite . En fait, il imprimerait un caractère, puis reculerait, puis imprimerait l'autre caractère, avec les résultats décrits ci-dessus. Le texte en gras est similaire à un «effet de chorus» dans le traitement audio: le deuxième caractère est très légèrement mal aligné avec le premier, ce qui donne des lignes plus épaisses.
Chirlu
1
@ chirlu C'est une excellente explication de la façon dont les caractères de contrôle ont été utilisés pour obtenir des effets typographiques avec du matériel existant. L'utilisation de ces personnages particuliers a beaucoup de sens maintenant. Si vous postez ceci comme une réponse, je peux le voter correctement. Edit: Stephen a déjà incorporé et développé cela.
Anthony G - justice pour Monica le
7

Et même plus tôt, c’était une méthode d’impression sur des imprimantes de balle de golf qui fonctionnait comme une vieille machine à écrire et dont le nombre de caractères à imprimer était très limité. Donc, nroff utilise le flux d'octets d'une ancienne imprimante télétype pour représenter comment doit apparaître "à l'écran".

dsz
la source
nroffa été conçu à l’origine pour imprimer sur des machines à écrire, par opposition à des machines à écrire troffciblées. L'utilisation des écrans pour la sortie est venue plus tard ...
Stephen Kitt
9
Je suis assez vieux pour avoir utilisé une machine à écrire mécanique où vous avez tapé !en tapant' BACKSPACE .
Barmar