Pandoc 的使用和遇到的问题

Pandoc 使用

前段时间换了电脑,直接拷过来的MarkDownPad出了点问题,再加上VSCode的MarkDown功能越来越好用了,索性就不再用额外的MarkDown编辑器,直接用VSCode算了,在装了markdownlint和vscode-pandoc两个插件之后就更好用了。为了使用vscode-pandoc,就开始了对Pandoc的探索,Pandoc是什么不需要多说,本文的重点在讨论Pandoc的折腾过程,Pandoc和VSCode的搭配使用挺简单的,也不需要多言。

安装

首先从github上获取最新版本,有5种版本可供选择,为了不用安装我下载了其pancoc-2.0.2-windows.zip版本,解压之后得到五个文件:.rtf与.txt文件应该都是版权声明文件,一个.html的用户指南,pandoc.exe、pandoc-citeproc.exe都是命令行工具。pandoc-citeproc.exe不清楚其作用,主要使用pandoc.exe来进行文件转换。

安装后的配置

  • 安装之后,使用 pandoc --version 命令用于检查pandoc是否可用,这时候如果直接在任意处打开cmd来执行,windows可能不能识别此命令,需要将pandoc.exe的路径配置到环境变量中去

使用

md 转 docx

pandoc test.md -o test.docx

这个转换比较简单,不用多做配置

md 转 html

pandoc -s -f gfm -t html5 --css=css/markdownPad-github.css test.md -o test.html

  • -s 表示使用标准模板输出
  • -f gfm -t html5 表示用 gfm 引擎来解析,从 Github Flavored MarkDown 到 HTML5。从网上看的别人写的是-f markdown_github -t html,试着使用这个来编译会产生Warning,提示找不到markdown_github,用gfm替代,索性就直接在命令里使用gfm
  • --css=css/markdownPad-github.css 把 markdownPad-github.css 这个css文件加到生成的HTML文件中,是其呈现出不同的样式
  • test.md -o test.html 把test.md这个MarkDown文件输出成同的.html文件,这样使用有时候会有Warning,应该是需要把.html取一个与.md文件不同的名字
  • 本想使用github-markdown.css来呈现 github 式的 MarkDown 文件,但生成的html文件并没有.markdown-body等 class 名字,应该是 html 模板的原因,后来改用markdownPad-github.css

md 转 pdf

pandoc --pdf-engine=xelatex --template=D:\tools\Pandoc\pm-template.latex test.md -o test.pdf

  • pandoc 不能直接生成 pdf 文档,需要借助 LaTeX 引擎

LaTeX

LaTeX 是一种排版系统,之前看CSDN上一篇程序员之间鄙视链的文章,用LaTeX写文档的程序员处于该条鄙视链的顶端。然而我还是用MarkDown,但是要转pdf还是得借用LaTeX,下了3G多的TeX Live.iso文件,安装占用了5个G的硬盘空间,结果只是借用其系统生成个pdf,这...应该算是买椟还珠吧...

  • Tex Live 是一个发布版 LaTeX 集成版本,包括了各种插件和宏,还有默认的编辑器TeXworks,用其语法可直接编辑生成pdf文档,然而不会那个语法
  • Tex Live 下载后找到其中的 install-tl-windows.bat 文件,双击运行,除文件保存路径外的所有选项应为默认

生成pdf过程中的问题

  • 执行命令:

pandoc --latex-engine=xelatex test.md -o test.pdf

  • 编译出错:latex-engine has been removed. Use --pdf-engine instead.

替换为:pandoc --pdf-engine=xelatex test.md -o test.pdf

  • 编译生成的pdf文件只有英文,中文不显示
    • 在网上找到江航同学的这篇文章,原因是没有指定中文字体
    • 在 cmd 中用 fc-list 查看所有安装的字体,fc-list :lang=zh 输出所有中文字体,我的cmd输出的中文乱码,执行chcp 65001打开 active code page 65001 可以看到正常的中文输出
    • 这里有个小坑,用 -V mainfont="Microsoft YaHei" 指定中文字体,必须是双引号,否则会报错

pandoc --pdf-engine=xelatex -V mainfont="Microsoft YaHei" test.md -o test.pdf

  • 中文正常显示后,发现中文不换行。原因是 Pandoc 使用的 latex 模板文件需要修改
    • 看了几篇文章,他们都改用了Tzeng Yuxio的模板文件,下载该模板,修改命令为:

pandoc --pdf-engine=xelatex --template=pm-template.latex test.md -o test.pdf

  • 报错:找不到 modules\template.latex 文件。各种找modules文件夹找不到,只好指定模板文件的绝对路径

pandoc --pdf-engine=xelatex --template=D:\tools\Pandoc\pm-template.latex test.md -o test.pdf

  • 指定模板文件后,使用这个模板文件编译出错
    - 修改pm-template.latex 中设置的中文字体LiHei Pro为本机中已安装的中文字体
    - 重新编译再次报错,在input.log 日志文件中找到具体的报错信息
xeCJK warning: “CJKfamily-Unknown”
Unknown CJK family \CJKsfdefault' is being ignored.
Try to use\setCJKmonofont[…]{…}’ to define it.
  • 解决办法就是在pm-template.latex 中加上 \setCJKmonofont{Courier New},然后继续编译报错
! Undefined control sequence.
l.199 \tightlist
  • 在这里找到了解决办法,在模板文件中加入下边代码
\newcommand{\tightlist}{%
  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
  • 改完之后再次执行命令进行编译,报错
Error producing PDF. ! File ended while scanning use of \end. <inserted text>
  • 在网上查找解决方法,说删除掉所有日志和其他几种文件再次编译,但是我多次尝试都还是报同样的错误。经过一个小时的折腾,终于发现是我在修改模板文件期间不小心删掉了一个大括号,心累...最后输入命令,成功生成了还算看得过去的pdf文档

pandoc --pdf-engine=xelatex --template=D:\tools\Pandoc\pm-template.latex test.md -o test.pdf

结语

初次接触Pandoc,对于它每个命令的含义、作用的理解还非常肤浅,难免有什么错漏,欢迎大家指出。

参考文章

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容