Latex bib文本bst文件的bib样式格式-通过示例进行说明

Latex bib文本bst文件的bib样式格式-通过示例进行说明,latex,bibtex,Latex,Bibtex,我的问题是关于在bst文件中定义bibtex样式字段的方式。我想让下面的例子一件一件地解释,以了解每一件都在做什么。我希望自己能够对这个例子进行修改 FUNCTION {format.eprint} { eprint duplicate$ empty$ 'skip$ { "\eprint" archive empty$ 'skip$ { "[" * archive * "]" * } if$ "{" * swap

我的问题是关于在bst文件中定义bibtex样式字段的方式。我想让下面的例子一件一件地解释,以了解每一件都在做什么。我希望自己能够对这个例子进行修改

FUNCTION {format.eprint} { eprint duplicate$ empty$ 'skip$ { "\eprint" archive empty$ 'skip$ { "[" * archive * "]" * } if$ "{" * swap$ * "}" * } if$ } 函数{format.eprint} {eprint duplicate$empty$ “跳过$ {“\eprint” 存档为空$ “跳过$ {“[”*存档*”]“*} 如果$ {“*交换$*”}* } 如果$ }
BibTeX语言有点复杂:有关完整的参考资料,请参阅。需要记住的关键是,它是一种堆栈语言,并且使用后缀方法。几乎所有的内置函数都会从堆栈中删除它们的输入

一块一块地看,第一行以
函数开始,这意味着它将定义一个新函数(
format.eprint
),可以在
.bst
文件的其他地方使用。重要的是,这个新函数只能在下面使用:
.bst
文件中函数的顺序很重要。大括号用于显示不同的参数:
FUNCTION
需要两个参数,即函数名和实现它的代码

在代码本身中,
eprint
将是一个字段。使用字段名将字段的值添加到堆栈(对于当前记录)。然后我们有了
duplicate$
,它复制了堆栈上的顶部项目。这是BibTeX内置指令,由终端
$
显示。因此,堆栈现在将包含
eprint
值的两个副本

下一条指令是
空$
。这将测试堆栈的顶部项是否为空并将其删除,因此需要重复$
。测试结果要么是
1
要么是
0
,它留在堆栈上。因此堆栈上的顶部项现在是1或0,下一项是
eprint
的值

接下来是一个
if$
语句,它是后缀,因此在
if$
之前有两个分支。由于语言是后缀,因此如果堆栈上的顶部项目是
1
,则
if$
将选择true分支,否则选择false分支。这也会从堆栈中删除顶部项。(如果您想要真实的细节,那么这两个分支实际上被放置在堆栈上,
If$
语句将删除相应的一个分支,剩下的部分将被执行。)

第一个(true)分支读取
'skip$
,这是一条“不做任何事情”指令。如果包含前导的
,则可能会遗漏单个指令周围的大括号。对于新用户来说,(稍微)更容易阅读的另一种选择是

FUNCTION {format.eprint}
{ eprint duplicate$ empty$
    { }
    { "\eprint"
      archive empty$
        { }
        { "[" * archive * "]" * }
      if$
      "{" * swap$ * "}" *
    }
  if$
}
i、 e.只需为“不做任何事情”(true)分支使用一组空括号。因此,这里的目的是在
eprint
字段为空时不执行任何操作

假分支启动
“\eprint”
,这将把文本
\eprint
放在堆栈顶部。下一部分,他们将
存档
字段放在堆栈上,并对空字段执行另一个测试。如果
存档
字段可用,则代码

"[" * archive * "]" * 
[
放置到堆栈上,然后将其连接到堆栈上的顶部项目(即
\eprit
):此连接操作就是
*
所做的。然后将
存档
字段的值添加到堆栈并连接,然后再连接另一个
]
。因此,堆栈的顶部将包含

\eprint[<archive>]
它首先将
{
放在堆栈上。它被连接到顶部项目(
\eprit
\eprit[]
)上,以给出
\eprit{
swap$
函数交换堆栈上的前两个项目,因此顶部项目是name
eprit
字段的值)。有一个连接

\eprint{<eprint>

这可能是一个很好的问题
\eprint{<eprint>
    \eprint{<eprint>}