문맥:
너비와 높이와 같은 일부 매개변수가 주어지면 사각형을 그리는 매크로를 groff에서 작성하려고 한다고 가정해 보겠습니다. 이렇게 하려면 가독성을 위해 레지스터에 저장하려는 간단한 산술 연산을 수행해야 합니다.
재생산 방법
일반적인 groff 문서에서는 다음을 사용할 수 있습니다.
.nr a 1 \"creates a number register with the name a and the value 1
\n[a] \"prints the content of register a
문서에 인쇄되지만 1
매크로에 넣고 다음 MACRO
과 같이 호출하면 다음과 같습니다.
.de MACRO \"defines a new macro with name MACRO
.nr a 1 \"creates a number register with the name a and the value 1
\n[a] \"prints the content of register a
.. \"end of MACRO definition
.MACRO \"calls MACRO
0
문서( man groff
, man 7 groff
및 info groff
)에 따르면 이는 새 레지스터의 기본값인 인쇄됩니다.
어떻게 컴파일되는지
다음 스크립트를 사용하여 컴파일합니다.
groff -kep "$file" -Tpdf > "$file.pdf"
내가 뭘 잘못했나요? 매크로 내에서 레지스터를 사용할 수 있습니까? 어떻게 해야 합니까?
답변1
예, 매크로 내에서 레지스터를 사용할 수 있지만 매크로가 실행되는 동안 값이 평가될 때까지 기다리도록 troff에게 지시해야 합니다.라고, 바꾸다한정된.
따라서 매크로 정의에서 레지스터 값을 요청하는 줄 앞의 백슬래시를 이스케이프해야 합니다.
.de MACRO \"defines a new macro with name MACRO
.nr a 1 \"creates a number register with the name a and the value 1
\\n[a] \"prints the content of register a
.. \"end of MACRO definition
.MACRO \"calls MACRO
이렇게 하면 매크로에 지정된 값이 인쇄되므로 1
이 경우에는 다음과 같습니다.