IPython nbconvert to latex - 语法着色

时间:2014-11-04 23:49:58

标签: export latex customization ipython

在将nb转换为LaTeX文件时,有没有办法从IPython笔记本中的代码更改为颜色? 我想更改默认情况下的绿色和蓝色

我正在尝试(在.tplx文件中)

((* block definitions *))
    ((( super() )))

    % Custom prompts colors
    \definecolor{incolor}{rgb}{0.0, 0.2, 0.0}
    \definecolor{outcolor}{rgb}{0.3, 0.3, 0.0}
    \definecolor{blue}{rgb}{0.5,0.,.698} % does not seem to work
((* endblock definitions *))

但我不知道如何改变其他颜色

1 个答案:

答案 0 :(得分:2)

[In]和[Out]提示

要更改InOut提示的颜色,您可以使用自定义模板,与您的尝试非常相似。使用以下内容创建文件(colors.tplx):

((*- extends 'article.tplx' -*))

((* block definitions *))
  ((( super() )))

  \definecolor{incolor}{rgb}{0.8, 0.0, 0.0}
  \definecolor{outcolor}{rgb}{0.9, 0.3, 0.70}

((* endblock definitions *))

当然,您必须根据需要调整提示的颜色。要使用此模板,请致电ipython nbconvert --to pdf --template colors.tplx file.ipynb

请注意,语法突出显示不会受到这种影响。

语法着色

最终pdf中的语法高亮显示基于pygments。默认着色在LatexPreprocessor中进行了硬编码(请参阅here)。要获得不同的样式,必须使用自定义预处理器。可能的预处理器是当前LatexPreprocessor的一个小修改,可能看起来像(prelatex.py)

from __future__ import print_function, absolute_import
from IPython.nbconvert.preprocessors.base import Preprocessor

class MyLatexPreprocessor(Preprocessor):

    def preprocess(self, nb, resources):
        # Generate Pygments definitions for Latex
        from pygments.formatters import LatexFormatter

        resources["latex"]["pygments_definitions"] = LatexFormatter(style='emacs').get_style_defs()
        return nb, resources

此处使用 emacs 样式。这是有效的,因为默认的LatexPreprocessor将pygments语法颜色定义存储在资源dict中,稍后将其粘贴到生成的.tex文件中。我们的自定义预处理器在默认值之后执行,并重新定义颜色定义。

要启用此预处理器,必须创建自定义配置。这就像创建像

这样的文件(custom_cfg.py)一样简单
c = get_config()
c.Exporter.preprocessors = ['prelatex.MyLatexPreprocessor']

将这两个文件放在工作目录中,nbconvert调用看起来像

ipython nbconvert --to latex --config custom_cfg.py file.ipynb

要获取可用样式的列表,可以使用以下代码段。

from pygments.styles import get_all_styles
list(get_all_styles())

在我的机器上,我得到了 ['vs','pastie','borland','friendly','emacs','vim','native','perldoc','monokai','trac','tango','murphy','默认','多彩','manni','bw','rrt','秋天','果味']

结果

结合两种方法,即自定义模板和自定义预处理器生成的pdf可能如下所示:

enter image description here

您可以在this slightly outdated blogthis question中找到更多信息。

顺便说一下。我使用了ipython 3.0-dev(8d6041b)