将中文 Markdown 文件转换为 PDF(一种可靠的方法)

原理

利用 Pandoc + LaTex 进行转换工作

准备 Markdown

首先在 Markdown 文件前面加入元数据描述(Yaml 格式的 Metadata)

---
title: 测试标题
date: 2018-07-23
abstract: |
    一些摘要
author: ringsaturn
toc: true
lang: zh-CN
documentclass:
   - article
header-includes:
  - \usepackage{ctex}
  - \usepackage{fvextra}
  - \DefineVerbatimEnvironment{Highlighting}{Verbatim}{breaklines,commandchars=\\\{\}}
---

重点说明最后一项 header-includes 中的最后两个参数,这个方法来自于 stackexchange 的 Clément :如果没有这一项,当文档中的代码块过长时,LaTex 不会自动换行,反而是超出去,相当于 PDF 中丢失了内容。加入这两个参数能实现代码块的自动换行。

转换为 PDF

这一部分参考了 知乎上黄涤的答案

pandoc -N -s --toc --smart --latex-engine=xelatex -V CJKmainfont='PingFang SC' -V mainfont='Monaco' -V geometry:margin=1in 1.md 2.md 3.md ... xx.md  -o output.pdf

其中的字体对于 macOS 是可用的,Windows 和 Linux 需要自行替换。

如果只需要单文件导出为 PDF,没有过多的排版要求,可以做进一步的简化:

# 2018-08-26 更新,去除了原始答案中已经停用的接口
# --latex-engine ——> pdf-engine

pandoc -N -s --toc --pdf-engine=xelatex -V CJKmainfont='PingFang SC' -V mainfont='Monaco' {{input.md}}  -o {{output.pdf}}

备注

  • 使用时发现,如果不指定 mainfont='Monaco',在处理大型表格时 PDF 中英文错位
  • URL 中不能含有非 ASCII 字符,需要预先对中文等字符做 URL Encode,否则 PDF 中的链接会异常
Comments
Write a Comment