摇尾蛇的bibtex参考
wagtail-references的Python项目详细描述
摇尾引用
基于bibtex的书目条目,如wagtail片段
模板
“但是,模板在哪里?!“是一个自然的问题。答:目前还没有任何模板或标记… 我在无头模式下运行我所有的摇尾装置,前端有一个反应,所以只能证明 用于管理wagtail上的引用的模板(目前)。但请看下面的介绍。
如果你想和tmplates做公关,我非常愿意合作:)
我正在逐步改进wagtail管理模板,随着库获得更多的吸引力和用户,我将做得更好。 底线:如果您使用或喜欢,可以在github上启动这个repo,所以我知道它正在获得牵引力!
在前端显示参考
编写自己的模板/html
我使用citation.js来解析和显示bibtex 在wagtail管理中,它可以在浏览器(模板)中使用,如下所示:
<!-- Using citation.js https://citation.js.org/api/tutorial-getting_started.html --><scriptsrc="https://cdn.jsdelivr.net/npm/citation-js"type="text/javascript"></script><scripttype="text/javascript">constCite=require('citation-js')functionrenderToDiv(inputBibtex,divId){constcitation=newCite(inputBibtex)constoutputHtml=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><divid="{{ reference.slug }}"></div><scripttype="text/javascript">renderToDiv("{{ reference.bibtex_string }}","{{ reference.slug }}")</script>
使用react(无头模式下的摇尾)
在前端,我使用react(参见前面提到的在无头模式下使用wagtail的nanorant)。我现在正在使用 react-citeproc连同 biblatex-csl-converter在一个项目中 好。您的组件将如下所示:
importReactfrom'react'import{Bibliography}from'react-citeproc'importrawfrom'raw.macro'import{BibLatexParser,CSLExporter}from'biblatex-csl-converter'conststyle=raw('assets/csl/apa-style.csl')constlocale=raw('assets/csl/xml-locale.xml')classReferenceextendsReact.Component{constructor(props){super(props)this.state={bibtex:undefined,csl:undefined,}}staticgetDerivedStateFromProps(nextProps,prevState){if(nextProps.bibtex!==prevState.bibtex){constparser=newBibLatexParser(nextProps.detail.bibtex,{processUnexpected:false,processUnknown:false})constcsl=newCSLExporter(parser.output).parse()return{bibtex:nextProps.detail.bibtex,csl,}}returnnull}render(){return(<divclassName={classes.bibliography}><Bibliographystyle={style}locale={locale}items={this.state.csl}/></div>)}}exportdefaultReference
路线图
我想包括:
- 更好的代码片段编辑器,可能使用json编辑器组件,并允许用户在tex和json之间切换
- 用于将多个引用序列化为bibjson集合的
ListSerializer
- HTML呈现程序和视图集
要求
在django 2.1或更高版本和wagtail 2.3或更高版本上测试wagtail引用。
支持的版本
Python:3.6
django:2.1
摇尾巴:2.3
开始
从PIP安装:
pip install wagtail_references
添加到INSTALLED_APPS
:
INSTALLED_APPS=[...'wagtail_references',...]
运行迁移:
python manage.py migrate wagtail_references
参考模型
只有一个数据库模型Reference
,它在wagtail中注册为一个片段,使它可以搜索
可选择。
弹头
模型有一个(必需的,唯一的)slug
字段,当引用
添加。
例如,如果您有以下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字符串raw)和一个bibjson
字段。
是的,我知道这是重复数据。但我宁愿这样做,也不愿每次
想以不同的形式序列化它。我本可以选择把它存起来,但是我不知道你有多少记忆
如果你正在管理大量的推荐信,人们已经不想破坏你的缓存了)。这是一个判决电话。
用例和替代解决方案?提出问题。
如果有postgres,bibjson
以json的形式存储,否则作为字符串存储(感谢^{
django设置
可以在SETTINGS.py
中定义以下设置:
- wagtailreferences_convert_bibtex(默认值:
False
)在保存新记录之前,该记录将被同质化为 严格的乳胶。这将强制转换为Unicode,并添加大括号以强制大写。 - wagtailreferences_enable_unicode(默认值:
True
)如果启用,诸如"C{\"o}ze"
的项将转换为 它们的Unicode等价物。如果在乳胶渲染引擎中使用条目,则不需要这样做。如果你是 使用它们来呈现HTML(whicH你可能是,这毕竟是一个网络CMS),你可能想要这个。 - wagtailreferences_collection_name(默认值:
None
)将默认集合名称应用于以bibjson形式呈现的记录。
示例
为了您和我们的测试目的,手头有一些示例很有用,因此我在examples.py
文件中准备了一些示例,其中只包含一系列不同的bibtex引用。
如果您遇到不方便的引用或无法验证的引用,请将它们发布到github问题中,以便我帮助诊断并添加它们以进行测试。
谢谢
感谢internaut提供bibtex json转换器。他们的代码没有授权,所以除了说声谢谢,我不知道该怎么写!