【问题标题】:Is there a way in pandoc to include a filename on top of code blocks?pandoc 中有没有办法在代码块顶部包含文件名?
【发布时间】:2019-10-02 18:15:38
【问题描述】:

我正在处理 Markdown 中的文档(使用 pandoc 生成最终文档),并希望有代码块显示文件的摘录。我想将文件名放在代码块的顶部,如下所示:

我搜索了 pandoc 的文档,但找不到任何东西。

【问题讨论】:

    标签: markdown pandoc


    【解决方案1】:

    一种方法是使用属性和自定义 CSS,如下所示:

    <style>
    div.sourceCode::before {
        content: attr(data-filename);
        display: block;
        background-color: #cfeadd;
        font-family: monospace;
    }
    </style>
    
    ``` {.python filename="ch1/test_one.py"}
    def test_passing():
        assert (1, 2, 3) == (1, 2, 3)
    ```
    

    这允许将文件名指定为代码块属性,并使用 CSS 将属性呈现为标题。


    另一种方法是通过 pandoc 过滤器;我通常建议使用Lua filters。这也将允许直接包含文件,因此可以编写

    ``` {.python filename="ch1/test_one.py"}
    ```
    

    过滤器将处理内容包含。应该只有几行Lua。

    【讨论】:

    • 你使用了哪个 lua 过滤器?
    【解决方案2】:

    Markdown 通常没有“包含”文件或文件摘录的功能,尽管可能有一个可以支持该功能的 Markdown 变体。因此,摘录通常会通过复制+粘贴来实现。

    您还必须自己包含文件名。 Markdown/Pandoc 不知道代码 sn-ps 的文件名。

    另外,Markdown 通常没有应用自定义样式的功能。您必须嵌入 HTML 才能实现这一点,而嵌入的 HTML 可能会证明对于 HTML 以外的输出格式存在问题。

    您是否考虑过使用 Asciidoctor 标记代替 Markdown?它是一种类似于 Markdown 但比 Markdown 更强大的标记格式。 Asciidoctor 允许文件包含、文件摘录和作者指定的角色(导致 CSS 类)。您可以创建自己的包含扩展,在输出中嵌入包含文件的名称(或复制+粘贴)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2020-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多