mdoc 매크로를 인라인으로 호출할 수 있나요?

mdoc 매크로를 인라인으로 호출할 수 있나요?

의 많은 편리함에도 불구하고 mdoctroff의 구문은 다른 언어에 비해 여전히 줄바꿈이 너무 많거나 "스파게티"와 같습니다. 다음 예를 고려하십시오.

.Sh DESCRIPTION
The
.Nm
utility extracts C interface descriptions from a header file composed
using the SQLite documentation syntax (see
.Sx SYNTAX ) .
It then emits the corresponding set of
.Xr mdoc 7
manpages, one per interface description.
By default,
.Nm
reads from standard input and outputs files into the current directory.
Its arguments are as follows:

목록을 시작하는 단락에 대한 이 모든 줄은 나에게 매우 이상합니다. 매크로를 인라인으로 호출하는 방법이 있나요?


내가 시도한 것은 문자열, 전환 및 매크로가 공유 네임스페이스에 저장되어 있다고 groff의 매뉴얼에 나와 있기 때문에 문자열 구문을 사용하여 매크로를 호출하는 것입니다. 이것은 나를 어딘가에 .if데려다 주지만,매크로 시작 시결국 처리되지 않고 생으로 뱉어집니다.

.Sh DESCRIPTION
The \*[Nm] utility extracts C interface descriptions from a header file composed
using the SQLite documentation syntax (see \*[Sx SYNTAX]).
It then emits the corresponding set of \*[Xr mdoc 7] manpages, one per interface
description. By default, \*[Nm] reads from standard input and outputs files into
the current directory.
Its arguments are as follows:

그런 다음 개행 문자를 삽입하기 위해 다른 문자열 정의를 추가하려고 했습니다. .ds n \!제대로 작동하지 않았고 결국 기분 전환이되었습니다.

.box n
\!
.box

.Sh DESCRIPTION
The \*n\*[Nm] utility extracts C interface descriptions... (see \*n\*[Sx SYNTAX]).
It then...

이제 .if스팸은 사라졌지만 불행하게도 출력물에 실제 개행 문자가 표시됩니다. 이러한 매크로를 호출하는 더 완벽한 방법이 있습니까? (mandoc 호환성에 대해서는 나중에 생각해 보겠습니다.)

부록:

  • "see SYNTAX" 비트를 추가하면 개행 문자는 후행 공백만 생성 .Nm하므로 매크로 에 내재된 것으로 보입니다 . .Sx그래도 둘 다 제거할 수 있을까요?
  • 뒤에 공백을 제거하면 \*n\*[Nm]추가 개행 문자가 사라지지만 소스에서는 이상해 보입니다. 원본과 같이 호출하면 개선되지만 어떻게든 단락 나누기도 생성 됩니다 SYNTAX.\n*[Sx Syntax ) .]

답변1

sed이를 위해 스크립트를 작성하는 것이 좋습니다 .

예를 들어 에 대해 다음으로 변환할 eqn스크립트가 있습니다 .myeqn.EA.EN\n.EQ

#!/bin/sed -f

s/^\. *EA\(.*\)$/.EN\n.EQ \1/g

그런 다음 이것을 실행합니다.

myeqn < file.ms | groff -e -ms > main.ps

필요한 경우 Makefile을 사용하여 이를 자동화할 수 있습니다.

추신: Groff의 개행 문자는 익숙해지지만 잠시 후에 그 가치를 인식하기 시작합니다.

관련 정보