繁体   English   中英

如何在 Pandoc 中用 lua 过滤器替换部分字符串,以将 from.md 转换为 .pdf?

[英]How do I replace part of a string with a lua filter in Pandoc, to convert from .md to .pdf?

我正在 Obsidian.md 中编写 markdown 个文件,并尝试通过 Pandoc 和 LaTeX 将它们转换为 PDF。文本本身可以很好地执行此操作,但是,在 Obsidian 中我使用 ==equal signs== 来突出显示某些内容,但这不起作用在 LaTeX。

所以我想创建一个过滤器,要么完全删除等号,要么用 LaTeX 可以呈现的东西替换它,例如\hl{something} 我认为这将是相同的过程。

我有一个看起来像这样的过滤器:

return {
  {
    Str = function (elem)
      if elem.text == "hello" then
        return pandoc.Emph {pandoc.Str "hello"}
      else
        return elem
      end
    end,
  }
}

这是有效的,它用单词的斜体版本替换了“hello”的任何实例。 但是,它只适用于整个单词。 例如,如果“你好”是一个词的一部分,它就不会触及它。 因为等号是作为一个词的一部分来读的,所以它不会触及那些。

我如何修改它(或者,请建议另一个过滤器)以便它可以替换和更改单词的一部分?

谢谢!

这是有效的,它用单词的斜体版本替换了“hello”的任何实例。 但是,它只适用于整个单词。 例如,如果“你好”是一个词的一部分,它就不会触及它。 因为等号是作为一个词的一部分来读的,所以它不会触及那些。

我如何修改它(或者,请建议另一个过滤器)以便它可以替换和更改单词的一部分?

谢谢!

Hello, World!这样的字符串成为 pandoc 中的内联列表: [ Str "Hello,", Space, Str "World!" ] [ Str "Hello,", Space, Str "World!" ] Inlines过滤器并不能使匹配特别方便:目前最好的方法是为内联编写一个过滤器,然后遍历列表以找到匹配项。

有关完整示例,请参阅https://gist.github.com/tarleb/a0646da1834318d4f71a780edaf9f870

假设我们已经找到突出显示的文本并将其转换为带有 class mark的 Span。 然后我们可以将其转换为 LaTeX

function Span (span)
  if span.classes:includes 'mark' then
    return {pandoc.RawInline('latex', '\\hl{')} ..
      span.content ..
      {pandoc.RawInline('latex', '}')}
  end
end

请注意,pandoc 的当前开发版本(在某些时候将成为 pandoc 3)支持在调用时开箱即用的高亮文本

pandoc --from=markdown+mark ...

例如,

echo '==Hi Mom!==' | pandoc -f markdown+mark -t latex
⇒ \hl{Hi Mom!}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM