gpt4 book ai didi

latex - bibtex bst 文件的 bib 风格格式 - 通过示例解释

转载 作者:行者123 更新时间:2023-12-02 07:08:47 24 4
gpt4 key购买 nike

我的问题是关于在 bst 文件中定义 bibtex 样式字段的方式。我希望通过下面的示例逐个解释,以了解每个部分的作用。我希望自己能够对该示例进行更改。

FUNCTION {format.eprint}{ eprint duplicate$ empty$    'skip$    { "\eprint"      archive empty$        'skip$        { "[" * archive * "]" * }      if$      "{" * swap$ * "}" *    }  if$}

最佳答案

BibTeX 语言有点复杂:有关完整引用,请查看 Tame the BeaST 。要记住的关键事情是它是一种堆栈语言并且它使用后缀方法。几乎所有内置函数也会从堆栈中删除其输入。

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

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

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

接下来你有一个if$语句,位于后缀中,因此在 if$ 之前有两个分支 。由于语言是后缀,因此发生的情况是 if$如果堆栈顶部的项目是 1 将选择 true 分支否则为假分支。这也会从堆栈中删除顶部项目。 (如果您想要真正的细节,这两个分支实际上被放置在堆栈上,然后 if$ 语句删除相应的分支并留下要执行的其余 Material 。)

第一个(真)分支读取 'skip$ ,这是一条“不执行任何操作”的指令。如果包含前导 ',则单个指令周围的大括号可能会被忽略。 。对于新用户来说(稍微)更容易阅读的替代方案是

FUNCTION {format.eprint}
{ eprint duplicate$ empty$
{ }
{ "\eprint"
archive empty$
{ }
{ "[" * archive * "]" * }
if$
"{" * swap$ * "}" *
}
if$
}

简单地使用一组空大括号作为“不执行任何操作”(true)分支。因此,这里的目标是,如果 eprint 则不执行任何操作。字段为空。

错误分支开始"\eprint" ,这将放置文字 \eprint到堆栈的顶部。下一部分他们放置 archive字段入栈并对空字段进行另一次测试。如果archive字段可用,代码

"[" * archive * "]" * 

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

\eprint[<archive>]

(其中 <archive> 是存档字段的值)如果有任何给定的 archive 的内容,仍然只是 \eprint否则。

最后,还有一些字符串构建工作要做。我们有

"{" * swap$ * "}" *

第一名 {到堆栈上。将其连接到顶部项目( \eprint\eprint[<archive>] )以给出 \eprint{swap$函数交换堆栈顶部的两项,因此顶部项目是 name <eprint> (eprint 字段的值)。有一个关节要做

\eprint{<eprint>

最后添加 }到最后。

结果是堆栈将在顶部获得一项。如果eprint为空时栈顶会有一个空项,否则会读取

    \eprint{<eprint>}

关于latex - bibtex bst 文件的 bib 风格格式 - 通过示例解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3546396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com