##// END OF EJS Templates
Names reduced, too redundent.
Names reduced, too redundent.

File last commit:

r10609:815de40a
r10609:815de40a
Show More
latex.py
113 lines | 4.4 KiB | text/x-python | PythonLexer
Jonathan Frederic
Post code-review, extended refactor.
r10485 """Latex exporter for the notebook conversion pipeline.
Jonathan Frederic
Split exporter into base and latex.
r10479
This module defines Exporter, a highly configurable converter
that uses Jinja2 to export notebook files into different format.
You can register both pre-transformers that will act on the notebook format
Jonathan Frederic
More clean-up. Nomenclature changes
r10578 before conversion and jinja filter that would then be available in the templates
Jonathan Frederic
Split exporter into base and latex.
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
Added imports
r10585
# Stdlib imports
import io
import os
# IPython imports
from IPython.config.configurable import Configurable
from IPython.nbformat import current as nbformat
from IPython.utils.traitlets import MetaHasTraits, Unicode, List, Bool
from IPython.utils.text import indent
# other libs/dependencies
from jinja2 import Environment, FileSystemLoader
from markdown import markdown
Jonathan Frederic
Added latexexporter
r10587 # local import
import exporter
Jonathan Frederic
Added imports
r10585 import filters.latex
import filters.pygments
Jonathan Frederic
Added latexexporter
r10587 from transformers.latex import LatexTransformer
Jonathan Frederic
Split exporter into base and latex.
r10479 #-----------------------------------------------------------------------------
# Globals and constants
#-----------------------------------------------------------------------------
#Latex Jinja2 constants
LATEX_TEMPLATE_PATH = "/../templates/tex/"
LATEX_TEMPLATE_SKELETON_PATH = "/../templates/tex/skeleton/"
LATEX_TEMPLATE_EXTENSION = ".tplx"
#Special Jinja2 syntax that will not conflict when exporting latex.
LATEX_JINJA_COMMENT_BLOCK = ["((=", "=))"]
LATEX_JINJA_VARIABLE_BLOCK = ["(((", ")))"]
LATEX_JINJA_LOGIC_BLOCK = ["((*", "*))"]
#-----------------------------------------------------------------------------
# Classes and functions
#-----------------------------------------------------------------------------
Jonathan Frederic
Added latexexporter
r10587 class LatexExporter(exporter.Exporter):
""" A Jinja2 latex exporter
Jonathan Frederic
Split exporter into base and latex.
r10479
Jonathan Frederic
Added latexexporter
r10587 Preprocess the ipynb files, feed it through jinja templates,
Jonathan Frederic
Split exporter into base and latex.
r10479 and spit an converted files and a data object with other data
should be mostly configurable
"""
Jonathan Frederic
Added latexexporter
r10587 def __init__(self, preprocessors=None, jinja_filters=None, config=None, **kw):
Jonathan Frederic
Finished a rough draft of the exporters.
r10588
#Call base class constructor.
Jonathan Frederic
Added latexexporter
r10587 super(exporter.Exporter, self).__init__(preprocessors, jinja_filters, config, **kw)
Jonathan Frederic
More clean-up. Nomenclature changes
r10578
Jonathan Frederic
Finished a rough draft of the exporters.
r10588 #Set defaults
self.file_extension = "tex"
self._set_datatype_priority(['latex', 'svg', 'png', 'jpg', 'jpeg' , 'text'])
self.extract_figure_transformer.enabled = True
self.extract_figure_transformer.extra_ext_map={'svg':'pdf'}
self.template_file = "latex_base"
Jonathan Frederic
More clean-up. Nomenclature changes
r10578 def _init_environment(self):
self.ext = LATEX_TEMPLATE_EXTENSION
Jonathan Frederic
Added latexexporter
r10587 self.environment = Environment(
Jonathan Frederic
More clean-up. Nomenclature changes
r10578 loader=FileSystemLoader([
os.path.dirname(os.path.realpath(__file__)) + LATEX_TEMPLATE_PATH,
os.path.dirname(os.path.realpath(__file__)) + LATEX_TEMPLATE_SKELETON_PATH,
]),
Jonathan Frederic
Added latexexporter
r10587 extensions=exporter.JINJA_EXTENSIONS
Jonathan Frederic
More clean-up. Nomenclature changes
r10578 )
#Set special Jinja2 syntax that will not conflict with latex.
Jonathan Frederic
Added latexexporter
r10587 self.environment.block_start_string = LATEX_JINJA_LOGIC_BLOCK[0]
self.environment.block_end_string = LATEX_JINJA_LOGIC_BLOCK[1]
self.environment.variable_start_string = LATEX_JINJA_VARIABLE_BLOCK[0]
self.environment.variable_end_string = LATEX_JINJA_VARIABLE_BLOCK[1]
self.environment.comment_start_string = LATEX_JINJA_COMMENT_BLOCK[0]
self.environment.comment_end_string = LATEX_JINJA_COMMENT_BLOCK[1]
def _register_filters(self):
#Register the filters of the base class.
super(exporter.Exporter, self)._register_filters()
#Add latex filters to the Jinja2 environment
self.register_filter('escape_tex', filters.latex.escape_tex)
self.register_filter('highlight', filters.pygments.highlight2latex)
def _register_transformers(self):
#Register the transformers of the base class.
super(exporter.Exporter, self)._register_transformers()
#Register latex transformer
self.register_transformer(LatexTransformer)