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

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

troff의 많은 편리함에도 불구하고 mdoc, 나는 troff의 구문이 다른 언어에 비해 여전히 너무 줄 바꿈되거나 "스파게티"적이라는 것을 알았습니다. 다음 예를 고려하십시오.

.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을 사용하여 이 작업을 자동화할 수 있습니다.

PS Groff의 줄 바꿈은 익숙해지는 데 시간이 걸리지만 시간이 좀 지나면 그 가치를 느끼기 시작할 것입니다.

관련 정보