我已经习惯使用Markdown记笔记和写博客。但有一种情况,使用Markdown并不好使,那就是写比较正式的技术文档。这些文档通常用word, powerpoint编写,便于交流。Markdown不是所见即所得,这妨碍了使用它直接交流。
Pandoc的出现很好的解决了Markdown的这个疼点。他可以把Markdown转换成pdf文档,而pdf是一个比word,powerpoint更通用的格式。这一点和程序员写的源代码非常相似,给客户的不会是源代码,而是编译链接后的可执行文件。
这里主要介绍如何在Mac10.10上安装Pandoc及相关软件。
brew cask install basictex
brew cask install pandoc
sudo ln -s /usr/texbin/pdflatex /usr/local/bin/
sudo ln -s /usr/texbin/xelatex /usr/local/bin/
打印中文会遇到问题,需要安装两个Tex包并下载一个Tex模版。
sudo /usr/texbin/tlmgr update --self
sudo /usr/texbin/tlmgr install titling
sudo /usr/texbin/tlmgr install lastpage
在tzengyuxio的开源项目中下载 pm-template.latex 中文模板,将该模板中 setCJKmainfont 字段值 LiHei Pro 修改为电脑上带有的中文字体。
在命令行中执行如下命令
pandoc --latex-engine=xelatex --template=pm-template doc.md -o doc.pdf
Pandoc对markdown也有一些扩展,比如pandoc_title_block, 详细内容参考Pandoc README。
--------
利用pandoc生成中文pdf文件攻略
按照pandoc官方网站说明,下载BasicTex以及MacTeX-Additions, 不管三七二十一,一并装了,才占用几百M,在这个年月,“洒洒水”啦~
装完后,运行pandoc --latex-engine=xelatex -V mainfont=Hei 统一投放平台规划与设想.md -o tek.pdf, 发现tnd不给换行,太长的行直接截断,好啦,第一个症状出现了…
遂Google之, 发现了这篇https://groups.google.com/forum/#!topic/pandoc-discuss/GIy4crum8II, 但貌似还是没有答案,也不知道纠结了多久,在pandoc官网导航栏里,点了[Extras], 寻摸, 突然发现接近页尾的地方有中文翻译的pandoc文档项目,有转换时用的命令行说明以及其他几个文档,点进https://github.com/tzengyuxio/pages/blob/gh-pages/pandoc/convert.sh,发现如下命令赫然在目:
pandoc pandoc.markdown -o pandoc-zhtw.pdf --toc --smart --template=pm-template --latex-engine=xelatex -V mainfont='LiHei Pro'哈哈, 太爽了, 马上git clone这个项目到本地,查看输出的pdf,发现格式完全没有问题,我直接把模板拿过来用不就搞定了嘛,so:
pandoc --latex-engine=xelatex -V mainfont='LiHei Pro' --template=pm-template 统一投放平台规划与设想.md -o tek.pdfBut, Shit happens…
pandoc: Error producing PDF from TeX source. ! LaTeX Error: File `titling.sty' not found. Type X to quit orto proceed, or enter new name. (Default extension: sty) Enter file name: ! Emergency stop. l.65 \setlength
没关系, 继续google, 嗯,貌似是某个Latex包没有, 发现CTAN有这么个包下载,可下下来也不会安装啊,应该有现成的包管理器吧?! 搜来搜去,果然有,嘿嘿:
sudo tlmgr install titling继续运行, 发现还缺“lastpage.sty”, 同理安装, 再运行, No news is good news, 命令运行成功, 马上查看运行结果,NND,内容是生成了,咋许多汉字变成了方框啊!!!
哦,对了, LiHei Pro这个字体貌似不是完全支持中文的字体,换换命令:pandoc --latex-engine=xelatex -V mainfont=Hei --template=pm-template 统一投放平台规划与设想.md -o tek.pdf, 换成黑体,运行后还是方框, fuck, 打开pm-template.latex,发现有字体设置的地方也是LiHei Pro,改之, 再运行, OH YEAH, 完美结果!
好啦, 最后总结一下:
- 安装BasicTex;
- 把https://github.com/tzengyuxio/pages项目中的pm-template.latex模板提前弄下来,将LiHei Pro字体改为黑体或者其它完全支持中文的字体;
- 使用tlmgr包管理器把titling.sty和lastpage.sty两个依赖装上;
- 运行pandoc生成pdf, 当然,不要忘了要使用到第二步更改过的template文件,并指定“–latex-engine=xelatex -V mainfont=Hei”
仅此文献给那些依然为相似问题而苦恼的兄弟姐妹们, 如果可以,记得请我吃饭,比如海宝同学,哈哈哈
补充部分
有些时候, 默认的repository下找不到相应的包,所以, 这个时候可以使用sudo tlmgr --repository http://mirrors.ustc.edu.cn/CTAN/systems/texlive/tlnet install CJKfntef类似的命令来安装,但是,因为授权协议之类问题, 即使指定repository也不一定找得到, 最后就得手动安装了。
首先运行kpsewhich -var-value=TEXMFHOME找出tex安装目录(我本地系统是在/Users/fujohnwang/Library/texmf), 然后:
sudo mkdir -p texmf/tex/latex/local/ sudo cp Downloads/CJKfntef.sty ~/Library/texmf/tex/latex/local
MMD, pandoc的markdown中如果插入图片的话,经常报错, 这个时候,检查一下图片是否是gif格式,如果是,那么将其转成png格式, 这真是一个大坑,老子耗费了差不多一天的时间来解决这个问题, 因为报错信息基本没参考价值, 就各种google, 各种装依赖尝试, 各种改模板,总之各种折腾, 最后是通过先转成latex中间格式,然后再使用xelatex从latex格式转pdf的log中才瞅出些许端倪,然后将gif改成png格式之后, 哇, 顺利通关!
-----------------------------
pandoc生成中文pdf攻略
pandoc的安装
简要记录安装步骤如下:
按照pandoc官方网站说明, 下载安装pandoc
按照pandoc官方网站说明,转换输出PDF时,需要LaTeX,下载安装MacTex-Additions和BasicTex
在tzengyuxio的开源项目中下载pm-template.latex pdf中文模板,将该模板中setCJKmainfont字段值LiHei Pro修改为电脑上带有的中文字体,我的自己安装了微软雅黑字体,于是修改成了
Microsoft YaHei使用tlmgr工具安装依赖titling和lastpage
- 使用命令
pandoc --latex-engine=xelatex --template=pm-template markdown_strict.md -o markdown.pdf转换输出pdf, 可将pm-template.latex文件放置任意处,只是需要使用--template参数指定其路径.
我在安装上述包时出现找不到相应包的情况,即使使用
sudo tlmgr option --repository http://mirrors.ustc.edu.cn/CTAN/systems/texlive/tlnet
修改repository之后也不行,于是手动安装。先下载titling和lastpage, 然后运行kpsewhich -var-value=TEXMFHOME命令找出tex安装目录,进入该目录,如没有则创建之,接着执行以下命令:
安装titling和lastpage时直接根据其安装指导安装即可,需要先经历一些简单的*.sty文件生成,zip解压及文件移动等操作
转换pdf常用参数
- --latex-engine=pdflatex|lualatex|xelatex
--latex-engine用来指定转换PDF格式时LaTeX引擎,默认情况下是pdflatex,但是由于pdflatex不支持中文,因此需要将引擎设置为xelatex
- --template=FILE
使用FILE指定的文件作为输出文档的自定义模板。可将模板文件放置任意处,只是指定FILE时需要该FILE的路径。
- --toc, --table-of-contents
使用该参数后,会在输出文档开头自动产生文件目录,对于输出格式是man, docbook, slidy, slideous, s5, docx 或者odt的文档,该参数不起任何作用。
- --toc-depth=NUMBER
指定文件目录中包含的章节级别,默认NUMBER=3,表示一级标题、二级标题、三级标题都会被在目录中展示。
- -V KEY[=VAL], --variable=KEY[:VAL]
当渲染standalone模式下文档时,设置模板变量KEY的值为VAL。pandoc会自动设置默认模板中的这些变量,因此该选项这通常在使用--template选项指定自定义模板时有用,如果没有指定VAL值,那么该KEY会被赋予值true。
- -s, --standalone
转换输出文档时会自动加上合适的header和footer(例如standalone HTML, LaTeX, RTF).该选择在转换输出pdf,epub,epub3,fb2,docx,odt格式文件时会被自动设置,因此如果转换输出上述格式文件,则不用显示指定该选项。
- -N, --number-sections
对于转换输出LaTeX, ConTeXt, HTML, EPUB格式文档时,对文中章节进行编号。默认情况下,文章的章节是不会被编号的。对于使用了class unnumbered 的章节肯定不会被标号,即使使用了--number-sections选项。
No comments:
Post a Comment