Commit ec64da55 authored by Václav Šmilauer's avatar Václav Šmilauer
Browse files

1. Update documentation (backported to 0.50)

2. Remove the long deprecated object['attribute'] syntax.
parent c0ca64bb
......@@ -2,7 +2,7 @@ Source: yade@_VERSION@
Section: x11
Priority: optional
Maintainer: Václav Šmilauer <eudoxos@arcig.cz>
Build-Depends: debhelper (>= 5), scons, libqt3-mt-dev, qt3-dev-tools, freeglut3-dev, libboost-dev (>=1.34), libboost-date-time-dev (>=1.34), libboost-filesystem-dev (>=1.34), libboost-thread-dev (>=1.34), libboost-regex-dev (>=1.34), libboost-python-dev (>=1.34), libboost-iostreams-dev (>=1.34), libboost-program-options-dev, libboost-serialization-dev, liblog4cxx9-dev | liblog4cxx10-dev, docbook-to-man, ipython, libsqlite3-dev, libgts-dev, python-numpy, g++(>4.0), libvtk5-dev, libgl1-mesa-dev, gdb, ipython, python-matplotlib, python-tk, libeigen2-dev @', libqglviewer-qt3-dev' if DISTRIBUTION!='hardy' else ''@ @', binutils-gold' if DISTRIBUTION not in ('hardy','intrepid','jaunty','lenny') else ''@ @', texlive-latex-recommended, texlive-xetex, python-sphinx' if DISTRIBUTION not in ('hardy','intrepid','jaunty','lenny') else ''@
Build-Depends: debhelper (>= 5), scons, libqt3-mt-dev, qt3-dev-tools, freeglut3-dev, libboost-dev (>=1.35), libboost-date-time-dev (>=1.35), libboost-filesystem-dev (>=1.35), libboost-thread-dev (>=1.35), libboost-regex-dev (>=1.35), libboost-python-dev (>=1.35), libboost-iostreams-dev (>=1.35), libboost-program-options-dev, libboost-serialization-dev, liblog4cxx9-dev | liblog4cxx10-dev, docbook-to-man, ipython, libsqlite3-dev, libgts-dev, python-numpy, g++(>>4.0), libvtk5-dev, libgl1-mesa-dev, gdb, ipython, python-matplotlib, python-tk, libeigen2-dev @', libqglviewer-qt3-dev' if DISTRIBUTION!='hardy' else ''@ @', binutils-gold' if DISTRIBUTION not in ('hardy','intrepid','jaunty','lenny') else ''@ @', texlive-latex-recommended, texlive-latex-pictures, texlive-xetex, python-sphinx, python-bibtex' if DISTRIBUTION not in ('hardy','intrepid','jaunty','lenny') else ''@
Standards-Version: 3.7.2
Package: yade@_VERSION@
......@@ -31,4 +31,4 @@ Depends:
Description: Platform for dynamical modeling.
Yet Another Dynamic Engine. etc.
.
This package contains examples, test scripts and some documentation.
This package contains examples, test scripts and documentation.
......@@ -8,18 +8,9 @@
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
export VERSION=`cat VERSION`
export _VERSION=-${VERSION}
### eudoxos: FIXME: need to pass this to scons
#CFLAGS = -Wall -g
#
#ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
# CFLAGS += -O0
#else
# CFLAGS += -O2
#endif
export VERSION=$(shell cat VERSION)
export _VERSION=-${VERSION}
configure: configure-stamp
configure-stamp:
......@@ -60,22 +51,21 @@ install: build
### (a) use fakeroot-tcp instead of fakeroot
### (b) use just 1 job
#debug build
NO_SCONS_GET_RECENT= scons profile=deb buildPrefix=debian runtimePREFIX=/usr version=${VERSION} brief=0 chunkSize=20 jobs=1 linkStrategy=monolithic features=vtk,gts,log4cxx,opengl,openmp PREFIX=debian/yade${_VERSION}-dbg/usr variant=-dbg optimize=0 march= debug=1 CPPPATH=/usr/include/vtk-5.0:/usr/include/vtk-5.2:/usr/include/vtk-5.4:/usr/include/eigen2
NO_SCONS_GET_RECENT= scons profile=deb buildPrefix=debian runtimePREFIX=/usr version=${VERSION} brief=0 chunkSize=30 jobs=3 linkStrategy=monolithic features=vtk,gts,opengl,openmp PREFIX=debian/yade${_VERSION}-dbg/usr variant=-dbg optimize=0 march= debug=1 CPPPATH=/usr/include/vtk-5.0:/usr/include/vtk-5.2:/usr/include/vtk-5.4:/usr/include/eigen2
#optimized build
NO_SCONS_GET_RECENT= scons profile=deb PREFIX=debian/yade${_VERSION}/usr variant='' optimize=1 debug=0
#install platform-independent files (docs, scripts, examples)
#NO_SCONS_GET_RECENT= scons profile=deb PREFIX=debian/yade${_VERSION}/usr debian/yade${_VERSION}/usr/share/doc/yade${_VERSION}-doc
mkdir -p debian/yade${_VERSION}/usr/share/doc/yade${_VERSION}-doc
cp -r examples scripts debian/yade${_VERSION}/usr/share/doc/yade${_VERSION}-doc
mkdir -p debian/yade${_VERSION}/usr/share/doc/yade${_VERSION}
cp -r examples scripts debian/yade${_VERSION}/usr/share/doc/yade${_VERSION}
# UGLY! generate sphinx docs only if python-sphinx is installed (distinguishes distributions which should build it or not as per debian/control-template build-deps)
if dpkg-query -W python-sphinx; then cd doc/sphinx; ../../scripts/yade-exec-wrapper debian/yade${_VERSION}/usr/bin/yade${_VERSION} yadeSphinx.py; cp -r _build/html debian/yade${_VERSION}/usr/share/doc/yade${_VERSION}-doc/html; else echo "Not building HTML documentation, since the python-sphinx package is not installed"; fi
if dpkg-query -W python-sphinx; then cd doc/sphinx; PYTHONPATH=. YADE_PREFIX=../../debian/yade${_VERSION}/usr/ ../../debian/yade${_VERSION}/usr/bin/yade${_VERSION} yadeSphinx.py; cd _build/latex; xelatex Yade.tex; xelatex Yade.tex; xelatex Yade.tex; cd ../..; mkdir -p ../../debian/yade${_VERSION}-doc/usr/share/doc/yade${_VERSION}; cp -r _build/html _build/latex/Yade.pdf ../../debian/yade${_VERSION}-doc/usr/share/doc/yade${_VERSION}; else echo "Not building HTML documentation, since the python-sphinx package is not installed"; fi
check: install
dh_testdir
dh_testroot
scripts/yade-exec-wrapper debian/yade${_VERSION}-dbg/usr/bin/yade${_VERSION}-dbg -x scripts/regression-tests.py
scripts/yade-exec-wrapper debian/yade${_VERSION}/usr/bin/yade${_VERSION} -x scripts/regression-tests.py
YADE_PREFIX=debian/yade${_VERSION}-dbg/usr debian/yade${_VERSION}-dbg/usr/bin/yade${_VERSION}-dbg -x scripts/regression-tests.py
YADE_PREFIX=debian/yade${_VERSION}/usr debian/yade${_VERSION}/usr/bin/yade${_VERSION} -x scripts/regression-tests.py
# Build architecture-independent files here.
binary-indep: build install
......
......@@ -105,6 +105,179 @@ Thanks.
publisher = {American Physical Society}
}
@article{Jung1997,
author={Derek Jung and Kamal K. Gupta},
title={Octree-based hierarchical distance maps for collision detection},
journal={Journal of Robotic Systems},
volume={14},
number={11},
pages={789--806},
year={1997},
doi={10.1002/(SICI)1097-4563(199711)14:11<789::AID-ROB3>3.0.CO;2-Q},
}
@article{Hubbard1996,
author = {Hubbard, Philip M.},
title = {Approximating polyhedra with spheres for time-critical collision detection},
journal = {ACM Trans. Graph.},
volume = {15},
number = {3},
year = {1996},
issn = {0730-0301},
pages = {179--210},
doi = {http://doi.acm.org/10.1145/231731.231732},
publisher = {ACM},
address = {New York, NY, USA},
}
@article{Klosowski1998,
author = {James T. Klosowski and Martin Held and Joseph S. B. Mitchell and Henry Sowizral and Karel Zikan},
title = {Efficient Collision Detection Using Bounding Volume Hierarchies of k-DOPs},
journal = {IEEE Transactions on Visualization and Computer Graphics},
year = {1998},
volume = {4},
pages = {21--36},
url={http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.105.6555&rep=rep1&type=pdf}
}
@article{Munjiza2006,
Author = { A. Munjiza and E. Rougier and N. W. M. John},
Title= {MR linear contact detection algorithm},
journal = {International Journal for Numerical Methods in Engineering},
volume = {66},
number = {1},
pages={46--71},
year={2006},
publisher={John Wiley \& Sons, Ltd.},
doi={10.1002/nme.1538},
abstract={Large-scale discrete element simulations, as well as a whole range of related problems, involve contact of a large number of separate bodies and an efficient and robust contact detection algorithm is necessary. There has been a number of contact detection algorithms with total detection time proportional to N ln(N) (where N is the total number of separate bodies) reported in the past. In more recent years algorithms with total CPU time proportional to N have been developed. In this work, a novel contact detection algorithm with total detection time proportional to N is proposed. The performance of the algorithm is not influenced by packing density, while memory requirements are insignificant. The algorithm is applicable to systems comprising bodies of a similar size. The algorithm is named MR (Munjiza-Rougier: Munjiza devised the algorithm, Rougier implemented it). In the second part of the paper the algorithm is extended to particles of different sizes. The new algorithm is called MMR (multi-step MR) algorithm.}
}
@article{Munjiza1998,
Author ={ A. Munjiza and K. R. F. Andrews},
Title = {NBS contact detection algorithm for bodies of similar size},
journal = {International Journal for Numerical Methods in Engineering},
volume= {43},
number={1},
pages={131--149},
year={1998},
publisher={John Wiley \& Sons, Ltd.},
doi={10.1002/(SICI)1097-0207(19980915)43:1<131::AID-NME447>3.0.CO;2-S},
abstract={Large-scale discrete element simulations, as well as a whole range of related problems, involve contact of a large number of separate bodies. In this context an efficient and robust contact detection algorithm is necessary. There has been a number of contact detection algorithms with total detection time (CPU time needed to detect all couples close to each other) proportional to Nln(N) (where N is the total number of separate bodies) reported in recent years. In this work a contact detection algorithm with total detection time proportional to N is reported. The algorithm is termed NBS, which stands for no binary search. In other words, the proposed algorithm involves no binary search at any stage. In addition the performance of the algorithm in terms of total detection time is not influenced by packing density, while memory requirements are insignificant. The only limitation of the algorithm is its applicability to the systems comprising bodies of similar size.}
}
@Article{Verlet1967,
title = {Computer ``Experiments'' on Classical Fluids. I. Thermodynamical Properties of Lennard-Jones Molecules},
author = {Verlet, Loup },
journal = {Phys. Rev.},
volume = {159},
number = {1},
pages = {98},
year = {1967},
month = {Jul},
doi = {10.1103/PhysRev.159.98},
publisher = {American Physical Society}
}
@inproceedings{Luding2008,
author={Stefan Luding},
title={Introduction to discrete element methods},
booktitle={European Journal of Environmental and Civil Engineering},
publisher={Lavoisier},
year={2008},
isbn={978-2-7462-2258-8},
pages={785--826},
editor={Félix Darve and Jean-Pierre Ollivier},
}
@article{Wang2009,
title = {A new algorithm to model the dynamics of 3-D bonded rigid bodies with rotations},
author = {Yucang Wang},
journal = {Acta Geotechnica},
publisher = {Springer Berlin / Heidelberg},
issn = {1861-1125 (Print) 1861-1133 (Online)},
url = {http://www.springerlink.com/content/l2306412v1004871/},
abstract = {In this paper we propose a new algorithm to simulate the dynamics of 3-D interacting rigid bodies. Six degrees of freedom are introduced to describe a single 3-D body or particle, and six relative motions and interactions are permitted between bonded bodies. We develop a new decomposition technique for 3-D rotation and pay particular attention to the fact that an arbitrary relative rotation between two coordinate systems or two rigid bodies can not be decomposed into three mutually independent rotations around three orthogonal axes. However, it can be decomposed into two rotations, one pure axial rotation around the line between the centers of two bodies, and another rotation on a specified plane controlled by another parameter. These two rotations, corresponding to the relative axial twisting and bending in our model, are sequence-independent. Therefore all interactions due to the relative translational and rotational motions between linked bodies can be uniquely determined using such a two-step decomposition technique. A complete algorithm for one such simulation is presented. Compared with existing methods, this algorithm is physically more reliable and has greater numerical accuracy.},
number = {2},
pages = {117--127},
volume = {4},
doi = {10.1007/s11440-008-0072-1},
year = {2009},
keywords = {Bonded rigid-bodies - Decomposition of 3-D finite rotations - Quaternion},
month = {July},
}
@article{Omelyan1999,
title={A New Leapfrog Integrator of Rotational Motion. The Revised Angular-Momentum Approach},
author={Igor P. Omelyan},
journal={Molecular Simulation},
volume={22},
number={3},
year={1999},
doi={10.1080/08927029908022097},
url={http://arxiv.org/pdf/physics/9901025}
}
@article{Neto2006,
author = "Natale Neto and Luca Bellucci",
title = "A new algorithm for rigid body molecular dynamics",
journal = "Chemical Physics",
volume = "328",
number = "1--3",
pages = "259--268",
year = "2006",
issn = "0301-0104",
doi = "10.1016/j.chemphys.2006.07.009",
}
@article{Johnson2008,
author={Scott M. Johnson and John R. Williams and Benjamin K. Cook},
title={Quaternion-based rigid body rotation integration algorithms for use in particle methods},
journal={International Journal for Numerical Methods in Engineering},
volume={74},
number={8},
pages={1303--1313},
year={2008},
doi={10.1002/nme.2210},
}
@inproceedings{Addetta2001,
author = {{D'Addetta}, G.~A. and {Kun}, F. and {Ramm}, E. and {Herrmann}, H.~J.},
title = "{From solids to granulates - Discrete element simulations of fracture and fragmentation processes in geomaterials.}",
booktitle = {Continuous and Discontinuous Modelling of Cohesive-Frictional Materials},
year = 2001,
series = {Lecture Notes in Physics, Berlin Springer Verlag},
volume = 568,
editor = "{P.~A.~Vermeer, S.~Diebels, W.~Ehlers, H.~J.~Herrmann, S.~Luding, \& E.~Ramm}",
pages = {231-+},
url={http://www.comphys.ethz.ch/hans/p/267.pdf}
}
@book{Pfc3dManual30,
author={ICG},
title={PFC3D (Particle Flow Code in 3D) Theory and Background Manual, version 3.0},
publisher={Itasca Consulting Group},
year={2003}
}
@phdthesis{Hentz2003,
Author = {Hentz, Séebastien},
Title = {Modélisation d'une Structure en Béton Armé Soumise à un Choc par la méthode des Eléments Discrets},
School = {Université Grenoble 1 -- Joseph Fourier},
Year = {2003},
Month = {October},
}
@inproceedings{Price2007,
Author = { Mathew Price and Vasile Murariu and Garry Morrison},
title= {Sphere clump generation and trajectory comparison for real particles},
booktitle = {Proceedings of Discrete Element Modelling 2007},
year = {2007},
url={http://www.cogency.co.za/images/info/dem2007_sphereclump.pdf},
}
@inproceedings{Kuhl2001,
title = {Microplane modelling and particle modelling of cohesive-frictional materials},
author = {E. Kuhl and G. A. D'Addetta and M. Leukart and E. Ramm},
......@@ -112,6 +285,8 @@ Thanks.
publisher = {Springer Berlin / Heidelberg},
issn = {1616-6361},
isbn = {978-3-540-41525-1},
url = {http://www.springerlink.com/content/e50544266r506615},
abstract = {This paper aims at comparing the microplane model as a particular representative of the class of continuous material models with a discrete particle model which is of discontinuous nature. Thereby, the constitutive equations of both approaches will be based onVoigtshypothesis defining the strain state on the individual microplanes as well as the relative particle displacements. Through an appropriate constitutive assumption, the microplane stresses and the contact forces can be determined. In both cases, the equivalence of microscopic and macroscopic virtual work yields the overall stress strain relation. An elastic and an elasto-plastic material characterization of the microplane model and the particle model are derived and similarities of both approaches are illustrated.},
volume = {568},
series = {Lecture Notes in Physics},
year = {2001},
......@@ -119,3 +294,4 @@ Thanks.
doi = {10.1007/3-540-44424-6_3},
}
Generating yade documentation
===============================
1. You need to get the latest hg branch of Sphinx from
1. Get sphinx 1.0 (development snapshots are fine) either form
http://bitbucket.org/birkenfeld/sphinx/
* packages at https://launchpad.net/~yade-users/+archive/external
2. apply the patch from
* from its repository:
http://bitbucket.org/birkenfeld/sphinx/issue/407/patch-do-not-inspect-boost-python-functions
** hg branch http://bitbucket.org/birkenfeld/sphinx/
** optionally apply the patch (only avoids warnings) from
http://bitbucket.org/birkenfeld/sphinx/issue/407/patch-do-not-inspect-boost-python-functions
** run
python setup.py install
3. run
2. Python default encoding must be set to utf-8. As it is not the default, PYTHONPATH=. is used to make Python import local sitecustomize.py file at startup which changes this setting. (The value cannot be set after startup, from within the script)
python setup.py install
3. Run (from the current directory)
in sphinx source directory to install.
4. Add this at the end of /etc/python2.?/sitecustomize.py (on Debian/Ubuntu; 2.? is python version you compile Yade with, most likely the default you get from "python --version"):
import sys
sys.setdefaultencoding('utf-8')
5. Run (from the current directory)
yade yadeSphinx.py [optional outDir; _build by default]
It will be create/update $outDir/{html,latex}. The latex file (Yade.tex) is to be processed with xelatex (rather than latex).
PYTHONPATH=. yade yadeSphinx.py [optional outDir; _build by default]
It will be create/update $outDir/{html,latex}. The latex file (Yade.tex) is to be processed with xelatex (rather than latex). See README.latex for details.
====
ipython_console_highlighting.py is copied from matplotlib's trunk/matplotlib/lib/matplotlib/sphinxext
......@@ -68,7 +68,8 @@ def formatRest(db):
if i.has_key('year'): line+=' %s'%i['year']
if i.has_key('title'): line+=' **%s**'%i['title']
# add doi and url to everything, if present
if i.has_key('doi'): line+=' DOI `%s <http://dx.doi.org/%s>`_'%(i['doi'],i['doi'])
## ReST uses <..> to delimit URL, therefore < and > must be encoded in the URL (http://www.blooberry.com/indexdot/html/topics/urlencoding.htm)
if i.has_key('doi'): line+=' DOI `%s <http://dx.doi.org/%s>`_'%(i['doi'],i['doi'].replace('<','%3c').replace('>','%3e'))
if i.has_key('url'): line+=' URL %s'%i['url']
ret.append(line)
return ret
......
......@@ -374,12 +374,20 @@ my_latex_preamble=r'''
\usepackage{amsmath}
\usepackage{amsbsy}
\usepackage{underscore}
\usepackage[all]{xy}
% symbols
\let\mat\boldsymbol % matrix
\let\vec\boldsymbol % vector
\let\tens\boldsymbol % tensor
\def\normalized#1{\widehat{#1}}
\def\locframe#1{\widetilde{#1}}
% timestep
\def\Dt{\Delta t}
\def\Dtcr{\Dt_{\rm cr}}
% algorithm complexity
\def\bigO#1{\ensuremath{\mathcal{O}(#1)}}
......@@ -399,6 +407,42 @@ my_latex_preamble=r'''
\def\nnext#1{#1^\oplus}
\def\next#1{#1^+}
% shorthands for geometry
\def\currn{\curr{\vec{n}}}
\def\currC{\curr{\vec{C}}}
\def\uT{\vec{u}_T}
\def\curruT{\curr{\vec{u}}_T}
\def\prevuT{\prev{\vec{u}}_T}
\def\currn{\curr{\vec{n}}}
\def\prevn{\prev{\vec{n}}}
% motion
\def\pprevvel{\pprev{\dot{\vec{u}}}}
\def\nnextvel{\nnext{\dot{\vec{u}}}}
\def\curraccel{\curr{\ddot{\vec{u}}}}
\def\prevpos{\prev{\vec{u}}}
\def\currpos{\curr{\vec{u}}}
\def\nextpos{\next{\vec{u}}}
\def\curraaccel{\curr{\dot{\vec{\omega}}}}
\def\pprevangvel{\pprev{\vec{\omega}}}
\def\nnextangvel{\nnext{\vec{\omega}}}
\def\loccurr#1{\curr{\locframe{#1}}}
\def\numCPU{n_{\rm cpu}}
\DeclareMathOperator{\Align}{Align}
\DeclareMathOperator{\sign}{sgn}
% sorting algorithms
\def\isleq#1{\currelem{#1}\ar@/^/[ll]^{\leq}}
\def\isnleq#1{\currelem{#1}\ar@/^/[ll]^{\not\leq}}
\def\currelem#1{\fbox{$#1$}}
\def\sortSep{||}
\def\sortInv{\hbox{\phantom{||}}}
\def\sortlines#1{\xymatrix@=3pt{#1}}
\def\crossBound{||\mkern-18mu<}
'''
pngmath_latex_preamble=r'\usepackage[active]{preview}\usepackage{amsmath}\usepackage{amssymb}'+my_latex_preamble
......@@ -415,7 +459,7 @@ source_suffix = '.rst'
#source_encoding = 'utf-8'
# The master toctree document.
master_doc = 'index'
master_doc = 'index-toctree'
# General information about the project.
project = u'Yade'
......@@ -550,9 +594,9 @@ htmlhelp_basename = 'Yadedoc'
latex_elements=dict(
papersize='a4paper',
fontpkg=r'''
\usepackage{euler}
\usepackage{fontspec,xunicode,xltxtra}
\setmainfont[BoldFont={LMRoman10 Bold}]{CMU Concrete}
\usepackage{euler}
\usepackage{fontspec,xunicode,xltxtra}
%\setmainfont[BoldFont={LMRoman10 Bold}]{CMU Concrete} %% CMU Concrete must be installed by hand as otf
''',
utf8extra='',
fncychap='',
......@@ -571,7 +615,7 @@ latex_elements=dict(
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, documentclass [howto/manual]).
latex_documents = [
('index', 'Yade.tex', u'Yade Documentation',
('index-toctree', 'Yade.tex', u'Yade Documentation',
u'Václav Šmilauer', 'manual'),
]
......
<?xml version="1.0"?>
<!DOCTYPE ipe SYSTEM "ipe.dtd">
<ipe version="70010" creator="Ipe 7.0.10">
<info created="D:20100409151942" modified="D:20100409152120"/>
<preamble>\usepackage{euler}</preamble>
<ipestyle name="basic">
<symbol name="arrow/arc(spx)">
<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen">
0 0 m
-1 0.333 l
-1 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/farc(spx)">
<path stroke="sym-stroke" fill="white" pen="sym-pen">
0 0 m
-1 0.333 l
-1 -0.333 l
h
</path>
</symbol>
<symbol name="mark/circle(sx)" transformations="translations">
<path fill="sym-stroke">
0.6 0 0 0.6 0 0 e
0.4 0 0 0.4 0 0 e
</path>
</symbol>
<symbol name="mark/disk(sx)" transformations="translations">
<path fill="sym-stroke">
0.6 0 0 0.6 0 0 e
</path>
</symbol>
<symbol name="mark/fdisk(sfx)" transformations="translations">
<group>
<path fill="sym-stroke" fillrule="eofill">
0.6 0 0 0.6 0 0 e
0.4 0 0 0.4 0 0 e
</path>
<path fill="sym-fill">
0.4 0 0 0.4 0 0 e
</path>
</group>
</symbol>
<symbol name="mark/box(sx)" transformations="translations">
<path fill="sym-stroke" fillrule="eofill">
-0.6 -0.6 m
0.6 -0.6 l
0.6 0.6 l
-0.6 0.6 l
h
-0.4 -0.4 m
0.4 -0.4 l
0.4 0.4 l
-0.4 0.4 l
h
</path>
</symbol>
<symbol name="mark/square(sx)" transformations="translations">
<path fill="sym-stroke">
-0.6 -0.6 m
0.6 -0.6 l
0.6 0.6 l
-0.6 0.6 l
h
</path>
</symbol>
<symbol name="mark/fsquare(sfx)" transformations="translations">
<group>
<path fill="sym-stroke" fillrule="eofill">
-0.6 -0.6 m
0.6 -0.6 l
0.6 0.6 l
-0.6 0.6 l
h
-0.4 -0.4 m
0.4 -0.4 l
0.4 0.4 l
-0.4 0.4 l
h
</path>
<path fill="sym-fill">
-0.4 -0.4 m
0.4 -0.4 l
0.4 0.4 l
-0.4 0.4 l
h
</path>
</group>
</symbol>
<symbol name="mark/cross(sx)" transformations="translations">
<group>
<path fill="sym-stroke">
-0.43 -0.57 m
0.57 0.43 l
0.43 0.57 l
-0.57 -0.43 l
h
</path>
<path fill="sym-stroke">
-0.43 0.57 m
0.57 -0.43 l
0.43 -0.57 l
-0.57 0.43 l
h
</path>
</group>
</symbol>
<symbol name="arrow/fnormal(spx)">
<path stroke="sym-stroke" fill="white" pen="sym-pen">
0 0 m
-1 0.333 l
-1 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/pointed(spx)">
<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen">
0 0 m
-1 0.333 l
-0.8 0 l
-1 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/fpointed(spx)">
<path stroke="sym-stroke" fill="white" pen="sym-pen">
0 0 m
-1 0.333 l
-0.8 0 l
-1 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/linear(spx)">
<path stroke="sym-stroke" pen="sym-pen">
-1 0.333 m
0 0 l
-1 -0.333 l
</path>
</symbol>
<symbol name="arrow/fdouble(spx)">
<path stroke="sym-stroke" fill="white" pen="sym-pen">
0 0 m
-1 0.333 l
-1 -0.333 l
h
-1 0 m
-2 0.333 l
-2 -0.333 l
h
</path>
</symbol>
<symbol name="arrow/double(spx)">
<path stroke="sym-stroke" fill="sym-stroke" pen="sym-pen">
0 0 m
-1 0.333 l
-1 -0.333 l
h
-1 0 m
-2 0.333 l
-2 -0.333 l
h
</path>
</symbol>
<pen name="heavier" value="0.8"/>
<pen name="fat" value="1.2"/>
<pen name="ultrafat" value="2"/>
<symbolsize name="large" value="5"/>
<symbolsize name="small" value="2"/>
<symbolsize name="tiny" value="1.1"/>
<arrowsize name="large" value="10"/>
<arrowsize name="small" value="5"/>
<arrowsize name="tiny" value="3"/>
<color name="red" value="1 0 0"/>
<color name="green" value="0 1 0"/>
<color name="blue" value="0 0 1"/>
<color name="yellow" value="1 1 0"/>
<color name="orange" value="1 0.647 0"/>
<color name="gold" value="1 0.843 0"/>
<color name="purple" value="0.627 0.125 0.941"/>
<color name="gray" value="0.745"/>
<color name="brown" value="0.647 0.165 0.165"/>
<color name="navy" value="0 0 0.502"/>
<color name="pink" value="1 0.753 0.796"/>
<color name="seagreen" value="0.18 0.545 0.341"/>
<color name="turquoise" value="0.251 0.878 0.816"/>
<color name="violet" value="0.933 0.51 0.933"/>
<color name="darkblue" value="0 0 0.545"/>
<color name="darkcyan" value="0 0.545 0.545"/>
<color name="darkgray" value="0.663"/>
<color name="darkgreen" value="0 0.392 0"/>
<color name="darkmagenta" value="0.545 0 0.545"/>
<color name="darkorange" value="1 0.549 0"/>
<color name="darkred" value="0.545 0 0"/>
<color name="lightblue" value="0.678 0.847 0.902"/>
<color name="lightcyan" value="0.878 1 1"/>