sphinx.tplx
452 lines
| 16.2 KiB
| text/plain
|
TextLexer
|
r9922 | ((= NBConvert Sphinx-Latex Template | ||
|
r9735 | |||
|
r9922 | Purpose: Allow export of PDF friendly Latex inspired by Sphinx. Most of the | ||
template is derived directly from Sphinx source. | ||||
|
r9735 | |||
|
r10630 | Inheritance: null>display_priority | ||
|
r9735 | |||
|
r9922 | Note: For best display, use latex syntax highlighting. =)) | ||
|
r9735 | |||
|
r9781 | ((*- extends 'display_priority.tplx' -*)) | ||
|
r9734 | |||
|
r11742 | \nonstopmode | ||
|
r9921 | %============================================================================== | ||
% Declarations | ||||
%============================================================================== | ||||
|
r9919 | % In order to make sure that the input/output header follows the code it | ||
|
r9929 | % preceeds, the needspace package is used to request that a certain | ||
% amount of lines (specified by this variable) are reserved. If those | ||||
% lines aren't available on the current page, the documenter will break | ||||
% to the next page and the header along with accomanying lines will be | ||||
% rendered together. This value specifies the number of lines that | ||||
% the header will be forced to group with without a page break. | ||||
((*- set min_header_lines = 4 -*)) | ||||
|
r9919 | |||
|
r9920 | % 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 | ||||
|
r9929 | % to prevent this in some cases.) This is only applied to textual output | ||
|
r9940 | ((* if resources.sphinx.outputstyle == 'simple' *)) | ||
|
r9960 | ((*- set wrap_size = 85 -*)) | ||
|
r9940 | ((* elif resources.sphinx.outputstyle == 'notebook' *)) | ||
|
r9960 | ((*- set wrap_size = 70 -*)) | ||
|
r9940 | ((* endif *)) | ||
|
r9922 | |||
|
r9921 | %============================================================================== | ||
% Header | ||||
%============================================================================== | ||||
|
r9734 | ((* block header *)) | ||
|
r9772 | |||
|
r9751 | % Header, overrides base | ||
|
r9772 | |||
|
r9746 | % Make sure that the sphinx doc style knows who it inherits from. | ||
\def\sphinxdocclass{(((parentdocumentclass)))} | ||||
|
r9809 | |||
|
r9746 | % Declare the document class | ||
|
r9937 | \documentclass[letterpaper,10pt,english]{((( resources.sphinx.texinputs )))/sphinx(((documentclass)))} | ||
|
r9809 | |||
% Imports | ||||
|
r9746 | \usepackage[utf8]{inputenc} | ||
|
r9809 | \DeclareUnicodeCharacter{00A0}{\\nobreakspace} | ||
|
r9746 | \usepackage[T1]{fontenc} | ||
\usepackage{babel} | ||||
\usepackage{times} | ||||
\usepackage{import} | ||||
|
r9937 | \usepackage[((( resources.sphinx.chapterstyle )))]{((( resources.sphinx.texinputs )))/fncychap} | ||
|
r9746 | \usepackage{longtable} | ||
|
r9937 | \usepackage{((( resources.sphinx.texinputs )))/sphinx} | ||
|
r9746 | \usepackage{multirow} | ||
|
r9774 | \usepackage{amsmath} | ||
\usepackage{amssymb} | ||||
\usepackage{ucs} | ||||
\usepackage{enumerate} | ||||
|
r9928 | % Used to make the Input/Output rules follow around the contents. | ||
\usepackage{needspace} | ||||
|
r9781 | % Pygments requirements | ||
\usepackage{fancyvrb} | ||||
\usepackage{color} | ||||
|
r10944 | % ansi colors additions | ||
\definecolor{darkgreen}{rgb}{.12,.54,.11} | ||||
\definecolor{lightgray}{gray}{.95} | ||||
\definecolor{brown}{rgb}{0.54,0.27,0.07} | ||||
\definecolor{purple}{rgb}{0.5,0.0,0.5} | ||||
\definecolor{darkgray}{gray}{0.25} | ||||
\definecolor{lightred}{rgb}{1.0,0.39,0.28} | ||||
\definecolor{lightgreen}{rgb}{0.48,0.99,0.0} | ||||
\definecolor{lightblue}{rgb}{0.53,0.81,0.92} | ||||
\definecolor{lightpurple}{rgb}{0.87,0.63,0.87} | ||||
\definecolor{lightcyan}{rgb}{0.5,1.0,0.83} | ||||
|
r9960 | |||
|
r9939 | % Needed to box output/input | ||
|
r10035 | \usepackage{tikz} | ||
\usetikzlibrary{calc,arrows,shadows} | ||||
\usepackage[framemethod=tikz]{mdframed} | ||||
|
r9939 | \usepackage{alltt} | ||
|
r9781 | |||
|
r9920 | % Used to load and display graphics | ||
\usepackage{graphicx} | ||||
\graphicspath{ {figs/} } | ||||
|
r10124 | \usepackage[Export]{adjustbox} % To resize | ||
|
r9960 | |||
|
r9920 | |||
|
r9781 | % For formatting output while also word wrapping. | ||
\usepackage{listings} | ||||
|
r9809 | \lstset{breaklines=true} | ||
|
r9781 | \lstset{basicstyle=\small\ttfamily} | ||
|
r10133 | \def\smaller{\fontsize{9.5pt}{9.5pt}\selectfont} | ||
|
r9920 | |||
|
r9781 | %Pygments definitions | ||
|
r9937 | ((( resources.sphinx.pygment_definitions ))) | ||
|
r9960 | |||
|
r9939 | %Set pygments styles if needed... | ||
((* if resources.sphinx.outputstyle == 'notebook' *)) | ||||
|
r10035 | \definecolor{nbframe-border}{rgb}{0.867,0.867,0.867} | ||
\definecolor{nbframe-bg}{rgb}{0.969,0.969,0.969} | ||||
\definecolor{nbframe-in-prompt}{rgb}{0.0,0.0,0.502} | ||||
\definecolor{nbframe-out-prompt}{rgb}{0.545,0.0,0.0} | ||||
|
r9960 | |||
|
r9940 | \newenvironment{ColorVerbatim} | ||
|
r10035 | {\begin{mdframed}[% | ||
roundcorner=1.0pt, % | ||||
backgroundcolor=nbframe-bg, % | ||||
userdefinedwidth=1\linewidth, % | ||||
leftmargin=0.1\linewidth, % | ||||
innerleftmargin=0pt, % | ||||
innerrightmargin=0pt, % | ||||
linecolor=nbframe-border, % | ||||
linewidth=1pt, % | ||||
usetwoside=false, % | ||||
everyline=true, % | ||||
innerlinewidth=3pt, % | ||||
innerlinecolor=nbframe-bg, % | ||||
middlelinewidth=1pt, % | ||||
middlelinecolor=nbframe-bg, % | ||||
outerlinewidth=0.5pt, % | ||||
|
r10172 | outerlinecolor=nbframe-border, % | ||
needspace=0pt | ||||
|
r10035 | ]} | ||
{\end{mdframed}} | ||||
\newenvironment{InvisibleVerbatim} | ||||
{\begin{mdframed}[leftmargin=0.1\linewidth,innerleftmargin=3pt,innerrightmargin=3pt, userdefinedwidth=1\linewidth, linewidth=0pt, linecolor=white, usetwoside=false]} | ||||
|
r9939 | {\end{mdframed}} | ||
|
r9960 | |||
|
r9939 | \renewenvironment{Verbatim}[1][\unskip] | ||
|
r10133 | {\begin{alltt}\smaller} | ||
|
r9939 | {\end{alltt}} | ||
((* endif *)) | ||||
|
r9781 | |||
|
r9920 | % Help prevent overflowing lines due to urls and other hard-to-break | ||
% entities. This doesn't catch everything... | ||||
|
r9781 | \sloppy | ||
|
r9774 | |||
|
r9746 | % Document level variables | ||
|
r11686 | \title{((( resources.metadata.name | escape_latex )))} | ||
\date{((( resources.sphinx.date | escape_latex )))} | ||||
\release{((( resources.sphinx.version | escape_latex )))} | ||||
\author{((( resources.sphinx.author | escape_latex )))} | ||||
\renewcommand{\releasename}{((( resources.sphinx.release | escape_latex )))} | ||||
|
r9960 | |||
|
r9920 | % TODO: Add option for the user to specify a logo for his/her export. | ||
\newcommand{\sphinxlogo}{} | ||||
% Make the index page of the document. | ||||
|
r9746 | \makeindex | ||
|
r9960 | |||
|
r9921 | % Import sphinx document type specifics. | ||
|
r9746 | ((* block sphinxheader *))((* endblock sphinxheader *)) | ||
|
r9736 | ((* endblock header *)) | ||
|
r9734 | |||
|
r9921 | %============================================================================== | ||
% Body | ||||
%============================================================================== | ||||
|
r9781 | ((* block body *)) | ||
|
r9746 | ((* block bodyBegin *)) | ||
|
r9751 | % Body | ||
|
r9740 | |||
|
r9746 | % Start of the document | ||
\begin{document} | ||||
|
r9960 | |||
|
r9950 | ((* if resources.sphinx.header *)) | ||
\maketitle | ||||
((* endif *)) | ||||
|
r9960 | |||
|
r9943 | ((* block toc *)) | ||
|
r9950 | \tableofcontents | ||
|
r9943 | ((* endblock toc *)) | ||
|
r9734 | |||
|
r9781 | ((* endblock bodyBegin *))((( super() )))((* block bodyEnd *)) | ||
|
r9746 | |||
\renewcommand{\indexname}{Index} | ||||
\printindex | ||||
|
r9751 | |||
% End of document | ||||
|
r9746 | \end{document} | ||
((* endblock bodyEnd *)) | ||||
|
r9781 | ((* endblock body *)) | ||
|
r9746 | |||
|
r9921 | %============================================================================== | ||
|
r9746 | % Footer | ||
|
r9921 | %============================================================================== | ||
|
r9736 | ((* block footer *)) | ||
((* endblock footer *)) | ||||
|
r9746 | |||
|
r9921 | %============================================================================== | ||
% Headings | ||||
% | ||||
|
r9922 | % 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. | ||||
|
r9921 | %============================================================================== | ||
|
r9751 | ((* block headingcell -*)) | ||
|
r9928 | \ | ||
|
r9749 | ((*- if cell.level == 1 -*)) | ||
|
r9761 | ((* block h1 -*))part((* endblock h1 -*)) | ||
|
r9749 | ((*- elif cell.level == 2 -*)) | ||
|
r9761 | ((* block h2 -*))chapter((* endblock h2 -*)) | ||
|
r9749 | ((*- elif cell.level == 3 -*)) | ||
|
r9761 | ((* block h3 -*))section((* endblock h3 -*)) | ||
|
r9749 | ((*- elif cell.level == 4 -*)) | ||
|
r9761 | ((* block h4 -*))subsection((* endblock h4 -*)) | ||
|
r9749 | ((*- elif cell.level == 5 -*)) | ||
|
r9761 | ((* block h5 -*))subsubsection((* endblock h5 -*)) | ||
|
r9749 | ((*- elif cell.level == 6 -*)) | ||
|
r9761 | ((* block h6 -*))paragraph((* endblock h6 -*)) | ||
|
r9960 | |||
|
r9922 | ((= 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. =)) | ||||
|
r10881 | ((*- endif -*)){((( cell.source | markdown2latex )))} | ||
|
r9751 | ((*- endblock headingcell *)) | ||
|
r9749 | |||
|
r9922 | %============================================================================== | ||
% Markdown | ||||
% | ||||
% Purpose: Convert markdown to latex. Here markdown2latex is explicitly | ||||
% called since we know we want latex output. | ||||
%============================================================================== | ||||
|
r9757 | ((*- block markdowncell scoped-*)) | ||
|
r9809 | ((( cell.source | markdown2latex ))) | ||
|
r9757 | ((*- endblock markdowncell -*)) | ||
|
r9922 | %============================================================================== | ||
% Rawcell | ||||
% | ||||
% Purpose: Raw text cells allow the user to manually inject document code that | ||||
% will not get touched by the templating system. | ||||
%============================================================================== | ||||
|
r9761 | ((*- block rawcell *)) | ||
|
r11685 | ((( cell.source | wrap_text(wrap_size) ))) | ||
|
r9761 | ((* endblock rawcell -*)) | ||
|
r9922 | %============================================================================== | ||
% 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 | ||||
|
r11686 | ((( cell.source | wrap_text | escape_latex ))) | ||
|
r9922 | ((* endblock unknowncell *)) | ||
%============================================================================== | ||||
% Input | ||||
%============================================================================== | ||||
|
r9781 | ((* block input *)) | ||
|
r9943 | |||
% Make sure that atleast 4 lines are below the HR | ||||
\needspace{((( min_header_lines )))\baselineskip} | ||||
|
r9960 | |||
|
r9939 | ((* if resources.sphinx.outputstyle == 'simple' *)) | ||
% Add a horizantal break, along with break title. | ||||
\vspace{10pt} | ||||
{\scriptsize Input}\\* | ||||
\rule[10pt]{\linewidth}{0.5pt} | ||||
\vspace{-25pt} | ||||
% Add contents below. | ||||
|
r11685 | ((( cell.input | highlight2latex ))) | ||
|
r9960 | |||
|
r9939 | ((* elif resources.sphinx.outputstyle == 'notebook' *)) | ||
|
r10133 | \vspace{6pt} | ||
((( write_prompt("In", cell.prompt_number, "nbframe-in-prompt") ))) | ||||
\vspace{-2.65\baselineskip} | ||||
|
r9940 | \begin{ColorVerbatim} | ||
|
r10133 | \vspace{-0.7\baselineskip} | ||
|
r11685 | ((( cell.input | highlight2latex ))) | ||
|
r10133 | ((* if cell.input == None or cell.input == '' *)) | ||
\vspace{0.3\baselineskip} | ||||
((* else *)) | ||||
\vspace{-0.2\baselineskip} | ||||
((* endif *)) | ||||
|
r9939 | \end{ColorVerbatim} | ||
((* endif *)) | ||||
|
r9781 | ((* endblock input *)) | ||
|
r9922 | %============================================================================== | ||
|
r9925 | % Output_Group | ||
|
r9922 | % | ||
|
r9925 | % Purpose: Make sure that only one header bar only attaches to the output | ||
% once. By keeping track of when an input group is started | ||||
|
r9922 | %============================================================================== | ||
|
r9928 | ((* block output_group *)) | ||
|
r9943 | ((* if cell.outputs.__len__() > 0 *)) | ||
|
r9960 | |||
|
r10173 | % If the first block is an image, minipage the image. Else | ||
% request a certain amount of space for the input text. | ||||
((( iff_figure(cell.outputs[0], "\\begin{minipage}{1.0\\textwidth}", "\\needspace{" ~ min_header_lines ~ "\\baselineskip}") ))) | ||||
((* if resources.sphinx.outputstyle == 'simple' *)) | ||||
|
r9960 | |||
|
r9943 | % Add a horizantal break, along with break title. | ||
\vspace{10pt} | ||||
{\scriptsize Output}\\* | ||||
\rule[10pt]{\linewidth}{0.5pt} | ||||
\vspace{-20pt} | ||||
% Add the contents of the first block. | ||||
((( render_output(cell.outputs[0]) ))) | ||||
% Close the minipage. | ||||
((( iff_figure(cell.outputs[0], "\\end{minipage}", "") ))) | ||||
% Add remainer of the document contents below. | ||||
((* for output in cell.outputs[1:] *)) | ||||
|
r10035 | ((( render_output(output, cell.prompt_number) ))) | ||
|
r9940 | ((* endfor *)) | ||
|
r9943 | ((* elif resources.sphinx.outputstyle == 'notebook' *)) | ||
|
r9960 | |||
|
r9943 | % Add document contents. | ||
|
r10035 | ((* for output in cell.outputs *)) | ||
((( render_output(output, cell.prompt_number) ))) | ||||
((* endfor *)) | ||||
|
r9943 | ((* endif *)) | ||
|
r9939 | ((* endif *)) | ||
|
r9925 | ((* endblock *)) | ||
|
r9781 | |||
|
r9922 | %============================================================================== | ||
|
r9925 | % Additional formating | ||
|
r9922 | %============================================================================== | ||
|
r9781 | ((* block data_text *)) | ||
|
r10933 | ((( custom_verbatim(output.text) | ansi2latex))) | ||
|
r9781 | ((* endblock *)) | ||
|
r9925 | ((* block traceback_line *)) | ||
|
r11685 | ((( conditionally_center_output(line | indent| strip_ansi) ))) | ||
|
r9925 | ((* endblock traceback_line *)) | ||
|
r9922 | %============================================================================== | ||
% Supported image formats | ||||
%============================================================================== | ||||
|
r9781 | ((*- block data_png -*)) | ||
|
r11471 | ((( conditionally_center_output(insert_graphics(output.png_filename)) ))) | ||
((*- endblock -*)) | ||||
((*- block data_jpg -*)) | ||||
((( conditionally_center_output(insert_graphics(output.jpg_filename)) ))) | ||||
|
r9781 | ((*- endblock -*)) | ||
((*- block data_svg -*)) | ||||
|
r11471 | ((( conditionally_center_output(insert_graphics(output.svg_filename)) ))) | ||
|
r9781 | ((*- endblock -*)) | ||
|
r11574 | ((*- block data_pdf -*)) | ||
|
r11641 | ((( conditionally_center_output(insert_graphics(output.pdf_filename)) ))) | ||
|
r11574 | ((*- endblock -*)) | ||
|
r10035 | ((*- block data_latex *)) | ||
|
r11685 | ((* if resources.sphinx.centeroutput *))\begin{center}((* endif -*))((( output.latex | strip_math_space )))((*- if resources.sphinx.centeroutput *))\end{center} ((* endif -*)) | ||
|
r9947 | ((*- endblock -*)) | ||
|
r9943 | |||
|
r9922 | %============================================================================== | ||
% Support Macros | ||||
%============================================================================== | ||||
|
r9929 | |||
|
r10133 | % Name: write_prompt | ||
% Purpose: Renders an output/input prompt for notebook style pdfs | ||||
((* macro write_prompt(prompt, number, color) -*)) | ||||
\makebox[0.1\linewidth]{\smaller\hfill\tt\color{((( color )))}((( prompt )))\hspace{4pt}{[}((( number ))){]}:\hspace{4pt}}\\* | ||||
((*- endmacro *)) | ||||
|
r9929 | % Name: render_output | ||
% Purpose: Renders an output block appropriately. | ||||
|
r10035 | ((* macro render_output(output, prompt_number) -*)) | ||
|
r9943 | ((*- if output.output_type == 'pyerr' -*)) | ||
((*- block pyerr scoped *)) | ||||
|
r9960 | ((( custom_verbatim(super()) ))) | ||
|
r9943 | ((* endblock pyerr -*)) | ||
((*- else -*)) | ||||
|
r10035 | |||
((* if resources.sphinx.outputstyle == 'notebook' *)) | ||||
((*- if output.output_type == 'pyout' -*)) | ||||
|
r10133 | ((( write_prompt("Out", prompt_number, "nbframe-out-prompt") ))) | ||
|
r10035 | \vspace{-2.55\baselineskip} | ||
((*- endif -*)) | ||||
\begin{InvisibleVerbatim} | ||||
\vspace{-0.5\baselineskip} | ||||
((*- endif -*)) | ||||
|
r9928 | ((*- block display_data scoped -*)) | ||
((( super() ))) | ||||
((*- endblock display_data -*)) | ||||
|
r10035 | |||
((* if resources.sphinx.outputstyle == 'notebook' *)) | ||||
\end{InvisibleVerbatim} | ||||
((*- endif -*)) | ||||
|
r9928 | ((*- endif -*)) | ||
|
r9922 | ((*- endmacro *)) | ||
|
r9929 | % Name: iff_figure | ||
% Purpose: If the output block provided is a figure type, the 'true_content' | ||||
% parameter will be returned. Else, the 'false_content'. | ||||
((* macro iff_figure(output, true_content, false_content) -*)) | ||||
|
r9944 | ((*- set is_figure = false -*)) | ||
((*- for type in output | filter_data_type -*)) | ||||
|
r9945 | ((*- if type in ['pdf', 'svg', 'png', 'jpeg','html']*)) | ||
|
r9944 | ((*- set is_figure = true -*)) | ||
((*- endif -*)) | ||||
((*- endfor -*)) | ||||
((* if is_figure -*)) | ||||
|
r9929 | ((( true_content ))) | ||
((*- else -*)) | ||||
((( false_content ))) | ||||
((*- endif *)) | ||||
((*- endmacro *)) | ||||
% Name: custom_verbatim | ||||
% Purpose: This macro creates a verbatim style block that fits the existing | ||||
% sphinx style more readily than standard verbatim blocks. | ||||
|
r9928 | ((* macro custom_verbatim(text) -*)) | ||
|
r9963 | \begin{alltt} | ||
((*- if resources.sphinx.centeroutput *))\begin{center} ((* endif -*)) | ||||
|
r11685 | ((( text | wrap_text(wrap_size) ))) | ||
|
r9963 | ((*- if resources.sphinx.centeroutput *))\end{center}((* endif -*)) | ||
\end{alltt} | ||||
|
r9922 | ((*- endmacro *)) | ||
|
r10171 | % Name: conditionally_center_output | ||
|
r9950 | % Purpose: This macro centers the output if the output centering is enabled. | ||
|
r10171 | ((* macro conditionally_center_output(text) -*)) | ||
|
r9959 | ((* if resources.sphinx.centeroutput *)){\centering ((* endif *))((( text )))((* if resources.sphinx.centeroutput *))}((* endif *)) | ||
|
r9950 | ((*- endmacro *)) | ||
|
r9929 | % Name: insert_graphics | ||
% Purpose: This macro will insert an image in the latex document given a path. | ||||
|
r9928 | ((* macro insert_graphics(path) -*)) | ||
|
r9922 | \begin{center} | ||
|
r10124 | \includegraphics[max size={\textwidth}{\textheight}]{(((path)))} | ||
|
r9922 | \par | ||
\end{center} | ||||
((*- endmacro *)) | ||||