groff レジスタはマクロ中に定義されていません。

groff レジスタはマクロ中に定義されていません。

コンテキスト:

幅や高さなどのいくつかのパラメータが与えられた場合は、正方形を描くマクロを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 groffman 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この場合は次のようになります。

関連情報