【问题标题】:Specify Pandoc HTML numbering to start from <h2>指定从 <h2> 开始的 Pandoc HTML 编号
【发布时间】:2022-08-19 21:30:29
【问题描述】:

我想将 Markdown 转换为带有标头编号的 HTML,从 &lt;h2&gt; 开始。 实现它的方法是什么?

pandoc 提供选项--number-sections(或-N),因此标题在输出中被编号。 现在我正在尝试使用此选项将 Markdown 转换为 HTML。

默认情况下,pandoc 的输出 HTML 标头级别从 &lt;h1&gt; 开始。这不是很理想,所以我想把它改成&lt;h2&gt;(而原来的markdown可能包含许多一级标题,输出的HTML应该最多包含1个&lt;h1&gt;)。

可以指定--shift-heading-level-by=1;然后,输出标头级别从&lt;h2&gt; 开始(请参阅Official Pandoc User\'s Guide,也可能还有this question)。 但是,它会弄乱部分编号!基本上,部分编号的级别也会发生变化。现在所有部分都在 \"0\" 下(如 0.1, 0.2, 0.2.1, ...)并且不存在 1 的部分。

pandoc 提供了另一个选项--number-offset=1,但它所做的只是抵消了像 \"0.1\"→\"1.1\" 这样的数字。然后,所有节号从 1 开始,没有节号为 2。显然,这没有任何意义。初始前缀编号“1.”是多余的,应该从所有部分编号中删除,如 1.1→1、1.1.4→1.4、1.2.3→2.3 等。

出于演示目的,这里是一个示例 Markdown 文本文件 (abc.md)

%Test-md

# First Header (1) #

## Header (1-1) ##

# Second Header (2) #

## Header (2-2) ##

### Header (2-3) ###

及其输出 HTML(简化)

pandoc -N --section-divs --shift-heading-level-by=1 -t html5 abc.md
<section id=\"first-header-1\" data-number=\"0.1\">
  <h2 data-number=\"0.1\">0.1 First Header (1)</h2>
    <section id=\"header-1-1\" data-number=\"0.1.1\">
      <h3 data-number=\"0.1.1\">0.1.1 Header (1-1)</h3>
    </section>
  </section>
  <section id=\"second-header-2\" data-number=\"0.2\">
    <h2 data-number=\"0.2\">0.2 Second Header (2)</h2>
      <section id=\"header-2-2\" data-number=\"0.2.1\">
        <h3 data-number=\"0.2.1\">0.2.1 Header (2-2)</h3>
        <section id=\"header-2-3\" data-number=\"0.2.1.1\">
          <h4 data-number=\"0.2.1.1\">0.2.1.1 Header (2-3)</h4>
       </section>
  </section>
</section>

如何让 pandoc 以普通方式(1、2、2.1、2.2、2.2.1)进行编号,但输出标头级别从 &lt;h2&gt; 开始的 HTML?

    标签: html markdown h2 pandoc


    【解决方案1】:

    到目前为止,我发现的最简单的解决方案是分两步完成。首先,将 Markdown 转换为 HTML,而不改变标题级别。然后,转换 HTML到另一个 HTML,其中标题级别移动 1:&lt;h1&gt;&lt;h2&gt;

    这是一个示例代码:

    pandoc -N --section-divs -t html5 /tmp/try1.md |\
      pandoc --from=html -t html5 --shift-heading-level-by=1 > output.html
    

    注意第二个pandoc 中的--from=html——这是必要的,因为否则pandoc 将不知道流(管道)输入的文件类型。

    这是(简化的)输出。现在没有像“0”这样的冗余公共前缀。或“1”。在节标题编号中。

    <section id="first-header-1" data-number="1">
      <h2 data-number="1">1 First Header (1)</h2>
        <section id="header-1-1" data-number="1.1">
          <h3 data-number="1.1">1.1 Header (1-1)</h3>
        </section>
    </section>
    <section id="second-header-2" data-number="2">
      <h2 data-number="2">2 Second Header (2)</h2>
        <section id="header-2-2" data-number="2.1">
          <h3 data-number="2.1">2.1 Header (2-2)</h3>
            <section id="header-2-3" data-number="2.1.1">
              <h4 data-number="2.1.1">2.1.1 Header (2-3)</h4>
            </section>
        </section>
    </section>
    

    请注意,number-offset 是无关紧要的,因为它指定编号从与默认 1 或 0 不同的数字开始,并且与节编号无关等级.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多