├── .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 | "\n", 151 | "\n", 152 | "\n", 153 | " \n", 154 | "\n", 155 | "\n", 156 | "\n", 157 | "\n", 158 | "\n", 159 | "\n", 160 | "\n", 161 | "\n", 162 | "" 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\n6J3eQeTPSn9W+qKFyId9P+w7tLqIp76nfsbzB2brm2/Yq3FBBY2eGylQFP92lU/Z8zU2raWx9ysa\nN7+qcfERjTvmWHafQPuKBKQEVIzaczWObqrx+ufFLW5xRw3ThMN9vWRIhmQkvKQ/n1df4/i7Na76\n1XckKgyKn8bTNT70usZelTVWzpCH5CFZKj9ENI5oHHWZSNvv2n7X+y2Rq+Ovjn/wGZEqtavUbrhV\nxLnEuUTbXOKhPBGwLPGQ/tJf/i2ya9KuSbFLRH5444c3xv8hsu6rdV/NjRJJ6ZLS5XBFEdkhO2S5\ns1DfvG+PxmntNb7+pcZdD1KwKH7tK1eExo6WaDxk7aSL9Fog5cpZonG9xv1WHz6yBH1iI40H69G+\nOjOCKYJCNkJGyAgRSZZkSa45RL6Wr+XrKR5JkiRJumKUuMQlLpl9fMpVhmRIhmy0BpcdZKD25Lpa\n/y51pa7UvWWYLJbFsnj5OxQwio+m/9H4oU0+vGDJP14yTsZJJ5GjclQOicii4EXB794lsve8veet\nbSwydMfQHR+tFakyqMqgRi1EnPec9+xMx7kOgSNTMkVE3JPdk0VEtq/YvmL5BpEpb095e/AWkf2J\n+xM3JItIQ2koyfaebccbYhdrrGGPx1hDrLUmMzLkDY177qKgEfiJh8/lbTROsY7auum5vzvIYt1/\naXzEsevPbo0ju2tM+J6SLlyMgBR2BVkja2SNu4ZcIBfIBc/GaoLx4DDJlEzJlNl5PqBb3OIWkWpS\nTarN7qcJzM2hclSOytHk6WTqCFxh+zW+aXFom/we6aJJF026fYnIjc1ubDZxr0jIsZBjYf1EZIbM\noJwRMF6VV0VEUhNTE482FJmSNiXt5hEisc1jm896IN9HfVrD+Eut4TVWo3cZBY7ATUCq9tT4WW2N\nl7yZv6Nm2YjhI800vmAzT2Q17avCQa9gYWspLaVlnUw5JsfkWL8t9uzs0z6Ob4Rkj+yRPV2e1xGR\ntkf0hwunU9AIXE0SNF5ztKBHWrVt1bY5n4u0frP1mz3vEqncunLrBi+KOJucTd4qlDQCg+sP1x9B\nT4ns6rOrz4oXRdbvX79/XkyBD/tvDf104bq89a3Gna0ocQRE4jEuZlzMOLEZIb52Uecq+rhjWAGb\nwzU19r9N47u2VuQwmzUV1nlOM8nOq/RhSKI9H0vR+IPnHI3tXtT4fEONpd7I/1/MKl4lqSSVXg6V\nBEmQhNkf6WL2oEOUOQJBuDfcG+71nD9h1oRZE2Z1ffavTn91+qvTv+fJeBkv44NS8n3gmTLTVVsk\nPCQ8pHyaSFCroFYhvUVkvayXeZQ7AkR7aS/9RbJez3o9/V2RtGVpy5IGich8mS8TCnDBr+mq6aqZ\n9mjnpzo/1fmpB/59S+9bet/Se0Vo2tS0qWlTgyZS8AgIwRIswd4WEiVREnWrS/bLftk/9PLju4oW\nSIK1f/+vusbNT2p0N6fg/UJ3rpRUj42AZHbT6Iy3F8RRRn5JQGxWbtbXdvoveE+Tr4IlSqIkZo3V\nHoCMP/SHQRQ5AqPnI8QV4grxOJ44T5wnLsstraSVtHL2FvjA/aSfs8s5nCqpckSSZouIyLuZx+yn\nl1PyCBgv+kbKw3Qu+4SyvkWB9+T7mHtkj+yRBM8wzzDPsKzfXVe6rnRdmWHtgCCu+wiQppV4xONN\nk3iJl3jPGmsX+ev8/rO12+ZrzLCpwe5wCt4v1lvekcUakEKSfY5iPZujONf2ZW/UsWAJSNJCHQnp\nuU+fXDiAOYoIXK2t4+MnS9irTirY8Q6V1zjSMvLtdo8E9w7KGgHUynpZY1vbRjQmRGPZngU77qbD\nGrvZbow7B1LWCIh21QsxL8S8ICLhEi7hYlOw+vbX9tD0zfqq0JUF+1+W99d4VVeNh++gfVU4WANS\n2A7IATmw82qpI3WkzqxykiVZknX/g5rBy/g8Hyfb1Kv5LSRFUiQl9kZJlVRJpZgRyDbafu3f3Krx\ntgIe75vRGr9tpzH9WsoYAciaPFs2aez9jMY++U1AHtIw07bl3dWYIkZAVYix0WOjx/5PB69LXOJa\nYiPcy2zbt4vzm/DbrlifhfsSD0q8cLG4prAqii9jfkgekoe8d0tP6Sk9X8/QzH1eQxsyvPn0jrrh\nXakgFaTCc5/IRtkoG5N3k5kj8KV30fiirf3447r8Hed3SzSeX07igeLjaBONz1qH4fqfTvMAb2mY\nF6fxje80Ou0pWwS+A/Z9fipWY9y+03u/00DjbNumZMq2f7TjUCgYASlsU2SKTPE92HOuxts7auY+\n5it93O9tjVUsIXRZYpJoi9jnLtaEZfz1skW2yJbYZ3REheItKYYPHz7c+e/iOrtBX7A1ILK+sOdf\nmzx58mSXq6h8TpdNpQqqZ5/zqpN/vo12IRhsU0PGjtTYs5PcLXfL3ZXmSIRESIQc0MXqf1vD6ju7\nsdrztkHpxkv5xqD4WW7XgxttismDBzVeUUM7uip0lViJlVjvQ/K9fC/fH7TryOcdNL5sm8zseShv\n9Tf4Go2eK6yhNvpsn1+K6fl8kIaQ3zVmvmvPX0J5586XGGSf6j7fEogb/9T48LMaL9J7QUm5O+37\nfETj3iiNH9nUrTdsF614bl57hvDVPsOyV5jQNRob9NLYyxpe5atpnPmBxk3TNB5bTGZeoi9UppGd\nYCtN1bisr/3goqKVgIR9qPFiS5RW21SrAyl5+5yl7P2NOp/jnOOc4/ReEdw2uG1w2+CVf636a9Vf\nq2ZaQ2yLvS6tGt8YlBxlbPOYJg1bSStpJX3uTq6WXC252qGjcfvj9sftnz9Ef77VFudmvJm3elsx\nTWPbThqXxFv92hnoDeIc51O7YZ38YHHLmfr9cnyO3hrOb6oxxdoBa46vZSAROZ12lU+5oRqbWTur\nj10fNluCsWCmxh2jNGa9Q7uKBKQEV5x2dkqqaNv1zttGhSAB+e+FqpaNkPWdrHFqpsb4O3wXqOyv\nr20bz15j20BP66cxaXhBL2jZ/5/GdsG8/D6Nn/SxC6nNWW82R+Ml92r82BKm1JdP9TneaPRGozca\niUhNqSk1O13mGuka6RoZ8rQzzZnmTFtw8V1z7ppz1xy+JyiZ3pz95uw3Z/seXWLbhO6zBtbmTXf2\nubPPnX3yWo9LWY/xrc9rXGTHWXMs93c3udo6GGxj4KlPWL3+tGh1hIidn8JsM4rqNsJwqW0H+p3d\nF+VQPX9/7uyfo+wrGm961PKeRRrjbK1a+bUab1xgn+tzayD/TALij/bVFZaQrLXv+b7qtK/OLtaA\nFK188Dn7x9OUBYnH/0xlutISDxtJWDPHl3ic/CiV7EJb82F7YlzhfNoou3NsNWsAOY9k//kGW4uR\nbglJlxtO0FD4B0+0J9oTLeLp5+nn6Sftsg5lHco65FrpucJzhW9iCFBSZe3M2pm183hcZfFR3/N5\nbKCbyy2V8Y7PmXjk3gCuYrs5Vm9p9f7c/J7nNLo3aGy9RWPYI6c6P+RNGdtGtYf9fjfZeXSsra2J\nvODM/LVKW8JTz6bGuZOz/zyxhcYVdkfvvgs1BkX5pxwAEhAAp6We9TTWswvS8qyTNwx8Ym2V0OO2\nfWfSnsL5fEtesLzZ7iSbGp775/rtU0tA7AJcml1GgLOulK0tuexWjYtX5e38sqiRxmc/0Jj2fwXr\nqQ+1jpLr7LwQ4acuhhT7fHO2aPxpuCVaGfaCvwurZLOXxwHroHmorcZtI3J/119PaKxlHUiNY/mO\nojhiETpQhOTe09XehuYPWk9d8qrcX++yG/w0thv6VbMRj5W2CDU5I78NhBxTNWwtUrPzNJax+22s\ntG0MT3Qj8x02FayU3d+g/hiNa9/iLw+ctQ4Oa5iXHatxuzXYZVL2eh9kI5lNbVuVijdp/NPWUKTe\nUMAPUt/OY3bfE2non4a/M19/D1+/jddGbKRq4Z6/3Tblp6ElajWsfDbaphn7N+R+lFTbxW/3txrP\nm6Fxw/HjMyULxQEjIECR13yWNeA/PMXr7MJdw3o0e1ii0PNr/1xQQ2yKRWd7xmu7h/S2XVyumXfy\nhkCafa7DFhtzBxvgrGt0QGOiNYxT+uf+ujY2ZaiyrWUYaNsBX1bdTx8k3eL6QCvB3DuO2vxHY1Rn\nS/TsFaNs84D/bsOfe0IRZ4vQm4ziO4riiBEQoOiynsUKra3hHn+CfoR7Nda2qVprNmoccZXGZb6h\n/o8L9nFq2RqOdLsgrrGEqJJNvQq3ERH5+eTHORapseon/ImBsy3K6uORC3P/ecgKq6+2eHq1jVjW\ntvNTmp2fpPopOjBsBKCCJS4u33bAEzWUso6WCNteuIqthQh6Wo/jsiEMx7bnTvzVzkcDi9aIQIQt\na65q58e5tsi9pS0qr+D7vU9xv6MkG3GqbGtx3PbYy7YbIAEBUJhctm1ghE3B8qbl/jrHGgK/WoLR\nyh5HWkNhiZ/ueLzP5k7vfsIujDaSUfsja5jkcRGqb4pFGaZeAWe/wWy748lnuf/cY1M4f7GOhots\nW1+nssaV9fL2/9SxkdIb7E7ToU/ZcazBHtxDYwebOuq1uZwpX9oBbNtUp4/G2baYPLaIlWfqkxoX\nWIeQx0aY2lsCssLKUz4/+XEcWzMXYbuMuXybe5CAoFhgChZQZDm2CDHZRgpCjt8HJsccZ5tLnGYj\nEFfZYvMV3TUm2naPpcJOdzcV3/+jMc2OmzlMYzO7f03Gqxrj5ubtqF5LiJJH8DcGzrYk25Y0aGju\n5xev184v1qDuPlvjImtop79vCcXVJz+/bLcbxb1i284+b5tkPG/3wXjlLo2LrUNjgiUcz9sRX7AR\ngxftPkhrlhSVEsx+nvRUsMTJbuRY2aZg1bHtjVcuyL2cc3LZGpgkG3l2pvBdRXHCCAhQdNnUhHhL\nRCpP8/0g9wt9ZA2N59udwF+yGxWe77thn02R2F9d39/HeuJ22dD+793ydmH0Odfmgm89ovGIN+cr\ncv+c5a2hs64Vf2LgbDtoHQstm5y83la/WGMLm5L1iY3IXmg30Iu1KVJ/ywkSGesgScl5frDnvTYS\nkmmJzTFbU5ZS5wTno9h8/sK+jtfD1rDfZY9r5P57dw7VWOUXjV/blDNP2bydJxu+Yf+w3b22tsnb\nedI39faQ3TfJO5bvKooTRkCAIm/1JRrr1TzFC60ncoeNTJTrYv0MduHab4s8y1gP3ZDtGofZbish\nk0904By7u9iISls7/oqVefs9ymyzROkljRvP428LnG0bbe1HWRtJLbv/BC+088c2W6RetZ4lDF9Y\nR8mwAn6QUhZbF/Q3yn5/keAkffbSdzR2t8/v2CLwXjalqaOtUXEfzn60bl01PmBnwBqL8nae9Glr\na0B23G55z1d5+y0a2FqRdQ/wHUVxxAgIUITkfkfzFXaB72I9YRVsTnHCj9nffcQWnfumLFR6TeMm\nWxvi2acxyW6INcK20bzItuEMse0eM3Nu7zvQLtjTNVaxqQE1O2lc9W3Oz3+CC6r1kCbYkePS+IsD\nZ9suW+wd/x+Nja3DY0WO1+17T+OLtki8jD3eZHcYd1oXcDH4N3b+OeJrz/vn9/O+rXGnrTmbaYvg\nZ1jiFWxTw47aYm9nRvb3v2Lnu78sBq05QcIRZ9F293NZh0t7Wyy/3G407Nx/8nIqa4lYlYoaP/fd\nSPZLtt8FCQiAM2iPXYBW2wWu060av/sx94b/bvvXbt8TO3JcMC0xybI7Hv89SWPK3fay2RrK2YV5\nlE3pmm1rPZpF2Oey/fQ3/WMudo4Exo5/4X0a5/2mMSOevy1wtmXanKkfrcf9QhsBiPVNjfrDzi9W\nb7f73ni5fz9Hhp1Pppe1jhLftuM3nu6Rckz9Gpvjc59yU47s56/00ZZXPG7nyz7ZX+2yxfC32H2O\nkuz+RmtsRLqq/ccL/jj5/+Nznm2HvOUey2v68x1FccQULKAIyr2na05HjXWOaKzlOvmF7IQXOksE\n6oZpXG9TqSTHnYdLvW4Jh60V8d3BvFGixvGW2KTMO/nnaG8jM77bfizKPPnvCeDMn1+WvKkxwRZ5\nt38ur+eXgn4Ojd7PNG55WWPmjUXj/FDHpoTtsxsEHr0mRzPKRpYbzrZys7V4PWzNzBu22caGiicv\nz2q2FqeZjVDPsuPI1ZwnQQIC4Cw2FP62udnf24hDTZtb7Gpymof13bncpnLtrZ37yw7avv/32I0M\nvzukcaKt+dj4YfYGRM73l7KRktIXafzK5phnJnFBBYra+SXLzgNzbASitE1JCi9fskspbqfG1R1z\nLzfPXo3jLDF5z8rtI5vi9ZNNcZUvTnDes0Svpo2w/HCvnX+f5jyJ4owpWEDA2WHbOO6y+3A4ZewH\nm/LW0BBbBJ750in+o60aDtt+/cfXZvbK2+dMs/37F9ouM85tXFCBopuIaM98kvXUL7CGs2MdDxJa\nQhOzinl7XYotct/2zmn+d7bGb4WtgXGu5hsJEhAARfCC6FvT4d1RxD/nlXZB5Q8IBNx5xmlEiZyR\n86St9ndqUDIoSZiCBQAAAIAEBAAAAAAJCAAAAACQgAAAAAAgAQEAAAAAEhAAAAAAJCAAAAAASEAA\nAAAAgAQEAAAAAAkIAAAAAJCAAAAAACABAQAAAEACAgAAAAAkIAAAAABIQAAAAACABAQAAAAACQgA\nAAAAEhAAAAAAIAEBAAAAQAICAAAAACQgAAAAAEhAAAAAAJCAAAAAAAAJCAAAAAASEAAAAAAgAQEA\nAABAAgIAAACABAQAAAAASEAAAAAAkIAAAAAAAAkIAAAAABIQAAAAACABAQAAAEACAgAAAIAEBAAA\nAABIQAAAAACQgAAAAAAACQgAAAAAEhAAAAAAJCAAAAAAQAICAAAAgAQEAAAAAEhAAAAAAJCAAAAA\nACABAQAAAAASEAAAAAAkIAAAAABAAgIAAACABAQAAAAACQgAAAAAkIAAAAAAIAEBAAAAABIQAAAA\nACQgAAAAAEhAAAAAAIAEBAAAAAAJCAAAAACQgAAAAAAgAQEAAAAAEhAAAAAAJCAAAAAASEAAAAAA\ngAQEAAAAAAkIAAAAAJCAAAAAACABAQAAAEACAgAAAAAkIAAAAABIQAAAAACABAQAAAAACQgAAACA\nEiKYIjjrf4Hg//krjBOveMUrDcUlLnFRPCjhsteD1eIWt7idYVZPgJItTMIk7PijLhaPUTAAiv7l\nHWdETExMTExMzmdL3y8e8Yin1QCpJbWkVs9xclSOytFysyRREiVx1gZtcMVu1Ncf6eV7Z3R0dHR0\nNOWK4lw/ylUURxxxWveUUAmV0J71pZyUk3LB4+Vv+Vv+nv2qJih/bdLXJ71GvUDJqR+RK/T6ce6n\n0kbaSJten0mSJElS/B7ZJttk2/x62sH1V199fcrLXD9QcupHlQ0a2/6hseenGrdHaPz1Bo3rBmlM\nS6VekICUgIpxztsaH26pscd2bUhFxmqDS57R5489rXHxQo3PXKtx0WcanT+oMCgO9cMJdUKdUHnS\nVcdVx1Wn/YOSIAmS8Ohzmmh0Laf1o2xFGxFx6whIcmWpKTWl5s83aILy9LLgfsH9gvv92Tzr5ayX\ns16moYXidP1wtdN40WGNj3xpjxO0XpTxjYBcp9eRI/b6b1rZ9WObxo2jSURQrOrHclkuy4MekEEy\nSAZ1S5Pdslt2//ttSZZkSW5XSutHqSPWbpqqMf51jZ+9qPHFbzXGvUD9IAEphheQBps1TrWE4oIh\np3e0nX00DrpX48LLqSAoPon5uWX1QjF1hD5u9qIl5CfmFre4RfR1a/dpvGmS/nDVk1xIEIgmtJnQ\nZkIbEaed085pJyLdpJt0u7iDJuQfR+qr6s49vaMuzbDrR0WN245RLxDQ14+FslAWisgIGSEj+m6S\njbJRNk5upx1UlZNPef3w/byslJWyP70hfaWv9L3FJWWkjJTZf1d0aHRodCjlXVhYhH5GGlhBBzSO\nGZy/xMOnzmyNj8RqjGyYe0MOCCSlf9X4wG16QchD4uHjWwviiCNOi+r65INRGsN3UrYIRM5wZ7gz\nXER6SS/pFXmthEu4hD/STxP00008fDpZU+qeAXZdep3rBwLa5XK5XF6rpY54PPx4nhMPH98aw0zJ\nlMxu78scmSNzRvyfREmURMkx6gcJSDFQ39ZuXHOrf453YX2taOdO9fUAvz7p9UmvT6KkEYiaX66x\n61j/HK/rEJ0b34zF6ghMHvGIR0QbVu0fl12yS3Zd9E2eG1Yn1cummtTpTUEjkPwjIciSLMnq3FLX\nzLa5Id/1I03SJM21XI7IETnSZ5M8Jo/JY1U6aGJCuRcWl/5BL71DH4bcZ8//QdH45SpSVmOH1zQ+\naz29IVkFPnRZKStlX3fkmByTY19t04ZW0DLKHAFUP7pZwjBD44OpGoPuz/chQyVUQrOydFOHcRNl\ni2yRLb+01EQ96CBljgCqHx9o7LNVY/TWgl/xxSWudEc3c/h3PW24/ZmkP3S/QZkjcHiv0XjLIxpv\nzv/315e4REiERCQ9LVWkilR56Em9fmy4SYIkSILcV1Hmfkk7bNF/ysO2Aaxvd6XgVfaKOArJLxeQ\nSI2HP9aYaRsmhhTwAiLJOkcx+V+SKqmSmlDDEpDGlDkCqH5M15jYya4Cswt8yCzJkiznBomXeIlP\n9Gp9SdhniU15yhyBI+srjUkN7YmvLfbK9yHd4ha3N0LKS3kpn3CN9vgeflLrSdBsyhwBlIA8qvHo\nZv8k5iKSLumSnllNDsthORxvuywm/GKVh3axfyzXkD6ZReiFJPtQYS3bl/0nWwTYPLJgR0+wXRx6\nrNa4dDyLCRG49aP5mxrnttZY88KCHX33YJ3CcsVkbXBtLB19T/Q90fdQ7gjE+tF5vsZv39MY+WnB\njr7uLY1X9te4J4rrBwKvXvj0jNcRjM9X2W5Xl+f7P3DEEWdJtHZk9fhNnzzyR/SY6DHRYyh/f2MN\nSGELlVAJ3S3SQBpIg6m/6lCet4Cn+u/Wa4xlfwYUA1tsV54vy+d7Dq++b54++GKh1rOta7ihJwJf\n7E123v+uYNch72hpLs2l+dQGTheni9NlzzzKFoHkH4lyiIRIyOKKOqXw58h8n+/DJEzC0ldIRako\nFT/p53rU9ajr0SN/6PEpdxKQQK0o6ZIu6VJG46SJOlVqdhdLRH7I4+HsRoTLlmh8zu4HkvoUPVcI\n/AtJ5kAdsXh5rK5tmjdb64ez6pQHCpEQCXF+0wvQvEjtuXrF+qqyzqekEfhS9tt539aALI/L81v1\nOrNI68Ws0brYdvJtruWu5a7lcgPXDwT09WOLbJEtCS5ds/FUff3p+tOcapv1lo6Uf3qva5hrmGvY\nx7Ot3cb27SQgAS7b3MJD86SG1JAaI4dKXakrdR+Pt/yimiUUNrc3s7nGHXanzreGa7xpr8Z1NKxQ\nvIySUTJqx/fSXbpL91s/1IbTy3Yjta2+OaPWE5xmN+Lcsll7dl/oK72lt/S+Jcs11zXXNXdXdO6J\nDhCICbrP2koabxyncdJTGnfaGpGMP+068phedzb2kSbSRJo88YAm6HfcJ9tlu2w/tEfvmE45I8DV\nlbpSV0S2ylbZuqyCjoRfbzfq/Mg2HdljuytmWkfuMVuLu9raWWMv1LW0o0c7LzgvOC8cfc15zXnN\neY3iLfzmMc6o7HMY3TM1VmujsXsDjRVthOMLm+u7+3arQJ/ToELJqR/B1uCqbrtkXdtTY1AfjbOu\n17g3TqNnNPUDJad+hNouQLUsXmsJ+sHPNf46W+M+W/PhrUv9QMmpH2F2I9q6tvtony0aN/yucdll\nVl8sOm9TP0hASnCFaWcjIhUbaZyXQIUA9cP3qJPtlhViNWIBU0hA/ThePy6JsIQjXOPmQ9QPUD98\nj64YqnHts1ZPqlM/zi6mYBWtfPBt+8dEygL4B0tAXIcoCuAfbOqJvExRACABAQAAAAASEAAAAAAk\nIAAAAABIQAAAAACABAQAAAAACQgAAAAAkIAAAAAAIAEBAAAAQAICAAAAACQgAAAAAEhAAAAAAIAE\nBAAAAAAJCAAAAAASEAAAAAAgAQEAAABAAgIAAAAAJCAAAAAASEAAAAAAkIAAAAAAAAkIAAAAABIQ\nAAAAACABAQAAAEACAgAAAIAEBAAAAABIQAAAAACQgAAAAAAACQgAAAAAEhAAAAAAIAEBAAAAQAIC\nAAAAgAQEAAAAAEhAAAAAAJCAAAAAAAAJCAAAAAASEAAAAAAkIAAAAABAAgIAAACABAQAAAAASEAA\nAAAAkIAAAAAAIAHBmeEVr3iPx9YWLzz+PED98MVg8YhHPFKB+gHkrB+uzva4IfUDQFEXTBGcZZ2l\ns3T2Pci8QGPGnxQMICIXyoVyoYi4xCWujNuknJSTcjJfkiVZkikelHCdpJN08j3ISNLoGUrBADll\nLrOsPZSyKBr+H4ZeH6ySzxy8AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTEwLTI1VDIwOjU5OjE5\nKzAyOjAwS7XZ+wAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0xMC0yNVQyMDo1OToxOSswMjowMDro\nYUcAAAAUdEVYdHBkZjpWZXJzaW9uAFBERi0xLjUgBVwLOQAAAABJRU5ErkJggg==\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 | "\n", 266 | "\n", 267 | "\n", 268 | "\n", 269 | "\n", 270 | "\n", 271 | "\n", 272 | "\n", 273 | "\n", 274 | "\n", 275 | "\n", 276 | "\n", 277 | "\n", 278 | "\n", 279 | "\n", 280 | "\n", 281 | "\n", 282 | "\n", 283 | "\n", 284 | "\n", 285 | "\n", 286 | "\n", 287 | "\n", 288 | "\n", 289 | "\n", 290 | "\n", 291 | "\n", 292 | "\n", 293 | "\n", 294 | "\n", 295 | "\n", 296 | "\n", 297 | "\n", 298 | "\n", 299 | " \n", 300 | "\n", 301 | "\n", 302 | " \n", 303 | "\n", 304 | "\n", 305 | " \n", 306 | "\n", 307 | "\n", 308 | " \n", 309 | "\n", 310 | "\n", 311 | "\n", 312 | "\n", 313 | " \n", 314 | " \n", 315 | "\n", 316 | "\n", 317 | "\n", 318 | "\n", 319 | " \n", 320 | " \n", 321 | "\n", 322 | "\n", 323 | "\n", 324 | "\n", 325 | " \n", 326 | " \n", 327 | "\n", 328 | "\n", 329 | "\n", 330 | "\n", 331 | " \n", 332 | " \n", 333 | "\n", 334 | "\n", 335 | "" 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 | "\n", 373 | "\n", 374 | "\n", 375 | "\n", 376 | "\n", 377 | "\n", 378 | "\n", 379 | "\n", 380 | "\n", 381 | "\n", 382 | "\n", 383 | "\n", 384 | "\n", 385 | "\n", 386 | "\n", 387 | "\n", 388 | "\n", 389 | "\n", 390 | "\n", 391 | "\n", 392 | "\n", 393 | "\n", 394 | "\n", 395 | "\n", 396 | "\n", 397 | "\n", 398 | "\n", 399 | "\n", 400 | "\n", 401 | "\n", 402 | "\n", 403 | "\n", 404 | "\n", 405 | "\n", 406 | "\n", 407 | "\n", 408 | "\n", 409 | "\n", 410 | "\n", 411 | "\n", 412 | "\n", 413 | "\n", 414 | "\n", 415 | "\n", 416 | "\n", 417 | "\n", 418 | "\n", 419 | "\n", 420 | "\n", 421 | "\n", 422 | "\n", 423 | "\n", 424 | "\n", 425 | "\n", 426 | "\n", 427 | "\n", 428 | "\n", 429 | "\n", 430 | "\n", 431 | "\n", 432 | "\n", 433 | "\n", 434 | "\n", 435 | "\n", 436 | "\n", 437 | "\n", 438 | "\n", 439 | "\n", 440 | "\n", 441 | "\n", 442 | "\n", 443 | "\n", 444 | "\n", 445 | "\n", 446 | "\n", 447 | "\n", 448 | "\n", 449 | "\n", 450 | "\n", 451 | "\n", 452 | "\n", 453 | "\n", 454 | " \n", 455 | "\n", 456 | "\n", 457 | " \n", 458 | "\n", 459 | "\n", 460 | " \n", 461 | "\n", 462 | "\n", 463 | " \n", 464 | "\n", 465 | "\n", 466 | " \n", 467 | "\n", 468 | "\n", 469 | " \n", 470 | "\n", 471 | "\n", 472 | " \n", 473 | "\n", 474 | "\n", 475 | " \n", 476 | "\n", 477 | "\n", 478 | " \n", 479 | "\n", 480 | "\n", 481 | " \n", 482 | "\n", 483 | "\n", 484 | " \n", 485 | " \n", 486 | "\n", 487 | "\n", 488 | " \n", 489 | " \n", 490 | "\n", 491 | "\n", 492 | " \n", 493 | " \n", 494 | "\n", 495 | "\n", 496 | "\n", 497 | "\n", 498 | "\n", 499 | "\n", 500 | "\n", 501 | "\n", 502 | "\n", 503 | "\n", 504 | "\n", 505 | "\n", 506 | "\n", 507 | "\n", 508 | "\n", 509 | "\n", 510 | "\n", 511 | "\n", 512 | "\n", 513 | "\n", 514 | "\n", 515 | "\n", 516 | "\n", 517 | "\n", 518 | "\n", 519 | "\n", 520 | "\n", 521 | "\n", 522 | " \n", 523 | "\n", 524 | "\n", 525 | " \n", 526 | "\n", 527 | "\n", 528 | " \n", 529 | "\n", 530 | "\n", 531 | " \n", 532 | "\n", 533 | "\n", 534 | " \n", 535 | "\n", 536 | "\n", 537 | " \n", 538 | "\n", 539 | "\n", 540 | " \n", 541 | "\n", 542 | "\n", 543 | " \n", 544 | "\n", 545 | "\n", 546 | " \n", 547 | "\n", 548 | "\n", 549 | " \n", 550 | "\n", 551 | "\n", 552 | " \n", 553 | "\n", 554 | "\n", 555 | " \n", 556 | "\n", 557 | "\n", 558 | "" 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 | --------------------------------------------------------------------------------