I followed that, thanks! But I'm still getting `\emph{\hl{abc}` as the output, any other ideas? Bastien DUMONT schrieb am Samstag, 25. März 2023 um 15:38:47 UTC+1: > First, you need to replace `\\hl{` with `\\colorbox{declared-color}{` > (mind the double backslash). Then Span.lua can be replaced with the > following filter acting on emphasized (italicized) pieces of text: > > in-red.lua: > ``` > function Emph (emph) > local content = emph.content > if #content == 1 > and content[1].t == 'Span' > and content[1].classes:includes 'mark-red' then > return { > pandoc.RawInline('latex', '\\colorbox{lightred}{'), > content[1], > pandoc.RawInline('latex', '}') > } > end > end > ``` > > Here, I replaced "mark" with "mark-red" as you suggested because I don't > remove the Span element, in case it contains other classes or attributes > that should be processed by other filters or by Pandoc itself. If the Span > was kept with the "mark" class, Pandoc would wrap it in the \hl macro > afterwards. > > Le Saturday 25 March 2023 à 05:42:45AM, Pa Sc a écrit : > > In markdown (written in Obsidian.md) I use a plugin/theme so that > `*==text==*` > > is rendered as red instead of italic and highlighted. > > > > I use this lua-filter to convert regular `==highlighting==` to LaTeX `\hl > > {highlighting}` which works perfectly: (I somehow require these two > files, I > > can't remember why) > > > > **highlight.lua**: > > ``` > > --[[ > > Add support for a custom inline syntax. > > This pandoc Lua filter allows to add a custom markup syntax > > extension. It is designed to be adjustable; it should not be > > necessary to modify the code below the separator line. > > The example here allows to add highlighted text by enclosing the > > text with `==` on each side. Pandoc supports this for HTML output > > out of the box. Other outputs will need additional filters. > > Copyright: © 2022 Albert Krewinkel > > License: MIT > > ]] > > > > -- Lua pattern matching the opening markup string. > > local opening = [[==]] > > > > -- Lua pattern matching the closing markup string. > > local closing = [[==]] > > > > -- Toggle whether the opening markup may be followed by whitespace. > > local nospace = true > > > > -- Function converting the enclosed inlines to their internal pandoc > > -- representation. > > local function markup_inlines (inlines) > > return pandoc.Span(inlines, {class="mark"}) > > end > > > > > ------------------------------------------------------------------------ > > > > local function is_space (inline) > > return inline and > > (inline.t == 'Space' or > > inline.t == 'LineBreak' or > > inline.t == 'SoftBreak') > > end > > > > function Inlines (inlines) > > local result = pandoc.Inlines{} > > local markup = nil > > local start = nil > > for i, inline in ipairs(inlines) do > > if inline.tag == 'Str' then > > if not markup then > > local first = inline.text:match('^' .. opening .. '(.*)') > > if first then > > start = inline -- keep element around in case the > > -- markup is not closed. Check if the > > -- closing pattern is already in this > > -- string. > > local selfclosing = first:match('(.*)' .. closing .. '$') > > if selfclosing then > > result:insert(markup_inlines{pandoc.Str(selfclosing)}) > > elseif nospace and first == '' and is_space(inlines[i+1]) > then > > -- the opening pattern is followed by a space, but the > > -- config disallows this. > > result:insert(inline) > > else > > markup = pandoc.Inlines{pandoc.Str(first)} > > end > > else > > result:insert(inline) > > end > > else > > local last = inline.text:match('(.*)' .. closing .. '$') > > if last then > > markup:insert(pandoc.Str(last)) > > result:insert(markup_inlines(markup)) > > markup = nil > > else > > markup:insert(inline) > > end > > end > > else > > local acc = markup or result > > acc:insert(inline) > > end > > end > > > > -- keep unterminated markup > > if markup then > > markup:remove(1) -- the stripped-down first element > > result:insert(start) > > result:extend(markup) > > end > > return result > > end > > > > local function markup_inlines (inlines) return > {pandoc.RawInline('tex', ' > > \\hl{')} .. inlines .. {pandoc.RawInline('tex', '}')} end > > ``` > > > > **Span.lua**: > > ``` > > function Span (span) > > if span.classes:includes 'mark' then > > return {pandoc.RawInline('latex', '\\hl{')} .. > > span.content .. > > {pandoc.RawInline('latex', '}')} > > end > > end > > ``` > > This works great, I got this here: [https://gist.github.com/tarleb/ > > a0646da1834318d4f71a780edaf9f870](https://gist.github.com/tarleb/ > > a0646da1834318d4f71a780edaf9f870) > > > > However, for my other usecase I'd like it to be able to render `*==this > kind of > > highlighting==*` as `\colorbox{lightred}{this new kind of highlighting}` > > > > I've tried replacing the `\\hl{` with `\colorbox{declared-color}{` but > that > > didn't work. > > > > I was wondering if it had something to do with the class? But renaming > that > > class from `mark` to `mark-red` didn't work either. > > > > Any advice or ideas? Thanks! > > > > -- > > 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 [1]pandoc-discus...-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > > To view this discussion on the web visit [2] > https://groups.google.com/d/msgid/ > > pandoc-discuss/79ac7814-9558-4d49-a682-cf31f970d27dn%40googlegroups.com. > > > > References: > > > > [1] mailto:pandoc-discus...-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org > > [2] > https://groups.google.com/d/msgid/pandoc-discuss/79ac7814-9558-4d49-a682-cf31f970d27dn%40googlegroups.com?utm_medium=email&utm_source=footer > > -- 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/bb3c6fab-dee9-48c4-81e4-7db67bc6931an%40googlegroups.com.