junior-sheer/_extensions/quarto-journals/acm/fancy-figure.lua
Carl Colglazier fc929dbfed Init
2024-01-31 17:08:47 -06:00

75 lines
1.6 KiB
Lua

function has_class(el, class)
if el.attr == nil then
return nil
end
for i,v in ipairs(el.attr.classes) do
if v == class then
return true
end
end
return false
end
function find_node(el, predicate)
if el.content == nil then
return nil
end
for i, v in ipairs(el.content) do
if predicate(v) then
return v
end
if v.content ~= nil then
local r = find_node(v, predicate)
if r ~= nil then
return r
end
end
end
return nil
end
function get_block_with_class(el, class)
return find_node(el, function(el)
return has_class(el, class)
end)
end
function get_image(el)
return find_node(el, function (v)
return v.t == "Image"
end)
end
function attribute(el, name, default)
for k,v in pairs(el.attr.attributes) do
if k == name then
return v
end
end
return default
end
return {
{
Image = function(image)
local description = attribute(image, "fig-alt", nil)
if description == nil then
return image
end
description = pandoc.write(pandoc.Pandoc({description}), "latex")
if quarto.doc.is_format("latex") then
local caption = pandoc.write(pandoc.Pandoc({image.caption}), "latex")
local blockStr = "\\begin{figure}\n" ..
"{\\centering \\includegraphics{" .. image.src .. "}}\n" ..
"\\caption{" .. caption .. "}\n\\Description{"
.. description .. "}\n\\end{figure}\n"
return {pandoc.RawInline("latex", blockStr)}
else
image.attr.attributes["alt"] = description
image.attr.attributes["fig-alt"] = nil
return image
end
end
}
}