jupyter notebook代码导出_Jupyter Notebook导出包含中文的pdf_亲测有效

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

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

1, ipynb文件编译为tex

在命令行中定位到要转换的jupyter文件的路径下,输入

jupyter nbconvert --to latex yourNotebookName.ipynb编译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} 。修改latex文件

3, 转LaTex为PDF

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

xelatex yourNotebookName.tex命令行转latex为pdf

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

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

其中:.ipynb 是我们的jupyter文件

.tex 是由jupyter notebook文件生成的

.pdf 是我们最后的目标文件由.tex文件生成

.log、.out、.aux是LaTex生成pdf的一些输出和日志

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

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

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

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

另外从ipynb文件变成pdf文件还可以采用的方式有:打开ipynb文件后在浏览器直接选择打印;

导出markdown在Typora软件中选择导出为PDF;

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

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

注:2,查了一下ctex的资料:CTeX 中文套装在 MiKTeX 的基础上增加了对中文的完整支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453840.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端之使用 POST 提交数据并跳转

GET 方式 window.location.href是我们常用来在js中实现页面跳转的方法,这是使用get方式发送请求,示例如下 window.location.href url;优点是简单易用,缺点是如果有参数的话,参数会暴露在url地址中,这降低了系统的安…

cef js返回c++的代码_CEF3开发者系列之外篇——IE中JS与C++交互

使用IE内核开发客户端产品,系统和前端页面之间的交互,通常给开发和维护带来很大的便利性。但操作系统和前端之间的交互却是比较复杂的。具体来说就是脚本语言和编译语言的交互。在IE内核中html和css虽然不兼容,但是IE编程接口是完全一样的,这得益于微软的…

多线程编程指南 part 2

多线程编程指南Sun Microsystems, Inc.4150 Network CircleSanta Clara, CA95054U.S.A.文件号码819–7051–102006 年10 月版权所有2005 Sun Microsystems, Inc. 4150 Network Circle, Santa Clara, CA95054 U.S.A. 保留所有权利。本文档及其相关产品的使用、复制、分发和反编译…

00030_ArrayList集合

1、数组可以保存多个元素,但在某些情况下无法确定到底要保存多少个元素,此时数组将不再适用,因为数组的长度不可变 2、JDK中提供了一系列特殊的类,这些类可以存储任意类型的元素,并且长度可变,统称为集合 3…

1.3tf的varible\labelencoder

1.tf的varible变量 import tensorflow as tf #定义变量--这里是计数的变量 statetf.Variable(0,namecounter) print (state.name) #输出变量值 onetf.constant(1) #常量new_valuetf.add(state,one) updatetf.assign(state,new_value)#初始化所有变量 inittf.initialize_all_var…

kafka 日志相关配置

日志目录 ${kafka.logs.dir}/server.log :服务器日志${kafka.logs.dir}/state-change.log:状态变化日志${kafka.logs.dir}/kafka-request.log:请求处理日志${kafka.logs.dir}/log-cleaner.log:日志清理${kafka.logs.dir}/control…

linux mc服务器 mod_如何在linux搭建MC服务器

摘要:前言Q:为什么要用linux搭建MC服务器?A:因为linux系统占用率低,跑服务器效果非常好Q:看不懂linux ssh,后期自己无力运维怎么办A:没关系,这个教程是通过安装BT...前言…

flask-SQLAlchemy 使用 session.commit() 处理异常回滚

最为原始的try/except办法,多次插入数据就要写多次,很麻烦,使用python原生的contextlib.contextmanager简化代码! try:user_db User(emailself.email, nicknameself.nickname, passwordself.password)db.session.add(user_db)#所…

小米机器人清理主刷和轴承_扫地机主刷怎样更换

原标题:扫地机主刷怎样更换随着电动扫地机逐渐取代手动清洁,电动扫地机的工作量不断增加,从而导致主刷磨损更加严重,并增加了主刷更换的次数。因此,伟顿在这里告诉大家扫地机主刷怎样更换:1 .首先&#xff…

多线程编程指南

1. 多线程编程指南1--线程基础 线程编程指南1--线程基础 Wednesday, 29. March 2006, 11:48:45 多线程 本文出自:BBS水木清华站 作者:Mccartney (coolcat) (2002-01-29 20:25:25) multithreading可以被翻译成多线程控制。与传统的UNIX不同,一个传统 的UNIX进…

路由器和猫的区别

路由器和猫的区别 网络在我们现在生活中必不可少,我们链接互联网经常需要用到猫和路由器,但是依然有很多菜鸟根本不知道什么是猫什么是路由器,至于猫和路由器怎么使用就更不知道了,下面给大家详细的讲解下路由器和猫的区别。 路由器和猫的用途和链接位置不一样,如下图: 路由器:…

Docker 精通之 docker-compose

1、Docker-compose简介 1.1、ocker-compose简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。   Docker-Compose将所管理的容器分为三层,分别是工程(project),服务&#xff08…

json数据格式 穗康码_Json数据格式

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。JSON 比 XML 更小、更快,更易解析。JSON建构于两种结…

Linux 系统版本查询

显示Linux版本信息输入"cat /proc/version",说明正在运行的内核版本。输入"cat /etc/issue", 显示的是发行版本信息。输入"lsb_release -a ",可对多个linux版本适用。输入"uname -a ",可显示电脑以及操作系统的相关信息。转载于:https…

kafka 命令行命令大全

kafka 脚本 connect-distributed.sh connect-mirror-maker.sh connect-standalone.sh kafka-acls.sh kafka-broker-api-versions.sh kafka-configs.sh kafka-console-consumer.sh kafka-console-producer.sh kafka-consumer-groups.sh kafka-consumer-perf-test.sh kafka-dele…

kotlin将对象转换为map_Kotlin程序将哈希映射(HashMap)转换为列表(List)

Kotlin程序将哈希映射(HashMap)转换为列表(List)在此程序中,您将学习在Kotlin中将map转换为列表的不同方法。示例:将map转换为列表示例import java.util.ArrayListimport java.util.HashMapfun main(args: Array) {val map HashMap()map.put(1, "a…

零元学Expression Blend 4 - Chapter 4元件重复运用的观念

零元学Expression Blend 4 - Chapter 4元件重复运用的观念 原文:零元学Expression Blend 4 - Chapter 4元件重复运用的观念本章将教大家Blend元件重复运用的观念,这在Silverlight设计中是非常重要的,另外加码赠送渐层工具(Gradient Tool)。 ? 本章将教…

Python 内置模块之 ConfigParser - 解析 ini 文件

ini配置文件是被configParser直接解析然后再加载的,如果只是修改配置文件,并不会改变已经加载的配置 INI文件结构简单描述 INI文件就是扩展名为“ini”的文件。在Windows系统中,INI文件是很多,最重要的就是“System.ini”、“Sy…

电脑老是弹出vrvedp_m_出现三个可疑进程vrvedp_m.exe vrvrf_c.exe vrvsafec.exe

满意答案 你机器里装了北信源的DeviceRegist软件,这个软件不是杀毒软件或者防毒软件,而是一个远程桌面管理软件。这类软件其实和木马程序原理上一样,只不过是正规软件公司开发的,但是流氓程度不容小觑,即使在安全模式下也会加载vrvrf_c.exe,vrvedp_m.exe,vrvsafec.exe,wat…

音视频编解码 文件格式 协议内容详解

编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间。尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析、应用开发、释放license收费等等。最…