Scopo del formato di file "ASCII text, with overstriking"


46

Dopo aver scaricato il codice sorgente per Bash, stavo sfogliando la docdirectory e mi sono imbattuto nei seguenti file:

Questi caratteri di controllo non vengono visualizzati nella rappresentazione fornita dall'interfaccia Web di Git, ma il file effettivo può essere scaricato ed esaminato nell'editor di testo come Vim.

L'esecuzione del filecomando su bash.0stampa il seguente output:

bash.0: ASCII text, with overstriking

Non ho mai incontrato questo formato di file prima e mi chiedevo quale sia il suo scopo e come viene utilizzato. La ricerca nel Web della frase "testo ASCII, con sovrasterzo" non è stata molto illuminante.

Risposte:


14

Una ricerca web per "backspace" e "overstrike" otterrebbe risultati migliori.

Il file è una pagina di manuale formattata con nroff. Di solito i file come bash.0vengono semplicemente generati ed eliminati. Qualche tempo fa, sono stati salvati, per ridurre il lavoro per il manprogramma. Piuttosto che /usr/share/man/man1, le tue pagine di manuale verrebbero lette /usr/share/man/cat1. Leggi la descrizione di catmanper esempio.

nroffè il comando Unix per la formattazione di pagine di manuale e altri file. All'epoca in cui era stato scritto per la prima volta, c'erano diverse altre utility, ognuna con il proprio linguaggio di markup. Ne ho usate almeno una dozzina diverse. Ma hanno risolto tutti il ​​problema di stampare il testo enfatizzato allo stesso modo: usando il controllo carrello. Gli spazi posteriori sono evidenti perché non vengono utilizzati in altri file di testo normale. Tabs , ritorni a capo , line-feed e forma-alimenta tutti hanno un ruolo nel file di testo (anche se form-feed sono molto meno importante di quanto lo fossero in origine).

nroffusa la sottolineatura per indicare il corsivo e il sovrasterzo per indicare il grassetto . La tecnica è datata: è utile per dispositivi cartacei in cui è possibile stampare più di un carattere nella stessa posizione. Pochissimi terminali video lo fanno. In terminfo(5), sarebbe

   over_strike               os     os   terminal can over-
                                         strike

o più completamente :

Se il terminale overstrikes (piuttosto che di compensazione una posizione quando un personaggio viene colpito sopra), allora dovrebbe avere la os capacità.

Nel solito caso, l'ultimo carattere scritto su una determinata riga / colonna di un terminale video sarebbe tutto ciò che viene mostrato. nroffha organizzato l'output in modo che un carattere sottolineato sia stato scritto come sottolineatura, backspace e carattere reale. Ciò assicurava che i terminali senza la funzione di sovrasterzo stampassero qualcosa di utile.

Tra i pochissimi terminali video elencati che hanno la capacità di sovrasterzo , vedo il DEC gt40 , che ho usato per circa tre anni (1976-1979). Non c'era Unix su quel sistema (funzionava con RT-11), ma ho scritto un formattatore di testo , usando lo stesso tipo di testo sovrastato. Alla fine, avevo bisogno di una copia cartacea, e ho scritto un'utilità per farlo accadere - qualcosa del genere col, forse - ma risolvendo un problema correlato. Il terminale è stato stampato molto lentamente quando aveva molto testo sottolineato, fino a quando il mio programma non ha riorganizzato il testo per ridurre la quantità di passaggio dal movimento avanti / indietro.

Con i terminali video, non è necessario. Ma non fanno l'eccedenza. Invece, abbiamo programmi che riconoscono la sottolineatura e mostrano sottolineature, o che hanno groff, che potrebbero mostrare testo colorato invece di sottolineatura (e grassetto).

Ulteriori letture:


Grazie per la risposta esaustiva con un background storico interessante. È notte fonda per me, quindi lo leggerò bene domani. FWIW, in realtà ho votato a fondo la tua risposta sulla generazione di pagine man oggi, mentre stavo facendo ricerche sulla famiglia di formattatori di testo * roff.
Anthony G - giustizia per Monica,

43

Sovrascrivere è un metodo usato in nroff(vedi il documento di Troff ) per offrire più possibilità tipografiche di quanto il semplice ASCII consentirebbe:

  • testo in grassetto (sovrascrivendo lo stesso carattere)
  • testo sottolineato (sovrascrivendo _)
  • accenti e segni diacritici ( ad esempio é prodotti da sovraincisione econ )

e vari altri simboli, come consentito dal dispositivo di output di destinazione.

In bash, questi .0file sono prodotti direttamente da nroff, con Makefileregole come

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

È possibile visualizzare tali file usando less; elaborerà le sequenze di sovrasterzo e le sostituirà come appropriato:

less bash.0

nroffL'output originariamente mirava a dispositivi di output in stile macchina da scrivere, che eseguivano il backup ogni volta che ricevevano un carattere backspace; il sovraincisione produrrebbe l'output visivo desiderato. Come sottolineato da Chirlu , colpire due volte lo stesso personaggio di solito comporterebbe un aspetto più audace grazie all'inevitabile disallineamento dei colpi successivi; sarebbe utile anche l'aumento della quantità di inchiostro depositato.

( troffmacchine per la composizione mirata.)


Grazie per il collegamento al Manuale dell'utente di Troff e le informazioni su come vengono prodotti i file. Nella mia domanda, ho anche chiesto come questi file sono destinati ad essere utilizzati. Ho provato a funzionare nroff bash.0sul mio sistema Ubuntu ma ha prodotto una serie di avvisi, l'output è stato risolto con 65 caratteri e non c'era una formattazione speciale.
Anthony G - giustizia per Monica,

1
Ah sì, ho dimenticato quella parte; Ho modificato la mia risposta. nroffviene utilizzato per produrre questi file, non per visualizzarli.
Stephen Kitt,

2
Sì, ed è praticamente come man bashfunziona; utilizza nroff -manper elaborare il .1file (o qualsiasi sezione rilevante), che è un nrofffile, prima di inviarlo al cercapersone appropriato.
Stephen Kitt,

5
@Anthony Geoghegan: l'idea era di inviare questo file a una stampante ad impatto, come una stampante a margherita . In realtà stamperebbe un personaggio, quindi si sposta indietro, quindi stampa l'altro carattere, con i risultati descritti sopra. Il testo in grassetto è simile a un "effetto chorus" nell'elaborazione audio: il secondo carattere è leggermente disallineato con il primo, portando a linee più spesse.
Chirlu,

1
@chirlu Questa è una grande spiegazione di come i personaggi di controllo sono stati usati per ottenere effetti tipografici con hardware legacy. L'uso di quei personaggi particolari ha molto senso ora. Se lo pubblichi come risposta, posso votarlo correttamente. Modifica: Stephen ha già incorporato e ampliato su questo.
Anthony G - giustizia per Monica il

7

E anche prima, era un metodo di stampa su stampanti per palline da golf che funzionava come una vecchia macchina da scrivere e aveva un numero molto limitato di caratteri che potevano stampare. Quindi nroff usa il flusso di byte di una vecchia stampante di teletype per rappresentare come dovrebbe apparire "sullo schermo".


nroffin realtà è stato progettato inizialmente per stampare su macchine da scrivere, al contrario di troffquali tipografi mirati. L'utilizzo delle schermate per l'output è arrivato dopo ...
Stephen Kitt,

9
Sono abbastanza grande per aver usato una macchina da scrivere meccanica in cui hai digitato !digitando' BACKSPACE .
Barmar
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.