Inserindo corretamente amostras de código em páginas man

2

Estou tentando escrever uma página de manual para um software e gostaria de incluir alguns trechos de código. Atualmente, estou usando as macros .RS e .RE como parte de uma macro .SAMPLE personalizada, mas, por algum motivo, isso não não funciona. Aqui está a página 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.

O que acaba acontecendo é que o texto após .ESAMPLE não é indentado tanto quanto o texto do parágrafo. Em vez disso, está alinhado com o rótulo do parágrafo. Quais seriam as definições de macros . [E] SAMPLE adequadas para fazê-las funcionar com .TP ?

    
por Meta 16.10.2013 / 22:39

1 resposta

4

O .RE restaura o nível de recuo padrão, não o atual .TP nível de indentação. Tudo que você precisa fazer é salvar e restaurar o recuo em jogo quando .RS é chamado. A correção abaixo assume que você não aninhar SAMPLE s dentro de SAMPLE s:

.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.
    
por 17.10.2013 / 01:31

Tags