Подавить код в NBConvert? IPython
Я выяснил, как подавить большие блоки кода из показа в окончательном выходе NB convert (PDF).
Поместив команду LaTex в "сырую ячейку до того, как код, который я не хочу иметь в конечном выпуске
\iffalse
Вслед за этим в конце В исходной ячейке
\fi
Но это все еще оставляет мне некоторый уродливый код, когда мне нужно показывать цифры и т.д., и в то время как основная цель ноутбука - показывать код с результатами, иногда для нетехнической аудитории нам нужен только вывод. Любые Идеи?
Немного связано, если кто-то вдохновляется.. любым способом включить переменные python в ячейки markdown, чтобы можно было иметь динамический текст с вычисленным результатом? Извините за вторую проблему, но я не уверен, что хочу спросить об этом отдельно по какой-то странной причине.
Ответы
Ответ 1
Чтобы подавить ячейки кода (только входные данные), можно использовать настраиваемый шаблон. Как и обсуждалось в этом вопросе, шаблон, например. 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
Может быть, я должен добавить, что таким образом входной блок просто заменяется пустым блоком (на самом деле латексным комментарием, что входные ячейки отключены).
При проверке предварительно определенных латексных шаблонов можно идентифицировать отдельные блоки (код, уценку, заголовок и т.д.) И настроить соответствующие пользовательские шаблоны для стильного вывода по желанию.
Изменить
как указано пользователем1248490, поскольку IPython 2.0 расшифровываются латексные шаблоны для расширения
article.tplx
, report.tplx
или base.tplx
. Следовательно, пример сверху должен выглядеть как
((*- extends 'article.tplx' -*))
% Disable input cells
((* block input_group *))
((* endblock input_group *))
Ответ 2
Если вы столкнулись здесь с IPython 3.2.0 в Windows на Anaconda (я не понимаю, почему это не будет работать в системах 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']
...
или путем подклассификации PDFExporter из pdf.py и добавления вашего экспортера в exporter_map в:
site-packages\IPython\nbconvert\exporters\export.py
Если у вас есть подкласс, у вас есть преимущество в том, что вы можете добавить свою собственную запись в меню ноутбука в:
site-packages\IPython\html\static\notebook\js\menubar.js
Ответ 3
Исправления к ответу выше:
1) Исправьте имя класса документа в латексном файле выше
Вы должны изменить строку
((*- extends 'article.tplx' -*))
% Disable input cells
((* block input_group *))
((* endblock input_group *))
2) Добавить локальный каталог в nbconvert config как
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