我正在尝试阅读.bst
来自驯服野兽在第 38 页上,有一个and
函数示例:
FUNCTION {and}
{ 'skip$
{ pop$ #0 }
if$
}
'
前面的 起什么作用skip
?
第 32 页第 34 条评论说道:
变量名是使用 STRINGS 或 INTEGERS 或 ENTRY 声明的名称。此外,它前面必须有一个单引号,这样 BibTeX 才能理解您指的是变量的名称而不是其值。例如,'label.
skip
这是一个变量名,仍然没有意义。
答案1
在我们了解基本思想之前,重要的是要记住,and
BibTeX 中有一个隐藏在函数内的比较器。它总是用在生成整数之后,然后该整数要么是1
(TRUE),要么是0
(FALSE)。它整理了比较两个整数的逻辑,但它只对第二个整数进行操作,因为结果就是第一个整数。
这里'
用于“简化”代码。条件的标准语法是
<number>
{ <code if true> }
{ <code if false> }
if$
特别注意,两个分支都需要一组括号。(BibTeXif$
根据简单的 TRUE/FALSE = 1/0 来测试数字。您在 BibTeX 中看到的大多数条件在进行if$
一些设置之前都有一个部分。)
在示例中,TRUE 分支仅包含 BibTeX 内置函数。因此,虽然您可以编写
FUNCTION {and}
{
{ skip$ }
{ pop$ #0 }
if$
}
或者
FUNCTION {and}
{
{ }
{ pop$ #0 }
if$
}
这使得 TRUE 分支有点难以阅读。因此,有一种“快捷”语法:如果使用 代替 ,可能会遗漏'skip$
括号{ skip$ }
。
您通常只会在跳过分支时看到这种方法,因为它对于其他内置函数来说并不是那么有用(尽管您可能会'pop$
以相同的方式看到)。