Skip to content

Commit 063f649

Browse files
committed
multiple-bibliographies: use citeproc in pandoc for newer version
1 parent b035490 commit 063f649

File tree

2 files changed

+33
-11
lines changed

2 files changed

+33
-11
lines changed
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
Pandoc (Meta {unMeta = fromList [("bibliography_recommended_reading",MetaInlines [Str "secondary.bib"]),("bibliography_sources",MetaInlines [Str "primary.bib"]),("nocite",MetaInlines [Cite [Citation {citationId = "Knu86", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0}] [Str "@Knu86"],Str ",",Space,Cite [Citation {citationId = "Bae", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0}] [Str "@Bae"]]),("title",MetaInlines [Str "Multiple",Space,Str "Bibliographies",Space,Str "Demo"])]})
2-
[Para [Cite [Citation {citationId = "Nie72", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 1}] [Str "Nietzsche",Space,Str "(1872)"],Str ",",Space,Cite [Citation {citationId = "Bel", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 2}] [Str "Bellori",Space,Str "(1672)"]]
1+
Pandoc (Meta {unMeta = fromList [("bibliography_recommended_reading",MetaInlines [Str "secondary.bib"]),("bibliography_sources",MetaInlines [Str "primary.bib"]),("nocite",MetaInlines [Cite [Citation {citationId = "Knu86", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 1, citationHash = 0}] [Str "@Knu86"],Str ",",Space,Cite [Citation {citationId = "Bae", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 2, citationHash = 0}] [Str "@Bae"]]),("title",MetaInlines [Str "Multiple",Space,Str "Bibliographies",Space,Str "Demo"])]})
2+
[Para [Cite [Citation {citationId = "Nie72", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 3, citationHash = 0}] [Str "Nietzsche",Space,Str "(1872)"],Str ",",Space,Cite [Citation {citationId = "Bel", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 4, citationHash = 0}] [Str "Bellori",Space,Str "(1672)"]]
33
,Header 1 ("references",[],[]) [Str "References"]
44
,Div ("refs_sources",[],[])
5-
[Div ("ref-Bel",[],[])
6-
[Para [Str "Bellori.",Space,Str "1672.",Space,Emph [Str "Le",Space,Str "Vite",Space,Str "de\8217",Space,Str "Pittori,",Space,Str "Scultori",Space,Str "E",Space,Str "Architetti",Space,Str "Moderni"],Str "."]]
7-
,Div ("ref-Nie72",[],[])
5+
[Div ("ref-Bel",["csl-entry"],[])
6+
[Para [Str "Bellori.",Space,Str "1672.",Space,Emph [Str "Le",Space,Str "Vite",Space,Str "de\8217",Space,Str "Pittori,",Space,Str "Scultori",Space,Str "e",Space,Str "Architetti",Space,Str "Moderni"],Str "."]]
7+
,Div ("ref-Nie72",["csl-entry"],[])
88
[Para [Str "Nietzsche,",Space,Str "Friedrich.",Space,Str "1872.",Space,Emph [Str "Die",Space,Str "Geburt",Space,Str "Der",Space,Str "Trag\246die",Space,Str "Aus",Space,Str "Dem",Space,Str "Geiste",Space,Str "Der",Space,Str "Musik"],Str "."]]]
99
,Header 1 ("recommended-reading",[],[]) [Str "Recommended",Space,Str "Reading"]
1010
,Div ("refs_recommended_reading",[],[])
11-
[Div ("ref-Bae",[],[])
11+
[Div ("ref-Bae",["csl-entry"],[])
1212
[Para [Str "B\228tschmann,",Space,Str "Oskar.",Space,Str "1985.",Space,Emph [Str "Pygmalion",Space,Str "Als",Space,Str "Betrachter"],Str "."]]
13-
,Div ("ref-Knu86",[],[])
14-
[Para [Str "Knuth,",Space,Str "Donald",Space,Str "E.",Space,Str "1986.",Space,Emph [Str "The",Space,Str "Texbook"],Str "."]]]]
13+
,Div ("ref-Knu86",["csl-entry"],[])
14+
[Para [Str "Knuth,",Space,Str "Donald",Space,Str "E.",Space,Str "1986.",Space,Emph [Str "The",Space,Str "TeXbook"],Str "."]]]]

multiple-bibliographies/multiple-bibliographies.lua

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ local doc_meta = pandoc.Meta{}
2929
local refs_div = pandoc.Div({}, pandoc.Attr('refs'))
3030

3131
local supports_quiet_flag = (function ()
32+
-- We use pandoc instead of pandoc-citeproc starting with pandoc 2.11
33+
if PANDOC_VERSION >= "2.11" then
34+
return true
35+
end
3236
local version = pandoc.pipe('pandoc-citeproc', {'--version'}, '')
3337
local major, minor, patch = version:match 'pandoc%-citeproc (%d+)%.(%d+)%.?(%d*)'
3438
major, minor, patch = tonumber(major), tonumber(minor), tonumber(patch)
@@ -37,6 +41,24 @@ local supports_quiet_flag = (function ()
3741
or (minor == 14 and patch >= 5)
3842
end)()
3943

44+
local function run_citeproc(doc, quiet)
45+
if PANDOC_VERSION >= "2.11" then
46+
return run_json_filter(
47+
doc,
48+
'pandoc',
49+
{'--from=json', '--to=json', '--citeproc', quiet and '--quiet' or nil}
50+
)
51+
else
52+
-- doc = run_json_filter(doc, 'pandoc-citeproc')
53+
return run_json_filter(
54+
doc,
55+
'pandoc-citeproc',
56+
{FORMAT, (quiet and supports_quiet_flag) and '-q' or nil}
57+
)
58+
end
59+
end
60+
61+
4062
--- Resolve citations in the document by combining all bibliographies
4163
-- before running pandoc-citeproc on the full document.
4264
local function resolve_doc_citations (doc)
@@ -52,7 +74,8 @@ local function resolve_doc_citations (doc)
5274
-- add dummy div to catch the created bibliography
5375
table.insert(doc.blocks, refs_div)
5476
-- resolve all citations
55-
doc = run_json_filter(doc, 'pandoc-citeproc')
77+
-- doc = run_json_filter(doc, 'pandoc-citeproc')
78+
doc = run_citeproc(doc)
5679
-- remove catch-all bibliography
5780
table.remove(doc.blocks)
5881
-- restore bibliography to original value
@@ -91,8 +114,7 @@ local function create_topic_bibliography (div)
91114
local tmp_blocks = {pandoc.Para(all_cites), refs_div}
92115
local tmp_meta = meta_for_pandoc_citeproc(bibfile)
93116
local tmp_doc = pandoc.Pandoc(tmp_blocks, tmp_meta)
94-
local filter_args = {FORMAT, supports_quiet_flag and '-q' or nil}
95-
local res = run_json_filter(tmp_doc, 'pandoc-citeproc', filter_args)
117+
local res = run_citeproc(tmp_doc, true) -- try to be quiet
96118
-- First block of the result contains the dummy paragraph, second is
97119
-- the refs Div filled by pandoc-citeproc.
98120
div.content = res.blocks[2].content

0 commit comments

Comments
 (0)