Skip to content
Snippets Groups Projects
Commit 7dc03899 authored by Timon Idema's avatar Timon Idema
Browse files

Attempt at adding applet

parent 42a00b96
No related branches found
No related tags found
No related merge requests found
......@@ -32,8 +32,10 @@ bibtex_bibfiles:
# We don't use this option as we go for local references instead, adding them to individual 'chapter' pages.
# The sphinx_proof extension requires installing the sphinx-proof package, see https://jupyterbook.org/en/stable/content/proof.html
# Likewise, the sphinx_exercise requires installing the sphinx-exercise package.
# The local extension applet.py allows us to include applets (developed by Julia van de Kris and Abel de Bruijn for the linear algebra open textbook; source https://gist.github.com/yustarandomname/2be0f45758d0fe3d2d765da4e621a547). See https://jupyterbook.org/en/stable/advanced/sphinx.html#local-sphinx-extensions about the local extensions.
sphinx:
config:
# html_js_files necessary for interactive plot in ch. 2, but breaks applet in ch. 3.
html_js_files:
- https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js
mathjax3_config:
......@@ -50,11 +52,15 @@ sphinx:
"inprod" : "\\innerproduct"
"diff" : "\\pdv"
# bibtex_reference_style: unsrt
local_extensions: # For the applet inclusion.
applet: _ext/
extra_extensions:
- sphinx_proof
- sphinx_exercise
- sphinx_togglebutton
# - sphinx_tojupyter
# Parse, for processing LaTeX-style math. See https://jupyterbook.org/en/stable/content/math.html#latex-style-math and https://myst-parser.readthedocs.io/en/latest/syntax/optional.html#syntax-amsmath
parse:
myst_enable_extensions:
......
import os
from urllib.parse import quote
from docutils import nodes
from docutils.parsers.rst import directives
from sphinx.directives.patches import Figure
from utils import parse_options, generate_style, ReviewStatus
DEFAULT_BASE_URL = 'https://openla.ewi.tudelft.nl/applet/'
class AppletDirective(Figure):
option_spec = Figure.option_spec.copy()
option_spec.update({
'url': directives.unchanged_required,
'fig': directives.unchanged_required,
'title': directives.unchanged,
'background': directives.unchanged,
'autoPlay': directives.unchanged,
'position': directives.unchanged,
'isPerspectiveCamera': directives.unchanged,
'enablePan': directives.unchanged,
'distance': directives.unchanged,
'zoom': directives.unchanged,
'height': directives.unchanged,
'width': directives.unchanged,
'status': directives.unchanged
})
required_arguments = 0
def run(self):
url = self.options.get('url')
fig = self.options.get('fig')
assert url is not None
assert fig is not None
self.arguments = [fig]
self.options['class'] = ['applet-print-figure']
(figure_node,) = Figure.run(self)
# Generate GET params and inline styling
params_dict = parse_options(self.options)
params = '&'.join([f'{key}={quote(value)}' for key, value in params_dict.items()])
status = ReviewStatus.parse(self.options.get('status', ''))
style = generate_style(self.options.get('width', None), self.options.get('height', None), status)
base_url = os.environ.get('BASE_URL', DEFAULT_BASE_URL)
full_url = f'{base_url}{url}{"?" if params else ""}{params}'
applet_html = f'''
<div class="applet" style="{style}">
<noscript class="loading-lazy">
<iframe src="{full_url}" allow="fullscreen" loading="lazy" frameborder="0"></iframe>
</noscript>
</div>
'''
applet_node = nodes.raw(None, applet_html, format='html')
# Add applet as the first child node of figure
figure_node.insert(0, applet_node)
return [figure_node]
def setup(app):
app.add_directive('applet', AppletDirective)
return {
'version': '0.1',
'parallel_read_safe': True,
'parallel_write_safe': True,
}
import enum
from typing import Optional
class ReviewStatus(enum.Enum):
UNREVIEWED = enum.auto()
IN_REVIEW = enum.auto()
REVIEWED = enum.auto()
@staticmethod
def parse(s: str):
match s:
case 'in-review':
return ReviewStatus.IN_REVIEW
case 'reviewed' | 'approved':
return ReviewStatus.REVIEWED
case _:
return ReviewStatus.UNREVIEWED
def generate_style(height: Optional[str], width: Optional[str], status: ReviewStatus):
'''
Given a height and width, generates an inline style that can be used in HTML.
'''
styles = ''
if height:
styles += f'height: {height};'
if width:
styles += f'width: {width};'
if status == ReviewStatus.UNREVIEWED:
styles += 'border: dotted red;'
elif status == ReviewStatus.IN_REVIEW:
styles += 'border: dotted yellow;'
return styles
def parse_value(val: str) -> str:
'''
Parses a string value to a string that can be used in a URL query parameter. This is a hacky way to use boolean in docutils.
(For some reason docutils can't parse 'true' or 'True' strings??)
'''
if val == 'enabled':
return 'true'
elif val == 'disabled':
return 'false'
else:
return str(val)
def parse_options(options: dict) -> dict:
# Settings keys that are passed along to the applet iframe
applet_keys = ['title', 'background', 'autoPlay', 'position', 'isPerspectiveCamera', 'enablePan', 'distance', 'zoom']
return {key: parse_value(val) for key, val in options.items() if key in applet_keys and val != ''}
.applet * {
width: 100%;
height: 500px; /* TODO: subject for discussion */
}
.applet-print-figure {
display: none;
}
@media print {
.applet iframe {
display: none;
}
.applet-print-figure {
display: initial;
}
}
img[data-lazy-src] {
will-change: contents;
}
/*# sourceMappingURL=loading-attribute-polyfill.css.map */
!(function (e, t) {
'object' == typeof exports && 'undefined' != typeof module
? (module.exports = t())
: 'function' == typeof define && define.amd
? define(t)
: ((e || self).loadingAttributePolyfill = t());
})(this, function () {
var e,
t = 'loading' in HTMLImageElement.prototype,
r = 'loading' in HTMLIFrameElement.prototype,
o = 'onscroll' in window;
function a(e) {
var t,
r,
o = [];
'picture' === e.parentNode.tagName.toLowerCase() &&
((r = (t = e.parentNode).querySelector('source[data-lazy-remove]')) &&
t.removeChild(r),
(o = Array.prototype.slice.call(
e.parentNode.querySelectorAll('source')
))),
o.push(e),
o.forEach(function (e) {
e.hasAttribute('data-lazy-srcset') &&
(e.setAttribute('srcset', e.getAttribute('data-lazy-srcset')),
e.removeAttribute('data-lazy-srcset'));
}),
e.setAttribute('src', e.getAttribute('data-lazy-src')),
e.removeAttribute('data-lazy-src');
}
function n(a) {
var n = document.createElement('div');
for (
n.innerHTML = (function (a) {
var n = a.textContent || a.innerHTML,
i =
'data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 ' +
((n.match(/width=['"](\d+)['"]/) || !1)[1] || 1) +
' ' +
((n.match(/height=['"](\d+)['"]/) || !1)[1] || 1) +
'%27%3E%3C/svg%3E';
return (
((/<img/gim.test(n) && !t) || (/<iframe/gim.test(n) && !r)) &&
o &&
(n =
void 0 === e
? n.replace(/(?:\r\n|\r|\n|\t| )src=/g, ' lazyload="1" src=')
: (n = n.replace(
'<source',
'<source srcset="' +
i +
'" data-lazy-remove="true"></source>\n<source'
))
.replace(
/(?:\r\n|\r|\n|\t| )srcset=/g,
' data-lazy-srcset='
)
.replace(
/(?:\r\n|\r|\n|\t| )src=/g,
' src="' + i + '" data-lazy-src='
)),
n
);
})(a);
n.firstChild;
) {
var i = n.firstChild;
if (
o &&
void 0 !== e &&
i.tagName &&
((('img' === i.tagName.toLowerCase() ||
'picture' === i.tagName.toLowerCase()) &&
!t) ||
('iframe' === i.tagName.toLowerCase() && !r))
) {
var c =
'picture' === i.tagName.toLowerCase() ? n.querySelector('img') : i;
e.observe(c);
}
a.parentNode.insertBefore(i, a);
}
a.parentNode.removeChild(a);
}
window.NodeList &&
!NodeList.prototype.forEach &&
(NodeList.prototype.forEach = Array.prototype.forEach),
'IntersectionObserver' in window &&
(e = new IntersectionObserver(
function (e, t) {
e.forEach(function (e) {
if (0 !== e.intersectionRatio) {
var r = e.target;
t.unobserve(r), a(r);
}
});
},
{ rootMargin: '0px 0px 256px 0px', threshold: 0.01 }
));
var i = function () {
document.querySelectorAll('noscript.loading-lazy').forEach(function (e) {
return n(e);
}),
void 0 !== window.matchMedia &&
window.matchMedia('print').addListener(function (e) {
e.matches &&
document
.querySelectorAll(
'img[loading="lazy"][data-lazy-src],iframe[loading="lazy"][data-lazy-src]'
)
.forEach(function (e) {
a(e);
});
});
};
return (
/comp|inter/.test(document.readyState)
? i()
: 'addEventListener' in document
? document.addEventListener('DOMContentLoaded', function () {
i();
})
: document.attachEvent('onreadystatechange', function () {
'complete' === document.readyState && i();
}),
{ prepareElement: n }
);
});
//# sourceMappingURL=loading-attribute-polyfill.umd.js.map
......@@ -9,6 +9,7 @@ parts:
chapters:
- file: content/markdown
- file: content/interactivemarkdown
- file: content/vectors
- file: content/testfile
- file: content/jupyterquiz.md
- caption: Demonstrating Jupyter notebooks
......
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="249.912pt" height="286.683pt" viewBox="0 0 249.912 286.683" version="1.2">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph0-1">
<path style="stroke:none;" d="M 7.859375 -2.75 C 8.0625 -2.75 8.28125 -2.75 8.28125 -2.984375 C 8.28125 -3.21875 8.0625 -3.21875 7.859375 -3.21875 L 1.40625 -3.21875 C 1.203125 -3.21875 0.984375 -3.21875 0.984375 -2.984375 C 0.984375 -2.75 1.203125 -2.75 1.40625 -2.75 Z M 7.859375 -2.75 "/>
</symbol>
<symbol overflow="visible" id="glyph1-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph1-1">
<path style="stroke:none;" d="M 5.25 -2 L 4.984375 -2 C 4.953125 -1.796875 4.859375 -1.140625 4.734375 -0.953125 C 4.65625 -0.84375 3.96875 -0.84375 3.609375 -0.84375 L 1.40625 -0.84375 C 1.734375 -1.125 2.453125 -1.890625 2.765625 -2.171875 C 4.578125 -3.84375 5.25 -4.46875 5.25 -5.640625 C 5.25 -7.015625 4.171875 -7.9375 2.78125 -7.9375 C 1.390625 -7.9375 0.578125 -6.75 0.578125 -5.734375 C 0.578125 -5.125 1.109375 -5.125 1.140625 -5.125 C 1.390625 -5.125 1.703125 -5.296875 1.703125 -5.6875 C 1.703125 -6.015625 1.484375 -6.25 1.140625 -6.25 C 1.03125 -6.25 1.015625 -6.25 0.984375 -6.234375 C 1.203125 -7.046875 1.84375 -7.59375 2.625 -7.59375 C 3.640625 -7.59375 4.265625 -6.75 4.265625 -5.640625 C 4.265625 -4.625 3.671875 -3.75 3 -2.984375 L 0.578125 -0.28125 L 0.578125 0 L 4.9375 0 Z M 5.25 -2 "/>
</symbol>
<symbol overflow="visible" id="glyph1-2">
<path style="stroke:none;" d="M 4.3125 -7.765625 C 4.3125 -8 4.3125 -8.0625 4.140625 -8.0625 C 4.046875 -8.0625 4.015625 -8.0625 3.921875 -7.921875 L 0.328125 -2.34375 L 0.328125 -2 L 3.46875 -2 L 3.46875 -0.90625 C 3.46875 -0.46875 3.4375 -0.34375 2.5625 -0.34375 L 2.328125 -0.34375 L 2.328125 0 C 2.609375 -0.03125 3.546875 -0.03125 3.875 -0.03125 C 4.21875 -0.03125 5.171875 -0.03125 5.4375 0 L 5.4375 -0.34375 L 5.203125 -0.34375 C 4.34375 -0.34375 4.3125 -0.46875 4.3125 -0.90625 L 4.3125 -2 L 5.515625 -2 L 5.515625 -2.34375 L 4.3125 -2.34375 Z M 3.515625 -6.84375 L 3.515625 -2.34375 L 0.625 -2.34375 Z M 3.515625 -6.84375 "/>
</symbol>
<symbol overflow="visible" id="glyph1-3">
<path style="stroke:none;" d="M 3.4375 -7.65625 C 3.4375 -7.921875 3.4375 -7.9375 3.203125 -7.9375 C 2.90625 -7.609375 2.3125 -7.171875 1.09375 -7.171875 L 1.09375 -6.828125 C 1.359375 -6.828125 1.953125 -6.828125 2.609375 -7.140625 L 2.609375 -0.921875 C 2.609375 -0.484375 2.578125 -0.34375 1.53125 -0.34375 L 1.15625 -0.34375 L 1.15625 0 C 1.484375 -0.03125 2.640625 -0.03125 3.03125 -0.03125 C 3.421875 -0.03125 4.578125 -0.03125 4.890625 0 L 4.890625 -0.34375 L 4.53125 -0.34375 C 3.46875 -0.34375 3.4375 -0.484375 3.4375 -0.921875 Z M 3.4375 -7.65625 "/>
</symbol>
<symbol overflow="visible" id="glyph1-4">
<path style="stroke:none;" d="M 2.203125 -4.28125 C 2 -4.28125 1.953125 -4.265625 1.953125 -4.15625 C 1.953125 -4.03125 2 -4.03125 2.21875 -4.03125 L 2.765625 -4.03125 C 3.78125 -4.03125 4.234375 -3.203125 4.234375 -2.046875 C 4.234375 -0.484375 3.421875 -0.078125 2.84375 -0.078125 C 2.265625 -0.078125 1.296875 -0.34375 0.9375 -1.140625 C 1.328125 -1.078125 1.671875 -1.296875 1.671875 -1.71875 C 1.671875 -2.0625 1.421875 -2.296875 1.09375 -2.296875 C 0.796875 -2.296875 0.484375 -2.140625 0.484375 -1.6875 C 0.484375 -0.625 1.546875 0.25 2.875 0.25 C 4.296875 0.25 5.34375 -0.828125 5.34375 -2.046875 C 5.34375 -3.140625 4.46875 -4 3.3125 -4.203125 C 4.359375 -4.5 5.03125 -5.375 5.03125 -6.296875 C 5.03125 -7.25 4.046875 -7.9375 2.890625 -7.9375 C 1.6875 -7.9375 0.8125 -7.203125 0.8125 -6.34375 C 0.8125 -5.859375 1.1875 -5.765625 1.359375 -5.765625 C 1.609375 -5.765625 1.890625 -5.9375 1.890625 -6.296875 C 1.890625 -6.6875 1.609375 -6.859375 1.34375 -6.859375 C 1.28125 -6.859375 1.25 -6.859375 1.21875 -6.84375 C 1.671875 -7.65625 2.796875 -7.65625 2.859375 -7.65625 C 3.25 -7.65625 4.015625 -7.46875 4.015625 -6.296875 C 4.015625 -6.078125 3.984375 -5.40625 3.640625 -4.890625 C 3.28125 -4.375 2.875 -4.328125 2.546875 -4.328125 Z M 2.203125 -4.28125 "/>
</symbol>
<symbol overflow="visible" id="glyph1-5">
<path style="stroke:none;" d="M 1.53125 -6.84375 C 2.046875 -6.671875 2.453125 -6.65625 2.59375 -6.65625 C 3.9375 -6.65625 4.796875 -7.65625 4.796875 -7.8125 C 4.796875 -7.859375 4.78125 -7.921875 4.703125 -7.921875 C 4.671875 -7.921875 4.65625 -7.921875 4.546875 -7.875 C 3.875 -7.59375 3.3125 -7.5625 3 -7.5625 C 2.203125 -7.5625 1.640625 -7.796875 1.421875 -7.890625 C 1.34375 -7.921875 1.3125 -7.921875 1.296875 -7.921875 C 1.203125 -7.921875 1.203125 -7.859375 1.203125 -7.65625 L 1.203125 -4.125 C 1.203125 -3.90625 1.203125 -3.828125 1.34375 -3.828125 C 1.40625 -3.828125 1.421875 -3.84375 1.546875 -3.984375 C 1.875 -4.484375 2.4375 -4.765625 3.03125 -4.765625 C 3.671875 -4.765625 3.96875 -4.171875 4.078125 -3.96875 C 4.28125 -3.515625 4.28125 -2.921875 4.28125 -2.46875 C 4.28125 -2.015625 4.28125 -1.34375 3.953125 -0.796875 C 3.6875 -0.375 3.21875 -0.078125 2.703125 -0.078125 C 1.90625 -0.078125 1.140625 -0.609375 0.921875 -1.484375 C 0.984375 -1.453125 1.046875 -1.4375 1.109375 -1.4375 C 1.3125 -1.4375 1.640625 -1.5625 1.640625 -1.96875 C 1.640625 -2.296875 1.40625 -2.5 1.109375 -2.5 C 0.890625 -2.5 0.578125 -2.390625 0.578125 -1.921875 C 0.578125 -0.90625 1.390625 0.25 2.71875 0.25 C 4.078125 0.25 5.25 -0.890625 5.25 -2.40625 C 5.25 -3.8125 4.296875 -5 3.046875 -5 C 2.359375 -5 1.84375 -4.703125 1.53125 -4.375 Z M 1.53125 -6.84375 "/>
</symbol>
<symbol overflow="visible" id="glyph2-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph2-1">
<path style="stroke:none;" d="M 8.671875 -5.234375 C 8.671875 -7.203125 7.375 -8.40625 5.703125 -8.40625 C 3.15625 -8.40625 0.578125 -5.65625 0.578125 -2.90625 C 0.578125 -1.03125 1.8125 0.25 3.546875 0.25 C 6.046875 0.25 8.671875 -2.359375 8.671875 -5.234375 Z M 3.609375 -0.03125 C 2.640625 -0.03125 1.59375 -0.734375 1.59375 -2.609375 C 1.59375 -3.6875 2 -5.46875 2.96875 -6.65625 C 3.84375 -7.71875 4.84375 -8.140625 5.640625 -8.140625 C 6.703125 -8.140625 7.71875 -7.375 7.71875 -5.65625 C 7.71875 -4.59375 7.265625 -2.9375 6.453125 -1.796875 C 5.59375 -0.578125 4.5 -0.03125 3.609375 -0.03125 Z M 3.609375 -0.03125 "/>
</symbol>
<symbol overflow="visible" id="glyph2-2">
<path style="stroke:none;" d="M 5.65625 -4.875 C 5.28125 -4.796875 5.140625 -4.515625 5.140625 -4.28125 C 5.140625 -4 5.359375 -3.90625 5.53125 -3.90625 C 5.890625 -3.90625 6.140625 -4.21875 6.140625 -4.53125 C 6.140625 -5.03125 5.5625 -5.265625 5.0625 -5.265625 C 4.328125 -5.265625 3.921875 -4.546875 3.8125 -4.328125 C 3.546875 -5.21875 2.8125 -5.265625 2.59375 -5.265625 C 1.375 -5.265625 0.734375 -3.703125 0.734375 -3.4375 C 0.734375 -3.390625 0.78125 -3.328125 0.859375 -3.328125 C 0.953125 -3.328125 0.984375 -3.40625 1 -3.453125 C 1.40625 -4.78125 2.203125 -5.03125 2.546875 -5.03125 C 3.09375 -5.03125 3.203125 -4.53125 3.203125 -4.234375 C 3.203125 -3.96875 3.125 -3.703125 2.984375 -3.125 L 2.578125 -1.5 C 2.40625 -0.78125 2.046875 -0.125 1.421875 -0.125 C 1.359375 -0.125 1.0625 -0.125 0.8125 -0.28125 C 1.234375 -0.359375 1.34375 -0.71875 1.34375 -0.859375 C 1.34375 -1.09375 1.15625 -1.234375 0.9375 -1.234375 C 0.640625 -1.234375 0.328125 -0.984375 0.328125 -0.609375 C 0.328125 -0.109375 0.890625 0.125 1.40625 0.125 C 1.984375 0.125 2.390625 -0.328125 2.640625 -0.828125 C 2.828125 -0.125 3.421875 0.125 3.875 0.125 C 5.078125 0.125 5.734375 -1.4375 5.734375 -1.703125 C 5.734375 -1.765625 5.6875 -1.8125 5.609375 -1.8125 C 5.5 -1.8125 5.484375 -1.75 5.453125 -1.65625 C 5.140625 -0.609375 4.4375 -0.125 3.90625 -0.125 C 3.484375 -0.125 3.265625 -0.4375 3.265625 -0.921875 C 3.265625 -1.1875 3.3125 -1.375 3.5 -2.15625 L 3.921875 -3.78125 C 4.09375 -4.5 4.5 -5.03125 5.046875 -5.03125 C 5.078125 -5.03125 5.40625 -5.03125 5.65625 -4.875 Z M 5.65625 -4.875 "/>
</symbol>
<symbol overflow="visible" id="glyph3-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph3-1">
<path style="stroke:none;" d="M 3.890625 21.015625 L 4.71875 21.015625 L 4.71875 0.359375 L 7.859375 0.359375 L 7.859375 -0.46875 L 3.890625 -0.46875 Z M 3.890625 21.015625 "/>
</symbol>
<symbol overflow="visible" id="glyph3-2">
<path style="stroke:none;" d="M 3.890625 21 L 7.859375 21 L 7.859375 20.171875 L 4.71875 20.171875 L 4.71875 -0.484375 L 3.890625 -0.484375 Z M 3.890625 21 "/>
</symbol>
<symbol overflow="visible" id="glyph3-3">
<path style="stroke:none;" d="M 3.234375 21.015625 L 4.0625 21.015625 L 4.0625 -0.46875 L 0.078125 -0.46875 L 0.078125 0.359375 L 3.234375 0.359375 Z M 3.234375 21.015625 "/>
</symbol>
<symbol overflow="visible" id="glyph3-4">
<path style="stroke:none;" d="M 3.234375 20.171875 L 0.078125 20.171875 L 0.078125 21 L 4.0625 21 L 4.0625 -0.484375 L 3.234375 -0.484375 Z M 3.234375 20.171875 "/>
</symbol>
<symbol overflow="visible" id="glyph4-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph4-1">
<path style="stroke:none;" d="M 2.5 -5.078125 C 2.5 -5.296875 2.484375 -5.296875 2.265625 -5.296875 C 1.9375 -4.984375 1.515625 -4.796875 0.765625 -4.796875 L 0.765625 -4.53125 C 0.984375 -4.53125 1.40625 -4.53125 1.875 -4.734375 L 1.875 -0.65625 C 1.875 -0.359375 1.84375 -0.265625 1.09375 -0.265625 L 0.8125 -0.265625 L 0.8125 0 C 1.140625 -0.03125 1.828125 -0.03125 2.1875 -0.03125 C 2.546875 -0.03125 3.234375 -0.03125 3.5625 0 L 3.5625 -0.265625 L 3.28125 -0.265625 C 2.53125 -0.265625 2.5 -0.359375 2.5 -0.65625 Z M 2.5 -5.078125 "/>
</symbol>
<symbol overflow="visible" id="glyph4-2">
<path style="stroke:none;" d="M 2.25 -1.625 C 2.375 -1.75 2.703125 -2.015625 2.84375 -2.125 C 3.328125 -2.578125 3.796875 -3.015625 3.796875 -3.734375 C 3.796875 -4.6875 3 -5.296875 2.015625 -5.296875 C 1.046875 -5.296875 0.421875 -4.578125 0.421875 -3.859375 C 0.421875 -3.46875 0.734375 -3.421875 0.84375 -3.421875 C 1.015625 -3.421875 1.265625 -3.53125 1.265625 -3.84375 C 1.265625 -4.25 0.859375 -4.25 0.765625 -4.25 C 1 -4.84375 1.53125 -5.03125 1.921875 -5.03125 C 2.65625 -5.03125 3.046875 -4.40625 3.046875 -3.734375 C 3.046875 -2.90625 2.46875 -2.296875 1.515625 -1.34375 L 0.515625 -0.296875 C 0.421875 -0.21875 0.421875 -0.203125 0.421875 0 L 3.5625 0 L 3.796875 -1.421875 L 3.546875 -1.421875 C 3.53125 -1.265625 3.46875 -0.875 3.375 -0.71875 C 3.328125 -0.65625 2.71875 -0.65625 2.59375 -0.65625 L 1.171875 -0.65625 Z M 2.25 -1.625 "/>
</symbol>
<symbol overflow="visible" id="glyph4-3">
<path style="stroke:none;" d="M 2.015625 -2.65625 C 2.640625 -2.65625 3.046875 -2.203125 3.046875 -1.359375 C 3.046875 -0.359375 2.484375 -0.078125 2.0625 -0.078125 C 1.625 -0.078125 1.015625 -0.234375 0.734375 -0.65625 C 1.03125 -0.65625 1.234375 -0.84375 1.234375 -1.09375 C 1.234375 -1.359375 1.046875 -1.53125 0.78125 -1.53125 C 0.578125 -1.53125 0.34375 -1.40625 0.34375 -1.078125 C 0.34375 -0.328125 1.15625 0.171875 2.078125 0.171875 C 3.125 0.171875 3.875 -0.5625 3.875 -1.359375 C 3.875 -2.03125 3.34375 -2.625 2.53125 -2.8125 C 3.15625 -3.03125 3.640625 -3.5625 3.640625 -4.203125 C 3.640625 -4.84375 2.921875 -5.296875 2.09375 -5.296875 C 1.234375 -5.296875 0.59375 -4.84375 0.59375 -4.234375 C 0.59375 -3.9375 0.78125 -3.8125 1 -3.8125 C 1.25 -3.8125 1.40625 -3.984375 1.40625 -4.21875 C 1.40625 -4.515625 1.140625 -4.625 0.96875 -4.625 C 1.3125 -5.0625 1.921875 -5.09375 2.0625 -5.09375 C 2.265625 -5.09375 2.875 -5.03125 2.875 -4.203125 C 2.875 -3.65625 2.640625 -3.3125 2.53125 -3.1875 C 2.296875 -2.9375 2.109375 -2.921875 1.625 -2.890625 C 1.46875 -2.890625 1.40625 -2.875 1.40625 -2.765625 C 1.40625 -2.65625 1.484375 -2.65625 1.625 -2.65625 Z M 2.015625 -2.65625 "/>
</symbol>
</g>
</defs>
<g id="surface1">
<path style="fill:none;stroke-width:0.19925;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(50%,50%,50%);stroke-opacity:1;stroke-miterlimit:10;" d="M 78.855439 9.170069 L 83.094496 8.83376 M 34.016851 -28.785917 L 38.255908 -29.122226 M 11.597557 -47.76391 L 15.836614 -48.100219 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style="fill:none;stroke-width:0.19925;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(50%,50%,50%);stroke-opacity:1;stroke-miterlimit:10;" d="M -13.160258 -2.804094 L -16.40603 -5.549314 M 23.509151 -5.701826 L 20.263378 -8.450956 M 96.847968 -11.505111 L 93.602196 -14.250331 M 133.513467 -14.402843 L 130.271605 -17.151973 M 170.182875 -17.304485 L 166.937103 -20.053616 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 84.338057 11.848809 L 10.752874 -50.44265 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 54.5625 265.777344 L 58.019531 264.933594 L 56.082031 264.492188 L 55.964844 262.503906 "/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M -25.783576 -3.304647 L 177.573851 -19.392729 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 224.703125 233.632812 L 221.65625 231.792969 L 222.71875 233.476562 L 221.40625 234.96875 "/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="126.036805" y="218.57531"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="135.324535" y="218.57531"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="83.594735" y="254.501585"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-2" x="61.199499" y="273.458623"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="20.441567" y="229.288464"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="29.729297" y="229.288464"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="57.069066" y="232.185261"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-3" x="66.356796" y="232.185261"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-3" x="135.355501" y="237.643226"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="171.983" y="240.541022"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-4" x="208.610499" y="243.437818"/>
</g>
<path style="fill:none;stroke-width:0.19925;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(50%,50%,50%);stroke-opacity:1;stroke-miterlimit:10;" d="M -14.783144 -6.300143 L -14.783144 -2.049354 M 21.886265 -9.201786 L 21.886265 -4.950997 M 95.225082 -15.005071 L 95.225082 -10.750371 M 131.89058 -17.902803 L 131.89058 -13.652014 M 168.559989 -20.804445 L 168.559989 -16.553656 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style="fill:none;stroke-width:0.19925;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(50%,50%,50%);stroke-opacity:1;stroke-miterlimit:10;" d="M 56.436145 27.229078 L 60.675202 26.892769 M 56.436145 64.26608 L 60.675202 63.929771 M 56.436145 101.303083 L 60.675202 100.970684 M 56.436145 138.343995 L 60.675202 138.007686 M 56.436145 175.380998 L 60.675202 175.044689 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 58.555673 -28.496535 L 58.555673 191.738909 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 103.832031 20.585938 L 102.238281 23.769531 L 103.832031 22.578125 L 105.421875 23.769531 "/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-3" x="91.770695" y="193.016572"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="91.770695" y="156.02048"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-4" x="91.770695" y="119.02339"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-2" x="91.770695" y="82.026299"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph1-5" x="91.770695" y="45.030208"/>
</g>
<path style="fill:none;stroke-width:0.19925;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(50%,50%,50%);stroke-opacity:1;stroke-miterlimit:10;" d="M 80.974967 6.874565 L 80.974967 11.125354 M 36.136379 -31.081421 L 36.136379 -26.830632 M 13.717085 -50.059414 L 13.717085 -45.808625 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style="fill:none;stroke-width:0.19925;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(50%,50%,50%);stroke-opacity:1;stroke-miterlimit:10;" d="M 60.17856 28.433534 L 56.932787 25.688314 M 60.17856 65.474446 L 56.932787 62.725316 M 60.17856 102.511449 L 56.932787 99.762318 M 60.17856 139.548451 L 56.932787 136.803231 M 60.17856 176.585453 L 56.932787 173.840233 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph2-1" x="90.473129" y="228.151721"/>
</g>
<path style="fill:none;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,65.098572%,83.921814%);stroke-opacity:1;stroke-dasharray:1.19553,1.99255;stroke-miterlimit:10;" d="M 157.352297 82.94687 L 157.352297 -28.168047 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style="fill:none;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,65.098572%,83.921814%);stroke-opacity:1;stroke-dasharray:1.19553,1.99255;stroke-miterlimit:10;" d="M 157.352297 82.94687 L 58.555673 101.138839 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style="fill:none;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,65.098572%,83.921814%);stroke-opacity:1;stroke-dasharray:1.19553,1.99255;stroke-miterlimit:10;" d="M 157.352297 -28.168047 L 168.559989 -18.677095 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style="fill:none;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,65.098572%,83.921814%);stroke-opacity:1;stroke-dasharray:1.19553,1.99255;stroke-miterlimit:10;" d="M 157.352297 -28.168047 L 47.344071 -19.46703 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style="fill:none;stroke-width:1.59404;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(0%,65.098572%,83.921814%);stroke-opacity:1;stroke-miterlimit:10;" d="M 58.555673 -9.976078 L 154.595346 80.354163 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,65.098572%,83.921814%);fill-opacity:1;" d="M 202.519531 131.25 L 196.039062 133.191406 L 199.765625 133.839844 L 200.183594 137.597656 "/>
<g style="fill:rgb(0%,65.098572%,83.921814%);fill-opacity:1;">
<use xlink:href="#glyph3-1" x="206.612708" y="110.234109"/>
</g>
<g style="fill:rgb(0%,65.098572%,83.921814%);fill-opacity:1;">
<use xlink:href="#glyph3-2" x="206.612708" y="131.72934"/>
</g>
<g style="fill:rgb(0%,65.098572%,83.921814%);fill-opacity:1;">
<use xlink:href="#glyph1-3" x="214.573905" y="119.707633"/>
</g>
<g style="fill:rgb(0%,65.098572%,83.921814%);fill-opacity:1;">
<use xlink:href="#glyph1-4" x="214.573905" y="134.137677"/>
</g>
<g style="fill:rgb(0%,65.098572%,83.921814%);fill-opacity:1;">
<use xlink:href="#glyph1-4" x="214.573905" y="148.567721"/>
</g>
<g style="fill:rgb(0%,65.098572%,83.921814%);fill-opacity:1;">
<use xlink:href="#glyph3-3" x="220.42044" y="110.234109"/>
</g>
<g style="fill:rgb(0%,65.098572%,83.921814%);fill-opacity:1;">
<use xlink:href="#glyph3-4" x="220.42044" y="131.72934"/>
</g>
<path style="fill:none;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,63.920593%,56.469727%);stroke-opacity:1;stroke-dasharray:1.19553,1.99255;stroke-miterlimit:10;" d="M -0.533029 48.021575 L -0.533029 -26.05634 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style="fill:none;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,63.920593%,56.469727%);stroke-opacity:1;stroke-dasharray:1.19553,1.99255;stroke-miterlimit:10;" d="M -0.533029 48.021575 L 58.555673 64.097926 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style="fill:none;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,63.920593%,56.469727%);stroke-opacity:1;stroke-dasharray:1.19553,1.99255;stroke-miterlimit:10;" d="M -0.533029 -26.05634 L 36.136379 -28.954071 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style="fill:none;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,63.920593%,56.469727%);stroke-opacity:1;stroke-dasharray:1.19553,1.99255;stroke-miterlimit:10;" d="M -0.533029 -26.05634 L 21.886265 -7.078347 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style="fill:none;stroke-width:1.59404;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(0%,63.920593%,56.469727%);stroke-opacity:1;stroke-miterlimit:10;" d="M 58.555673 -9.976078 L 2.169174 45.370209 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,63.920593%,56.469727%);fill-opacity:1;" d="M 44.808594 166.136719 L 47.007812 172.535156 L 47.507812 168.785156 L 51.246094 168.214844 "/>
<g style="fill:rgb(0%,63.920593%,56.469727%);fill-opacity:1;">
<use xlink:href="#glyph3-1" x="9.654495" y="145.119534"/>
</g>
<g style="fill:rgb(0%,63.920593%,56.469727%);fill-opacity:1;">
<use xlink:href="#glyph3-2" x="9.654495" y="166.615764"/>
</g>
<g style="fill:rgb(0%,63.920593%,56.469727%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="22.259557" y="154.594057"/>
</g>
<g style="fill:rgb(0%,63.920593%,56.469727%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="17.615692" y="169.024101"/>
</g>
<g style="fill:rgb(0%,63.920593%,56.469727%);fill-opacity:1;">
<use xlink:href="#glyph1-3" x="26.903422" y="169.024101"/>
</g>
<g style="fill:rgb(0%,63.920593%,56.469727%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="22.259557" y="183.453147"/>
</g>
<g style="fill:rgb(0%,63.920593%,56.469727%);fill-opacity:1;">
<use xlink:href="#glyph3-3" x="32.749957" y="145.119534"/>
</g>
<g style="fill:rgb(0%,63.920593%,56.469727%);fill-opacity:1;">
<use xlink:href="#glyph3-4" x="32.749957" y="166.615764"/>
</g>
<path style="fill:none;stroke-width:1.59404;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(0%,63.920593%,56.469727%);stroke-opacity:1;stroke-miterlimit:10;" d="M 157.352297 82.94687 L 100.965798 138.293158 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,63.920593%,56.469727%);fill-opacity:1;" d="M 143.496094 73.316406 L 145.695312 79.714844 L 146.195312 75.964844 L 149.933594 75.394531 "/>
<path style="fill:none;stroke-width:1.59404;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(76.470947%,19.216919%,18.429565%);stroke-opacity:1;stroke-miterlimit:10;" d="M 58.555673 -9.976078 L 97.297684 137.284231 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(76.470947%,19.216919%,18.429565%);fill-opacity:1;" d="M 143.496094 73.316406 L 139.03125 78.398438 L 142.53125 76.972656 L 144.882812 79.9375 "/>
<g style="fill:rgb(76.470947%,19.216919%,18.429565%);fill-opacity:1;">
<use xlink:href="#glyph3-1" x="132.609537" y="26.558633"/>
</g>
<g style="fill:rgb(76.470947%,19.216919%,18.429565%);fill-opacity:1;">
<use xlink:href="#glyph3-2" x="132.609537" y="48.054863"/>
</g>
<g style="fill:rgb(76.470947%,19.216919%,18.429565%);fill-opacity:1;">
<use xlink:href="#glyph1-4" x="140.570734" y="36.033156"/>
</g>
<g style="fill:rgb(76.470947%,19.216919%,18.429565%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="140.570734" y="50.4632"/>
</g>
<g style="fill:rgb(76.470947%,19.216919%,18.429565%);fill-opacity:1;">
<use xlink:href="#glyph1-5" x="140.570734" y="64.892245"/>
</g>
<g style="fill:rgb(76.470947%,19.216919%,18.429565%);fill-opacity:1;">
<use xlink:href="#glyph3-3" x="146.417269" y="26.558633"/>
</g>
<g style="fill:rgb(76.470947%,19.216919%,18.429565%);fill-opacity:1;">
<use xlink:href="#glyph3-4" x="146.417269" y="48.054863"/>
</g>
<path style="fill:none;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(76.470947%,19.216919%,18.429565%);stroke-opacity:1;stroke-dasharray:1.19553,1.99255;stroke-miterlimit:10;" d="M 98.263594 140.944524 L 98.263594 -44.244398 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style="fill:none;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(76.470947%,19.216919%,18.429565%);stroke-opacity:1;stroke-dasharray:1.19553,1.99255;stroke-miterlimit:10;" d="M 98.263594 140.944524 L 58.555673 175.212843 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style="fill:none;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(76.470947%,19.216919%,18.429565%);stroke-opacity:1;stroke-dasharray:1.19553,1.99255;stroke-miterlimit:10;" d="M 98.263594 -44.244398 L 24.924777 -38.445023 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<path style="fill:none;stroke-width:1.19553;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(76.470947%,19.216919%,18.429565%);stroke-opacity:1;stroke-dasharray:1.19553,1.99255;stroke-miterlimit:10;" d="M 98.263594 -44.244398 L 131.89058 -15.779363 " transform="matrix(0.998895,0,0,-0.998895,45.341034,214.105253)"/>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph2-2" x="39.093942" y="275.014902"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph4-1" x="45.738595" y="276.805922"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph2-2" x="228.798176" y="235.307808"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph4-2" x="235.442829" y="237.098828"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph2-2" x="98.144647" y="14.701744"/>
</g>
<g style="fill:rgb(0%,0%,0%);fill-opacity:1;">
<use xlink:href="#glyph4-3" x="104.789299" y="16.493762"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="206.006pt" height="132.584pt" viewBox="0 0 206.006 132.584" version="1.2">
<defs>
<g>
<symbol overflow="visible" id="glyph0-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph0-1">
<path style="stroke:none;" d="M 4.359375 -7.3125 C 4.453125 -7.75 4.5 -7.78125 4.96875 -7.78125 L 6.515625 -7.78125 C 7.859375 -7.78125 7.859375 -6.640625 7.859375 -6.53125 C 7.859375 -5.5625 6.890625 -4.34375 5.328125 -4.34375 L 3.609375 -4.34375 Z M 6.359375 -4.25 C 7.65625 -4.484375 8.828125 -5.390625 8.828125 -6.484375 C 8.828125 -7.40625 8.015625 -8.125 6.671875 -8.125 L 2.859375 -8.125 C 2.625 -8.125 2.515625 -8.125 2.515625 -7.890625 C 2.515625 -7.78125 2.625 -7.78125 2.8125 -7.78125 C 3.53125 -7.78125 3.53125 -7.6875 3.53125 -7.546875 C 3.53125 -7.53125 3.53125 -7.453125 3.484375 -7.28125 L 1.875 -0.875 C 1.765625 -0.46875 1.75 -0.34375 0.921875 -0.34375 C 0.6875 -0.34375 0.578125 -0.34375 0.578125 -0.125 C 0.578125 0 0.640625 0 0.875 0 L 4.953125 0 C 6.78125 0 8.1875 -1.375 8.1875 -2.578125 C 8.1875 -3.5625 7.328125 -4.15625 6.359375 -4.25 Z M 4.671875 -0.34375 L 3.0625 -0.34375 C 2.90625 -0.34375 2.875 -0.34375 2.8125 -0.359375 C 2.671875 -0.375 2.65625 -0.390625 2.65625 -0.484375 C 2.65625 -0.578125 2.6875 -0.640625 2.71875 -0.75 L 3.546875 -4.109375 L 5.78125 -4.109375 C 7.1875 -4.109375 7.1875 -2.796875 7.1875 -2.703125 C 7.1875 -1.5625 6.140625 -0.34375 4.671875 -0.34375 Z M 4.671875 -0.34375 "/>
</symbol>
<symbol overflow="visible" id="glyph0-2">
<path style="stroke:none;" d="M 8.875 -8.265625 C 8.875 -8.375 8.796875 -8.375 8.78125 -8.375 C 8.75 -8.375 8.703125 -8.375 8.609375 -8.25 L 7.78125 -7.25 C 7.375 -7.96875 6.71875 -8.375 5.828125 -8.375 C 3.265625 -8.375 0.59375 -5.765625 0.59375 -2.96875 C 0.59375 -0.984375 1.984375 0.25 3.71875 0.25 C 4.671875 0.25 5.5 -0.15625 6.1875 -0.734375 C 7.234375 -1.609375 7.53125 -2.765625 7.53125 -2.859375 C 7.53125 -2.953125 7.4375 -2.953125 7.40625 -2.953125 C 7.296875 -2.953125 7.28125 -2.890625 7.265625 -2.84375 C 6.71875 -0.984375 5.109375 -0.09375 3.921875 -0.09375 C 2.65625 -0.09375 1.5625 -0.90625 1.5625 -2.59375 C 1.5625 -2.96875 1.6875 -5.046875 3.03125 -6.59375 C 3.6875 -7.359375 4.796875 -8.03125 5.9375 -8.03125 C 7.234375 -8.03125 7.828125 -6.9375 7.828125 -5.734375 C 7.828125 -5.421875 7.78125 -5.15625 7.78125 -5.109375 C 7.78125 -5 7.90625 -5 7.9375 -5 C 8.078125 -5 8.078125 -5.015625 8.140625 -5.234375 Z M 8.875 -8.265625 "/>
</symbol>
<symbol overflow="visible" id="glyph0-3">
<path style="stroke:none;" d="M 2.015625 -1.3125 C 1.609375 -0.625 1.203125 -0.375 0.625 -0.34375 C 0.5 -0.328125 0.40625 -0.328125 0.40625 -0.125 C 0.40625 -0.046875 0.46875 0 0.546875 0 C 0.765625 0 1.296875 -0.03125 1.515625 -0.03125 C 1.859375 -0.03125 2.234375 0 2.5625 0 C 2.640625 0 2.78125 0 2.78125 -0.21875 C 2.78125 -0.328125 2.6875 -0.34375 2.609375 -0.34375 C 2.34375 -0.375 2.109375 -0.46875 2.109375 -0.75 C 2.109375 -0.921875 2.1875 -1.046875 2.34375 -1.3125 L 3.25 -2.8125 L 6.28125 -2.8125 C 6.296875 -2.703125 6.296875 -2.609375 6.296875 -2.5 C 6.34375 -2.1875 6.484375 -0.953125 6.484375 -0.71875 C 6.484375 -0.375 5.875 -0.34375 5.6875 -0.34375 C 5.546875 -0.34375 5.421875 -0.34375 5.421875 -0.125 C 5.421875 0 5.53125 0 5.59375 0 C 5.796875 0 6.046875 -0.03125 6.25 -0.03125 L 6.921875 -0.03125 C 7.640625 -0.03125 8.171875 0 8.1875 0 C 8.265625 0 8.390625 0 8.390625 -0.21875 C 8.390625 -0.34375 8.28125 -0.34375 8.109375 -0.34375 C 7.453125 -0.34375 7.4375 -0.453125 7.40625 -0.8125 L 6.6875 -8.234375 C 6.65625 -8.46875 6.609375 -8.484375 6.484375 -8.484375 C 6.359375 -8.484375 6.296875 -8.46875 6.1875 -8.28125 Z M 3.453125 -3.15625 L 5.84375 -7.140625 L 6.25 -3.15625 Z M 3.453125 -3.15625 "/>
</symbol>
<symbol overflow="visible" id="glyph1-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph1-1">
<path style="stroke:none;" d="M 5.890625 -4.5 C 5.96875 -4.671875 6.015625 -4.765625 6.765625 -4.765625 L 6.765625 -5.28125 C 6.34375 -5.25 6.3125 -5.25 5.828125 -5.25 C 5.5 -5.25 5.484375 -5.25 4.796875 -5.28125 L 4.796875 -4.765625 C 5.125 -4.765625 5.390625 -4.703125 5.390625 -4.625 C 5.390625 -4.609375 5.390625 -4.609375 5.328125 -4.484375 L 3.9375 -1.421875 L 2.40625 -4.765625 L 3.0625 -4.765625 L 3.0625 -5.28125 C 2.78125 -5.25 1.953125 -5.25 1.625 -5.25 C 1.28125 -5.25 0.59375 -5.25 0.28125 -5.28125 L 0.28125 -4.765625 L 1.03125 -4.765625 L 3.125 -0.21875 C 3.234375 0 3.265625 0.0625 3.53125 0.0625 C 3.71875 0.0625 3.8125 0.03125 3.921875 -0.203125 Z M 5.890625 -4.5 "/>
</symbol>
<symbol overflow="visible" id="glyph2-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph2-1">
<path style="stroke:none;" d="M 2.5 -5.0625 C 2.5 -5.265625 2.46875 -5.28125 2.265625 -5.28125 C 1.9375 -4.953125 1.515625 -4.765625 0.765625 -4.765625 L 0.765625 -4.515625 C 0.96875 -4.515625 1.40625 -4.515625 1.859375 -4.71875 L 1.859375 -0.65625 C 1.859375 -0.359375 1.84375 -0.265625 1.09375 -0.265625 L 0.8125 -0.265625 L 0.8125 0 C 1.140625 -0.03125 1.8125 -0.03125 2.171875 -0.03125 C 2.53125 -0.03125 3.21875 -0.03125 3.546875 0 L 3.546875 -0.265625 L 3.265625 -0.265625 C 2.515625 -0.265625 2.5 -0.359375 2.5 -0.65625 Z M 2.5 -5.0625 "/>
</symbol>
<symbol overflow="visible" id="glyph2-2">
<path style="stroke:none;" d="M 2.234375 -1.625 C 2.359375 -1.734375 2.703125 -2 2.828125 -2.109375 C 3.3125 -2.5625 3.78125 -3 3.78125 -3.71875 C 3.78125 -4.671875 3 -5.28125 2 -5.28125 C 1.046875 -5.28125 0.421875 -4.5625 0.421875 -3.84375 C 0.421875 -3.453125 0.734375 -3.40625 0.84375 -3.40625 C 1.015625 -3.40625 1.25 -3.53125 1.25 -3.828125 C 1.25 -4.234375 0.859375 -4.234375 0.765625 -4.234375 C 0.984375 -4.8125 1.53125 -5.015625 1.90625 -5.015625 C 2.65625 -5.015625 3.03125 -4.390625 3.03125 -3.71875 C 3.03125 -2.890625 2.453125 -2.296875 1.515625 -1.328125 L 0.515625 -0.296875 C 0.421875 -0.21875 0.421875 -0.203125 0.421875 0 L 3.5625 0 L 3.78125 -1.421875 L 3.546875 -1.421875 C 3.515625 -1.265625 3.453125 -0.859375 3.359375 -0.71875 C 3.3125 -0.65625 2.703125 -0.65625 2.578125 -0.65625 L 1.171875 -0.65625 Z M 2.234375 -1.625 "/>
</symbol>
<symbol overflow="visible" id="glyph3-0">
<path style="stroke:none;" d=""/>
</symbol>
<symbol overflow="visible" id="glyph3-1">
<path style="stroke:none;" d="M 4.75 -2.75 L 8.03125 -2.75 C 8.1875 -2.75 8.40625 -2.75 8.40625 -2.953125 C 8.40625 -3.1875 8.203125 -3.1875 8.03125 -3.1875 L 4.75 -3.1875 L 4.75 -6.46875 C 4.75 -6.640625 4.75 -6.84375 4.53125 -6.84375 C 4.296875 -6.84375 4.296875 -6.640625 4.296875 -6.46875 L 4.296875 -3.1875 L 1.015625 -3.1875 C 0.859375 -3.1875 0.640625 -3.1875 0.640625 -2.96875 C 0.640625 -2.75 0.84375 -2.75 1.015625 -2.75 L 4.296875 -2.75 L 4.296875 0.53125 C 4.296875 0.703125 4.296875 0.921875 4.515625 0.921875 C 4.75 0.921875 4.75 0.71875 4.75 0.53125 Z M 4.75 -2.75 "/>
</symbol>
</g>
<clipPath id="clip1">
<path d="M 80 3 L 168 3 L 168 132.058594 L 80 132.058594 Z M 80 3 "/>
</clipPath>
<clipPath id="clip2">
<path d="M 39 0.113281 L 169 0.113281 L 169 88 L 39 88 Z M 39 0.113281 "/>
</clipPath>
<clipPath id="clip3">
<path d="M 38 46 L 125 46 L 125 132.058594 L 38 132.058594 Z M 38 46 "/>
</clipPath>
</defs>
<g id="surface1">
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(50%,50%,50%);stroke-opacity:1;stroke-miterlimit:10;" d="M 8.830492 0.000775769 L 8.830492 105.966648 " transform="matrix(0.995198,0,0,-0.995198,5.840817,119.110147)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(50%,50%,50%);stroke-opacity:1;stroke-miterlimit:10;" d="M 52.98392 0.000775769 L 52.98392 105.966648 " transform="matrix(0.995198,0,0,-0.995198,5.840817,119.110147)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(50%,50%,50%);stroke-opacity:1;stroke-miterlimit:10;" d="M 97.137348 0.000775769 L 97.137348 105.966648 " transform="matrix(0.995198,0,0,-0.995198,5.840817,119.110147)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(50%,50%,50%);stroke-opacity:1;stroke-miterlimit:10;" d="M 141.286851 0.000775769 L 141.286851 105.966648 " transform="matrix(0.995198,0,0,-0.995198,5.840817,119.110147)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(50%,50%,50%);stroke-opacity:1;stroke-miterlimit:10;" d="M 185.440279 0.000775769 L 185.440279 105.966648 " transform="matrix(0.995198,0,0,-0.995198,5.840817,119.110147)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(50%,50%,50%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.000978407 8.832246 L 194.27175 8.832246 " transform="matrix(0.995198,0,0,-0.995198,5.840817,119.110147)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(50%,50%,50%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.000978407 52.981749 L 194.27175 52.981749 " transform="matrix(0.995198,0,0,-0.995198,5.840817,119.110147)"/>
<path style="fill:none;stroke-width:0.3985;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(50%,50%,50%);stroke-opacity:1;stroke-miterlimit:10;" d="M -0.000978407 97.135177 L 194.27175 97.135177 " transform="matrix(0.995198,0,0,-0.995198,5.840817,119.110147)"/>
<g clip-path="url(#clip1)" clip-rule="nonzero">
<path style="fill:none;stroke-width:1.59404;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(0%,65.098572%,83.921814%);stroke-opacity:1;stroke-miterlimit:10;" d="M 97.137348 8.832246 L 139.595134 93.751743 " transform="matrix(0.995198,0,0,-0.995198,5.840817,119.110147)"/>
</g>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,65.098572%,83.921814%);fill-opacity:1;" d="M 146.449219 22.441406 L 141.058594 26.484375 L 144.765625 25.808594 L 146.449219 29.179688 "/>
<g style="fill:rgb(0%,39.99939%,63.526917%);fill-opacity:1;">
<use xlink:href="#glyph0-1" x="151.124807" y="17.766142"/>
</g>
<g style="fill:rgb(0%,65.098572%,83.921814%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="128.559686" y="75.751358"/>
</g>
<g style="fill:rgb(0%,65.098572%,83.921814%);fill-opacity:1;">
<use xlink:href="#glyph2-1" x="135.623602" y="77.535748"/>
</g>
<g clip-path="url(#clip2)" clip-rule="nonzero">
<path style="fill:none;stroke-width:1.59404;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(0%,63.920593%,56.469727%);stroke-opacity:1;stroke-miterlimit:10;" d="M 141.286851 97.135177 L 56.367355 54.677392 " transform="matrix(0.995198,0,0,-0.995198,5.840817,119.110147)"/>
</g>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,63.920593%,56.469727%);fill-opacity:1;" d="M 58.570312 66.382812 L 65.308594 66.382812 L 61.9375 64.695312 L 62.613281 60.988281 "/>
<g style="fill:rgb(0%,39.99939%,63.526917%);fill-opacity:1;">
<use xlink:href="#glyph0-2" x="44.703302" y="61.706127"/>
</g>
<g style="fill:rgb(0%,63.920593%,56.469727%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="86.653886" y="38.546873"/>
</g>
<g style="fill:rgb(0%,63.920593%,56.469727%);fill-opacity:1;">
<use xlink:href="#glyph2-2" x="93.717802" y="40.331263"/>
</g>
<g clip-path="url(#clip3)" clip-rule="nonzero">
<path style="fill:none;stroke-width:1.59404;stroke-linecap:round;stroke-linejoin:miter;stroke:rgb(76.470947%,19.216919%,18.429565%);stroke-opacity:1;stroke-miterlimit:10;" d="M 97.137348 8.832246 L 55.660837 50.304832 " transform="matrix(0.995198,0,0,-0.995198,5.840817,119.110147)"/>
</g>
<path style=" stroke:none;fill-rule:nonzero;fill:rgb(76.470947%,19.216919%,18.429565%);fill-opacity:1;" d="M 58.570312 66.382812 L 60.699219 72.773438 L 61.234375 69.046875 L 64.964844 68.511719 "/>
<g style="fill:rgb(76.470947%,19.216919%,18.429565%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="40.757342" y="97.094375"/>
</g>
<g style="fill:rgb(76.470947%,19.216919%,18.429565%);fill-opacity:1;">
<use xlink:href="#glyph2-1" x="47.822253" y="98.878766"/>
</g>
<g style="fill:rgb(76.470947%,19.216919%,18.429565%);fill-opacity:1;">
<use xlink:href="#glyph3-1" x="55.175771" y="97.094375"/>
</g>
<g style="fill:rgb(76.470947%,19.216919%,18.429565%);fill-opacity:1;">
<use xlink:href="#glyph1-1" x="66.880296" y="97.094375"/>
</g>
<g style="fill:rgb(76.470947%,19.216919%,18.429565%);fill-opacity:1;">
<use xlink:href="#glyph2-2" x="73.945207" y="98.878766"/>
</g>
<g style="fill:rgb(0%,39.99939%,63.526917%);fill-opacity:1;">
<use xlink:href="#glyph0-3" x="106.589694" y="122.533628"/>
</g>
</g>
</svg>
......@@ -49,9 +49,9 @@ The extended version of MarkDown that we use for our Jupyter books allows us to
$$
\phi(a \bm{v} + b \bm{w}) = a \phi(\bm{v}) + b \phi(\bm{w}).
$$ (oneformlinearity)
$$ (oneformlinearity1)
The number of equation {eq}`oneformlinearity` is not a MarkDown feature; if you look at this page in a MarkDown 'what you see is what you get' editor, you'll see the label I used to refer to it.
The number of equation {eq}`oneformlinearity1` is not a MarkDown feature; if you look at this page in a MarkDown 'what you see is what you get' editor, you'll see the label I used to refer to it.
Multiple equations can be aligned nicely. Unfortunately, unlike in LaTeX, we can't give these equations separate numbers though
......@@ -83,9 +83,9 @@ While figures and tables can be included directly in MarkDown, it is nicer to in
Cartoon of the plasma membrane of a cell, consisting of a bilayer of lipids with a large number of embedded and associated proteins. On the intracellular side, the plasma membrane is supported by the cytoskeleton. On the extracellular side, it can face an extracellular fluid or extracellular tissue. Image created by [Mariana Ruiz](https://commons.wikimedia.org/wiki/User:LadyofHats), obtained from [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:Cell_membrane_detailed_diagram_en.svg), public domain.
```
We can also include a nice table&nbsp;{numref}`table:areasecondmoment`.
We can also include a nice table&nbsp;{numref}`table:areasecondmoment2`.
```{table} Second moment of the area for some common cross-sectional shapes.
:name: table:areasecondmoment
:name: table:areasecondmoment2
| Shape | Second moment of the area |
| :--- | :--: |
| Massive cylinder, radius&nbsp;$R$ | $\frac{\pi}{4} R^4$ |
......
(Ch:Interactiveimages)=
# Inteactive images
## SVG
{numref}`Figure %s <Fig:Vectors:AdditionPlane>` shows how you can geometrically add two arrows in a plane. The image is a SVG image rendered in the browser.
```{figure} images/Fig-Vectors-AdditionPlane.svg
:name: Fig:Vectors:AdditionPlane
Geometrical interpretation of addition in the plane.
```
## Applet
It is of course much nicer if you can interact with the image. One way of adding interactivity in the browser is through applets.
```{applet}
:url: vectors/3Daddition
:fig: images/Fig-Vectors-3Daddition.svg
Geometrical interpretation of addition for three-dimensional vectors.
```
## Credits
Applet developed by Beryl van Gelderen, integration of applet in Jupyter book by Julia van der Kris and Abel de Bruijn, all as part of the [open linear algebra book](https://dbalague.pages.ewi.tudelft.nl/openlabook/index.html) under development by [PRIME](https://www.tudelft.nl/en/eemcs/the-faculty/departments/applied-mathematics/education/prime/).
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment