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: "" } } } } }
A
Figure 1: Cat
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.