├── .gitignore
├── COPYRIGHT
├── README.md
├── grid.tikz
├── setup.py
├── tikzmagic.py
└── tikzmagic_test.ipynb
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 | *$py.class
5 |
6 | # C extensions
7 | *.so
8 |
9 | # Distribution / packaging
10 | .Python
11 | env/
12 | build/
13 | develop-eggs/
14 | dist/
15 | downloads/
16 | eggs/
17 | .eggs/
18 | lib/
19 | lib64/
20 | parts/
21 | sdist/
22 | var/
23 | wheels/
24 | *.egg-info/
25 | .installed.cfg
26 | *.egg
27 |
28 | # PyInstaller
29 | # Usually these files are written by a python script from a template
30 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
31 | *.manifest
32 | *.spec
33 |
34 | # Installer logs
35 | pip-log.txt
36 | pip-delete-this-directory.txt
37 |
38 | # Unit test / coverage reports
39 | htmlcov/
40 | .tox/
41 | .coverage
42 | .coverage.*
43 | .cache
44 | nosetests.xml
45 | coverage.xml
46 | *.cover
47 | .hypothesis/
48 |
49 | # Translations
50 | *.mo
51 | *.pot
52 |
53 | # Django stuff:
54 | *.log
55 | local_settings.py
56 |
57 | # Flask stuff:
58 | instance/
59 | .webassets-cache
60 |
61 | # Scrapy stuff:
62 | .scrapy
63 |
64 | # Sphinx documentation
65 | docs/_build/
66 |
67 | # PyBuilder
68 | target/
69 |
70 | # Jupyter Notebook
71 | .ipynb_checkpoints
72 |
73 | # pyenv
74 | .python-version
75 |
76 | # celery beat schedule file
77 | celerybeat-schedule
78 |
79 | # SageMath parsed files
80 | *.sage.py
81 |
82 | # dotenv
83 | .env
84 |
85 | # virtualenv
86 | .venv
87 | venv/
88 | ENV/
89 |
90 | # Spyder project settings
91 | .spyderproject
92 | .spyproject
93 |
94 | # Rope project settings
95 | .ropeproject
96 |
97 | # mkdocs documentation
98 | /site
99 |
100 | # mypy
101 | .mypy_cache/
102 |
103 | # Mac OSX General
104 | .DS_Store
105 | .AppleDouble
106 | .LSOverride
107 |
108 | # Icon must end with two \r
109 | Icon
110 |
111 | # Thumbnails
112 | ._*
113 |
114 | # Files that might appear in the root of a volume
115 | .DocumentRevisions-V100
116 | .fseventsd
117 | .Spotlight-V100
118 | .TemporaryItems
119 | .Trashes
120 | .VolumeIcon.icns
121 | .com.apple.timemachine.donotpresent
122 |
123 | # Directories potentially created on remote AFP share
124 | .AppleDB
125 | .AppleDesktop
126 | Network Trash Folder
127 | Temporary Items
128 | .apdisk
129 |
130 | # PyCharm
131 | .idea
132 |
133 | # Node.js
134 | node_modules/
135 | package-lock.json
136 |
137 | # pytest
138 | .pytest_cache/
139 |
140 |
--------------------------------------------------------------------------------
/COPYRIGHT:
--------------------------------------------------------------------------------
1 | Copyright (C) 2015 The IPython Development Team
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without
5 | modification, are permitted provided that the following conditions are met:
6 |
7 | * Redistributions of source code must retain the above copyright notice, this
8 | list of conditions and the following disclaimer.
9 |
10 | * Redistributions in binary form must reproduce the above copyright notice,
11 | this list of conditions and the following disclaimer in the documentation
12 | and/or other materials provided with the distribution.
13 |
14 | * Neither the name of ipython-tikzmagic nor the names of its
15 | contributors may be used to endorse or promote products derived from
16 | this software without specific prior written permission.
17 |
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 |
29 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ipython-tikzmagic
2 |
3 | IPython magics for generating figures with TikZ. You can select the output format as svg, png or jpg, define the image size, specify a scale factor, load TikZ packages, and save to external files. The accompanying IPython notebooks shows some examples demonstrating how to use these features.
4 |
5 | The package requires a working LaTeX installation, ImageMagick and pdf2svg.
6 |
7 | ## Installation
8 |
9 | ```pip install git+https://github.com/michakraus/ipython-tikzmagic.git```
10 |
11 | ## Usage
12 |
13 | Load package by writing
14 | ```
15 | %load_ext tikzmagic
16 | ```
17 | in a notebook cell.
18 | Call tikz by prepending `%tikz` to a single command, e.g.,
19 | ```
20 | %tikz \draw (0,0) rectangle (1,1);
21 | ```
22 | or by starting a cell with `%%tikz`, e.g.,
23 | ```
24 | %%tikz
25 | \draw (0,0) rectangle (1,1);
26 | \filldraw (0.5,0.5) circle (.1);
27 | ```
28 |
29 | ## Optional Arguments
30 |
31 | - `-sc` or `--scale`: scaling factor of plots, default=1
32 | - `-s` or `--size`: pixel size of plots, e.g., `-s width,height`, default=400,240
33 | - `-f` or `--format`: plot format (png, svg or jpg), default=png
34 | - `-e` or `--encoding`: text encoding, default=utf-8
35 | - `-x` or `--preamble`: LaTeX preamble to insert before tikz figure, default=None
36 | - `-p` or `--package`: LaTeX packages to load, separated by comma, e.g., `-p pgfplots,textcomp`, default=None
37 | - `-l` or `--library`: TikZ libraries to load, separated by comma, e.g., `-l matrix,arrows`, default=None
38 | - `-g` or `--pgfplotslibrary`: Pgfplots libraries to load, separated by comma, e.g., `-l matrix,arrows`, default=None
39 | - `-S` or `--save`: save a copy to file, e.g., -S filename, default=None
40 |
41 | ## Example
42 |
43 | [IPython example notebook](tikzmagic_test.ipynb)
44 |
45 | ## Disclaimer
46 |
47 | This package is not actively maintained. In particular, the author cannot provide support for installation issues. However, PRs for fixes and extensions will usually be merged.
48 |
--------------------------------------------------------------------------------
/grid.tikz:
--------------------------------------------------------------------------------
1 | \draw [style=help lines, step=2] (-1,-1) grid (+7,+7);
2 | \draw [line width=0.5mm, fill=blue!40!white] (+2,+2) rectangle (+4,+4);
3 |
4 | \draw [blue!60!white] ( 2, 2) node[anchor=north east] {$(i ,j )$};
5 | \draw [blue!60!white] ( 4, 2) node[anchor=north west] {$(i+1,j )$};
6 | \draw [blue!60!white] ( 4, 4) node[anchor=south west] {$(i+1,j+1)$};
7 | \draw [blue!60!white] ( 2, 4) node[anchor=south east] {$(i ,j+1)$};
8 |
9 | \filldraw [color=gray] (0,0) circle (.1);
10 | \filldraw [color=gray] (0,2) circle (.1);
11 | \filldraw [color=gray] (0,4) circle (.1);
12 | \filldraw [color=gray] (0,6) circle (.1);
13 | \filldraw [color=gray] (2,0) circle (.1);
14 | \filldraw [color=black] (2,2) circle (.1);
15 | \filldraw [color=black] (2,4) circle (.1);
16 | \filldraw [color=gray] (2,6) circle (.1);
17 | \filldraw [color=gray] (4,0) circle (.1);
18 | \filldraw [color=black] (4,2) circle (.1);
19 | \filldraw [color=black] (4,4) circle (.1);
20 | \filldraw [color=gray] (4,6) circle (.1);
21 | \filldraw [color=gray] (6,0) circle (.1);
22 | \filldraw [color=gray] (6,2) circle (.1);
23 | \filldraw [color=gray] (6,4) circle (.1);
24 | \filldraw [color=gray] (6,6) circle (.1);
25 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | from __future__ import with_statement
2 |
3 | try:
4 | from setuptools import setup
5 | except ImportError:
6 | from distutils.core import setup
7 |
8 | classifiers = [
9 | "Programming Language :: Python :: 2",
10 | "Programming Language :: Python :: 3",
11 | "Intended Audience :: Developers",
12 | "License :: OSI Approved :: BSD License",
13 | "Topic :: Scientific/Engineering :: Visualization",
14 | "Topic :: Software Development :: Libraries",
15 | "Topic :: Utilities",
16 | "Framework :: IPython"
17 | ]
18 |
19 | with open("README.md", "r") as fp:
20 | long_description = fp.read()
21 |
22 | __author__ = "Michael Kraus"
23 | __version__ = "0.1.1"
24 |
25 | setup(
26 | name="ipython-tikzmagic",
27 | version=__version__,
28 | author=__author__,
29 | url="https://github.com/mkrphys/ipython-tikzmagic",
30 | py_modules=["tikzmagic"],
31 | description="IPython magics for generating figures with TikZ",
32 | long_description=long_description,
33 | license="BSD",
34 | classifiers=classifiers,
35 | install_requires=[
36 | "ipython",
37 | ]
38 | )
39 |
--------------------------------------------------------------------------------
/tikzmagic.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | """
3 | =========
4 | tikzmagic
5 | =========
6 |
7 | Magics for generating figures with TikZ.
8 |
9 | .. note::
10 |
11 | ``TikZ`` and ``LaTeX`` need to be installed separately.
12 |
13 | Usage
14 | =====
15 |
16 | ``%%tikz``
17 |
18 | {TIKZ_DOC}
19 |
20 | """
21 |
22 | #-----------------------------------------------------------------------------
23 | # Copyright (C) 2013 The IPython Development Team
24 | #
25 | # Distributed under the terms of the BSD License. The full license is in
26 | # the file COPYING, distributed as part of this software.
27 | #-----------------------------------------------------------------------------
28 | from __future__ import print_function
29 | from builtins import str
30 | import sys
31 | import tempfile
32 | from glob import glob
33 | from os import chdir, getcwd, environ, pathsep
34 | from subprocess import call, Popen, PIPE
35 | from shutil import rmtree, copy
36 | from xml.dom import minidom
37 |
38 | from IPython.core.displaypub import publish_display_data
39 | from IPython.core.magic import (Magics, magics_class, line_magic,
40 | line_cell_magic, needs_local_scope)
41 | from IPython.testing.skipdoctest import skip_doctest
42 | from IPython.core.magic_arguments import (
43 | argument, magic_arguments, parse_argstring
44 | )
45 | from IPython.utils.py3compat import unicode_to_str
46 | from textwrap import indent
47 |
48 | try:
49 | import pkg_resources # part of setuptools
50 | __version__ = pkg_resources.require("ipython-tikzmagic")[0].version
51 | except ImportError:
52 | __version__ = 'unknown'
53 |
54 |
55 | _mimetypes = {'png' : 'image/png',
56 | 'svg' : 'image/svg+xml',
57 | 'jpg' : 'image/jpeg',
58 | 'jpeg': 'image/jpeg'}
59 |
60 | @magics_class
61 | class TikzMagics(Magics):
62 | """A set of magics useful for creating figures with TikZ.
63 | """
64 | def __init__(self, shell):
65 | """
66 | Parameters
67 | ----------
68 | shell : IPython shell
69 |
70 | """
71 | super(TikzMagics, self).__init__(shell)
72 | self._plot_format = 'png'
73 |
74 | # Allow publish_display_data to be overridden for
75 | # testing purposes.
76 | self._publish_display_data = publish_display_data
77 |
78 |
79 | def _fix_gnuplot_svg_size(self, image, size=None):
80 | """
81 | GnuPlot SVGs do not have height/width attributes. Set
82 | these to be the same as the viewBox, so that the browser
83 | scales the image correctly.
84 |
85 | Parameters
86 | ----------
87 | image : str
88 | SVG data.
89 | size : tuple of int
90 | Image width, height.
91 |
92 | """
93 | (svg,) = minidom.parseString(image).getElementsByTagName('svg')
94 | viewbox = svg.getAttribute('viewBox').split(' ')
95 |
96 | if size is not None:
97 | width, height = size
98 | else:
99 | width, height = viewbox[2:]
100 |
101 | svg.setAttribute('width', '%dpx' % width)
102 | svg.setAttribute('height', '%dpx' % height)
103 | return svg.toxml()
104 |
105 |
106 | def _run_latex(self, code, encoding, dir):
107 | f = open(dir + '/tikz.tex', 'w', encoding=encoding)
108 | f.write(code)
109 | f.close()
110 |
111 | current_dir = getcwd()
112 | chdir(dir)
113 |
114 | print_log = False
115 | log = None
116 | stdout = bytes()
117 | stderr = bytes()
118 |
119 | # Set the TEXINPUTS environment variable, which allows the tikz code
120 | # to refence files relative to the notebook (includes, packages, ...)
121 | env = environ.copy()
122 | if 'TEXINPUTS' in env:
123 | env['TEXINPUTS'] = current_dir + pathsep + env['TEXINPUTS']
124 | else:
125 | env['TEXINPUTS'] = '.' + pathsep + current_dir + pathsep*2
126 | # note that the trailing double pathsep will insert the standard
127 | # search path (otherwise we would lose access to all packages)
128 |
129 | def show(header, body):
130 | print(f"{header}:", file=sys.stderr)
131 | print(indent(body, " "), file=sys.stderr)
132 |
133 | try:
134 | # only forward output to the notebook if there's an error
135 | cmd = "pdflatex --shell-escape tikz.tex"
136 | p = Popen(cmd,
137 | shell=True,
138 | env=env,
139 | stdout=PIPE,
140 | stderr=PIPE)
141 | stdout, stderr = p.communicate()
142 | if p.returncode != 0:
143 | print("pdflatex terminated with signal", p.returncode, file=sys.stderr)
144 | show("command", cmd)
145 | show("tkiz.tex", code)
146 | print_log = True
147 | except OSError as e:
148 | print("LaTeX execution failed:", e, file=sys.stderr)
149 | print_log = True
150 |
151 | # in case of error return LaTeX log
152 | if print_log:
153 | show("stdout", stdout.decode("utf-8"))
154 | show("stderr", stderr.decode("utf-8"))
155 |
156 | chdir(current_dir)
157 |
158 |
159 | def _convert_pdf_to_svg(self, dir):
160 | current_dir = getcwd()
161 | chdir(dir)
162 |
163 | try:
164 | retcode = call("pdf2svg tikz.pdf tikz.svg", shell=True)
165 | if retcode != 0:
166 | print("pdf2svg terminated with signal", -retcode, file=sys.stderr)
167 | except OSError as e:
168 | print("pdf2svg execution failed:", e, file=sys.stderr)
169 |
170 | chdir(current_dir)
171 |
172 |
173 | def _convert_png_to_jpg(self, dir, imagemagick_path):
174 | current_dir = getcwd()
175 | chdir(dir)
176 |
177 | try:
178 | retcode = call("%s tikz.png -quality 100 -background white -flatten tikz.jpg"
179 | % imagemagick_path, shell=True)
180 | if retcode != 0:
181 | print("convert terminated with signal", -retcode, file=sys.stderr)
182 | except OSError as e:
183 | print("convert execution failed:", e, file=sys.stderr)
184 |
185 | chdir(current_dir)
186 |
187 |
188 | @skip_doctest
189 | @magic_arguments()
190 | @argument(
191 | '-sc', '--scale', action='store', type=str, default=1,
192 | help='Scaling factor of plots. Default is "--scale 1".'
193 | )
194 | @argument(
195 | '-s', '--size', action='store', type=str, default='400,240',
196 | help='Pixel size of plots, "width,height". Default is "--size 400,240".'
197 | )
198 | @argument(
199 | '-f', '--format', action='store', type=str, default='png',
200 | help='Plot format (png, svg or jpg).'
201 | )
202 | @argument(
203 | '-e', '--encoding', action='store', type=str, default='utf-8',
204 | help='Text encoding, e.g., -e utf-8.'
205 | )
206 | @argument(
207 | '-x', '--preamble', action='store', type=str, default='',nargs='*',
208 | help='LaTeX preamble to insert before tikz figure, e.g., -x "$preamble", with preamble some string variable.'
209 | )
210 | @argument(
211 | '-p', '--package', action='store', type=str, default='',
212 | help='LaTeX packages to load, separated by comma, e.g., -p pgfplots,textcomp.'
213 | )
214 | @argument(
215 | '-l', '--library', action='store', type=str, default='',
216 | help='TikZ libraries to load, separated by comma, e.g., -l matrix,arrows.'
217 | )
218 | @argument(
219 | '-g', '--pgfplotslibrary', action='store', type=str, default='',
220 | help='Pgfplots libraries to load, separated by comma, e.g., -g fillbetween.'
221 | )
222 | @argument(
223 | '-S', '--save', action='store', type=str, default=None,
224 | help='Save a copy to file, e.g., -S filename. Default is None'
225 | )
226 | @argument('-i', '--imagemagick', action='store', type=str, default='convert',
227 | help='Name of ImageMagick executable, optionally with full path. Default is "convert"'
228 | )
229 | @argument('-po', '--pictureoptions', action='store', type=str, default='', nargs='*',
230 | help='Additional arguments to pass to the \\tikzpicture command.'
231 | )
232 |
233 | @argument('--showlatex', action='store_true',
234 | help='Show the LATeX file instead of generating image, for debugging LaTeX errors.'
235 | )
236 |
237 | @argument('-ct', '--circuitikz', action='store_true',
238 | help='Use CircuiTikZ package instead of regular TikZ.'
239 | )
240 | @argument('-qt', '--quantikz', action='store_true',
241 | help='Use QuanTikZ package instead of regular TikZ.'
242 | )
243 | @argument('-eu', '--tkz-euclide', action='store_true',
244 | help='Use tkz-euclide package instead of regular TikZ.'
245 | )
246 |
247 | @argument('--tikzoptions', action='store', type=str, default='',
248 | help='Options to pass when loading TikZ. CircuiTikZ, or QuanTikZ packages.'
249 | )
250 |
251 | @needs_local_scope
252 | @argument(
253 | 'code',
254 | nargs='*',
255 | )
256 | @line_cell_magic
257 | def tikz(self, line, cell=None, local_ns=None):
258 | '''
259 | Run TikZ code in LaTeX and plot result.
260 |
261 | In [9]: %tikz \draw (0,0) rectangle (1,1);
262 |
263 | As a cell, this will run a block of TikZ code::
264 |
265 | In [10]: %%tikz
266 | ....: \draw (0,0) rectangle (1,1);
267 |
268 | In the notebook, plots are published as the output of the cell.
269 |
270 | The size and format of output plots can be specified::
271 |
272 | In [18]: %%tikz -s 600,800 -f svg --scale 2
273 | ...: \draw (0,0) rectangle (1,1);
274 | ...: \filldraw (0.5,0.5) circle (.1);
275 |
276 | TikZ packages can be loaded with -l package1,package2[,...]::
277 |
278 | In [20]: %%tikz -l arrows,matrix
279 | ...: \matrix (m) [matrix of math nodes, row sep=3em, column sep=4em] {
280 | ...: A & B \\
281 | ...: C & D \\
282 | ...: };
283 | ...: \path[-stealth, line width=.4mm]
284 | ...: (m-1-1) edge node [left ] {$ac$} (m-2-1)
285 | ...: (m-1-1) edge node [above] {$ab$} (m-1-2)
286 | ...: (m-1-2) edge node [right] {$bd$} (m-2-2)
287 | ...: (m-2-1) edge node [below] {$cd$} (m-2-2);
288 |
289 | '''
290 |
291 | # read arguments
292 | args = parse_argstring(self.tikz, line)
293 | scale = args.scale
294 | size = args.size
295 | width, height = size.split(',')
296 | plot_format = args.format
297 | encoding = args.encoding
298 | tikz_library = args.library.split(',')
299 | pgfplots_library = args.pgfplotslibrary.split(',')
300 | latex_package = args.package.split(',')
301 | imagemagick_path = args.imagemagick
302 | p_o = args.pictureoptions
303 | # strip delimiters
304 | if p_o and p_o[0] in "'\"" and p_o[0] == p_o[-1] and p_o[0] not in p_o[1:-1]:
305 | p_o = p_o[1:-1]
306 | picture_options = p_o
307 | tikz_options = args.tikzoptions
308 |
309 | # arguments 'code' in line are prepended to the cell lines
310 | if cell is None:
311 | code = ''
312 | return_output = True
313 | else:
314 | code = cell
315 | return_output = False
316 |
317 | code = str('').join(args.code) + code
318 |
319 | # if there is no local namespace then default to an empty dict
320 | if local_ns is None:
321 | local_ns = {}
322 |
323 | # generate plots in a temporary directory
324 | plot_dir = tempfile.mkdtemp().replace('\\', '/')
325 |
326 | add_params = ""
327 |
328 | if plot_format == 'png' or plot_format == 'jpg' or plot_format == 'jpeg':
329 | add_params += "density=300,"
330 |
331 | # choose between CircuiTikZ and regular Tikz
332 | if args.circuitikz:
333 | tikz_env = 'circuitikz'
334 | tikz_package = 'circuitikz'
335 | elif args.quantikz:
336 | tikz_env = 'quantikz'
337 | tikz_package = 'tikz'
338 | if tikz_library != [""]:
339 | tikz_library.append('quantikz')
340 | else:
341 | tikz_library = ['quantikz']
342 | elif args.tkz_euclide:
343 | tikz_env = 'tikzpicture'
344 | tikz_package = 'tkz-euclide'
345 | else:
346 | tikz_env = 'tikzpicture'
347 | tikz_package = 'tikz'
348 |
349 | tex = []
350 | tex.append('''
351 | \\documentclass[convert={convertexe={%(imagemagick_path)s},%(add_params)ssize=%(width)sx%(height)s,outext=.png},border=0pt]{standalone}
352 | ''' % locals())
353 |
354 | tex.append('\\usepackage[%(tikz_options)s]{%(tikz_package)s}\n' % locals())
355 |
356 | if latex_package != [""]:
357 | for pkg in latex_package:
358 | tex.append("\\usepackage{%s}\n" % pkg)
359 |
360 | if tikz_library != [""]:
361 | for lib in tikz_library:
362 | tex.append("\\usetikzlibrary{%s}\n" % lib)
363 |
364 | if pgfplots_library != [""]:
365 | for lib in pgfplots_library:
366 | tex.append("\\usepgfplotslibrary{%s}\n" % lib)
367 |
368 | if args.preamble is not None:
369 | for preamble in args.preamble:
370 | tex.append('''%(preamble)s ''' % locals())
371 | tex.append('\n')
372 |
373 |
374 | tex.append('''\\begin{document}\n\\begin{%(tikz_env)s}[''' % locals())
375 | if scale != 1:
376 | tex.append('''scale=%(scale)s,'''% locals())
377 | for picture_option in picture_options:
378 | tex.append('''%(picture_option)s ''' % locals())
379 | tex.append(''']\n''')
380 | tex.append(code)
381 |
382 | if code[-1] != '\n':
383 | tex.append('\n')
384 | tex.append('''\\end{%(tikz_env)s}
385 | \\end{document}
386 | ''' % locals())
387 |
388 | code = str('').join(tex)
389 |
390 | if args.showlatex:
391 | print(code)
392 | return
393 |
394 | self._run_latex(code, encoding, plot_dir)
395 |
396 | key = 'TikZMagic.Tikz'
397 | display_data = []
398 |
399 | if plot_format == 'jpg' or plot_format == 'jpeg':
400 | self._convert_png_to_jpg(plot_dir, imagemagick_path)
401 | elif plot_format == 'svg':
402 | self._convert_pdf_to_svg(plot_dir)
403 |
404 | image_filename = "%s/tikz.%s" % (plot_dir, plot_format)
405 |
406 | # Publish image
407 | try:
408 | image = open(image_filename, 'rb').read()
409 | plot_mime_type = _mimetypes.get(plot_format, 'image/%s' % (plot_format))
410 | width, height = [int(s) for s in size.split(',')]
411 | if plot_format == 'svg':
412 | image = self._fix_gnuplot_svg_size(image, size=(width, height))
413 | display_data.append((key, {plot_mime_type: image}))
414 |
415 | except IOError:
416 | print("No image generated.", file=sys.stderr)
417 |
418 | # Copy output file if requested
419 | if args.save is not None:
420 | copy(image_filename, args.save)
421 |
422 | rmtree(plot_dir)
423 |
424 | for tag, disp_d in display_data:
425 | if plot_format == 'svg':
426 | # isolate data in an iframe, to prevent clashing glyph declarations in SVG
427 | self._publish_display_data(source=tag, data=disp_d, metadata={'isolated' : 'true'})
428 | else:
429 | self._publish_display_data(source=tag, data=disp_d, metadata=None)
430 |
431 |
432 | __doc__ = __doc__.format(
433 | TIKZ_DOC = ' '*8 + TikzMagics.tikz.__doc__,
434 | )
435 |
436 |
437 | def load_ipython_extension(ip):
438 | """Load the extension in IPython."""
439 | ip.register_magics(TikzMagics)
440 |
--------------------------------------------------------------------------------
/tikzmagic_test.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "Load TikZ magic:"
8 | ]
9 | },
10 | {
11 | "cell_type": "code",
12 | "execution_count": 1,
13 | "metadata": {
14 | "collapsed": true
15 | },
16 | "outputs": [],
17 | "source": [
18 | "%load_ext tikzmagic"
19 | ]
20 | },
21 | {
22 | "cell_type": "markdown",
23 | "metadata": {},
24 | "source": [
25 | "Single command figure:"
26 | ]
27 | },
28 | {
29 | "cell_type": "code",
30 | "execution_count": 2,
31 | "metadata": {},
32 | "outputs": [
33 | {
34 | "data": {
35 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPAAAADwCAQAAACUXCEZAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAA\nASwAAAEsAHOI6VIAAAAHdElNRQfhChkWOwkrqOptAAACLElEQVR42u3XMYoUQQCG0a9nWpdFJhFF\nRRAMBAUvYOgNvK2X0MxsQxNNNHBBXWemDEbxCk7xvqzT/1FF9dJIE7cxAWCdcWt16Edf+9x1i0Gm\naLTrUbtqrNXPPvWut121tLXO2Xdo9KI3PW90XKt93/rY+z7YZppuet2m4+mKztU8Xbe71+OO7dc/\nvIhne1tdduEV7TdJgAVYgAVYgAUYsAALsAALsAALMGABFmABFmABFmABBizAAizAAizAAgxYgAVY\ngAVYgAUYsAkAC7AAC7AAC7AAAxZgARZgARZgAQYswAIswAIswAIswIAFWIAFWIAFWIABC7AAC7AA\nC7AAAxZgARZgARZgARZgwAIswAIswAIswIAFWIAFWIAFWIABC7AAC7AAC7AACzBgARZgARZgARZg\nwAIswAIswAIswAIMWIAFWIAFWIAFGLAAC7AAC7AACzBgARZgARZgARZgAQYswAIswAIswAIMWIAF\nWIAFWIAFGLAAC7AAC7AAC7AAAxZgARZgARZgAQYswAIswAIswAIswIAFWIAFWIAFWIABC7AAC7AA\nC7AAAxZgARZgARZgARZgwAIswAIswAIswIAFWIAFWIAFWIABC7AAC7AAC7AACzBgARZg/QfAwwzz\nn2DIk7ZW2y6737P2bVzZE3To2NPu/AO+1d1eVq9aWuxz9o1GT3pw+lgaHbvpui99t800xLsens7w\n0mg02verg/M7CW+tXbT9C6yJ+w2hzjLHQH3AGAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNy0xMC0y\nNVQyMDo1OTowOSswMjowMIcf2WUAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTctMTAtMjVUMjA6NTk6\nMDkrMDI6MDD2QmHZAAAAFHRFWHRwZGY6VmVyc2lvbgBQREYtMS41IAVcCzkAAAAASUVORK5CYII=\n"
36 | },
37 | "metadata": {},
38 | "output_type": "display_data"
39 | }
40 | ],
41 | "source": [
42 | "%tikz \\draw (0,0) rectangle (1,1);"
43 | ]
44 | },
45 | {
46 | "cell_type": "markdown",
47 | "metadata": {},
48 | "source": [
49 | "Multi command figure:"
50 | ]
51 | },
52 | {
53 | "cell_type": "code",
54 | "execution_count": 3,
55 | "metadata": {},
56 | "outputs": [
57 | {
58 | "data": {
59 | "image/png": "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\n"
60 | },
61 | "metadata": {},
62 | "output_type": "display_data"
63 | }
64 | ],
65 | "source": [
66 | "%%tikz\n",
67 | "\\draw (0,0) rectangle (1,1);\n",
68 | "\\filldraw (0.5,0.5) circle (.1);"
69 | ]
70 | },
71 | {
72 | "cell_type": "markdown",
73 | "metadata": {},
74 | "source": [
75 | "Add a LaTeX preamble defining a custom color:"
76 | ]
77 | },
78 | {
79 | "cell_type": "code",
80 | "execution_count": 4,
81 | "metadata": {
82 | "collapsed": true
83 | },
84 | "outputs": [],
85 | "source": [
86 | "preamble = '''\n",
87 | " \\definecolor{myblue}{RGB}{66,164,233}\n",
88 | "'''"
89 | ]
90 | },
91 | {
92 | "cell_type": "code",
93 | "execution_count": 5,
94 | "metadata": {},
95 | "outputs": [
96 | {
97 | "data": {
98 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPAAAADwEAYAAABuxTXRAAAJJmlDQ1BpY2MAAEiJlZVnUJNZF8fv\n8zzphUASQodQQ5EqJYCUEFoo0quoQOidUEVsiLgCK4qINEWQRQEXXJUia0UUC4uCAhZ0gywCyrpx\nFVFBWXDfGZ33HT+8/5l7z2/+c+bec8/5cAEgiINlwct7YlK6wNvJjhkYFMwE3yiMn5bC8fR0A9/V\nuxEArcR7ut/P+a4IEZFp/OW4uLxy+SmCdACg7GXWzEpPWeGjy0wPj//CZ1dYsFzgMt9Y4eh/eexL\nzr8s+pLj681dfhUKABwp+hsO/4b/c++KVDiC9NioyGymT3JUelaYIJKZttIJHpfL9BQkR8UmRH5T\n8P+V/B2lR2anr0RucsomQWx0TDrzfw41MjA0BF9n8cbrS48hRv9/z2dFX73kegDYcwAg+7564ZUA\ndO4CQPrRV09tua+UfAA67vAzBJn/eqiVDQ0IgALoQAYoAlWgCXSBETADlsAWOAAX4AF8QRDYAPgg\nBiQCAcgCuWAHKABFYB84CKpALWgATaAVnAad4Dy4Aq6D2+AuGAaPgRBMgpdABN6BBQiCsBAZokEy\nkBKkDulARhAbsoYcIDfIGwqCQqFoKAnKgHKhnVARVApVQXVQE/QLdA66At2EBqGH0Dg0A/0NfYQR\nmATTYQVYA9aH2TAHdoV94fVwNJwK58D58F64Aq6HT8Id8BX4NjwMC+GX8BwCECLCQJQRXYSNcBEP\nJBiJQgTIVqQQKUfqkVakG+lD7iFCZBb5gMKgaCgmShdliXJG+aH4qFTUVlQxqgp1AtWB6kXdQ42j\nRKjPaDJaHq2DtkDz0IHoaHQWugBdjm5Et6OvoYfRk+h3GAyGgWFhzDDOmCBMHGYzphhzGNOGuYwZ\nxExg5rBYrAxWB2uF9cCGYdOxBdhK7EnsJewQdhL7HkfEKeGMcI64YFwSLg9XjmvGXcQN4aZwC3hx\nvDreAu+Bj8BvwpfgG/Dd+Dv4SfwCQYLAIlgRfAlxhB2ECkIr4RphjPCGSCSqEM2JXsRY4nZiBfEU\n8QZxnPiBRCVpk7ikEFIGaS/pOOky6SHpDZlM1iDbkoPJ6eS95CbyVfJT8nsxmpieGE8sQmybWLVY\nh9iQ2CsKnqJO4VA2UHIo5ZQzlDuUWXG8uIY4VzxMfKt4tfg58VHxOQmahKGEh0SiRLFEs8RNiWkq\nlqpBdaBGUPOpx6hXqRM0hKZK49L4tJ20Bto12iQdQ2fRefQ4ehH9Z/oAXSRJlTSW9JfMlqyWvCAp\nZCAMDQaPkcAoYZxmjDA+SilIcaQipfZItUoNSc1Ly0nbSkdKF0q3SQ9Lf5RhyjjIxMvsl+mUeSKL\nktWW9ZLNkj0ie012Vo4uZynHlyuUOy33SB6W15b3lt8sf0y+X35OQVHBSSFFoVLhqsKsIkPRVjFO\nsUzxouKMEk3JWilWqUzpktILpiSTw0xgVjB7mSJleWVn5QzlOuUB5QUVloqfSp5Km8oTVYIqWzVK\ntUy1R1WkpqTmrpar1qL2SB2vzlaPUT+k3qc+r8HSCNDYrdGpMc2SZvFYOawW1pgmWdNGM1WzXvO+\nFkaLrRWvdVjrrjasbaIdo12tfUcH1jHVidU5rDO4Cr3KfFXSqvpVo7okXY5upm6L7rgeQ89NL0+v\nU++Vvpp+sP5+/T79zwYmBgkGDQaPDamGLoZ5ht2GfxtpG/GNqo3uryavdly9bXXX6tfGOsaRxkeM\nH5jQTNxNdpv0mHwyNTMVmLaazpipmYWa1ZiNsulsT3Yx+4Y52tzOfJv5efMPFqYW6RanLf6y1LWM\nt2y2nF7DWhO5pmHNhJWKVZhVnZXQmmkdan3UWmijbBNmU2/zzFbVNsK20XaKo8WJ45zkvLIzsBPY\ntdvNcy24W7iX7RF7J/tC+wEHqoOfQ5XDU0cVx2jHFkeRk4nTZqfLzmhnV+f9zqM8BR6f18QTuZi5\nbHHpdSW5+rhWuT5z03YTuHW7w+4u7gfcx9aqr01a2+kBPHgeBzyeeLI8Uz1/9cJ4eXpVez33NvTO\n9e7zofls9Gn2eedr51vi+9hP0y/Dr8ef4h/i3+Q/H2AfUBogDNQP3BJ4O0g2KDaoKxgb7B/cGDy3\nzmHdwXWTISYhBSEj61nrs9ff3CC7IWHDhY2UjWEbz4SiQwNCm0MXwzzC6sPmwnnhNeEiPpd/iP8y\nwjaiLGIm0iqyNHIqyiqqNGo62ir6QPRMjE1MecxsLDe2KvZ1nHNcbdx8vEf88filhICEtkRcYmji\nuSRqUnxSb7JicnbyYIpOSkGKMNUi9WCqSOAqaEyD0tandaXTlz/F/gzNjF0Z45nWmdWZ77P8s85k\nS2QnZfdv0t60Z9NUjmPOT5tRm/mbe3KVc3fkjm/hbKnbCm0N39qzTXVb/rbJ7U7bT+wg7Ijf8Vue\n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\nRK5CYII=\n"
99 | },
100 | "metadata": {},
101 | "output_type": "display_data"
102 | }
103 | ],
104 | "source": [
105 | "%%tikz -x $preamble\n",
106 | "\\draw[fill=myblue] (0,0) rectangle (1,1);"
107 | ]
108 | },
109 | {
110 | "cell_type": "markdown",
111 | "metadata": {},
112 | "source": [
113 | "Set custom scaling factor and figure size and generate jpg output:"
114 | ]
115 | },
116 | {
117 | "cell_type": "code",
118 | "execution_count": 6,
119 | "metadata": {},
120 | "outputs": [
121 | {
122 | "data": {
123 | "image/jpeg": "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\nN19+HAhO8zjrHWMcZzMYf//Z\n"
124 | },
125 | "metadata": {},
126 | "output_type": "display_data"
127 | }
128 | ],
129 | "source": [
130 | "%%tikz --scale 2 --size 300,300 -f jpg\n",
131 | "\\draw (0,0) rectangle (1,1);\n",
132 | "\\filldraw (0.5,0.5) circle (.1);"
133 | ]
134 | },
135 | {
136 | "cell_type": "markdown",
137 | "metadata": {},
138 | "source": [
139 | "Set custom scaling factor and figure size and generate svg output:"
140 | ]
141 | },
142 | {
143 | "cell_type": "code",
144 | "execution_count": 7,
145 | "metadata": {},
146 | "outputs": [
147 | {
148 | "data": {
149 | "image/svg+xml": [
150 | ""
163 | ]
164 | },
165 | "metadata": {
166 | "isolated": "true"
167 | },
168 | "output_type": "display_data"
169 | }
170 | ],
171 | "source": [
172 | "%%tikz --scale 2 --size 300,300 -f svg\n",
173 | "\\draw (0,0) rectangle (1,1);\n",
174 | "\\filldraw (0.5,0.5) circle (.1);"
175 | ]
176 | },
177 | {
178 | "cell_type": "markdown",
179 | "metadata": {},
180 | "source": [
181 | "Set custom scaling factor and figure size and generate png output:"
182 | ]
183 | },
184 | {
185 | "cell_type": "code",
186 | "execution_count": 8,
187 | "metadata": {},
188 | "outputs": [
189 | {
190 | "data": {
191 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQEAYAAADQL+qPAAAJJmlDQ1BpY2MAAEiJlZVnUJNZF8fv\n8zzphUASQodQQ5EqJYCUEFoo0quoQOidUEVsiLgCK4qINEWQRQEXXJUia0UUC4uCAhZ0gywCyrpx\nFVFBWXDfGZ33HT+8/5l7z2/+c+bec8/5cAEgiINlwct7YlK6wNvJjhkYFMwE3yiMn5bC8fR0A9/V\nuxEArcR7ut/P+a4IEZFp/OW4uLxy+SmCdACg7GXWzEpPWeGjy0wPj//CZ1dYsFzgMt9Y4eh/eexL\nzr8s+pLj681dfhUKABwp+hsO/4b/c++KVDiC9NioyGymT3JUelaYIJKZttIJHpfL9BQkR8UmRH5T\n8P+V/B2lR2anr0RucsomQWx0TDrzfw41MjA0BF9n8cbrS48hRv9/z2dFX73kegDYcwAg+7564ZUA\ndO4CQPrRV09tua+UfAA67vAzBJn/eqiVDQ0IgALoQAYoAlWgCXSBETADlsAWOAAX4AF8QRDYAPgg\nBiQCAcgCuWAHKABFYB84CKpALWgATaAVnAad4Dy4Aq6D2+AuGAaPgRBMgpdABN6BBQiCsBAZokEy\nkBKkDulARhAbsoYcIDfIGwqCQqFoKAnKgHKhnVARVApVQXVQE/QLdA66At2EBqGH0Dg0A/0NfYQR\nmATTYQVYA9aH2TAHdoV94fVwNJwK58D58F64Aq6HT8Id8BX4NjwMC+GX8BwCECLCQJQRXYSNcBEP\nJBiJQgTIVqQQKUfqkVakG+lD7iFCZBb5gMKgaCgmShdliXJG+aH4qFTUVlQxqgp1AtWB6kXdQ42j\nRKjPaDJaHq2DtkDz0IHoaHQWugBdjm5Et6OvoYfRk+h3GAyGgWFhzDDOmCBMHGYzphhzGNOGuYwZ\nxExg5rBYrAxWB2uF9cCGYdOxBdhK7EnsJewQdhL7HkfEKeGMcI64YFwSLg9XjmvGXcQN4aZwC3hx\nvDreAu+Bj8BvwpfgG/Dd+Dv4SfwCQYLAIlgRfAlxhB2ECkIr4RphjPCGSCSqEM2JXsRY4nZiBfEU\n8QZxnPiBRCVpk7ikEFIGaS/pOOky6SHpDZlM1iDbkoPJ6eS95CbyVfJT8nsxmpieGE8sQmybWLVY\nh9iQ2CsKnqJO4VA2UHIo5ZQzlDuUWXG8uIY4VzxMfKt4tfg58VHxOQmahKGEh0SiRLFEs8RNiWkq\nlqpBdaBGUPOpx6hXqRM0hKZK49L4tJ20Bto12iQdQ2fRefQ4ehH9Z/oAXSRJlTSW9JfMlqyWvCAp\nZCAMDQaPkcAoYZxmjDA+SilIcaQipfZItUoNSc1Ly0nbSkdKF0q3SQ9Lf5RhyjjIxMvsl+mUeSKL\nktWW9ZLNkj0ie012Vo4uZynHlyuUOy33SB6W15b3lt8sf0y+X35OQVHBSSFFoVLhqsKsIkPRVjFO\nsUzxouKMEk3JWilWqUzpktILpiSTw0xgVjB7mSJleWVn5QzlOuUB5QUVloqfSp5Km8oTVYIqWzVK\ntUy1R1WkpqTmrpar1qL2SB2vzlaPUT+k3qc+r8HSCNDYrdGpMc2SZvFYOawW1pgmWdNGM1WzXvO+\nFkaLrRWvdVjrrjasbaIdo12tfUcH1jHVidU5rDO4Cr3KfFXSqvpVo7okXY5upm6L7rgeQ89NL0+v\nU++Vvpp+sP5+/T79zwYmBgkGDQaPDamGLoZ5ht2GfxtpG/GNqo3uryavdly9bXXX6tfGOsaRxkeM\nH5jQTNxNdpv0mHwyNTMVmLaazpipmYWa1ZiNsulsT3Yx+4Y52tzOfJv5efMPFqYW6RanLf6y1LWM\nt2y2nF7DWhO5pmHNhJWKVZhVnZXQmmkdan3UWmijbBNmU2/zzFbVNsK20XaKo8WJ45zkvLIzsBPY\ntdvNcy24W7iX7RF7J/tC+wEHqoOfQ5XDU0cVx2jHFkeRk4nTZqfLzmhnV+f9zqM8BR6f18QTuZi5\nbHHpdSW5+rhWuT5z03YTuHW7w+4u7gfcx9aqr01a2+kBPHgeBzyeeLI8Uz1/9cJ4eXpVez33NvTO\n9e7zofls9Gn2eedr51vi+9hP0y/Dr8ef4h/i3+Q/H2AfUBogDNQP3BJ4O0g2KDaoKxgb7B/cGDy3\nzmHdwXWTISYhBSEj61nrs9ff3CC7IWHDhY2UjWEbz4SiQwNCm0MXwzzC6sPmwnnhNeEiPpd/iP8y\nwjaiLGIm0iqyNHIqyiqqNGo62ir6QPRMjE1MecxsLDe2KvZ1nHNcbdx8vEf88filhICEtkRcYmji\nuSRqUnxSb7JicnbyYIpOSkGKMNUi9WCqSOAqaEyD0tandaXTlz/F/gzNjF0Z45nWmdWZ77P8s85k\nS2QnZfdv0t60Z9NUjmPOT5tRm/mbe3KVc3fkjm/hbKnbCm0N39qzTXVb/rbJ7U7bT+wg7Ijf8Vue\n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\nW/ne0bGjY+c+I1L7vNrntTlHxDvVqxs7WM8xUCzZ1KygMkFlREQ2Vd9UfdFIkVdfffXVbpeJZP6Y\n+WPaDTutQ+vy1zRuq0XBgfbVFTZ1fa2tMdxXnfbV2cX0hKKVD063f/gWzN5EmQAu3xD6CvlT/pSV\nIs6TzpPyh4g0k2Zyjoh0ls6UE4o9S7Cdrk5XERFnkDNIRESSJfl/XmVTrlxTKDAARRVrQAAAAACQ\ngAAAAAAgAQEAAAAAEhAAAAAAJCAAAAAAQAICAAAAgAQEAAAAAAkIAAAAAJCAAAAAACABAQAAAAAS\nEAAAAAAkIAAAAABIQAAAAACABAQAAAAACQgAAAAAkIAAAAAAIAEBAAAAQAICAAAAACQgAAAAAEhA\nAAAAAIAEBAAAAAAJCAAAAAASEAAAAAAgAQEAAABAAgIAAAAAJCAAAAAASEAAAAAAkIAAAAAAAAkI\nAAAAABIQAAAAACABAQAAAEACAgAAAAAkIAAAAABIQAAAAACQgAAAAAAACQgAAAAAEhAAAAAAIAEB\nAAAAQAICAAAAgAQEAAAAAEhAAAAAAJCAAAAAAAAJCAAAAAASEAAAAAAkIAAAAABAAgIAAACABAQA\nAAAASEAAAAAAkIAAAAAAIAEBAAAAABIQAAAAACQgAAAAAEACAgAAAIAEBAAAAAAJCAAAAACQgAAA\nAAAgAQEAAAAAEhAAAAAAJCAAAAAAQAICAAAAgAQEAAAAAAkIAAAAAJCAAAAAACABAQAAAAASEAAA\nAAAkIAAAAABIQAAAAACABAQAAAAACQgAAAAAkIAAAAAAIAEBAAAAQAICAAAAACQgAAAAAEhAAAAA\nAIAEBAAAAAAJCAAAAAASEAAAAAAgAQEAAABAAgIAAAAAJCAAAAAASEAAAAAAkIAAAAAAAAkIAAAA\nABIQAAAAACABAQAAAEACghNwxBHHF51R4hWveOU+iwDEmWb/WCItpIWcI+Jq4moirURkgAwQEZEs\nyaKcUOzZ99x1n+s+ERFXXVddERGpJJX+51WfWb15hAIDUFS5KIIzKyYmJiYmxvco9FLxiEc89T6W\nilJRKvb6WSpJJalU/mfZJJtk0xdbJFiCJXhLsL4+ZUF0dHR0dDTliJIg9AKNPbdpnPKf8InhE8vv\nKn/OkFeGvPLhUZGWn7T8pHttkeB2we1Cy4g4nzifZEtIXJzjEMi5tzgiIhIpkSIi7mfcz4iIZPTO\n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\n"
192 | },
193 | "metadata": {},
194 | "output_type": "display_data"
195 | }
196 | ],
197 | "source": [
198 | "%%tikz -s 400,400 -sc 1.2 -f png\n",
199 | "\\draw [style=help lines, step=2] (-1,-1) grid (+7,+7);\n",
200 | "\\draw [line width=0.5mm, fill=blue!40!white] (+2,+2) rectangle (+4,+4);\n",
201 | " \n",
202 | "\\draw [blue!60!white] ( 2, 2) node[anchor=north east] {$(i ,j )$};\n",
203 | "\\draw [blue!60!white] ( 4, 2) node[anchor=north west] {$(i+1,j )$};\n",
204 | "\\draw [blue!60!white] ( 4, 4) node[anchor=south west] {$(i+1,j+1)$};\n",
205 | "\\draw [blue!60!white] ( 2, 4) node[anchor=south east] {$(i ,j+1)$};\n",
206 | "\n",
207 | "\\filldraw [color=gray] (0,0) circle (.1);\n",
208 | "\\filldraw [color=gray] (0,2) circle (.1);\n",
209 | "\\filldraw [color=gray] (0,4) circle (.1);\n",
210 | "\\filldraw [color=gray] (0,6) circle (.1);\n",
211 | "\\filldraw [color=gray] (2,0) circle (.1);\n",
212 | "\\filldraw [color=black] (2,2) circle (.1);\n",
213 | "\\filldraw [color=black] (2,4) circle (.1);\n",
214 | "\\filldraw [color=gray] (2,6) circle (.1);\n",
215 | "\\filldraw [color=gray] (4,0) circle (.1);\n",
216 | "\\filldraw [color=black] (4,2) circle (.1);\n",
217 | "\\filldraw [color=black] (4,4) circle (.1);\n",
218 | "\\filldraw [color=gray] (4,6) circle (.1);\n",
219 | "\\filldraw [color=gray] (6,0) circle (.1);\n",
220 | "\\filldraw [color=gray] (6,2) circle (.1);\n",
221 | "\\filldraw [color=gray] (6,4) circle (.1);\n",
222 | "\\filldraw [color=gray] (6,6) circle (.1);\n"
223 | ]
224 | },
225 | {
226 | "cell_type": "markdown",
227 | "metadata": {},
228 | "source": [
229 | "Load figure from file:"
230 | ]
231 | },
232 | {
233 | "cell_type": "code",
234 | "execution_count": 9,
235 | "metadata": {},
236 | "outputs": [
237 | {
238 | "data": {
239 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQEAYAAADQL+qPAAAJJmlDQ1BpY2MAAEiJlZVnUJNZF8fv\n8zzphUASQodQQ5EqJYCUEFoo0quoQOidUEVsiLgCK4qINEWQRQEXXJUia0UUC4uCAhZ0gywCyrpx\nFVFBWXDfGZ33HT+8/5l7z2/+c+bec8/5cAEgiINlwct7YlK6wNvJjhkYFMwE3yiMn5bC8fR0A9/V\nuxEArcR7ut/P+a4IEZFp/OW4uLxy+SmCdACg7GXWzEpPWeGjy0wPj//CZ1dYsFzgMt9Y4eh/eexL\nzr8s+pLj681dfhUKABwp+hsO/4b/c++KVDiC9NioyGymT3JUelaYIJKZttIJHpfL9BQkR8UmRH5T\n8P+V/B2lR2anr0RucsomQWx0TDrzfw41MjA0BF9n8cbrS48hRv9/z2dFX73kegDYcwAg+7564ZUA\ndO4CQPrRV09tua+UfAA67vAzBJn/eqiVDQ0IgALoQAYoAlWgCXSBETADlsAWOAAX4AF8QRDYAPgg\nBiQCAcgCuWAHKABFYB84CKpALWgATaAVnAad4Dy4Aq6D2+AuGAaPgRBMgpdABN6BBQiCsBAZokEy\nkBKkDulARhAbsoYcIDfIGwqCQqFoKAnKgHKhnVARVApVQXVQE/QLdA66At2EBqGH0Dg0A/0NfYQR\nmATTYQVYA9aH2TAHdoV94fVwNJwK58D58F64Aq6HT8Id8BX4NjwMC+GX8BwCECLCQJQRXYSNcBEP\nJBiJQgTIVqQQKUfqkVakG+lD7iFCZBb5gMKgaCgmShdliXJG+aH4qFTUVlQxqgp1AtWB6kXdQ42j\nRKjPaDJaHq2DtkDz0IHoaHQWugBdjm5Et6OvoYfRk+h3GAyGgWFhzDDOmCBMHGYzphhzGNOGuYwZ\nxExg5rBYrAxWB2uF9cCGYdOxBdhK7EnsJewQdhL7HkfEKeGMcI64YFwSLg9XjmvGXcQN4aZwC3hx\nvDreAu+Bj8BvwpfgG/Dd+Dv4SfwCQYLAIlgRfAlxhB2ECkIr4RphjPCGSCSqEM2JXsRY4nZiBfEU\n8QZxnPiBRCVpk7ikEFIGaS/pOOky6SHpDZlM1iDbkoPJ6eS95CbyVfJT8nsxmpieGE8sQmybWLVY\nh9iQ2CsKnqJO4VA2UHIo5ZQzlDuUWXG8uIY4VzxMfKt4tfg58VHxOQmahKGEh0SiRLFEs8RNiWkq\nlqpBdaBGUPOpx6hXqRM0hKZK49L4tJ20Bto12iQdQ2fRefQ4ehH9Z/oAXSRJlTSW9JfMlqyWvCAp\nZCAMDQaPkcAoYZxmjDA+SilIcaQipfZItUoNSc1Ly0nbSkdKF0q3SQ9Lf5RhyjjIxMvsl+mUeSKL\nktWW9ZLNkj0ie012Vo4uZynHlyuUOy33SB6W15b3lt8sf0y+X35OQVHBSSFFoVLhqsKsIkPRVjFO\nsUzxouKMEk3JWilWqUzpktILpiSTw0xgVjB7mSJleWVn5QzlOuUB5QUVloqfSp5Km8oTVYIqWzVK\ntUy1R1WkpqTmrpar1qL2SB2vzlaPUT+k3qc+r8HSCNDYrdGpMc2SZvFYOawW1pgmWdNGM1WzXvO+\nFkaLrRWvdVjrrjasbaIdo12tfUcH1jHVidU5rDO4Cr3KfFXSqvpVo7okXY5upm6L7rgeQ89NL0+v\nU++Vvpp+sP5+/T79zwYmBgkGDQaPDamGLoZ5ht2GfxtpG/GNqo3uryavdly9bXXX6tfGOsaRxkeM\nH5jQTNxNdpv0mHwyNTMVmLaazpipmYWa1ZiNsulsT3Yx+4Y52tzOfJv5efMPFqYW6RanLf6y1LWM\nt2y2nF7DWhO5pmHNhJWKVZhVnZXQmmkdan3UWmijbBNmU2/zzFbVNsK20XaKo8WJ45zkvLIzsBPY\ntdvNcy24W7iX7RF7J/tC+wEHqoOfQ5XDU0cVx2jHFkeRk4nTZqfLzmhnV+f9zqM8BR6f18QTuZi5\nbHHpdSW5+rhWuT5z03YTuHW7w+4u7gfcx9aqr01a2+kBPHgeBzyeeLI8Uz1/9cJ4eXpVez33NvTO\n9e7zofls9Gn2eedr51vi+9hP0y/Dr8ef4h/i3+Q/H2AfUBogDNQP3BJ4O0g2KDaoKxgb7B/cGDy3\nzmHdwXWTISYhBSEj61nrs9ff3CC7IWHDhY2UjWEbz4SiQwNCm0MXwzzC6sPmwnnhNeEiPpd/iP8y\nwjaiLGIm0iqyNHIqyiqqNGo62ir6QPRMjE1MecxsLDe2KvZ1nHNcbdx8vEf88filhICEtkRcYmji\nuSRqUnxSb7JicnbyYIpOSkGKMNUi9WCqSOAqaEyD0tandaXTlz/F/gzNjF0Z45nWmdWZ77P8s85k\nS2QnZfdv0t60Z9NUjmPOT5tRm/mbe3KVc3fkjm/hbKnbCm0N39qzTXVb/rbJ7U7bT+wg7Ijf8Vue\nQV5p3tudATu78xXyt+dP7HLa1VIgViAoGN1tubv2B9QPsT8M7Fm9p3LP58KIwltFBkXlRYvF/OJb\nPxr+WPHj0t6ovQMlpiVH9mH2Je0b2W+z/0SpRGlO6cQB9wMdZcyywrK3BzcevFluXF57iHAo45Cw\nwq2iq1Ktcl/lYlVM1XC1XXVbjXzNnpr5wxGHh47YHmmtVagtqv14NPbogzqnuo56jfryY5hjmcee\nN/g39P3E/qmpUbaxqPHT8aTjwhPeJ3qbzJqamuWbS1rgloyWmZMhJ+/+bP9zV6tua10bo63oFDiV\ncerFL6G/jJx2Pd1zhn2m9az62Zp2WnthB9SxqUPUGdMp7ArqGjzncq6n27K7/Ve9X4+fVz5ffUHy\nQslFwsX8i0uXci7NXU65PHsl+spEz8aex1cDr97v9eoduOZ67cZ1x+tX+zh9l25Y3Th/0+LmuVvs\nW523TW939Jv0t/9m8lv7gOlAxx2zO113ze92D64ZvDhkM3Tlnv296/d5928Prx0eHPEbeTAaMip8\nEPFg+mHCw9ePMh8tPN4+hh4rfCL+pPyp/NP637V+bxOaCi+M24/3P/N59niCP/Hyj7Q/Fifzn5Of\nl08pTTVNG02fn3Gcufti3YvJlykvF2YL/pT4s+aV5quzf9n+1S8KFE2+Frxe+rv4jcyb42+N3/bM\nec49fZf4bmG+8L3M+xMf2B/6PgZ8nFrIWsQuVnzS+tT92fXz2FLi0tI/QiyQvpNzTVQAAAAgY0hS\nTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dE////////CVj33AAA\nAAlwSFlzAAABLAAAASwAc4jpUgAAAAd0SU1FB+EKGRY7E9bKExcAAELlSURBVHja7d1nYFTV1oDh\nNZNGIEAoofeOVAEVsIOoCAjIRVBBBaVYiAqfWK9dwa4BC6jYKSqC2AX0ShVFCNJ76M0QkkD6zPl+\nrDXcmxggJBPIJO/zZzGTmcNkZ/Y5e+12XIKzKiYmJiYmxveo5XCN5aM0Ln42Ojo6OjqacgL1Q+Tc\neRpDztH4ew3qB6gfvkfnpWk81F1j3C/UD1A/fI8u7KJxc1uNB1+hfpxdboqgKAkbobH0c5QFkFOp\n+RrDf6MsgJxKD7IE/W3KAsgpvJ7GoPspCxIQ/NMPGpxPKArgH9It7qYogJycqfaPZZQFABIQAAAA\nACABAQAAAEACAgAAAIAEBAAAAABIQAAAAACQgAAAAAAACQgAAAAAEhAAAAAAJCAAAAAAQAICAAAA\ngAQEAAAAAEhAAAAAAJCAAAAAACABAQAAAAASEAAAAAAkIAAAAABAAgIAAACABAQAAAAACQgAAAAA\nkIAAAAAAIAEBAAAAABIQAAAAACQgAAAAAEhAAAAAAIAEBAAAAAAJCAAAAACQgAAAAAAgAQEAAAAA\nEhAAAAAAJCAAAAAASEAAAAAAgAQEAAAAAAkIAAAAAJCAAAAAACABAQAAAEACAgAAAAAkIAAAAABI\nQAAAAACABAQAAAAACQgAAACAkiKYIjjLvOIVr4i4xCUuGWePG9ljAP+1WoMzjKIA/qGrxWMUBYCi\njibuGRYTExMTE3O8+IMlQzIko+xjEiVREtX9AqkoFaVipZGyUTbKxhm/SqiESmjC7Zat/BQdHR0d\nHU05okTUj7Uay1+s8dpbNIZM1jjzI42Jl1hiEkX9QMmpH+5OGitO19j3eo3762v8tb3GJF/CHkn9\nQMmpH0FzNFZ+RWO/DhrXfa1x+a8aj1qUAdQPEpBiWSFc77nec70noolFxGjnHecd552b4+WwHJbD\ngxtKiIRISJNvJEzCJCx4rhyVo3I0rrxESqREztwjvaW39J78hOsB1wOuB/a/47RwWjgtRKgwKD4X\nDJ9Kl2kcauenAS00NvzGXtBOw9ZzNc64V+O7TTUm7KVeoPjWj2odNY60x33jNNarrTHzcY2bLIH/\ncKPGT5tbg+t+35GoJyh+9aNOlsa7HY093tRYe5bG1JUa13+i8Z27NM60RCStPvXizGANyBniDHYG\nO4PLH3AmOBOcCa8vkxRJkZRXF+pUq47/lizJkqyKyzTxKFdOn2/tSJqkSdrjO+VL+VK+/LCH09Rp\n6jSt9xMliuKn6osaJ3XROO5Sje0naIzcbnGmPf+oxucWaHx7qx2nTu4XJiDAGlYdpaN0FJHu0l26\n17tSR8Q/6quv+rf17Lbep7Hc75bA99DYaawdbYteT16dLk2kiTQpV1fKS3kpTzmjOGllI4LTr9F4\nfzmN51gqUfYXjVWOaLy0p8bJlpA8naAxvB3XDxKQ4pWZh0qohA4tK6mSKqmDZ0i6pEt66NZ/vDHn\n2o80SZM0d0dJlmRJvrK3BEuwBN//sx30OioKAr9+uJ/QeNcIjddV0hj0eN6OFmwXnP42MnKXJTLu\nydQPBLTv5Dv5LqyJ/C6/y+9jh4sjjjjdLLHwTcE6ldBf9bpx80fiEY94huwPWhC0IGjBiXqQgUC6\nfkTEWkK+0BLvH+0HKXk7WumKGu+ca9efGidsx4EEJPBUG6jxlr0aQ2rm+a2+hCRbYtL/ecv4WYyL\nYqBBb42Dh9uX/s78Hce1zo7T2Y47l7JFQKsoFaViq6flb/lb/u6fLpmSKZn5OE6mZEpm6DmyVbbK\n1iERnjaeNp421cpSwAjcxMOnk80Iuea5gh29tCX2w2wTh7ILKPHC5dI/aNV4y0dsyEr+pmj8wbNM\nY0fLsD/91jL28QU8cGkNo63H99NzNAY9RZkjgOrHDxp7TNM4abEl6EcLdtx0S8yH22LDH2yqVtC/\nKHMEjiy7bgyK0PiyTRVxtSjYcY8OsOPO17h0t9WPI5Q5Aof3EY3RrTU+fI9/jnvApjAO+Erjhres\nfdyfMvdL2tHQzm8jbRveZraLTMjd9oo/KCS/NLBsMVQzO9GHzfbTgW1osX4FjS1sjmPQI5Q5Aqh+\nXK6xkS0OdO/3z3GDy2hsPFXjrlnUDwRgAvK6nec/80/i4RNqmzc0PaQxaYXVj/cocwRQAmK7MNSx\ntRzipwQkfIq1q4ZYvbCOY3csZe4XtplM6jPsglVIsg8VNqulce5yjbWq5vvAjjjipIbplKy+tqvJ\nj6t8P2b3BgRe/bjAFtV+f5XGCiMKdvTDn2q8OkrjH1dRLxC49aO7jQjO9C2SrVWw68fOL/X6cYUd\nb/Pt1A8EXr3wGfSGxg8usIShfcH+l7Xva+xmaxD37aJ+FA7WgJwR227S+PMb+T6Ebw1IWSkrZVfU\n00WFKy8m8UDgW79I46KG/jne4mftuOdStgh8f1qDKnZAAa70bnGL6O5XPzfQzVB2TKZsEUhyb+cs\nthkm68r453/53kYeD3ShxElAikFFybBF4y/FayKxbkee73Tue51b3OI+tFFqSk2p+cx9slyWy/KD\nEylpBL4kmwoyfqjGuN/yd5wdtjZqfF2NR6tQtgh8B+0+Hs+N0utB/I15vn5kS0DWvSstpaW0fHm+\nNJWm0jTjd8oWgW/7lxpfmKcxuUb+jrPU1lpNbKLR+yEduyQgxULqmNQxqWNWfyINpIE0GDpRIiRC\nIr6P1iHx9Nn/eIMjjjhZt+uIx5//0gvGiGUySSbJpLkLpa20lbaMfKA4JOjHLwC2+G+YTclaZGtE\nMv6ZkIuISKbd2XahvW5oLztO1Mn/HyDA6sdKWSkrvz8izaSZNBt2UEpJKSn1Zz+9TnhG5n6UtHc0\nfrdH7zM1pLcskSWyZM2TslN2yk7qB4rT9eMzu63BnXZdWGNTcb31cz9KSleNX3TTOCJU447PKeEz\ngzUgZ0jucxcrvqaxs41kdH9XY0Rjjd/Y4sClNhdx9woaVig59aNqJ21gdeoiYRImYdf0lEpSSSoF\n95O9slf2zhmrCcnSv/T1B6ZQP1By6ketGzReZPc9uKqlxgRbTD7fpuguse1FE0ZTP1AC6kcrDfVs\nF6uL7Ia2V9kdz3fa7qG/XKZxmSXqyXdRP0hASnDFaW+7kVVooHHeB1QElOj6MSFmQswE36NOAyVI\ngiQodLneUO3XLdGjokdFj6KcwPVD5BK7Aee+tRo3c/0A9eN4/bjCpviutTWC+6pTP84upmAVLbYL\nkHSjKACxqYjHYw2dSiLRx58H4OPbhpTFswBIQAAAAACABAQAAAAACQgAAAAAEhAAAAAAIAEBAAAA\nQAICAAAAACQgAAAAAEhAAAAAAJCAAAAAAAAJCAAAAAASEAAAAAAgAQEAAABAAgIAAACABAQAAAAA\nSEAAAAAAkIAAAAAAAAkIAAAAABIQAAAAACQgAAAAAEACAgAAAIAEBAAAAABIQAAAAACQgAAAAAAg\nAQEAAAAAEhAAAAAAJCAAAAAAQAICAAAAgAQEAAAAAEhAAAAAAJCAAAAAACABAQAAAAASEAAAAAAk\nIAAAAABAAgIAAACABAQAAAAACQgAAAAAkIAAAAAAIAEBAAAAABIQAAAAACQgAAAAAEhAAAAAAIAE\nBAAAAAAJCAAAAACQgAAAAAAgAQEAAABAAgIAAAAAJCAAAAAASEAAAAAAgAQEAAAAAAkIAAAAABIQ\nAAAAACABAQAAAEACAgAAAAAkIAAAAABIQAAAAACABAQAAAAACQgAAAAAEhAAAAAAIAEBAAAAQAIC\nAAAAACQgAAAAAEhAAAAAAJCAAAAAAAAJCAAAAAASEAAAAAAgAQEAAABAAgIAAACABAQAAAAASEAA\nAAAAkIAAAAAAAAkIAAAAgKIhmCJASTB8+PDhjiMuezjA4ncWkyZPnjzZ5aKc/FTOPi0tVrb4H8oZ\nCJj6e5nFvy2uof7iJN+XCIu9LE6374tDSSE3jICgBJ0go260dvGj9sQBSqgwlaqhsYMlemWq57hg\nAShy58lS3TW2y7LHt1FCyIPH7fr6mMYauznf42QYAUEJuKBGnquxzxGNP62wH7TM/fVNL9YYOk3j\n6lq+nxS0BzBHQvSqxib3avx9lMbMiUWlpzHHBaSahrAvNLa+SeN2+6R/x2V/d9pPGkPWabzmK41f\n9tDjeg7RowoUlfrtflljz1s17q9j9XhR7q+vPN3Ol+Ps/GU935nPFNHz12UaSv+fxlZJGte/qzHp\nZ39/7uz/f+hHGs+3jpn1OzXGDy2i5eX7Xtjfv1ELja6XNG58NscL79eQcFRjj24aZ36sxz08mPM9\nsn2zKAIU3wuqT694jQcPatxx88kTiuv2auz6euF+2g5LNd68yRr20wv6e2ssm6Yx8oL89kDluHBG\naex2icaRGzVOekZj/cyTl+fvz1nCVdt+75dO/vcCcObPk+2Paay9QONv35+8Xrcfo3Hwa3ae+HfB\nzluumzVWnakxKM4/56/SHaxBvFVjtHUoTaykscqYM1PqUddovKONxhrr/HO+D3nQyq20PX+Xf74P\nba/SOMg6kt7+WuM1FU5+tD1PaowbpPHaBZzvQQKCEqbaVI1t3tC4qMrJL6g+E8tbAzujcD/fz/s0\n/l+CxqOJ/jluZ0ugLu3in+NlXaAx9imNv9pxQ0tpdB07+fs9X1qDxhLAHpbYBc/jOwqcbUEhGrvv\n17jE6nfWJSd/338+1TjWGtLH6hXsc4RaA/2WSzWWf8o/v1+6jWT/YVPKfrORmnDrGHH1ODPlvO9e\njXfZyPHa3/1z3Ko25ekmG4Fw9fLPcXd01PijfR9SbEQs5JGcr8z9erosTGOLhzXWrUldAwkIip3c\ne1Y63KkxwS5k8d/mfL31tNmJu+5fdmEaqjH19bwlLKf+XBrda/XZWi/YhcN6ho7F2ssz/TNEHWY9\nfWEJ+T2C73No9H6jzx5qpjHxR41Ob3t56bxdkDbbSFTlDzXWeYNvLnC21aqvsVpTjRtuP8F5zOp7\n1bH2+pnWcbLc18Iu2PnLZYlMmR32+An/nL88jfXZg9bhk2wdTM6PvgzM39chiw312Ur9NTZobwnR\nnxq9C/xzvg+y36t0V19GUrDy8j2bYCMZh67Q6DlsP2hxquOoJBspP2hTz8679eTXa5CAAMVGq/Ea\n42af4AWvWaLynsa2doF45GeNURf6JyFyjdDY3i7UjexEPLKexoue9/Mv7ps6sb1o/T2SrSctaaDG\npuX5jgJnW5PNGlOirYOhbe6va/iLxnMtYbnLOjo6Xu2nD+IbAf4s0Eow9wZ1PVsb084Sjq6WCN1+\nqZ8b4tbQl/n+Tqj8Y8tgjS27Utfwv1iEjmLIdY4lEHbBXL4v99dVtjUJUTZSstV2a7rDphaEhvin\nntSxC3ZkpMaf22kcaEPZ9W3R+4KWebvAue3zuX2fy6Y2ZaXZ9ce2vQ2yBoJcq+8P7ub7xTV47f/z\n2ufx1wjMf/mOl/3zJ9oISHUbEZEP+M4CZ0s1r8Z4m4IlOabYBFuPegsb8VixWOOtNmJS8YY8Nsw/\ntuPZ2jEZk73+B99t5zXrOAmxKUBBr9kaEZvSI/b/e37Q6PxdtBY3h9uUqNbW8z/fdlusYiPqly+x\n65R1cDmLT15uruFWDg3siTJ23rYpa8GWQLptl8eQZ/T93gn2etse17EpdR7fyPMrZ6bcEuzvG3Wv\nfc4N9vmbUfdIQIDiloBYj1N5WzydeYILZKolKIttxGBguMZt72jc76c5yIk2peE3uwCVt20t69qF\nfUq9vF3Ag23XrH95NDa2xMGxBMazxxoKNsIQbD1u9ez/D7rIyscSgO1vaZxhi+EzO5yhP5DtqlK+\nEt9V4Gwrb1NrvCm5/9z53M5fM+y81VNjufc1/pluLww5+f9T3zo8+tsIc+jr2Y8fYg33C9va+aqT\nxmO2dsM1yz7ntRq/vkPj6guLVnl6y2lcNtc+v5VPe1t8vt7Ox86AvB2v4yqNXS+zJ0bb+23kvoIl\nJm1tBMSxjijHNxI+SUOKrT2Zateb/WeoPDz2Ocvb53ZbIuml6pVwTMFCMeRYj1PKK/Y1v9b3k+w9\nPscmaky37WEvs8ff2/sd2w9f3j7dofLsc2qP2IhD8tOWOJxvL7MEZGt6Hk/ktgvJr7Z95DTrOZtu\nQ+7T7EKz0Br2S2xEZ9ozOV5nQ/a//KYx6wzPxvU2sXL/gO8qcLal2rbarjtzP096rOf8oPWoX2kN\n55U2UnHQEhj3JSc/T+5fo/ELa5BOtw6g6bs1fm7HWWsdJLOsp3z69Oyvm9FaY1xcUSnB7Of7dNvm\n94Cd18tZw7+xjVyv6JV7OZ/Ieutomv6mRXt+miVgX6dq/Ms2H5n+Ufbz/XT7u82y7egTss5w8fi2\nc7a/r1OZOgcRRkBQPBOQehoTrecocq7vJ7lfINtYV1DEEY2xtvju4i0aF03RGP5/+v4mts3hepvi\nlHrFiS4kJ9je0BKdHTbScrjZqS5s9ntZz+G+n0/w/9gc7n3XaywVaRfqT3J8vtE53n7eaRawr6fT\neiQdWzsje/P2dt8+/Fsvsyfm850FzpbDT2hsaLsVyY+5n7cqXqexk41gvmCLkTtYR8LWzhr/XpD7\n+SvV1gJsy3nesl32SlmD+rCdX7bZdt3xdXKcv7oV8Be23fvERpQdXwfVrNx/79oxdn2wDqkND9r7\nZuYtgahzn8YwSyQ2ts9rQqOO2Ej1kZzlZmsLPbbL1+F7NW65R9/v64g7fsPd/xSw3JLt9y57em+L\naGV/x9DsnxckIECxtcnWRtQbdvLXVbbdorZaD11NO9Nn2JQmj+1adZ7tovWO9QDebT2GP+T1A9nc\n33Nt5GOlXaidQ37+xetnv2CcvhxzkPtZA8UunOfZlK8ydv+P9lYeSTv1fVtsdxlPtexHDbM5y5Vt\nrveWivaDN/muAmfLZtuO9kobWQ23EYbUv7K/rqzthpRsHTaZ1rFTyZrKK3oX8IP41ng0LehvlP38\nFWRTSxvbiEQHS6DK2K5b59uaQcfOc9va2mObMjbSRpQvs/PXdVWyt+tP9P/6tLEOrf2RGg/6+w/o\nO4/aSEP+5zZl//zV7Pzd2P7uUTaC09hGotrabmVb9un7jnbMPSGrP9nK1bc719PUOYgwBQvFRO4n\nvuW2KK+WLWYsFZv7u/9jQ+Lf2420PLary585TpQrbBHl47Y2xH3r6X3KSjbSUdd64GIPnPzz55v1\n0Pl6FgvsIQ3lbY74UVtLMtp65vbYXO5IW6Tqvjf3w9S05zNspGZLEN9c4GzbZjfmS7NtY2t/lfvr\ndtuUzjftTtfhdifvJbaZROa1BTyPVbcOj5f9+/u5mtv5aaHGvTYEM9oWYyfZfYrK28iLa0f299tS\nF5luI7wRN57e/9/+UY1/2fkza72fz/eXWfSdd/10/6pwuz5F2PXO+uHkWyu/Snb9C/kh9wQm5BPL\ni+yO6ctaF9L1DgGKERAUY5tshGK/LZpsbbuH5Lz/U7IlBN/7bkhlPTySY65sok2+XWXbCbptyoEs\nyX7iLWV3Wr/aRiKW2dSFFtZwT7X7amyoXji/93qbIha8yD8JnWM9iLa2/3iUiTne1ij3C5FPR+tp\nXOy7f0AbvqPA2ZZiU5oWPq6xs43UbsrxOo+dtxZag176WpztnwZllnV0zLVteFMm+ef8lWUdR799\nfIq3fZj7+WurXQ/W21qLwzbFVe6y19nIw0VWjpm2+Hv7ixqb2FqXzw4Uzt/viP3/v9j1yHnFP+W2\n3Upge4MTvPwXX8z9fN/cNnVJtKnM6z6groEEpChxxJH/VtwnxCUucfluYIT8nkD1hJhlQ9+zrEHe\nzaY6rbPF3Ed75bhwfpvzeNlPrKVna6xpPTuLo3L/FFF2RN8dbyvY1K4Gtp1ijPUEJR71V09Q9uNs\nnnq2yj/3C1FDa7BUssWRH9yX++f+p6AxQWOCxohIDakhNSTWNdA10DXQucn5zvnO+Y7vO0r4Bfxw\n8OHgw//N8C2m5/V8kb2+/mQdJbfayGbDedYAvyLH+9b7ejr8e97KsqlDC/9VtEq5no1cpNn5KyHH\nlNEg6+i50TqUkuxGjbvtPPfNaxr/sDUbssi/5ZZoic1iW5PnW5t3tpS2691FthvjbPseZVSjxuJ/\nMQh2hsXExMTExPgeuV+SDMmQjKqtpZE0kkY9PpJESZTECoslXuIl/rPVEizBErzXEpLMA9HR0dHR\n0ZRj/hrCHVZoDKthJ2zfXOPEvC0iD7VtIcPsAp3cNvcLeZD9vZrbBbqijRTEWdzpG4qeXdyGonOU\nl80h72Y9mWush3FHHhOvIFu0Wj2jo3SUjnJtdNA7Qe8EvRN8weJhi4ctHvblT/rzfTaC5enCNx8l\nR4jdwLTm4M6VOlfqXKlPfOK1idcmXnvwvrXvr31/7fu/2BqGA7brnvfGvNXbWtbgPtcSmp9sjUh6\nz5IydSZ7eUTYboO+kY30Z3J/V23r6GpgI+3xdp3YYCM7WQ8X7/O9zwW27b1rlMbfOueeOBV2+yrU\ntquve6XG62wNygYbyVtqm8scssTIuYj2FQlI8Uw4qkt1qS4ipaSUlKq8WuOIo7Je1sv6m6ZJkARJ\nUL0VOiISFCte8Yp3jzVYv7ZdJ16zC8n22r7jU2FO5wTpsikDpaz8Uu3EJD2Zk1oY5e22NTQhdgFO\nj7QfnCIBqWGrNO+2Xcz+laUDg7WXSk2pKTUl0tnj7HH27LKpdTOtx3eCLWLd24S/BIqv+jZVdIwl\nCD0+d1V1VXVVrX6/E+PEODGeozJABsiAOOtgmbZS46Q51uD6NW/1t5RN5cm03bE8aZwncZIExFoi\npSwBS69nDfsRhfW98bWvjq09tvbYWilXZliZYWWGtRwra2SNrPm/9dqh23WJziypYovoM1Zr3PaU\nNJSG0nBKpnb0TnlADskhOZQ8JnpQ9KDoQfx9SUCKSwISKZESGTVRkiRJkt7qrl/4vjfpCIh76SkO\nY1OJltri4qGWiGz4iwQExUdtm0wyxdbudLULmGvcyd/n/KFxXqzG22wR7a5vKVMUH+dYx8m7tvi7\nk2+q5SkWRXutKTXbblA30naxO3QvZYpi0b5yxBHnghESIiESMmW0Pj6niXjEI56THCBEQiQks79k\nSZZkfZis77vvbf3h0fq0rwoXu2AVdsUIkzAJc9kIyMjl4ha3uPsuzmPi4WOLAztZD+8jtng3fED2\nIUcgEIXYWpkxdl+UK6bkLfHwcdl9TLpdpvEem2sdXIayReALt12hHrZd4zpJ3hKP45d5W7PWx0YM\nR9iuVTKDskVAt69ERCTyoI5wPLZRE4k8JB4+mZIpmSGfa+Ix2KZG3/R27v8P/I1F6IUtXdIlvWac\nbJANsuHGfvpFd79fsIP2sN0l2trQ+lLKGQGsse0u0/8Je2Jsfg+kYaANtX9rc+TjbI6vex1ljcDh\nfczO8/b97TG6YMfzbRs+0EYa37fdnPZQ1AjAxMPnwu0auxRwcX+Y7TN8872Wn9sulke2U/KFw6V/\n0AaJ+jBouXBG8iOP7ffa0W5c9K7dATQ8/w0hnQy/Q2pLban9SFU5IAfkwPQBmugE/YsyRyCIXBi5\nMHKhZ+Njqx9b/djqa6rG1Y+rH1f/1Y/le/levg/+vWBHd87VeNA2A0j3jYQMpuQRQGwNRrhNKYzy\nrf3bn+8jzpAZMiPl7hZzW8xtMXfYX/ePu3/c/eN+ey5pWtK0pGlBNLQQSAn6bxrvsqUE9030z3Hj\n7caTQ2yzmnURlsDfSZn7hS0hyBxpIyDVxmsMsRvyOKspI78kIH00VrG5t0H+ujFcXSkn5aRc5UhN\nQGqUtwryBWWOQJB+a/qt6bd625SNLhtdNjrqKmkrbaWt6yZNQApw4KvkKnnAtTJodtDs0KZVxd3D\n3cPdWEQSJOH43V2Aoq6KVJHGcoW3tLe0Z76I52fPz5mvyX5JlETZl//Duka5RrlGBXUo7ynvKe+p\nMjJzaebSzKU1npQRMkJGuKdS8Agcju2uGDnBv8cNthsrVrNNaxIesfZVP8rcH1w25TrlRxahF5Ls\nQ4WNbI76PLtRW90CnuiPrtc5jr3b6BqTnzO94d5wb7jIvUPuHXLvEMofgaTdrRp/tB6nys/m90hl\n3izzZqX+IgNCB4S+Xkmk8q+Vf62/VcTZ4ezwNqCkESCX6IddD7vvF9n11a6vYi8Wmblq5qr7rxXJ\nWJKxJP+35/Px7aLYdbM9DqfEEXjtKp+B9+rU9o9v0hkiwR0K9r+ssg7dK23E4+B4FqMXDtaAnBFx\nr2n8wRY3jSjg8Ra31W17V9juDTKVxAOBa8MtGuffoXFAvhOQ5puab7pijUj7sPZhfReJhKWEpZSu\nKOJ84nxCOSNgEpD5rvkiIjXW1ljbvKnIygtWXvBluMiGJRuWzC/w0b+rqHFXK0oagcSXCBxPRNzi\nFveiTO2IjZ0kaZImaR065LjBcx45t2ucfa0lHnfbD8ZT8oV0nqMIzmTG3tjuUPrpVo3njcnDX8gl\nLrFt5naE6pODh2pcOInMHMVH23c1TrX73jS/Pq/vrFahWoVmdURuf+b2Z6ZuF6n7Vt23znWLeO/w\nalITTGcLAkimZIqIuL92fy0isrHWxloLqohMuWrKVTeHiBy+/vD1O/ae7kGX2o1Bb7Ltqbc/TEEj\noNtVC2WhLBSR4TJchvf9TDf7eWettpcqPXHKA4VIiIT42llzx0iqpErqzedqB+/+wbSvChfb8J5R\nm21O4RDLqKeO1Jj4hmXgvt2x7E6dKeFSS2pJrR93SpRESdSgSVrhFrIxHIqhWNvVbbDdwXm2rUU7\nutBeMEfaSTu5TiTsyrArIxqItJ3QdkLfKiJD7xh6x8efiNS+o/Yd574o4n3U+yiJBwKWNovEO8o7\nSkSkcbfG3S5eITIkfkj8h+eJNP226bddLhEJmRMyJ3yciERIhFQ+/u4Bdl2xKSSf2pD7bVtJPFAc\nHE8MLpaL5WIRvaHznF6aeNxqHVi/hWhMuyP7u52a+rrDtpb2rTTpKl2l6/D1LsfluJz9bFZyhjAC\ncqYz9mxK2w3U2vTXeE1NjeWSNX61S+/8vGKHs8vZ5ew6Ui5oRtCMoBkidy+9e+nd7L6LYq3MAY39\n/7RatKnU6FKjywWXvWfgCwNfmPC+SLv97fZf110k/JbwWyIqiXiHe4eLiC461zMc5zgELq94RUSk\njtQREXE/6X5SROSY+5j7yA6RZbWW1fq0jshnns88970o4pnlmZX5wN82tWpYd40/XG4NsWsoUJSc\n9lUV7YSSdu2tfWUJyfbnNC54SeNa2z00bS8jHiQgJbjitLMeqoq2WH2eQ4UA2tnUrB+TIw5EHIjq\nW/ne0bGjY+c+I1L7vNrntTlHxDvVqxs7WM8xUCzZ1KygMkFlREQ2Vd9UfdFIkVdfffXVbpeJZP6Y\n+WPaDTutQ+vy1zRuq0XBgfbVFTZ1fa2tMdxXnfbV2cX0hKKVD063f/gWzN5EmQAu3xD6CvlT/pSV\nIs6TzpPyh4g0k2Zyjoh0ls6UE4o9S7Cdrk5XERFnkDNIRESSJfl/XmVTrlxTKDAARRVrQAAAAACQ\ngAAAAAAgAQEAAAAAEhAAAAAAJCAAAAAAQAICAAAAgAQEAAAAAAkIAAAAAJCAAAAAACABAQAAAAAS\nEAAAAAAkIAAAAABIQAAAAACABAQAAAAACQgAAAAAkIAAAAAAIAEBAAAAQAICAAAAACQgAAAAAEhA\nAAAAAIAEBAAAAAAJCAAAAAASEAAAAAAgAQEAAABAAgIAAAAAJCAAAAAASEAAAAAAkIAAAAAAAAkI\nAAAAABIQAAAAACABAQAAAEACAgAAAAAkIAAAAABIQAAAAACQgAAAAAAACQgAAAAAEhAAAAAAIAEB\nAAAAQAICAAAAgAQEAAAAAEhAAAAAAJCAAAAAAAAJCAAAAAASEAAAAAAkIAAAAABAAgIAAACABAQA\nAAAASEAAAAAAkIAAAAAAIAEBAAAAABIQAAAAACQgAAAAAEACAgAAAIAEBAAAAAAJCAAAAACQgAAA\nAAAgAQEAAAAAEhAAAAAAJCAAAAAAQAICAAAAgAQEAAAAAAkIAAAAAJCAAAAAACABAQAAAAASEAAA\nAAAkIAAAAABIQAAAAACABAQAAAAACQgAAAAAkIAAAAAAIAEBAAAAQAICAAAAACQgAAAAAEhAAAAA\nAIAEBAAAAAAJCAAAAAASEAAAAAAgAQEAAABAAgIAAAAAJCAAAAAASEAAAAAAkIAAAAAAAAkIAAAA\nABIQAAAAACABAQAAAEACghNwxBHHF51R4hWveOU+iwDEmWb/WCItpIWcI+Jq4moirURkgAwQEZEs\nyaKcUOzZ99x1n+s+ERFXXVddERGpJJX+51WfWb15hAIDUFS5KIIzKyYmJiYmxvco9FLxiEc89T6W\nilJRKvb6WSpJJalU/mfZJJtk0xdbJFiCJXhLsL4+ZUF0dHR0dDTliJIg9AKNPbdpnPKf8InhE8vv\nKn/OkFeGvPLhUZGWn7T8pHttkeB2we1Cy4g4nzifZEtIXJzjEMi5tzgiIhIpkSIi7mfcz4iIZPTO\n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\n"
240 | },
241 | "metadata": {},
242 | "output_type": "display_data"
243 | }
244 | ],
245 | "source": [
246 | "%%tikz -s 400,400 -sc 1.2 -f png\n",
247 | "\\input{grid.tikz}"
248 | ]
249 | },
250 | {
251 | "cell_type": "markdown",
252 | "metadata": {},
253 | "source": [
254 | "Load TikZ libraries:"
255 | ]
256 | },
257 | {
258 | "cell_type": "code",
259 | "execution_count": 10,
260 | "metadata": {},
261 | "outputs": [
262 | {
263 | "data": {
264 | "image/svg+xml": [
265 | ""
336 | ]
337 | },
338 | "metadata": {
339 | "isolated": "true"
340 | },
341 | "output_type": "display_data"
342 | }
343 | ],
344 | "source": [
345 | "%%tikz -l arrows,matrix -f svg\n",
346 | "\\matrix (m) [matrix of math nodes, row sep=3em, column sep=4em] {\n",
347 | "A & B \\\\\n",
348 | "C & D \\\\\n",
349 | "};\n",
350 | "\\path[-stealth, line width=.4mm]\n",
351 | "(m-1-1) edge node [left ] {$ac$} (m-2-1)\n",
352 | "(m-1-1) edge node [above] {$ab$} (m-1-2)\n",
353 | "(m-1-2) edge node [right] {$bd$} (m-2-2)\n",
354 | "(m-2-1) edge node [below] {$cd$} (m-2-2);\n"
355 | ]
356 | },
357 | {
358 | "cell_type": "markdown",
359 | "metadata": {},
360 | "source": [
361 | "Load LaTeX packages:"
362 | ]
363 | },
364 | {
365 | "cell_type": "code",
366 | "execution_count": 11,
367 | "metadata": {},
368 | "outputs": [
369 | {
370 | "data": {
371 | "image/svg+xml": [
372 | ""
559 | ]
560 | },
561 | "metadata": {
562 | "isolated": "true"
563 | },
564 | "output_type": "display_data"
565 | }
566 | ],
567 | "source": [
568 | "%%tikz -p pgfplots -f svg\n",
569 | "\\begin{axis}[\n",
570 | " xlabel=$x$,\n",
571 | " ylabel={$f(x) = x^2 - x +4$}\n",
572 | "]\n",
573 | "\\addplot {x^2 - x +4};\n",
574 | "\\end{axis}"
575 | ]
576 | },
577 | {
578 | "cell_type": "markdown",
579 | "metadata": {},
580 | "source": [
581 | "Choose utf-8 encoding:"
582 | ]
583 | },
584 | {
585 | "cell_type": "code",
586 | "execution_count": 12,
587 | "metadata": {},
588 | "outputs": [
589 | {
590 | "data": {
591 | "image/png": "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\nXAs5AAAAAElFTkSuQmCC\n"
592 | },
593 | "metadata": {},
594 | "output_type": "display_data"
595 | }
596 | ],
597 | "source": [
598 | "%%tikz -p kotex -e utf-8\n",
599 | "\\node {unicode}\n",
600 | "child {node {한글}}\n",
601 | "child {node {Korean}\n",
602 | "};"
603 | ]
604 | }
605 | ],
606 | "metadata": {
607 | "kernelspec": {
608 | "display_name": "Python 3",
609 | "language": "python",
610 | "name": "python3"
611 | },
612 | "language_info": {
613 | "codemirror_mode": {
614 | "name": "ipython",
615 | "version": 3
616 | },
617 | "file_extension": ".py",
618 | "mimetype": "text/x-python",
619 | "name": "python",
620 | "nbconvert_exporter": "python",
621 | "pygments_lexer": "ipython3",
622 | "version": "3.6.3"
623 | }
624 | },
625 | "nbformat": 4,
626 | "nbformat_minor": 1
627 | }
628 |
--------------------------------------------------------------------------------