如何使用“.RB”和“.IR”防止选项和参数之间出现换行?

如何使用“.RB”和“.IR”防止选项和参数之间出现换行?

在编写命令的手册页时,概要包含:

.RB [ \-v
.IR version ]

不幸的是,在格式化概要时,“[-v”和“版本]”之间有一个换行符。

我怎样才能避免这种情况?

添加显而易见的内容

根据多次要求,由于缺乏想象力,这里有一个较长的示例输入,以及显示问题的屏幕截图: 格式化示例的屏幕截图(突出显示问题区域)

这是来源:

.TH FOOBAR-DEMO 8 2022-03-16 "Charlie Brown" "System Administration"
.\"
.SH NAME
foobar-demo \- demonstration of manual formatting
.\"
.SH SYNOPSIS
.na
.nr hy-mode-save \n[.hy]
.hy 0
.B foobar-demo123
.RB [ \-a
.IR match_spec ]
.RB [ \-\-resource-agent
.IR match_spec ]
.RB [ \-v
.IR version ]
.RB [ \-\-version
.IR version ]
.hy \n[hy-mode-save]
.ad b
.\"
.SH DESCRIPTION
The purpose of this page is none...

答案1

Thomas Dickey 有一个正确的(且可移植的)解决方案,但和您一样,我发现由于字体选择转义序列,它有点不引人注目。我更喜欢男人(7) 的字体样式宏。

此外,\(反斜杠-空格)转义序列可以丑陋是因为它牢不可破的空间是固定宽度的;在正在调整的线路上,这种情况可能会很明显并且令人不舒服。

因此,我建议使用输出行继续转义序列\c来允许输入行结束,而不会导致插入可破坏的空格,以及\~使用转义序列来插入不可破坏但可调整的空间。

您已在示例中关闭了调整,但这并不是必需的,正如我将展示的那样。通过使用\~,可以在概要的各行之间均匀地进行调整,而不会引起问题。此转义序列可移植到所有当前维护的特罗夫除了 Illumos 中的项目。 格罗夫(至少)从 1991 年开始就有,Heirloom Doctools 从 2005 年 9 月开始就有,曼多克(这不是一个特罗夫但确实解析手册页)自 2009 年 9 月以来,尼特罗夫自 2016 年 9 月起,以及来自用户空间的计划 9特罗夫截至 2022 年 8 月。

在您的示例中,您使用了格罗夫注册.hy格罗夫的扩展插值语法来实现它。如果您正在使用格罗夫,您可能需要考虑它的SY/YS扩展男人(7) 用于设置命令概要的宏包。2 (这些宏还可以为您保存和恢复连字符模式。)

.TH FOOBAR-DEMO 8 2022-03-16 "Charlie Brown" "System Administration"
.\"
.SH NAME
foobar-demo \- demonstration of manual formatting
.\"
.SH SYNOPSIS
.B foobar\-demo123 \" I escaped this hyphen as well.
.RB [ \-a\~\c
.IR match_spec ]
.RB [ \-\-resource-agent\~\c
.IR match_spec ]
.RB [ \-v\~\c
.IR version ]
.RB [ \-\-version\~\c
.IR version ]
.\"
.SH DESCRIPTION

答案2

宏会妨碍你。您可以使用转义空格(不会分割行)来解决该问题,如下所示:

.TH FOOBAR-DEMO 8 2022-03-16 "Charlie Brown" "System Administration"
.\"
.SH NAME
foobar-demo \- demonstration of manual formatting
.\"
.SH SYNOPSIS
.na
.nr hy-mode-save \n[.hy]
.hy 0
.B foobar-demo123
\fB[\-a\ \fImatch_spec\fR]
\fB[\-\-resource-agent\ \fImatch_spec\fR]
\fB[\-v\ \fIversion\fR]
\fB[\-\-version\ \fIversion\fR]
.hy \n[hy-mode-save]
.ad b
.\"
.SH DESCRIPTION
The purpose of this page is none...

答案3

最有可能的是,行中包含 CRLF,而不是 LF。

相关内容