抑制NBConvert中的代码? IPython的

时间:2013-10-22 17:28:53

标签: python ipython ipython-notebook

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

将LaTex命令放在“我希望在最终输出中不需要的代码之前的原始单元格”

\iffalse

最后跟着这个原始单元格

\fi

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

如果有人受到启发,有点相关..任何方式在markdown单元格中包含python变量,这样可以得到带有计算结果的动态文本?对不起第二个问题,但我不确定是否因为一些奇怪的原因而单独询问这个问题。

3 个答案:

答案 0 :(得分:27)

要禁止代码单元格(仅输入),可以使用自定义模板。与this question中讨论的类似,例如必须使用以下内容(在IPython 1.x中)创建 latex_nocode.tplx (在工作目录中)

((*- 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.tplxreport.tplxbase.tplx。因此,上面的示例应该看起来像

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

答案 1 :(得分: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

答案 2 :(得分: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