无需代码即可将笔记本导出为 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 模板:

  1. 进入你的主目录:

    cd ~/.jupyter
    
  2. 在此目录下创建jupyter_nbconvert_config.py

  3. 将以下内容写入.py文件(将user_name更改为您的用户名):

    c = get_config()
    c.TemplateExporter.template_path = ['.', "~/.jupyter" ]
    c.LatexExporter.template_path = ['.', "~/.jupyter"]
    
  4. 在此目录下创建模板文件,命名为hidecode.tplxhidecode.tpl:

        ((*- extends 'article.tplx' -*))
    
    ((* block input_group *))
        ((*- if cell.metadata.get('nbconvert', {}).get('show_code', False) -*))
                ((( super() )))
        ((*- endif -*))
    ((* endblock input_group *))
    
  5. 然后,下面应该生成一个没有 .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

  1. 运行 Jupyter notebook 并在浏览器中下载 notebook:File->Download as->HTML 你会得到一个包含代码和输出的 html 页面。
  2. 使用浏览器打开导出的 HTML 并使用密钥 F12
  3. 激活浏览器控制台
  4. 运行 在控制台中执行以下命令:

    document.querySelectorAll("div.input").forEach(function(a){a.remove()})
    
  5. 代码删除所有输入 div DOM。然后 right mouse button 并选择 "Save Page As" 并保存 "Complete page"(不是单页)。

  6. 您将在 windows 中获得一个包含关联文件夹的页面。通过压缩 html 页面然后提取以取消绑定关联来使用技巧。文件夹没用了

  7. 现在是没有代码的单个 html 页面。您可以 re-distribute 或将其打印为 PDF。

如果您没有使用 Firefox 或 Windows,请调整以上 3-6 个步骤。