【python】jupyter notebook导出pdf和pdf不显示中文问题

文章目录

  • 写在前面
  • [1. 使用jupyter notebook导出pdf](#1. 使用jupyter notebook导出pdf)
    • [1.1 安装`Pandoc`](#1.1 安装Pandoc)
    • [1.2 安装`MiKTex`](#1.2 安装MiKTex)
    • [1.3 示例导出pdf](#1.3 示例导出pdf)
  • [2. 中文显示问题](#2. 中文显示问题)
    • [2.1 显示中文问题示例](#2.1 显示中文问题示例)
    • [2.2 解决办法1:修改tex](#2.2 解决办法1:修改tex)
    • [2.3 解决办法2:修改内置文件](#2.3 解决办法2:修改内置文件)

写在前面

使用jupyter notebook导出pdf时,出现了一些问题:

1)会报错,缺少安装包;

2)没有报错并且生成了pdf,但是只显示英文,不显示中文。

下面是给出了一些网搜后适用自己的解决办法。

1. 使用jupyter notebook导出pdf

导出pdf步骤:File-> Download as -> PDF via LaTex(.pdf)

出现报错没有Pandoc

error 复制代码
jupyter notebook nbconvert failed: Pandoc wasn't found. Please check that pandoc is installed

报错说明:转换失败,原因是没有找到Pandoc

1.1 安装Pandoc

Pandoc官网下载地址: https://pandoc.org/installing.html

下载安装包github地址:https://github.com/jgm/pandoc/releases/tag/3.1.6.2

gitcode的镜像也有:https://gitcode.net/mirrors/jgm/pandoc/-/releases/3.1.6.1?spm=1033.2243.3001.5876

下载pandoc后根据提示正常安装即可。

1.2 安装MiKTex

如果导出pdf通过LaTex,还需要下载MiKTex: https://miktex.org/download

下载MiKtex后根据提示正常安装即可。

两个包(Pandoc,MiKTex)都安装完成后,退出并重启jupyter notebook后才生效。并且,在重启后在导出pdf过程中,会自动安装一些依赖包,根据提示点击安装即可。

注:期间想通过HTML导出pdf,还安装过pip install nbconvert(不过,PDF via. HTML还是报错,先忽略)。

1.3 示例导出pdf

Jupyter编辑示例:

导出的pdf示例:

2. 中文显示问题

如果jupyter notebook编辑的内容都是英文,安装上面2个包并安装依赖包后直接导出是没有问题的。如果内容包含中文,则只显示英文忽略中文。

2.1 显示中文问题示例

Jupyter编辑内容包含中文示例:

包含中文导出pdf示例:只输出英文内容,忽略中文。

2.2 解决办法1:修改tex

需要以下三步:

  • (1)将.ipynb文件编译为.tex格式:

    shell 复制代码
    jupyter nbconvert --to latex ${ipynb_file}
    
    # 示例:
    jupyter nbconvert --to latex jupy2pdf-中文.ipynb

    执行完成后,会生成文件jupy2pdf-中文.tex

  • (2) 修改tex文件:

    在tex文件的中加入加载包命令:

    tex 复制代码
    \usepackage{fontspec, xunicode, xltxtra}
    \setmainfont{Microsoft YaHei}
    \usepackage{ctex}
  • (3) 使用 MiKTeX 生成pdf:

    执行如下命令可生成pdf:

    shell 复制代码
    xelatex ${tex_file}
    # 示例:
    xelatex jupy2pdf-中文.tex 

    其中,命令xelatex就是前面下载的MiKTex软件,对应下载路径:

    shell 复制代码
    /YourDir/MiKTeX/miktex/bin/x64/xelatex

    执行完成后,会生成相应的中间文件:

    shell 复制代码
    jupy2pdf-中文.ipynb  # 原文件
    jupy2pdf-中文.tex  # tex编辑文件
    jupy2pdf-中文.aux
    jupy2pdf-中文.log
    jupy2pdf-中文.out
    jupy2pdf-中文.pdf  # 目标pdf文件

    示例生成的目标pdf文件:jupy2pdf-中文.pdf

2.3 解决办法2:修改内置文件

"解决方法1:修改tex"虽然解决了中文显示问题,但是每次需要手动添加相应的中文包才能解决。

(1)先是参考了一篇博客,需要在Python安装包下:

shell 复制代码
Python\Lib\site-packages\nbconvert\templates\latex 

找到 base.tplx 文件并进行修改。

笔者有nbcovert安装目录,但是没有找到 latex目录(更没有 base.tplx 文件),可能这种方法可以从根本上解决并直接导出pdf(而不需要每次手动在tex文件中手动添加)。

(2)其他地方找到了解决办法

参考: https://www.zhihu.com/question/427092422

与上面修改文件的路不同,修改的是jupyter目录下的文件:

shell 复制代码
Python\share\jupyter\nbconvert\templates\latex\index.tex.j2

就是把 block doclass下的 article 改成 ctexart

示例:从jupyter导出pdf显示中文 (章节名称居中了?)

(3)章节名称居中问题调整

类似地,修改内置文件:

shell 复制代码
Python\share\jupyter\nbconvert\templates\latex\index.tex.j2

index.tex.j2文件中增加如下命令:参考博客

tex 复制代码
\CTEXsetup[format={\Large\bfseries}]{section}

修改前后:

调整后pdf导出示例:


<完>

相关推荐
bryant_meng2 小时前
【python】OpenCV—Image Moments
开发语言·python·opencv·moments·图片矩
KevinRay_2 小时前
Python超能力:高级技巧让你的代码飞起来
网络·人工智能·python·lambda表达式·列表推导式·python高级技巧
Captain823Jack3 小时前
nlp新词发现——浅析 TF·IDF
人工智能·python·深度学习·神经网络·算法·自然语言处理
资源补给站3 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
Captain823Jack3 小时前
w04_nlp大模型训练·中文分词
人工智能·python·深度学习·神经网络·算法·自然语言处理·中文分词
PieroPc4 小时前
Python 自动化 打开网站 填表登陆 例子
运维·python·自动化
VinciYan4 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
测试老哥5 小时前
外包干了两年,技术退步明显。。。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
終不似少年遊*5 小时前
美国加州房价数据分析01
人工智能·python·机器学习·数据挖掘·数据分析·回归算法
如若1235 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python