web-dev-qa-db-ja.com

マニュアルページにコードサンプルを適切に挿入する

ソフトウェアのマニュアルページを作成しようとしていますが、いくつかのコードスニペットを含めたいと思います。私は現在、カスタムメイドの。SAMPLEマクロの一部として。RSおよび。REマクロを使用していますが、何らかの理由で使用していません動作しません。これがmanページです:

.TH MYMANPAGE 1 

.de SAMPLE
.br
.RS
.nf
.nh
..
.de ESAMPLE
.hy
.fi
.RE
..

.SH TEST SECTION HEADING
This is a test section heading.
.TP
.B Test Paragraph Label
This is some test paragraph text. This is some test paragraph text. This
is some test paragraph text. This is some indented test code:
.SAMPLE
int main(void) {
   return 42;
}
.ESAMPLE
This is more text after the test code. This is more text after the test
code.

最終的に発生するのは、。ESAMPLEの後のテキストが段落テキストほどインデントされていないことです。代わりに、段落ラベルと並んでいます。 。[E] SAMPLEマクロ定義を適切に使用するとどうなりますか。TP

2
Meta

.REは、現在の.TPインデントレベルではなく、デフォルトのインデントレベルを復元します。 .RSが呼び出されたときに、実際のインデントを保存して復元するだけです。以下の修正は、SAMPLEsをSAMPLEs内にネストしないことを前提としています。

.de SAMPLE
.br
.nr saveIN \\n(.i   \" double the backslash when defining a macro
.RS
.nf
.nh
..
.de ESAMPLE
.hy
.fi
.RE
.in \\n[saveIN]u    \" 'u' means 'units': do not scale this number 
..

$ man ./i
[...]
Test Paragraph Label
  This  is  some  test paragraph text. This is some test paragraph
  text. This is some test paragraph text. This  is  some  indented
  test code:
  int main(void) {
     return 42;
  }
  This  is  more text after the test code. This is more text after
  the test code.
4
Ian D. Allen