2022-05-23 00:16:32 +04:00

88 lines
2.9 KiB
Python

"""LaTeX Exporter class"""
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
from traitlets import default
from traitlets.config import Config
from nbconvert.filters.filter_links import resolve_references
from nbconvert.filters.highlight import Highlight2Latex
from .templateexporter import TemplateExporter
class LatexExporter(TemplateExporter):
"""
Exports to a Latex template. Inherit from this class if your template is
LaTeX based and you need custom transformers/filters.
If you don't need custom transformers/filters, just change the
'template_file' config option. Place your template in the special "/latex"
subfolder of the "../templates" folder.
"""
export_from_notebook = "LaTeX"
@default("file_extension")
def _file_extension_default(self):
return ".tex"
@default("template_name")
def _template_name_default(self):
return "latex"
output_mimetype = "text/latex"
def default_filters(self):
yield from super().default_filters()
yield ("resolve_references", resolve_references)
@property
def default_config(self):
c = Config(
{
"NbConvertBase": {
"display_data_priority": [
"text/latex",
"application/pdf",
"image/png",
"image/jpeg",
"image/svg+xml",
"text/markdown",
"text/plain",
]
},
"ExtractOutputPreprocessor": {"enabled": True},
"SVG2PDFPreprocessor": {"enabled": True},
"LatexPreprocessor": {"enabled": True},
"SphinxPreprocessor": {"enabled": True},
"HighlightMagicsPreprocessor": {"enabled": True},
}
)
c.merge(super().default_config)
return c
def from_notebook_node(self, nb, resources=None, **kw):
langinfo = nb.metadata.get("language_info", {})
lexer = langinfo.get("pygments_lexer", langinfo.get("name", None))
highlight_code = self.filters.get(
"highlight_code", Highlight2Latex(pygments_lexer=lexer, parent=self)
)
self.register_filter("highlight_code", highlight_code)
return super().from_notebook_node(nb, resources, **kw)
def _create_environment(self):
environment = super()._create_environment()
# Set special Jinja2 syntax that will not conflict with latex.
environment.block_start_string = "((*"
environment.block_end_string = "*))"
environment.variable_start_string = "((("
environment.variable_end_string = ")))"
environment.comment_start_string = "((="
environment.comment_end_string = "=))"
return environment