pandoc markdown 生成pdf文档

今天和大家分享一个工具 pandoc

github地址: https://github.com/jgm/pandoc

它被称作是一款神器

为什么这样说:

标记语言经过一路发展,貌似从最初的复杂架构中渐渐的又回归到了简洁.

不得不提的是 2004年发展起来的 markdown 语法,简洁清爽,非常受人欢迎,尤其是不会操作word的用户,不会书写html的用户,简直就是福音.


但是问题来了, markdown 语法就算非常简洁,我潇潇洒洒写了5万字的小说,最后这个 md 文件如何变成 word文档(或许是受markdown 限制,打印问题,或者出版社要求) 或者如何变成一个pdf文档.......

(关于markdown用法请查看这篇博文)


于是 pandoc 出现了:

它就像一把瑞士军刀

可以把markdown、 reStructuredText、 textile、 HTML、或者LaTeX转换成:


HTML格式: XHTML, HTML5, 以及HTML幻灯片Slidy, S5,或者DZSlides.

文字处理软件格式: Microsoft Word docx, OpenOffice/LibreOffice ODT, OpenDocument XML

电子书: EPUB

文档格式: DocBook, GNU TexInfo, Groff man pages

TeX格式: LaTeX, ConTeXt, LaTeX Beamer slides

PDF via LaTeX

轻量级标记语言格式: Markdown, reStructuredText, AsciiDoc, MediaWiki markup, Emacs Org-Mode, Textile


安装pandoc

brew install pandoc


生成HTML文档相对来说非常简答:

zhangzhi@moke:~/code/pandoc_demo$ pandoc -f markdown_github -s -S --highlight-style espresso -t html -o yijiebuyi.html yijiebuyi.md

运行后可以在此目录下看到 yijiebuyi.html 文档已经生成.


生成PDF文档相对来说比较费事,我们下面来介绍下:

如果这时你直接使用 pandoc 生成 pad 的时候,会碰到这样的错误:

zhangzhi@moke:~/code/pandoc_demo$pandoc --latex-engine=xelatex -V mainfont='SimSun' --template=pandoc/pm-template yijiebuyi.md -o yijiebuyi.pdf

错误:

pandoc: xelatex not found. xelatex is needed for pdf output.

没有找到 xelatex 


XelaTex是什么?

XeLaTeX是使用LaTeX的排版引擎.


Latex是什么?

LaTeX 是TeX 中的一种格式(format) ,是建立在TeX 基础上的宏语言,也就是说,每一个LaTeX 命令实际上最后都会被转换解释成几个甚至上百个TeX 命令。但是,普通用户可以无需知道这中间的复杂联系。就象编程的时候如果使用一些已经编译好的函数库和模板可以使我们仅仅用几个命令就实现很多功能一样,LaTeX 根据人们排版文章的习惯,定义了许多命令和模板,通过这些命令和模板,我们可以很快的得到漂亮的排版结果。


google后大致明白了,pandoc 在生成pdf时需要借助XelaTex排版引擎.那我们就需要安装这个引擎.


http://www.texts.io/support/0001/

Download  Install BasicTex-2012


安装完排版引擎XelaTex 后,我们再来生成下pdf ,有一点点小激动啊!!

