2024-07-23:现在,可以使用本人开发的
vscode
插件https://gitee.com/rusterx/zotero-cite来管理pandoc
文献引用。
使用pandoc编写文档时涉及文献管理,前边的文章使用Pandoc编写docx和pdf文件的实践
有讲到docx和pdf两种文档的情况。这两种情况都使用的是系统默认的--citeproc
过滤器。不过,使用--citeproc
这种方式需要首先准备好bib
文献。如果只编写docx文档。那么还可以使用Better BibTeX
的作者编写的zotero.lua
过滤器。
安装
在https://gist.github.com/retorquere/76d81cb264339a69ab88d39ecb75fabb网址中,下载zotero.lua文件。使用pandoc -v
得到user-dir
。然后创建子目录filters
,然后将zotero.lua放在filters
目录下。
使用
只要在markdown文件中插入[@ref_key]
(后边将讲解如何使用vscode快捷插入)。然后使用下边的代码转换:
pandoc -s --lua-filter=zotero.lua filename.md -o filename.docx
当然markdown文件的yaml需要设置类似如下的代码(精简版),更加详细的代码参见https://retorque.re/zotero-better-bibtex/exporting/pandoc/。
zotero:
client: zotero
docx文件生成之后,默认文献还没有像正常的文档那样,使用下面图片的步骤进行转换。
可见整个过程不涉及bib文件。对于其中涉及图片、表格以及公式的引用,仍然使用之前文章讲到的pandoc-fignos
、pandoc-tablenos
以及pandoc-eqnos
过滤器。
vscode中如何插入文献引用
Zotero LaTeX
(https://marketplace.visualstudio.com/items?itemName=bnavetta.zoterolatex)就有该功能。不过该插件默认只能在latex语言环境中工作。因此需要一些额外的修改。如果不想额外的修改,其实只需要安装一个额外的插件mblode.zotero
。
在package.json
文件中,分别于menus
和keybindings
键中添加了markdown的支持,方便在pandoc中使用。
在extension.js
文件中,于cayw
方法之后添加了caywPandoc
,用于获取pandoc格式的引用支持,参考:https://retorque.re/zotero-better-bibtex/citing/cayw/。
function caywPandoc(format) {
return __awaiter(this, void 0, void 0, function* () {
let options = { format };
options['brackets'] = 'true';
options['minimize'] = 'true';
const res = yield source$1(`${serverUrl()}/cayw`, {
query: options
});
return res.body;
});
}
一个相似的curl代码为:
curl -s "http://127.0.0.1:23119/better-bibtex/cayw?format=pandoc&minimize=true&b rackets=true"
然后将addCitation
进行修改,根据语言环境的不同,插入不同的结果。代码获取参考:https://code.visualstudio.com/api/extension-guides/command。
var activeEditor = vscode.window.activeTextEditor;
var citation;
// create different format style for markdown and latex
if(activeEditor.document.languageId == 'latex'){
citation = yield cayw('biblatex', latexCommand(), minimizeAfterPicking());
}else{
citation = yield caywPandoc('pandoc');
}
这样在latex文件中,插入的样式是\cite{key}
,而在markdown文件中,插入的样式是[@key]
。修改插件之后,方便在markdown中插入引用。