【发布时间】:2019-10-02 18:15:38
【问题描述】:
【问题讨论】:
【问题讨论】:
一种方法是使用属性和自定义 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。
【讨论】:
Markdown 通常没有“包含”文件或文件摘录的功能,尽管可能有一个可以支持该功能的 Markdown 变体。因此,摘录通常会通过复制+粘贴来实现。
您还必须自己包含文件名。 Markdown/Pandoc 不知道代码 sn-ps 的文件名。
另外,Markdown 通常没有应用自定义样式的功能。您必须嵌入 HTML 才能实现这一点,而嵌入的 HTML 可能会证明对于 HTML 以外的输出格式存在问题。
您是否考虑过使用 Asciidoctor 标记代替 Markdown?它是一种类似于 Markdown 但比 Markdown 更强大的标记格式。 Asciidoctor 允许文件包含、文件摘录和作者指定的角色(导致 CSS 类)。您可以创建自己的包含扩展,在输出中嵌入包含文件的名称(或复制+粘贴)。
【讨论】: