我正在尝试使用指南来理解 .bst 文件的语法驯服野兽。首先,我想了解第 39 页上的乘法函数示例(第 33 至 35 页解释了 skip$ 和 if$ 函数):
函数中第一个赋值如下所示:
'a :=
其描述为“我们存储第一个值”。
我知道面向堆栈的编程和逆波兰表示法,但我自己从未真正编写过它们。这里的撇号起什么作用?它与“存储”有关吗?有时我还会看到前面带有撇号的函数(例如 skip$)。这是什么意思?
答案1
here'
表示a
BibTeX 不会尝试在这里求值,而是使用名称本身。它构造
'a :=
堆栈上会有一些整数(我们称之为1
),所以我们实际上有
#1 'a :=
这将把变量赋值a
为1
。如果我们没有'
,BibTeX 会尝试a
在这里求值。由于a
将被声明为整数,这意味着该值将在此处放入堆栈中。因此,类似
#1 'a :=
#2 a =
{ } % True code
{ } % False code
if$
有效(这里是错误的):第二次使用a
将值插入到袋子中,以便我们可以进行比较。
该'
语法还用于避免需要在条件语句中的一步分支周围使用括号组。它用于以下结构中
[test]
'skip$ % True branch
{ } % False branch
if$
最常见的是skip$
(不执行任何操作)或pop$
(从堆栈中弹出顶部项)。如果没有'
和{ }
组,BibTeX 会在错误的时间尝试执行该函数,并会导致奇怪的错误。(当然,这里可以使用括号组来实现所需的结果。)基本概念与第一种情况相同:将引用的内容放在堆栈上。