├── .gitignore ├── README.md ├── LICENSE ├── circuitikz.py └── Circuitikz-examples.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | *.py[cod] 2 | 3 | # C extensions 4 | *.so 5 | 6 | # Packages 7 | *.egg 8 | *.egg-info 9 | dist 10 | build 11 | eggs 12 | parts 13 | bin 14 | var 15 | sdist 16 | develop-eggs 17 | .installed.cfg 18 | lib 19 | lib64 20 | __pycache__ 21 | 22 | # Installer logs 23 | pip-log.txt 24 | 25 | # Unit test / coverage reports 26 | .coverage 27 | .tox 28 | nosetests.xml 29 | 30 | # Translations 31 | *.mo 32 | 33 | # Mr Developer 34 | .mr.developer.cfg 35 | .project 36 | .pydevproject 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | IPython magic for LaTeX/Circuitikz 2 | ================================== 3 | 4 | This IPython magic extension makes it easy to create and display circuit 5 | diagrams generated using LaTeX and 6 | [Circuitikz ](http://www.ctan.org/pkg/circuitikz) 7 | from within an IPython notebook. 8 | 9 | See the 10 | [example notebook](http://nbviewer.ipython.org/urls/raw.github.com/jrjohansson/ipython-circuitikz/master/Circuitikz-examples.ipynb) 11 | for intallation instruction and example of how to use this magic extension. 12 | 13 | 14 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013, Robert Johansson 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without modification, 5 | 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, this 11 | list of conditions and the following disclaimer in the documentation and/or 12 | other materials provided with the distribution. 13 | 14 | Neither the name of the {organization} 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" AND 19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 22 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 24 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 25 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 27 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /circuitikz.py: -------------------------------------------------------------------------------- 1 | """ 2 | An IPython extension for generating circuit diagrams using LaTeX/Circuitikz 3 | from within ipython notebook. 4 | """ 5 | import os 6 | from IPython.core.magic import magics_class, cell_magic, Magics 7 | from IPython.display import Image, SVG 8 | 9 | latex_template = r"""\documentclass{standalone} 10 | \usepackage{tikz} 11 | \usepackage[%s]{circuitikz} 12 | \begin{document} 13 | %s 14 | \end{document} 15 | """ 16 | 17 | @magics_class 18 | class Circuitikz(Magics): 19 | 20 | @cell_magic 21 | def circuitikz(self, line, cell): 22 | """Generate and display a circuit diagram using LaTeX/Circuitikz. 23 | 24 | Usage: 25 | 26 | %circuitikz [key1=value1] [key2=value2] ... 27 | 28 | Possible keys and default values are 29 | 30 | filename = ipynb-circuitikz-output 31 | dpi = 100 (for use with format = png) 32 | options = europeanresistors,americaninductors 33 | format = svg (svg or png) 34 | 35 | """ 36 | options = {'filename': 'ipynb-circuitikz-output', 37 | 'dpi': '100', 38 | 'format': 'png', 39 | 'options': 'europeanresistors,americaninductors'} 40 | 41 | 42 | for option in line.split(" "): 43 | try: 44 | key, value = option.split("=") 45 | if key in options: 46 | options[key] = value 47 | else: 48 | print("Unrecongized option %s" % key) 49 | except: 50 | pass 51 | 52 | filename = options['filename'] 53 | code = cell 54 | 55 | for ext in ["tex", "pdf", "png"]: 56 | try: 57 | os.remove("%s.%s" % (filename, ext)) 58 | except: 59 | pass 60 | 61 | with open(filename + ".tex", "w") as file: 62 | file.write(latex_template % (options['options'], cell)) 63 | 64 | os.system("pdflatex -interaction batchmode %s.tex" % filename) 65 | for ext in ["aux", "log"]: 66 | try: 67 | os.remove("%s.%s" % (filename, ext)) 68 | except: 69 | pass 70 | 71 | os.system("pdfcrop %s.pdf %s-tmp.pdf" % (filename, filename)) 72 | os.rename("%s-tmp.pdf" % filename, "%s.pdf" % filename) 73 | 74 | if options['format'] == 'png': 75 | os.system("convert -density %s %s.pdf %s.png" % (options['dpi'], filename, filename)) 76 | result = Image(filename=filename + ".png") 77 | else: 78 | os.system("pdf2svg %s.pdf %s.svg" % (filename, filename)) 79 | result = SVG(filename + ".svg") 80 | 81 | return result 82 | 83 | 84 | def load_ipython_extension(ipython): 85 | ipython.register_magics(Circuitikz) 86 | -------------------------------------------------------------------------------- /Circuitikz-examples.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# IPython extension for drawing circuit diagrams with LaTeX/Circuitikz" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Robert Johansson\n", 15 | "\n", 16 | "[http://github.com/jrjohansson/ipython-circuitikz](http://github.com/jrjohansson/ipython-circuitikz)" 17 | ] 18 | }, 19 | { 20 | "cell_type": "markdown", 21 | "metadata": {}, 22 | "source": [ 23 | "## Requirements" 24 | ] 25 | }, 26 | { 27 | "cell_type": "markdown", 28 | "metadata": {}, 29 | "source": [ 30 | "This IPython magic command uses the following external dependencies: `pdflatex`, `pdfcrop`, the [Circuitikz](http://www.ctan.org/pkg/circuitikz) package and \n", 31 | "\n", 32 | " * for PNG output: `convert` from ImageMagick\n", 33 | " * for SVG output: `pdf2svg`" 34 | ] 35 | }, 36 | { 37 | "cell_type": "markdown", 38 | "metadata": {}, 39 | "source": [ 40 | "## Installation" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 1, 46 | "metadata": { 47 | "collapsed": false 48 | }, 49 | "outputs": [ 50 | { 51 | "name": "stdout", 52 | "output_type": "stream", 53 | "text": [ 54 | "Installed circuitikz.py. To use it, type:\n", 55 | " %load_ext circuitikz\n" 56 | ] 57 | }, 58 | { 59 | "name": "stderr", 60 | "output_type": "stream", 61 | "text": [ 62 | "/Users/rob/miniconda/lib/python2.7/site-packages/IPython/core/magics/extension.py:47: UserWarning: %install_ext` is deprecated, please distribute your extension(s)as a python packages.\n", 63 | " \"as a python packages.\", UserWarning)\n" 64 | ] 65 | } 66 | ], 67 | "source": [ 68 | "%install_ext http://raw.github.com/jrjohansson/ipython-circuitikz/master/circuitikz.py" 69 | ] 70 | }, 71 | { 72 | "cell_type": "markdown", 73 | "metadata": {}, 74 | "source": [ 75 | "## Load the extension" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 2, 81 | "metadata": { 82 | "collapsed": false 83 | }, 84 | "outputs": [], 85 | "source": [ 86 | "%reload_ext circuitikz" 87 | ] 88 | }, 89 | { 90 | "cell_type": "markdown", 91 | "metadata": {}, 92 | "source": [ 93 | "## Example: SQUID" 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": 3, 99 | "metadata": { 100 | "collapsed": false, 101 | "scrolled": true 102 | }, 103 | "outputs": [ 104 | { 105 | "data": { 106 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXAAAAEnCAQAAAAam9D7AAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZ\ncwAAAH0AAAB9ALBPP5YAAAAHdElNRQffCxcLIiV1QSfrAAAMNElEQVR42u3dz4ozWRnH8d8jjYtx\nVYO7QYSaGxBqLqH6EtIgboSBzMKNu2ThBaSvQNIgiCBC98alkFyASJejazEwyKyErs046OpxkfTb\nSTqZTjpVdSpPvp9ZzPsmeVPn1PPLqVN/kjIXTmND5SokVZKPU7cGm4yAN8EmGrmlbgVe+17qBkRg\npQrJhpanbgm2EfAT2chmqlVJetDA7i1L3SKsI+AnsZFGuvFKkrz2Wy00I+J9QsBPM1Ll9drf5yo0\nSN0ovLhK3YAzl333Y5apkCQtfJG6qZeJEfw0t6sAPytV6+Hlr16r0kQ58U6FgJ/Ex7qz6fOs20qV\nut4Ms9cq1iOPbjFFOZGPLddQuWRDyT/bft7KrVk6OsWJnkbsP9FjE85vpsQIfjIbKtdgb5QL3aVu\n4SVjBG+ZuT5mipIOO5ktsalNJBtoTrxTIuBtqTW3UkMx/06KKUprrJCWJ/GRDgFHaExRGsdFs31C\nwBtlv7Raf7H/2q9TtwRLTFEaZKX+qB9Ikr7VL/y3qdsDRvBm/WwVb+kj/Tx1YyAR8PZ8P3UDIBHw\nZv1e/1n96VtO0PcDAW+Qz/Ur/Vv/0zf6HTPwfmAns2GWaa6S0/N9wQjeMK/1RLz7g4AjNAKO0Ag4\nQiPgCI2AIzQCjtAIOEIj4AiNgCM0Ao7QCDhCI+AIjYAjNAKO0Ag4QiPgCI2AIzQCjtAIOEIj4AiN\ngCM0Ao7QCDhCI+AIjYAjNAKO0Ag4QiPgCI2AIzQCjtAIOEIj4AiNgCM0Ao7QCDhCI+AIjYAjNAKO\n0Ag4QiPgCI2AIzQCjtAIOEK7St2AdZapSN2GBvzQytRNaEDldeomNME8dQvWG1NqpCp1K072I/0r\ndRNOVujW56kb0YRejeCSKh+nbgIkm6RuQVOYgyM0Ao7QCDhCI+AIjYAjNAKO0Ag4QiPgCI2AIzQC\njtAIOEIj4AiNgCO0vl1NeCArNNDAP03dDthAmaRSD/6Qui27nGnAvVJlo9StgOUa+I1kcz3avI9f\nkWCKggb4Qpny1K3YpfcjuA2Vq5BUSXwZIqVdlfCFblbPVd7L72L1PuB+J9lEI79O3ZJLt78SVmig\nntbnDKYoVqqQbGi93ARekt2VsEID3UiWpW7fLj0PuI1splqVpAcN7L6fK/ES7KuEFSp97LUGfdzF\n7HnAbaSRbpZzO6/9VgvNlivWSptINrFh6jZehn2VsFwzTczN1dNjWr0OuEZbv84xV6GBJPncx24+\n9rvUTbwQeyrhC//Yzc2tr+ck+h3w7MDH0LazrUS/j6LcanMKUqrW2vmyD7+EtfBF6qYGd7aV6PUI\n7mPd2fTD7kypUtfrK9BrVZoo79tKjed8K9HvEVw+tlxD5ZINJf/s1fO1FerlNRDRnGsleh5wyRe6\ntcnyNMNrVkb5kcj+O89K9D7gNlSuwfLX8nacqi8V4iciz8F5VqL3Afc7SfuvQSnEgcKOnGcler2T\neYCejhsXqKeVONOA29Qmkg3Uy2uQL0nfK3GmAVetuZUaigtoU+t5JXo/B9/Nx1ZIXEKbXt8rcaYB\nl/p5ef0l6nclznWKAhyEgCM0Ao7QCDhCI+AIjYAjNAKO0Ag4QiPgCI2AIzQCjtAIOEIj4AjN/PCX\nDjVU2xe1f6KvW17Cwr9oeQmt66AS7dch010Xv0t2zOWyucbey68lHcNmqVvQgACVsFJlF8thioLQ\nCDhCI+AIjYAjNAKO0Ag4QiPgCI2AIzQCjtAIOEIj4AiNgCM0Ao7QCDhCI+AIjYAjNAKO0Ag4QiPg\nCI2AIzQCjtAIOEIj4AiNgCM0Ao7QCDhCI+AI7cICbpNufhEPbyo16mIxFxZwXBoCjtAIOEIj4AiN\ngCM0Ao7QCDhCI+AIjYAjNAKO0I65jWBLrNBAA/80dTvohQ2USSr14A+p29JYL/zg/zRRefir33iv\n1TspW/3fm3rnHcvKNvrg+55rYEkt9qL9SijXvculXE/Nrpe3K9Hc8rZ7cSXZ7OALkEZ22Ovmfr33\n8zXUQJVkpeRjTXXT8ue50MzGu++pa1MVdu1H3TPYSpUqVGuxeqCQNPaqkbYeftvpQytx6+O9S9uu\nxOqVvrBMuRrp0cbyBpra9a41ZZlmVh17B+rdlXi+A/RzL64kPTTemcXuhy3TvSrdLCNluT22fmtw\naaGFpqbXEbephro7Lt6SzzU3fwmOZXrc19+j3Tbe+z33Q95VCV8sBxsbqmrmA7tlIWn2OuKWaaZC\nR9/We3clvN7qRTcb1dVG8FGTjUemz39vd4qiR7mGmxtGTeWavm+jLl+fIrz0qaspSquVKDRrZ4Li\nUqEnPalYr8R6dRqsxIdedHkU5V711gazVgd3XPda16o0teHLY6vR+8iN4kopLe8Ub7kkNTZ+d2dv\nJazQQDeSZW0s1itdS5pZ8fzIavT+wo8evyXtrcRGLzobNYZyDbYf62rsex4nluPG+0dvl0szzdZH\njJfx7jxG8P2VUKHRZl1aWPpqFNdEfsrovb8Sm73obrU+6mnPM6Umck3aXK0fIv4oPy3eLrmmKjXU\n/XqLu+lFm5VQrqfVH//Z6vKXEb9fVeOE9bWrEtu96G61+vLwTcLCLiPuOi3epVwjlSp1rzxtj862\nEsWHEJ4S74Mq0VWXcvnmbo1LWVs7M3tbkelJ/rxZe+d7vOymjlbveVYx70klSvnrdrRRiY52Mn3X\njtjw5RCdZVZaaeVqZ6Etk+U5rvXdzaMVH3aMl2f7huq6FyfpQyUs02S53JfdzXc4qBLdHUWptLFn\nvrmf7rUqTZR7i0ckbLpaBVtHVI5UPp818IVkmbKXcHTRiwYkrsTqyMlyLc5OiPhhlehwo/T0sglR\nvtysbLzC29xQLnctT9133zzyquz17K/dXpx/JdaPZ60fF2+rEp1dbOVz+0L3dqeFpELyrbN2Vqo6\n9qzi4Z6Pe9tE8tquNdt9dvM73yPXUKWk0paXNuQqVW2OdO32ohkpK/Fy3Nsmkld2rdmus5tvvMsx\nleh89Ch3XyikyWm7HN+51A8HBps4f/adS2qxF+dfiV3nlE8ZxQ+pxJVkhZo+b1Xv+0T6/jOX77ga\n4cDP+46zlu8dxd90Ui+s+V/dWuybS3dfid1nLd87ir/puRcuzRr/qL7jQJxamvep1Npx7/WLNJXp\nsekLQ0/rRQvdf8dY3FolRlrbZm5UotDTaQdv9/fiStL4wBH8c/1VXx70yiNmcDZV7WMbaN7OvM/n\ndr17tPLarpU3s9SGenF94OsOr8QRx0Jar8StVXsqUdl1U1f0bPfiSjp002ClvvTmL46qNbdSQ41P\nf6vd9rfZ68YuFG6kF4eu3YCVaG56stWL5F9Z87EVkh86dvVUhF5E6MPrXiQPeKOfXnpx8X3Y7gXf\nqkdoBByhEXCERsARGgFHaAQcoRFwhEbAERoBR2iXFvC5/py6CZAkfaU/dbGYCwu4z/VN6jZAkvQP\n/b2LxVxYwHFpCDhCI+AIjYAjNAKO0Ag4QiPgCI2AIzQCjtAIOEIj4AiNgCM0Ao7QCDhCI+AIjYAj\nNAKO0Ag4QiPgCI2AIzQCjtAIOEIj4AiNgCM0Ao7QCDhCO+4ua4MWbja96cf6Kt3KOCNtV6L9OmTH\n3C74/cwPf2mmouXWFPqJftPyMvbevf18dFCJz/W3xm6Su0/Vzh2VNx0xgnut5u+uu8GkrIU7+IbT\nQSVKVTEqwRwcoRFwhEbAERoBR2gEHKERcIRGwBEaAUdoBByhEXCERsARGgFHaAQcoRFwhEbAERoB\nR2gEHKERcIRGwBEaAUdoBByhEXCERsARGgFHaAQcoRFwhEbAERoBR2gEHKERcIRGwBEaAUdoBByh\nEXCERsARGgFHaAQcoRFwhEbAERoBR2gEHKERcIRGwBEaAUdoBByhEXCEdpW6AVsyK1M34WQf6dvU\nTThZlroBTelXwBeqdf4B/6n+kLoJJ6u1SN2EZpinbkE4NvPr1G3AM+bgCI2AIzQCjtAIOEIj4AiN\ngCM0Ao7QCDhCI+AIjYAjNAKO0Ag4QiPgCI2AIzQCjtC4HvxINlHxxks+0ddvvKLycep+XAoCjtCY\noiC0fn0n82xYruG7/uHc56nbflkI+PvUel9Qg3yV93wwB0dojOAnseLQXxBhapIGAT9NofzAVxLw\nJJiiIDQOEyI0pigNsKEGe5988LvU7btk/wdDMU4lJxWj/QAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAx\nNS0xMS0yM1QxMTozNDozNyswOTowMJgxv0sAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTUtMTEtMjNU\nMTE6MzQ6MzcrMDk6MDDpbAf3AAAAFHRFWHRwZGY6VmVyc2lvbgBQREYtMS41IAVcCzkAAAAASUVO\nRK5CYII=\n", 107 | "text/plain": [ 108 | "" 109 | ] 110 | }, 111 | "execution_count": 3, 112 | "metadata": {}, 113 | "output_type": "execute_result" 114 | } 115 | ], 116 | "source": [ 117 | "%%circuitikz filename=squid dpi=125\n", 118 | "\n", 119 | "\\begin{circuitikz}[scale=1]\n", 120 | "\\draw ( 0, 0) [short, *-] node[anchor=south] {$\\Phi_J$} to (0, -1);\n", 121 | "\n", 122 | "% right\n", 123 | "\\draw ( 0, -1) to (2, -1) to node[anchor=west] {$\\Phi_{J}^2$} (2, -2) to (3, -2)\n", 124 | " to [barrier, l=$E_J^2$] (3, -4) to (2, -4)to (2, -5) to (0, -5) node[ground] {};\n", 125 | "\\draw ( 2, -2) to (1, -2) to [capacitor, l=$C_J^2$] (1, -4) to (1, -4) to (2, -4);\n", 126 | "\n", 127 | "% left\n", 128 | "\\draw ( 0, -1) to (-2, -1) to node[anchor=west] {$\\Phi_{J}^1$} (-2, -2) to (-3, -2)\n", 129 | " to [capacitor, l=$C_J^1$] (-3, -4) to (-2, -4) to (-2, -5) to (0, -5); \n", 130 | "\\draw (-2, -2) to (-1, -2) to [barrier, l=$E_J^1$] (-1, -4) to (-1, -4) to (-2, -4);\n", 131 | "\\end{circuitikz}" 132 | ] 133 | }, 134 | { 135 | "cell_type": "markdown", 136 | "metadata": {}, 137 | "source": [ 138 | "## Example: Transmission line" 139 | ] 140 | }, 141 | { 142 | "cell_type": "code", 143 | "execution_count": 4, 144 | "metadata": { 145 | "collapsed": false 146 | }, 147 | "outputs": [ 148 | { 149 | "data": { 150 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAAC+CAQAAACCY2YhAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAJcEhZ\ncwAAAJYAAACWAHFG/vAAAAAHdElNRQffCxcLIibsSHZRAAATzklEQVR42u3dQagr133H8d/xc2pn\nUcjYcQ3d2B3Teuc2mRC6amKQV+mihYq4NaUJ9I3T0E1pE13qBB7YKboNJYvQ2rpQCITU7X2kFBJ3\nUQkSr7q5N6WmZBOk+oFb6jTvqqE0MdjvnS400puRZkajq6N75kjfz0B8R3qanPPTOfOfkUaSsQIA\noP3u890AAACa2KuCZU5N7LsNISCnZsipCVJqhpxcuN93A9wxqbqa6vmNHxWrJ+lEU03sie9e7N5l\ncjq8lMipcY+Zdc16zGhywOzPe1hmqFixnrCTS4Qwss/4bv9VuWxOh5USOTXsLbOuWW8ZTU7szUuC\nJtVNHUvqbfzIjqRz3+2/KpfN6bBSIqeGvWXWNesto8kVuyeLhlZWGssq3vCRfVl1fLe/7TkdVkrk\ntNuUyImULrfsyRmWSXVTkqqPYuZveJrIREt3JZId+e7B1ViXEyll/SenBph1zTCa3NmT97DMcP46\nrxmvvlJsEnU1Uk9HihUpluxRIYKDeZW4LidSIid3KZFTs5xIaUO+T/GcnHCnSnN/Ww0K98bqWVmp\nqwulVrrQOHdvR1Z93z3wnxMpkZO7lMiJ0bSjNH03wEknhoW1pVeK1VeU/ddmg6N478G8SlyXEymR\nk7uUyKlZTqS0cZq+G+CgC7kjmGx96Sgm++9pcehktw5nQ2WxHs2G0P4t9TmREjm5S4mcmuVEShvn\n6bsBDrqw8lSXX42jcdnptezSEVC66fVOoSzNcjr0lMjJZUrkxGhyuwR/leDiCpy8kqtxTKJYI6l4\nLU7J5xySzT8CGYJmOR16SuTkMiVyYjQ557tiuj+CWT6KUUeRlXrz0+v8ccryq8TqFU/g92dZlxMp\nkZO7lMiJ0bSbJfDvEjSpZPold0wUq6fnJZNqoGMdKckeESnOHad08p9zMD319ZDvPvnIiZTIyV1K\nzLpmOZHS5gL/HJYZq+4bkJ+wExNrqCMluqm+Rpoo0bGdSibWQFJH08Vpd6JIJ3bDr/EMw7qcJFIi\nJ1cpMeua5SRG08YCL1iNuhgp0bmdSiaRLN/MVYqUmiGnZsipCVLa1AEULADAPgj+KkEAwGGgYAEA\ngkDBAgAEgYIFAAgCBQsAEITgPjhsuuoqknSuk9UvKjGRUnUkSTftScmjY6VKJE11UvbDaKajVJGk\niY5D/hqUBjn0FNfksC7lrrqzreumnfru7RY5JUoVS5ropOyi4lwOx6v93Ha0hcOk6tTm0Ms+/LqD\n0RaO3PM9Ks1hp6PtQPj+qo2Nvugk0bhww9IXRirVRW71YvmrTNQvrJ4Vv/tYkc7qth7OorSwOlay\ndP9pYXW4lMOWKYeyKNLQYQ5jdZfuH9RtPZxlKYeL2S84FXLIr66Otq1SDmdZ2rss5bDr0XYoi/cG\nbNDURBeyGitVpCTbHeQmTzZxhupaKdVQVhf5QaOBrC40UKxIfY1VKFlZuRqrr0hxtvXB1fTMcU6z\nHE7VsVKqcUUO/SyHi5UcxrIaq5fLob+y9aFSK3WzSRjkb/bobCWH3De/FUZbp3K0nWaj7WzNaFtK\nOZwly+Esy2F2qJM7RNl6tF3UjbZwFvVkZTUo5HDvewGj3GiLG462spQrRtvhLN4b0Lih0UqJSfNP\nq7qyKu5SBvmntbi2GEJnxbXc1mdDKLjJU0wl1/OoMoexrE4rc+gWUp6lMljZenCTZyWHQs+yHelZ\nVa6VKTcabeEsJc/3rOfdS4+2Ysq1oy2cpSSHQs8ajbZh1fbWjbZDWrw3oHFDh1p9EW/2RHaWJ8Li\n/lPZ2U9O3/uXuXvjeyVJg8qtB3XqrVhWSxM+v7NUqpWBni/NOr1EyoVdVBiL+mtyqB5tSWUOw0LK\nNaMtnGV2kFiaXbzr0RbOoqQyh+GlR9vsjC22UiRbN9oOa/HegIbNjFW6U9Rg9lSqJ1vyU2mzs4c0\ne3p7K/fPBlqUDYmV45XyrbZ5UV+Ls6WVHDrZDmjl+FXJLN1sBxRVbVVpeR46U2BHxfM8lm7tymp8\nL4/K0dbfZrT57vsGKXVkNS7J4VRW/YajrVu61flou6gebeEsGqjkUCQ7rEkuPdpOc6OtKuWgZp2T\nrH03YJshsTjGi8qHxHwXWzUk5tutmiL3hlwoS1V71ZPV6WwHVPq4oaxS9VX6vl1W0OOqKaK0arvt\nXOa7ipJ7zmSVuhhtpVs/VVDnWFXtzUpNvNvR5rv3jVOqbO+sh9WzYzafthttvnt/5Wn7bkDDIXGh\niiGsgayGqtxhZm/zVuwosmPIiiExH3K++984p8ohPH+VvDKHrqzG1eV5bcqVCbZxme0wqxOUVdVo\nO81GU/kOKGoy2nz3vnFKFefbiwSHqh5ttjaHVFZna0ZbMIW9+owwS3D70Vb60l/dXnF/F+8NaNTI\nnipfJFAn+6Pi5HhxsWnFE5tdTFq1I66ZtO1bqqdG7iLrir5kOVQcsWUvZ1XuRkIq7FUvRVktdgK7\nHW2BvCuqXvVzuriUfXej7aJpO30vOlPlwVp2VeUuR1sgs87VsoNvujAd0zHx9tvJmX2YrvxzZCPN\nPmpY9cHMm5Kk88oPJN7M/e/q1icaSfNfBHWa0rNmYAaON5pIlR8pnPVwVPkx3yynihzOs3sqctKx\nlH2o0XVOL5iBecHpJuPqHOxUs/wqRtNitFXlME+5brTtYDRJZmAG5imnm0xqcjgp/rcyh8uPtsiE\nNOvq9z67HG1u97TznBLn+3BHHBcs0zE/1bf1bY3Nyw43m6hycM/vqdpFZJ8or370bLBUf77+XDvY\nxZjbelXXdd3cNd9yts1YUXU/sim1JkWN6u+v+ok5O9VUsYkcp/SUuaOXlOolc8fhzrijuud7tmup\nvn8iaVq1I87yqX70Tg5/zHfNXV3Xdf2redvhZuO1PamfNduONuc7TPPjxaxzdghkasr6op+7HG3O\nDxNNYsb6Z/2jxmboekZvz2nBMrG+pQf1gB6QlJobzjZcdwwze1LrvvhmpPnAKLNuak00O8NzmdO/\nK5JkZGT0CfOso83W72CywV9777qpVfeLqLso7P+yGJ/36XvOtlpzvj6/x9bvgtblUD/aHO+IzQv6\nWDaWpEfMd51tuP43cGtzsFNNtG5HvG60OR5N5rZ+VvNZ96KzA6Ckrh/ZYfROR5vbM1ET6R8U6316\nn6SOTl1u2wW3Z1if04O5Lf+hs+3WF4x1T2ptQZsdvdj6gtU1fdN3eIr8mMzib6O/dLTVToMcqncx\nteepWlf2Z1vumr5JXYVkBrmUpGvOjorjup6s/c6/JgWrfrTFpm/6xt2RcT4Xo19ztt36w0Bp/eFR\n9Y68yWjrmr7pO+xNVJh1rnbFtaNJTQ6X61JcN9qmklKXs04dPZpfa9s5ltsvv/1oYe1hY51tuW7q\nTDRa86SP1g6perF6knpm7T+8lIec5XR77eC/fA5TjWqnjiSlkr7n/D2CuZfMS4629OYWOWw72iSp\nJ+mT5nHnCUmScTjr6g9/1uWwzWiTsllneq4DyjzZhllnp2a0VcrSbmfdT5Q0eKaukMPRLZmX9Znc\n6v/YllXnS/Up1vzoxdk3SZu7hXOHC/uw71466FMnezV94uqbpM1A1ws5fcF+yXcvHfRqfs4wcvX9\n7eYnen9u1do9+Mmge7POHjnbZnHWvWl/wXcvHfQpzV5gdjfrunpV13I3PNGu7893W7BifV8PZCt3\n9FX7R767107mbT2ymDxWv2P/1neL2qmwi7lrr22xqT1mXtC9M0+rW/uwI94Fczv3oqDVr9g3fLeo\njUykiT6wWH3dftx3i4qcHo3ZiX5X7+iOJOnrlKsq9lH97+wPWb1Guar0xdnHTWR1Vx/y3Zi2sl/S\nG1lO0pRyVelpvStpNuu+SLkqZ6fq6C29K+k9vaHf9N2eZU7PsCTJRLPrZtp1Itk+5ll9WT/S7zFx\n6pmBUp3Y5323o93MU/oz/bI+x8FPPfOCPsOsW890JE3tuvesfbTMdcFCU2aoc3ev0O8vY+2OrnbZ\nJ6ajnn3Gdyvaj1kXtj14gxYAcAgoWACAIFCwAABBoGABAIJAwQIABIGCBQAIAgULABAEChYAIAgU\nLABAEChYAIAgULAAAEGgYAEAgkDBAgAEgYIFAAgCBQsAEAQKFgAgCBQsAEAQKFgAgCBQsAAAQaBg\nAQCCQMECAASBggUACAIFCwAQBAoWACAIFCwAQBAoWACAIFCwAABBoGABAIJAwQIABIGCBQAIAgUL\nABAEChYAIAgULABAEChYAIAgULAAAEGgYAEAgkDBAgAEgYIFAAgCBQsAEAQKFgAgCBQsAEAQKFgA\ngCBQsAAAQaBgAQCCQMECAASBggUACAIFCwAQBAoWACAIFCwAQBAoWACAIFCwAABBoGABAIJAwQIA\nBIGCBQAIAgULABAEChYAIAgULABAEChYAIAgULAAAEEw1ncL9sYVRDmyz/ju5bZMX72d/58c2yPf\n/dyWGaqz6/8Pa3z3clumo+HO/0/2YNbtj/t9N+AqmVMd2cklHhepq1jSVCd2Kpmuvem7L7tz2ZTI\nqeHjDiolcoJT9mAWpbIabPyoSAOdqafESokGSjRQ33df2pYSOZESObHsfvHegCvs6lBjWcUbPSbR\nRXGiaCirru++tCslciIlcmK5isV7A66so6nSTY/2VidOdsQY+e5Nm1IiJ1IiJ5arWbw34Mo6OrSy\n2uRoT7EuZo8q3NrRme++tCklciIlcmK5quVALms3qWZv2B5LZVepmTj7b2SixY0DRSq72mzkuze7\nsi4lcsp6z2hqhJzgmrEyiabFq3hWbym/LRxmOL801YwV64l8T0yirkbq6UixIsWSPcoumC25oNVE\nisLN4fIpkVOznEiJnCA1rSKb15VYVhf5k67VW8pvC2dRqjT3d+EVdcXqWVmpqwulVrrQ2MpKA9l7\njzqEpS4lcmI0kRPLBs9+oyqyeV2RIp0t7ZpWbim/LZyl+Jp48RV19Wdv5qova2Wl7uw+nckq8d3y\ntqRETs1yIiVyYrFqWkU2ryveO3YF0aXFY7bi0d58Eul0aYLZ2VRafSJ898dHSuTULCdSIieWXS7e\nG3AFXVy95qjkqiWNlz75Ycumjrr7+mmQZimRE6OJnFj8LXt/leDiSqW8lauWTKJ4dh3S4oql8q+B\n6ezn18M0S4mcGE3NkBN2xHfF3PWyeqRnlT/aU0eRlXrzIzul2e2pVj5br1Qd3/3xkxI5MZrIicX/\nsudffmtSyfRL7pgoVk/Pm1QDHetISfbvI8WziyztiUnUMyM7XWyrr4ndy0+DrEtJIqcmOZESOWG3\n9vznRcxYcc3dT0ga6kiJbqqvkSZKdFyYLF2d6FxSolgn9tx3f/ykZCcmJidGEznBtz0vWA0CiJTo\n3E4lk0jLk8NE6ijRRKP1H24zO//9Ik39TV5XOZm4dmfmxsTXh0wdjqZE0bp/sy1/Zy7ORlM0P0vb\nIY+zDssOvmC5ww84NsEPODbDDzg2wQ84Hpo9fw/rSh1v+O8/qf/S6xs9Yh++nGbzo/rexsnuw3se\nN7XZcf1j+lX9ne9GX7kJs+6wcIbljRnqPPwzgd0zNvwzgd0zHfU4E1iPWRe2vf8cFgBgP1CwAABB\noGABAIJAwQIABIGCBQAIAgULABAEChYAIAgULABAEChYAIAgULAAAEGgYAEAgkDBAgAEgYIFAAgC\nBQsAEAQKFgAgCBQsAEAQKFgAgCBQsAAAQaBgAQCCQMECAASBggUACAIFCwAQBAoWACAIFCwAQBAo\nWACAIFCwAABBoGABAIJAwQIABIGCBQAIAgULABAEChYAIAgULABAEChYAIAgULAAAEGgYAEAgkDB\nAgAEgYIFAAgCBQsAEAQKFgAgCBQsAEAQKFgAgCBQsAAAQaBgAQCCQMECAASBggUACAIFCwAQBAoW\nACAIFCwAQBAoWACAIFCwAABBoGABAIJAwQIABIGCBQAIAgULABAEChYAIAgULABAEChYAIAgULAA\nAEGgYAEAguC8YJmu+aY5NzdM5LtrbWYeN9/R0/qs+QvfLWk3k5iXJfOyiX23pN1MVy8qMTd8t6Pd\nTGRu6KP6DdPx3ZJ2M8+ZH5j/M/9mHvfdkhLW6aJv6j1ZWb2rHypyu+39WfS47uiurKzu6i3frWnv\nok8t/vypur5b095lMeve05vMusqUYv1wsfIV361p76K/X/x5V8/5bs3yYqzLytzV3+j+xepr9td9\nl+N2Mm/r5xYrVl+xf+y7RW1kIv2nHlysvmPf77tF7WRS/ZWuLVZfsX/gu0XtZM714dzqM3bku0Vt\nZD6m78gsVu/aa1tsbAfu334TOc8WtvcJ0/fdvZZ6JPe30XXzru8GtdKT+pnc2v3mVd3y3aRW+m3l\ndyqfMj/23aCW+nBh7c/NP/luUCv9Vq5cSfeZ5+w3fDcpz23BenhpPfHdvZYyhbUHyanUY4V3WO/T\nL+mDvpvUSh8orDGamnmUnEoV55jVz/tuUJHblwRv6Au5o71b9nHf3Wsn827uQMHqdfu07xa1kYk1\nLtzwkJ36blMbmWN9Prf6uv247xa1k/lR7oD6jj5rT3y3qI3Mc/p67oDa2pZdR+60OfaG3sqt/r7v\nzrXWn+b+vqNP+25OO9mJvqY72cpdvUK5qtDXf+fWeD+0yp/k/r5FuSpnv6ELzc9irF733Z5lruvn\nh/Sq3pF0izc1q9kv6/N6T5LVf+gX7Zu+29NW9tP6qm5Luq0XuZSgip3qSb0mSTrXR+y57/a0lf2a\nntEtSe/oFX3Ed2vay35Q35eVdFd/3b7Xfpy+JAgAwK78Pz/bTHpb3npvAAAAJXRFWHRkYXRlOmNy\nZWF0ZQAyMDE1LTExLTIzVDExOjM0OjM4KzA5OjAwbnnPogAAACV0RVh0ZGF0ZTptb2RpZnkAMjAx\nNS0xMS0yM1QxMTozNDozOCswOTowMB8kdx4AAAAUdEVYdHBkZjpWZXJzaW9uAFBERi0xLjUgBVwL\nOQAAAABJRU5ErkJggg==\n", 151 | "text/plain": [ 152 | "" 153 | ] 154 | }, 155 | "execution_count": 4, 156 | "metadata": {}, 157 | "output_type": "execute_result" 158 | } 159 | ], 160 | "source": [ 161 | "%%circuitikz filename=tm dpi=150\n", 162 | "\n", 163 | "\\begin{circuitikz}[scale=1.25]\n", 164 | "\n", 165 | "\\draw (-1,0) node[anchor=east] {} to [short, *-*] (1,0);\n", 166 | "\\draw (-1,2) node[anchor=east] {} to [inductor, *-*, l=$\\Delta x L$] (1,2);\n", 167 | "\\draw (-1,0) to [open, l=$\\cdots$] (-1,2); \n", 168 | "\\draw (3, 0) to (1, 0) to [capacitor, l=$\\Delta x C$, *-*] (1, 2) to [inductor, *-*, l=$\\Delta x L$] (3, 2);\n", 169 | "\\draw (5, 0) to (3, 0) to [capacitor, l=$\\Delta x C$, *-*] (3, 2) to [inductor, *-*, l=$\\Delta x L$] (5, 2);\n", 170 | "\\draw (7, 0) to (5, 0) to [capacitor, l=$\\Delta x C$, *-*] (5, 2) to [inductor, *-*, l=$\\Delta x L$] (7, 2);\n", 171 | "\\draw (9, 0) to (7, 0) to [capacitor, l=$\\Delta x C$, *-*] (7, 2) to [inductor, *-*, l=$\\Delta x L$] (9, 2);\n", 172 | "\\draw (9,0) node[anchor=east] {} to [short, *-*] (9,0);\n", 173 | "\\draw (10,0) to [open, l=$\\cdots$] (10,2);\n", 174 | "\n", 175 | "\\end{circuitikz}" 176 | ] 177 | } 178 | ], 179 | "metadata": { 180 | "kernelspec": { 181 | "display_name": "Python 2", 182 | "language": "python", 183 | "name": "python2" 184 | }, 185 | "language_info": { 186 | "codemirror_mode": { 187 | "name": "ipython", 188 | "version": 2 189 | }, 190 | "file_extension": ".py", 191 | "mimetype": "text/x-python", 192 | "name": "python", 193 | "nbconvert_exporter": "python", 194 | "pygments_lexer": "ipython2", 195 | "version": "2.7.10" 196 | } 197 | }, 198 | "nbformat": 4, 199 | "nbformat_minor": 0 200 | } 201 | --------------------------------------------------------------------------------