Gnu nroff - 行頭にドットがある行を出力する

Gnu nroff - 行頭にドットがある行を出力する

私は、生の(マクロなしの)GNU で自己複製プログラム(「quine」)を書こうとしましたnroff。確かに、これは無意味で風変わりですが、これまでに行われたことがないようです。私は失敗しました。

マクロなしのnroff入力言語 quine の作成に成功する人は、文字列、マクロ、または「ボックス」を定義する必要があると確信しています。そのためには、次のような要求を記述する必要があります。

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

つまり、nroff入力内のすべてのリクエストの行の先頭には「.」が付きます。

quines はソース コードを出力するだけなので (不正行為は行いません)、出力には複数の出力行の最初の文字として '.' が含まれる可能性があります。

一体どうしたら GNUnroffで行頭に '.' 文字を出力させることができるのでしょうか? 私の知る限り、間接参照やエスケープをいくら使ってもそれはできません。行頭に '.' を出力する隠れた要求があるのでしょうか?

私は最近同期した、Groff 1.22.3 がインストールされた Arch Linux を使用しています。

答え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...

関連情報