#参考 #参考文献 #引用 #bibtex #文献

bin+lib hayagriva

参考文献处理:文献数据库管理、存储和引用格式化

12 个不稳定版本 (4 个重大变更)

0.5.3 2024 年 5 月 16 日
0.5.2 2024 年 3 月 7 日
0.5.1 2023 年 11 月 29 日
0.4.0 2023 年 10 月 31 日
0.1.1 2021 年 1 月 18 日

#5 in 模板引擎

Download history 852/week @ 2024-05-02 897/week @ 2024-05-09 2263/week @ 2024-05-16 1407/week @ 2024-05-23 1002/week @ 2024-05-30 1323/week @ 2024-06-06 1223/week @ 2024-06-13 1248/week @ 2024-06-20 1025/week @ 2024-06-27 1164/week @ 2024-07-04 1194/week @ 2024-07-11 1276/week @ 2024-07-18 939/week @ 2024-07-25 1163/week @ 2024-08-01 1045/week @ 2024-08-08 996/week @ 2024-08-15

4,353 个月下载量
30 个 Crates 中使用 30 直接

MIT/Apache

545KB
13K SLoC

海耶伽里瓦

Build status Current crates.io release Documentation

Rust 文献管理。

海耶伽里瓦是一款可以帮助您或您的应用程序处理文献和其他媒体的工具。其功能包括

  • 文献集合的数据结构
  • 从 YAML 文件读取和写入这些集合
  • 根据流行的样式指南格式化文献为参考文献条目和文本引用
  • BibTeX 兼容性
  • 通过类型和可用元数据查询文献条目

海耶伽里瓦可以作为库和命令行界面(CLI)使用。有关在您的应用程序中使用海耶伽里瓦的更多信息,请跳转到 “使用”部分;有关如何在终端上安装和使用海耶伽里瓦,请跳转到 “安装”部分

支持的样式

海耶伽里瓦支持官方引用样式语言仓库中提供的所有样式,目前超过 2,600 种。

使用方法

use hayagriva::io::from_yaml_str;

let yaml = r#"
crazy-rich:
    type: Book
    title: Crazy Rich Asians
    author: Kwan, Kevin
    date: 2014
    publisher: Anchor Books
    location: New York, NY, US
"#;

// Parse a bibliography
let bib = from_yaml_str(yaml).unwrap();
assert_eq!(bib.get("crazy-rich").unwrap().date().unwrap().year, 2014);

// Format the reference
use std::fs;
use hayagriva::{
    BibliographyDriver, BibliographyRequest, BufWriteFormat,
    CitationItem, CitationRequest,
};
use hayagriva::citationberg::{LocaleFile, IndependentStyle};

let en_locale = fs::read_to_string("tests/data/locales-en-US.xml").unwrap();
let locales = [LocaleFile::from_xml(&en_locale).unwrap().into()];

let style = fs::read_to_string("tests/data/art-history.csl").unwrap();
let style = IndependentStyle::from_xml(&style).unwrap();

let mut driver = BibliographyDriver::new();

for entry in bib.iter() {
    let items = vec![CitationItem::with_entry(entry)];
    driver.citation(CitationRequest::from_items(items, &style, &locales));
}

let result = driver.finish(BibliographyRequest {
    style: &style,
    locale: None,
    locale_files: &locales,
});

for cite in result.citations {
    println!("{}", cite.citation.to_string())
}

要格式化条目,您需要将它们包裹在 CitationRequest 中。这些可以引用其各自的 CitationItem 中的多个条目。使用这些与 BibliographyDriver 一起使用以获取格式化引用和参考文献。

您可以使用自己的 CSL 文件或使用 archive 功能从约 100 种捆绑的引用样式中选择。

如果启用了默认功能,海耶伽里瓦支持 BibTeX 和 BibLaTeX 参考文献库。您可以使用 io::from_biblatex_str 来解析这些参考文献库。

如果您需要更多的手动控制,库的原生 Entry 结构也提供了一个 From<&biblatex::Entry>-Trait 的实现。您需要依赖 biblatex 包以获取其 Entry。因此,您也可以像这样使用您的 BibLaTeX 内容:

use hayagriva::Entry;
let converted: Entry = your_biblatex_entry.into();

如果您不需要 BibLaTeX 兼容性,您可以在您的 Cargo.toml 中写入以下内容来使用 Hayagriva 的默认功能:

[dependencies]
hayagriva = { version = "0.2", default-features = false }

选择器

Hayagriva 使用一种自定义的选择器语言,允许您通过媒体类型来过滤文献。有关选择器的更多信息,请参阅 selectors.md 文件。虽然您可以使用函数 Selector::parse 来解析用户定义的选择器,但您可能更愿意使用选择器宏来避免在处理常量选择器时解析选择器的运行时开销。

use hayagriva::select;
use hayagriva::io::from_yaml_str;

let yaml = r#"
quantized-vortex:
    type: Article
    author: Gross, E. P.
    title: Structure of a Quantized Vortex in Boson Systems
    date: 1961-05
    page-range: 454-477
    doi: 10.1007/BF02731494
    parent:
        issue: 3
        volume: 20
        title: Il Nuovo Cimento
