output.check 在 .bst 文件中起什么作用?

output.check 在 .bst 文件中起什么作用?

我已多次看到该函数output.check在 .bst 文件中被使用;我确信我曾经知道它做了什么,但现在我忘记了,而且我也无法轻易找到解释它的文档(它可能存在,但埋在一堆使用它但没有太多说明的资源中)。

在我的(merlin 生成的).bst 文件中,它显示

FUNCTION {output.check}
{ 't :=
  duplicate$ empty$
    { pop$ "empty " t * " in " * cite$ * warning$ }
    'output.nonnull
  if$
}

但大部分内容我都不太清楚。这个函数有什么用?

答案1

简洁版本:

它检查必填字段是否为空,如果是,则发出警告。要知道哪个字段,您需要查看调用该函数的位置。例如,查看以下article函数plain.bst

format.authors "author" output.check

这将检查作者字段并打印empty author in <entry>blg文件。

长版本:

例如,在上面的例子中,该format.authors函数是:

FUNCTION {format.authors}
{ author empty$
    { "" }
    { author format.names }
  if$
}

它会将 或 留"<Author-names>"""堆栈上,具体取决于是否author给出了字段。所以,到目前为止,我们的堆栈有一个(可能是空的)字符串。现在我们"author"在堆栈上插入一个字符串并调用output.check

output.check将会执行't :=,这会将堆栈最顶部的项目(文字字符串"author")放入变量中。现在我们在堆栈上't只有(可能为空的)字符串。"<Author-names>"

然后我们有duplicate$,它将复制它,然后我们有,如果作者姓名字符串为空,empty$它将留下一个逻辑1或。0

两个条件分支被插入到堆栈中,并在调用时使用if$if$将检查是否empty$返回10,并相应地将第一个或第二个分支放入堆栈。

如果1分支被执行,则意味着author未提供字段,然后我们将pop$ "empty " t * " in " * cite$ * warning$丢弃(现在肯定是)空"<Author-names>"字符串并发出警告。之后,执行将继续正常进行。

如果0分支被采用,那么'output.nonnull如果被调用来打印(现在肯定)不是空字符串。

相关内容