zhangzhi@moke:~/code/pandoc_demo$pandoc --latex-engine=xelatex -V mainfont='SimSun' --template=pandoc/pm-template yijiebuyi.md -o yijiebuyi.pdf
! LaTeX Error: File `everypage.sty' not found.

Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)

Enter file name:
! Emergency stop.
<read *>

l.91 \tl_new:N

pandoc: Error producing PDF from TeX source


OMG!去往天堂的路充满了荆棘,想想西游记取经历经9*9 =81难才取到真经,好像一下就释然了,正所谓我不入地狱谁入地狱.

上面看上去是排版引擎需要某个依赖,但是没有找到.第一直觉,这个依赖应该是没有安装.


如果你安装了上面的 XelaTex 后,可以用 tlmgr 来进行以来管理.比如安装上面的依赖 everypage.sty 

zhangzhi@moke:~/code/pandoc_demo$ sudo tlmgr install everypage
Password:
TeX Live 2014 is frozen forever and will no
longer be updated.  This happens in preparation for a new release.

If you're interested in helping to pretest the new release (when
pretests are available), please read http://tug.org/texlive/pretest.html.
Otherwise, just wait, and the new release will be ready in due time.
tlmgr: package repository http://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/tlnet
===============================================================================
tlmgr itself needs to be updated.
Please do this via either
  tlmgr update --self
or by getting the latest updater for Unix-ish systems:
  http://mirror.ctan.org/systems/texlive/tlnet/update-tlmgr-latest.sh
and/or Windows systems:
  http://mirror.ctan.org/systems/texlive/tlnet/update-tlmgr-latest.exe
Then continue with other updates as usual.
===============================================================================
tlmgr: Not continuing, please see warning above!

是不是有点受打击了,貌似我们下载的这个版本很低级啊,按照提示我们只好更新一下 TeX

zhangzhi@moke:~/code/pandoc_demo/pandoc$ sudo tlmgr --self --all update

一共更新了58个依赖,不一一列举,这里需要注意的是:

更新时需要 sudo 权限.


然后接着安装上面的依赖:

zhangzhi@moke:~/code/pandoc_demo$ sudo tlmgr install everypage

下面你接着去尝试生成pdf 大概还会遇到2次缺少依赖的提示 ,和上面一样,依次安装依赖 titling.sty 和 lastpage.sty 即可.

zhangzhi@moke:~/code/pandoc_demo$ sudo tlmgr install titling
zhangzhi@moke:~/code/pandoc_demo$ sudo tlmgr install lastpage

解决完依赖后,我们需要一个生成pdf的模板, latex的模板,我demo项目里的模板是直接网上找到的,回头会放到github上.

模板所在的路径是当前项目 /pandoc/pm-template

下面是一个完整的 pm-template.latex 模板

\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$]{$documentclass$}
\usepackage{geometry} 		% 設定邊界
\geometry{
  top=1in,
  inner=1in,
  outer=1in,
  bottom=1in,
  headheight=3ex,
  headsep=2ex
}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{amssymb,amsmath}
\usepackage{ifxetex,ifluatex}
\usepackage{fixltx2e} % provides \textsubscript
% use upquote if available, for straight quotes in verbatim environments
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
  \usepackage[utf8]{inputenc}
$if(euro)$
  \usepackage{eurosym}
$endif$
\else % if luatex or xelatex
  \usepackage{fontspec} 	% 允許設定字體
  \usepackage{xeCJK} 		% 分開設置中英文字型
  \setCJKmainfont{SimSun} 	% 設定中文字型
  \setmainfont{Georgia} 	% 設定英文字型
  \setromanfont{Georgia} 	% 字型
  \setmonofont{Courier New}
  \linespread{1.2}\selectfont 	% 行距
  \XeTeXlinebreaklocale "zh" 	% 針對中文自動換行
  \XeTeXlinebreakskip = 0pt plus 1pt % 字與字之間加入0pt至1pt的間距,確保左右對整齊
  \parindent 0em 		% 段落縮進
  \setlength{\parskip}{20pt} 	% 段落之間的距離
  \ifxetex
    \usepackage{xltxtra,xunicode}
  \fi
  \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
  \newcommand{\euro}{€}
$if(mainfont)$
    \setmainfont{$mainfont$}
$endif$
$if(sansfont)$
    \setsansfont{$sansfont$}
$endif$
$if(monofont)$
    \setmonofont{$monofont$}
$endif$
$if(mathfont)$
    \setmathfont{$mathfont$}
$endif$
\fi
% use microtype if available
\IfFileExists{microtype.sty}{\usepackage{microtype}}{}
$if(geometry)$
\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
$endif$
$if(natbib)$
\usepackage{natbib}
\bibliographystyle{plainnat}
$endif$
$if(biblatex)$
\usepackage{biblatex}
$if(biblio-files)$
\bibliography{$biblio-files$}
$endif$
$endif$
$if(listings)$
\usepackage{listings}ƒ
$endif$
$if(lhs)$
\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
$endif$
$if(highlighting-macros)$
$highlighting-macros$
$endif$
$if(verbatim-in-note)$
\usepackage{fancyvrb}
$endif$
$if(tables)$
\usepackage{longtable}
$endif$
$if(graphics)$
\usepackage{graphicx}
% We will generate all images so they have a width \maxwidth. This means
% that they will get their normal width if they fit onto the page, but
% are scaled down if they would overflow the margins.
\makeatletter
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth
\else\Gin@nat@width\fi}
\makeatother
\let\Oldincludegraphics\includegraphics
\renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=\maxwidth]{#1}}
$endif$
\ifxetex
  \usepackage[setpagesize=false, % page size defined by xetex
              unicode=false, % unicode breaks when used with xetex
              xetex]{hyperref}
\else
  \usepackage[unicode=true]{hyperref}
\fi
\hypersetup{breaklinks=true,
            bookmarks=true,
            pdfauthor={$author-meta$},
            pdftitle={$title-meta$},
            colorlinks=true,
            urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,
            linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$,
            pdfborder={0 0 0}}
\urlstyle{same}  % don't use monospace font for urls
$if(links-as-notes)$
% Make links footnotes instead of hotlinks:
\renewcommand{\href}[2]{#2\footnote{\url{#1}}}
$endif$
$if(strikeout)$
\usepackage[normalem]{ulem}
% avoid problems with \sout in headers with hyperref:
\pdfstringdefDisableCommands{\renewcommand{\sout}{}}
$endif$
\setlength{\parindent}{0pt}
%\setlength{\parskip}{6pt plus 2pt minus 1pt}
\setlength{\emergencystretch}{3em}  % prevent overfull lines

\title{\huge 在OSX平台上的XeLaTeX中文測試} % 設置標題,使用巨大字體
\author{FoolEgg.com} 		% 設置作者
\date{February 2013} 		% 設置日期
\usepackage{titling}
\setlength{\droptitle}{-8em} 	% 將標題移動至頁面的上面

\usepackage{fancyhdr}
\usepackage{lastpage}
\pagestyle{fancyplain}

$if(numbersections)$
\setcounter{secnumdepth}{5}
$else$
\setcounter{secnumdepth}{0}
$endif$
$if(verbatim-in-note)$
\VerbatimFootnotes % allows verbatim text in footnotes
$endif$
$if(lang)$
\ifxetex
  \usepackage{polyglossia}
  \setmainlanguage{$mainlang$}
\else
  \usepackage[$lang$]{babel}
\fi
$endif$
$for(header-includes)$
$header-includes$
$endfor$

$if(title)$
\title{$title$}
$endif$
\author{$for(author)$$author$$sep$ \and $endfor$}
\date{$date$}

\begin{document}
$if(title)$
\maketitle
$endif$

$for(include-before)$
$include-before$

$endfor$
$if(toc)$
{
\hypersetup{linkcolor=black}
\setcounter{tocdepth}{$toc-depth$}
\tableofcontents
}
$endif$
$body$

$if(natbib)$
$if(biblio-files)$
$if(biblio-title)$
$if(book-class)$
\renewcommand\bibname{$biblio-title$}
$else$
\renewcommand\refname{$biblio-title$}
$endif$
$endif$
\bibliography{$biblio-files$}

$endif$
$endif$
$if(biblatex)$
\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$

$endif$
$for(include-after)$
$include-after$

$endfor$
\end{document}


模板里注意这一项: 

setCJKmainfont{SimSun}

这是设置显示字体的配置,SimSun 是系统的宋体,如果你这里的配置不支持中文,但是文档里包含中文,那么生成的pad会有小方块样子的乱码.

你可以直接复制我上面的模板内容放到 pm-template.latex 这里面直接使用.

如果你想使用其他字体,请查看你系统所安装的字体:


如何查看自己系统中已经安装的字体名称:

sudo fc-list :lang=zh-cn

抱歉,又是一个坑

fc-list命令在路径/opt/X11/bin下,

但是自OS X 10.8 Mountain Lion开始不再安装X11,因此用户需要安装XQuartz(http://xquartz.macosforge.org )

安装 XQuartz 后就可以使用 fc-list 查看了.看下我系统里安装的字体如下:

zhangzhi@moke:~/code/pandoc_demo$ fc-list :lang=zh-cn


/Library/Fonts/华文仿宋.ttf: STFangsong:style=常规体,標準體,Ordinær,Normal,Regular,Normaali,Regolare,レギュラー,일반체,Regulier,Обычный
/Library/Fonts/Yuanti.ttc: 圆体\-简,圓體\-簡,Yuanti SC:style=粗体,粗體,Bold
/System/Library/Fonts/STHeiti Medium.ttc: 黑体\-简,黑體\-簡,Heiti SC,黒体\-簡,Heiti\-간체:style=中等,中黑,Medium,Halbfett,Normaali,Moyen,Medio,ミディアム,중간체,Médio,Средний,Normal,Media
/Library/Fonts/Hanzipen.ttc: 翩翩体\-简,翩翩體\-簡,HanziPen SC,翩翩體 簡:style=常规体,標準體,Regular
/Library/Fonts/Microsoft/STHUPO.TTF: 华文琥珀,STHupo:style=Regular
/System/Library/Fonts/STHeiti Thin.ttc: .HeitiUI J:style=Thin
/System/Library/Fonts/STHeiti Thin.ttc: .HeitiUI K:style=Thin
/Library/Fonts/Microsoft/Kaiti.ttf: 楷体,KaiTi:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/Library/Fonts/Lantinghei.ttc: 兰亭黑\-简,蘭亭黑\-簡,Lantinghei SC:style=Heavy,特黑
/System/Library/Fonts/STHeiti Thin.ttc: .HeitiUI GB18030PUA:style=Thin
/Library/Fonts/AdobeKaitiStd-Regular.otf: Adobe 楷体 Std,Adobe Kaiti Std,Adobe Kaiti Std R,Adobe 楷体 Std R:style=R,Regular
/System/Library/Fonts/STHeiti Light.ttc: 黑体\-繁,黑體\-繁,Heiti TC,黒体\-繁,Heiti\-번체:style=细体,細體,Mager,Fein,Light,Ohut,Fin,Leggero,ライト,가는체,Licht,Tynn,Leve,Светлый,Fina
/Library/Fonts/Hiragino Sans GB W6.otf: 冬青黑体简体中文,冬青黑體簡體中文,Hiragino Sans GB,ヒラギノ角ゴ 簡体中文,冬青黑體簡體中文 W6,Hiragino Sans GB W6,ヒラギノ角ゴ 簡体中文 W6,冬青黑体简体中文 W6:style=W6,Bold
/Library/Fonts/AdobeHeitiStd-Regular.otf: Adobe 黑体 Std,Adobe Heiti Std,Adobe Heiti Std R,Adobe 黑体 Std R:style=R,Regular
/Library/Fonts/Microsoft/STLITI.ttf: 华文隶书,STLiti:style=Regular
/Library/Fonts/Hiragino Sans GB W3.otf: 冬青黑体简体中文,冬青黑體簡體中文,Hiragino Sans GB,ヒラギノ角ゴ 簡体中文,冬青黑體簡體中文 W3,Hiragino Sans GB W3,ヒラギノ角ゴ 簡体中文 W3,冬青黑体简体中文 W3:style=W3,Regular
/Library/Fonts/Microsoft/SimHei.ttf: 黑体,SimHei:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/Library/Fonts/AdobeSongStd-Light.otf: Adobe 宋体 Std,Adobe Song Std,Adobe Song Std L,Adobe 宋体 Std L:style=L,Regular
/Library/Fonts/Hanzipen.ttc: 翩翩体\-简,翩翩體\-簡,HanziPen SC,翩翩體 簡:style=粗体,粗體,Bold
/Library/Fonts/Kaiti.ttc: STKaiti:style=常规体,標準體,Ordinær,Normal,Regular,Normaali,Regolare,レギュラー,일반체,Regulier,Обычный
/Library/Fonts/Xingkai.ttc: 行楷\-简,行楷\-簡,Xingkai SC:style=细体,細體,Light
/Library/Fonts/华文黑体.ttf: STHeiti:style=常规体,標準體,Ordinær,Normal,Regular,Normaali,Regolare,レギュラー,일반체,Regulier,Обычный
/System/Library/Fonts/STHeiti UltraLight.ttc: .HeitiUI TC:style=Ultra Light
/System/Library/Fonts/STHeiti UltraLight.ttc: .HeitiUI SC:style=Ultra Light
/Library/Fonts/Kaiti.ttc: 楷体\-繁,楷體\-繁,Kaiti TC:style=粗体,粗體,Bold
/System/Library/Fonts/STHeiti UltraLight.ttc: .HeitiUI K:style=Ultra Light
/System/Library/Fonts/STHeiti UltraLight.ttc: .HeitiUI J:style=Ultra Light
/Library/Fonts/华文细黑.ttf: STHeiti:style=细体,細體,Mager,Fein,Light,Ohut,Fin,Leggero,ライト,가는체,Licht,Tynn,Leve,Светлый,Fina
/Library/Fonts/Songti.ttc: 宋体\-繁,宋體\-繁,Songti TC:style=粗体,粗體,Bold
/Library/Fonts/YuppySC-Regular.otf: 雅痞\-简,雅痞\-簡,Yuppy SC:style=常规体,標準體,Regular
/Library/Fonts/Kaiti.ttc: 楷体\-简,楷體\-簡,Kaiti SC:style=黑体,黑體,Black
/Library/Fonts/Kaiti.ttc: 楷体\-简,楷體\-簡,Kaiti SC:style=粗体,粗體,Bold
/Library/Fonts/Microsoft/STXINWEI.ttf: 华文新魏,STXinwei:style=Regular
/Library/Fonts/Songti.ttc: 宋体\-简,宋體\-簡,Songti SC:style=粗体,粗體,Bold
/Library/Fonts/WeibeiSC-Bold.otf: 魏碑\-简,魏碑\-簡,Weibei SC:style=粗体,粗體,Bold
/Library/Fonts/Arial Unicode.ttf: Arial Unicode MS:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/Library/Fonts/Microsoft/STXINGKA.ttf: 华文行楷,STXingkai:style=Regular
/Library/Fonts/Songti.ttc: 宋体\-简,宋體\-簡,Songti SC:style=黑体,黑體,Black
/Library/Fonts/Lantinghei.ttc: 兰亭黑\-简,蘭亭黑\-簡,Lantinghei SC:style=Demibold,中黑
/Library/Fonts/Baoli.ttc: 报隶\-简,報隸\-簡,Baoli SC:style=常规体,標準體,Regular
/System/Library/Fonts/STHeiti Medium.ttc: 黑体\-繁,黑體\-繁,Heiti TC,黒体\-繁,Heiti\-번체:style=中等,中黑,Medium,Halbfett,Normaali,Moyen,Medio,ミディアム,중간체,Médio,Средний,Normal,Media
/Library/Fonts/Hannotate.ttc: 手札体\-简,手札體\-簡,Hannotate SC:style=粗体,粗體,Bold
/Library/Fonts/Hannotate.ttc: 手札体\-简,手札體\-簡,Hannotate SC:style=常规体,標準體,Regular
/Library/Fonts/Yuanti.ttc: 圆体\-简,圓體\-簡,Yuanti SC:style=细体,細體,Light
/Library/Fonts/Microsoft/Microsoft Yahei.ttf: 微软雅黑,Microsoft YaHei:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/Library/Fonts/Songti.ttc: 宋体\-简,宋體\-簡,Songti SC:style=常规体,標準體,Regular
/System/Library/Fonts/STHeiti Light.ttc: 黑体\-简,黑體\-簡,Heiti SC,黒体\-簡,Heiti\-간체:style=细体,細體,Mager,Fein,Light,Ohut,Fin,Leggero,ライト,가는체,Licht,Tynn,Leve,Светлый,Fina
/Library/Fonts/Songti.ttc: STSong:style=常规体,標準體,Ordinær,Normal,Regular,Normaali,Regolare,レギュラー,일반체,Regulier,Обычный
/System/Library/Fonts/LastResort.ttf: LastResort:style=Regular
/Library/Fonts/Songti.ttc: 宋体\-繁,宋體\-繁,Songti TC:style=常规体,標準體,Regular
/Library/Fonts/AdobeFangsongStd-Regular.otf: Adobe 仿宋 Std,Adobe Fangsong Std,Adobe Fangsong Std R,Adobe 仿宋 Std R:style=R,Regular
/Library/Fonts/Yuanti.ttc: 圆体\-简,圓體\-簡,Yuanti SC:style=常规体,標準體,Regular
/Library/Fonts/WawaSC-Regular.otf: 娃娃体\-简,娃娃體\-簡,Wawati SC:style=常规体,標準體,Regular
/System/Library/Fonts/STHeiti UltraLight.ttc: .HeitiUI GB18030PUA:style=Ultra Light
/Library/Fonts/Songti.ttc: 宋体\-繁,宋體\-繁,Songti TC:style=细体,細體,Light
/Library/Fonts/Microsoft/SimSun.ttf: 宋体,SimSun:style=Regular
/Library/Fonts/Lantinghei.ttc: 兰亭黑\-简,蘭亭黑\-簡,Lantinghei SC:style=纤黑,纖黑,Extralight
/Library/Fonts/Kaiti.ttc: 楷体\-简,楷體\-簡,Kaiti SC:style=常规体,標準體,Regular
/Library/Fonts/Songti.ttc: 宋体\-简,宋體\-簡,Songti SC:style=细体,細體,Light
/Library/Fonts/Microsoft/Fangsong.ttf: 仿宋,FangSong:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/Library/Fonts/Kaiti.ttc: 楷体\-繁,楷體\-繁,Kaiti TC:style=常规体,標準體,Regular
/Library/Fonts/Xingkai.ttc: 行楷\-简,行楷\-簡,Xingkai SC:style=粗体,粗體,Bold
/System/Library/Fonts/STHeiti Thin.ttc: .HeitiUI TC:style=Thin
/System/Library/Fonts/STHeiti Thin.ttc: .HeitiUI SC:style=Thin
/Library/Fonts/Microsoft/STZHONGS.ttf: 华文中宋,STZhongsong:style=Regular
/Library/Fonts/Libian.ttc: 隶变\-简,隸變\-簡,Libian SC:style=常规体,標準體,Regular


到现在所有依赖环境貌似都安装齐全了,不能忘记我们的初衷,继续生成我们的 pdf 文件啊:

zhangzhi@moke:~/code/pandoc_demo$pandoc --latex-engine=xelatex -V mainfont='SimSun' --template=pandoc/pm-template yijiebuyi.md -o yijiebuyi.pdf

生成后,看下我们的目录

zhangzhi@moke:~/code/pandoc_demo$ ls
CNAME          index.html     pandoc         yijiebuyi.html
articles       markdown       stylesheets    yijiebuyi.md
convertall.sh  missfont.log   template.html5 yijiebuyi.pdf

yijiebuyi.pdf 已经生成了,是不是很开心,哈哈哈....(估计你心里恨不得在骂娘(*^__^*) ……)

看下我们生成的pdf 文件


回头再来说下 pandoc 生成pdf 的命令:

pandoc --latex-engine=xelatex -V mainfont='SimSun' --template=pandoc/pm-template README.md -o yijiebuyi.pdf


--latex-engine=xelatex 指定排版引擎为 xelatex ,为什么?因为默认的排版引擎不支持中文.

mainfont='SimSun'   指定字体,如果你的文档中包括汉字,你的字体一定是支持汉字的字体,如果不支持,生成后会乱码.

--template=pandoc/pm-template  是指定模板是 pandoc目录下的 pm-template.latex 模板,这个模板是网上找到的,回头我分享出来,其实上面已经把全部模板代码贴出来了.如果没有模板,你生成的pdf 如果有中文的情况下不会换行,也就是说会无故丢失内容.


上面的整个流程是我自己在生成pdf过程中走过的坑,所以每一步几乎都会出现错误,博客也是按照这个过程记录下来,希望你也是从坑坑洼洼中走过来,加深理解,毕竟天上不会掉馅饼,就算掉下来你也抢不过狗^_^


github演示项目地址: https://github.com/zzhi191/pandoc_demo


****end****

回到顶部