如何用markdown生成带目录、页眉、页脚的pdf?

如何用markdown生成带目录、页眉、页脚的pdf?

http://pandoc.org/demos.html

TODO List

  • [OK] 实现基础的md转pdf的shell脚本
  • 将md转pdf封装成云服务,为整个安纳斯联盟提供

相关的转化方式

pandoc+Latex模板

latex基础

推荐字体

## 建议用于标题的字体
-V mainfont="思源黑体 CN"

pacman -S adobe-source-han-sans-cn-fonts

## 建议用与特殊段落的字体
-V mainfont="AR PL New Kai"

pacman -S opendesktop-fonts

常用脚本

## 简单版
pandoc --latex-engine=xelatex README.md -o read.pdf -V mainfont="思源黑体 CN" --highlight-style pygments
## 带段落与头部
pandoc -N --template=mytemplate.tex --variable mainfont="Palatino" --variable sansfont="Century Gothic" --variable monofont="Consolas" --variable fontsize=12pt --variable version=1.15.2 README.md --latex-engine=xelatex --toc -o readexam.pdf --highlight-style pygments

## 字体变量可省略
pandoc -N --template=mytemplate.tex --variable fontsize=12pt --variable version=1.15.2 README.md --latex-engine=xelatex --toc -o readexam.pdf --highlight-style pygments -V mainfont=""

代码高亮

推荐样式: - pygments

--highlight-style kate

--highlight-style pygments

--highlight-style kate

--highlight-style monochrome

--highlight-style espresso

--highlight-style haddock

--highlight-style tango

--highlight-style zenburn

常见错误

# 报错:缺少latex文件
! LaTeX Error: File etoolbox.sty not found.

apt-get install texlive-latex-extra

pacman -S texlive-latexextra

# 报错:中文不显示错误
pandoc --latex-engine=xelatex README.md -o read.pdf -V mainfont="SimSun"

## 报错 缺少字体
fontspec error: "font-not-found"
## 查看当前系统字体
fc-list
## 列出所有能被 xetex 使用的字体
fc-list :outline -f "%{family}\n" | sort -u
## 推荐字体
"文泉驿微米黑"

图片分页问题

圖片唯一的問題是,pandoc有時會將表格放在錯誤的位置。因為某些圖片過高,所以pandoc會把他們插入到一個新的空白頁,然後將後面的內容直接查到表格前面,這樣很容易產生錯位。有兩個解決辦法,一是,轉換到latex後,手動修改圖片位置,當然這個比較痛苦;二是在圖片後面加入一個latex的分頁比較\pagebreak,讓後面的內容自動寫到新的一頁上,儘管這樣比較廢紙。

手动调整

LaTeX:figureSeries宏包让figure浮动环境支持自动换页

http://bbs.pinggu.org/thread-4487763-1-1.html

通常,我们在写论文插图的时候,都会使用到浮动环境figure,如果插图很多,比如十几个子图构成的图,往往非常麻烦,因为本身浮动环境是无法自动换页的,下面这一宏包可以让浮动环境也可以自动换页了,作者也给出了在IEEE模板里使用的实际样例,有兴趣的用户可以下载试用下。

选自:https://github.com/thomasWeise/figureSeries

atom编辑器latex常用插件

  • language-latex

html+css(尝试中)

pandoc READEME.md -f markdown -t html >> temp.html

echo >> "</body></html>"

md转pdf脚本实现

#!/bin/sh
message1="请输入正确格式,如:./genpdf.sh <srcfile> <buildname>"
message2="例如文件:./genpdf.sh README.md readme"
message3="例如目录:./genpdf.sh anasinc/department/ depart"
if [ $# -eq 0 ]       ##判断参数是否存在
then
    echo $message1
    echo $message2
    echo $message3
    exit                     ##不存在退出
fi
if [ x$1 = x ]       ##判断参数1是否存在
then
    echo $message1
    echo $message2
    echo $message3
    exit                     ##不存在退出
fi
if [ x$2 = x ]       ##判断参数2是否存在
then
    echo $message1
    echo $message2
    echo $message3
    exit                     ##不存在退出
fi
srcfile=$1
buildname=$2
currentdir=$(pwd)

if [ -d $1 ]
then
    # 如果源文件参数是目录,则获取目录下所有.md文档
    cd $1
    srcfile=$(ls | sed "s:^:`pwd`/:")
fi

echo $srcfile

cd $currentdir

pandoc -N --template=.tpl/anas.tex --variable fontsize=12pt ${srcfile} --latex-engine=xelatex --toc -o build/${buildname}.pdf --highlight-style kate -V mainfont="思源黑体 CN" -V sansfont="思源黑体 CN" -V monofont="思源黑体 CN"
firefox build/${buildname}.pdf

latex模板文件定制

模板资源

https://github.com/jgm/pandoc/wiki/User-contributed-templates

latex基础用法

https://latex-project.org/guides/usrguide.pdf

使用fancy定制页眉页脚

http://www.ctex.org/documents/packages/layout/fancyhdr.htm

http://www.ctex.org/documents/packages/layout/fancyhdr.pdf

利用 fancyhdr 宏包提供的命令,可以方便的作到:

  • 自定义页眉和页脚。
  • 为页眉和页脚加上装饰性的横线。
  • 页眉和页脚的宽度可以超过正文文本的宽度。
  • 多行的页眉和页脚。
  • 奇偶页使用不同格式的页眉和页脚。
  • 每章的首页使用不同格式的页眉和页脚。
  • 浮动对象页使用不同格式的页眉和页脚。
  • 控制页眉和页脚的字体,包括字形,字族,大小写等。

目录与正文在同一页

在目录后$body$前,加入

\newpage

正文第一页与页眉重叠

最简单的就是正文/$body$前加入

% fix the no.2 page covered by header
\thispagestyle{empty}
\newpage
\itshape{\hspace{1em}}
\\[0.4em]
% end of fix the no.2 page covered by header

中文无法自动换行问题

上面问题在与中文行没有被换行,参考了一下Tzeng Yuxio同学的模板,中文的换行 通过\XeTeXlinebreaklocale “zh”实现。而在pandoc的缺省模板中是没有这个设置的。因此考虑修改缺省的latex模板。方法如下:

在模板的这个部分下面加上这一行\XeTeXlinebreaklocale “zh”

$if(mathfont)$
    \setmathfont(Digits,Latin,Greek){$mathfont$}
$endif$

实用案例:添加水印

http://www.ctan.org/pkg/draftwatermark

ftp://ftp.u-aizu.ac.jp/pub/tex/CTAN/macros/latex/contrib/draftwatermark/draftwatermark.pdf

\usepackage[firstpage]{draftwatermark} %此处可选项为firstpage表只有第一页有,若为空则表示所有页面都有水印

\SetWatermarkText{此处为水印内容}%若要多行显示可以用

\SetWatermarkColor{red}

\SetWatermarkColor[rgb]{0,1,0}

\SetWatermarkText{\shortstack{水印第一行\\水印第二行}}
%此WatermarkText作用范围为所在页到下一个\SetWatermarkText设置的页

\SetWatermarkScale{0.3}          %设定大小

\SetWatermarkLightness{0.88}%defaultis0.8

参考文章

使用pandoc markdown寫作後記

用pandoc-markdown,像写word一样写pdf

微信扫一扫交流

作者:ryanemax
微信关注:ryanemax (刘雨飏)
本文出处:https://romantic-hoover-f991f1.netlify.com/study/markdown2pdf/
授权协议: CC BY-SA 4.0