AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 532631
Accepted
Soulthym
Soulthym
Asked: 2019-07-29 12:16:13 +0800 CST2019-07-29 12:16:13 +0800 CST 2019-07-29 12:16:13 +0800 CST

格罗夫算术

  • 772

是否可以使用 groff 进行算术运算?
假设我想计算当前页面是哪一页,而我目前在第 2 页。我可以使用以下方法获取下一页的编号:

.PP
Next page is number \n[.pn]

这将编译为Next page is number 3.

我怎样才能执行算术来渲染:

.PP
Current page is ((\n[.pn]-1))

进入Current page is 2?

groff arithmetic
  • 2 2 个回答
  • 221 Views

2 个回答

  • Voted
  1. Best Answer
    Mark Plotnick
    2019-07-30T11:47:22+08:002019-07-30T11:47:22+08:00

    当前页码为\n%。

    要插入算术表达式的结果,我认为您需要先将其放入数字寄存器中。

    这是一个宏(未经过详尽测试),它以表达式作为参数,将结果分配给(可能未使用的)名为 的寄存器__,然后对寄存器的内容进行插值。

    Current page is \n%.
    .br
    .\" EI - eval and interpolate
    .\" $1 is an expression to evaluate
    .\" $2 (optional) is a string to append to the interpolated expression,
    .\"    without any intervening whitespace
    .de EI
    .nr __ \\$1
    \&\\n(__\\$2
    ..
    .nr x 4
    4 times 3 minus 5 is
    'EI (\nx*3-5)
    \&.
    .br
    Here there's no space before the period:
    'EI (\nx*3-5) .
    .br
    

    通过nroff运行后:

    Current page is 1.
    4 times 3 minus 5 is 7 .
    Here there's no space before the period: 7.
    

    这似乎是一件很常见的事情,标准宏包中可能已经有一个类似的宏,但我不知道。

    • 3
  2. cas
    2019-07-29T17:45:34+08:002019-07-29T17:45:34+08:00

    是的,groff可以进行算术运算。这记录在完整的 groff 手册中,该手册可在线获取或以 GNU 信息格式(使用info groff,或pinfo groff查看完整手册)......与许多 GNU 程序一样,手册页只是一个快速参考,完整的文档是信息格式。

    来自https://www.gnu.org/software/groff/manual/html_node/Expressions.html

    gtroff 拥有大多数其他语言共有的算术运算符:

    • 算术:'+'(加),'-'(减),'/'(除),'*'(乘),'%'(模)。

    gtroff 只提供整数运算。用于计算结果的内部类型是“int”,通常是 32 位有符号整数。

    • 比较:'<'(小于)、'>'(大于)、'<='(小于或等于)、'>='(大于或等于)、'='(等于)、'== '(与 '=' 相同)。

    • 逻辑:'&'(逻辑与)、':'(逻辑或)。

    • 一元运算符:'-'(取反,即改变符号)、'+'(只是为了完整性;在表达式中什么都不做)、'!' (逻辑上不是;这只适用于 if 和 while 请求)。有关在运动请求中使用一元运算符的信息,请参见下文。

    如上所述,逻辑非运算符仅适用于 if 和 while 请求。此外,它可能只出现在表达式的开头,并否定整个表达式。

    试图插入“!” 表达式中的运算符会导致“预期的数字表达式”警告。这保持了与旧版本 troff 的兼容性。

    例子:

    .nr X 1
    .nr Y 0
    .\" This does not work as expected
    .if (\n[X])&(!\n[Y]) .nop X only
    .
    .\" Use this construct instead
    .if (\n[X]=1)&(\n[Y]=0) .nop X only
    

    顺便说一句,info是标准的 GNU Info 文档查看器。 pinfo是另一种查看器,它提供更“类似浏览器”的 UI,类似于文本 Web 浏览器,如lynx. 我个人受不了info,pinfo改用。它可用于大多数发行版的预打包,源代码可在上面的 pinfo 链接中找到。

    • 2

相关问题

  • groff "me" 宏,但对标题等使用无衬线字体

  • bash 算术扩展似乎容易受到注入攻击

  • 带文件的算术序列

  • 在对话框上显示变量--msgbox

  • bash 可以在不使用外部命令的情况下进行浮点运算吗?[复制]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve