Gnu nroff: genera una línea con un punto al comienzo de la línea

Gnu nroff: genera una línea con un punto al comienzo de la línea

Intenté escribir un programa autorreplicante ("quine") en GNU sin formato (sin macros) nroff. Es cierto que esto es inútil y excéntrico, pero no parece que se haya hecho antes. No lo he logrado.

Estoy bastante seguro de que quien tenga éxito en escribir un nrofflenguaje de entrada sin macros necesitará definir cadenas, macros o "cuadros". Para hacer eso necesitas escribir solicitudes como:

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

Es decir, cada solicitud en nroffla entrada tiene un '.' al inicio de la línea.

Dado que quines simplemente genera su código fuente (sin hacer trampa), la salida probablemente deba tener '.' como primer carácter de varias líneas de salida.

¿Cómo diablos consigues que GNU nroffgenere un '.' carácter al comienzo de una línea? Hasta donde yo sé, ninguna medida indirecta o de escape puede lograrlo. ¿Hay alguna solicitud oculta que genere un '.' al comienzo de una línea?

Estoy usando Arch Linux recientemente sincronizado, que tiene instalado Groff 1.22.3.

Respuesta1

Demdoc(7)

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

Entonces:

\&.

Sin embargo, esto puede resultar complicado en combinación con líneas posteriores, ya que cosas como

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

Ejecutar juntos (y produce un montón de líneas en blanco)

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

Aunque puedes solucionarlo agregando una línea en blanco o posiblemente usando otras macros.

\&.

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

Aunque no sé cómo afectará eso a las necesidades de Quine...

Respuesta2

Puede configurar una traducción .trque requiera pares de caracteres para traducir de a a. Por ejemplo, traducir #a .:

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

produce

...abc...

información relacionada