web-dev-qa-db-ja.com

Gnunroff-行の先頭にドットが付いた行を出力します

自己複製プログラム( "quine")をraw(マクロなし)で書き込もうとしましたGNU nroff。確かに、これは無意味で風変わりですが、そうではありません。以前に行われたようです。私はそうしませんでした。

マクロなしのnroff入力言語クインの作成に成功した人は誰でも、文字列、マクロ、または「ボックス」を定義する必要があると確信しています。これを行うには、次のようなリクエストを作成する必要があります。

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

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

クインは(不正行為をせずに)ソースコードを出力するだけなので、出力にはおそらく「。」が必要です。いくつかの出力行の最初の文字として。

いったいどうやってGNU nroffを取得して、行の先頭に「。」文字を出力するのですか?私が知る限り、間接参照やエスケープを行うことはできません。行の先頭に「。」を出力する隠しリクエストはありますか?

Groff1.22.3がインストールされている最近同期されたArchLinuxを使用しています。

3
Bruce Ediger

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
thrig

.trを使用して翻訳を設定できます。これは、からへの翻訳に文字のペアを使用します。例:#.に翻訳する:

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

を生成します

...abc...
1
meuh