Lua filters only change Pandoc's AST representation of your document, i.e. before it is then converted to LaTeX. A Raw block filter will not act on Pandoc's LaTeX output, but only on Raw LaTeX blocks that are in the markdown itself. A Pandoc solution would be to write a custom Lua *writer* . The writer would use pandoc.write to generate Pandoc's own LaTeX output (body only) and modify it with regular expressions or Lua patterns. To replace just a command name this is fairly easy, though longer than the third solution below. A LaTeX solution is to redefine \caption as \sidecaption: \renewcommand{\caption}{\sidecaption} You can keep this enclosed in groups ({...}) to ensure that the redefinition only applies locally. A hybrid Pandoc/LaTeX solution is a Lua filter that insert LaTeX code to redefine \caption around figures: ``` lua if FORMAT:match 'latex' then function Figure (elem) return { pandoc.RawBlock('latex','{\\renewcommand{\\caption}{\\subcaption}' ), elem, pandoc.RawBlock('latex','}') } end end ``` This replaces any 'Figure' block element by a list (succession) of three raw LaTeX blocks. The output should look like: {\renewcommand{\caption}{\subcaption} ... Pandoc's LaTeX for the figure ... } Reposted from https://stackoverflow.com/questions/77504584/pandoc-md-latex-write-lua-filter-to-change-latex-macro-used-for-caption/77607636#77607636 On Monday, November 20, 2023 at 7:06:57 AM UTC+11 lukeflo wrote: > Hi everybody, > > I have written a custom latex `.cls' file to establish a typesetting > workflow for the scientific journals of my research institute. The texts > should be written in Markdown and then be processed with `pandoc' to > LaTeX. > > I already have an elaborated pandoc template to produce the LaTeX > preambel etc. So far its working great. > > But for the figures I need the caption from the Markdown file to be set > with `\sidecaption' instead of `\caption' in LaTeX, as well as with an > optional argument (short-caption) for the image attribution in the list > of figures. > > To get the latter working I use the following template from a GitHub > discussion in the [pandoc repo]: > > ┌──── > │ PANDOC_VERSION:must_be_at_least '3.1' > │ > │ if FORMAT:match 'latex' then > │ function Figure(f) > │ local short = f.content[1].content[1].attributes['short-caption'] > │ if short and not f.caption.short then > │ f.caption.short = pandoc.Inlines(short) > │ end > │ return f > │ end > │ end > └──── > > That works without any flaws. > > But now I need to figure out how to change the LaTeX macro used for the > caption. The older [approach of pre pandoc version 3.0 posted] by tarleb > is really intuitive and I could have easily adapted it to my needs. But > since pandoc 3.0 there is the new [/complex figures/] approach and, so > far, I couldn't figure out how to change the LaTeX macro used for the > captions with this new behaviour. > > I tried something like that (Adapted from [here]: > > ┌──── > │ if FORMAT:match 'latex' then > │ function RawBlock (raw) > │ local caption = raw.text:match('\\caption') > │ if caption then > │ raw:gsub('\\caption', '\\sidecaption') > │ end > │ return raw > │ end > │ end > └──── > > But nothing happened. > > The main challenge for me are my more-or-less non-existing lua skills. I > just never had to use it for my daily tasks. I thought about using `awk' > or `sed' to edit the `.tex' file itself using a regex-substitution, but > that should remain an absolute stopgap, since it makes the whole > workflow less portable. > > Thus, I'm hoping for a hint/a solution in form of a pandoc-lua script > which 1. helps me to achieve the goal, and 2. improve my understanding > of lua and the /complex figures/ approach for similar future tasks. > > I appreciate any tipp! > > Best, > Lukeflo > > This question is also posted on StackOverFlow: > https://stackoverflow.com/q/77504584/19647155 > > [pandoc repo] > > > [approach of pre pandoc version 3.0 posted] > > > [/complex figures/] > > [here] > -- 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/f3fa2d12-6277-47c6-a3fc-b5fea1485600n%40googlegroups.com.