bibtex-parser
一个用于解析bibtex (.bib)文件的node/npm包。这是驱动的解析器 更好的BibTeX为Zotero 饮酒(la)特克斯进口。
在解析时,解析器将为命令应用标记,例如 \textbf, \textsc等,以及保护文本不受大小写变化影响的大括号。在可能的情况下,命令将被替换为对应的unicode文本。
什么是BibTeX?
BibTeX是一个参考管理程序,它使TeX和LaTeX的用户可以轻松地为书籍和期刊文章生成书目。在可能的情况下,它通常按照TeX和LaTeX的方式使用TeX字体进行样式化。LaTeX最早由Leslie Lamport和Oren Patashnik于1985年创建。
有关文件可于 https://retorque.re/bibtex-parser/.
选择解析器
Rust/WebAssembly实现是默认的导出(仅限ESM,见下文)。纯TypeScript实现也不需要初始化,只能作为esm使用 /js 子路径:
import { parse } from '@retorquere/bibtex-parser/js'
const library = parse('@article{example, title={A title}}')
对于扫描仪级表示,使用 parseVerbatim. 它的字段是字符串,没有被规范化或解释为LaTeX:
import { parseVerbatim } from '@retorquere/bibtex-parser/js'
const library = parseVerbatim('@article{example, title={A title}}')
生成的API文档涵盖了规范化的TypeScript API (/js),其 parseVerbatim 导出,以及从默认入口点可用的WASM导出。
所有解析器结果公开 preambles: string[],保留倍数 @preamble 指令的源顺序。规范化的结果属性先前已命名 preamble;呼叫者应使用 preambles 代替。
WebAssembly实现是仅限esb的默认入口点。在调用解析器之前初始化它。在浏览器中, init() 加载相对于模块的二进制文件:
import init, { parse } from '@retorquere/bibtex-parser'
await init()
const library = parse('@article{example, title={A title}}')
在Node.js中,显式加载导出的二进制文件:
import { readFile } from 'node:fs/promises'
import init, { parse } from '@retorquere/bibtex-parser'
const binary = new URL(import.meta.resolve('@retorquere/bibtex-parser/bibtex_parser_bg.wasm'))
await init({ module_or_path: await readFile(binary) })
const library = parse('@article{example, title={A title}}')
两个入口点都包含TypeScript声明。从源代码构建包也会构建WebAssembly,并且需要Rust wasm32-unknown-unknown 目标和 wasm-pack;消费者并不需要这些工具。
Zotero插件
在插件的构建中包含默认的JavaScript入口点,并将WASM二进制文件打包为插件资源。在插件的特权Zotero上下文中,在启动任何解析调用之前初始化解析器:
import init, { parse } from '@retorquere/bibtex-parser'
await init({ module_or_path: 'chrome://zotero-better-bibtex/content/resource/bibtex/bibtex_parser_bg.wasm' })
const library = parse('@article{example, title={A title}}')
在启动过程中等待初始化一次;后续 parse 或者 parseAsync 调用重用初始化的模块。
URL命令
两个解析器都接受 richURL,默认为的布尔值 true. 与 richURL: true, \href{http://example.org/{id}}{url} 显示为 <a href="http://example.org/{id}">url</a> 没有案件保护的范围。与 richURL: false,它呈现为 <span class="nocase">http://example.org/{id}</span>,丢弃标签并保留目的地的外壳,而不考虑 caseProtection 设置。该选项也适用于 \url.
未知的TeX命令
两个 parse 和 parseAsync 接受一个 unsupported 选择:
ignore:将未知命令替换为空。keep(默认):保留文本TeX,包括反斜杠,并在errors.throw抛出一个错误,标识不支持的TeX命令(parse把和parseAsync拒绝)。它绕过了法线errors收集。
这些策略也适用于不受支持的环境。不再支持自定义处理程序函数。
TypeScript自 v11
Options.unsupported不再接受回调(node, tex, entry) => string用于自定义替换文本。使用ignore,keep,或者throw. 默认值保持不变keep,匹配master;传递任何其他值都会抛出TypeError在解析器设置期间。- 新
unsupported: 'throw'模式将不受支持的命令/环境错误传播到parse(或拒绝parseAsync),而不是将它们添加到条目中errors和继续。 - 合并后的
keywords现在保留相遇顺序和精确重复字符串。以前,删除完全重复的值,并对剩余值进行不区分大小写的排序。Case变体之前也没有重复数据删除。
从8.x迁移到9.0
- 移动
sentenceCase.langids到顶层english选择。它仍然接受语言数组或布尔值;包括''在自定义数组中匹配带有no的项langid. - 移动
sentenceCase.language到顶层languageAsLangid选择。它仍然控制是否language字段用作回退langid和hyphenation缺席。
这个 Entry 和 ParseError 形状,包括逐字解析器的条目形状,在8.0.23和9.0.0之间没有改变。默认情况下,绑定的非缩写仍然是启用的。