无需代码即可将笔记本导出为 pdf
export notebook to pdf without code
我有一个很大的笔记本,上面有很多图形和文字。我想将其转换为 html 文件。但是,我不想导出代码。我正在使用以下命令
ipython nbconvert --to html notebook.ipynb
但是这个选项也会导出代码。有没有办法不用代码就把notebook转成html?
您可以将此 css 添加到您的页面,然后从浏览器打印成 PDF。请注意,代码只是隐藏,并没有被删除。
div.output_prompt { visibility: hidden; }
*{ font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif !important }
.input,#header { display: none; }
为确保删除代码,您应该使用类似
的东西
$(".input").remove()
据我所知,无法通过乳胶生成不包含代码的 PDF。如果有一个 jupyter notebook 扩展可以做到这一点,那就太好了......
nbconvert
使用模板将笔记本的JSON转换成文档;比如nbconvert自带的markdown模板中,markdown.tpl
:
{% block input %}
{% if nb.metadata.language_info %}{{ nb.metadata.language_info.name }}{% endif %}
{{ cell.source}}
{% endblock input %}
在输出中打印每个单元格的来源。如果您删除 {{ cell.source}}
则单元格来源将不会打印出来。 HTML 和 Latex 模板中也有相应的块。
更好的是,制作您自己的模板,完全符合您的要求:)
我发现 this 文章很有趣,它解释了如何删除输入列:
您必须在与要转换的笔记本相同的目录中创建一个名为“hidecode.tplx”的模板文件,并在其中添加以下行:
((*- extends 'article.tplx' -*))
((* block input_group *))
((*- if cell.metadata.get('nbconvert', {}).get('show_code', False) -*))
((( super() )))
((*- endif -*))
((* endblock input_group *))
并且在 运行 这个命令之后它将使用 pdfLatex 通过 latex 将笔记本转换为 pdf:
jupyter nbconvert --to pdf --template hidecode Example.ipynb
或者如果你想编辑,你可以将它转换为 .tex 文档并使用 pdfLatex 将其放入 pdf 中:
jupyter nbconvert --to latex --template hidecode Example.ipynb
编辑 2018 年 9 月:
ipython nbconvert
已弃用。它将被替换为 jupyter nbconvert
:因此我们将命令 ipython
替换为 jupyter
编辑 2021 年 2 月:(这是我最好的答案,所以让我来处理)
在@Mrule 评论之后添加 --no-input 标志将使其在没有模板的情况下工作...
jupyter nbconvert --to latex --no-input Example.ipynb
PS:如果您遇到以下问题:
LaTeX error related to tcolorbox.sty not found
请参考this guide to update your tex installation and this question
作为 的概括,因此可以从多个位置访问 hidecode 模板:
进入你的主目录:
cd ~/.jupyter
在此目录下创建jupyter_nbconvert_config.py
将以下内容写入.py
文件(将user_name
更改为您的用户名):
c = get_config()
c.TemplateExporter.template_path = ['.', "~/.jupyter" ]
c.LatexExporter.template_path = ['.', "~/.jupyter"]
在此目录下创建模板文件,命名为hidecode.tplx
或hidecode.tpl
:
((*- extends 'article.tplx' -*))
((* block input_group *))
((*- if cell.metadata.get('nbconvert', {}).get('show_code', False) -*))
((( super() )))
((*- endif -*))
((* endblock input_group *))
然后,下面应该生成一个没有 .ipynb
文件代码的 PDF(将 file_name
更改为您的文件名):
jupyter nbconvert --to pdf '<file_name>.ipynb' --template=hidecode.tpl
这是我的做法:
我只是将笔记本下载为 html.
然后 运行 这个 python 脚本转换那个 html 文件,这样提示和代码单元就消失了:
FILE = "/somewhere/myHTMLFile.html"
with open(FILE, 'r') as html_file:
content = html_file.read()
# Get rid off prompts and source code
content = content.replace("div.input_area {","div.input_area {\n\tdisplay: none;")
content = content.replace(".prompt {",".prompt {\n\tdisplay: none;")
f = open(FILE, 'w')
f.write(content)
f.close()
该脚本基本上为 class 'prompt' 或 'input_area'.
的所有 div 添加 CSS 'display: none' 属性
我在SO里找了同样的问题,最后结果很直接:
假设使用 Firefox(57) + Win7
- 运行 Jupyter notebook 并在浏览器中下载 notebook:File->Download as->HTML 你会得到一个包含代码和输出的 html 页面。
- 使用浏览器打开导出的 HTML 并使用密钥
F12
激活浏览器控制台
运行 在控制台中执行以下命令:
document.querySelectorAll("div.input").forEach(function(a){a.remove()})
代码删除所有输入 div DOM。然后 right mouse button
并选择 "Save Page As" 并保存 "Complete page"(不是单页)。
您将在 windows 中获得一个包含关联文件夹的页面。通过压缩 html 页面然后提取以取消绑定关联来使用技巧。文件夹没用了
现在是没有代码的单个 html 页面。您可以 re-distribute 或将其打印为 PDF。
如果您没有使用 Firefox 或 Windows,请调整以上 3-6 个步骤。
我有一个很大的笔记本,上面有很多图形和文字。我想将其转换为 html 文件。但是,我不想导出代码。我正在使用以下命令
ipython nbconvert --to html notebook.ipynb
但是这个选项也会导出代码。有没有办法不用代码就把notebook转成html?
您可以将此 css 添加到您的页面,然后从浏览器打印成 PDF。请注意,代码只是隐藏,并没有被删除。
div.output_prompt { visibility: hidden; }
*{ font-family: "Palatino Linotype", "Book Antiqua", Palatino, serif !important }
.input,#header { display: none; }
为确保删除代码,您应该使用类似
的东西$(".input").remove()
据我所知,无法通过乳胶生成不包含代码的 PDF。如果有一个 jupyter notebook 扩展可以做到这一点,那就太好了......
nbconvert
使用模板将笔记本的JSON转换成文档;比如nbconvert自带的markdown模板中,markdown.tpl
:
{% block input %}
{% if nb.metadata.language_info %}{{ nb.metadata.language_info.name }}{% endif %}
{{ cell.source}}
{% endblock input %}
在输出中打印每个单元格的来源。如果您删除 {{ cell.source}}
则单元格来源将不会打印出来。 HTML 和 Latex 模板中也有相应的块。
更好的是,制作您自己的模板,完全符合您的要求:)
我发现 this 文章很有趣,它解释了如何删除输入列:
您必须在与要转换的笔记本相同的目录中创建一个名为“hidecode.tplx”的模板文件,并在其中添加以下行:
((*- extends 'article.tplx' -*))
((* block input_group *))
((*- if cell.metadata.get('nbconvert', {}).get('show_code', False) -*))
((( super() )))
((*- endif -*))
((* endblock input_group *))
并且在 运行 这个命令之后它将使用 pdfLatex 通过 latex 将笔记本转换为 pdf:
jupyter nbconvert --to pdf --template hidecode Example.ipynb
或者如果你想编辑,你可以将它转换为 .tex 文档并使用 pdfLatex 将其放入 pdf 中:
jupyter nbconvert --to latex --template hidecode Example.ipynb
编辑 2018 年 9 月:
ipython nbconvert
已弃用。它将被替换为 jupyter nbconvert
:因此我们将命令 ipython
替换为 jupyter
编辑 2021 年 2 月:(这是我最好的答案,所以让我来处理)
在@Mrule 评论之后添加 --no-input 标志将使其在没有模板的情况下工作...
jupyter nbconvert --to latex --no-input Example.ipynb
PS:如果您遇到以下问题:
LaTeX error related to tcolorbox.sty not found
请参考this guide to update your tex installation and this question
作为
进入你的主目录:
cd ~/.jupyter
在此目录下创建
jupyter_nbconvert_config.py
将以下内容写入
.py
文件(将user_name
更改为您的用户名):c = get_config() c.TemplateExporter.template_path = ['.', "~/.jupyter" ] c.LatexExporter.template_path = ['.', "~/.jupyter"]
在此目录下创建模板文件,命名为
hidecode.tplx
或hidecode.tpl
:((*- extends 'article.tplx' -*)) ((* block input_group *)) ((*- if cell.metadata.get('nbconvert', {}).get('show_code', False) -*)) ((( super() ))) ((*- endif -*)) ((* endblock input_group *))
然后,下面应该生成一个没有
.ipynb
文件代码的 PDF(将file_name
更改为您的文件名):jupyter nbconvert --to pdf '<file_name>.ipynb' --template=hidecode.tpl
这是我的做法: 我只是将笔记本下载为 html.
然后 运行 这个 python 脚本转换那个 html 文件,这样提示和代码单元就消失了:
FILE = "/somewhere/myHTMLFile.html"
with open(FILE, 'r') as html_file:
content = html_file.read()
# Get rid off prompts and source code
content = content.replace("div.input_area {","div.input_area {\n\tdisplay: none;")
content = content.replace(".prompt {",".prompt {\n\tdisplay: none;")
f = open(FILE, 'w')
f.write(content)
f.close()
该脚本基本上为 class 'prompt' 或 'input_area'.
的所有 div 添加 CSS 'display: none' 属性我在SO里找了同样的问题,最后结果很直接:
假设使用 Firefox(57) + Win7
- 运行 Jupyter notebook 并在浏览器中下载 notebook:File->Download as->HTML 你会得到一个包含代码和输出的 html 页面。
- 使用浏览器打开导出的 HTML 并使用密钥
F12
激活浏览器控制台
运行 在控制台中执行以下命令:
document.querySelectorAll("div.input").forEach(function(a){a.remove()})
代码删除所有输入 div DOM。然后
right mouse button
并选择 "Save Page As" 并保存 "Complete page"(不是单页)。您将在 windows 中获得一个包含关联文件夹的页面。通过压缩 html 页面然后提取以取消绑定关联来使用技巧。文件夹没用了
现在是没有代码的单个 html 页面。您可以 re-distribute 或将其打印为 PDF。
如果您没有使用 Firefox 或 Windows,请调整以上 3-6 个步骤。