首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >宏期间未定义的groff寄存器

宏期间未定义的groff寄存器
EN

Unix & Linux用户
提问于 2020-01-13 19:05:13
回答 1查看 122关注 0票数 0

上下文:

假设我试图在groff中编写一个宏,以便绘制一个给定参数的矩形(例如宽度和高度)。为此,我需要执行一些简单的算法,以便存储在寄存器中以提高可读性。

如何复制

在任何普通的groff文档中,我只需使用:

代码语言:javascript
复制
.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中并按如下方式调用它时,它会在文档上打印它:

代码语言:javascript
复制
.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

它根据文档( 0man 7 groffinfo groff)打印man groff,这是新寄存器的默认值。

如何编译

我使用以下脚本编译它:

代码语言:javascript
复制
groff -kep "$file" -Tpdf > "$file.pdf"

我做错了什么?甚至可以在宏内部使用寄存器吗?我怎么发动汽车呢?

EN

回答 1

Unix & Linux用户

发布于 2020-12-08 12:23:42

是的,可以在宏中使用寄存器,但您必须告诉troff等待计算在调用宏时要计算的值,而不是定义的值。

因此,您必须在请求宏定义中的寄存器值的行前面转义反斜杠,最后以

代码语言:javascript
复制
.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

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/561913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档