【问题标题】:Stitching together multiple chapters, each with a % header将多个章节拼接在一起,每个章节都有一个 % 标题
【发布时间】:2020-03-06 13:26:18
【问题描述】:

我有一些 Markdown 文件,每个文件都使用% 语法来设置它们的标题,例如

% A nice chapter

Lorum ipsum ....

# First section

Blah blah

如果我将它们一一编译成 HTML,这些章节标题就会变成页面标题,这正是我想要的。

但是,我想使用相同的输入文件来生成带有目录的单个 PDF。所以我尝试了

$ pandoc --toc -o full.pdf a.md b.md

但是,这个输出根本不是我想要的:

  • 第一个文件 (a.md) 中的 % 标题成为文档标题
  • 随后的 % 标题将被忽略
  • # 标题在 TOC 中显示为章节标题,但它们看起来根本不像章节(它们甚至不会从新页面开始)。

如何将包含章节的 Markdown 文件组合成一本书?

【问题讨论】:

    标签: markdown pandoc


    【解决方案1】:

    Pandoc 的% 语法实际上是针对document titles。 Pandoc 每次转换仅对一个文档进行操作(因此,如果您有多个输入文件,则它们基本上会在处理之前连接起来)。

    你可以做的是使用标题:

    # title one
    

    连同将top-level-division 设置为chapter 甚至part

    pandoc --top-level-division=chapter --toc -o full.pdf a.md b.md
    

    【讨论】:

    • 这与 HTML 输出效果不佳,但是:“[警告] 此文档格式需要非空的 <title> 元素。请在元数据中指定 titlepagetitle,例如,在命令行上使用--metadata pagetitle="..."。"
    • 嗯,这就是书名,你可以在第一章(或命令行)中设置它。另请参阅--shift-heading-level-by 选项...
    • 我的意思是 HTML 输出 每章。请参阅我的最终解决方案,该解决方案包含您的解决方案,但保留独立的章节文件以使用 %
    【解决方案2】:

    @mb21 的建议是使用# 作为章节标题,即将所有内容移动一级。这样,pandoc --top-level-division=chapter --toc 确实做了正确的事情,但是同样的文件在 HTML 后端不能很好地工作:如果我没有 % 标题,它会抱怨

    [WARNING] This document format requires a nonempty <title> element.
      Please specify either 'title' or 'pagetitle' in the metadata,
      e.g. by using --metadata pagetitle="..." on the command line.
      Falling back to 'a'
    

    所以看起来我们遇到了一个难题,要么 HTML 输出正确,要么 PDF 输出正确,但不能同时正确。

    解决方案是使用% 存储(章节)标题和# 用于顶部等(即HTML 兼容格式)的文件,然后即时将它们转换为PDF 兼容格式。我最终编写的 Makefile 规则是:

    RetroClash.pdf: $(MARKDOWNS)
        ($(foreach MARKDOWN, $^, sed -e '$$a\\' -e 's/^#/##/' -e 's/^% /# /' $(MARKDOWN);)) | \
        pandoc --top-level-division=chapter --toc --toc-depth=2 -o $@
    

    第一行遍历每个输入 .md 文件,并将其转换为:

    然后将所有转换后的 Markdown 文件的串联作为单个输入传递给 Pandoc。

    【讨论】:

    • 请注意,如果您的代码块在第一列中包含 #,这并不能很好地处理这种情况,例如带有 cmets 的 shell 脚本。
    猜你喜欢
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多