I think that the main thing here is that you need to operate on the Figure rather than the Image. Also note that image and figure captions are different:
I'm not quite sure when or if you should use the short figure caption, but am pretty sure that you do need to set the long figure caption.
![Figure 1: Cat](Cat.png)
...and with this lua filter (derived from yours):
local logging = require 'logging'
function Figure(fig)
logging.temp('figure', fig)
end
function Image(img)
logging.temp('image', img)
local caption = pandoc.utils.stringify(img.caption)
if (string.find(caption, 'Fig') ~= nil) then
img.caption[1] = pandoc.Strong(img.caption[1])
img.caption[3] = pandoc.Str(string.gsub(img.caption[3].text, ":", "."))
img.caption[3] = pandoc.Strong(img.caption[3])
local fig_num_string = string.sub(
pandoc.utils.stringify(img.caption[3]),1,2)
local fig_num = math.floor(tonumber(fig_num_string))
if (fig_num > 6) then
img.caption[3] = pandoc.Strong("S" .. tostring(8-fig_num) .. '.')
end
img.caption.long = pandoc.Strong('A')
img.caption = pandoc.Strong('A')
end
logging.temp('->', img)
return img
end
...you get this output:
% pandoc figure.md -L figure.lua
(#) image Image {
attr: Attr {
attributes: AttributeList {}
classes: List {}
identifier: ""
}
caption: Inlines[5] {
[1] Str "Figure"
[2] Space
[3] Str "1:"
[4] Space
[5] Str "Cat"
}
src: "Cat.png"
title: ""
}
(#) -> Image {
attr: Attr {
attributes: AttributeList {}
classes: List {}
identifier: ""
}
caption: Inlines[1] {
[1] Strong {
content: Inlines[1] {
[1] Str "A"
}
}
}
src: "Cat.png"
title: ""
}
(#) figure Figure {
attr: Attr {
attributes: AttributeList {}
classes: List {}
identifier: ""
}
caption: {
long: Blocks[1] {
[1] Plain {
content: Inlines[5] {
[1] Str "Figure"
[2] Space
[3] Str "1:"
[4] Space
[5] Str "Cat"
}
}
}
}
content: Blocks[1] {
[1] Plain {
content: Inlines[1] {
[1] Image {
attr: Attr {
attributes: AttributeList {}
classes: List {}
identifier: ""
}
caption: Inlines[1] {
[1] Strong {
content: Inlines[1] {
[1] Str "A"
}
}
}
src: "Cat.png"
title: ""
}
}
}
}
}
<figure>
<img src="Cat.png" alt="A" />
<figcaption>Figure 1: Cat</figcaption>
</figure>
Hello everybody out there using Pandoc,
The following Lua (used with RMarkdown in RStudio) filter should put "Figure n." in bold at the beginning of every figure caption, but it doesn't change my output:
function Image (img)
if FORMAT:match 'docx' then
caption = pandoc.utils.stringify(img.caption)
if (string.find(caption, 'Fig') ~= nil) then
img.caption[1] = pandoc.Strong(img.caption[1])
img.caption[3] = pandoc.Str(string.gsub(img.caption[3].text, ":", "."))
img.caption[3] = pandoc.Strong(img.caption[3])
fig_num_string = string.sub(pandoc.utils.stringify(img.caption[3]),1,2)
fig_num = math.floor(tonumber(fig_num_string))
if (fig_num > 6) then
img.caption[3] = pandoc.Strong("S" .. tostring(8-fig_num) .. '.')
end
img.caption.long = pandoc.Strong('A')
img.caption = pandoc.Strong('A')
end
end
print(pandoc.utils.stringify(img.caption.long))
return img
end
By putting print statements, I can partially verify that the filter operates on the correct elements, but it doesn't change the output.
--
You received this message because you are subscribed to the Google Groups "pandoc-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org.
To view this discussion on the web visit https://groups.google.com/d/msgid/pandoc-discuss/534b2214-42e6-4be9-8b0e-537509f5be3an%40googlegroups.com.