|
|
((= NBConvert Sphinx-Latex Template
|
|
|
|
|
|
Purpose: Allow export of PDF friendly Latex inspired by Sphinx. Most of the
|
|
|
template is derived directly from Sphinx source.
|
|
|
|
|
|
Inheritance: null>display_priority>latex_base
|
|
|
|
|
|
Note: For best display, use latex syntax highlighting. =))
|
|
|
|
|
|
((*- extends 'display_priority.tplx' -*))
|
|
|
|
|
|
%==============================================================================
|
|
|
% Declarations
|
|
|
%==============================================================================
|
|
|
|
|
|
% In order to make sure that the input/output header follows the code it
|
|
|
% preceeds, we have to use a minipage environment. This causes problems
|
|
|
% for large blocks of input and output. If there is a large input/output
|
|
|
% block, we don't want to minipage the whole thing since it will break
|
|
|
% the line wrapping. The solution is to split the input/output line by
|
|
|
% line before we minipage which allows us to minipage the first X lines
|
|
|
% preceeding the input/output bar. That way, a select amount of lines
|
|
|
% force the input/output bar to follow it around.
|
|
|
((*- set min_header_lines = 3 -*))
|
|
|
|
|
|
% This is the number of characters that are permitted per line. It's
|
|
|
% important that this limit is set so characters do not run off the
|
|
|
% edges of latex pages (since latex does not always seem smart enough
|
|
|
% to prevent this.)
|
|
|
((*- set wrap_size = 87 -*))
|
|
|
|
|
|
% Global variable used to determine whether or not a header bar has been
|
|
|
% applied to the group of input/output blocks already
|
|
|
((*- set needs_header = False -*))
|
|
|
|
|
|
%==============================================================================
|
|
|
% Header
|
|
|
%==============================================================================
|
|
|
((* block header *))
|
|
|
|
|
|
% Header, overrides base
|
|
|
|
|
|
% Make sure that the sphinx doc style knows who it inherits from.
|
|
|
\def\sphinxdocclass{(((parentdocumentclass)))}
|
|
|
|
|
|
% Declare the document class
|
|
|
\documentclass[letterpaper,10pt,english]{((( resources.sphinx_texinputs )))/sphinx(((documentclass)))}
|
|
|
|
|
|
% Imports
|
|
|
\usepackage[utf8]{inputenc}
|
|
|
\DeclareUnicodeCharacter{00A0}{\\nobreakspace}
|
|
|
\usepackage[T1]{fontenc}
|
|
|
\usepackage{babel}
|
|
|
\usepackage{times}
|
|
|
\usepackage{import}
|
|
|
\usepackage[((( resources.sphinx_chapterstyle )))]{((( resources.sphinx_texinputs )))/fncychap}
|
|
|
\usepackage{longtable}
|
|
|
\usepackage{((( resources.sphinx_texinputs )))/sphinx}
|
|
|
\usepackage{multirow}
|
|
|
|
|
|
\usepackage{amsmath}
|
|
|
\usepackage{amssymb}
|
|
|
\usepackage{ucs}
|
|
|
\usepackage{enumerate}
|
|
|
|
|
|
% Pygments requirements
|
|
|
\usepackage{fancyvrb}
|
|
|
\usepackage{color}
|
|
|
|
|
|
% Used to load and display graphics
|
|
|
\usepackage{graphicx}
|
|
|
\graphicspath{ {figs/} }
|
|
|
|
|
|
% For formatting output while also word wrapping.
|
|
|
\usepackage{listings}
|
|
|
\lstset{breaklines=true}
|
|
|
\lstset{basicstyle=\small\ttfamily}
|
|
|
|
|
|
%Pygments definitions
|
|
|
((( resources.pygment_definitions )))
|
|
|
|
|
|
% Help prevent overflowing lines due to urls and other hard-to-break
|
|
|
% entities. This doesn't catch everything...
|
|
|
\sloppy
|
|
|
|
|
|
% Document level variables
|
|
|
\title{((( nb.metadata.name | escape_tex )))}
|
|
|
\date{((( nb.metadata._draft.date | escape_tex )))}
|
|
|
\release{((( nb.metadata._draft.version | escape_tex )))}
|
|
|
\author{((( nb.metadata._draft.author | escape_tex )))}
|
|
|
\renewcommand{\releasename}{((( nb.metadata._draft.release | escape_tex )))}
|
|
|
|
|
|
% TODO: Add option for the user to specify a logo for his/her export.
|
|
|
\newcommand{\sphinxlogo}{}
|
|
|
|
|
|
% Make the index page of the document.
|
|
|
\makeindex
|
|
|
|
|
|
% Import sphinx document type specifics.
|
|
|
((* block sphinxheader *))((* endblock sphinxheader *))
|
|
|
((* endblock header *))
|
|
|
|
|
|
%==============================================================================
|
|
|
% Body
|
|
|
%==============================================================================
|
|
|
((* block body *))
|
|
|
((* block bodyBegin *))
|
|
|
% Body
|
|
|
|
|
|
% Start of the document
|
|
|
\begin{document}
|
|
|
\maketitle
|
|
|
\tableofcontents
|
|
|
|
|
|
((* endblock bodyBegin *))((( super() )))((* block bodyEnd *))
|
|
|
|
|
|
\renewcommand{\indexname}{Index}
|
|
|
\printindex
|
|
|
|
|
|
% End of document
|
|
|
\end{document}
|
|
|
((* endblock bodyEnd *))
|
|
|
((* endblock body *))
|
|
|
|
|
|
%==============================================================================
|
|
|
% Footer
|
|
|
%==============================================================================
|
|
|
((* block footer *))
|
|
|
((* endblock footer *))
|
|
|
|
|
|
%==============================================================================
|
|
|
% Headings
|
|
|
%
|
|
|
% Purpose: Format pynb headers as sphinx headers. Depending on the Sphinx
|
|
|
% style that is active, this will change. Thus sphinx styles will
|
|
|
% override the values here.
|
|
|
%==============================================================================
|
|
|
((* block headingcell -*))
|
|
|
\ ((= This backslash IS significant, do not delete =))
|
|
|
((*- if cell.level == 1 -*))
|
|
|
((* block h1 -*))part((* endblock h1 -*))
|
|
|
((*- elif cell.level == 2 -*))
|
|
|
((* block h2 -*))chapter((* endblock h2 -*))
|
|
|
((*- elif cell.level == 3 -*))
|
|
|
((* block h3 -*))section((* endblock h3 -*))
|
|
|
((*- elif cell.level == 4 -*))
|
|
|
((* block h4 -*))subsection((* endblock h4 -*))
|
|
|
((*- elif cell.level == 5 -*))
|
|
|
((* block h5 -*))subsubsection((* endblock h5 -*))
|
|
|
((*- elif cell.level == 6 -*))
|
|
|
((* block h6 -*))paragraph((* endblock h6 -*))
|
|
|
|
|
|
((= It's important to make sure that underscores (which tend to be common
|
|
|
in IPYNB file titles) do not make their way into latex. Sometimes this
|
|
|
causes latex to barf. =))
|
|
|
((*- endif -*)){((( escapeUnderscores(cell.source | markdown2latex ) )))}
|
|
|
((*- endblock headingcell *))
|
|
|
|
|
|
%==============================================================================
|
|
|
% Markdown
|
|
|
%
|
|
|
% Purpose: Convert markdown to latex. Here markdown2latex is explicitly
|
|
|
% called since we know we want latex output.
|
|
|
%==============================================================================
|
|
|
((*- block markdowncell scoped-*))
|
|
|
((( cell.source | markdown2latex )))
|
|
|
((*- endblock markdowncell -*))
|
|
|
|
|
|
%==============================================================================
|
|
|
% Rawcell
|
|
|
%
|
|
|
% Purpose: Raw text cells allow the user to manually inject document code that
|
|
|
% will not get touched by the templating system.
|
|
|
%==============================================================================
|
|
|
((*- block rawcell *))
|
|
|
((( cell.source | wrap(wrap_size) )))
|
|
|
((* endblock rawcell -*))
|
|
|
|
|
|
%==============================================================================
|
|
|
% Unknowncell
|
|
|
%
|
|
|
% Purpose: This is the catch anything unhandled. To display this data, we
|
|
|
% remove all possible latex conflicts and wrap the characters so they
|
|
|
% can't flow off of the page.
|
|
|
%==============================================================================
|
|
|
((* block unknowncell scoped*))
|
|
|
|
|
|
% Unsupported cell type, no formatting
|
|
|
((( cell.source | wrap | escape_tex )))
|
|
|
((* endblock unknowncell *))
|
|
|
|
|
|
%==============================================================================
|
|
|
% Input
|
|
|
%==============================================================================
|
|
|
((* block input *))
|
|
|
|
|
|
((= Global variable used to determine whether or not a header bar has been
|
|
|
applied to the group of output blocks already. We still need to set
|
|
|
it to true to make sure that the block bar gets rendered.=))
|
|
|
((*- set needs_header = true -*))
|
|
|
|
|
|
((* set text_begining = cell.input | wrap(wrap_size) | get_lines(end=min_header_lines) | highlight *))
|
|
|
((* set text_remainer = cell.input | wrap(wrap_size) | get_lines(start=min_header_lines) | highlight *))
|
|
|
((( inputBlock(text_begining, text_remainer) )))
|
|
|
((* endblock input *))
|
|
|
|
|
|
%==============================================================================
|
|
|
% Output_Group
|
|
|
%
|
|
|
% Purpose: Make sure that only one header bar only attaches to the output
|
|
|
% once. By keeping track of when an input group is started
|
|
|
%==============================================================================
|
|
|
((*- block output_group -*))
|
|
|
|
|
|
((= Global variable used to determine whether or not a header bar has been
|
|
|
applied to the group of output blocks already. =))
|
|
|
((*- set needs_header = true -*))
|
|
|
|
|
|
((( super() )))
|
|
|
((* endblock *))
|
|
|
|
|
|
%==============================================================================
|
|
|
% Output types
|
|
|
%==============================================================================
|
|
|
((* block pyout *))
|
|
|
((* block data_priority scoped -*))
|
|
|
((( inputBlock(super(),"") )))
|
|
|
((*- endblock *))
|
|
|
((* endblock pyout *))
|
|
|
|
|
|
((* block stream *))
|
|
|
((* set text_begining = output.text | wrap(wrap_size) | get_lines(end=min_header_lines) *))
|
|
|
((* set text_remainer = output.text | wrap(wrap_size) | get_lines(start=min_header_lines) *))
|
|
|
((( inputBlock(customVerbatim(text_begining), customVerbatim(text_remainer)) )))
|
|
|
((* endblock stream *))
|
|
|
|
|
|
((*- block display_data -*))
|
|
|
((( inputBlock(super(), "") )))
|
|
|
((*- endblock display_data -*))
|
|
|
|
|
|
((* block pyerr *))
|
|
|
((* set text_begining = super() | wrap(wrap_size) | get_lines(end=min_header_lines) *))
|
|
|
((* set text_remainer = super() | wrap(wrap_size) | get_lines(start=min_header_lines) *))
|
|
|
((( inputBlock(customVerbatim(text_begining), customVerbatim(text_remainer)) )))
|
|
|
((* endblock pyerr *))
|
|
|
|
|
|
%==============================================================================
|
|
|
% Additional formating
|
|
|
%==============================================================================
|
|
|
((* block data_text *))
|
|
|
((( customVerbatim(output.text | wrap(wrap_size)) )))
|
|
|
((* endblock *))
|
|
|
|
|
|
((* block traceback_line *))
|
|
|
((( line | wrap(wrap_size) |indent| rm_ansi )))
|
|
|
((* endblock traceback_line *))
|
|
|
|
|
|
%==============================================================================
|
|
|
% Supported image formats
|
|
|
%==============================================================================
|
|
|
((*- block data_png -*))
|
|
|
((( insertGraphics(output.key_png) )))
|
|
|
((*- endblock -*))
|
|
|
|
|
|
((*- block data_svg -*))
|
|
|
((( insertGraphics(output.key_svg) )))
|
|
|
((*- endblock -*))
|
|
|
|
|
|
%==============================================================================
|
|
|
% Support Macros
|
|
|
%==============================================================================
|
|
|
((* macro outputBlock(text_begining, text_remainer) -*))
|
|
|
((( nbconvertBlock("Output", text_begining, text_remainer) )))
|
|
|
((*- endmacro *))
|
|
|
|
|
|
((* macro inputBlock(text_begining, text_remainer) -*))
|
|
|
((( nbconvertBlock("Input", text_begining, text_remainer) )))
|
|
|
((*- endmacro *))
|
|
|
|
|
|
((* macro nbconvertBlock(blockTitle, text_begining, text_remainer) -*))
|
|
|
((*- if needs_header -*))
|
|
|
\vspace{10pt}
|
|
|
\begin{minipage}{\textwidth}
|
|
|
{\scriptsize (((blockTitle)))}\\*
|
|
|
\rule[10pt]{\linewidth}{0.5pt}
|
|
|
\vspace{-25pt}
|
|
|
((( text_begining )))
|
|
|
\end{minipage}((( text_remainer )))
|
|
|
((*- else -*))
|
|
|
((( text_begining )))
|
|
|
((( text_remainer )))
|
|
|
((*- endif -*))
|
|
|
((*- set needs_header = false -*))
|
|
|
((*- endmacro *))
|
|
|
|
|
|
((* macro customVerbatim(text) -*))
|
|
|
\begin{lstlisting}
|
|
|
((( text )))
|
|
|
\end{lstlisting}
|
|
|
((*- endmacro *))
|
|
|
|
|
|
((* macro insertGraphics(path) -*))
|
|
|
\begin{center}
|
|
|
\includegraphics[width=0.7\textwidth]{(((path)))}
|
|
|
\par
|
|
|
\end{center}
|
|
|
((*- endmacro *))
|
|
|
|
|
|
((* macro escapeUnderscores(text) -*))
|
|
|
((*- set text = text|replace("_","\\_") -*))
|
|
|
((( text )))
|
|
|
((*- endmacro *))
|
|
|
|
|
|
|