通过查看几个 bst 文件(BibTeX 样式),我注意到skip$
内置函数有时被称为'skip$
(即按名称),有时被称为skip$
(即按值)。我想我理解这样的结构
"string value" 'foo :=
这意味着函数foo
获取值“字符串值”,但我不明白'skip$
和之间有什么区别skip$
?有人能解释一下这个问题吗? 和 有何'pop$
不同pop$
?
例如plainnat.bst
来自 natbib 包中有以下代码块:
FUNCTION {output}
{ duplicate$ empty$
'pop$
'output.nonnull
if$
}
FUNCTION {output.check}
{ 't :=
duplicate$ empty$
{ pop$ "empty " t * " in " * cite$ * warning$ }
'output.nonnull
if$
}
第二对示例借用自 aipauth4-1.bst(revtex 包):
FUNCTION {date.block}
{
new.block.comma
skip$
}
但
FUNCTION {field.or.null}
{ duplicate$ empty$
{ pop$ "" }
'skip$
if$
}
答案1
我可以解释你需要做什么:原因是不同的!
你需要留意这里的括号。例如
FUNCTION {output}
{ duplicate$ empty$
'pop$
'output.nonnull
if$
}
也可以写成
FUNCTION {output}
{ duplicate$ empty$
{ pop$ }
{ output.nonnull }
if$
}
这里要注意的关键是if$
语句。这要求它前面有一个整数和两个“函数”。如果你使用类似
FUNCTION {output}
{ duplicate$ empty$
pop$
output.nonnull
if$
}
BibTeX 将尝试错误地执行函数,并会出现错误。因此,对于条件的两个分支,您需要
- 括号中的分支或
- 单个非括号语句,使用 引用其名称
'
。