Wagtail的BibTeX参考文献
项目描述
Wagtail References 
基于 BibTeX 的参考文献条目,作为 wagtail 片段
模板
如果您想提交带有模板的PR,我非常欢迎合作 :)
我正在逐渐改进 wagtail 管理模板,随着库的吸引力增加和用户增多,我会做得更好。 底线:如果您使用或喜欢它,请Star这个GitHub仓库,这样我知道它正在获得关注!
在前端显示参考文献
编写自己的模板/html
我使用 citation.js 来解析和显示 wagtail 管理中的 bibtex,它可以在模板中浏览器内使用(如下所示)
<!-- Using citation.js https://citation.js.org/api/tutorial-getting_started.html -->
<script src="https://cdn.jsdelivr.net.cn/npm/citation-js" type="text/javascript"></script>
<script type="text/javascript">
const Cite = require('citation-js')
function renderToDiv(inputBibtex, divId) {
const citation = new Cite(inputBibtex)
const outputHtml = citation.format('bibliography', {
format: 'html',
template: 'apa',
lang: 'en-US'
})
outputDiv = document.getElementById(divId)
outputDiv.innerHTML = outputHtml
}
</script>
<h3><strong>Slug (citation key):</strong> {{ reference.slug }}</h3>
<h3><strong>Type:</strong> {{ reference.bibtype }}</h3>
<div id="{{ reference.slug }}"></div>
<script type="text/javascript"> renderToDiv("{{ reference.bibtex_string }}", "{{ reference.slug }}") </script>
使用 react(wagtail 无头模式)
在前端,我使用react(参见上文关于在无头模式下使用Wagtail的nanorant)。我现在在一个项目中使用react-citeproc以及biblatex-csl-converter,效果相当不错。您的组件将类似于以下
import React from 'react'
import { Bibliography } from 'react-citeproc'
import raw from 'raw.macro'
import { BibLatexParser, CSLExporter } from 'biblatex-csl-converter'
const style = raw('assets/csl/apa-style.csl')
const locale = raw('assets/csl/xml-locale.xml')
class Reference extends React.Component {
constructor(props) {
super(props)
this.state = {
bibtex: undefined,
csl: undefined,
}
}
static getDerivedStateFromProps(nextProps, prevState) {
if (nextProps.bibtex !== prevState.bibtex) {
const parser = new BibLatexParser(nextProps.detail.bibtex, { processUnexpected: false, processUnknown: false })
const csl = new CSLExporter(parser.output).parse()
return {
bibtex: nextProps.detail.bibtex,
csl,
}
}
return null
}
render() {
return (
<div className={classes.bibliography}>
<Bibliography
style={style}
locale={locale}
items={this.state.csl}
/>
</div>
)
}
}
export default Reference
路线图
我想包含以下内容
- 一个更好的代码片段编辑器,可能使用JSON编辑组件,并允许用户在tex和json之间切换
- 一个
ListSerializer
,可以将多个引用序列化为bibjson集合 - HTML渲染器和视图集
需求
Wagtail References已在Django 2.1或更高版本以及Wagtail 2.3或更高版本上进行了测试。
支持的版本
Python:3.6
Django:2.1
Wagtail:2.3
入门指南
通过pip安装
pip install wagtail_references
添加到INSTALLED_APPS
INSTALLED_APPS = [
...
'wagtail_references',
...
]
运行迁移
python manage.py migrate wagtail_references
引用模型
只有一个数据库模型Reference
,它在Wagtail中注册为代码片段,使其可搜索和选择。
别名
该模型有一个(必需,唯一)的别名
字段,当添加引用时会自动从bibtex内容中设置。
例如,如果您有以下bibtex条目
@article{Clark2017a,
author = {Clark, Thomas H. E. and Lueck, Rolf G. and Hay, Alex E. and Davey, Thomas and Stern, Peter and Horwitz, Rachel},
journal = {Proc. of the 12th European Wave and Tidal Energy Conference},
pages = {7},
title = {{InSTREAM : Measurement , Characterisation and Simulation of Turbulence from Test Tank to Ocean .}},
year = {2017}
}
别名将自动设置为clark-lueck-hay-davey-stern-horwitz-2017
,并附加-2
、-3
等以保持唯一性。
bibtex条目的引用键将更新以对应
@article{clark-lueck-hay-davey-stern-horwitz-2017,
author = ... etc etc ...
}
唯一性在表单验证和数据库级别强制执行。在创建引用后可以手动编辑别名。
bibtex和bibjson
引用模型包含一个bibtex
字段(包含bibtex字符串,原始)和一个bibjson
字段。我知道这会重复数据。但我宁愿这样做,也不愿意每次想要以不同形式序列化数据时都重新解析数据。我可以选择将其缓存,但我不知道大家有多少内存,也不希望如果管理了大量引用而弄乱您的缓存)。这是一个判断。用例和替代解决方案?提交一个问题。
如果使用POSTGRES,则bibjson
以原生JSON格式存储,否则以字符串格式存储(感谢django-jsonfield
)。
Django设置
以下设置可以在您的SETTINGS.py
中定义
- WAGTAILREFERENCES_CONVERT_BIBTEX(默认:
False
)在保存新记录之前,记录将被统一到严格的latex格式。这强制转换为Unicode,例如,添加括号以强制大写。 - WAGTAILREFERENCES_ENABLE_UNICODE(默认:
True
)如果启用,则将类似于"C{\"o}ze"
的项目转换为它们的Unicode等效项。如果您在使用LaTeX渲染引擎中的条目,则这不是必需的。如果您使用它们来渲染HTML(您很可能这样做,毕竞这是一个网络内容管理系统),您可能需要这样做。 - WAGTAILREFERENCES_COLLECTION_NAME(默认:
None
)为以bibjson格式渲染的记录应用默认集合名称。
示例
为了您和我们的测试目的,有一些示例是非常有用的,因此我在examples.py
文件中准备了一些,它包含一系列不同的bibtex引用。
如果您遇到尴尬的引用或无法验证的引用,请将它们发布到github问题,以便我可以帮助诊断并添加它们以进行测试。
谢谢
感谢internaut提供bibtex-json转换器。他们的代码未许可,所以除了说谢谢之外,我不知道如何给它致谢!
wagtail_references-0.2.6.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ccd13b82769ac4b1a67fb89bacae5439f6ce61de37fbd291be179d3bba080820 |
|
MD5 | 59958e05c9e7f48a77cd0dc44e54ba0d |
|
BLAKE2b-256 | 0600316a46ff519bc6df9f84b8f556ec234892247906add2f1c93d9028c4c58c |