【问题标题】:Easiest way to replace placeholders (variables) in markdown text?在降价文本中替换占位符(变量)的最简单方法?
【发布时间】:2014-08-21 08:55:38
【问题描述】:

我需要一种开放格式来以通用方式(使用占位符/变量)编写故事。为了使故事具体案例,我想设置一个键/值对列表并在发布时应用它们。我还想将样式与内容分开,以便我可以轻松地发布到网络、pdf 等。

示例:@varname@ is a great place.

我选择 Markdown 来解决内容/样式分离,但我不知道一种简单的方法来参数化文本的某些部分并在使用 pandoc 等工具生成 html/pdf 输出时填充它们。

有什么建议吗?这可以用 markdown 完成还是有合适的 markdown 扩展?

【问题讨论】:

  • 您是否也在使用特定的编程语言?在我看来,构建输出 Markdown 的模板是你最好的选择,但这种方法的细节很大程度上取决于你的堆栈。
  • @Chris :不使用特定的编程语言。我只是在寻找一个易于使用/可配置的键/值解决方案,例如pandoc-extension,在将 markdown 内容发布到任何输出类型(pdf、html、docx)时,用相应的值替换某些字符串(键)。

标签: markdown placeholder pandoc


【解决方案1】:

Pandoc 的 Markdown 允许嵌入原始 LaTeX 甚至替换简单的定义,可以使用 Lua filter 来利用。例如;

\def\varname{Berlin}

\varname is a great place.

将在生成 PDF 输出时立即工作。

下面是一个 Lua 过滤器,它使这个技巧适用于所有输出格式:

-- file: tex-macros.lua
function RawInline (r)
  -- Inline expanded TeX commands.
  if r.format == 'tex' and r.text:match '^[^\\]' then
    return pandoc.Str(r.text)
  end
end

通过--lua-filter(或-L)命令行选项传递它来使用它:

pandoc --lua-filter tex-macros.lua ...

【讨论】:

    【解决方案2】:

    对于网络,您可以使用Jekyll templates with Liquid。由双括号 {{}} 包围的复杂表达式在转换为 HTML 时会被解释。示例(来自链接):

    {{ site.time | date_to_string }}
    

    2008 年 11 月 7 日

    我认为也可以定义自定义变量。

    【讨论】:

      【解决方案3】:

      就我个人而言,我会使用 sed 甚至 funnelweb 之类的东西,但是您可以使用 pandoc 过滤器来实现,无论是在 haskell 中还是(可能更容易)使用 pandocfilters 可用的 python 库 here

      【讨论】:

        猜你喜欢
        • 2020-06-03
        • 2012-12-02
        • 2011-12-20
        • 2012-05-11
        • 1970-01-01
        • 2013-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多