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 模板引擎
4,353 个月下载量
在 30 个 Crates 中使用 30 直接
545KB
13K SLoC
海耶伽里瓦
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