尝试理解 .bst 语法

尝试理解 .bst 语法

我正在尝试使用指南来理解 .bst 文件的语法驯服野兽。首先,我想了解第 39 页上的乘法函数示例(第 33 至 35 页解释了 skip$ 和 if$ 函数):

函数中第一个赋值如下所示:

'a :=

其描述为“我们存储第一个值”。

我知道面向堆栈的编程和逆波兰表示法,但我自己从未真正编写过它们。这里的撇号起什么作用?它与“存储”有关吗?有时我还会看到前面带有撇号的函数(例如 skip$)。这是什么意思?

答案1

here'表示aBibTeX 不会尝试在这里求值,而是使用名称本身。它构造

'a :=

堆栈上会有一些整数(我们称之为1),所以我们实际上有

#1 'a :=

这将把变量赋值a1。如果我们没有',BibTeX 会尝试a在这里求值。由于a将被声明为整数,这意味着该值将在此处放入堆栈中。因此,类似

#1 'a :=
#2 a =
   { } % True code
   { } % False code
 if$

有效(这里是错误的):第二次使用a将值插入到袋子中,以便我们可以进行比较。


'语法还用于避免需要在条件语句中的一步分支周围使用括号组。它用于以下结构中

[test]
  'skip$ % True branch
  { }    % False branch
if$

最常见的是skip$(不执行任何操作)或pop$(从堆栈中弹出顶部项)。如果没有'{ }组,BibTeX 会在错误的时间尝试执行该函数,并会导致奇怪的错误。(当然,这里可以使用括号组来实现所需的结果。)基本概念与第一种情况相同:将引用的内容放在堆栈上。

相关内容