##// END OF EJS Templates
style prefix instead of suffix
style prefix instead of suffix

File last commit:

r12740:79db46de
r12740:79db46de
Show More
style_notebook.tplx
191 lines | 7.4 KiB | text/plain | TextLexer
((= Notebook input/output style =))
((* extends 'latex_base.tplx' *))
% Custom packages
((* block packages *))
((( super() )))
\usepackage{tikz} % Needed to box output/input
\usepackage{scrextend} % Used to indent output
\usepackage{needspace} % Make prompts follow contents
\usepackage{framed} % Used to draw output that spans multiple pages
((* endblock packages *))
% Custom definitions
((* block definitions *))
((( super() )))
% Pygments definitions
((( resources.latex.pygment_definitions )))
% NB prompt colors
\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}
% NB prompt lengths
\newlength{\inputpadding}
\setlength{\inputpadding}{0.5em}
\newlength{\cellleftmargin}
\setlength{\cellleftmargin}{0.15\linewidth}
\newlength{\borderthickness}
\setlength{\borderthickness}{0.4pt}
\newlength{\smallerfontscale}
\setlength{\smallerfontscale}{9.5pt}
% NB prompt font size
\def\smaller{\fontsize{\smallerfontscale}{\smallerfontscale}\selectfont}
% Define a background layer, in which the nb prompt shape is drawn
\pgfdeclarelayer{background}
\pgfsetlayers{background,main}
\usetikzlibrary{calc}
% define styles for the normal border and the torn border
\tikzset{
normal border/.style={draw=nbframe-border, fill=nbframe-bg,
rectangle, rounded corners=2.5pt, line width=\borderthickness},
torn border/.style={draw=white, fill=white, line width=\borderthickness}}
% Macro to draw the shape behind the text, when it fits completly in the
% page
\def\notebookcellframe#1{%
\tikz{%
\node[inner sep=\inputpadding] (A) {#1};% Draw the text of the node
\begin{pgfonlayer}{background}% Draw the shape behind
\fill[normal border]%
(A.south east) -- ($(A.south west)+(\cellleftmargin,0)$) --
($(A.north west)+(\cellleftmargin,0)$) -- (A.north east) -- cycle;
\end{pgfonlayer}}}%
% Macro to draw the shape, when the text will continue in next page
\def\notebookcellframetop#1{%
\tikz{%
\node[inner sep=\inputpadding] (A) {#1}; % Draw the text of the node
\begin{pgfonlayer}{background}
\fill[normal border] % Draw the ``complete shape'' behind
(A.south east) -- ($(A.south west)+(\cellleftmargin,0)$) --
($(A.north west)+(\cellleftmargin,0)$) -- (A.north east) -- cycle;
\fill[torn border] % Add the torn lower border
($(A.south east)-(0,.1)$) -- ($(A.south west)+(\cellleftmargin,-.1)$) --
($(A.south west)+(\cellleftmargin,.1)$) -- ($(A.south east)+(0,.1)$) -- cycle;
\end{pgfonlayer}}}
% Macro to draw the shape, when the text continues from previous page
\def\notebookcellframebottom#1{%
\tikz{%
\node[inner sep=\inputpadding] (A) {#1}; % Draw the text of the node
\begin{pgfonlayer}{background}
\fill[normal border] % Draw the ``complete shape'' behind
(A.south east) -- ($(A.south west)+(\cellleftmargin,0)$) --
($(A.north west)+(\cellleftmargin,0)$) -- (A.north east) -- cycle;
\fill[torn border] % Add the torn upper border
($(A.north east)-(0,.1)$) -- ($(A.north west)+(\cellleftmargin,-.1)$) --
($(A.north west)+(\cellleftmargin,.1)$) -- ($(A.north east)+(0,.1)$) -- cycle;
\end{pgfonlayer}}}
% Macro to draw the shape, when both the text continues from previous page
% and it will continue in next page
\def\notebookcellframemiddle#1{%
\tikz{%
\node[inner sep=\inputpadding] (A) {#1}; % Draw the text of the node
\begin{pgfonlayer}{background}
\fill[normal border] % Draw the ``complete shape'' behind
(A.south east) -- ($(A.south west)+(\cellleftmargin,0)$) --
($(A.north west)+(\cellleftmargin,0)$) -- (A.north east) -- cycle;
\fill[torn border] % Add the torn lower border
($(A.south east)-(0,.1)$) -- ($(A.south west)+(\cellleftmargin,-.1)$) --
($(A.south west)+(\cellleftmargin,.1)$) -- ($(A.south east)+(0,.1)$) -- cycle;
\fill[torn border] % Add the torn upper border
($(A.north east)-(0,.1)$) -- ($(A.north west)+(\cellleftmargin,-.1)$) --
($(A.north west)+(\cellleftmargin,.1)$) -- ($(A.north east)+(0,.1)$) -- cycle;
\end{pgfonlayer}}}
% Define the environment which puts the frame
% In this case, the environment also accepts an argument with an optional
% title (which defaults to ``Example'', which is typeset in a box overlaid
% on the top border
\newenvironment{notebookcell}[1][0]{%
\def\FrameCommand{\notebookcellframe}%
\def\FirstFrameCommand{\notebookcellframetop}%
\def\LastFrameCommand{\notebookcellframebottom}%
\def\MidFrameCommand{\notebookcellframemiddle}%
\par\vspace{1\baselineskip}%
\MakeFramed {\FrameRestore}%
\noindent\tikz\node[inner sep=0em] at ($(A.north west)-(0,0)$) {%
((( draw_prompt("In", "#1", "nbframe-in-prompt", "2pt") )))%
}; \par}%
{\endMakeFramed}
((* endblock definitions *))
%===============================================================================
% Input
%===============================================================================
((* block input scoped *))
% Add contents below.
{\par%
\vspace{-1\baselineskip}%
\needspace{4\baselineskip}}%
\begin{notebookcell}[((( cell.prompt_number )))]%
\begin{addmargin}[\cellleftmargin]{0em}% left, right
{\smaller%
\par%
((* block extra_input_spacing *))((* endblock extra_input_spacing *))%
\vspace{-1\smallerfontscale}%
((( cell.input | highlight2latex )))%
\par%
\vspace{-1\smallerfontscale}}%
\end{addmargin}
\end{notebookcell}
((* endblock input *))
%===============================================================================
% Output
%===============================================================================
((* block output -*))
\par\vspace{1\smallerfontscale}%
\needspace{4\baselineskip}%
% Only render the prompt if the cell is pyout. Note, the outputs prompt
% block isn't used since we need to check each indiviual output and only
% add prompts to the pyout ones.
((* if output.output_type in ['pyout'] *))
{\par%
\vspace{-1\smallerfontscale}%
\noindent%
((( draw_prompt("Out", cell.prompt_number, "nbframe-out-prompt", "0em") )))%
((* block extra_output_spacing *))((* endblock extra_output_spacing *))}%
((* endif *))%
%
\begin{addmargin}[\cellleftmargin]{0em}% left, right
{\smaller%
\vspace{-1\smallerfontscale}%
((( super() )))}%
\end{addmargin}%
((*- endblock output *))
%==============================================================================
% Support Macros
%==============================================================================
% Name: draw_prompt
% Purpose: Renders an output/input prompt for notebook style pdfs
((* macro draw_prompt(prompt, number, color, space) -*))
\begin{minipage}{\cellleftmargin}%
\hfill%
{\smaller%
\tt%
\color{(((color)))}%
(((prompt)))[(((number)))]:}%
\hspace{\inputpadding}%
\hspace{(((space)))}%
\hspace{3pt}%
\end{minipage}%
((*- endmacro *))