私はマクロのない生のGNUを使って独自のレプリケーションプログラム( "quine")を作成しようとしていますnroff
。もちろん、これは無意味で奇妙ですが、以前は行われたことがないようです。私はこれをしませんでした。
nroff
文字列、マクロ、または「ボックス」を定義するために必要なマクロレス入力言語クイーンを正常に作成した人が誰であるかを確認してください。これを行うには、次の要求を作成する必要があります。
.as s "just assigned this to string s
.de xxx
.nop "\*s"
..
.xxx
つまり、nroff
入力のすべての要求には「.」があります。行の先頭に。
quinesは単にソースコードを出力するので(不正行為なし)、出力に「.」が必要になる場合があります。複数の出力ラインの最初の文字として使用されます。
一体どのようにGNUのnroff
行の先頭に"。"文字を出力させますか?私が知る限り、これを行うことができる間接的な方法や脱出方法はありません。行の先頭に「.」を出力する隠し要求はありますか?
私は、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!
これがQuinnのニーズにどのような影響を与えるかはわかりませんが...
答え2
.tr
一対の文字を使用してからに翻訳する翻訳を設定できます。たとえば、次のよう#
に翻訳されます.
。
nroff <<\!
.tr #.
###abc...
!
生産する
...abc...