写在前面
使用jupyter notebook导出pdf时,出现了一些问题:
1. 使用jupyter notebook导出pdf
导出pdf步骤:File-> Download as -> PDF via LaTex(.pdf)
:
jupyter notebook nbconvert failed: Pandoc wasn't found. Please check that pandoc is installed
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
2. 中文显示问题
如果jupyter notebook编辑的内容都是英文,安装上面2个包并安装依赖包后直接导出是没有问题的。如果内容包含中文,则只显示英文忽略中文。
2.1 显示中文问题示例
2.2 解决办法1:修改tex
需要以下三步:
-
jupyter nbconvert --to latex ${ipynb_file} # 示例: jupyter nbconvert --to latex jupy2pdf-中文.ipynb
-
(2) 修改tex文件:
usepackage{fontspec, xunicode, xltxtra} setmainfont{Microsoft YaHei} usepackage{ctex}
-
xelatex ${tex_file} # 示例: xelatex jupy2pdf-中文.tex
其中,命令
xelatex
就是前面下载的MiKTex软件,对应下载路径:/YourDir/MiKTeX/miktex/bin/x64/xelatex
jupy2pdf-中文.ipynb # 原文件 jupy2pdf-中文.tex # tex编辑文件 jupy2pdf-中文.aux jupy2pdf-中文.log jupy2pdf-中文.out jupy2pdf-中文.pdf # 目标pdf文件
示例生成的目标pdf文件:
jupy2pdf-中文.pdf
2.3 解决办法2:修改内置文件
“解决方法1:修改tex”虽然解决了中文显示问题,但是每次需要手动添加相应的中文包才能解决。
PythonLibsite-packagesnbconverttemplateslatex
笔者有nbcovert安装目录,但是没有找到 latex目录(更没有 base.tplx
文件),可能这种方法可以从根本上解决并直接导出pdf(而不需要每次手动在tex文件中手动添加)。
参考: https://www.zhihu.com/question/427092422
与上面修改文件的路不同,修改的是jupyter目录下的文件:
Pythonsharejupyternbconverttemplateslatexindex.tex.j2
就是把 block doclass
下的 article
改成 ctexart
:
示例:从jupyter导出pdf显示中文 (章节名称居中了?)
(3)章节名称居中问题调整
类似地,修改内置文件:
Pythonsharejupyternbconverttemplateslatexindex.tex.j2
CTEXsetup[format={Largebfseries}]{section}
修改前后:
调整后pdf导出示例:
3. 插入.svg图问题
3.1 报错描述
如果想在pdf中显示高清图,可用.pdf格式的图(可通过.tex插入),也可使用svg(网页即可打开)。
(比如 在 https://www.drawio.com/
这里画的流程图可导出多种格式)
而问题是,在jupyter notebook编辑时,无法插入一个pdf文件,所以想在ipynb插入图只能使用.svg格式的图了,插入方式同一般的图片插入:
![图命名](图路径)
# 比如:
![myfig](./abc.svg)
如果直接的ipynb页面执行 File-> Download as -> PDF via LaTex(.pdf)
,是会报错的。(并没有明确指出报错的步骤)
jupyter nbconvert --to latex ./yourfile.ipynb
xelatex yourfile.tex
也会报错:
! Undefined control sequence.
l.695 includesvg
{abc.svg}
总之,可能是MiKTex不支持.svg格式,或者缺少一些包导致。
3.2 解决办法
-
为了在ipynb和导出pdf都可显示高清图,当前的解决办法是:
需要svg格式和pdf格式文件都有的情况下:(只有一种格式的话,可用格式转化工具将svg<>pdf转换)
# 1) 将ipynb 编译为.tex格式 jupyter nbconvert --to latex ./yourfile.ipynb # 2) 修改 .tex文件 # 将: includesvg{yourfig.svg} # 改为: includegraphics{yourfig.pdf} # 3) 再执行: xelatex ./yourfile.tex # 生成 yourfile.pdf 文件
此时的麻烦程度可能真的想直接在网页
ctrl+p
另存为pdf算了。。。但是,如果编辑的文字或脚本不过分长还好,如果比较长或者要用滚动条显示的,直接ctrl+p得到的pdf显示的内容是不全的。
<完>
2023.08.23 –
2023.08.31 增加.svg图插入问题及解决
原文地址:https://blog.csdn.net/sinat_32872729/article/details/132445344
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_45234.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!