【问题标题】:Template language for Markdown to MarkdownMarkdown 到 Markdown 的模板语言
【发布时间】:2014-05-09 15:36:12
【问题描述】:

我正在寻找一个简单的模板引擎,该引擎将 YAML 片段作为上下文,并且可以很好地读取 Markdown 以及一些标签来生成 Markdown。我尝试了 Jekyll 的 Liquid,它可以工作,除了在 Markdown 中非常重要的空格。

例如这个输入...

---
samples:
- name: one
  samplecode: |
    function sample() {
      return 1;
    }
- name: two
  samplecode: |
    function sample() {
      return 2;
    }
---

{% for s in page.samples %}
- {{s.name}}

        {{s.samplecode}}

{% endfor %}

输出是:

- one

        function sample() {
  return 1;
}

- two

        function sample() {
  return 2;
}

而不是以下实际上可以与 Pandoc 一起使用的内容:

- one

        function sample() {
          return 1;
        }

- two

        function sample() {
          return 2;
        }

这实际上是discussed before for Jekyll

所以我的问题是:有没有适合我需要的简单模板引擎?

【问题讨论】:

    标签: yaml markdown template-engine pandoc


    【解决方案1】:

    我认为你可以使用 pandoc 内置的模板引擎来做你想做的事情。

    t.tpl:

    $for(samples)$
    -   $samples.name$
    
        $samples.samplecode$
    
    $endfor$
    

    t.md:

    ---
    samples:
    - name: one
      samplecode: |
        ```
        function sample() {
          return 1;
        }
        ```
    - name: two
      samplecode: |
        ```
        function sample() {
          return 2;
        }
        ```
    ---
    

    注意:我们将代码示例放在代码围栏中,因为 pandoc 将元数据值解释为降价。

    然后:

    % pandoc --template t.tpl -f markdown -t markdown t.md
    -   one
    
            function sample() {
              return 1;
            }
    
    -   two
    
            function sample() {
              return 2;
            }
    

    【讨论】:

    • 哇哦,Pandoc 总是让我惊奇! (我很快在 README 中搜索了“循环”,但没有找到,所以我认为这是不可能的......)
    • 我的用例的唯一缺点是它的方式有点错误(嵌入在模板中的文本而不是用于生成文本的循环)。我正在写一个文本,在文本中的某一时刻我需要生成这个文本。但我想我可以把一切都颠倒过来,它会起作用的......
    • 如果你知道任何 Haskell(哪怕只是一点点),你可以使用 pandoc-types 中的Text.Pandoc.Builder 模块以编程方式从数据生成 pandoc 文档,然后使用 pandoc 的 markdown writer 将其转换为降价。如果您正在做的事情很复杂,那可能是一个更好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 2019-03-28
    相关资源
    最近更新 更多