"#;

let entries = from_yaml_str(yaml).unwrap();
let journal = select!((Article["date"]) > ("journal":Periodical));
assert!(journal.matches(entries.nth(0).unwrap()));

有两种方法可以检查选择器是否与条目匹配。如果您只想知道项目是否与选择器匹配,则应使用 Selector::matches,如果要继续使用匹配条目的父数据,则应使用 Selector::apply。请注意,即使没有子条目绑定或哈希表为空,后者函数也会返回 Some

安装

在您的终端中运行以下命令:

cargo install hayagriva --features cli

Cargo 将为您安装 Hayagriva 命令行界面。现在,您只需要一个 Hayagriva YAML 文献文件或一个 Bib(La)TeX 文件即可开始。Hayagriva YAML 文件易于编写,可以表示大量媒体类型,有关如何编写一个的详细信息,请参阅其专门的文档。

假设您将此文件保存为 literature.yml 在您的当前工作目录中:

dependence:
    type: Article
    title: The program dependence graph and its use in optimization
    author: ["Ferrante, Jeanne", "Ottenstein, Karl J.", "Warren, Joe D."]
    date: 1987-07
    serial-number:
        doi: "10.1145/24039.24041"
    parent:
        type: Periodical
        title: ACM Transactions on Programming Languages and Systems
        volume: 9
        issue: 3

feminism:
    type: Article
    title: She swoons to conquer
    author: Ungard-Sargon, Batya
    editor: Weintraub, Pam
    date: 2015-09-25
    url: https://aeon.co/essays/can-you-enjoy-romance-fiction-and-be-a-feminist
    parent:
        type: Blog
        title: Aeon

然后,您可以发出以下命令来获取这两篇文章的参考文献条目。

hayagriva literature.yml reference

Hayagriva 默认使用芝加哥手册(第 17 版)的作者-日期风格。如果您想使用其他风格,例如,您可以使用以下内容使用美国心理学会的风格:

hayagriva literature.yml reference --style apa

可以通过调用 hayagriva help reference 来查看 --style 参数的有效值。

如果您现在需要引用上述文件中的第二篇文章,您可以调用:

hayagriva literature.yml cite --key feminism

--key 接受逗号分隔的键(或单个键)。子命令将仅在指定的键上工作。与 reference 子命令一样,cite 命令也允许使用 --style 参数。其可能值可以通过 hayagriva help cite 查看。它将默认为 作者日期 风格。

除了 --key 参数外,您还可以使用 --select 来提供自定义的 Hayagriva 选择器。例如,您可以运行以下内容以仅引用具有顶级 URL 或 DOI 的条目:

hayagriva literature.yml --select "*[url] | *[doi]" reference

这个表达式会匹配我们示例中的两个条目,因此命令将返回与第一个参考命令相同的结果。

Hayagriva 还允许您探索哪些值绑定到哪些子条目,如果选择器匹配。如果您打算将 Hayagriva 作为应用依赖项使用并需要调试表达式,这将特别有用。考虑以下选择器,它始终将具有音量字段的子条目绑定到 a,无论它出现在顶层还是第一个父级:a:*[volume] | * > a:[volume]。然后您可以使用以下命令来显示选择器将每个匹配项绑定到哪个子条目作为 a

hayagriva literature.yml --select "a:*[volume] | * > a:[volume]" --show-bound

--show-bound 标志显示所有匹配选择器或键过滤器的键,并详细说明每个条目的哪些子条目被选择器绑定。如果您只想获取匹配键的列表,请使用 --keys 标志。

如果您正在使用 BibTeX,您可以使用与 .yml 文件相同的方式使用您的 .bib 文件。如果您想将您的 .bib 文件转换为 .yml 文件,您只需将 .bib 文件传递给 CLI 而不需要任何其他参数。然后它将在标准输出上显示应用了键和选择器过滤器的 YAML 格式的参考文献。因此,如果您想将您的 .bib 文件转换为并保存到某处,您只需使用 >

hayagriva literature.bib > converted.yml

贡献

我们期待在“问题”标签中收到您的错误和功能请求。我们也非常乐意接受修复错误、小的重构、已在问题中提出并经我们批准的功能以及以下列出的计划功能的相关 PR。

  • 实现 YAML 到 BibLaTeX 的转换
  • 文档改进
  • CSL 错误修复
  • CSL-M 支持

我们感谢每一位潜在贡献者对这项项目(计划)投入的努力以及对该项目的采用!

许可

Hayagriva 采用 MIT / Apache 2.0 双许可。

库的用户和消费者可以选择他们想要应用哪种许可证,而贡献者必须接受他们的代码符合并按照这两个许可证的条款进行分发。

如果启用了 archive 功能,Hayagriva 包含的 CSL 样式以 CC-BY-SA 3.0 许可证许可。文件 styles.cbor.rkyv 是这些作品的集合,并受此许可证约束。通过使用 styles 函数反序列化并读取 StyleInfo 结构体来检索归属信息。

依赖项

~7.5MB
~163K SLoC