Jan Ulrich Hasecke
2022-04-05 6a420003897cb49b296e68d8a7145b6fffda4c28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
-- lua filter to add backlinks to citations
-- run after --citeproc on the command line
 
-- cites is a table mapping citation item identifiers
-- to an array of cite identifiers
local cites = {}
 
-- counter for cite identifiers
local cite_number = 1
 
local function with_latex_label(s, el)
if FORMAT == "latex" then
return {pandoc.RawInline("latex", "\\label{" .. s .. "}"), el}
else
return {el}
end
end
 
function Cite(el)
local cite_id = "cite_" .. cite_number
cite_number = cite_number + 1
for _,citation in ipairs(el.citations) do
if cites[citation.id] then
table.insert(cites[citation.id], cite_id)
else
cites[citation.id] = {cite_id}
end
end
return pandoc.Span(with_latex_label(cite_id, el), pandoc.Attr(cite_id))
end
 
function Div(el)
local citation_id = el.identifier:match("ref%-(.+)")
if citation_id then
local backlinks = {pandoc.Str("Cited:"),pandoc.Space()}
for i,cite_id in ipairs(cites[citation_id]) do
local marker = pandoc.Str(i)
if FORMAT == "latex" then
marker = pandoc.RawInline("latex", "\\pageref{" .. cite_id .. "}")
end
if #backlinks > 2 then
table.insert(backlinks, pandoc.Str(","))
table.insert(backlinks, pandoc.Space())
end
table.insert(backlinks, pandoc.Link(marker, "#"..cite_id))
end
table.insert(el.content, pandoc.Para({pandoc.Span(backlinks,
pandoc.Attr("",{"csl-indent"}))}))
return el
end
end