latex.py
108 lines
| 3.9 KiB
| text/x-python
|
PythonLexer
Jonathan Frederic
|
r10677 | """ | ||
Exporter that allows Latex Jinja templates to work. Contains logic to | ||||
appropriately prepare IPYNB files for export to LaTeX. Including but | ||||
not limited to escaping LaTeX, fixing math region tags, using special | ||||
tags to circumvent Jinja/Latex syntax conflicts. | ||||
""" | ||||
Jonathan Frederic
|
r10479 | #----------------------------------------------------------------------------- | ||
# Copyright (c) 2013, the IPython Development Team. | ||||
# | ||||
# Distributed under the terms of the Modified BSD License. | ||||
# | ||||
# The full license is in the file COPYING.txt, distributed with this software. | ||||
#----------------------------------------------------------------------------- | ||||
#----------------------------------------------------------------------------- | ||||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
Jonathan Frederic
|
r10585 | |||
damianavila
|
r11203 | # Stdlib imports | ||
import os | ||||
Jonathan Frederic
|
r10585 | # IPython imports | ||
Jonathan Frederic
|
r10624 | from IPython.utils.traitlets import Unicode | ||
Matthias BUSSONNIER
|
r10872 | from IPython.config import Config | ||
Jonathan Frederic
|
r10585 | |||
Brian E. Granger
|
r11089 | from IPython.nbconvert import filters, transformers | ||
from .exporter import Exporter | ||||
Jonathan Frederic
|
r10677 | |||
Jonathan Frederic
|
r10479 | #----------------------------------------------------------------------------- | ||
# Classes and functions | ||||
#----------------------------------------------------------------------------- | ||||
Brian E. Granger
|
r11089 | class LatexExporter(Exporter): | ||
Jonathan Frederic
|
r10677 | """ | ||
Exports to a Latex template. Inherit from this class if your template is | ||||
LaTeX based and you need custom tranformers/filters. Inherit from it if | ||||
you are writing your own HTML template and need custom tranformers/filters. | ||||
If you don't need custom tranformers/filters, just change the | ||||
'template_file' config option. Place your template in the special "/latex" | ||||
subfolder of the "../templates" folder. | ||||
""" | ||||
Jonathan Frederic
|
r10624 | file_extension = Unicode( | ||
'tex', config=True, | ||||
help="Extension of the file that should be written to disk") | ||||
Jonathan Frederic
|
r10479 | |||
Jonathan Frederic
|
r10624 | template_file = Unicode( | ||
Jonathan Frederic
|
r10690 | 'base', config=True, | ||
help="Name of the template file to use") | ||||
#Latex constants | ||||
template_path = Unicode( | ||||
Jonathan Frederic
|
r11191 | os.path.join("..", "templates", "latex"), config=True, | ||
Jonathan Frederic
|
r10690 | help="Path where the template files are located.") | ||
template_skeleton_path = Unicode( | ||||
Jonathan Frederic
|
r11191 | os.path.join("..", "templates", "latex", "skeleton"), config=True, | ||
Jonathan Frederic
|
r10690 | help="Path where the template skeleton files are located.") | ||
#Special Jinja2 syntax that will not conflict when exporting latex. | ||||
jinja_comment_block_start = Unicode("((=", config=True) | ||||
jinja_comment_block_end = Unicode("=))", config=True) | ||||
jinja_variable_block_start = Unicode("(((", config=True) | ||||
jinja_variable_block_end = Unicode(")))", config=True) | ||||
jinja_logic_block_start = Unicode("((*", config=True) | ||||
jinja_logic_block_end = Unicode("*))", config=True) | ||||
#Extension that the template files use. | ||||
template_extension = Unicode(".tplx", config=True) | ||||
Matthias BUSSONNIER
|
r10869 | |||
Jonathan Frederic
|
r10587 | def _register_filters(self): | ||
Jonathan Frederic
|
r10690 | """ | ||
Register all of the filters required for the exporter. | ||||
""" | ||||
Jonathan Frederic
|
r10587 | |||
#Register the filters of the base class. | ||||
Jonathan Frederic
|
r10630 | super(LatexExporter, self)._register_filters() | ||
Jonathan Frederic
|
r10587 | |||
#Add latex filters to the Jinja2 environment | ||||
Brian E. Granger
|
r11089 | self.register_filter('escape_tex', filters.escape_latex) | ||
self.register_filter('highlight', filters.highlight2latex) | ||||
Jonathan Frederic
|
r10587 | |||
Jonathan Frederic
|
r10677 | |||
Jonathan Frederic
|
r10587 | def _register_transformers(self): | ||
Jonathan Frederic
|
r10690 | """ | ||
Register all of the transformers needed for this exporter. | ||||
""" | ||||
Jonathan Frederic
|
r10587 | |||
#Register the transformers of the base class. | ||||
Jonathan Frederic
|
r10630 | super(LatexExporter, self)._register_transformers() | ||
Jonathan Frederic
|
r10587 | |||
#Register latex transformer | ||||
Brian E. Granger
|
r11089 | self.register_transformer(transformers.LatexTransformer) | ||
Matthias BUSSONNIER
|
r10869 | |||
Matthias BUSSONNIER
|
r10963 | @property | ||
def default_config(self): | ||||
c = Config({ | ||||
Matthias BUSSONNIER
|
r10965 | 'GlobalConfigurable': { | ||
'display_data_priority' : ['latex', 'svg', 'png', 'jpg', 'jpeg' , 'text'] | ||||
}, | ||||
'ExtractFigureTransformer': { | ||||
'enabled':True, | ||||
'extra_ext_map':{'svg':'pdf'}, | ||||
} | ||||
Matthias BUSSONNIER
|
r10963 | }) | ||
c.merge(super(LatexExporter,self).default_config) | ||||
return c | ||||