00_notebook_tour_orig.tex
824 lines
| 22.4 KiB
| application/x-tex
|
TexLexer
Matthias BUSSONNIER
|
r9653 | |||
%% 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 | ||||
\begin{document} | ||||
\section{A brief tour of the IPython notebook} | ||||
This document will give you a brief tour of the capabilities of the | ||||
IPython notebook.\\You can view its contents by scrolling around, or | ||||
execute each cell by typing \texttt{Shift-Enter}. After you conclude | ||||
this brief high-level tour, you should read the accompanying notebook | ||||
titled \texttt{01\_notebook\_introduction}, which takes a more | ||||
step-by-step approach to the features of the system. | ||||
The rest of the notebooks in this directory illustrate various other | ||||
aspects and capabilities of the IPython notebook; some of them may | ||||
require additional libraries to be executed. | ||||
\textbf{NOTE:} This notebook \emph{must} be run from its own directory, | ||||
so you must \texttt{cd} to this directory and then start the notebook, | ||||
but do \emph{not} use the \texttt{-{}-notebook-dir} option to run it | ||||
from another location. | ||||
The first thing you need to know is that you are still controlling the | ||||
same old IPython you're used to, so things like shell aliases and magic | ||||
commands still work: | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
pwd | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
u'/Users/minrk/dev/ip/mine/docs/examples/notebooks' | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
ls | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
\begin{verbatim} | ||||
00_notebook_tour.ipynb callbacks.ipynb python-logo.svg | ||||
01_notebook_introduction.ipynb cython_extension.ipynb rmagic_extension.ipynb | ||||
Animations_and_Progress.ipynb display_protocol.ipynb sympy.ipynb | ||||
Capturing Output.ipynb formatting.ipynb sympy_quantum_computing.ipynb | ||||
Script Magics.ipynb octavemagic_extension.ipynb trapezoid_rule.ipynb | ||||
animation.m4v progbar.ipynb | ||||
\end{verbatim} | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
message = 'The IPython notebook is great!' | ||||
# note: the echo command does not run on Windows, it's a unix command. | ||||
!echo $message | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
\begin{verbatim} | ||||
The IPython notebook is great! | ||||
\end{verbatim} | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
\section{Plots with matplotlib} | ||||
IPython adds an `inline' matplotlib backend, which embeds any matplotlib | ||||
figures into the notebook. | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
%pylab inline | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
\begin{verbatim} | ||||
Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline]. | ||||
For more information, type 'help(pylab)'. | ||||
\end{verbatim} | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
x = linspace(0, 3*pi, 500) | ||||
plot(x, sin(x**2)) | ||||
title('A simple chirp'); | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
\begin{center} | ||||
\includegraphics[width=0.7\textwidth]{_fig_07.png} | ||||
\par | ||||
\end{center} | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
You can paste blocks of input with prompt markers, such as those from | ||||
\href{http://docs.python.org/tutorial/interpreter.html\#interactive-mode}{the | ||||
official Python tutorial} | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
>>> the_world_is_flat = 1 | ||||
>>> if the_world_is_flat: | ||||
... print "Be careful not to fall off!" | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
\begin{verbatim} | ||||
Be careful not to fall off! | ||||
\end{verbatim} | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
Errors are shown in informative ways: | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
%run non_existent_file | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
\begin{verbatim} | ||||
ERROR: File `u'non_existent_file.py'` not found. | ||||
\end{verbatim} | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
x = 1 | ||||
y = 4 | ||||
z = y/(1-x) | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
--------------------------------------------------------------------------- | ||||
ZeroDivisionError Traceback (most recent call last) | ||||
<ipython-input-8-dc39888fd1d2> in <module>() | ||||
1 x = 1 | ||||
2 y = 4 | ||||
----> 3 z = y/(1-x) | ||||
ZeroDivisionError: integer division or modulo by zero | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
When IPython needs to display additional information (such as providing | ||||
details on an object via \texttt{x?} it will automatically invoke a | ||||
pager at the bottom of the screen: | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
magic | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\end{codecell} | ||||
\subsection{Non-blocking output of kernel} | ||||
If you execute the next cell, you will see the output arriving as it is | ||||
generated, not all at the end. | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
import time, sys | ||||
for i in range(8): | ||||
print i, | ||||
time.sleep(0.5) | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
\begin{verbatim} | ||||
Matthias BUSSONNIER
|
r9658 | 0 1 2 3 4 5 6 7 | ||
Matthias BUSSONNIER
|
r9653 | \end{verbatim} | ||
\end{codeoutput} | ||||
\end{codecell} | ||||
\subsection{Clean crash and restart} | ||||
We call the low-level system libc.time routine with the wrong argument | ||||
via ctypes to segfault the Python interpreter: | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
import sys | ||||
from ctypes import CDLL | ||||
# This will crash a Linux or Mac system; equivalent calls can be made on Windows | ||||
dll = 'dylib' if sys.platform == 'darwin' else '.so.6' | ||||
libc = CDLL("libc.%s" % dll) | ||||
libc.time(-1) # BOOM!! | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\end{codecell} | ||||
\subsection{Markdown cells can contain formatted text and code} | ||||
You can \emph{italicize}, \textbf{boldface} | ||||
\begin{itemize} | ||||
\item | ||||
build | ||||
\item | ||||
lists | ||||
\end{itemize} | ||||
and embed code meant for illustration instead of execution in Python: | ||||
\begin{verbatim} | ||||
def f(x): | ||||
"""a docstring""" | ||||
return x**2 | ||||
\end{verbatim} | ||||
or other languages: | ||||
\begin{verbatim} | ||||
if (i=0; i<n; i++) { | ||||
printf("hello %d\n", i); | ||||
x += 4; | ||||
} | ||||
\end{verbatim} | ||||
Courtesy of MathJax, you can include mathematical expressions both | ||||
inline: $e^{i\pi} + 1 = 0$ and displayed: | ||||
\[e^x=\sum_{i=0}^\infty \frac{1}{i!}x^i\] | ||||
\subsection{Rich displays: include anyting a browser can show} | ||||
Note that we have an actual protocol for this, see the | ||||
\texttt{display\_protocol} notebook for further details. | ||||
\subsubsection{Images} | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
from IPython.display import Image | ||||
Image(filename='../../source/_static/logo.png') | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
<IPython.core.display.Image at 0x10faeafd0> | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
An image can also be displayed from raw data or a url | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
Image(url='http://python.org/images/python-logo.gif') | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
<IPython.core.display.Image at 0x1060e7410> | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
SVG images are also supported out of the box (since modern browsers do a | ||||
good job of rendering them): | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
from IPython.display import SVG | ||||
SVG(filename='python-logo.svg') | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
<IPython.core.display.SVG at 0x10fb998d0> | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
\paragraph{Embedded vs Non-embedded Images} | ||||
As of IPython 0.13, images are embedded by default for compatibility | ||||
with QtConsole, and the ability to still be displayed offline. | ||||
Let's look at the differences: | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
# by default Image data are embedded | ||||
Embed = Image( 'http://scienceview.berkeley.edu/view/images/newview.jpg') | ||||
# if kwarg `url` is given, the embedding is assumed to be false | ||||
SoftLinked = Image(url='http://scienceview.berkeley.edu/view/images/newview.jpg') | ||||
# In each case, embed can be specified explicitly with the `embed` kwarg | ||||
# ForceEmbed = Image(url='http://scienceview.berkeley.edu/view/images/newview.jpg', embed=True) | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\end{codecell} | ||||
Today's image from a webcam at Berkeley, (at the time I created this | ||||
notebook). This should also work in the Qtconsole. Drawback is that the | ||||
saved notebook will be larger, but the image will still be present | ||||
offline. | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
Embed | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
<IPython.core.display.Image at 0x10fb99b50> | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
Today's image from same webcam at Berkeley, (refreshed every minutes, if | ||||
you reload the notebook), visible only with an active internet | ||||
connexion, that should be different from the previous one. This will not | ||||
work on Qtconsole. Notebook saved with this kind of image will be | ||||
lighter and always reflect the current version of the source, but the | ||||
image won't display offline. | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
SoftLinked | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
<IPython.core.display.Image at 0x10fb99b10> | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
Of course, if you re-run the all notebook, the two images will be the | ||||
same again. | ||||
\subsubsection{Video} | ||||
And more exotic objects can also be displayed, as long as their | ||||
representation supports the IPython display protocol. | ||||
For example, videos hosted externally on YouTube are easy to load (and | ||||
writing a similar wrapper for other hosted content is trivial): | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
from IPython.display import YouTubeVideo | ||||
# a talk about IPython at Sage Days at U. Washington, Seattle. | ||||
# Video credit: William Stein. | ||||
YouTubeVideo('1j_HxD4iLn8') | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
<IPython.lib.display.YouTubeVideo at 0x10fba2190> | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
Using the nascent video capabilities of modern browsers, you may also be | ||||
able to display local videos. At the moment this doesn't work very well | ||||
in all browsers, so it may or may not work for you; we will continue | ||||
testing this and looking for ways to make it more robust. | ||||
The following cell loads a local file called \texttt{animation.m4v}, | ||||
encodes the raw video as base64 for http transport, and uses the HTML5 | ||||
video tag to load it. On Chrome 15 it works correctly, displaying a | ||||
control bar at the bottom with a play/pause button and a location | ||||
slider. | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
from IPython.display import HTML | ||||
video = open("animation.m4v", "rb").read() | ||||
video_encoded = video.encode("base64") | ||||
video_tag = '<video controls alt="test" src="data:video/x-m4v;base64,{0}">'.format(video_encoded) | ||||
HTML(data=video_tag) | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
<IPython.core.display.HTML at 0x10fba28d0> | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
\subsection{Local Files} | ||||
The above examples embed images and video from the notebook filesystem | ||||
in the output areas of code cells. It is also possible to request these | ||||
files directly in markdown cells if they reside in the notebook | ||||
directory via relative urls prefixed with \texttt{files/}: | ||||
\begin{verbatim} | ||||
files/[subdirectory/]<filename> | ||||
\end{verbatim} | ||||
For example, in the example notebook folder, we have the Python logo, | ||||
addressed as: | ||||
\begin{verbatim} | ||||
<img src="files/python-logo.svg" /> | ||||
\end{verbatim} | ||||
and a video with the HTML5 video tag: | ||||
\begin{verbatim} | ||||
<video controls src="files/animation.m4v" /> | ||||
\end{verbatim} | ||||
These do not embed the data into the notebook file, and require that the | ||||
files exist when you are viewing the notebook. | ||||
\subsubsection{Security of local files} | ||||
Note that this means that the IPython notebook server also acts as a | ||||
generic file server for files inside the same tree as your notebooks. | ||||
Access is not granted outside the notebook folder so you have strict | ||||
control over what files are visible, but for this reason it is highly | ||||
recommended that you do not run the notebook server with a notebook | ||||
directory at a high level in your filesystem (e.g.~your home directory). | ||||
When you run the notebook in a password-protected manner, local file | ||||
access is restricted to authenticated users unless read-only views are | ||||
active. | ||||
\subsection{Linking to files and directories for viewing in the browser} | ||||
It is also possible to link directly to files or directories so they can | ||||
be opened in the browser. This is especially convenient if you're | ||||
interacting with a tool within IPython that generates HTML pages, and | ||||
you'd like to easily be able to open those in a new browser window. | ||||
Alternatively, if your IPython notebook server is on a remote system, | ||||
creating links provides an easy way to download any files that get | ||||
generated. | ||||
As we saw above, there are a bunch of \texttt{.ipynb} files in our | ||||
current directory. | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
ls | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
\begin{verbatim} | ||||
00_notebook_tour.ipynb formatting.ipynb | ||||
01_notebook_introduction.ipynb octavemagic_extension.ipynb | ||||
Animations_and_Progress.ipynb publish_data.ipynb | ||||
Capturing Output.ipynb python-logo.svg | ||||
Script Magics.ipynb rmagic_extension.ipynb | ||||
animation.m4v sympy.ipynb | ||||
cython_extension.ipynb sympy_quantum_computing.ipynb | ||||
display_protocol.ipynb trapezoid_rule.ipynb | ||||
\end{verbatim} | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
If we want to create a link to one of them, we can call use the | ||||
\texttt{FileLink} object. | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
from IPython.display import FileLink | ||||
FileLink('00_notebook_tour.ipynb') | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
<IPython.lib.display.FileLink at 0x10f7ea3d0> | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
Alternatively, if we want to link to all of them, we can use the | ||||
\texttt{FileLinks} object, passing \texttt{'.'} to indicate that we want | ||||
links generated for the current working directory. Note that if there | ||||
were other directories under the current directory, \texttt{FileLinks} | ||||
would work in a recursive manner creating links to files in all | ||||
sub-directories as well. | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
from IPython.display import FileLinks | ||||
FileLinks('.') | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
<IPython.lib.display.FileLinks at 0x10f7eaad0> | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
\subsubsection{External sites} | ||||
You can even embed an entire page from another site in an iframe; for | ||||
example this is today's Wikipedia page for mobile users: | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
HTML('<iframe src=http://en.mobile.wikipedia.org/?useformat=mobile width=700 height=350></iframe>') | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
<IPython.core.display.HTML at 0x1094900d0> | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
\subsubsection{Mathematics} | ||||
And we also support the display of mathematical expressions typeset in | ||||
LaTeX, which is rendered in the browser thanks to the | ||||
\href{http://mathjax.org}{MathJax library}. | ||||
Note that this is \emph{different} from the above examples. Above we | ||||
were typing mathematical expressions in Markdown cells (along with | ||||
normal text) and letting the browser render them; now we are displaying | ||||
the output of a Python computation as a LaTeX expression wrapped by the | ||||
\texttt{Math()} object so the browser renders it. The \texttt{Math} | ||||
object will add the needed LaTeX delimiters (\texttt{\$\$}) if they are | ||||
not provided: | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
from IPython.display import Math | ||||
Math(r'F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx') | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
<IPython.core.display.Math at 0x10fba26d0> | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
With the \texttt{Latex} class, you have to include the delimiters | ||||
yourself. This allows you to use other LaTeX modes such as | ||||
\texttt{eqnarray}: | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
from IPython.display import Latex | ||||
Latex(r"""\begin{eqnarray} | ||||
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\ | ||||
\nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\ | ||||
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\ | ||||
\nabla \cdot \vec{\mathbf{B}} & = 0 | ||||
\end{eqnarray}""") | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
<IPython.core.display.Latex at 0x10fba2c10> | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
Or you can enter latex directly with the \texttt{\%\%latex} cell magic: | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
%%latex | ||||
\begin{aligned} | ||||
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\ | ||||
\nabla \cdot \vec{\mathbf{E}} & = 4 \pi \rho \\ | ||||
\nabla \times \vec{\mathbf{E}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{B}}}{\partial t} & = \vec{\mathbf{0}} \\ | ||||
\nabla \cdot \vec{\mathbf{B}} & = 0 | ||||
\end{aligned} | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
There is also a \texttt{\%\%javascript} cell magic for running | ||||
javascript directly, and \texttt{\%\%svg} for manually entering SVG | ||||
content. | ||||
\section{Loading external codes} | ||||
\begin{itemize} | ||||
\item | ||||
Drag and drop a \texttt{.py} in the dashboard | ||||
\item | ||||
Use \texttt{\%load} with any local or remote url: | ||||
\href{http://matplotlib.sourceforge.net/gallery.html}{the Matplotlib | ||||
Gallery!} | ||||
\end{itemize} | ||||
In this notebook we've kept the output saved so you can see the result, | ||||
but you should run the next cell yourself (with an active internet | ||||
connection). | ||||
Let's make sure we have pylab again, in case we have restarted the | ||||
kernel due to the crash demo above | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
%pylab inline | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
\begin{verbatim} | ||||
Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline]. | ||||
For more information, type 'help(pylab)'. | ||||
\end{verbatim} | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
%load http://matplotlib.sourceforge.net/mpl_examples/pylab_examples/integral_demo.py | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\end{codecell} | ||||
\begin{codecell} | ||||
\begin{codeinput} | ||||
\begin{lstlisting} | ||||
#!/usr/bin/env python | ||||
# implement the example graphs/integral from pyx | ||||
from pylab import * | ||||
from matplotlib.patches import Polygon | ||||
def func(x): | ||||
return (x-3)*(x-5)*(x-7)+85 | ||||
ax = subplot(111) | ||||
a, b = 2, 9 # integral area | ||||
x = arange(0, 10, 0.01) | ||||
y = func(x) | ||||
plot(x, y, linewidth=1) | ||||
# make the shaded region | ||||
ix = arange(a, b, 0.01) | ||||
iy = func(ix) | ||||
verts = [(a,0)] + zip(ix,iy) + [(b,0)] | ||||
poly = Polygon(verts, facecolor='0.8', edgecolor='k') | ||||
ax.add_patch(poly) | ||||
text(0.5 * (a + b), 30, | ||||
r"$\int_a^b f(x)\mathrm{d}x$", horizontalalignment='center', | ||||
fontsize=20) | ||||
axis([0,10, 0, 180]) | ||||
figtext(0.9, 0.05, 'x') | ||||
figtext(0.1, 0.9, 'y') | ||||
ax.set_xticks((a,b)) | ||||
ax.set_xticklabels(('a','b')) | ||||
ax.set_yticks([]) | ||||
show() | ||||
\end{lstlisting} | ||||
\end{codeinput} | ||||
\begin{codeoutput} | ||||
\begin{center} | ||||
\includegraphics[width=0.7\textwidth]{_fig_60.png} | ||||
\par | ||||
\end{center} | ||||
\end{codeoutput} | ||||
\end{codecell} | ||||
\end{document} | ||||