Gnu nroff - вывести строку с точкой в ​​начале строки

Gnu nroff - вывести строку с точкой в ​​начале строки

Я пытался написать самовоспроизводящуюся программу ("quine") в чистом (без макросов) GNU nroff. Конечно, это бессмысленно и эксцентрично, но, похоже, этого никто раньше не делал. Мне это не удалось.

Я почти уверен, что тот, кто преуспеет в написании языка ввода без макросов nroffquine, должен будет определить строки, макросы или "ящики". Для этого вам нужно написать запросы типа:

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

То есть каждый запрос во nroffвходных данных имеет «.» в начале строки.

Поскольку квайны просто выводят свой исходный код (без мошенничества), вывод, вероятно, должен содержать «.» в качестве первого символа нескольких выходных строк.

Как, черт возьми, заставить GNU nroffвыводить символ '.' в начале строки? Никакое количество косвенных ссылок или экранирований не может сделать этого, насколько я могу судить. Есть ли какой-то скрытый запрос, который выводит '.' в начале строки?

Я использую недавно синхронизированный Arch Linux, на котором установлен Groff 1.22.3.

решение1

Отmdoc(7)

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

Так:

\&.

Однако это может быть сложно в сочетании с последующими строками, такими как

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

Запускаются вместе (и создают целую кучу пустых строк)

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

Хотя это можно исправить, добавив пустую строку или, возможно, используя другие макросы.

\&.

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

Хотя я не знаю, как это повлияет на потребности квине...

решение2

Вы можете настроить перевод, при .trкотором для перевода из-в используются пары символов. Например, для перевода #в .:

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

производит

...abc...

Связанный контент