##// 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
"""Latex exporter for the notebook conversion pipeline.
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
before conversion and jinja filter that would then be available in the templates
"""
#-----------------------------------------------------------------------------
# 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
#-----------------------------------------------------------------------------
# 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
# local import
import exporter
import filters.latex
import filters.pygments
from transformers.latex import LatexTransformer
#-----------------------------------------------------------------------------
# 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
#-----------------------------------------------------------------------------
class LatexExporter(exporter.Exporter):
""" A Jinja2 latex exporter
Preprocess the ipynb files, feed it through jinja templates,
and spit an converted files and a data object with other data
should be mostly configurable
"""
def __init__(self, preprocessors=None, jinja_filters=None, config=None, **kw):
#Call base class constructor.
super(exporter.Exporter, self).__init__(preprocessors, jinja_filters, config, **kw)
#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"
def _init_environment(self):
self.ext = LATEX_TEMPLATE_EXTENSION
self.environment = Environment(
loader=FileSystemLoader([
os.path.dirname(os.path.realpath(__file__)) + LATEX_TEMPLATE_PATH,
os.path.dirname(os.path.realpath(__file__)) + LATEX_TEMPLATE_SKELETON_PATH,
]),
extensions=exporter.JINJA_EXTENSIONS
)
#Set special Jinja2 syntax that will not conflict with latex.
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)