178 lines
8.1 KiB
Django/Jinja
178 lines
8.1 KiB
Django/Jinja
((=- IPython input/output style -=))
|
|
((*- extends 'base.tex.j2' -*))
|
|
|
|
((*- block packages -*))
|
|
\usepackage[breakable]{tcolorbox}
|
|
\usepackage{parskip} % Stop auto-indenting (to mimic markdown behaviour)
|
|
((( super() )))
|
|
((*- endblock packages -*))
|
|
|
|
((*- block definitions -*))
|
|
((( super() )))
|
|
% Pygments definitions
|
|
(((- resources.latex.pygments_definitions )))
|
|
|
|
% For linebreaks inside Verbatim environment from package fancyvrb.
|
|
\makeatletter
|
|
\newbox\Wrappedcontinuationbox
|
|
\newbox\Wrappedvisiblespacebox
|
|
\newcommand*\Wrappedvisiblespace {\textcolor{red}{\textvisiblespace}}
|
|
\newcommand*\Wrappedcontinuationsymbol {\textcolor{red}{\llap{\tiny$\m@th\hookrightarrow$}}}
|
|
\newcommand*\Wrappedcontinuationindent {3ex }
|
|
\newcommand*\Wrappedafterbreak {\kern\Wrappedcontinuationindent\copy\Wrappedcontinuationbox}
|
|
% Take advantage of the already applied Pygments mark-up to insert
|
|
% potential linebreaks for TeX processing.
|
|
% {, <, #, %, $, ' and ": go to next line.
|
|
% _, }, ^, &, >, - and ~: stay at end of broken line.
|
|
% Use of \textquotesingle for straight quote.
|
|
\newcommand*\Wrappedbreaksatspecials {%
|
|
\def\PYGZus{\discretionary{\char`\_}{\Wrappedafterbreak}{\char`\_}}%
|
|
\def\PYGZob{\discretionary{}{\Wrappedafterbreak\char`\{}{\char`\{}}%
|
|
\def\PYGZcb{\discretionary{\char`\}}{\Wrappedafterbreak}{\char`\}}}%
|
|
\def\PYGZca{\discretionary{\char`\^}{\Wrappedafterbreak}{\char`\^}}%
|
|
\def\PYGZam{\discretionary{\char`\&}{\Wrappedafterbreak}{\char`\&}}%
|
|
\def\PYGZlt{\discretionary{}{\Wrappedafterbreak\char`\<}{\char`\<}}%
|
|
\def\PYGZgt{\discretionary{\char`\>}{\Wrappedafterbreak}{\char`\>}}%
|
|
\def\PYGZsh{\discretionary{}{\Wrappedafterbreak\char`\#}{\char`\#}}%
|
|
\def\PYGZpc{\discretionary{}{\Wrappedafterbreak\char`\%}{\char`\%}}%
|
|
\def\PYGZdl{\discretionary{}{\Wrappedafterbreak\char`\$}{\char`\$}}%
|
|
\def\PYGZhy{\discretionary{\char`\-}{\Wrappedafterbreak}{\char`\-}}%
|
|
\def\PYGZsq{\discretionary{}{\Wrappedafterbreak\textquotesingle}{\textquotesingle}}%
|
|
\def\PYGZdq{\discretionary{}{\Wrappedafterbreak\char`\"}{\char`\"}}%
|
|
\def\PYGZti{\discretionary{\char`\~}{\Wrappedafterbreak}{\char`\~}}%
|
|
}
|
|
% Some characters . , ; ? ! / are not pygmentized.
|
|
% This macro makes them "active" and they will insert potential linebreaks
|
|
\newcommand*\Wrappedbreaksatpunct {%
|
|
\lccode`\~`\.\lowercase{\def~}{\discretionary{\hbox{\char`\.}}{\Wrappedafterbreak}{\hbox{\char`\.}}}%
|
|
\lccode`\~`\,\lowercase{\def~}{\discretionary{\hbox{\char`\,}}{\Wrappedafterbreak}{\hbox{\char`\,}}}%
|
|
\lccode`\~`\;\lowercase{\def~}{\discretionary{\hbox{\char`\;}}{\Wrappedafterbreak}{\hbox{\char`\;}}}%
|
|
\lccode`\~`\:\lowercase{\def~}{\discretionary{\hbox{\char`\:}}{\Wrappedafterbreak}{\hbox{\char`\:}}}%
|
|
\lccode`\~`\?\lowercase{\def~}{\discretionary{\hbox{\char`\?}}{\Wrappedafterbreak}{\hbox{\char`\?}}}%
|
|
\lccode`\~`\!\lowercase{\def~}{\discretionary{\hbox{\char`\!}}{\Wrappedafterbreak}{\hbox{\char`\!}}}%
|
|
\lccode`\~`\/\lowercase{\def~}{\discretionary{\hbox{\char`\/}}{\Wrappedafterbreak}{\hbox{\char`\/}}}%
|
|
\catcode`\.\active
|
|
\catcode`\,\active
|
|
\catcode`\;\active
|
|
\catcode`\:\active
|
|
\catcode`\?\active
|
|
\catcode`\!\active
|
|
\catcode`\/\active
|
|
\lccode`\~`\~
|
|
}
|
|
\makeatother
|
|
|
|
\let\OriginalVerbatim=\Verbatim
|
|
\makeatletter
|
|
\renewcommand{\Verbatim}[1][1]{%
|
|
%\parskip\z@skip
|
|
\sbox\Wrappedcontinuationbox {\Wrappedcontinuationsymbol}%
|
|
\sbox\Wrappedvisiblespacebox {\FV@SetupFont\Wrappedvisiblespace}%
|
|
\def\FancyVerbFormatLine ##1{\hsize\linewidth
|
|
\vtop{\raggedright\hyphenpenalty\z@\exhyphenpenalty\z@
|
|
\doublehyphendemerits\z@\finalhyphendemerits\z@
|
|
\strut ##1\strut}%
|
|
}%
|
|
% If the linebreak is at a space, the latter will be displayed as visible
|
|
% space at end of first line, and a continuation symbol starts next line.
|
|
% Stretch/shrink are however usually zero for typewriter font.
|
|
\def\FV@Space {%
|
|
\nobreak\hskip\z@ plus\fontdimen3\font minus\fontdimen4\font
|
|
\discretionary{\copy\Wrappedvisiblespacebox}{\Wrappedafterbreak}
|
|
{\kern\fontdimen2\font}%
|
|
}%
|
|
|
|
% Allow breaks at special characters using \PYG... macros.
|
|
\Wrappedbreaksatspecials
|
|
% Breaks at punctuation characters . , ; ? ! and / need catcode=\active
|
|
\OriginalVerbatim[#1,codes*=\Wrappedbreaksatpunct]%
|
|
}
|
|
\makeatother
|
|
|
|
% Exact colors from NB
|
|
((*- block style_colors *))
|
|
\definecolor{incolor}{HTML}{303F9F}
|
|
\definecolor{outcolor}{HTML}{D84315}
|
|
\definecolor{cellborder}{HTML}{CFCFCF}
|
|
\definecolor{cellbackground}{HTML}{F7F7F7}
|
|
((*- endblock style_colors *))
|
|
|
|
% prompt
|
|
\makeatletter
|
|
\newcommand{\boxspacing}{\kern\kvtcb@left@rule\kern\kvtcb@boxsep}
|
|
\makeatother
|
|
((*- block style_prompt *))
|
|
\newcommand{\prompt}[4]{
|
|
{\ttfamily\llap{{\color{#2}[#3]:\hspace{3pt}#4}}\vspace{-\baselineskip}}
|
|
}
|
|
((* endblock style_prompt *))
|
|
|
|
((*- endblock definitions -*))
|
|
|
|
%===============================================================================
|
|
% Input
|
|
%===============================================================================
|
|
|
|
((* block input scoped *))
|
|
((( draw_cell(cell.source | highlight_code(strip_verbatim=True), cell, 'In', 'incolor', '\\boxspacing') )))
|
|
((* endblock input *))
|
|
|
|
|
|
%===============================================================================
|
|
% Output
|
|
%===============================================================================
|
|
|
|
((*- if charlim is not defined -*))
|
|
((* set charlim = 80 *))
|
|
((*- endif -*))
|
|
|
|
((* block execute_result scoped *))
|
|
((*- for type in output.data | filter_data_type -*))
|
|
((*- if type in ['text/plain']*))
|
|
((( draw_cell(output.data['text/plain'] | wrap_text(charlim) | escape_latex | ansi2latex, cell, 'Out', 'outcolor', '\\boxspacing') )))
|
|
((* else -*))
|
|
((( " " )))
|
|
((( draw_prompt(cell, 'Out', 'outcolor','') )))((( super() )))
|
|
((*- endif -*))
|
|
((*- endfor -*))
|
|
((* endblock execute_result *))
|
|
|
|
((* block stream *))
|
|
\begin{Verbatim}[commandchars=\\\{\}]
|
|
((( output.text | wrap_text(charlim) | escape_latex | strip_trailing_newline | ansi2latex )))
|
|
\end{Verbatim}
|
|
((* endblock stream *))
|
|
|
|
%==============================================================================
|
|
% Support Macros
|
|
%==============================================================================
|
|
|
|
% Name: draw_cell
|
|
% Purpose: Renders an output/input prompt
|
|
((*- if draw_cell is not defined -*)) % Required to allow overriding.
|
|
((* macro draw_cell(text, cell, prompt, prompt_color, extra_space) -*))
|
|
((*- if prompt == 'In' -*))
|
|
((*- set style = "breakable, size=fbox, boxrule=1pt, pad at break*=1mm,colback=cellbackground, colframe=cellborder"-*))
|
|
((*- else -*))((*- set style = "breakable, size=fbox, boxrule=.5pt, pad at break*=1mm, opacityfill=0"-*))((*- endif -*))
|
|
|
|
\begin{tcolorbox}[((( style )))]
|
|
(((- draw_prompt(cell, prompt, prompt_color, extra_space) )))
|
|
\begin{Verbatim}[commandchars=\\\{\}]
|
|
((( text )))
|
|
\end{Verbatim}
|
|
\end{tcolorbox}
|
|
((*- endmacro *))
|
|
((*- endif -*))
|
|
|
|
% Name: draw_prompt
|
|
% Purpose: Renders an output/input prompt
|
|
((* macro draw_prompt(cell, prompt, prompt_color, extra_space) -*))
|
|
((*- if cell.execution_count is defined -*))
|
|
((*- set execution_count = "" ~ (cell.execution_count | replace(None, " ")) -*))
|
|
((*- else -*))((*- set execution_count = " " -*))((*- endif *))
|
|
|
|
((*- if (resources.global_content_filter.include_output_prompt and prompt == 'Out')
|
|
or (resources.global_content_filter.include_input_prompt and prompt == 'In' ) *))
|
|
\prompt{(((prompt)))}{(((prompt_color)))}{(((execution_count)))}{(((extra_space)))}
|
|
((*- endif -*))
|
|
((*- endmacro *))
|