将样式 ID/名称从 HTML 传送到 .docx?

gmi*_*ile 3 lua docx pandoc

是否有可能以某种方式告诉pandoc将样式名称从原始 HTML 转移到 .docx?

我知道为了调整实际样式,我应该reference.docx使用pandoc. 但是,reference.docx仅限于它所具有的样式:标题、正文、块文本等。

我想:

  1. 在输入 HTML 中指定“myStyle”样式(通过“class”属性,通过任何其他 HTML 属性,甚至通过用 Lua 编写的过滤器代码),

    <html>
      <body>
        <p>Hello</p>
        <p class="myStyle">World!</p>
      </body>
    </html>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 添加自定义“myStyle”以reference.docx使用 Word,

  3. 运行html->docx转换并期望pandoc生成一个带有“myStyle”的段落元素(而不是,我相信它默认BodyText设置),因此最终结果如下所示(为了简洁起见,结果内部的内容被剪切):word/document.xmloutput.docx

    <w:p>
      <w:pPr>
        <w:pStyle w:val="BodyText" />
      </w:pPr>
      <w:r>
        <w:txml:space="preserve">Hello</w:t>
      </w:r>
    </w:p>
    <w:p>
      <w:pPr>
        <w:pStyle w:val="myStyle" />
      </w:pPr>
      <w:r>
        <w:txml:space="preserve">World!</w:t>
      </w:r>
    </w:p>
    
    Run Code Online (Sandbox Code Playgroud)

一些证据 styleId可以传递,但我不太理解,也找不到任何有关它的文档。

Lua 中的过滤文档指出,您可以attrs在操作 a 时访问pandoc.div,但它没有说明任何 attr 是否会被 pandoc 以任何有意义的方式解释。

gmi*_*ile 5

最后,找到了我需要的 \xe2\x80\x93 Custom styles。它是有限的,但比我之前到达的要好,当然也比什么都没有好得多:)

\n

我将在这里留下分步指南,以防有人偶然发现类似的问题。

\n

首先,生成一个reference.docx这样的文件:

\n
pandoc --print-default-data-file reference.docx > styles.docx\n
Run Code Online (Sandbox Code Playgroud)\n

然后在 MS Word 中打开该文件(我使用的是 macOS 版本),您将看到以下内容:

\n

在此输入图像描述

\n

单击右侧的“新样式...”按钮,然后创建您喜欢的样式。就我而言,我将文本样式更改为蓝色粗体:

\n

在此输入图像描述

\n

由于我正在从 HTML 转换为 DOCX,因此这是我的input.html

\n
<html>\n  <body>\n    <div>Page 1</div>\n    <div custom-style="eugene-is-testing">Page 2</div>\n    <div>Page 3</div>\n  </body>\n</html>\n
Run Code Online (Sandbox Code Playgroud)\n

跑步:

\n
pandoc --standalone --reference-doc styles.docx --output output.docx input.html\n
Run Code Online (Sandbox Code Playgroud)\n

最后,享受一下结果:

\n

在此输入图像描述

\n