全网找不到满意的 Markdown 转 Docx 模板,那就自己动手吧

本贴最后更新于 354 天前,其中的信息可能已经时移世异

大多数 Markdown 笔记应用程序使用 Pandoc 将笔记转换为 Word 文档,例如我主要使用的思源笔记。然而,Pandoc 默认导出的 Word 文档样式往往不美观,不符合中文排版习惯。

幸运的是,pandoc 可以自定义 Word 模板,用于导出时的自动格式化以美化文档,但是很奇怪的是,全网很少有人分享自己是如何具体制作模板的,就算提到也只是泛泛而谈。我自己在制作模板中遇到很多问题,比如怎么设置表格样式、怎么设置列表样式。2023 年 12 月 15 日,我终于突然解决了设置模板的有序列表和无序列表样式问题,使得自己的模板很大程度可用了,所以分享下目前在用的 word 模板,也当做一个抛砖引用,希望有更多人能分享自己的模板!😁

样式预览

pandoc 不设置模板导出 docx 的样式

image

设置本模板导出 docx 的样式

​​​​image​​​​

模板分享

有两个模板,一个标题自动编号,一个不自动编号,按需选用。

ps:如何从零创建模板我之前写过博客,具体见设置 word 模板,Markdown 也能自动转换为美观规范的 Word 文档 - 知乎 。喜欢折腾的同学可以看看,不过还是建议基于此模板修改,因为默认列表样式你可能改不了(是我无意中搓出来的)。

如何使用此模板

以思源笔记为例,在【设置】-【导出】-【导出 Word .docx 模板路径】设置模板文件地址即可。

image

其他笔记软件请自行探索,pandoc 是通过 --reference-doc ​参数设置模板路径的,可以用命令行调用下面命令

pandoc --reference-doc template.docx -s input.md  -o output.docx

​​​​

如何修改此模板

注意,要修改模板,需要更改每个类型对应的 Word 的样式,而不是只是自己改改样式就能 work 的。

一般样式

一般样式,只需要打开 word 的样式面板,鼠标点击改行,自动显示对应的样式,然后点击【修改】根据自己的需求修改样式就可以了

一般样式如下:

样式名 描述 本模板样式
Normal(正文) word 的基础样式,还会应用于列表项和列表子项 字号小四,中文字体为宋体,英文 Times New Roman
1.5 倍行距
First Paragraph 段落首段 首行缩进,
字号小四,中文字体为宋体,英文 Times New Roman
1.5 倍行距,段前 9 磅
Body Text(正文文本) 在正文段落中应用(除段落首段) 首行缩进,
字号小四,中文字体为宋体,英文 Times New Roman
1.5 倍行距,段前 9 磅
Compact 表格单元格 字号 10,中文字体为宋体,英文 Times New Roman
Heading 1(标题 1) 一级标题 字号小二,加粗,中文字体为黑体,英文 Times New Roman,
段前 24 磅,段后 24 磅
Heading 2(标题 2) 二级标题 字号三号,加粗,中文字体为黑体,英文 Times New Roman
Heading 3(标题 3) 三级标题 字号 13,加粗,中文字体为黑体,英文 Times New Roman
Heading 4(标题 4) 四级标题 字号小四,中文字体为黑体,英文 Times New Roman
Heading 5(标题 5) 五级标题 字号小四,中文字体为黑体,英文 Times New Roman
Heading 6(标题 6) 六级标题 字号小四,中文字体为黑体,英文 Times New Roman
Block Text(文本块) 引述块样式 四周添加 1 磅边框,左侧设置为 6 磅粗边框
Source Code 行内代码和代码块样式 底纹设置为灰色,四周添加 1 磅边框

修改表格样式和列表样式比较特殊

表格样式

修改表格需要点击表格后,在【表设计】下拉,点击【修改表格样式】,进行修改

image

列表样式

修改列表层级样式

所谓的层级样式是无序列表不同层级是圆点还是方块,有序列表则是不同层级的编号格式。

在下图 ① 的位置点击,可以看到列表样式有两个样式,分别对应无序列表和有序列表样式,右键修改。

image

image

修改列表缩进

鼠标点击列表所在行,右键点击【调整列表缩进】,选择【设置所有级别】

image

模板已知问题

  1. 图片无法自动居中,另外注意图片添加题注要居中的话,必须先让图片居中,再添加题注。

  2. 模板可以做到表格整体居中,但是表格单元格自动居中需要思源笔记文档中的表格本身先设置居中,否则不居中。这是因为 markdown 表格默认是居左的,markdown 的居中语法如下:

    | header 1 | header 2 |
    | :--------: | :--------: |
    |  cell 1  |  cell 2  |
    |  cell 3  |  cell 4  |
    |  cell 5  |  cell 6  |
    

