使用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-fignospandoc-tablenos以及pandoc-eqnos过滤器。

vscode中如何插入文献引用

Zotero LaTeX(https://marketplace.visualstudio.com/items?itemName=bnavetta.zoterolatex)就有该功能。不过该插件默认只能在latex语言环境中工作。因此需要一些额外的修改。如果不想额外的修改,其实只需要安装一个额外的插件mblode.zotero

package.json文件中,分别于menuskeybindings键中添加了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中插入引用。