【问题标题】:Set html title from the first header with pandoc使用 pandoc 从第一个标题设置 html 标题
【发布时间】:2020-04-16 03:24:25
【问题描述】:

我有通常的README.md,因为人们为github 创建等等。Pandoc 生成

 <title></title>

我想看到文件中的第一个标题。所以如果我有.md

# My README
text
## Second header

Pandoc 应该生成

<title>My README</title>

从第一个 1-# 标头生成会很好。所以

### Preface
# My README
text
## Second header

还是应该

<title>My README</title>

无论如何,我想避免使用不属于简单 Markdown 标准的元信息来扩展我的 .md

【问题讨论】:

  • 你可以把它写成一个过滤器,在 python/perl/js/php/etc 中。过滤器只会抓取第一个 1 级标题并使用它来设置标题元数据。
  • @sergioCorreia,怎么样?请解释一下。
  • 为什么不在 yaml 前端使用title: "my title"? Pandoc 将其传递给&lt;title&gt;my title&lt;/title&gt;
  • @scoa,因为这不会被其他渲染器隐藏。不好。
  • 有关 Pandoc 过滤器的信息,请参阅 Scripting with pandoc。我建议您自己尝试一下。如果您遇到问题,请回来就您的代码遇到的问题提出更具体的问题。

标签: html markdown pandoc


【解决方案1】:

pandoc -s test.md -o test.html --metadata title=titleName

【讨论】:

  • 请解释这个解决方案如何帮助回答这个问题。
  • 我要添加titleName=grep -m1 '^#\s+.*' - 提取第一行以“#”开头。谢谢。
  • 这对我很有用。 --metadata title="" 从我的输出中删除了标题,这正是我想要的。
  • 这会将给定的标题添加到页面的 HTML 中。我只想将&lt;title&gt;My awesome title&lt;/title&gt; 添加到文档的开头部分。这可能吗?我已经在使用

    作为我的标题。

【解决方案2】:

假设您有一个README.md 文件,并且您想将其转换为README.html,第一个level 1 降价标题作为html 标题。

您可以使用自定义文件管理器运行 pandoc(以 python 为例)。

  1. 将以下python脚本保存到filter.py文件中
from pandocfilters import toJSONFilter, Null


def behead(key, value, format, meta):
    if key == "Header" and value[0] == 1 and "title" not in meta:
        meta["title"] = {"t": "MetaInlines", "c": value[2]}
        return Null()


if __name__ == "__main__":
    toJSONFilter(behead)
  1. 为文件添加执行权限
chmod +x filter.py
  1. 为文件添加执行权限
pandoc -s README.md -o README.html --filter filter.py

【讨论】:

    猜你喜欢
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    相关资源
    最近更新 更多