我的探索过程记录

  1. 有序列表和无序列表可以基于模板改动项目符号,老实说这是我误打误撞搞出来的 😂……目前自己都没能复现,所以大家不想折腾,还是基于本模板改动,且用且珍惜。
  2. 有序列表和无序列表的行间距调整:每个列表项的间距与【正文】样式的行间距有关,此外列表项的子文本段落也是正文样式而不是【正文文本样式】(一般段落其实是【First Paragraph】、【正文文本】样式),所以需要调整列表行间距而改动【正文】样式是不太影响正文的(不过需要注意【First Paragraph】、【正文文本】样式都是基于【正文】样式改动的。为了让列表更美观,我把【正文】样式设置为 1.5 倍行距,不设置段前和段后距离,【First Paragraph】、【正文文本】会设置段前和段后距离

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • qiancang

    给大佬打 call,早就看默认导出样式不顺眼了 🎉

  • 感谢,已使用。

  • 大佬牛逼 就是这帖子不知道怎么收藏

    1 回复
  • qiyun
    该回帖仅作者和楼主可见
    1 回复
  • Achuan-2

    暂时没有合并单元格的需求,这个得看 pandoc 能不能转化 html 表格吧

  • Achuan-2

    注意:模板之前默认的页面大小的 letter,现在改为 A4 了,需要的朋友可以自己手动更改,或者下载上面提供的链接

  • yalidabuda

    感谢大佬分享

  • 六啊,感谢大佬分享

  • yalidabuda

    大佬,列表样式的缩进我自己修改之后不生效,是要有什么骚操作吗,我想要的效果是首行缩进 2 字符,后面不缩进,如下:微信截图 20240112145207.png

  • yalidabuda 1 评论

    首行缩进的问题解决了,但是现在是整体都缩进了 😂 image.png

    1 回复
    现在可以确定的是,在列表的部分,它会自己在文本之前选项增加 1.27 厘米,不知道该咋解决
    yalidabuda
  • Achuan-2

    你是这样修改的吗,要修改模板的缩进

    鼠标点击列表所在行,右键点击【调整列表缩进】,选择【设置所有级别】

    image

    1 回复
  • yalidabuda

    这样设置 了,但是不生效 😂

    2 回复
  • Achuan-2

    哦哦我想起来了,列表只能改缩进,首行缩进需要在列表的文本块设置但是列表的文本块默认是 normal 样式,同时也会用到正文。

    可能得通过在模板设置一个列表首行缩进的样式,导出 word 后批量应用这个样式了

  • Achuan-2

    我又做了一个,你看下满不满足你的需求

    导出效果是这样

    Snipaste20240115135424.png

    基于原来的修改,其实就是把第一级文字位置改为 0,缩进改为 1cm,把列表后的制表符改为了空格

    Snipaste20240115135453.png

    1 操作
    Achuan-2 在 2024-01-15 14:07:07 更新了该回帖
  • yalidabuda 1 评论

    新的模板我导出还是不行,他又自动加了缩进,😭 您那边测试导出后是没问题的吗?

    微信截图 20240115143312.png

    2 回复
    感觉你用的还是旧版本吧,我编号之后都改成空格了
    Achuan-2
  • Achuan-2

    image.png

    我这边没有问题的,不知道是不是你用的是 wps

    2 回复
  • yalidabuda

    那估计就是 wps 的锅了 😂

    算了,先这样用着吧那就,总之感谢大佬!🙏

  • yalidabuda

    经测试确实是 wps 的问题,模板没问题 😂

  • zane0301

    谢谢,收藏了。

  • CHNOTES

    谢谢收藏了

  • realysy

    默认的 docx 文件大小只有 14k,我之前也写过 word 模板(整了几个标题样式)18k,想问下作者这个模板为什么达到了 500k?有什么占体积的东西吗?

  • wobuzhidao

    大佬好,思源中居中的正文文本(不是标题),怎么样设置 word 模板导出到 word 里也是居中啊

  • Siyuan 导出 Word 图片格式调整

    '将有图片的格式改为文本之前缩进为 0 厘米,特殊格式为无,居中

    ' 将有图片的格式改为文本之前缩进为0厘米,特殊格式为无,居中
    Sub AdjustParagraphFormatting()
        Dim doc As Document
        Dim para As Paragraph
        Dim isParagraphWithPicture As Boolean
    
        Set doc = ActiveDocument
    
        For Each para In doc.Paragraphs
            isParagraphWithPicture = False
            ' 检查段落中是否有图片
            For Each InlineShape In para.Range.InlineShapes
                If InlineShape.Type = wdInlineShapePicture Then
                    isParagraphWithPicture = True
                    Exit For
                End If
            Next InlineShape
    
            If isParagraphWithPicture Then
                With para.Range.ParagraphFormat
                    ' 设置文本之前缩进为0厘米
                    .LeftIndent = CentimetersToPoints(0)
                    ' 设置段落对齐方式为居中
                    .Alignment = wdAlignParagraphCenter
                End With
            End If
        Next para
    End Sub
    
    1 回复
  • Achuan-2

    word 的宏嘛

    1 回复
  • 对头

请输入回帖内容 ...