diff --git a/converters/template.py b/converters/template.py index 019db37..2e1d719 100755 --- a/converters/template.py +++ b/converters/template.py @@ -44,6 +44,7 @@ from IPython.utils.text import indent from .utils import remove_ansi from markdown import markdown from .utils import highlight, ansi2html +from .utils import markdown2latex #----------------------------------------------------------------------------- # Class declarations #----------------------------------------------------------------------------- @@ -143,6 +144,8 @@ texenv.filters['rm_ansi'] = remove_ansi texenv.filters['markdown'] = markdown texenv.filters['highlight'] = highlight texenv.filters['ansi2html'] = ansi2html +texenv.filters['markdown2latex'] = markdown2latex +markdown2latex def haspyout_transformer(nb,_): diff --git a/templates/tex/latex_base.tplx b/templates/tex/latex_base.tplx index e7d556c..4612ab4 100644 --- a/templates/tex/latex_base.tplx +++ b/templates/tex/latex_base.tplx @@ -7,7 +7,18 @@ ((* block output_prompt *)) # Out[(((cell.prompt_number)))]:((* endblock output_prompt *)) -((* block input *))((( cell.input ))) +((* block codecell *)) +\begin{codecell} +((( super() ))) +\end{codecell} +((* endblock *)) + +((* block input *)) +\begin{codeinput} +\begin{lstlisting} +((( cell.input ))) +\end{lstlisting} +\end{codeinput} ((* endblock input *)) @@ -40,11 +51,11 @@ it introduces a new line ((* endblock display_data *)) ((* block markdowncell scoped *)) -((( cell.source | pycomment ))) +((( cell.source | markdown2latex ))) ((* endblock markdowncell *)) ((* block headingcell scoped *)) -((( '#' * cell.level )))((( cell.source | pycomment))) +\section{((( cell.source)))} ((* endblock headingcell *)) ((* block rawcell scoped *)) @@ -54,3 +65,134 @@ it introduces a new line ((* block unknowncell scoped *)) unknown type (((cell.type))) ((* endblock unknowncell *)) + + + +((* block body *)) +\begin{document} +((( super() ))) +\end{document} +((* endblock*)) + +((* block header *)) +%% This file was auto-generated by IPython. +%% Conversion from the original notebook file: +%% tests/ipynbref/Gun_Data.orig.ipynb +%% +\documentclass[11pt,english]{article} + +%% This is the automatic preamble used by IPython. Note that it does *not* +%% include a documentclass declaration, that is added at runtime to the overall +%% document. + +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{graphicx} +\usepackage{ucs} +\usepackage[utf8x]{inputenc} + +% needed for markdown enumerations to work +\usepackage{enumerate} + +% Slightly bigger margins than the latex defaults +\usepackage{geometry} +\geometry{verbose,tmargin=3cm,bmargin=3cm,lmargin=2.5cm,rmargin=2.5cm} + +% Define a few colors for use in code, links and cell shading +\usepackage{color} +\definecolor{orange}{cmyk}{0,0.4,0.8,0.2} +\definecolor{darkorange}{rgb}{.71,0.21,0.01} +\definecolor{darkgreen}{rgb}{.12,.54,.11} +\definecolor{myteal}{rgb}{.26, .44, .56} +\definecolor{gray}{gray}{0.45} +\definecolor{lightgray}{gray}{.95} +\definecolor{mediumgray}{gray}{.8} +\definecolor{inputbackground}{rgb}{.95, .95, .85} +\definecolor{outputbackground}{rgb}{.95, .95, .95} +\definecolor{traceback}{rgb}{1, .95, .95} + +% Framed environments for code cells (inputs, outputs, errors, ...). The +% various uses of \unskip (or not) at the end were fine-tuned by hand, so don't +% randomly change them unless you're sure of the effect it will have. +\usepackage{framed} + +% remove extraneous vertical space in boxes +\setlength\fboxsep{0pt} + +% codecell is the whole input+output set of blocks that a Code cell can +% generate. + +% TODO: unfortunately, it seems that using a framed codecell environment breaks +% the ability of the frames inside of it to be broken across pages. This +% causes at least the problem of having lots of empty space at the bottom of +% pages as new frames are moved to the next page, and if a single frame is too +% long to fit on a page, will completely stop latex from compiling the +% document. So unless we figure out a solution to this, we'll have to instead +% leave the codecell env. as empty. I'm keeping the original codecell +% definition here (a thin vertical bar) for reference, in case we find a +% solution to the page break issue. + +%% \newenvironment{codecell}{% +%% \def\FrameCommand{\color{mediumgray} \vrule width 1pt \hspace{5pt}}% +%% \MakeFramed{\vspace{-0.5em}}} +%% {\unskip\endMakeFramed} + +% For now, make this a no-op... +\newenvironment{codecell}{} + + \newenvironment{codeinput}{% + \def\FrameCommand{\colorbox{inputbackground}}% + \MakeFramed{\advance\hsize-\width \FrameRestore}} + {\unskip\endMakeFramed} + +\newenvironment{codeoutput}{% + \def\FrameCommand{\colorbox{outputbackground}}% + \vspace{-1.4em} + \MakeFramed{\advance\hsize-\width \FrameRestore}} + {\unskip\medskip\endMakeFramed} + +\newenvironment{traceback}{% + \def\FrameCommand{\colorbox{traceback}}% + \MakeFramed{\advance\hsize-\width \FrameRestore}} + {\endMakeFramed} + +% Use and configure listings package for nicely formatted code +\usepackage{listingsutf8} +\lstset{ + language=python, + inputencoding=utf8x, + extendedchars=\true, + aboveskip=\smallskipamount, + belowskip=\smallskipamount, + xleftmargin=2mm, + breaklines=true, + basicstyle=\small \ttfamily, + showstringspaces=false, + keywordstyle=\color{blue}\bfseries, + commentstyle=\color{myteal}, + stringstyle=\color{darkgreen}, + identifierstyle=\color{darkorange}, + columns=fullflexible, % tighter character kerning, like verb +} + +% The hyperref package gives us a pdf with properly built +% internal navigation ('pdf bookmarks' for the table of contents, +% internal cross-reference links, web links for URLs, etc.) +\usepackage{hyperref} +\hypersetup{ + breaklinks=true, % so long urls are correctly broken across lines + colorlinks=true, + urlcolor=blue, + linkcolor=darkorange, + citecolor=darkgreen, + } + +% hardcode size of all verbatim environments to be a bit smaller +\makeatletter +\g@addto@macro\@verbatim\small\topsep=0.5em\partopsep=0pt +\makeatother + +% Prevent overflowing lines due to urls and other hard-to-break entities. +\sloppy + +((* endblock *))