16

我已经想出如何抑制大型代码块出现在最终的 NB 转换 (PDF) 输出中。

通过将 LaTex 命令放在“我不想在最终输出中包含的代码”之前的“原始单元格”中

\iffalse

最后是这个在原始单元格中

\fi

但是,当我需要显示数字等时,这仍然给我留下了一些难看的代码,而笔记本的基本目的是显示带有结果的代码,有时对于非技术观众,我们只需要输出..有什么想法吗?

如果有人受到启发,这有点相关.. 有什么方法可以在降价单元格中包含 python 变量,这样就可以得到带有计算结果的动态文本?对于第二个问题,我很抱歉,但由于某种奇怪的原因,我不确定我是否想单独问这个问题。

4

3 回答 3

27

要抑制代码单元(仅输入),可以使用自定义模板。与此问题中讨论的类似,必须创建一个模板,例如latex_nocode.tplx (在工作目录中),其中包含以下内容(对于 IPython 1.x)

((*- extends 'latex_article.tplx' -*))
% Disable input cells
((* block input_group *))
((* endblock input_group *))

像这样使用这个模板
ipython nbconvert --to=latex --template=latex_nocode.tplx --post=pdf file.ipynb

也许我应该补充一点,这样输入块被一个空白块简单地替换(实际上是一个输入单元被禁用的乳胶注释)。
在检查预定义的乳胶模板时,可以识别各个块(代码、降价、标题等),并且可以设置相应的自定义模板以根据需要设置输出样式。

编辑

正如 user1248490 指出的那样,从 IPython 2.0 开始,要扩展的乳胶模板被称为 article.tplx,report.tplxbase.tplx. 因此上面的例子应该看起来像

((*- extends 'article.tplx' -*))
% Disable input cells
((* block input_group *))
((* endblock input_group *))
于 2013-10-22T20:53:32.420 回答
5

如果您从 Anaconda 上 Windows 上的 IPython 3.2.0 偶然发现(我不明白为什么这在 unix 系统或常规 ipython 安装上不起作用,但我自己没有测试过这些场景) - 这种方法是什么对我有用。使用 TorokLev 的乳胶模板(比如 pdf_nocode.tplx),然后创建一个 python 文件(比如 pdf_nocode.py)并粘贴以下内容:

c = get_config()

#Export all the notebooks in the current directory to the sphinx_howto format.
c.NbConvertApp.notebooks = ['*.ipynb']
c.NbConvertApp.export_format = 'pdf'
c.TemplateExporter.template_path = ['.', r"C:\your\path\to\tplx\folder"]
c.Exporter.template_file = 'pdf_nocode'

最后,您的命令将是:

ipython nbconvert --to=pdf --config C:\your\path\to\pdf_nocode.py

这还将生成图像作为支持文件,如果您想抑制该输出(我主要使用绘图,因此这可能不适用于所有人),您可以修改

site-packages\IPython\nbconvert\exporters\pdf.py

通过添加此代码:

...
def from_notebook_node(self, nb, resources=None, **kw):
...
        # convert output extension to pdf
        # the writer above required it to be tex
        resources['output_extension'] = '.pdf'

        #The following suppresses the support files, so you may
        #end up removing other useful files you wanted to include
        del resources['outputs']
...

或通过从 pdf.py 继承 PDFExporter 并将您的导出器添加到 exporter_map 到:

site-packages\IPython\nbconvert\exporters\export.py

如果您将其子类化,那么您可以在以下位置将自己的条目添加到笔记本菜单中:

site-packages\IPython\html\static\notebook\js\menubar.js
于 2015-10-29T14:20:20.823 回答
1

对以上答案的更正:

1) 更正上面latex文件中的文档类名

你应该换行

((*- extends 'article.tplx' -*))
% Disable input cells
((* block input_group *))
((* endblock input_group *))

2) 将本地目录添加到 nbconvert 配置为

sudo gedit /usr/local/lib/python2.7/dist-packages/jupyter_core/tests/dotipython/profile_default/ipython_nbconvert_config.py

c.TemplateExporter.template_path = ['.'] 在文件中添加一行

3)将转换器称为

ipython nbconvert --to=pdf --template=latex_nocode.tplx tested_notebook.ipynb

或者如果您想执行报告的所有单元格,例如:

ipython nbconvert --to=pdf --template=latex_nocode.tplx --ExecutePreprocessor.enabled=True tested_notebook.ipynb

于 2015-10-11T23:10:54.560 回答