ad导出pdf为啥只有一个叫_Jupyter Notebook导出包含中文的pdf_亲测有效

adcd02785e7dccd2a3b12312fc557d12.png

Jupyter Notebook是很好的数据科学创作环境,是非常方便的Python代码编辑器。jupyter提供导出的格式有.py、.html、.md、.pdf等。目前用其导出包含中文的pdf会遇到很多坑,网上也有一些解决方案,大致分为两种方式,一是安装 pandoc并不断根据报错提示安装sty文件,不是很有效,另一种是安装MiKTeX并改LaTeX文件。本文主要讲第二种方式。

4de610837be5cc63d4ff373d194c5620.png
Jupyter Notebook支持的导出格式

从效果来看,网页中notebook的渲染是最好看的,导出的html对代码和超链接失真严重。在网页上点Download as -> PDF via LaTex的时候先是说缺少Pandoc库,于是pip install pandoc,之后不再说缺少这个库了,而是

nbconvert failed: pdflatex not found on PATH 或者 nbconvert failed: PDF creating failed, captured latex output。查了一些资料后改用命令行,要避免'xelatex' 不是内部或外部命令,也不是可运行的程序或批处理文件,需要先安装MiKTeX,在其官网下载后,Windows版一路next安装就行,安装包有190MB,安装过程还是耗费些时间的。安装过程中其实就在自动地安装一些sty模块了,简化了自己安装的步骤。

f4b7bd8ad05f284c416e0a6c50dd07c7.png
安装MiKTeX的部分过程

下载安装完成之后的步骤是:

1, ipynb文件编译为tex

在命令行中定位到要转换的jupyter文件的路径下,输入jupyter nbconvert --to latex yourNotebookName.ipynb

ec2313a014290863786caabe67e43052.png
编译ipynb文件为LaTeX文件

在文件目录下就可以看到一个叫yourNotebookName.tex的LaTeX文件了。

2, 手动编辑latex文件

为了能支持输出中文,需要改一下tex文件,在编辑器(我用的是Notepad++)打开刚才生成的LaTeX文件,
documentclass{article}(没有这一句就在documentclass[11pt]{ctexart} 的后面插入下面的语句)后面插入

usepackage{fontspec, xunicode, xltxtra}
setmainfont{Microsoft YaHei}

注意的是,目前(2019年8月)下载的MiKTeX 通过上面语句编译生成的tex会缺少一句usepackage{ctex} ,所以如果在setmainfont{Microsoft YaHei}缺了对ctex的引用的话,就需要加上 usepackage{ctex}

5bd284186492e6a3bdc4aa22f6a432d7.png
修改latex文件

3, 转LaTex为PDF

随后在命令行下输入:(我演示文件用的是GeoCluster.tex)

xelatex yourNotebookName.tex

2439e13ba74940beddf221dccb19fe97.png
命令行转latex为pdf

如果之前没有运行过xelatex,首次运行会安装一些依赖文件,会慢一些,最后运行完毕:

0529754fb8a2b1de3d1fff90d732b12e.png
运行完xelatex命令

可以在文件夹下看到输出的文件:

3d5145d5ba51c49fd79ec9654b683ce1.png
文件夹下的输出结果

其中:

  • .ipynb 是我们的jupyter文件
  • .tex 是由jupyter notebook文件生成的
  • .pdf 是我们最后的目标文件由.tex文件生成
  • .log、.out、.aux是LaTex生成pdf的一些输出和日志

总结一下,从jupyter notebook生成pdf文件需要的依赖项还是比较多的,Windows下安装MiKTeX才能用xelatex命令。生成步骤是先把ipynb文件编译为LaTex,然后为了支持中文修改一下lex文件,最后转换为pdf文件。

最后效果如下,虽然还是比不上网页端.ipynb的直接渲染效果,但比起导出的html等格式,更好地作为展示格式。

a3c81f1a565e59865328331fee7eabf5.png
生成pdf的效果

有可能跑xelatex yourNotebookName.tex会遇到如下问题:LaTeX里字体形状不符合要求,会改为默认字体,于是中文全部消失了,这种情况需要加上ctex的支持。

5438a5bb8a799775a81c4f7cb0a4ab3a.png
运行提示LaTeX里字体形状不符合要求

350ef92eee5ef4b7c53cea2db9d03e6c.png
增加对ctex的支持

之后就正常导出包含中文的pdf文件了。

另外从ipynb文件变成pdf文件还可以采用的方式有:

  • 打开ipynb文件后在浏览器直接选择打印;
  • 导出markdown在Typora软件中选择导出为PDF;

这三种方式生成的PDF效果对比如下图:

0c2959edd841d65bb56bf94004e2d831.png

可看出,文中这种导出LaTeX再变成PDF是很实用的。

注:

  • 1,本文在简书上的链接:jupyter notebook导出pdf并支持中文;
  • 2,查了一下ctex的资料:CTeX 中文套装在 MiKTeX 的基础上增加了对中文的完整支持。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值