Правильно вставлять образцы кода в man-страницы

Я пытаюсь написать справочную страницу для программного обеспечения и хотел бы включить некоторые фрагменты кода. Я в настоящее время использую макросы .RS и .RE как часть пользовательского макроса .SAMPLE , но по какой-то причине это не работает. Вот страница 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 ?

Параметр .RE восстанавливает уровень отступа по умолчанию, а не текущий уровень отпечатка .TP . Все, что вам нужно сделать, это сохранить и восстановить фактический отступ в игре, когда вызывается .RS . Исправление ниже предполагает, что вы не будете вставлять SAMPLE в 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.