Gnu Nroff - eine Zeile mit einem Punkt am Zeilenanfang ausgeben

Gnu Nroff - eine Zeile mit einem Punkt am Zeilenanfang ausgeben

ich habe versucht, ein selbstreplizierendes Programm („quine“) in reinem GNU (ohne Makros) zu schreiben nroff. Zugegeben, das ist sinnlos und exzentrisch, aber es scheint noch nie zuvor gemacht worden zu sein. Mir ist es nicht gelungen.

Ich bin mir ziemlich sicher, dass jeder, der erfolgreich eine Quine für die Eingabesprache ohne Makros schreiben kann, nroffZeichenfolgen, Makros oder „Boxen“ definieren muss. Dazu müssen Sie Anfragen wie diese schreiben:

.as s "just assigned this to string s
.de xxx
.nop "\*s"
..
.xxx

Das bedeutet, dass jede Anforderung in nroffder Eingabe einen „.“ am Zeilenanfang hat.

Da Quines einfach ihren Quellcode ausgibt (ohne zu schummeln), muss die Ausgabe wahrscheinlich „.“ als erstes Zeichen mehrerer Ausgabezeilen enthalten.

Wie um Himmels Willen bringt man GNU nroffdazu, am Anfang einer Zeile ein '.'-Zeichen auszugeben? Soweit ich weiß, ist das weder durch Indirektion noch durch Escapezeichen möglich. Gibt es eine versteckte Abfrage, die am Anfang einer Zeile ein '.' ausgibt?

Ich verwende das kürzlich synchronisierte Arch Linux, auf dem Groff 1.22.3 installiert ist.

Antwort1

Ausmdoc(7)

The special meaning of a punctuation character may be escaped with the string ‘\&’

Also:

\&.

Dies kann jedoch in Kombination mit nachfolgenden Zeilen schwierig sein, da Dinge wie

\&.
\&.as s "nron, nroff--very good, again!

Zusammenlaufen (und erzeugt eine ganze Reihe von Leerzeilen)

$ nroff blah | head -2
.  .as s "nron, nroff‐‐very good, again!

Sie können das jedoch beheben, indem Sie eine Leerzeile hinzufügen oder möglicherweise andere Makros verwenden

\&.

\&.as s "nron, nroff--very good, again!

Allerdings weiß ich nicht, wie sich das auf die Bedürfnisse von Quine auswirken wird ...

Antwort2

Sie können eine Übersetzung einrichten, bei .trder Zeichenpaare zur Übersetzung von-nach verwendet werden. Zum Beispiel zur Übersetzung #nach .:

nroff <<\!
.tr #.
###abc...
!

produziert

...abc...

verwandte Informationen