latex.py
110 lines
| 4.1 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
|
r11383 | from IPython.utils.traitlets import Unicode, List | ||
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
|
r11383 | default_transformers = List([transformers.ExtractFigureTransformer, | ||
transformers.CSSHTMLHeaderTransformer, | ||||
transformers.LatexTransformer, | ||||
transformers.Svg2PdfTransformer], | ||||
config=True, | ||||
help="""List of transformers available by default, by name, namespace, | ||||
instance, or type.""") | ||||
def _init_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
|
r11383 | super(LatexExporter, self)._init_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 | |||
Matthias BUSSONNIER
|
r10869 | |||
Matthias BUSSONNIER
|
r10963 | @property | ||
def default_config(self): | ||||
c = Config({ | ||||
Matthias BUSSONNIER
|
r10965 | 'GlobalConfigurable': { | ||
Jonathan Frederic
|
r11383 | 'display_data_priority' : ['latex', 'png', 'jpg', 'svg', 'jpeg', 'text'] | ||
Matthias BUSSONNIER
|
r10965 | }, | ||
'ExtractFigureTransformer': { | ||||
Jonathan Frederic
|
r11367 | 'enabled':True | ||
Jonathan Frederic
|
r11383 | }, | ||
'Svg2PdfTransformer': { | ||||
'enabled':True | ||||
}, | ||||
'LatexTransformer': { | ||||
'enabled':True | ||||
Matthias BUSSONNIER
|
r10965 | } | ||
Matthias BUSSONNIER
|
r10963 | }) | ||
c.merge(super(LatexExporter,self).default_config) | ||||
return c | ||||