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:
- An image caption is an Inlines list;
https://pandoc.org/lua-filters.html#type-image
- A figure caption is a Caption object, which has a long (Blocks list)
caption with option short (Inlines list) caption;
https://pandoc.org/lua-filters.html#type-figure
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.
Finally, a plug for the https://github.com/pandoc-ext/logging module, which
can help to shed light on the AST structure. With this document (I guessed
your input format):
![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: ""
}
}
}
}
}
On Tue, 13 Jun 2023 at 14:16, Stephan Boltzmann
wrote:
> 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@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
>
> .
>
--
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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To view this discussion on the web visit https://groups.google.com/d/msgid/pandoc-discuss/CAEe_xxgZwgmFNJ%2Bs60WJvnvXfk4kGg8UWPoqV2cEPPg_uBev8w%40mail.gmail.com.