假设我试图在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 7 groff和info groff)打印man groff,这是新寄存器的默认值。
如何编译
我使用以下脚本编译它:
groff -kep "$file" -Tpdf > "$file.pdf"我做错了什么?甚至可以在宏内部使用寄存器吗?我怎么发动汽车呢?
发布于 2020-12-08 12:23:42
是的,可以在宏中使用寄存器,但您必须告诉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。
https://unix.stackexchange.com/questions/561913
复制相似问题