Hans Petter Langtangen 10 年之前
父节点
当前提交
78c8bc438f
共有 100 个文件被更改,包括 8837 次插入1653 次删除
  1. 128 73
      doc/pub/tutorial/._pysketcher000.html
  2. 118 83
      doc/pub/tutorial/._pysketcher001.html
  3. 165 112
      doc/pub/tutorial/._pysketcher002.html
  4. 117 72
      doc/pub/tutorial/._pysketcher003.html
  5. 二进制
      doc/pub/tutorial/fig-tut/Arc.pdf
  6. 二进制
      doc/pub/tutorial/fig-tut/Arc.png
  7. 二进制
      doc/pub/tutorial/fig-tut/Axis.pdf
  8. 二进制
      doc/pub/tutorial/fig-tut/Axis.png
  9. 二进制
      doc/pub/tutorial/fig-tut/Dashpot.pdf
  10. 二进制
      doc/pub/tutorial/fig-tut/Dashpot.png
  11. 二进制
      doc/pub/tutorial/fig-tut/Distance_wText.pdf
  12. 二进制
      doc/pub/tutorial/fig-tut/Distance_wText.png
  13. 二进制
      doc/pub/tutorial/fig-tut/Rectangle.pdf
  14. 二进制
      doc/pub/tutorial/fig-tut/Rectangle.png
  15. 二进制
      doc/pub/tutorial/fig-tut/Shape_hierarchy_complete.png
  16. 二进制
      doc/pub/tutorial/fig-tut/Shape_hierarchy_larger.png
  17. 二进制
      doc/pub/tutorial/fig-tut/Shape_hierarchy_small.png
  18. 二进制
      doc/pub/tutorial/fig-tut/Spring.pdf
  19. 二进制
      doc/pub/tutorial/fig-tut/Spring.png
  20. 二进制
      doc/pub/tutorial/fig-tut/StochasticWavyCurve.pdf
  21. 二进制
      doc/pub/tutorial/fig-tut/StochasticWavyCurve.png
  22. 二进制
      doc/pub/tutorial/fig-tut/Triangle.pdf
  23. 二进制
      doc/pub/tutorial/fig-tut/Triangle.png
  24. 二进制
      doc/pub/tutorial/fig-tut/Vehicle0_hier2.pdf
  25. 二进制
      doc/pub/tutorial/fig-tut/Vehicle0_hier2.png
  26. 二进制
      doc/pub/tutorial/fig-tut/Wavy.pdf
  27. 二进制
      doc/pub/tutorial/fig-tut/Wavy.png
  28. 二进制
      doc/pub/tutorial/fig-tut/beam_mid_support_deflection.png
  29. 二进制
      doc/pub/tutorial/fig-tut/beam_mid_support_math.png
  30. 二进制
      doc/pub/tutorial/fig-tut/beam_mid_support_raw.png
  31. 794 0
      doc/pub/tutorial/fig-tut/mpl_code_Arc.py
  32. 122 0
      doc/pub/tutorial/fig-tut/mpl_code_Axis.py
  33. 195 0
      doc/pub/tutorial/fig-tut/mpl_code_Dashpot.py
  34. 149 0
      doc/pub/tutorial/fig-tut/mpl_code_Distance_wText.py
  35. 66 0
      doc/pub/tutorial/fig-tut/mpl_code_Rectangle.py
  36. 2219 0
      doc/pub/tutorial/fig-tut/mpl_code_Spring.py
  37. 30 0
      doc/pub/tutorial/fig-tut/mpl_code_Triangle.py
  38. 4025 0
      doc/pub/tutorial/fig-tut/mpl_code_Wavy.py
  39. 二进制
      doc/pub/tutorial/fig-tut/pendulum.png
  40. 二进制
      doc/pub/tutorial/fig-tut/vehicle0.pdf
  41. 二进制
      doc/pub/tutorial/fig-tut/vehicle0.png
  42. 二进制
      doc/pub/tutorial/fig-tut/vehicle0_dim.pdf
  43. 二进制
      doc/pub/tutorial/fig-tut/vehicle0_dim.png
  44. 二进制
      doc/pub/tutorial/fig-tut/vehicle0_hier1.pdf
  45. 二进制
      doc/pub/tutorial/fig-tut/vehicle0_hier1.png
  46. 二进制
      doc/pub/tutorial/fig-tut/vehicle0a.png
  47. 二进制
      doc/pub/tutorial/fig-tut/vehicle0a_c.png
  48. 二进制
      doc/pub/tutorial/fig-tut/vehicle0b.png
  49. 二进制
      doc/pub/tutorial/fig-tut/vehicle0b_c.png
  50. 二进制
      doc/pub/tutorial/fig-tut/vehicle1.pdf
  51. 二进制
      doc/pub/tutorial/fig-tut/vehicle1.png
  52. 二进制
      doc/pub/tutorial/fig-tut/vehicle_v1.pdf
  53. 二进制
      doc/pub/tutorial/fig-tut/vehicle_v1.png
  54. 二进制
      doc/pub/tutorial/fig-tut/vehicle_v2.pdf
  55. 二进制
      doc/pub/tutorial/fig-tut/vehicle_v2.png
  56. 二进制
      doc/pub/tutorial/fig-tut/vehicle_v23.pdf
  57. 二进制
      doc/pub/tutorial/fig-tut/vehicle_v23.png
  58. 二进制
      doc/pub/tutorial/fig-tut/vehicle_v3.pdf
  59. 二进制
      doc/pub/tutorial/fig-tut/vehicle_v3.png
  60. 二进制
      doc/pub/tutorial/fig-tut/wheel_on_inclined_plane.pdf
  61. 二进制
      doc/pub/tutorial/fig-tut/wheel_on_inclined_plane.png
  62. 1 1
      doc/pub/tutorial/html/.buildinfo
  63. 6 7
      doc/pub/tutorial/html/_sources/index.txt
  64. 82 16
      doc/pub/tutorial/html/_static/basic.css
  65. 二进制
      doc/pub/tutorial/html/_static/dialog-note.png
  66. 二进制
      doc/pub/tutorial/html/_static/dialog-seealso.png
  67. 二进制
      doc/pub/tutorial/html/_static/dialog-topic.png
  68. 二进制
      doc/pub/tutorial/html/_static/dialog-warning.png
  69. 36 20
      doc/pub/tutorial/html/_static/doctools.js
  70. 二进制
      doc/pub/tutorial/html/_static/down-pressed.png
  71. 二进制
      doc/pub/tutorial/html/_static/down.png
  72. 0 310
      doc/pub/tutorial/html/_static/epub.css
  73. 二进制
      doc/pub/tutorial/html/_static/file.png
  74. 二进制
      doc/pub/tutorial/html/_static/footerbg.png
  75. 二进制
      doc/pub/tutorial/html/_static/headerbg.png
  76. 0 7
      doc/pub/tutorial/html/_static/ie6.css
  77. 4 154
      doc/pub/tutorial/html/_static/jquery.js
  78. 二进制
      doc/pub/tutorial/html/_static/middlebg.png
  79. 二进制
      doc/pub/tutorial/html/_static/minus.png
  80. 二进制
      doc/pub/tutorial/html/_static/plus.png
  81. 0 367
      doc/pub/tutorial/html/_static/pyramid.css
  82. 219 152
      doc/pub/tutorial/html/_static/searchtools.js
  83. 二进制
      doc/pub/tutorial/html/_static/transparent.gif
  84. 31 16
      doc/pub/tutorial/html/_static/underscore.js
  85. 二进制
      doc/pub/tutorial/html/_static/up-pressed.png
  86. 二进制
      doc/pub/tutorial/html/_static/up.png
  87. 17 17
      doc/pub/tutorial/html/_static/websupport.js
  88. 29 38
      doc/pub/tutorial/html/genindex.html
  89. 53 80
      doc/pub/tutorial/html/index.html
  90. 二进制
      doc/pub/tutorial/html/objects.inv
  91. 29 35
      doc/pub/tutorial/html/search.html
  92. 1 1
      doc/pub/tutorial/html/searchindex.js
  93. 128 73
      doc/pub/tutorial/pysketcher.html
  94. 二进制
      doc/pub/tutorial/pysketcher.pdf
  95. 2 0
      doc/src/tut/basics.do.txt
  96. 7 7
      doc/src/tut/classes.do.txt
  97. 5 0
      doc/src/tut/main_sketcher.do.txt
  98. 20 12
      doc/src/tut/make.sh
  99. 39 0
      doc/web/index.html
  100. 0 0
      index.html

+ 128 - 73
doc/pub/tutorial/._pysketcher000.html

@@ -11,31 +11,20 @@ Automatically generated HTML file from DocOnce source
 
 
 <title>Using Pysketcher to Create Principal Sketches of Physics Problems</title>
 <title>Using Pysketcher to Create Principal Sketches of Physics Problems</title>
 
 
+<!-- Bootstrap style: bootswatch_readable -->
+<link href="http://netdna.bootstrapcdn.com/bootswatch/3.1.1/readable/bootstrap.min.css" rel="stylesheet">
+<!-- not necessary
+<link href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+-->
 
 
 <style type="text/css">
 <style type="text/css">
-/* blueish style */
-
-/* Color definitions:  http://www.december.com/html/spec/color0.html
-   CSS examples:       http://www.w3schools.com/css/css_examples.asp */
 
 
-body {
-  margin-top: 1.0em;
-  background-color: #ffffff;
-  font-family: Helvetica, Arial, FreeSans, san-serif;
-  color: #000000;
+/* Add scrollbar to dropdown menus in bootstrap navigation bar */
+.dropdown-menu {
+   height: auto;
+   max-height: 400px;
+   overflow-x: hidden;
 }
 }
-h1 { font-size: 1.8em; color: #1e36ce; }
-h2 { font-size: 1.6em; color: #1e36ce; }
-h3 { font-size: 1.4em; color: #1e36ce; }
-a { color: #1e36ce; text-decoration:none; }
-tt { font-family: "Courier New", Courier; }
-/* pre style removed because it will interfer with pygments */
-p { text-indent: 0px; }
-hr { border: 0; width: 80%; border-bottom: 1px solid #aaa}
-p.caption { width: 80%; font-style: normal; text-align: left; }
-hr.figure { border: 0; width: 80%; border-bottom: 1px solid #aaa}
-
-div { text-align: justify; text-justify: inter-word; }
 </style>
 </style>
 
 
 
 
@@ -43,51 +32,48 @@ div { text-align: justify; text-justify: inter-word; }
 
 
 <!-- tocinfo
 <!-- tocinfo
 {'highest level': 1,
 {'highest level': 1,
- 'sections': [(' A First Glimpse of Pysketcher ', 1, None, '___sec0'),
-              (' Basic Construction of Sketches ', 2, None, '___sec1'),
-              (' Basic Drawing ', 3, None, '___sec2'),
-              (' Groups of Objects ', 3, None, '___sec3'),
-              (' Changing Line Styles and Colors ', 3, None, '___sec4'),
-              (' The Figure Composition as an Object Hierarchy ',
+ 'sections': [('A First Glimpse of Pysketcher', 1, None, '___sec0'),
+              ('Basic Construction of Sketches', 2, None, '___sec1'),
+              ('Basic Drawing', 3, None, '___sec2'),
+              ('Groups of Objects', 3, None, '___sec3'),
+              ('Changing Line Styles and Colors', 3, None, '___sec4'),
+              ('The Figure Composition as an Object Hierarchy',
                3,
                3,
                None,
                None,
                '___sec5'),
                '___sec5'),
-              (' Animation: Translating the Vehicle ', 3, None, '___sec6'),
-              (' Animation: Rolling the Wheels ',
+              ('Animation: Translating the Vehicle', 3, None, '___sec6'),
+              ('Animation: Rolling the Wheels',
                3,
                3,
                'sketcher:vehicle1:anim',
                'sketcher:vehicle1:anim',
                'sketcher:vehicle1:anim'),
                'sketcher:vehicle1:anim'),
-              (' Basic Shapes ', 1, None, '___sec8'),
-              (' Axis ', 2, None, '___sec9'),
-              (' Distance with Text ', 2, None, '___sec10'),
-              (' Rectangle ', 2, None, '___sec11'),
-              (' Triangle ', 2, None, '___sec12'),
-              (' Arc ', 2, None, '___sec13'),
-              (' Spring ', 2, None, '___sec14'),
-              (' Dashpot ', 2, None, '___sec15'),
-              (' Wavy ', 2, None, '___sec16'),
-              (' Stochastic curves ', 2, None, '___sec17'),
-              (' Inner Workings of the Pysketcher Tool ',
-               1,
-               None,
-               '___sec18'),
-              (' Example of Classes for Geometric Objects ',
+              ('Basic Shapes', 1, None, '___sec8'),
+              ('Axis', 2, None, '___sec9'),
+              ('Distance with Text', 2, None, '___sec10'),
+              ('Rectangle', 2, None, '___sec11'),
+              ('Triangle', 2, None, '___sec12'),
+              ('Arc', 2, None, '___sec13'),
+              ('Spring', 2, None, '___sec14'),
+              ('Dashpot', 2, None, '___sec15'),
+              ('Wavy', 2, None, '___sec16'),
+              ('Stochastic curves', 2, None, '___sec17'),
+              ('Inner Workings of the Pysketcher Tool', 1, None, '___sec18'),
+              ('Example of Classes for Geometric Objects',
                2,
                2,
                None,
                None,
                '___sec19'),
                '___sec19'),
-              (' Simple Geometric Objects ', 3, None, '___sec20'),
-              (' Class Curve ', 3, None, '___sec21'),
-              (' Compound Geometric Objects ', 3, None, '___sec22'),
-              (' Adding Functionality via Recursion ', 2, None, '___sec23'),
-              (' Basic Principles of Recursion ', 3, None, '___sec24'),
-              (' Explaining Recursion ', 3, None, '___sec25'),
-              (' Scaling, Translating, and Rotating a Figure ',
+              ('Simple Geometric Objects', 3, None, '___sec20'),
+              ('Class Curve', 3, None, '___sec21'),
+              ('Compound Geometric Objects', 3, None, '___sec22'),
+              ('Adding Functionality via Recursion', 2, None, '___sec23'),
+              ('Basic Principles of Recursion', 3, None, '___sec24'),
+              ('Explaining Recursion', 3, None, '___sec25'),
+              ('Scaling, Translating, and Rotating a Figure',
                2,
                2,
                'sketcher:scaling',
                'sketcher:scaling',
                'sketcher:scaling'),
                'sketcher:scaling'),
-              (' Scaling ', 3, None, '___sec27'),
-              (' Translation ', 3, None, '___sec28'),
-              (' Rotation ', 3, None, '___sec29')]}
+              ('Scaling', 3, None, '___sec27'),
+              ('Translation', 3, None, '___sec28'),
+              ('Rotation', 3, None, '___sec29')]}
 end of tocinfo -->
 end of tocinfo -->
 
 
 <body>
 <body>
@@ -109,21 +95,70 @@ MathJax.Hub.Config({
 
 
 
 
     
     
-<a name="part0000"></a>
-<p>
-<!-- begin top navigation -->
-<table style="width: 100%"><tr><td>
-</td><td>
-<div style="text-align: right;"><a href="._pysketcher001.html"><img src="http://hplgit.github.io/doconce/bundled/html_images/next1.png" border=0 alt="Next &raquo;"></a></div>
-</td></tr></table>
-<!-- end top navigation -->
-</p>
+<!-- Bootstrap navigation bar -->
+<div class="navbar navbar-default navbar-fixed-top">
+  <div class="navbar-header">
+    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse">
+      <span class="icon-bar"></span>
+      <span class="icon-bar"></span>
+      <span class="icon-bar"></span>
+    </button>
+    <a class="navbar-brand" href="pysketcher.html">Using Pysketcher to Create Principal Sketches of Physics Problems</a>
+  </div>
+
+  <div class="navbar-collapse collapse navbar-responsive-collapse">
+    <ul class="nav navbar-nav navbar-right">
+      <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Contents <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec0" style="font-size: 80%;"><b>A First Glimpse of Pysketcher</b></a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec1" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Basic Construction of Sketches</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec2" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Basic Drawing</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec3" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Groups of Objects</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec4" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changing Line Styles and Colors</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec5" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Figure Composition as an Object Hierarchy</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec6" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Animation: Translating the Vehicle</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#sketcher:vehicle1:anim" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Animation: Rolling the Wheels</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec8" style="font-size: 80%;"><b>Basic Shapes</b></a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec9" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Axis</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec10" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Distance with Text</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec11" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Rectangle</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec12" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Triangle</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec13" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Arc</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec14" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Spring</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec15" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Dashpot</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec16" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Wavy</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec17" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Stochastic curves</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec18" style="font-size: 80%;"><b>Inner Workings of the Pysketcher Tool</b></a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec19" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Example of Classes for Geometric Objects</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec20" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Simple Geometric Objects</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec21" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class Curve</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec22" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compound Geometric Objects</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec23" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Adding Functionality via Recursion</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec24" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Basic Principles of Recursion</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec25" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Explaining Recursion</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#sketcher:scaling" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Scaling, Translating, and Rotating a Figure</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec27" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scaling</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec28" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Translation</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec29" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rotation</a></li>
+
+        </ul>
+      </li>
+    </ul>
+  </div>
+</div>
+</div> <!-- end of navigation bar -->
 
 
-<p>
+<div class="container">
+
+<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p> <!-- add vertical space -->
+
+<a name="part0000"></a>
 <!-- ------------------- main content ---------------------- -->
 <!-- ------------------- main content ---------------------- -->
 
 
 
 
 
 
+<div class="jumbotron">
 <center><h1>Using Pysketcher to Create Principal Sketches of Physics Problems</h1></center>  <!-- document title -->
 <center><h1>Using Pysketcher to Create Principal Sketches of Physics Problems</h1></center>  <!-- document title -->
 
 
 <p>
 <p>
@@ -138,8 +173,10 @@ MathJax.Hub.Config({
 
 
 <center>[1] <b>Center for Biomedical Computing, Simula Research Laboratory</b></center>
 <center>[1] <b>Center for Biomedical Computing, Simula Research Laboratory</b></center>
 <center>[2] <b>Department of Informatics, University of Oslo</b></center>
 <center>[2] <b>Department of Informatics, University of Oslo</b></center>
+<br>
 <p>
 <p>
-<center><h4>Apr 27, 2015</h4></center> <!-- date -->
+<center><h4>Dec 22, 2015</h4></center> <!-- date -->
+<br>
 <p>
 <p>
 
 
 <!-- begin box -->
 <!-- begin box -->
@@ -179,17 +216,35 @@ no further background is required.
 <!-- which is just a part of this document... -->
 <!-- which is just a part of this document... -->
 
 
 <p>
 <p>
-<p>
-<!-- begin bottom navigation -->
-<table style="width: 100%"><tr><td>
-</td><td>
-<div style="text-align: right;"><a href="._pysketcher001.html"><img src="http://hplgit.github.io/doconce/bundled/html_images/next1.png" border=0 alt="Next &raquo;"></a></div>
-</td></tr></table>
-<!-- end bottom navigation -->
-</p>
 
 
+
+<p><a href="._pysketcher001.html" class="btn btn-primary btn-lg">Read &raquo;</a></p>
+
+
+</div> <!-- end jumbotron -->
+
+<p>
+<!-- navigation buttons at the bottom of the page -->
+<ul class="pagination">
+  <li class="active"><a href="._pysketcher000.html">1</a></li>
+  <li><a href="._pysketcher001.html">2</a></li>
+  <li><a href="._pysketcher002.html">3</a></li>
+  <li><a href="._pysketcher003.html">4</a></li>
+  <li><a href="._pysketcher001.html">&raquo;</a></li>
+</ul>
 <!-- ------------------- end of main content --------------- -->
 <!-- ------------------- end of main content --------------- -->
 
 
+</div>  <!-- end container -->
+<!-- include javascript, jQuery *first* -->
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
+<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
+
+<!-- Bootstrap footer
+<footer>
+<a href="http://..."><img width="250" align=right src="http://..."></a>
+</footer>
+-->
+
 
 
 </body>
 </body>
 </html>
 </html>

+ 118 - 83
doc/pub/tutorial/._pysketcher001.html

@@ -11,31 +11,20 @@ Automatically generated HTML file from DocOnce source
 
 
 <title>Using Pysketcher to Create Principal Sketches of Physics Problems</title>
 <title>Using Pysketcher to Create Principal Sketches of Physics Problems</title>
 
 
+<!-- Bootstrap style: bootswatch_readable -->
+<link href="http://netdna.bootstrapcdn.com/bootswatch/3.1.1/readable/bootstrap.min.css" rel="stylesheet">
+<!-- not necessary
+<link href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+-->
 
 
 <style type="text/css">
 <style type="text/css">
-/* blueish style */
-
-/* Color definitions:  http://www.december.com/html/spec/color0.html
-   CSS examples:       http://www.w3schools.com/css/css_examples.asp */
 
 
-body {
-  margin-top: 1.0em;
-  background-color: #ffffff;
-  font-family: Helvetica, Arial, FreeSans, san-serif;
-  color: #000000;
+/* Add scrollbar to dropdown menus in bootstrap navigation bar */
+.dropdown-menu {
+   height: auto;
+   max-height: 400px;
+   overflow-x: hidden;
 }
 }
-h1 { font-size: 1.8em; color: #1e36ce; }
-h2 { font-size: 1.6em; color: #1e36ce; }
-h3 { font-size: 1.4em; color: #1e36ce; }
-a { color: #1e36ce; text-decoration:none; }
-tt { font-family: "Courier New", Courier; }
-/* pre style removed because it will interfer with pygments */
-p { text-indent: 0px; }
-hr { border: 0; width: 80%; border-bottom: 1px solid #aaa}
-p.caption { width: 80%; font-style: normal; text-align: left; }
-hr.figure { border: 0; width: 80%; border-bottom: 1px solid #aaa}
-
-div { text-align: justify; text-justify: inter-word; }
 </style>
 </style>
 
 
 
 
@@ -43,51 +32,48 @@ div { text-align: justify; text-justify: inter-word; }
 
 
 <!-- tocinfo
 <!-- tocinfo
 {'highest level': 1,
 {'highest level': 1,
- 'sections': [(' A First Glimpse of Pysketcher ', 1, None, '___sec0'),
-              (' Basic Construction of Sketches ', 2, None, '___sec1'),
-              (' Basic Drawing ', 3, None, '___sec2'),
-              (' Groups of Objects ', 3, None, '___sec3'),
-              (' Changing Line Styles and Colors ', 3, None, '___sec4'),
-              (' The Figure Composition as an Object Hierarchy ',
+ 'sections': [('A First Glimpse of Pysketcher', 1, None, '___sec0'),
+              ('Basic Construction of Sketches', 2, None, '___sec1'),
+              ('Basic Drawing', 3, None, '___sec2'),
+              ('Groups of Objects', 3, None, '___sec3'),
+              ('Changing Line Styles and Colors', 3, None, '___sec4'),
+              ('The Figure Composition as an Object Hierarchy',
                3,
                3,
                None,
                None,
                '___sec5'),
                '___sec5'),
-              (' Animation: Translating the Vehicle ', 3, None, '___sec6'),
-              (' Animation: Rolling the Wheels ',
+              ('Animation: Translating the Vehicle', 3, None, '___sec6'),
+              ('Animation: Rolling the Wheels',
                3,
                3,
                'sketcher:vehicle1:anim',
                'sketcher:vehicle1:anim',
                'sketcher:vehicle1:anim'),
                'sketcher:vehicle1:anim'),
-              (' Basic Shapes ', 1, None, '___sec8'),
-              (' Axis ', 2, None, '___sec9'),
-              (' Distance with Text ', 2, None, '___sec10'),
-              (' Rectangle ', 2, None, '___sec11'),
-              (' Triangle ', 2, None, '___sec12'),
-              (' Arc ', 2, None, '___sec13'),
-              (' Spring ', 2, None, '___sec14'),
-              (' Dashpot ', 2, None, '___sec15'),
-              (' Wavy ', 2, None, '___sec16'),
-              (' Stochastic curves ', 2, None, '___sec17'),
-              (' Inner Workings of the Pysketcher Tool ',
-               1,
-               None,
-               '___sec18'),
-              (' Example of Classes for Geometric Objects ',
+              ('Basic Shapes', 1, None, '___sec8'),
+              ('Axis', 2, None, '___sec9'),
+              ('Distance with Text', 2, None, '___sec10'),
+              ('Rectangle', 2, None, '___sec11'),
+              ('Triangle', 2, None, '___sec12'),
+              ('Arc', 2, None, '___sec13'),
+              ('Spring', 2, None, '___sec14'),
+              ('Dashpot', 2, None, '___sec15'),
+              ('Wavy', 2, None, '___sec16'),
+              ('Stochastic curves', 2, None, '___sec17'),
+              ('Inner Workings of the Pysketcher Tool', 1, None, '___sec18'),
+              ('Example of Classes for Geometric Objects',
                2,
                2,
                None,
                None,
                '___sec19'),
                '___sec19'),
-              (' Simple Geometric Objects ', 3, None, '___sec20'),
-              (' Class Curve ', 3, None, '___sec21'),
-              (' Compound Geometric Objects ', 3, None, '___sec22'),
-              (' Adding Functionality via Recursion ', 2, None, '___sec23'),
-              (' Basic Principles of Recursion ', 3, None, '___sec24'),
-              (' Explaining Recursion ', 3, None, '___sec25'),
-              (' Scaling, Translating, and Rotating a Figure ',
+              ('Simple Geometric Objects', 3, None, '___sec20'),
+              ('Class Curve', 3, None, '___sec21'),
+              ('Compound Geometric Objects', 3, None, '___sec22'),
+              ('Adding Functionality via Recursion', 2, None, '___sec23'),
+              ('Basic Principles of Recursion', 3, None, '___sec24'),
+              ('Explaining Recursion', 3, None, '___sec25'),
+              ('Scaling, Translating, and Rotating a Figure',
                2,
                2,
                'sketcher:scaling',
                'sketcher:scaling',
                'sketcher:scaling'),
                'sketcher:scaling'),
-              (' Scaling ', 3, None, '___sec27'),
-              (' Translation ', 3, None, '___sec28'),
-              (' Rotation ', 3, None, '___sec29')]}
+              ('Scaling', 3, None, '___sec27'),
+              ('Translation', 3, None, '___sec28'),
+              ('Rotation', 3, None, '___sec29')]}
 end of tocinfo -->
 end of tocinfo -->
 
 
 <body>
 <body>
@@ -109,29 +95,67 @@ MathJax.Hub.Config({
 
 
 
 
     
     
-<a name="part0001"></a>
-<p>
-<!-- begin top navigation -->
-<table style="width: 100%"><tr><td>
-<div style="text-align: left;"><a href="._pysketcher000.html"><img src="http://hplgit.github.io/doconce/bundled/html_images/prev1.png" border=0 alt="&laquo; Previous"></a></div>
-</td><td>
-<div style="text-align: right;"><a href="._pysketcher002.html"><img src="http://hplgit.github.io/doconce/bundled/html_images/next1.png" border=0 alt="Next &raquo;"></a></div>
-</td></tr></table>
-<!-- end top navigation -->
-</p>
+<!-- Bootstrap navigation bar -->
+<div class="navbar navbar-default navbar-fixed-top">
+  <div class="navbar-header">
+    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse">
+      <span class="icon-bar"></span>
+      <span class="icon-bar"></span>
+      <span class="icon-bar"></span>
+    </button>
+    <a class="navbar-brand" href="pysketcher.html">Using Pysketcher to Create Principal Sketches of Physics Problems</a>
+  </div>
+
+  <div class="navbar-collapse collapse navbar-responsive-collapse">
+    <ul class="nav navbar-nav navbar-right">
+      <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Contents <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+     <!-- navigation toc: --> <li><a href="#___sec0" style="font-size: 80%;"><b>A First Glimpse of Pysketcher</b></a></li>
+     <!-- navigation toc: --> <li><a href="#___sec1" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Basic Construction of Sketches</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec2" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Basic Drawing</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec3" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Groups of Objects</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec4" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changing Line Styles and Colors</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec5" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Figure Composition as an Object Hierarchy</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec6" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Animation: Translating the Vehicle</a></li>
+     <!-- navigation toc: --> <li><a href="#sketcher:vehicle1:anim" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Animation: Rolling the Wheels</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec8" style="font-size: 80%;"><b>Basic Shapes</b></a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec9" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Axis</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec10" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Distance with Text</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec11" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Rectangle</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec12" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Triangle</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec13" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Arc</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec14" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Spring</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec15" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Dashpot</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec16" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Wavy</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec17" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Stochastic curves</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec18" style="font-size: 80%;"><b>Inner Workings of the Pysketcher Tool</b></a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec19" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Example of Classes for Geometric Objects</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec20" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Simple Geometric Objects</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec21" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class Curve</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec22" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compound Geometric Objects</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec23" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Adding Functionality via Recursion</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec24" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Basic Principles of Recursion</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec25" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Explaining Recursion</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#sketcher:scaling" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Scaling, Translating, and Rotating a Figure</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec27" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scaling</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec28" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Translation</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec29" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rotation</a></li>
+
+        </ul>
+      </li>
+    </ul>
+  </div>
+</div>
+</div> <!-- end of navigation bar -->
+
+<div class="container">
+
+<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p> <!-- add vertical space -->
 
 
-<p>
+<a name="part0001"></a>
 <!-- !split -->
 <!-- !split -->
 
 
-<p>
-2DO:
-
-<ul>
- <li> two wheels of different radii on inclined plane coupled to
-   correct solution</li>
- <li> <a href="http://inventwithpython.com/chapter17.html" target="_self">Pygame backend</a></li>
-</ul>
-
 <h1 id="___sec0">A First Glimpse of Pysketcher </h1>
 <h1 id="___sec0">A First Glimpse of Pysketcher </h1>
 
 
 <p>
 <p>
@@ -795,17 +819,28 @@ coming from physics simulations of the problem, as shown in the example above.
 
 
 <p>
 <p>
 <p>
 <p>
-<!-- begin bottom navigation -->
-<table style="width: 100%"><tr><td>
-<div style="text-align: left;"><a href="._pysketcher000.html"><img src="http://hplgit.github.io/doconce/bundled/html_images/prev1.png" border=0 alt="&laquo; Previous"></a></div>
-</td><td>
-<div style="text-align: right;"><a href="._pysketcher002.html"><img src="http://hplgit.github.io/doconce/bundled/html_images/next1.png" border=0 alt="Next &raquo;"></a></div>
-</td></tr></table>
-<!-- end bottom navigation -->
-</p>
-
+<!-- navigation buttons at the bottom of the page -->
+<ul class="pagination">
+<li><a href="._pysketcher000.html">&laquo;</a></li>
+  <li><a href="._pysketcher000.html">1</a></li>
+  <li class="active"><a href="._pysketcher001.html">2</a></li>
+  <li><a href="._pysketcher002.html">3</a></li>
+  <li><a href="._pysketcher003.html">4</a></li>
+  <li><a href="._pysketcher002.html">&raquo;</a></li>
+</ul>
 <!-- ------------------- end of main content --------------- -->
 <!-- ------------------- end of main content --------------- -->
 
 
+</div>  <!-- end container -->
+<!-- include javascript, jQuery *first* -->
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
+<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
+
+<!-- Bootstrap footer
+<footer>
+<a href="http://..."><img width="250" align=right src="http://..."></a>
+</footer>
+-->
+
 
 
 </body>
 </body>
 </html>
 </html>

+ 165 - 112
doc/pub/tutorial/._pysketcher002.html

@@ -11,31 +11,20 @@ Automatically generated HTML file from DocOnce source
 
 
 <title>Using Pysketcher to Create Principal Sketches of Physics Problems</title>
 <title>Using Pysketcher to Create Principal Sketches of Physics Problems</title>
 
 
+<!-- Bootstrap style: bootswatch_readable -->
+<link href="http://netdna.bootstrapcdn.com/bootswatch/3.1.1/readable/bootstrap.min.css" rel="stylesheet">
+<!-- not necessary
+<link href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+-->
 
 
 <style type="text/css">
 <style type="text/css">
-/* blueish style */
-
-/* Color definitions:  http://www.december.com/html/spec/color0.html
-   CSS examples:       http://www.w3schools.com/css/css_examples.asp */
 
 
-body {
-  margin-top: 1.0em;
-  background-color: #ffffff;
-  font-family: Helvetica, Arial, FreeSans, san-serif;
-  color: #000000;
+/* Add scrollbar to dropdown menus in bootstrap navigation bar */
+.dropdown-menu {
+   height: auto;
+   max-height: 400px;
+   overflow-x: hidden;
 }
 }
-h1 { font-size: 1.8em; color: #1e36ce; }
-h2 { font-size: 1.6em; color: #1e36ce; }
-h3 { font-size: 1.4em; color: #1e36ce; }
-a { color: #1e36ce; text-decoration:none; }
-tt { font-family: "Courier New", Courier; }
-/* pre style removed because it will interfer with pygments */
-p { text-indent: 0px; }
-hr { border: 0; width: 80%; border-bottom: 1px solid #aaa}
-p.caption { width: 80%; font-style: normal; text-align: left; }
-hr.figure { border: 0; width: 80%; border-bottom: 1px solid #aaa}
-
-div { text-align: justify; text-justify: inter-word; }
 </style>
 </style>
 
 
 
 
@@ -43,51 +32,48 @@ div { text-align: justify; text-justify: inter-word; }
 
 
 <!-- tocinfo
 <!-- tocinfo
 {'highest level': 1,
 {'highest level': 1,
- 'sections': [(' A First Glimpse of Pysketcher ', 1, None, '___sec0'),
-              (' Basic Construction of Sketches ', 2, None, '___sec1'),
-              (' Basic Drawing ', 3, None, '___sec2'),
-              (' Groups of Objects ', 3, None, '___sec3'),
-              (' Changing Line Styles and Colors ', 3, None, '___sec4'),
-              (' The Figure Composition as an Object Hierarchy ',
+ 'sections': [('A First Glimpse of Pysketcher', 1, None, '___sec0'),
+              ('Basic Construction of Sketches', 2, None, '___sec1'),
+              ('Basic Drawing', 3, None, '___sec2'),
+              ('Groups of Objects', 3, None, '___sec3'),
+              ('Changing Line Styles and Colors', 3, None, '___sec4'),
+              ('The Figure Composition as an Object Hierarchy',
                3,
                3,
                None,
                None,
                '___sec5'),
                '___sec5'),
-              (' Animation: Translating the Vehicle ', 3, None, '___sec6'),
-              (' Animation: Rolling the Wheels ',
+              ('Animation: Translating the Vehicle', 3, None, '___sec6'),
+              ('Animation: Rolling the Wheels',
                3,
                3,
                'sketcher:vehicle1:anim',
                'sketcher:vehicle1:anim',
                'sketcher:vehicle1:anim'),
                'sketcher:vehicle1:anim'),
-              (' Basic Shapes ', 1, None, '___sec8'),
-              (' Axis ', 2, None, '___sec9'),
-              (' Distance with Text ', 2, None, '___sec10'),
-              (' Rectangle ', 2, None, '___sec11'),
-              (' Triangle ', 2, None, '___sec12'),
-              (' Arc ', 2, None, '___sec13'),
-              (' Spring ', 2, None, '___sec14'),
-              (' Dashpot ', 2, None, '___sec15'),
-              (' Wavy ', 2, None, '___sec16'),
-              (' Stochastic curves ', 2, None, '___sec17'),
-              (' Inner Workings of the Pysketcher Tool ',
-               1,
-               None,
-               '___sec18'),
-              (' Example of Classes for Geometric Objects ',
+              ('Basic Shapes', 1, None, '___sec8'),
+              ('Axis', 2, None, '___sec9'),
+              ('Distance with Text', 2, None, '___sec10'),
+              ('Rectangle', 2, None, '___sec11'),
+              ('Triangle', 2, None, '___sec12'),
+              ('Arc', 2, None, '___sec13'),
+              ('Spring', 2, None, '___sec14'),
+              ('Dashpot', 2, None, '___sec15'),
+              ('Wavy', 2, None, '___sec16'),
+              ('Stochastic curves', 2, None, '___sec17'),
+              ('Inner Workings of the Pysketcher Tool', 1, None, '___sec18'),
+              ('Example of Classes for Geometric Objects',
                2,
                2,
                None,
                None,
                '___sec19'),
                '___sec19'),
-              (' Simple Geometric Objects ', 3, None, '___sec20'),
-              (' Class Curve ', 3, None, '___sec21'),
-              (' Compound Geometric Objects ', 3, None, '___sec22'),
-              (' Adding Functionality via Recursion ', 2, None, '___sec23'),
-              (' Basic Principles of Recursion ', 3, None, '___sec24'),
-              (' Explaining Recursion ', 3, None, '___sec25'),
-              (' Scaling, Translating, and Rotating a Figure ',
+              ('Simple Geometric Objects', 3, None, '___sec20'),
+              ('Class Curve', 3, None, '___sec21'),
+              ('Compound Geometric Objects', 3, None, '___sec22'),
+              ('Adding Functionality via Recursion', 2, None, '___sec23'),
+              ('Basic Principles of Recursion', 3, None, '___sec24'),
+              ('Explaining Recursion', 3, None, '___sec25'),
+              ('Scaling, Translating, and Rotating a Figure',
                2,
                2,
                'sketcher:scaling',
                'sketcher:scaling',
                'sketcher:scaling'),
                'sketcher:scaling'),
-              (' Scaling ', 3, None, '___sec27'),
-              (' Translation ', 3, None, '___sec28'),
-              (' Rotation ', 3, None, '___sec29')]}
+              ('Scaling', 3, None, '___sec27'),
+              ('Translation', 3, None, '___sec28'),
+              ('Rotation', 3, None, '___sec29')]}
 end of tocinfo -->
 end of tocinfo -->
 
 
 <body>
 <body>
@@ -109,18 +95,65 @@ MathJax.Hub.Config({
 
 
 
 
     
     
-<a name="part0002"></a>
-<p>
-<!-- begin top navigation -->
-<table style="width: 100%"><tr><td>
-<div style="text-align: left;"><a href="._pysketcher001.html"><img src="http://hplgit.github.io/doconce/bundled/html_images/prev1.png" border=0 alt="&laquo; Previous"></a></div>
-</td><td>
-<div style="text-align: right;"><a href="._pysketcher003.html"><img src="http://hplgit.github.io/doconce/bundled/html_images/next1.png" border=0 alt="Next &raquo;"></a></div>
-</td></tr></table>
-<!-- end top navigation -->
-</p>
+<!-- Bootstrap navigation bar -->
+<div class="navbar navbar-default navbar-fixed-top">
+  <div class="navbar-header">
+    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse">
+      <span class="icon-bar"></span>
+      <span class="icon-bar"></span>
+      <span class="icon-bar"></span>
+    </button>
+    <a class="navbar-brand" href="pysketcher.html">Using Pysketcher to Create Principal Sketches of Physics Problems</a>
+  </div>
+
+  <div class="navbar-collapse collapse navbar-responsive-collapse">
+    <ul class="nav navbar-nav navbar-right">
+      <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Contents <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec0" style="font-size: 80%;"><b>A First Glimpse of Pysketcher</b></a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec1" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Basic Construction of Sketches</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec2" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Basic Drawing</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec3" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Groups of Objects</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec4" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changing Line Styles and Colors</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec5" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Figure Composition as an Object Hierarchy</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec6" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Animation: Translating the Vehicle</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#sketcher:vehicle1:anim" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Animation: Rolling the Wheels</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec8" style="font-size: 80%;"><b>Basic Shapes</b></a></li>
+     <!-- navigation toc: --> <li><a href="#___sec9" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Axis</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec10" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Distance with Text</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec11" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Rectangle</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec12" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Triangle</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec13" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Arc</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec14" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Spring</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec15" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Dashpot</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec16" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Wavy</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec17" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Stochastic curves</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec18" style="font-size: 80%;"><b>Inner Workings of the Pysketcher Tool</b></a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec19" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Example of Classes for Geometric Objects</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec20" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Simple Geometric Objects</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec21" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class Curve</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec22" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compound Geometric Objects</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec23" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Adding Functionality via Recursion</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec24" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Basic Principles of Recursion</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec25" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Explaining Recursion</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#sketcher:scaling" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Scaling, Translating, and Rotating a Figure</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec27" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scaling</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec28" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Translation</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec29" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rotation</a></li>
+
+        </ul>
+      </li>
+    </ul>
+  </div>
+</div>
+</div> <!-- end of navigation bar -->
+
+<div class="container">
+
+<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p> <!-- add vertical space -->
 
 
-<p>
+<a name="part0002"></a>
 <!-- !split -->
 <!-- !split -->
 
 
 <h1 id="___sec8">Basic Shapes </h1>
 <h1 id="___sec8">Basic Shapes </h1>
@@ -131,6 +164,9 @@ This section presents many of the basic shapes in Pysketcher:
 <code>Spring</code>, <code>Dashpot</code>, and <code>Wavy</code>.
 <code>Spring</code>, <code>Dashpot</code>, and <code>Wavy</code>.
 Each shape is demonstrated with a figure and a
 Each shape is demonstrated with a figure and a
 unit test that shows how the figure is constructed in Python code.
 unit test that shows how the figure is constructed in Python code.
+These demos rely heavily on the method <code>draw_dimensions</code> in
+the shape classes, which annotates the basic drawing of the shape
+with the various geometric parameters that govern the shape.
 
 
 <h2 id="___sec9">Axis </h2>
 <h2 id="___sec9">Axis </h2>
 
 
@@ -226,9 +262,9 @@ was produced by this code:
         <span style="color: #BA2121">&#39;a2&#39;</span>: Distance_wText((<span style="color: #666666">0</span>,<span style="color: #666666">2</span>), (<span style="color: #666666">2</span>, <span style="color: #666666">0</span>), t, fontsize),
         <span style="color: #BA2121">&#39;a2&#39;</span>: Distance_wText((<span style="color: #666666">0</span>,<span style="color: #666666">2</span>), (<span style="color: #666666">2</span>, <span style="color: #666666">0</span>), t, fontsize),
         <span style="color: #BA2121">&#39;a3&#39;</span>: Distance_wText((<span style="color: #666666">2</span>,<span style="color: #666666">4.5</span>), (<span style="color: #666666">0</span>, <span style="color: #666666">5.5</span>), t, fontsize),
         <span style="color: #BA2121">&#39;a3&#39;</span>: Distance_wText((<span style="color: #666666">2</span>,<span style="color: #666666">4.5</span>), (<span style="color: #666666">0</span>, <span style="color: #666666">5.5</span>), t, fontsize),
         <span style="color: #BA2121">&#39;a4&#39;</span>: Distance_wText((<span style="color: #666666">8</span>,<span style="color: #666666">4</span>), (<span style="color: #666666">10</span>, <span style="color: #666666">3</span>), t, fontsize,
         <span style="color: #BA2121">&#39;a4&#39;</span>: Distance_wText((<span style="color: #666666">8</span>,<span style="color: #666666">4</span>), (<span style="color: #666666">10</span>, <span style="color: #666666">3</span>), t, fontsize,
-                             text_spacing<span style="color: #666666">=-1./60</span>),
+                             text_spacing<span style="color: #666666">=</span>old_div(<span style="color: #666666">-1.</span>,<span style="color: #666666">60</span>)),
         <span style="color: #BA2121">&#39;a5&#39;</span>: Distance_wText((<span style="color: #666666">8</span>,<span style="color: #666666">2</span>), (<span style="color: #666666">10</span>, <span style="color: #666666">1</span>), t, fontsize,
         <span style="color: #BA2121">&#39;a5&#39;</span>: Distance_wText((<span style="color: #666666">8</span>,<span style="color: #666666">2</span>), (<span style="color: #666666">10</span>, <span style="color: #666666">1</span>), t, fontsize,
-                             text_spacing<span style="color: #666666">=-1./40</span>, alignment<span style="color: #666666">=</span><span style="color: #BA2121">&#39;right&#39;</span>),
+                             text_spacing<span style="color: #666666">=</span>old_div(<span style="color: #666666">-1.</span>,<span style="color: #666666">40</span>), alignment<span style="color: #666666">=</span><span style="color: #BA2121">&#39;right&#39;</span>),
         <span style="color: #BA2121">&#39;c1&#39;</span>: Text_wArrow(<span style="color: #BA2121">&#39;text_spacing=-1./60&#39;</span>,
         <span style="color: #BA2121">&#39;c1&#39;</span>: Text_wArrow(<span style="color: #BA2121">&#39;text_spacing=-1./60&#39;</span>,
                           (<span style="color: #666666">4</span>, <span style="color: #666666">3.5</span>), (<span style="color: #666666">9</span>, <span style="color: #666666">3.2</span>),
                           (<span style="color: #666666">4</span>, <span style="color: #666666">3.5</span>), (<span style="color: #666666">9</span>, <span style="color: #666666">3.2</span>),
                           fontsize<span style="color: #666666">=10</span>, alignment<span style="color: #666666">=</span><span style="color: #BA2121">&#39;left&#39;</span>),
                           fontsize<span style="color: #666666">=10</span>, alignment<span style="color: #666666">=</span><span style="color: #BA2121">&#39;left&#39;</span>),
@@ -265,20 +301,21 @@ The above figure can be produced by the following code.
     W <span style="color: #666666">=</span> <span style="color: #666666">4.0</span>
     W <span style="color: #666666">=</span> <span style="color: #666666">4.0</span>
 
 
     drawing_tool<span style="color: #666666">.</span>set_coordinate_system(
     drawing_tool<span style="color: #666666">.</span>set_coordinate_system(
-        xmin<span style="color: #666666">=0</span>, xmax<span style="color: #666666">=2*</span>W, ymin<span style="color: #666666">=-</span>L<span style="color: #666666">/2</span>, ymax<span style="color: #666666">=2*</span>L,
+        xmin<span style="color: #666666">=0</span>, xmax<span style="color: #666666">=2*</span>W, ymin<span style="color: #666666">=</span>old_div(<span style="color: #666666">-</span>L,<span style="color: #666666">2</span>), ymax<span style="color: #666666">=2*</span>L,
         axis<span style="color: #666666">=</span><span style="color: #008000">True</span>, instruction_file<span style="color: #666666">=</span><span style="color: #BA2121">&#39;tmp_Rectangle.py&#39;</span>)
         axis<span style="color: #666666">=</span><span style="color: #008000">True</span>, instruction_file<span style="color: #666666">=</span><span style="color: #BA2121">&#39;tmp_Rectangle.py&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>set_linecolor(<span style="color: #BA2121">&#39;blue&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>set_linecolor(<span style="color: #BA2121">&#39;blue&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>set_grid(<span style="color: #008000">True</span>)
     drawing_tool<span style="color: #666666">.</span>set_grid(<span style="color: #008000">True</span>)
 
 
-    xpos <span style="color: #666666">=</span> W<span style="color: #666666">/2</span>
+    xpos <span style="color: #666666">=</span> old_div(W,<span style="color: #666666">2</span>)
     r <span style="color: #666666">=</span> Rectangle(lower_left_corner<span style="color: #666666">=</span>(xpos,<span style="color: #666666">0</span>), width<span style="color: #666666">=</span>W, height<span style="color: #666666">=</span>L)
     r <span style="color: #666666">=</span> Rectangle(lower_left_corner<span style="color: #666666">=</span>(xpos,<span style="color: #666666">0</span>), width<span style="color: #666666">=</span>W, height<span style="color: #666666">=</span>L)
     r<span style="color: #666666">.</span>draw()
     r<span style="color: #666666">.</span>draw()
     r<span style="color: #666666">.</span>draw_dimensions()
     r<span style="color: #666666">.</span>draw_dimensions()
     drawing_tool<span style="color: #666666">.</span>display(<span style="color: #BA2121">&#39;Rectangle&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>display(<span style="color: #BA2121">&#39;Rectangle&#39;</span>)
 </pre></div>
 </pre></div>
 <p>
 <p>
-The <code>draw_dimension</code> method adds explanation of dimensions and various
-important argument in the construction of a shape.
+Note that the <code>draw_dimension</code> method adds explanation of dimensions and various
+important argument in the construction of a shape. It adapts the annotations
+to the geometry of the current shape.
 
 
 <h2 id="___sec12">Triangle </h2>
 <h2 id="___sec12">Triangle </h2>
 
 
@@ -300,13 +337,13 @@ The code below produces the figure.
     W <span style="color: #666666">=</span> <span style="color: #666666">4.0</span>
     W <span style="color: #666666">=</span> <span style="color: #666666">4.0</span>
 
 
     drawing_tool<span style="color: #666666">.</span>set_coordinate_system(
     drawing_tool<span style="color: #666666">.</span>set_coordinate_system(
-        xmin<span style="color: #666666">=0</span>, xmax<span style="color: #666666">=2*</span>W, ymin<span style="color: #666666">=-</span>L<span style="color: #666666">/2</span>, ymax<span style="color: #666666">=1.2*</span>L,
+        xmin<span style="color: #666666">=0</span>, xmax<span style="color: #666666">=2*</span>W, ymin<span style="color: #666666">=</span>old_div(<span style="color: #666666">-</span>L,<span style="color: #666666">2</span>), ymax<span style="color: #666666">=1.2*</span>L,
         axis<span style="color: #666666">=</span><span style="color: #008000">True</span>, instruction_file<span style="color: #666666">=</span><span style="color: #BA2121">&#39;tmp_Triangle.py&#39;</span>)
         axis<span style="color: #666666">=</span><span style="color: #008000">True</span>, instruction_file<span style="color: #666666">=</span><span style="color: #BA2121">&#39;tmp_Triangle.py&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>set_linecolor(<span style="color: #BA2121">&#39;blue&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>set_linecolor(<span style="color: #BA2121">&#39;blue&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>set_grid(<span style="color: #008000">True</span>)
     drawing_tool<span style="color: #666666">.</span>set_grid(<span style="color: #008000">True</span>)
 
 
     xpos <span style="color: #666666">=</span> <span style="color: #666666">1</span>
     xpos <span style="color: #666666">=</span> <span style="color: #666666">1</span>
-    t <span style="color: #666666">=</span> Triangle(p1<span style="color: #666666">=</span>(W<span style="color: #666666">/2</span>,<span style="color: #666666">0</span>), p2<span style="color: #666666">=</span>(<span style="color: #666666">3*</span>W<span style="color: #666666">/2</span>,W<span style="color: #666666">/2</span>), p3<span style="color: #666666">=</span>(<span style="color: #666666">4*</span>W<span style="color: #666666">/5.</span>,L))
+    t <span style="color: #666666">=</span> Triangle(p1<span style="color: #666666">=</span>(old_div(W,<span style="color: #666666">2</span>),<span style="color: #666666">0</span>), p2<span style="color: #666666">=</span>(<span style="color: #666666">3*</span>W<span style="color: #666666">/2</span>,old_div(W,<span style="color: #666666">2</span>)), p3<span style="color: #666666">=</span>(<span style="color: #666666">4*</span>W<span style="color: #666666">/5.</span>,L))
     t<span style="color: #666666">.</span>draw()
     t<span style="color: #666666">.</span>draw()
     t<span style="color: #666666">.</span>draw_dimensions()
     t<span style="color: #666666">.</span>draw_dimensions()
     drawing_tool<span style="color: #666666">.</span>display(<span style="color: #BA2121">&#39;Triangle&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>display(<span style="color: #BA2121">&#39;Triangle&#39;</span>)
@@ -337,45 +374,50 @@ An arc like the one above is produced by
     W <span style="color: #666666">=</span> <span style="color: #666666">4.0</span>
     W <span style="color: #666666">=</span> <span style="color: #666666">4.0</span>
 
 
     drawing_tool<span style="color: #666666">.</span>set_coordinate_system(
     drawing_tool<span style="color: #666666">.</span>set_coordinate_system(
-        xmin<span style="color: #666666">=-</span>W<span style="color: #666666">/2</span>, xmax<span style="color: #666666">=</span>W, ymin<span style="color: #666666">=-</span>L<span style="color: #666666">/2</span>, ymax<span style="color: #666666">=1.5*</span>L,
+        xmin<span style="color: #666666">=</span>old_div(<span style="color: #666666">-</span>W,<span style="color: #666666">2</span>), xmax<span style="color: #666666">=</span>W, ymin<span style="color: #666666">=</span>old_div(<span style="color: #666666">-</span>L,<span style="color: #666666">2</span>), ymax<span style="color: #666666">=1.5*</span>L,
         axis<span style="color: #666666">=</span><span style="color: #008000">True</span>, instruction_file<span style="color: #666666">=</span><span style="color: #BA2121">&#39;tmp_Arc.py&#39;</span>)
         axis<span style="color: #666666">=</span><span style="color: #008000">True</span>, instruction_file<span style="color: #666666">=</span><span style="color: #BA2121">&#39;tmp_Arc.py&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>set_linecolor(<span style="color: #BA2121">&#39;blue&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>set_linecolor(<span style="color: #BA2121">&#39;blue&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>set_grid(<span style="color: #008000">True</span>)
     drawing_tool<span style="color: #666666">.</span>set_grid(<span style="color: #008000">True</span>)
 
 
     center <span style="color: #666666">=</span> point(<span style="color: #666666">0</span>,<span style="color: #666666">0</span>)
     center <span style="color: #666666">=</span> point(<span style="color: #666666">0</span>,<span style="color: #666666">0</span>)
-    radius <span style="color: #666666">=</span> L<span style="color: #666666">/2</span>
+    radius <span style="color: #666666">=</span> old_div(L,<span style="color: #666666">2</span>)
     start_angle <span style="color: #666666">=</span> <span style="color: #666666">60</span>
     start_angle <span style="color: #666666">=</span> <span style="color: #666666">60</span>
     arc_angle <span style="color: #666666">=</span> <span style="color: #666666">45</span>
     arc_angle <span style="color: #666666">=</span> <span style="color: #666666">45</span>
     a <span style="color: #666666">=</span> Arc(center, radius, start_angle, arc_angle)
     a <span style="color: #666666">=</span> Arc(center, radius, start_angle, arc_angle)
-    a<span style="color: #666666">.</span>set_arrow(<span style="color: #BA2121">&#39;-&gt;&#39;</span>)
     a<span style="color: #666666">.</span>draw()
     a<span style="color: #666666">.</span>draw()
 
 
     R1 <span style="color: #666666">=</span> <span style="color: #666666">1.25*</span>radius
     R1 <span style="color: #666666">=</span> <span style="color: #666666">1.25*</span>radius
     R2 <span style="color: #666666">=</span> <span style="color: #666666">1.5*</span>radius
     R2 <span style="color: #666666">=</span> <span style="color: #666666">1.5*</span>radius
     R <span style="color: #666666">=</span> <span style="color: #666666">2*</span>radius
     R <span style="color: #666666">=</span> <span style="color: #666666">2*</span>radius
     a<span style="color: #666666">.</span>dimensions <span style="color: #666666">=</span> {
     a<span style="color: #666666">.</span>dimensions <span style="color: #666666">=</span> {
-        <span style="color: #BA2121">&#39;start_angle&#39;</span>: Arc_wText(
+        <span style="color: #BA2121">&#39;start_angle&#39;</span>:
+        Arc_wText(
             <span style="color: #BA2121">&#39;start_angle&#39;</span>, center, R1, start_angle<span style="color: #666666">=0</span>,
             <span style="color: #BA2121">&#39;start_angle&#39;</span>, center, R1, start_angle<span style="color: #666666">=0</span>,
-            arc_angle<span style="color: #666666">=</span>start_angle, text_spacing<span style="color: #666666">=1/10.</span>),
-        <span style="color: #BA2121">&#39;arc_angle&#39;</span>: Arc_wText(
+            arc_angle<span style="color: #666666">=</span>start_angle, text_spacing<span style="color: #666666">=</span>old_div(<span style="color: #666666">1</span>,<span style="color: #666666">10.</span>)),
+        <span style="color: #BA2121">&#39;arc_angle&#39;</span>:
+        Arc_wText(
             <span style="color: #BA2121">&#39;arc_angle&#39;</span>, center, R2, start_angle<span style="color: #666666">=</span>start_angle,
             <span style="color: #BA2121">&#39;arc_angle&#39;</span>, center, R2, start_angle<span style="color: #666666">=</span>start_angle,
-            arc_angle<span style="color: #666666">=</span>arc_angle, text_spacing<span style="color: #666666">=1/20.</span>),
-        <span style="color: #BA2121">&#39;r=0&#39;</span>: Line(center, center <span style="color: #666666">+</span>
-                    point(R<span style="color: #666666">*</span>cos(radians(start_angle)),
-                          R<span style="color: #666666">*</span>sin(radians(start_angle)))),
-        <span style="color: #BA2121">&#39;r=start_angle&#39;</span>: Line(center, center <span style="color: #666666">+</span>
-                              point(R<span style="color: #666666">*</span>cos(radians(start_angle<span style="color: #666666">+</span>arc_angle)),
-                                    R<span style="color: #666666">*</span>sin(radians(start_angle<span style="color: #666666">+</span>arc_angle)))),
-        <span style="color: #BA2121">&#39;r=start+arc_angle&#39;</span>:  Line(center, center <span style="color: #666666">+</span>
-                                   point(R, <span style="color: #666666">0</span>))<span style="color: #666666">.</span>set_linestyle(<span style="color: #BA2121">&#39;dashed&#39;</span>),
-        <span style="color: #BA2121">&#39;radius&#39;</span>: Distance_wText(center, a(<span style="color: #666666">0</span>), <span style="color: #BA2121">&#39;radius&#39;</span>, text_spacing<span style="color: #666666">=1/40.</span>),
-        <span style="color: #BA2121">&#39;center&#39;</span>: Text(<span style="color: #BA2121">&#39;center&#39;</span>, center<span style="color: #666666">-</span>point(radius<span style="color: #666666">/10.</span>, radius<span style="color: #666666">/10.</span>)),
+            arc_angle<span style="color: #666666">=</span>arc_angle, text_spacing<span style="color: #666666">=</span>old_div(<span style="color: #666666">1</span>,<span style="color: #666666">20.</span>)),
+        <span style="color: #BA2121">&#39;r=0&#39;</span>:
+        Line(center, center <span style="color: #666666">+</span>
+             point(R<span style="color: #666666">*</span>cos(radians(start_angle)),
+                   R<span style="color: #666666">*</span>sin(radians(start_angle)))),
+        <span style="color: #BA2121">&#39;r=start_angle&#39;</span>:
+        Line(center, center <span style="color: #666666">+</span>
+             point(R<span style="color: #666666">*</span>cos(radians(start_angle<span style="color: #666666">+</span>arc_angle)),
+                   R<span style="color: #666666">*</span>sin(radians(start_angle<span style="color: #666666">+</span>arc_angle)))),
+        <span style="color: #BA2121">&#39;r=start+arc_angle&#39;</span>:
+        Line(center, center <span style="color: #666666">+</span>
+             point(R, <span style="color: #666666">0</span>))<span style="color: #666666">.</span>set_linestyle(<span style="color: #BA2121">&#39;dashed&#39;</span>),
+        <span style="color: #BA2121">&#39;radius&#39;</span>: Distance_wText(center, a(<span style="color: #666666">0</span>), <span style="color: #BA2121">&#39;radius&#39;</span>, text_spacing<span style="color: #666666">=</span>old_div(<span style="color: #666666">1</span>,<span style="color: #666666">40.</span>)),
+        <span style="color: #BA2121">&#39;center&#39;</span>: Text(<span style="color: #BA2121">&#39;center&#39;</span>, center<span style="color: #666666">-</span>point(old_div(radius,<span style="color: #666666">10.</span>), old_div(radius,<span style="color: #666666">10.</span>))),
         }
         }
     <span style="color: #008000; font-weight: bold">for</span> dimension <span style="color: #AA22FF; font-weight: bold">in</span> a<span style="color: #666666">.</span>dimensions:
     <span style="color: #008000; font-weight: bold">for</span> dimension <span style="color: #AA22FF; font-weight: bold">in</span> a<span style="color: #666666">.</span>dimensions:
-        dim <span style="color: #666666">=</span> a<span style="color: #666666">.</span>dimensions[dimension]
-        dim<span style="color: #666666">.</span>set_linestyle(<span style="color: #BA2121">&#39;dashed&#39;</span>)
-        dim<span style="color: #666666">.</span>set_linewidth(<span style="color: #666666">1</span>)
-        dim<span style="color: #666666">.</span>set_linecolor(<span style="color: #BA2121">&#39;black&#39;</span>)
+        <span style="color: #008000; font-weight: bold">if</span> dimension<span style="color: #666666">.</span>startswith(<span style="color: #BA2121">&#39;r=&#39;</span>):
+            dim <span style="color: #666666">=</span> a<span style="color: #666666">.</span>dimensions[dimension]
+            dim<span style="color: #666666">.</span>set_linestyle(<span style="color: #BA2121">&#39;dashed&#39;</span>)
+            dim<span style="color: #666666">.</span>set_linewidth(<span style="color: #666666">1</span>)
+            dim<span style="color: #666666">.</span>set_linecolor(<span style="color: #BA2121">&#39;black&#39;</span>)
 
 
     a<span style="color: #666666">.</span>draw_dimensions()
     a<span style="color: #666666">.</span>draw_dimensions()
     drawing_tool<span style="color: #666666">.</span>display(<span style="color: #BA2121">&#39;Arc&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>display(<span style="color: #BA2121">&#39;Arc&#39;</span>)
@@ -391,7 +433,7 @@ An arc like the one above is produced by
 <br />
 <br />
 
 
 <p>
 <p>
-The code for making this spring is
+The code for making these two springs goes like this:
 
 
 <p>
 <p>
 
 
@@ -401,7 +443,7 @@ The code for making this spring is
     W <span style="color: #666666">=</span> <span style="color: #666666">2.0</span>
     W <span style="color: #666666">=</span> <span style="color: #666666">2.0</span>
 
 
     drawing_tool<span style="color: #666666">.</span>set_coordinate_system(
     drawing_tool<span style="color: #666666">.</span>set_coordinate_system(
-        xmin<span style="color: #666666">=0</span>, xmax<span style="color: #666666">=7*</span>W, ymin<span style="color: #666666">=-</span>L<span style="color: #666666">/2</span>, ymax<span style="color: #666666">=1.5*</span>L,
+        xmin<span style="color: #666666">=0</span>, xmax<span style="color: #666666">=7*</span>W, ymin<span style="color: #666666">=</span>old_div(<span style="color: #666666">-</span>L,<span style="color: #666666">2</span>), ymax<span style="color: #666666">=1.5*</span>L,
         axis<span style="color: #666666">=</span><span style="color: #008000">True</span>, instruction_file<span style="color: #666666">=</span><span style="color: #BA2121">&#39;tmp_Spring.py&#39;</span>)
         axis<span style="color: #666666">=</span><span style="color: #008000">True</span>, instruction_file<span style="color: #666666">=</span><span style="color: #BA2121">&#39;tmp_Spring.py&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>set_linecolor(<span style="color: #BA2121">&#39;blue&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>set_linecolor(<span style="color: #BA2121">&#39;blue&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>set_grid(<span style="color: #008000">True</span>)
     drawing_tool<span style="color: #666666">.</span>set_grid(<span style="color: #008000">True</span>)
@@ -409,13 +451,13 @@ The code for making this spring is
     xpos <span style="color: #666666">=</span> W
     xpos <span style="color: #666666">=</span> W
     s1 <span style="color: #666666">=</span> Spring((W,<span style="color: #666666">0</span>), L, teeth<span style="color: #666666">=</span><span style="color: #008000">True</span>)
     s1 <span style="color: #666666">=</span> Spring((W,<span style="color: #666666">0</span>), L, teeth<span style="color: #666666">=</span><span style="color: #008000">True</span>)
     s1_title <span style="color: #666666">=</span> Text(<span style="color: #BA2121">&#39;Default Spring&#39;</span>,
     s1_title <span style="color: #666666">=</span> Text(<span style="color: #BA2121">&#39;Default Spring&#39;</span>,
-                    s1<span style="color: #666666">.</span>geometric_features()[<span style="color: #BA2121">&#39;end&#39;</span>] <span style="color: #666666">+</span> point(<span style="color: #666666">0</span>,L<span style="color: #666666">/10</span>))
+                    s1<span style="color: #666666">.</span>geometric_features()[<span style="color: #BA2121">&#39;end&#39;</span>] <span style="color: #666666">+</span> point(<span style="color: #666666">0</span>,old_div(L,<span style="color: #666666">10</span>)))
     s1<span style="color: #666666">.</span>draw()
     s1<span style="color: #666666">.</span>draw()
     s1_title<span style="color: #666666">.</span>draw()
     s1_title<span style="color: #666666">.</span>draw()
     <span style="color: #408080; font-style: italic">#s1.draw_dimensions()</span>
     <span style="color: #408080; font-style: italic">#s1.draw_dimensions()</span>
     xpos <span style="color: #666666">+=</span> <span style="color: #666666">3*</span>W
     xpos <span style="color: #666666">+=</span> <span style="color: #666666">3*</span>W
-    s2 <span style="color: #666666">=</span> Spring(start<span style="color: #666666">=</span>(xpos,<span style="color: #666666">0</span>), length<span style="color: #666666">=</span>L, width<span style="color: #666666">=</span>W<span style="color: #666666">/2.</span>,
-                bar_length<span style="color: #666666">=</span>L<span style="color: #666666">/6.</span>, teeth<span style="color: #666666">=</span><span style="color: #008000">False</span>)
+    s2 <span style="color: #666666">=</span> Spring(start<span style="color: #666666">=</span>(xpos,<span style="color: #666666">0</span>), length<span style="color: #666666">=</span>L, width<span style="color: #666666">=</span>old_div(W,<span style="color: #666666">2.</span>),
+                bar_length<span style="color: #666666">=</span>old_div(L,<span style="color: #666666">6.</span>), teeth<span style="color: #666666">=</span><span style="color: #008000">False</span>)
     s2<span style="color: #666666">.</span>draw()
     s2<span style="color: #666666">.</span>draw()
     s2<span style="color: #666666">.</span>draw_dimensions()
     s2<span style="color: #666666">.</span>draw_dimensions()
     drawing_tool<span style="color: #666666">.</span>display(<span style="color: #BA2121">&#39;Spring&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>display(<span style="color: #BA2121">&#39;Spring&#39;</span>)
@@ -442,7 +484,7 @@ This dashpot is produced by
     xpos <span style="color: #666666">=</span> <span style="color: #666666">0</span>
     xpos <span style="color: #666666">=</span> <span style="color: #666666">0</span>
 
 
     drawing_tool<span style="color: #666666">.</span>set_coordinate_system(
     drawing_tool<span style="color: #666666">.</span>set_coordinate_system(
-        xmin<span style="color: #666666">=</span>xpos, xmax<span style="color: #666666">=</span>xpos<span style="color: #666666">+5.5*</span>W, ymin<span style="color: #666666">=-</span>L<span style="color: #666666">/2</span>, ymax<span style="color: #666666">=1.5*</span>L,
+        xmin<span style="color: #666666">=</span>xpos, xmax<span style="color: #666666">=</span>xpos<span style="color: #666666">+5.5*</span>W, ymin<span style="color: #666666">=</span>old_div(<span style="color: #666666">-</span>L,<span style="color: #666666">2</span>), ymax<span style="color: #666666">=1.5*</span>L,
         axis<span style="color: #666666">=</span><span style="color: #008000">True</span>, instruction_file<span style="color: #666666">=</span><span style="color: #BA2121">&#39;tmp_Dashpot.py&#39;</span>)
         axis<span style="color: #666666">=</span><span style="color: #008000">True</span>, instruction_file<span style="color: #666666">=</span><span style="color: #BA2121">&#39;tmp_Dashpot.py&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>set_linecolor(<span style="color: #BA2121">&#39;blue&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>set_linecolor(<span style="color: #BA2121">&#39;blue&#39;</span>)
     drawing_tool<span style="color: #666666">.</span>set_grid(<span style="color: #008000">True</span>)
     drawing_tool<span style="color: #666666">.</span>set_grid(<span style="color: #008000">True</span>)
@@ -451,15 +493,15 @@ This dashpot is produced by
     xpos <span style="color: #666666">=</span> <span style="color: #666666">1.5</span>
     xpos <span style="color: #666666">=</span> <span style="color: #666666">1.5</span>
     d1 <span style="color: #666666">=</span> Dashpot(start<span style="color: #666666">=</span>(xpos,<span style="color: #666666">0</span>), total_length<span style="color: #666666">=</span>L)
     d1 <span style="color: #666666">=</span> Dashpot(start<span style="color: #666666">=</span>(xpos,<span style="color: #666666">0</span>), total_length<span style="color: #666666">=</span>L)
     d1_title <span style="color: #666666">=</span> Text(<span style="color: #BA2121">&#39;Dashpot (default)&#39;</span>,
     d1_title <span style="color: #666666">=</span> Text(<span style="color: #BA2121">&#39;Dashpot (default)&#39;</span>,
-                    d1<span style="color: #666666">.</span>geometric_features()[<span style="color: #BA2121">&#39;end&#39;</span>] <span style="color: #666666">+</span> point(<span style="color: #666666">0</span>,L<span style="color: #666666">/10</span>))
+                    d1<span style="color: #666666">.</span>geometric_features()[<span style="color: #BA2121">&#39;end&#39;</span>] <span style="color: #666666">+</span> point(<span style="color: #666666">0</span>,old_div(L,<span style="color: #666666">10</span>)))
     d1<span style="color: #666666">.</span>draw()
     d1<span style="color: #666666">.</span>draw()
     d1_title<span style="color: #666666">.</span>draw()
     d1_title<span style="color: #666666">.</span>draw()
 
 
     <span style="color: #408080; font-style: italic"># Dashpot for animation with fixed bar_length, dashpot_length and</span>
     <span style="color: #408080; font-style: italic"># Dashpot for animation with fixed bar_length, dashpot_length and</span>
     <span style="color: #408080; font-style: italic"># prescribed piston_pos</span>
     <span style="color: #408080; font-style: italic"># prescribed piston_pos</span>
     xpos <span style="color: #666666">+=</span> <span style="color: #666666">2.5*</span>W
     xpos <span style="color: #666666">+=</span> <span style="color: #666666">2.5*</span>W
-    d2 <span style="color: #666666">=</span> Dashpot(start<span style="color: #666666">=</span>(xpos,<span style="color: #666666">0</span>), total_length<span style="color: #666666">=1.2*</span>L, width<span style="color: #666666">=</span>W<span style="color: #666666">/2</span>,
-                 bar_length<span style="color: #666666">=</span>W, dashpot_length<span style="color: #666666">=</span>L<span style="color: #666666">/2</span>, piston_pos<span style="color: #666666">=2*</span>W)
+    d2 <span style="color: #666666">=</span> Dashpot(start<span style="color: #666666">=</span>(xpos,<span style="color: #666666">0</span>), total_length<span style="color: #666666">=1.2*</span>L, width<span style="color: #666666">=</span>old_div(W,<span style="color: #666666">2</span>),
+                 bar_length<span style="color: #666666">=</span>W, dashpot_length<span style="color: #666666">=</span>old_div(L,<span style="color: #666666">2</span>), piston_pos<span style="color: #666666">=2*</span>W)
     d2<span style="color: #666666">.</span>draw()
     d2<span style="color: #666666">.</span>draw()
     d2<span style="color: #666666">.</span>draw_dimensions()
     d2<span style="color: #666666">.</span>draw_dimensions()
 
 
@@ -505,17 +547,28 @@ are stored in the arrays <code>curve.x[curve_no]</code> and
 
 
 <p>
 <p>
 <p>
 <p>
-<!-- begin bottom navigation -->
-<table style="width: 100%"><tr><td>
-<div style="text-align: left;"><a href="._pysketcher001.html"><img src="http://hplgit.github.io/doconce/bundled/html_images/prev1.png" border=0 alt="&laquo; Previous"></a></div>
-</td><td>
-<div style="text-align: right;"><a href="._pysketcher003.html"><img src="http://hplgit.github.io/doconce/bundled/html_images/next1.png" border=0 alt="Next &raquo;"></a></div>
-</td></tr></table>
-<!-- end bottom navigation -->
-</p>
-
+<!-- navigation buttons at the bottom of the page -->
+<ul class="pagination">
+<li><a href="._pysketcher001.html">&laquo;</a></li>
+  <li><a href="._pysketcher000.html">1</a></li>
+  <li><a href="._pysketcher001.html">2</a></li>
+  <li class="active"><a href="._pysketcher002.html">3</a></li>
+  <li><a href="._pysketcher003.html">4</a></li>
+  <li><a href="._pysketcher003.html">&raquo;</a></li>
+</ul>
 <!-- ------------------- end of main content --------------- -->
 <!-- ------------------- end of main content --------------- -->
 
 
+</div>  <!-- end container -->
+<!-- include javascript, jQuery *first* -->
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
+<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
+
+<!-- Bootstrap footer
+<footer>
+<a href="http://..."><img width="250" align=right src="http://..."></a>
+</footer>
+-->
+
 
 
 </body>
 </body>
 </html>
 </html>

+ 117 - 72
doc/pub/tutorial/._pysketcher003.html

@@ -11,31 +11,20 @@ Automatically generated HTML file from DocOnce source
 
 
 <title>Using Pysketcher to Create Principal Sketches of Physics Problems</title>
 <title>Using Pysketcher to Create Principal Sketches of Physics Problems</title>
 
 
+<!-- Bootstrap style: bootswatch_readable -->
+<link href="http://netdna.bootstrapcdn.com/bootswatch/3.1.1/readable/bootstrap.min.css" rel="stylesheet">
+<!-- not necessary
+<link href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+-->
 
 
 <style type="text/css">
 <style type="text/css">
-/* blueish style */
-
-/* Color definitions:  http://www.december.com/html/spec/color0.html
-   CSS examples:       http://www.w3schools.com/css/css_examples.asp */
 
 
-body {
-  margin-top: 1.0em;
-  background-color: #ffffff;
-  font-family: Helvetica, Arial, FreeSans, san-serif;
-  color: #000000;
+/* Add scrollbar to dropdown menus in bootstrap navigation bar */
+.dropdown-menu {
+   height: auto;
+   max-height: 400px;
+   overflow-x: hidden;
 }
 }
-h1 { font-size: 1.8em; color: #1e36ce; }
-h2 { font-size: 1.6em; color: #1e36ce; }
-h3 { font-size: 1.4em; color: #1e36ce; }
-a { color: #1e36ce; text-decoration:none; }
-tt { font-family: "Courier New", Courier; }
-/* pre style removed because it will interfer with pygments */
-p { text-indent: 0px; }
-hr { border: 0; width: 80%; border-bottom: 1px solid #aaa}
-p.caption { width: 80%; font-style: normal; text-align: left; }
-hr.figure { border: 0; width: 80%; border-bottom: 1px solid #aaa}
-
-div { text-align: justify; text-justify: inter-word; }
 </style>
 </style>
 
 
 
 
@@ -43,51 +32,48 @@ div { text-align: justify; text-justify: inter-word; }
 
 
 <!-- tocinfo
 <!-- tocinfo
 {'highest level': 1,
 {'highest level': 1,
- 'sections': [(' A First Glimpse of Pysketcher ', 1, None, '___sec0'),
-              (' Basic Construction of Sketches ', 2, None, '___sec1'),
-              (' Basic Drawing ', 3, None, '___sec2'),
-              (' Groups of Objects ', 3, None, '___sec3'),
-              (' Changing Line Styles and Colors ', 3, None, '___sec4'),
-              (' The Figure Composition as an Object Hierarchy ',
+ 'sections': [('A First Glimpse of Pysketcher', 1, None, '___sec0'),
+              ('Basic Construction of Sketches', 2, None, '___sec1'),
+              ('Basic Drawing', 3, None, '___sec2'),
+              ('Groups of Objects', 3, None, '___sec3'),
+              ('Changing Line Styles and Colors', 3, None, '___sec4'),
+              ('The Figure Composition as an Object Hierarchy',
                3,
                3,
                None,
                None,
                '___sec5'),
                '___sec5'),
-              (' Animation: Translating the Vehicle ', 3, None, '___sec6'),
-              (' Animation: Rolling the Wheels ',
+              ('Animation: Translating the Vehicle', 3, None, '___sec6'),
+              ('Animation: Rolling the Wheels',
                3,
                3,
                'sketcher:vehicle1:anim',
                'sketcher:vehicle1:anim',
                'sketcher:vehicle1:anim'),
                'sketcher:vehicle1:anim'),
-              (' Basic Shapes ', 1, None, '___sec8'),
-              (' Axis ', 2, None, '___sec9'),
-              (' Distance with Text ', 2, None, '___sec10'),
-              (' Rectangle ', 2, None, '___sec11'),
-              (' Triangle ', 2, None, '___sec12'),
-              (' Arc ', 2, None, '___sec13'),
-              (' Spring ', 2, None, '___sec14'),
-              (' Dashpot ', 2, None, '___sec15'),
-              (' Wavy ', 2, None, '___sec16'),
-              (' Stochastic curves ', 2, None, '___sec17'),
-              (' Inner Workings of the Pysketcher Tool ',
-               1,
-               None,
-               '___sec18'),
-              (' Example of Classes for Geometric Objects ',
+              ('Basic Shapes', 1, None, '___sec8'),
+              ('Axis', 2, None, '___sec9'),
+              ('Distance with Text', 2, None, '___sec10'),
+              ('Rectangle', 2, None, '___sec11'),
+              ('Triangle', 2, None, '___sec12'),
+              ('Arc', 2, None, '___sec13'),
+              ('Spring', 2, None, '___sec14'),
+              ('Dashpot', 2, None, '___sec15'),
+              ('Wavy', 2, None, '___sec16'),
+              ('Stochastic curves', 2, None, '___sec17'),
+              ('Inner Workings of the Pysketcher Tool', 1, None, '___sec18'),
+              ('Example of Classes for Geometric Objects',
                2,
                2,
                None,
                None,
                '___sec19'),
                '___sec19'),
-              (' Simple Geometric Objects ', 3, None, '___sec20'),
-              (' Class Curve ', 3, None, '___sec21'),
-              (' Compound Geometric Objects ', 3, None, '___sec22'),
-              (' Adding Functionality via Recursion ', 2, None, '___sec23'),
-              (' Basic Principles of Recursion ', 3, None, '___sec24'),
-              (' Explaining Recursion ', 3, None, '___sec25'),
-              (' Scaling, Translating, and Rotating a Figure ',
+              ('Simple Geometric Objects', 3, None, '___sec20'),
+              ('Class Curve', 3, None, '___sec21'),
+              ('Compound Geometric Objects', 3, None, '___sec22'),
+              ('Adding Functionality via Recursion', 2, None, '___sec23'),
+              ('Basic Principles of Recursion', 3, None, '___sec24'),
+              ('Explaining Recursion', 3, None, '___sec25'),
+              ('Scaling, Translating, and Rotating a Figure',
                2,
                2,
                'sketcher:scaling',
                'sketcher:scaling',
                'sketcher:scaling'),
                'sketcher:scaling'),
-              (' Scaling ', 3, None, '___sec27'),
-              (' Translation ', 3, None, '___sec28'),
-              (' Rotation ', 3, None, '___sec29')]}
+              ('Scaling', 3, None, '___sec27'),
+              ('Translation', 3, None, '___sec28'),
+              ('Rotation', 3, None, '___sec29')]}
 end of tocinfo -->
 end of tocinfo -->
 
 
 <body>
 <body>
@@ -109,17 +95,65 @@ MathJax.Hub.Config({
 
 
 
 
     
     
-<a name="part0003"></a>
-<p>
-<!-- begin top navigation -->
-<table style="width: 100%"><tr><td>
-<div style="text-align: left;"><a href="._pysketcher002.html"><img src="http://hplgit.github.io/doconce/bundled/html_images/prev1.png" border=0 alt="&laquo; Previous"></a></div>
-</td><td>
-</td></tr></table>
-<!-- end top navigation -->
-</p>
+<!-- Bootstrap navigation bar -->
+<div class="navbar navbar-default navbar-fixed-top">
+  <div class="navbar-header">
+    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse">
+      <span class="icon-bar"></span>
+      <span class="icon-bar"></span>
+      <span class="icon-bar"></span>
+    </button>
+    <a class="navbar-brand" href="pysketcher.html">Using Pysketcher to Create Principal Sketches of Physics Problems</a>
+  </div>
+
+  <div class="navbar-collapse collapse navbar-responsive-collapse">
+    <ul class="nav navbar-nav navbar-right">
+      <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Contents <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec0" style="font-size: 80%;"><b>A First Glimpse of Pysketcher</b></a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec1" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Basic Construction of Sketches</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec2" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Basic Drawing</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec3" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Groups of Objects</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec4" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changing Line Styles and Colors</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec5" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Figure Composition as an Object Hierarchy</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec6" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Animation: Translating the Vehicle</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#sketcher:vehicle1:anim" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Animation: Rolling the Wheels</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec8" style="font-size: 80%;"><b>Basic Shapes</b></a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec9" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Axis</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec10" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Distance with Text</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec11" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Rectangle</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec12" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Triangle</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec13" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Arc</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec14" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Spring</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec15" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Dashpot</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec16" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Wavy</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec17" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Stochastic curves</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec18" style="font-size: 80%;"><b>Inner Workings of the Pysketcher Tool</b></a></li>
+     <!-- navigation toc: --> <li><a href="#___sec19" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Example of Classes for Geometric Objects</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec20" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Simple Geometric Objects</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec21" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class Curve</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec22" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compound Geometric Objects</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec23" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Adding Functionality via Recursion</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec24" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Basic Principles of Recursion</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec25" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Explaining Recursion</a></li>
+     <!-- navigation toc: --> <li><a href="#sketcher:scaling" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Scaling, Translating, and Rotating a Figure</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec27" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scaling</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec28" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Translation</a></li>
+     <!-- navigation toc: --> <li><a href="#___sec29" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rotation</a></li>
+
+        </ul>
+      </li>
+    </ul>
+  </div>
+</div>
+</div> <!-- end of navigation bar -->
+
+<div class="container">
+
+<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p> <!-- add vertical space -->
 
 
-<p>
+<a name="part0003"></a>
 <!-- !split -->
 <!-- !split -->
 
 
 <h1 id="___sec18">Inner Workings of the Pysketcher Tool </h1>
 <h1 id="___sec18">Inner Workings of the Pysketcher Tool </h1>
@@ -879,16 +913,27 @@ We have already seen the <code>rotate</code> method in action when animating the
 rolling wheel at the end of the section <a href="._pysketcher001.html#sketcher:vehicle1:anim">Animation: Rolling the Wheels</a>.
 rolling wheel at the end of the section <a href="._pysketcher001.html#sketcher:vehicle1:anim">Animation: Rolling the Wheels</a>.
 
 
 <p>
 <p>
-<!-- begin bottom navigation -->
-<table style="width: 100%"><tr><td>
-<div style="text-align: left;"><a href="._pysketcher002.html"><img src="http://hplgit.github.io/doconce/bundled/html_images/prev1.png" border=0 alt="&laquo; Previous"></a></div>
-</td><td>
-</td></tr></table>
-<!-- end bottom navigation -->
-</p>
-
+<!-- navigation buttons at the bottom of the page -->
+<ul class="pagination">
+<li><a href="._pysketcher002.html">&laquo;</a></li>
+  <li><a href="._pysketcher000.html">1</a></li>
+  <li><a href="._pysketcher001.html">2</a></li>
+  <li><a href="._pysketcher002.html">3</a></li>
+  <li class="active"><a href="._pysketcher003.html">4</a></li>
+</ul>
 <!-- ------------------- end of main content --------------- -->
 <!-- ------------------- end of main content --------------- -->
 
 
+</div>  <!-- end container -->
+<!-- include javascript, jQuery *first* -->
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
+<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
+
+<!-- Bootstrap footer
+<footer>
+<a href="http://..."><img width="250" align=right src="http://..."></a>
+</footer>
+-->
+
 
 
 </body>
 </body>
 </html>
 </html>

二进制
doc/pub/tutorial/fig-tut/Arc.pdf


二进制
doc/pub/tutorial/fig-tut/Arc.png


二进制
doc/pub/tutorial/fig-tut/Axis.pdf


二进制
doc/pub/tutorial/fig-tut/Axis.png


二进制
doc/pub/tutorial/fig-tut/Dashpot.pdf


二进制
doc/pub/tutorial/fig-tut/Dashpot.png


二进制
doc/pub/tutorial/fig-tut/Distance_wText.pdf


二进制
doc/pub/tutorial/fig-tut/Distance_wText.png


二进制
doc/pub/tutorial/fig-tut/Rectangle.pdf


二进制
doc/pub/tutorial/fig-tut/Rectangle.png


二进制
doc/pub/tutorial/fig-tut/Shape_hierarchy_complete.png


二进制
doc/pub/tutorial/fig-tut/Shape_hierarchy_larger.png


二进制
doc/pub/tutorial/fig-tut/Shape_hierarchy_small.png


二进制
doc/pub/tutorial/fig-tut/Spring.pdf


二进制
doc/pub/tutorial/fig-tut/Spring.png


二进制
doc/pub/tutorial/fig-tut/StochasticWavyCurve.pdf


二进制
doc/pub/tutorial/fig-tut/StochasticWavyCurve.png


二进制
doc/pub/tutorial/fig-tut/Triangle.pdf


二进制
doc/pub/tutorial/fig-tut/Triangle.png


二进制
doc/pub/tutorial/fig-tut/Vehicle0_hier2.pdf


二进制
doc/pub/tutorial/fig-tut/Vehicle0_hier2.png


二进制
doc/pub/tutorial/fig-tut/Wavy.pdf


二进制
doc/pub/tutorial/fig-tut/Wavy.png


二进制
doc/pub/tutorial/fig-tut/beam_mid_support_deflection.png


二进制
doc/pub/tutorial/fig-tut/beam_mid_support_math.png


二进制
doc/pub/tutorial/fig-tut/beam_mid_support_raw.png


+ 794 - 0
doc/pub/tutorial/fig-tut/mpl_code_Arc.py

@@ -0,0 +1,794 @@
+import matplotlib.pyplot as mpl
+import matplotlib.transforms as transforms
+
+mpl.ion()  # for interactive drawing
+fig = mpl.figure()
+
+ax = fig.gca()
+xmin, xmax, ymin, ymax = -2.0, 4.0, -2.0, 6.0
+ax.set_xlim(xmin, xmax)
+ax.set_ylim(ymin, ymax)
+ax.set_aspect('equal')
+
+
+
+mpl.grid(True)
+
+# arc
+mpl.arrow(x=-0.509204, y=1.93409, dx=-0.00843419, dy=-0.00224023,
+          facecolor='b', edgecolor='b',
+          linestyle='solid',
+          linewidth=2, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+ax.text(-0.2, -0.2, 'center',
+        horizontalalignment='center', fontsize=14)
+ax.text(2.68468, 1.55, 'start_angle',
+        horizontalalignment='center', fontsize=14)
+
+# arc
+x = [2.5,
+ 2.4999576921443607,
+ 2.4998307700094053,
+ 2.499619237890978,
+ 2.4993231029486545,
+ 2.4989423752055013,
+ 2.4984770675477392,
+ 2.497927195724303,
+ 2.4972927783463112,
+ 2.4965738368864345,
+ 2.4957703956781705,
+ 2.4948824819150186,
+ 2.4939101256495606,
+ 2.4928533597924436,
+ 2.491712220111265,
+ 2.4904867452293638,
+ 2.489176976624511,
+ 2.4877829586275078,
+ 2.4863047384206833,
+ 2.4847423660362997,
+ 2.4830958943548573,
+ 2.481365379103305,
+ 2.4795508788531544,
+ 2.4776524550184966,
+ 2.475670171853926,
+ 2.473604096452361,
+ 2.4714542987427794,
+ 2.4692208514878446,
+ 2.466903830281448,
+ 2.464503313546149,
+ 2.46201938253052,
+ 2.4594521213063967,
+ 2.4568016167660334,
+ 2.45406795861916,
+ 2.4512512393899484,
+ 2.4483515544138785,
+ 2.4453690018345142,
+ 2.442303682600177,
+ 2.4391557004605358,
+ 2.435925161963088,
+ 2.4326121764495596,
+ 2.4292168560522005,
+ 2.425739315689991,
+ 2.422179673064752,
+ 2.41853804865716,
+ 2.4148145657226707,
+ 2.411009350287347,
+ 2.407122531143594,
+ 2.4031542398457972,
+ 2.3991046107058733,
+ 2.3949737807887224,
+ 2.390761889907589,
+ 2.38646908061933,
+ 2.38209549821959,
+ 2.377641290737884,
+ 2.3731066089325847,
+ 2.3684916062858234,
+ 2.363796438998292,
+ 2.359021265983959,
+ 2.354166248864688,
+ 2.3492315519647713,
+ 2.3442173423053623,
+ 2.339123789598829,
+ 2.3339510662430043,
+ 2.328699347315356,
+ 2.323368810567056,
+ 2.3179596364169686,
+ 2.3124720079455403,
+ 2.306906110888606,
+ 2.3012621336311008,
+ 2.295540267200685,
+ 2.289740705261278,
+ 2.2838636441065026,
+ 2.2779092826530425,
+ 2.2718778224339107,
+ 2.2657694675916247,
+ 2.2595844248713015,
+ 2.2533229036136557,
+ 2.2469851157479175,
+ 2.2405712757846583,
+ 2.2340816008085307,
+ 2.2275163104709197,
+ 2.2208756269825103,
+ 2.214159775105765,
+ 2.2073689821473175,
+ 2.200503477950278,
+ 2.193563494886455,
+ 2.1865492678484895,
+ 2.179461034241906,
+ 2.1722990339770756,
+ 2.165063509461097,
+ 2.157754705589591,
+ 2.1503728697384137,
+ 2.142918251755281,
+ 2.135391103951314,
+ 2.1277916810924995,
+ 2.1201202403910653,
+ 2.1123770414967753,
+ 2.104562346488144,
+ 2.0966764198635603,
+ 2.088719528532341,
+ 2.0806919418056946,
+ 2.0725939313876043,
+ 2.0644257713656353,
+ 2.056187738201656,
+ 2.0478801107224793,
+ 2.03950317011043,
+ 2.031057199893823,
+ 2.0225424859373686,
+ 2.0139593164324983,
+ 2.0053079818876096,
+ 1.9965887751182323,
+ 1.9878019912371194,
+ 1.9789479276442588,
+ 1.970026884016805,
+ 1.9610391622989396,
+ 1.9519850666916483,
+ 1.9428649036424273,
+ 1.93367898183491,
+ 1.9244276121784196,
+ 1.9151111077974452,
+ 1.905729784021045,
+ 1.8962839583721727,
+ 1.8867739505569303,
+ 1.877200082453748,
+ 1.86756267810249,
+ 1.857862063693486,
+ 1.8480985675564905,
+ 1.8382725201495718,
+ 1.8283842540479265,
+ 1.8184341039326222,
+ 1.80842240657927,
+ 1.7983495008466281,
+ 1.788215727665129,
+ 1.778021430025343,
+ 1.7677669529663689,
+ 1.7574526435641544,
+ 1.7470788509197501,
+ 1.7366459261474934,
+ 1.7261542223631243,
+ 1.7156040946718343,
+ 1.7049959001562465,
+ 1.694329997864331,
+ 1.683606748797251,
+ 1.6728265158971458,
+ 1.6619896640348446,
+ 1.6510965599975194,
+ 1.6401475724762684,
+ 1.6291430720536382,
+ 1.6180834311910814,
+ 1.6069690242163488,
+ 1.595800227310821,
+ 1.5845774184967758,
+ 1.5733009776245939,
+ 1.561971286359901,
+ 1.5505887281706503,
+ 1.539153688314146,
+ 1.5276665538239997,
+ 1.516127713497034,
+ 1.504537557880121,
+ 1.4928964792569657,
+ 1.4812048716348272,
+ 1.4694631307311832,
+ 1.4576716539603372,
+ 1.4458308404199665,
+ 1.4339410908776153,
+ 1.4220028077571298,
+ 1.4100163951250364,
+ 1.3979822586768675,
+ 1.385900805723429,
+ 1.3737724451770152,
+ 1.361597587537568,
+ 1.3493766448787827,
+ 1.337110030834161,
+ 1.3247981605830128,
+ 1.312441450836401,
+ 1.3000403198230388,
+ 1.2875951872751359,
+ 1.2751064744141885,
+ 1.2625746039367256,
+ 1.2500000000000002]
+y = [0.0,
+ 0.014544328387484583,
+ 0.029088164503492532,
+ 0.04363101609320877,
+ 0.058172390935140796,
+ 0.07271179685777851,
+ 0.08724874175625241,
+ 0.10178273360898957,
+ 0.11631328049436661,
+ 0.13083989060735957,
+ 0.14536207227618955,
+ 0.1598793339789641,
+ 0.17439118436031323,
+ 0.18889713224802018,
+ 0.2033966866696457,
+ 0.21788935686914537,
+ 0.23237465232348048,
+ 0.24685208275921977,
+ 0.2613211581691336,
+ 0.27578138882877923,
+ 0.29023228531307554,
+ 0.30467335851286864,
+ 0.3191041196514865,
+ 0.3335240803012817,
+ 0.3479327524001635,
+ 0.3623296482681168,
+ 0.37671428062370776,
+ 0.3910861626005771,
+ 0.40544480776391856,
+ 0.41978973012694265,
+ 0.43412044416732576,
+ 0.4484364648436434,
+ 0.46273730761178644,
+ 0.47702248844136197,
+ 0.49129152383207525,
+ 0.5055439308300947,
+ 0.5197792270443982,
+ 0.5339969306631001,
+ 0.5481965604697582,
+ 0.5623776358596624,
+ 0.5765396768561003,
+ 0.5906822041266032,
+ 0.6048047389991692,
+ 0.618906803478465,
+ 0.6329879202620043,
+ 0.6470476127563018,
+ 0.6610854050930054,
+ 0.6751008221450018,
+ 0.6890933895424978,
+ 0.7030626336890764,
+ 0.7170080817777256,
+ 0.7309292618068418,
+ 0.7448257025962048,
+ 0.7586969338029265,
+ 0.7725424859373684,
+ 0.7863618903790339,
+ 0.8001546793924288,
+ 0.8139203861428916,
+ 0.8276585447123951,
+ 0.8413686901153157,
+ 0.8550503583141716,
+ 0.8687030862353283,
+ 0.8823264117846721,
+ 0.8959198738632506,
+ 0.9094830123828785,
+ 0.9230153682817109,
+ 0.9365164835397799,
+ 0.9499859011944972,
+ 0.9634231653561207,
+ 0.9768278212231842,
+ 0.9901994150978919,
+ 1.0035374944014728,
+ 1.0168416076895004,
+ 1.0301113046671708,
+ 1.0433461362045446,
+ 1.0565456543517484,
+ 1.0697094123541355,
+ 1.0828369646674074,
+ 1.0959278669726933,
+ 1.1089816761915896,
+ 1.1219979505011553,
+ 1.1349762493488669,
+ 1.147916133467529,
+ 1.1608171648901422,
+ 1.1736789069647267,
+ 1.186500924369101,
+ 1.1992827831256152,
+ 1.2120240506158424,
+ 1.2247242955952173,
+ 1.237383088207635,
+ 1.2499999999999998,
+ 1.2625746039367247,
+ 1.275106474414188,
+ 1.287595187275135,
+ 1.3000403198230384,
+ 1.3124414508364004,
+ 1.3247981605830121,
+ 1.3371100308341606,
+ 1.3493766448787818,
+ 1.3615975875375674,
+ 1.373772445177015,
+ 1.3859008057234283,
+ 1.3979822586768669,
+ 1.4100163951250357,
+ 1.4220028077571292,
+ 1.4339410908776151,
+ 1.445830840419966,
+ 1.4576716539603365,
+ 1.4694631307311825,
+ 1.4812048716348267,
+ 1.4928964792569652,
+ 1.5045375578801203,
+ 1.5161277134970332,
+ 1.527666553823999,
+ 1.5391536883141455,
+ 1.5505887281706499,
+ 1.5619712863599002,
+ 1.5733009776245934,
+ 1.5845774184967754,
+ 1.5958002273108205,
+ 1.6069690242163481,
+ 1.6180834311910808,
+ 1.6291430720536377,
+ 1.640147572476268,
+ 1.6510965599975191,
+ 1.6619896640348442,
+ 1.6728265158971454,
+ 1.6836067487972506,
+ 1.6943299978643305,
+ 1.7049959001562462,
+ 1.7156040946718338,
+ 1.726154222363124,
+ 1.736645926147493,
+ 1.74707885091975,
+ 1.7574526435641542,
+ 1.7677669529663687,
+ 1.7780214300253427,
+ 1.7882157276651283,
+ 1.7983495008466277,
+ 1.8084224065792696,
+ 1.8184341039326215,
+ 1.828384254047926,
+ 1.8382725201495713,
+ 1.8480985675564898,
+ 1.8578620636934853,
+ 1.8675626781024899,
+ 1.8772000824537476,
+ 1.8867739505569299,
+ 1.8962839583721722,
+ 1.9057297840210445,
+ 1.9151111077974448,
+ 1.924427612178419,
+ 1.9336789818349098,
+ 1.942864903642427,
+ 1.9519850666916478,
+ 1.961039162298939,
+ 1.9700268840168045,
+ 1.9789479276442585,
+ 1.9878019912371192,
+ 1.9965887751182319,
+ 2.005307981887609,
+ 2.0139593164324983,
+ 2.022542485937368,
+ 2.0310571998938225,
+ 2.03950317011043,
+ 2.0478801107224793,
+ 2.0561877382016553,
+ 2.064425771365635,
+ 2.072593931387604,
+ 2.080691941805694,
+ 2.0887195285323408,
+ 2.09667641986356,
+ 2.104562346488143,
+ 2.1123770414967753,
+ 2.1201202403910644,
+ 2.127791681092499,
+ 2.1353911039513136,
+ 2.1429182517552805,
+ 2.1503728697384132,
+ 2.1577547055895905,
+ 2.1650635094610964]
+[line] = ax.plot(x, y, 'k', linewidth=1, linestyle='dashed')
+
+# line
+x = [0.0, 4.0]
+y = [0.0, 0.0]
+[line] = ax.plot(x, y, 'k', linewidth=1, linestyle='dashed')
+
+# line
+x = [0.0, 2.0000000000000004]
+y = [0.0, 3.4641016151377544]
+[line] = ax.plot(x, y, 'k', linewidth=1, linestyle='dashed')
+ax.text(0.629904, 0.791025, 'radius',
+        horizontalalignment='left', fontsize=14)
+
+# line
+mpl.arrow(x=1, y=1.73205, dx=-1, dy=-1.73205,
+          facecolor='k', edgecolor='k',
+          linestyle='dashed',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.arrow(x=0, y=0, dx=1, dy=1.73205,
+          facecolor='k', edgecolor='k',
+          linestyle='dashed',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+
+# line
+x = [0.0, -1.0352761804100834]
+y = [0.0, 3.8637033051562732]
+[line] = ax.plot(x, y, 'k', linewidth=1, linestyle='dashed')
+ax.text(0.430736, 3.27177, 'arc_angle',
+        horizontalalignment='center', fontsize=14)
+
+# arc
+x = [1.5000000000000004,
+ 1.488649511025625,
+ 1.477270680310402,
+ 1.4658637244908648,
+ 1.4544288607390112,
+ 1.4429663067581633,
+ 1.4314762807788257,
+ 1.4199590015545303,
+ 1.4084146883576727,
+ 1.3968435609753347,
+ 1.3852458397051022,
+ 1.3736217453508708,
+ 1.3619714992186405,
+ 1.3502953231123052,
+ 1.3385934393294268,
+ 1.3268660706570043,
+ 1.3151134403672324,
+ 1.3033357722132515,
+ 1.2915332904248857,
+ 1.2797062197043756,
+ 1.2678547852220987,
+ 1.2559792126122844,
+ 1.2440797279687175,
+ 1.2321565578404323,
+ 1.2202099292274011,
+ 1.2082400695762117,
+ 1.1962472067757388,
+ 1.184231569152802,
+ 1.1721933854678217,
+ 1.1601328849104626,
+ 1.1480502970952695,
+ 1.1359458520572991,
+ 1.1238197802477365,
+ 1.1116723125295092,
+ 1.099503680172892,
+ 1.0873141148511052,
+ 1.075103848635901,
+ 1.062873113993148,
+ 1.0506221437784022,
+ 1.038351171232479,
+ 1.0260604299770064,
+ 1.0137501540099814,
+ 1.0014205777013134,
+ 0.9890719357883619,
+ 0.9767044633714703,
+ 0.9643183959094851,
+ 0.9519139692152769,
+ 0.9394914194512493,
+ 0.9270509831248424,
+ 0.9145928970840327,
+ 0.9021173985128199,
+ 0.8896247249267135,
+ 0.8771151141682103,
+ 0.8645888044022682,
+ 0.8520460341117683,
+ 0.8394870420929765,
+ 0.8269120674509975,
+ 0.814321349595223,
+ 0.8017151282347709,
+ 0.7890936433739248,
+ 0.7764571353075629,
+ 0.7638058446165829,
+ 0.7511400121633245,
+ 0.7384598790869795,
+ 0.7257656867990037,
+ 0.71305767697852,
+ 0.7003360915677164,
+ 0.6876011727672428,
+ 0.6748531630315955,
+ 0.6620923050645039,
+ 0.6493188418143094,
+ 0.636533016469339,
+ 0.6237350724532784,
+ 0.6109252534205329,
+ 0.5981038032515915,
+ 0.585270966048385,
+ 0.5724269861296347,
+ 0.5595721080262044,
+ 0.5467065764764429,
+ 0.5338306364215253,
+ 0.5209445330007912,
+ 0.5080485115470743,
+ 0.4951428175820335,
+ 0.482227696811479,
+ 0.46930339512069275,
+ 0.4563701585697504,
+ 0.4434282333888323,
+ 0.43047786597353854,
+ 0.41751930288019706,
+ 0.40455279082116924,
+ 0.39157857666015516,
+ 0.37859690740748986,
+ 0.36560803021544247,
+ 0.3526121923735131,
+ 0.3396096413037205,
+ 0.3266006245558942,
+ 0.313585389802961,
+ 0.30056418483622893,
+ 0.28753725756067217,
+ 0.2745048559902076,
+ 0.2614672282429751,
+ 0.24842462253661374,
+ 0.235377287183535,
+ 0.22232547058619806,
+ 0.20926942123237635,
+ 0.19620938769042914,
+ 0.1831456186045714,
+ 0.17007836269013277,
+ 0.1570078687288319,
+ 0.14393438556403237,
+ 0.13085816209600803,
+ 0.11777944727720599,
+ 0.10469849010750323,
+ 0.09161553962946846,
+ 0.07853084492362009,
+ 0.06544465510368347,
+ 0.05235721931185079,
+ 0.03926878671403372,
+ 0.026179606495121688,
+ 0.013089927854240412,
+ 1.8369701987210297e-16,
+ -0.01308992785423938,
+ -0.026179606495121327,
+ -0.03926878671403335,
+ -0.052357219311849765,
+ -0.06544465510368311,
+ -0.07853084492361906,
+ -0.09161553962946742,
+ -0.10469849010750287,
+ -0.11777944727720498,
+ -0.13085816209600767,
+ -0.14393438556403138,
+ -0.15700786872883085,
+ -0.1700783626901324,
+ -0.18314561860457035,
+ -0.19620938769042878,
+ -0.209269421232376,
+ -0.222325470586197,
+ -0.23537728718353462,
+ -0.24842462253661268,
+ -0.261467228242974,
+ -0.2745048559902072,
+ -0.28753725756067117,
+ -0.3005641848362286,
+ -0.31358538980296,
+ -0.32660062455589317,
+ -0.3396096413037201,
+ -0.35261219237351205,
+ -0.3656080302154421,
+ -0.37859690740748875,
+ -0.39157857666015417,
+ -0.4045527908211689,
+ -0.41751930288019606,
+ -0.43047786597353743,
+ -0.44342823338883197,
+ -0.4563701585697494,
+ -0.4693033951206924,
+ -0.482227696811478,
+ -0.4951428175820325,
+ -0.5080485115470739,
+ -0.5209445330007902,
+ -0.5338306364215251,
+ -0.5467065764764419,
+ -0.5595721080262033,
+ -0.5724269861296344,
+ -0.5852709660483839,
+ -0.5981038032515912,
+ -0.6109252534205319,
+ -0.6237350724532773,
+ -0.6365330164693387,
+ -0.6493188418143083,
+ -0.6620923050645029,
+ -0.674853163031595,
+ -0.6876011727672418,
+ -0.700336091567716,
+ -0.713057676978519,
+ -0.7257656867990027,
+ -0.7384598790869792,
+ -0.7511400121633235,
+ -0.7638058446165825,
+ -0.7764571353075619]
+y = [2.598076211353316,
+ 2.6045964434674262,
+ 2.611067087819699,
+ 2.6174880212183913,
+ 2.623859121418187,
+ 2.630180267122523,
+ 2.636451337985896,
+ 2.6426722146161565,
+ 2.6488427785767805,
+ 2.6549629123891254,
+ 2.661032499534665,
+ 2.6670514244572088,
+ 2.6730195725651034,
+ 2.6789368302334107,
+ 2.684803084806075,
+ 2.6906182245980648,
+ 2.6963821388975013,
+ 2.7020947179677637,
+ 2.7077558530495818,
+ 2.7133654363631035,
+ 2.7189233611099493,
+ 2.7244295214752436,
+ 2.7298838126296294,
+ 2.7352861307312653,
+ 2.7406363729278027,
+ 2.745934437358341,
+ 2.751180223155372,
+ 2.756373630446695,
+ 2.7615145603573206,
+ 2.766602915011355,
+ 2.77163859753386,
+ 2.7766215120526994,
+ 2.781551563700362,
+ 2.7864286586157725,
+ 2.791252703946074,
+ 2.7960236078483955,
+ 2.8007412794916053,
+ 2.805405629058035,
+ 2.8100165677451927,
+ 2.8145740077674524,
+ 2.819077862357725,
+ 2.8235280457691116,
+ 2.8279244732765347,
+ 2.8322670611783525,
+ 2.8365557267979504,
+ 2.840790388485317,
+ 2.844970965618598,
+ 2.849097378605631,
+ 2.8531695488854605,
+ 2.857187398929835,
+ 2.8611508522446805,
+ 2.86505983337156,
+ 2.868914267889106,
+ 2.8727140824144435,
+ 2.876459204604579,
+ 2.8801495631577856,
+ 2.8837850878149567,
+ 2.887365709360942,
+ 2.890891359625869,
+ 2.894361971486439,
+ 2.8977774788672046,
+ 2.901137816741829,
+ 2.904442921134323,
+ 2.907692729120263,
+ 2.9108871788279895,
+ 2.9140262094397844,
+ 2.9171097611930294,
+ 2.9201377753813453,
+ 2.9231101943557056,
+ 2.926026961525538,
+ 2.9288880213598,
+ 2.9316933193880366,
+ 2.9344428022014166,
+ 2.9371364174537513,
+ 2.9397741138624887,
+ 2.9423558412096913,
+ 2.944881550342992,
+ 2.9473511931765293,
+ 2.9497647226918637,
+ 2.9521220929388727,
+ 2.954423259036624,
+ 2.956668177174233,
+ 2.958856804611694,
+ 2.9609890996806953,
+ 2.9630650217854133,
+ 2.965084531403282,
+ 2.9670475900857505,
+ 2.9689541604590106,
+ 2.970804206224711,
+ 2.9725976921606465,
+ 2.974334584121431,
+ 2.976014849039145,
+ 2.977638454923966,
+ 2.9792053708647788,
+ 2.9807155670297623,
+ 2.982169014666959,
+ 2.9835656861048196,
+ 2.9849055547527352,
+ 2.9861885951015363,
+ 2.9874147827239854,
+ 2.988584094275237,
+ 2.989696507493284,
+ 2.990752001199384,
+ 2.991750555298457,
+ 2.9926921507794724,
+ 2.99357676971581,
+ 2.994404395265601,
+ 2.995175011672046,
+ 2.9958886042637216,
+ 2.9965451594548522,
+ 2.9971446647455733,
+ 2.9976871087221686,
+ 2.998172481057287,
+ 2.9986007725101387,
+ 2.998971974926672,
+ 2.9992860812397275,
+ 2.999543085469174,
+ 2.999742982722021,
+ 2.999885769192514,
+ 2.9999714421622032,
+ 3.0,
+ 2.9999714421622032,
+ 2.999885769192514,
+ 2.999742982722021,
+ 2.999543085469174,
+ 2.9992860812397275,
+ 2.998971974926672,
+ 2.998600772510139,
+ 2.998172481057287,
+ 2.9976871087221686,
+ 2.9971446647455733,
+ 2.9965451594548522,
+ 2.9958886042637216,
+ 2.995175011672046,
+ 2.994404395265601,
+ 2.99357676971581,
+ 2.9926921507794724,
+ 2.991750555298457,
+ 2.990752001199384,
+ 2.989696507493284,
+ 2.988584094275237,
+ 2.9874147827239854,
+ 2.9861885951015363,
+ 2.9849055547527352,
+ 2.98356568610482,
+ 2.982169014666959,
+ 2.9807155670297623,
+ 2.9792053708647788,
+ 2.9776384549239663,
+ 2.976014849039145,
+ 2.9743345841214315,
+ 2.9725976921606465,
+ 2.9708042062247113,
+ 2.9689541604590106,
+ 2.9670475900857505,
+ 2.9650845314032823,
+ 2.9630650217854133,
+ 2.960989099680696,
+ 2.9588568046116945,
+ 2.956668177174233,
+ 2.9544232590366244,
+ 2.9521220929388727,
+ 2.9497647226918637,
+ 2.9473511931765293,
+ 2.944881550342992,
+ 2.9423558412096917,
+ 2.9397741138624887,
+ 2.9371364174537513,
+ 2.934442802201417,
+ 2.9316933193880366,
+ 2.9288880213598,
+ 2.9260269615255385,
+ 2.9231101943557056,
+ 2.9201377753813453,
+ 2.91710976119303,
+ 2.9140262094397844,
+ 2.9108871788279895,
+ 2.907692729120263,
+ 2.9044429211343235,
+ 2.9011378167418296,
+ 2.897777478867205]
+[line] = ax.plot(x, y, 'k', linewidth=1, linestyle='dashed')
+mpl.title("Arc")
+mpl.draw()
+mpl.savefig("tmp_Arc.png", dpi=None)
+mpl.savefig("tmp_Arc.pdf")

+ 122 - 0
doc/pub/tutorial/fig-tut/mpl_code_Axis.py

@@ -0,0 +1,122 @@
+import matplotlib.pyplot as mpl
+import matplotlib.transforms as transforms
+
+mpl.ion()  # for interactive drawing
+fig = mpl.figure()
+
+ax = fig.gca()
+xmin, xmax, ymin, ymax = 0.0, 15.0, -7.0, 8.0
+ax.set_xlim(xmin, xmax)
+ax.set_ylim(ymin, ymax)
+ax.set_aspect('equal')
+
+
+
+# line
+x = [12.240192378864668, 12.5]
+y = [2.150000000000001, 2.0000000000000004]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='solid')
+
+# line
+x = [7.5, 12.5]
+y = [2.0, 2.0000000000000004]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='solid')
+
+# line
+x = [12.240192378864668, 12.5]
+y = [1.8499999999999999, 2.0000000000000004]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='solid')
+ax.text(12.8333, 2, 'x',
+        horizontalalignment='center', fontsize=14)
+
+# line
+x = [7.35, 7.5]
+y = [6.740192378864668, 7.0]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='solid')
+
+# line
+x = [7.5, 7.5]
+y = [2.0, 7.0]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='solid')
+
+# line
+x = [7.65, 7.5]
+y = [6.740192378864668, 7.0]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='solid')
+ax.text(7.5, 7.33333, 'y',
+        horizontalalignment='center', fontsize=14)
+mpl.draw()
+
+# line
+x = [11.034779889691228, 11.33022221559489]
+y = [5.161843595132618, 5.213938048432697]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='dashed')
+
+# line
+x = [7.5, 11.33022221559489]
+y = [2.0, 5.213938048432697]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='dashed')
+
+# line
+x = [11.22761617259719, 11.33022221559489]
+y = [4.932030262196924, 5.213938048432697]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='dashed')
+ax.text(11.5856, 5.4282, 'x',
+        horizontalalignment='center', fontsize=14)
+
+# line
+x = [4.338156404867384, 4.286061951567303]
+y = [5.534779889691228, 5.83022221559489]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='dashed')
+
+# line
+x = [7.5, 4.286061951567303]
+y = [2.0, 5.83022221559489]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='dashed')
+
+# line
+x = [4.567969737803077, 4.286061951567303]
+y = [5.727616172597189, 5.83022221559489]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='dashed')
+ax.text(4.0718, 6.08557, 'y',
+        horizontalalignment='center', fontsize=14)
+mpl.draw()
+
+# line
+x = [6.824595394571309, 6.631759111665348]
+y = [-2.694225432125347, -2.92403876506104]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='dotted')
+
+# line
+x = [7.5, 6.631759111665348]
+y = [2.0, -2.92403876506104]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='dotted')
+
+# line
+x = [6.5291530686676476, 6.631759111665348]
+y = [-2.642130978825267, -2.92403876506104]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='dotted')
+ax.text(6.57388, -3.25231, 'x',
+        horizontalalignment='center', fontsize=14)
+
+# line
+x = [12.194225432125346, 12.424038765061042]
+y = [1.3245953945713098, 1.1317591116653478]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='dotted')
+
+# line
+x = [7.5, 12.424038765061042]
+y = [2.0, 1.1317591116653478]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='dotted')
+
+# line
+x = [12.142130978825266, 12.424038765061042]
+y = [1.029153068667647, 1.1317591116653478]
+[line] = ax.plot(x, y, 'r', linewidth=2, linestyle='dotted')
+ax.text(12.7523, 1.07388, 'y',
+        horizontalalignment='center', fontsize=14)
+mpl.draw()
+mpl.title("Axis")
+mpl.draw()
+mpl.savefig("tmp_Axis.png", dpi=None)
+mpl.savefig("tmp_Axis.pdf")

+ 195 - 0
doc/pub/tutorial/fig-tut/mpl_code_Dashpot.py

@@ -0,0 +1,195 @@
+import matplotlib.pyplot as mpl
+import matplotlib.transforms as transforms
+
+mpl.ion()  # for interactive drawing
+fig = mpl.figure()
+
+ax = fig.gca()
+xmin, xmax, ymin, ymax = 0.0, 11.0, -2.5, 7.5
+ax.set_xlim(xmin, xmax)
+ax.set_ylim(ymin, ymax)
+ax.set_aspect('equal')
+
+
+
+mpl.grid(True)
+
+# line
+x = [1.5, 1.5]
+y = [0.0, 1.25]
+[line] = ax.plot(x, y, 'b', linewidth=2, linestyle='solid')
+
+# line
+x = [1.5, 1.5]
+y = [5.0, 2.395833333333333]
+[line] = ax.plot(x, y, 'b', linewidth=2, linestyle='solid')
+
+# rectangle
+x = [1.0833333333333333,
+ 1.9166666666666665,
+ 1.9166666666666665,
+ 1.0833333333333333,
+ 1.0833333333333333]
+y = [2.083333333333333,
+ 2.083333333333333,
+ 2.395833333333333,
+ 2.395833333333333,
+ 2.083333333333333]
+[line] = ax.fill(x, y, 'white', edgecolor='b', linewidth=2, hatch='X')
+
+# pot
+x = [1.0, 1.0, 2.0, 2.0]
+y = [3.75, 1.25, 1.25, 3.75]
+[line] = ax.plot(x, y, 'b', linewidth=2, linestyle='solid')
+ax.text(1.5, 5.5, 'Dashpot (default)',
+        horizontalalignment='center', fontsize=14)
+
+# line
+x = [6.5, 6.5]
+y = [0.0, 2.0]
+[line] = ax.plot(x, y, 'b', linewidth=2, linestyle='solid')
+
+# line
+x = [6.5, 6.5]
+y = [6.0, 4.5]
+[line] = ax.plot(x, y, 'b', linewidth=2, linestyle='solid')
+
+# rectangle
+x = [6.083333333333333,
+ 6.916666666666666,
+ 6.916666666666666,
+ 6.083333333333333,
+ 6.083333333333333]
+y = [4.1875, 4.1875, 4.5, 4.5, 4.1875]
+[line] = ax.fill(x, y, 'white', edgecolor='b', linewidth=2, hatch='X')
+
+# pot
+x = [6.0, 6.0, 7.0, 7.0]
+y = [4.5, 2.0, 2.0, 4.5]
+[line] = ax.plot(x, y, 'b', linewidth=2, linestyle='solid')
+ax.text(6.5, -1.56667, 'width',
+        horizontalalignment='center', fontsize=14)
+
+# line
+mpl.arrow(x=6, y=-1.75, dx=1, dy=0,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.arrow(x=7, y=-1.75, dx=-1, dy=0,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+ax.annotate('start', xy=(6.5, 0), xycoords='data',
+            textcoords='data', xytext=(5.75, -0.75),
+            horizontalalignment='center',
+            verticalalignment='top',
+            fontsize=14,
+            arrowprops=dict(arrowstyle='->',
+                            facecolor='black',
+                            linewidth=2,
+                            shrinkA=5,
+                            shrinkB=5))
+ax.annotate('bar_length', xy=[ 5.5  1. ], xycoords='data',
+            textcoords='data', xytext=(3.5, 1.5),
+            horizontalalignment='left',
+            verticalalignment='top',
+            fontsize=14,
+            arrowprops=dict(arrowstyle='->',
+                            facecolor='black',
+                            linewidth=2,
+                            shrinkA=5,
+                            shrinkB=5))
+
+# line
+mpl.arrow(x=5.5, y=2, dx=0, dy=-2,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.arrow(x=5.5, y=0, dx=0, dy=2,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+ax.annotate('total_length', xy=[ 8.5  3. ], xycoords='data',
+            textcoords='data', xytext=(8.75, 5.0),
+            horizontalalignment='left',
+            verticalalignment='top',
+            fontsize=14,
+            arrowprops=dict(arrowstyle='->',
+                            facecolor='black',
+                            linewidth=2,
+                            shrinkA=5,
+                            shrinkB=5))
+
+# line
+mpl.arrow(x=8.5, y=6, dx=0, dy=-6,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.arrow(x=8.5, y=0, dx=0, dy=6,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+ax.annotate('dashpot_length', xy=[ 7.5   3.25], xycoords='data',
+            textcoords='data', xytext=(7.0, -0.5),
+            horizontalalignment='left',
+            verticalalignment='top',
+            fontsize=14,
+            arrowprops=dict(arrowstyle='->',
+                            facecolor='black',
+                            linewidth=2,
+                            shrinkA=5,
+                            shrinkB=5))
+
+# line
+mpl.arrow(x=7.5, y=4.5, dx=0, dy=-2.5,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.arrow(x=7.5, y=2, dx=0, dy=2.5,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+ax.annotate('piston_pos', xy=[ 5.5      3.09375], xycoords='data',
+            textcoords='data', xytext=(3.5, 3.6875),
+            horizontalalignment='left',
+            verticalalignment='top',
+            fontsize=14,
+            arrowprops=dict(arrowstyle='->',
+                            facecolor='black',
+                            linewidth=2,
+                            shrinkA=5,
+                            shrinkB=5))
+
+# line
+mpl.arrow(x=5.5, y=4.1875, dx=0, dy=-2.1875,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.arrow(x=5.5, y=2, dx=0, dy=2.1875,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.title("Dashpot")
+mpl.draw()
+mpl.savefig("tmp_Dashpot.png", dpi=None)
+mpl.savefig("tmp_Dashpot.pdf")

+ 149 - 0
doc/pub/tutorial/fig-tut/mpl_code_Distance_wText.py

@@ -0,0 +1,149 @@
+import matplotlib.pyplot as mpl
+import matplotlib.transforms as transforms
+
+mpl.ion()  # for interactive drawing
+fig = mpl.figure()
+
+ax = fig.gca()
+xmin, xmax, ymin, ymax = 0.0, 10.0, 0.0, 6.0
+ax.set_xlim(xmin, xmax)
+ax.set_ylim(ymin, ymax)
+ax.set_aspect('equal')
+
+
+ax.text(1.13014, 3.14588, '$ 2\\pi R^2 $',
+        horizontalalignment='left', fontsize=14)
+
+# line
+mpl.arrow(x=2, y=4.5, dx=-2, dy=-2.5,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.arrow(x=0, y=2, dx=2, dy=2.5,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+ax.text(6, 5.16667, '$ 2\\pi R^2 $',
+        horizontalalignment='center', fontsize=14)
+
+# line
+mpl.arrow(x=4, y=5, dx=4, dy=0,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.arrow(x=8, y=5, dx=-4, dy=0,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+ax.text(1.07454, 5.14907, '$ 2\\pi R^2 $',
+        horizontalalignment='center', fontsize=14)
+
+# line
+mpl.arrow(x=0, y=5.5, dx=2, dy=-1,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.arrow(x=2, y=4.5, dx=-2, dy=1,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+ax.text(1.11785, 1.11785, '$ 2\\pi R^2 $',
+        horizontalalignment='left', fontsize=14)
+
+# line
+mpl.arrow(x=0, y=2, dx=2, dy=-2,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.arrow(x=2, y=0, dx=-2, dy=2,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+ax.text(8.8882, 1.27639, '$ 2\\pi R^2 $',
+        horizontalalignment='right', fontsize=14)
+
+# line
+mpl.arrow(x=8, y=2, dx=2, dy=-1,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.arrow(x=10, y=1, dx=-2, dy=1,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+ax.text(8.92546, 3.35093, '$ 2\\pi R^2 $',
+        horizontalalignment='center', fontsize=14)
+
+# line
+mpl.arrow(x=8, y=4, dx=2, dy=-1,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.arrow(x=10, y=3, dx=-2, dy=1,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+ax.text(4.16667, 4.5, '$ 2\\pi R^2 $',
+        horizontalalignment='left', fontsize=14)
+
+# line
+mpl.arrow(x=4, y=5, dx=0, dy=-1,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.arrow(x=4, y=4, dx=0, dy=1,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+ax.annotate('text_spacing=-1./40, alignment="right"', xy=(9, 1.2), xycoords='data',
+            textcoords='data', xytext=(4, 0.5),
+            horizontalalignment='left',
+            verticalalignment='top',
+            fontsize=10,
+            arrowprops=dict(arrowstyle='->',
+                            facecolor='black',
+                            linewidth=2,
+                            shrinkA=5,
+                            shrinkB=5))
+ax.annotate('text_spacing=-1./60', xy=(9, 3.2), xycoords='data',
+            textcoords='data', xytext=(4, 3.5),
+            horizontalalignment='left',
+            verticalalignment='top',
+            fontsize=10,
+            arrowprops=dict(arrowstyle='->',
+                            facecolor='black',
+                            linewidth=2,
+                            shrinkA=5,
+                            shrinkB=5))
+mpl.title("Distance_wText and text positioning")
+mpl.draw()
+mpl.savefig("tmp_Distance_wText.png", dpi=None)
+mpl.savefig("tmp_Distance_wText.pdf")

+ 66 - 0
doc/pub/tutorial/fig-tut/mpl_code_Rectangle.py

@@ -0,0 +1,66 @@
+import matplotlib.pyplot as mpl
+import matplotlib.transforms as transforms
+
+mpl.ion()  # for interactive drawing
+fig = mpl.figure()
+
+ax = fig.gca()
+xmin, xmax, ymin, ymax = 0.0, 8.0, -1.5, 6.0
+ax.set_xlim(xmin, xmax)
+ax.set_ylim(ymin, ymax)
+ax.set_aspect('equal')
+
+
+
+mpl.grid(True)
+
+# rectangle
+x = [2.0, 6.0, 6.0, 2.0, 2.0]
+y = [0.0, 0.0, 3.0, 3.0, 0.0]
+[line] = ax.plot(x, y, 'b', linewidth=2, linestyle='solid')
+ax.text(4, -0.466667, 'width',
+        horizontalalignment='center', fontsize=14)
+
+# line
+mpl.arrow(x=2, y=-0.6, dx=4, dy=0,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.arrow(x=6, y=-0.6, dx=-4, dy=0,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+ax.annotate('lower_left_corner', xy=[ 2.  0.], xycoords='data',
+            textcoords='data', xytext=[ 1.2 -0.6],
+            horizontalalignment='center',
+            verticalalignment='top',
+            fontsize=14,
+            arrowprops=dict(arrowstyle='->',
+                            facecolor='black',
+                            linewidth=2,
+                            shrinkA=5,
+                            shrinkB=5))
+ax.text(6.93333, 1.5, 'height',
+        horizontalalignment='left', fontsize=14)
+
+# line
+mpl.arrow(x=6.8, y=3, dx=0, dy=-3,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.arrow(x=6.8, y=0, dx=0, dy=3,
+          facecolor='k', edgecolor='k',
+          linestyle='solid',
+          linewidth=1, head_width=0.1,
+          length_includes_head=True,
+          shape='full')
+mpl.title("Rectangle")
+mpl.draw()
+mpl.savefig("tmp_Rectangle.png", dpi=None)
+mpl.savefig("tmp_Rectangle.pdf")

文件差异内容过多而无法显示
+ 2219 - 0
doc/pub/tutorial/fig-tut/mpl_code_Spring.py


+ 30 - 0
doc/pub/tutorial/fig-tut/mpl_code_Triangle.py

@@ -0,0 +1,30 @@
+import matplotlib.pyplot as mpl
+import matplotlib.transforms as transforms
+
+mpl.ion()  # for interactive drawing
+fig = mpl.figure()
+
+ax = fig.gca()
+xmin, xmax, ymin, ymax = 0.0, 8.0, -1.5, 3.6
+ax.set_xlim(xmin, xmax)
+ax.set_ylim(ymin, ymax)
+ax.set_aspect('equal')
+
+
+
+mpl.grid(True)
+
+# triangle
+x = [2.0, 6.0, 3.2, 2.0]
+y = [0.0, 2.0, 3.0, 0.0]
+[line] = ax.plot(x, y, 'b', linewidth=2, linestyle='solid')
+ax.text(6, 2, 'p2',
+        horizontalalignment='center', fontsize=14)
+ax.text(3.2, 3, 'p3',
+        horizontalalignment='center', fontsize=14)
+ax.text(2, 0, 'p1',
+        horizontalalignment='center', fontsize=14)
+mpl.title("Triangle")
+mpl.draw()
+mpl.savefig("tmp_Triangle.png", dpi=None)
+mpl.savefig("tmp_Triangle.pdf")

文件差异内容过多而无法显示
+ 4025 - 0
doc/pub/tutorial/fig-tut/mpl_code_Wavy.py


二进制
doc/pub/tutorial/fig-tut/pendulum.png


二进制
doc/pub/tutorial/fig-tut/vehicle0.pdf


二进制
doc/pub/tutorial/fig-tut/vehicle0.png


二进制
doc/pub/tutorial/fig-tut/vehicle0_dim.pdf


二进制
doc/pub/tutorial/fig-tut/vehicle0_dim.png


二进制
doc/pub/tutorial/fig-tut/vehicle0_hier1.pdf


二进制
doc/pub/tutorial/fig-tut/vehicle0_hier1.png


二进制
doc/pub/tutorial/fig-tut/vehicle0a.png


二进制
doc/pub/tutorial/fig-tut/vehicle0a_c.png


二进制
doc/pub/tutorial/fig-tut/vehicle0b.png


二进制
doc/pub/tutorial/fig-tut/vehicle0b_c.png


二进制
doc/pub/tutorial/fig-tut/vehicle1.pdf


二进制
doc/pub/tutorial/fig-tut/vehicle1.png


二进制
doc/pub/tutorial/fig-tut/vehicle_v1.pdf


二进制
doc/pub/tutorial/fig-tut/vehicle_v1.png


二进制
doc/pub/tutorial/fig-tut/vehicle_v2.pdf


二进制
doc/pub/tutorial/fig-tut/vehicle_v2.png


二进制
doc/pub/tutorial/fig-tut/vehicle_v23.pdf


二进制
doc/pub/tutorial/fig-tut/vehicle_v23.png


二进制
doc/pub/tutorial/fig-tut/vehicle_v3.pdf


二进制
doc/pub/tutorial/fig-tut/vehicle_v3.png


二进制
doc/pub/tutorial/fig-tut/wheel_on_inclined_plane.pdf


二进制
doc/pub/tutorial/fig-tut/wheel_on_inclined_plane.png


+ 1 - 1
doc/pub/tutorial/html/.buildinfo

@@ -1,4 +1,4 @@
 # Sphinx build info version 1
 # Sphinx build info version 1
 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: b6bd8de86073aa5742bf9e821e0b3d8a
+config: f332c418da3afe723da879dfd84452f7
 tags: 645f666f9bcd5a90fca523b33c5a78b7
 tags: 645f666f9bcd5a90fca523b33c5a78b7

+ 6 - 7
doc/pub/tutorial/html/_sources/index.txt

@@ -1,20 +1,19 @@
 
 
 .. Master file automatically created by doconce sphinx_dir
 .. Master file automatically created by doconce sphinx_dir
 
 
-Using Pysketcher to Create Principal Sketches of Physics Problems
-=================================================================
+
+Pysketcher: Create Principal Sketches of Physics Problems
+=========================================================
 
 
 Contents:
 Contents:
 
 
 .. toctree::
 .. toctree::
-   :maxdepth: 3
+   :maxdepth: 2
 
 
    main_sketcher
    main_sketcher
 
 
 
 
-Indices and tables
-==================
+Index
+=====
 
 
 * :ref:`genindex`
 * :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`

+ 82 - 16
doc/pub/tutorial/html/_static/basic.css

@@ -4,11 +4,9 @@
  *
  *
  * Sphinx stylesheet -- basic theme.
  * Sphinx stylesheet -- basic theme.
  *
  *
- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  * :license: BSD, see LICENSE for details.
  *
  *
- * Adjustments by Hans Petter Langtangen <hpl@simula.no>
- * (added admonition border)
  */
  */
 
 
 /* -- main layout ----------------------------------------------------------- */
 /* -- main layout ----------------------------------------------------------- */
@@ -81,8 +79,17 @@ div.sphinxsidebar input {
     font-size: 1em;
     font-size: 1em;
 }
 }
 
 
+div.sphinxsidebar #searchbox input[type="text"] {
+    width: 170px;
+}
+
+div.sphinxsidebar #searchbox input[type="submit"] {
+    width: 30px;
+}
+
 img {
 img {
     border: 0;
     border: 0;
+    max-width: 100%;
 }
 }
 
 
 /* -- search page ----------------------------------------------------------- */
 /* -- search page ----------------------------------------------------------- */
@@ -190,7 +197,10 @@ h3:hover > a.headerlink,
 h4:hover > a.headerlink,
 h4:hover > a.headerlink,
 h5:hover > a.headerlink,
 h5:hover > a.headerlink,
 h6:hover > a.headerlink,
 h6:hover > a.headerlink,
-dt:hover > a.headerlink {
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
     visibility: visible;
     visibility: visible;
 }
 }
 
 
@@ -238,7 +248,6 @@ img.align-center, .figure.align-center, object.align-center {
 }
 }
 
 
 .align-center {
 .align-center {
-    clear: both;
     text-align: center;
     text-align: center;
 }
 }
 
 
@@ -278,9 +287,6 @@ p.topic-title {
 /* -- admonitions ----------------------------------------------------------- */
 /* -- admonitions ----------------------------------------------------------- */
 
 
 div.admonition {
 div.admonition {
-    /* Added border and gray background color, hpl */
-    border: 1px solid;
-    background-color: #f2f2f2;
     margin-top: 10px;
     margin-top: 10px;
     margin-bottom: 10px;
     margin-bottom: 10px;
     padding: 7px;
     padding: 7px;
@@ -311,6 +317,13 @@ table.docutils {
     border-collapse: collapse;
     border-collapse: collapse;
 }
 }
 
 
+table caption span.caption-number {
+    font-style: italic;
+}
+
+table caption span.caption-text {
+}
+
 table.docutils td, table.docutils th {
 table.docutils td, table.docutils th {
     padding: 1px 8px 1px 5px;
     padding: 1px 8px 1px 5px;
     border-top: 0;
     border-top: 0;
@@ -341,6 +354,25 @@ table.citation td {
     border-bottom: none;
     border-bottom: none;
 }
 }
 
 
+/* -- figures --------------------------------------------------------------- */
+
+div.figure {
+    margin: 0.5em;
+    padding: 0.5em;
+}
+
+div.figure p.caption {
+    padding: 0.3em;
+}
+
+div.figure p.caption span.caption-number {
+    font-style: italic;
+}
+
+div.figure p.caption span.caption-text {
+}
+
+
 /* -- other body styles ----------------------------------------------------- */
 /* -- other body styles ----------------------------------------------------- */
 
 
 ol.arabic {
 ol.arabic {
@@ -399,14 +431,14 @@ dl.glossary dt {
     margin: 0;
     margin: 0;
 }
 }
 
 
-.refcount {
-    color: #060;
-}
-
 .optional {
 .optional {
     font-size: 1.3em;
     font-size: 1.3em;
 }
 }
 
 
+.sig-paren {
+    font-size: larger;
+}
+
 .versionmodified {
 .versionmodified {
     font-style: italic;
     font-style: italic;
 }
 }
@@ -445,6 +477,11 @@ dl.glossary dt {
     font-style: oblique;
     font-style: oblique;
 }
 }
 
 
+abbr, acronym {
+    border-bottom: dotted 1px;
+    cursor: help;
+}
+
 /* -- code displays --------------------------------------------------------- */
 /* -- code displays --------------------------------------------------------- */
 
 
 pre {
 pre {
@@ -467,22 +504,51 @@ table.highlighttable td {
     padding: 0 0.5em 0 0.5em;
     padding: 0 0.5em 0 0.5em;
 }
 }
 
 
-tt.descname {
+div.code-block-caption {
+    padding: 2px 5px;
+    font-size: small;
+}
+
+div.code-block-caption code {
+    background-color: transparent;
+}
+
+div.code-block-caption + div > div.highlight > pre {
+    margin-top: 0;
+}
+
+div.code-block-caption span.caption-number {
+    padding: 0.1em 0.3em;
+    font-style: italic;
+}
+
+div.code-block-caption span.caption-text {
+}
+
+div.literal-block-wrapper {
+    padding: 1em 1em 0;
+}
+
+div.literal-block-wrapper div.highlight {
+    margin: 0;
+}
+
+code.descname {
     background-color: transparent;
     background-color: transparent;
     font-weight: bold;
     font-weight: bold;
     font-size: 1.2em;
     font-size: 1.2em;
 }
 }
 
 
-tt.descclassname {
+code.descclassname {
     background-color: transparent;
     background-color: transparent;
 }
 }
 
 
-tt.xref, a tt {
+code.xref, a code {
     background-color: transparent;
     background-color: transparent;
     font-weight: bold;
     font-weight: bold;
 }
 }
 
 
-h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
     background-color: transparent;
     background-color: transparent;
 }
 }
 
 

二进制
doc/pub/tutorial/html/_static/dialog-note.png


二进制
doc/pub/tutorial/html/_static/dialog-seealso.png


二进制
doc/pub/tutorial/html/_static/dialog-topic.png


二进制
doc/pub/tutorial/html/_static/dialog-warning.png


+ 36 - 20
doc/pub/tutorial/html/_static/doctools.js

@@ -2,9 +2,9 @@
  * doctools.js
  * doctools.js
  * ~~~~~~~~~~~
  * ~~~~~~~~~~~
  *
  *
- * Sphinx JavaScript utilties for all documentation.
+ * Sphinx JavaScript utilities for all documentation.
  *
  *
- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  * :license: BSD, see LICENSE for details.
  *
  *
  */
  */
@@ -32,7 +32,7 @@ if (!window.console || !console.firebug) {
  */
  */
 jQuery.urldecode = function(x) {
 jQuery.urldecode = function(x) {
   return decodeURIComponent(x).replace(/\+/g, ' ');
   return decodeURIComponent(x).replace(/\+/g, ' ');
-}
+};
 
 
 /**
 /**
  * small helper function to urlencode strings
  * small helper function to urlencode strings
@@ -61,18 +61,6 @@ jQuery.getQueryParameters = function(s) {
   return result;
   return result;
 };
 };
 
 
-/**
- * small function to check if an array contains
- * a given item.
- */
-jQuery.contains = function(arr, item) {
-  for (var i = 0; i < arr.length; i++) {
-    if (arr[i] == item)
-      return true;
-  }
-  return false;
-};
-
 /**
 /**
  * highlight a given string on a jquery object by wrapping it in
  * highlight a given string on a jquery object by wrapping it in
  * span elements with the given class name.
  * span elements with the given class name.
@@ -103,6 +91,30 @@ jQuery.fn.highlightText = function(text, className) {
   });
   });
 };
 };
 
 
+/*
+ * backward compatibility for jQuery.browser
+ * This will be supported until firefox bug is fixed.
+ */
+if (!jQuery.browser) {
+  jQuery.uaMatch = function(ua) {
+    ua = ua.toLowerCase();
+
+    var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
+      /(webkit)[ \/]([\w.]+)/.exec(ua) ||
+      /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
+      /(msie) ([\w.]+)/.exec(ua) ||
+      ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
+      [];
+
+    return {
+      browser: match[ 1 ] || "",
+      version: match[ 2 ] || "0"
+    };
+  };
+  jQuery.browser = {};
+  jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
+}
+
 /**
 /**
  * Small JavaScript module for the documentation.
  * Small JavaScript module for the documentation.
  */
  */
@@ -164,9 +176,10 @@ var Documentation = {
 
 
   /**
   /**
    * workaround a firefox stupidity
    * workaround a firefox stupidity
+   * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
    */
    */
   fixFirefoxAnchorBug : function() {
   fixFirefoxAnchorBug : function() {
-    if (document.location.hash && $.browser.mozilla)
+    if (document.location.hash)
       window.setTimeout(function() {
       window.setTimeout(function() {
         document.location.href += '';
         document.location.href += '';
       }, 10);
       }, 10);
@@ -180,14 +193,17 @@ var Documentation = {
     var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
     var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
     if (terms.length) {
     if (terms.length) {
       var body = $('div.body');
       var body = $('div.body');
+      if (!body.length) {
+        body = $('body');
+      }
       window.setTimeout(function() {
       window.setTimeout(function() {
         $.each(terms, function() {
         $.each(terms, function() {
           body.highlightText(this.toLowerCase(), 'highlighted');
           body.highlightText(this.toLowerCase(), 'highlighted');
         });
         });
       }, 10);
       }, 10);
-      $('<li class="highlight-link"><a href="javascript:Documentation.' +
-        'hideSearchWords()">' + _('Hide Search Matches') + '</a></li>')
-          .appendTo($('.sidebar .this-page-menu'));
+      $('<p class="highlight-link"><a href="javascript:Documentation.' +
+        'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
+          .appendTo($('#searchbox'));
     }
     }
   },
   },
 
 
@@ -213,7 +229,7 @@ var Documentation = {
    * helper function to hide the search marks again
    * helper function to hide the search marks again
    */
    */
   hideSearchWords : function() {
   hideSearchWords : function() {
-    $('.sidebar .this-page-menu li.highlight-link').fadeOut(300);
+    $('#searchbox .highlight-link').fadeOut(300);
     $('span.highlighted').removeClass('highlighted');
     $('span.highlighted').removeClass('highlighted');
   },
   },
 
 

二进制
doc/pub/tutorial/html/_static/down-pressed.png


二进制
doc/pub/tutorial/html/_static/down.png


+ 0 - 310
doc/pub/tutorial/html/_static/epub.css

@@ -1,310 +0,0 @@
-/*
- * default.css_t
- * ~~~~~~~~~~~~~
- *
- * Sphinx stylesheet -- default theme.
- *
- * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
-@import url("basic.css");
-
-/* -- page layout ----------------------------------------------------------- */
-
-body {
-    font-family: {{ theme_bodyfont }};
-    font-size: 100%;
-    background-color: {{ theme_footerbgcolor }};
-    color: #000;
-    margin: 0;
-    padding: 0;
-}
-
-div.document {
-    background-color: {{ theme_sidebarbgcolor }};
-}
-
-div.documentwrapper {
-    float: left;
-    width: 100%;
-}
-
-div.bodywrapper {
-    margin: 0 0 0 230px;
-}
-
-div.body {
-    background-color: {{ theme_bgcolor }};
-    color: {{ theme_textcolor }};
-    padding: 0 20px 30px 20px;
-}
-
-{%- if theme_rightsidebar|tobool %}
-div.bodywrapper {
-    margin: 0 230px 0 0;
-}
-{%- endif %}
-
-div.footer {
-    color: {{ theme_footertextcolor }};
-    width: 100%;
-    padding: 9px 0 9px 0;
-    text-align: center;
-    font-size: 75%;
-}
-
-div.footer a {
-    color: {{ theme_footertextcolor }};
-    text-decoration: underline;
-}
-
-div.related {
-    background-color: {{ theme_relbarbgcolor }};
-    line-height: 30px;
-    color: {{ theme_relbartextcolor }};
-}
-
-div.related a {
-    color: {{ theme_relbarlinkcolor }};
-}
-
-div.sphinxsidebar {
-    {%- if theme_stickysidebar|tobool %}
-    top: 30px;
-    bottom: 0;
-    margin: 0;
-    position: fixed;
-    overflow: auto;
-    height: auto;
-    {%- endif %}
-    {%- if theme_rightsidebar|tobool %}
-    float: right;
-    {%- if theme_stickysidebar|tobool %}
-    right: 0;
-    {%- endif %}
-    {%- endif %}
-}
-
-{%- if theme_stickysidebar|tobool %}
-/* this is nice, but it it leads to hidden headings when jumping
-   to an anchor */
-/*
-div.related {
-    position: fixed;
-}
-
-div.documentwrapper {
-    margin-top: 30px;
-}
-*/
-{%- endif %}
-
-div.sphinxsidebar h3 {
-    font-family: {{ theme_headfont }};
-    color: {{ theme_sidebartextcolor }};
-    font-size: 1.4em;
-    font-weight: normal;
-    margin: 0;
-    padding: 0;
-}
-
-div.sphinxsidebar h3 a {
-    color: {{ theme_sidebartextcolor }};
-}
-
-div.sphinxsidebar h4 {
-    font-family: {{ theme_headfont }};
-    color: {{ theme_sidebartextcolor }};
-    font-size: 1.3em;
-    font-weight: normal;
-    margin: 5px 0 0 0;
-    padding: 0;
-}
-
-div.sphinxsidebar p {
-    color: {{ theme_sidebartextcolor }};
-}
-
-div.sphinxsidebar p.topless {
-    margin: 5px 10px 10px 10px;
-}
-
-div.sphinxsidebar ul {
-    margin: 10px;
-    padding: 0;
-    color: {{ theme_sidebartextcolor }};
-}
-
-div.sphinxsidebar a {
-    color: {{ theme_sidebarlinkcolor }};
-}
-
-div.sphinxsidebar input {
-    border: 1px solid {{ theme_sidebarlinkcolor }};
-    font-family: sans-serif;
-    font-size: 1em;
-}
-
-{% if theme_collapsiblesidebar|tobool %}
-/* for collapsible sidebar */
-div#sidebarbutton {
-    background-color: {{ theme_sidebarbtncolor }};
-}
-{% endif %}
-
-/* -- hyperlink styles ------------------------------------------------------ */
-
-a {
-    color: {{ theme_linkcolor }};
-    text-decoration: none;
-}
-
-a:visited {
-    color: {{ theme_visitedlinkcolor }};
-    text-decoration: none;
-}
-
-a:hover {
-    text-decoration: underline;
-}
-
-{% if theme_externalrefs|tobool %}
-a.external {
-   text-decoration: none;
-   border-bottom: 1px dashed {{ theme_linkcolor }};
-}
-
-a.external:hover {
-   text-decoration: none;
-   border-bottom: none;
-}
-
-a.external:visited {
-    text-decoration: none;
-    border-bottom: 1px dashed {{ theme_visitedlinkcolor }};
-}
-{% endif %}
-
-/* -- body styles ----------------------------------------------------------- */
-
-div.body h1,
-div.body h2,
-div.body h3,
-div.body h4,
-div.body h5,
-div.body h6 {
-    font-family: {{ theme_headfont }};
-    background-color: {{ theme_headbgcolor }};
-    font-weight: normal;
-    color: {{ theme_headtextcolor }};
-    border-bottom: 1px solid #ccc;
-    margin: 20px -20px 10px -20px;
-    padding: 3px 0 3px 10px;
-}
-
-div.body h1 { margin-top: 0; font-size: 200%; }
-div.body h2 { font-size: 160%; }
-div.body h3 { font-size: 140%; }
-div.body h4 { font-size: 120%; }
-div.body h5 { font-size: 110%; }
-div.body h6 { font-size: 100%; }
-
-a.headerlink {
-    color: {{ theme_headlinkcolor }};
-    font-size: 0.8em;
-    padding: 0 4px 0 4px;
-    text-decoration: none;
-}
-
-a.headerlink:hover {
-    background-color: {{ theme_headlinkcolor }};
-    color: white;
-}
-
-div.body p, div.body dd, div.body li {
-    text-align: justify;
-    line-height: 130%;
-}
-
-div.admonition p.admonition-title + p {
-    display: inline;
-}
-
-div.admonition p {
-    margin-bottom: 5px;
-}
-
-div.admonition pre {
-    margin-bottom: 5px;
-}
-
-div.admonition ul, div.admonition ol {
-    margin-bottom: 5px;
-}
-
-div.note {
-    background-color: #eee;
-    border: 1px solid #ccc;
-}
-
-div.seealso {
-    background-color: #ffc;
-    border: 1px solid #ff6;
-}
-
-div.topic {
-    background-color: #eee;
-}
-
-div.warning {
-    background-color: #ffe4e4;
-    border: 1px solid #f66;
-}
-
-p.admonition-title {
-    display: inline;
-}
-
-p.admonition-title:after {
-    content: ":";
-}
-
-pre {
-    padding: 5px;
-    background-color: {{ theme_codebgcolor }};
-    color: {{ theme_codetextcolor }};
-    line-height: 120%;
-    border: 1px solid #ac9;
-    border-left: none;
-    border-right: none;
-}
-
-tt {
-    background-color: #ecf0f3;
-    padding: 0 1px 0 1px;
-    font-size: 0.95em;
-}
-
-th {
-    background-color: #ede;
-}
-
-.warning tt {
-    background: #efc2c2;
-}
-
-.note tt {
-    background: #d6d6d6;
-}
-
-.viewcode-back {
-    font-family: {{ theme_bodyfont }};
-}
-
-div.viewcode-block:target {
-    background-color: #f4debf;
-    border-top: 1px solid #ac9;
-    border-bottom: 1px solid #ac9;
-}

二进制
doc/pub/tutorial/html/_static/file.png


二进制
doc/pub/tutorial/html/_static/footerbg.png


二进制
doc/pub/tutorial/html/_static/headerbg.png


+ 0 - 7
doc/pub/tutorial/html/_static/ie6.css

@@ -1,7 +0,0 @@
-* html img,
-* html .png{position:relative;behavior:expression((this.runtimeStyle.behavior="none")&&(this.pngSet?this.pngSet=true:(this.nodeName == "IMG" && this.src.toLowerCase().indexOf('.png')>-1?(this.runtimeStyle.backgroundImage = "none",
-this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.src + "',sizingMethod='image')",
-this.src = "_static/transparent.gif"):(this.origBg = this.origBg? this.origBg :this.currentStyle.backgroundImage.toString().replace('url("','').replace('")',''),
-this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.origBg + "',sizingMethod='crop')",
-this.runtimeStyle.backgroundImage = "none")),this.pngSet=true)
-);}

文件差异内容过多而无法显示
+ 4 - 154
doc/pub/tutorial/html/_static/jquery.js


二进制
doc/pub/tutorial/html/_static/middlebg.png


二进制
doc/pub/tutorial/html/_static/minus.png


二进制
doc/pub/tutorial/html/_static/plus.png


+ 0 - 367
doc/pub/tutorial/html/_static/pyramid.css

@@ -1,367 +0,0 @@
-/*
- * pylons.css_t
- * ~~~~~~~~~~~~
- *
- * Sphinx stylesheet -- pylons theme.
- *
- * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- * Adjustments by Hans Petter Langtangen <hpl@simula.no>
- * (admonitions, same as in pylons, fenics, agni)
- */
-
-@import url("basic.css");
-
-/* -- page layout ----------------------------------------------------------- */
-
-body {
-    font-family: "Nobile", sans-serif;
-    font-size: 100%;
-    background-color: #393939;
-    color: #ffffff;
-    margin: 0;
-    padding: 0;
-}
-
-div.documentwrapper {
-    float: left;
-    width: 100%;
-}
-
-div.bodywrapper {
-    margin: 0 0 0 230px;
-}
-
-hr {
-    border: 1px solid #B1B4B6;
-}
-
-div.document {
-    background-color: #eee;
-}
-
-div.header {
-    width:100%;
-    background: #f4ad32 url(headerbg.png) repeat-x 0 top;
-    border-bottom: 2px solid #ffffff;
-}
-
-div.logo {
-    text-align: center;
-    padding-top: 10px;
-}
-
-div.body {
-    background-color: #ffffff;
-    color: #3E4349;
-    padding: 0 30px 30px 30px;
-    font-size: 1em;
-    border: 2px solid #ddd;
-    border-right-style: none;
-    overflow: auto;
-}
-
-div.footer {
-    color: #ffffff;
-    width: 100%;
-    padding: 13px 0;
-    text-align: center;
-    font-size: 75%;
-    background: transparent;
-    clear:both;
-}
-
-div.footer a {
-    color: #ffffff;
-    text-decoration: none;
-}
-
-div.footer a:hover {
-    color: #e88f00;
-    text-decoration: underline;
-}
-
-div.related {
-    line-height: 30px;
-    color: #373839;
-    font-size: 0.8em;
-    background-color: #eee;
-}
-
-div.related a {
-    color: #1b61d6;
-}
-
-div.related ul {
-    padding-left: 240px;
-}
-
-div.sphinxsidebar {
-    font-size: 0.75em;
-    line-height: 1.5em;
-}
-
-div.sphinxsidebarwrapper{
-    padding: 10px 0;
-}
-
-div.sphinxsidebar h3,
-div.sphinxsidebar h4 {
-    font-family: "Neuton", sans-serif;
-    color: #373839;
-    font-size: 1.4em;
-    font-weight: normal;
-    margin: 0;
-    padding: 5px 10px;
-    border-bottom: 2px solid #ddd;
-}
-
-div.sphinxsidebar h4{
-    font-size: 1.3em;
-}
-
-div.sphinxsidebar h3 a {
-    color: #000000;
-}
-
-
-div.sphinxsidebar p {
-    color: #888;
-    padding: 5px 20px;
-}
-
-div.sphinxsidebar p.topless {
-}
-
-div.sphinxsidebar ul {
-    margin: 10px 20px;
-    padding: 0;
-    color: #373839;
-}
-
-div.sphinxsidebar a {
-    color: #444;
-}
-
-div.sphinxsidebar input {
-    border: 1px solid #ccc;
-    font-family: sans-serif;
-    font-size: 1em;
-}
-
-div.sphinxsidebar input[type=text]{
-    margin-left: 20px;
-}
-
-/* -- sidebars -------------------------------------------------------------- */
-
-div.sidebar {
-    margin: 0 0 0.5em 1em;
-    border: 2px solid #c6d880;
-    background-color: #e6efc2;
-    width: 40%;
-    float: right;
-    border-right-style: none;
-    border-left-style: none;
-    padding: 10px 20px;
-}
-
-p.sidebar-title {
-    font-weight: bold;
-}
-
-/* -- body styles ----------------------------------------------------------- */
-
-a, a .pre {
-    color: #1b61d6;
-    text-decoration: none;
-}
-
-a:hover, a:hover .pre {
-    text-decoration: underline;
-}
-
-div.body h1,
-div.body h2,
-div.body h3,
-div.body h4,
-div.body h5,
-div.body h6 {
-    font-family: "Neuton", sans-serif;
-    background-color: #ffffff;
-    font-weight: normal;
-    color: #373839;
-    margin: 30px 0px 10px 0px;
-    padding: 5px 0;
-}
-
-div.body h1 { border-top: 20px solid white; margin-top: 0; font-size: 200%; }
-div.body h2 { font-size: 150%; background-color: #ffffff; }
-div.body h3 { font-size: 120%; background-color: #ffffff; }
-div.body h4 { font-size: 110%; background-color: #ffffff; }
-div.body h5 { font-size: 100%; background-color: #ffffff; }
-div.body h6 { font-size: 100%; background-color: #ffffff; }
-
-a.headerlink {
-    color: #1b61d6;
-    font-size: 0.8em;
-    padding: 0 4px 0 4px;
-    text-decoration: none;
-}
-
-a.headerlink:hover {
-    text-decoration: underline;
-}
-
-div.body p, div.body dd, div.body li {
-    line-height: 1.5em;
-}
-
-/* admonition styles taken from agni theme, sphinxdoc.css */
-div.admonition, div.warning {
-    font-size: 0.9em;
-    margin: 1em 0 1em 0;
-    border: 1px solid #888A85;
-    background-color: #f7f7f7;
-    padding: 0;
-}
-
-div.admonition p, div.warning p {
-    margin: 0.5em 1em 0.5em 1em;
-    padding: 0;
-}
-
-div.admonition pre, div.warning pre {
-    margin: 0.4em 1em 0.4em 1em;
-}
-
-div.admonition p.admonition-title,
-div.warning p.admonition-title {
-    margin: 0;
-    padding: 0.1em 0 0.1em 0.5em;
-    color: white;
-    border-bottom: 1px solid #86989B;
-    font-weight: bold;
-    background-color: #adadad;
-}
-
-div.warning {
-    border: 1px solid #940000;
-}
-
-div.warning p.admonition-title {
-    background-color: #CF0000;
-    border-bottom-color: #940000;
-}
-
-div.admonition ul, div.admonition ol,
-div.warning ul, div.warning ol {
-    margin-top: 1em;
-    margin: 0.1em 0.5em 0.5em 3em;
-    padding: 0;
-}
-
-div.highlight{
-    background-color: white;
-}
-
-div.note {
-    border: 2px solid #7a9eec;
-    border-right-style: none;
-    border-left-style: none;
-    padding: 10px 20px 10px 60px;
-    background: #e1ecfe url(dialog-note.png) no-repeat 10px 8px;
-}
-
-div.seealso {
-    background: #fff6bf url(dialog-seealso.png) no-repeat 10px 8px;
-    border: 2px solid #ffd324;
-    border-left-style: none;
-    border-right-style: none;
-    padding: 10px 20px 10px 60px;
-}
-
-div.topic {
-    background: #eeeeee;
-    border: 2px solid #C6C9CB;
-    padding: 10px 20px;
-    border-right-style: none;
-    border-left-style: none;
-}
-
-div.warning {
-    background: #fbe3e4 url(dialog-warning.png) no-repeat 10px 8px;
-    border: 2px solid #fbc2c4;
-    border-right-style: none;
-    border-left-style: none;
-    padding: 10px 20px 10px 60px;
-}
-
-/*
-p.admonition-title {
-    display: none;
-}
-*/
-
-p.admonition-title:after {
-    content: ":";
-}
-
-pre {
-    padding: 10px;
-    background-color: #fafafa;
-    color: #222;
-    line-height: 1.2em;
-    border: 2px solid #C6C9CB;
-    font-size: 1.1em;
-    margin: 1.5em 0 1.5em 0;
-    border-right-style: none;
-    border-left-style: none;
-}
-
-tt {
-    background-color: transparent;
-    color: #222;
-    font-size: 1.1em;
-    font-family: monospace;
-}
-
-.viewcode-back {
-    font-family: "Nobile", sans-serif;
-}
-
-div.viewcode-block:target {
-    background-color: #fff6bf;
-    border: 2px solid #ffd324;
-    border-left-style: none;
-    border-right-style: none;
-    padding: 10px 20px;
-}
-
-table.highlighttable {
-    width: 100%;
-}
-
-table.highlighttable td {
-    padding: 0;
-}
-
-a em.std-term {
-   color: #007f00;
-}
-
-a:hover em.std-term {
-    text-decoration: underline;
-}
-
-.download {
-    font-family: "Nobile", sans-serif;
-    font-weight: normal;
-    font-style: normal;
-}
-
-tt.xref {
-    font-weight: normal;
-    font-style: normal;
-}

+ 219 - 152
doc/pub/tutorial/html/_static/searchtools.js

@@ -2,41 +2,15 @@
  * searchtools.js_t
  * searchtools.js_t
  * ~~~~~~~~~~~~~~~~
  * ~~~~~~~~~~~~~~~~
  *
  *
- * Sphinx JavaScript utilties for the full-text search.
+ * Sphinx JavaScript utilities for the full-text search.
  *
  *
- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  * :license: BSD, see LICENSE for details.
  *
  *
  */
  */
 
 
-/**
- * helper function to return a node containing the
- * search summary for a given text. keywords is a list
- * of stemmed words, hlwords is the list of normal, unstemmed
- * words. the first one is used to find the occurance, the
- * latter for highlighting it.
- */
-
-jQuery.makeSearchSummary = function(text, keywords, hlwords) {
-  var textLower = text.toLowerCase();
-  var start = 0;
-  $.each(keywords, function() {
-    var i = textLower.indexOf(this.toLowerCase());
-    if (i > -1)
-      start = i;
-  });
-  start = Math.max(start - 120, 0);
-  var excerpt = ((start > 0) ? '...' : '') +
-  $.trim(text.substr(start, 240)) +
-  ((start + 240 - text.length) ? '...' : '');
-  var rv = $('<div class="context"></div>').text(excerpt);
-  $.each(hlwords, function() {
-    rv = rv.highlightText(this, 'highlighted');
-  });
-  return rv;
-}
-
 
 
+/* Non-minified version JS is _stemmer.js if file is provided */ 
 /**
 /**
  * Porter Stemmer
  * Porter Stemmer
  */
  */
@@ -220,6 +194,38 @@ var Stemmer = function() {
 }
 }
 
 
 
 
+
+/**
+ * Simple result scoring code.
+ */
+var Scorer = {
+  // Implement the following function to further tweak the score for each result
+  // The function takes a result array [filename, title, anchor, descr, score]
+  // and returns the new score.
+  /*
+  score: function(result) {
+    return result[4];
+  },
+  */
+
+  // query matches the full name of an object
+  objNameMatch: 11,
+  // or matches in the last dotted part of the object name
+  objPartialMatch: 6,
+  // Additive scores depending on the priority of the object
+  objPrio: {0:  15,   // used to be importantResults
+            1:  5,   // used to be objectResults
+            2: -5},  // used to be unimportantResults
+  //  Used when the priority is not in the mapping.
+  objPrioDefault: 0,
+
+  // query found in title
+  title: 15,
+  // query found in terms
+  term: 5
+};
+
+
 /**
 /**
  * Search Module
  * Search Module
  */
  */
@@ -239,8 +245,13 @@ var Search = {
   },
   },
 
 
   loadIndex : function(url) {
   loadIndex : function(url) {
-    $.ajax({type: "GET", url: url, data: null, success: null,
-            dataType: "script", cache: true});
+    $.ajax({type: "GET", url: url, data: null,
+            dataType: "script", cache: true,
+            complete: function(jqxhr, textstatus) {
+              if (textstatus != "success") {
+                document.getElementById("searchindexloader").src = url;
+              }
+            }});
   },
   },
 
 
   setIndex : function(index) {
   setIndex : function(index) {
@@ -268,19 +279,20 @@ var Search = {
     if (this._pulse_status >= 0)
     if (this._pulse_status >= 0)
         return;
         return;
     function pulse() {
     function pulse() {
+      var i;
       Search._pulse_status = (Search._pulse_status + 1) % 4;
       Search._pulse_status = (Search._pulse_status + 1) % 4;
       var dotString = '';
       var dotString = '';
-      for (var i = 0; i < Search._pulse_status; i++)
+      for (i = 0; i < Search._pulse_status; i++)
         dotString += '.';
         dotString += '.';
       Search.dots.text(dotString);
       Search.dots.text(dotString);
       if (Search._pulse_status > -1)
       if (Search._pulse_status > -1)
         window.setTimeout(pulse, 500);
         window.setTimeout(pulse, 500);
-    };
+    }
     pulse();
     pulse();
   },
   },
 
 
   /**
   /**
-   * perform a search for something
+   * perform a search for something (or wait until index is loaded)
    */
    */
   performSearch : function(query) {
   performSearch : function(query) {
     // create the required interface elements
     // create the required interface elements
@@ -300,41 +312,46 @@ var Search = {
       this.deferQuery(query);
       this.deferQuery(query);
   },
   },
 
 
+  /**
+   * execute search (requires search index to be loaded)
+   */
   query : function(query) {
   query : function(query) {
+    var i;
     var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
     var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
 
 
-    // Stem the searchterms and add them to the correct list
+    // stem the searchterms and add them to the correct list
     var stemmer = new Stemmer();
     var stemmer = new Stemmer();
     var searchterms = [];
     var searchterms = [];
     var excluded = [];
     var excluded = [];
     var hlterms = [];
     var hlterms = [];
     var tmp = query.split(/\s+/);
     var tmp = query.split(/\s+/);
     var objectterms = [];
     var objectterms = [];
-    for (var i = 0; i < tmp.length; i++) {
-      if (tmp[i] != "") {
+    for (i = 0; i < tmp.length; i++) {
+      if (tmp[i] !== "") {
           objectterms.push(tmp[i].toLowerCase());
           objectterms.push(tmp[i].toLowerCase());
       }
       }
 
 
-      if ($u.indexOf(stopwords, tmp[i]) != -1 || tmp[i].match(/^\d+$/) ||
-          tmp[i] == "") {
+      if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) ||
+          tmp[i] === "") {
         // skip this "word"
         // skip this "word"
         continue;
         continue;
       }
       }
       // stem the word
       // stem the word
-      var word = stemmer.stemWord(tmp[i]).toLowerCase();
+      var word = stemmer.stemWord(tmp[i].toLowerCase());
+      var toAppend;
       // select the correct list
       // select the correct list
       if (word[0] == '-') {
       if (word[0] == '-') {
-        var toAppend = excluded;
+        toAppend = excluded;
         word = word.substr(1);
         word = word.substr(1);
       }
       }
       else {
       else {
-        var toAppend = searchterms;
+        toAppend = searchterms;
         hlterms.push(tmp[i].toLowerCase());
         hlterms.push(tmp[i].toLowerCase());
       }
       }
       // only add if not already in the list
       // only add if not already in the list
-      if (!$.contains(toAppend, word))
+      if (!$u.contains(toAppend, word))
         toAppend.push(word);
         toAppend.push(word);
-    };
+    }
     var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
     var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
 
 
     // console.debug('SEARCH: searching for:');
     // console.debug('SEARCH: searching for:');
@@ -342,89 +359,51 @@ var Search = {
     // console.info('excluded: ', excluded);
     // console.info('excluded: ', excluded);
 
 
     // prepare search
     // prepare search
-    var filenames = this._index.filenames;
-    var titles = this._index.titles;
     var terms = this._index.terms;
     var terms = this._index.terms;
-    var fileMap = {};
-    var files = null;
-    // different result priorities
-    var importantResults = [];
-    var objectResults = [];
-    var regularResults = [];
-    var unimportantResults = [];
+    var titleterms = this._index.titleterms;
+
+    // array of [filename, title, anchor, descr, score]
+    var results = [];
     $('#search-progress').empty();
     $('#search-progress').empty();
 
 
     // lookup as object
     // lookup as object
-    for (var i = 0; i < objectterms.length; i++) {
-      var others = Array.concat(objectterms.slice(0,i),
-                                objectterms.slice(i+1, objectterms.length))
-      var results = this.performObjectSearch(objectterms[i], others);
-      // Assume first word is most likely to be the object,
-      // other words more likely to be in description.
-      // Therefore put matches for earlier words first.
-      // (Results are eventually used in reverse order).
-      objectResults = results[0].concat(objectResults);
-      importantResults = results[1].concat(importantResults);
-      unimportantResults = results[2].concat(unimportantResults);
+    for (i = 0; i < objectterms.length; i++) {
+      var others = [].concat(objectterms.slice(0, i),
+                             objectterms.slice(i+1, objectterms.length));
+      results = results.concat(this.performObjectSearch(objectterms[i], others));
     }
     }
 
 
-    // perform the search on the required terms
-    for (var i = 0; i < searchterms.length; i++) {
-      var word = searchterms[i];
-      // no match but word was a required one
-      if ((files = terms[word]) == null)
-        break;
-      if (files.length == undefined) {
-        files = [files];
-      }
-      // create the mapping
-      for (var j = 0; j < files.length; j++) {
-        var file = files[j];
-        if (file in fileMap)
-          fileMap[file].push(word);
-        else
-          fileMap[file] = [word];
-      }
-    }
-
-    // now check if the files don't contain excluded terms
-    for (var file in fileMap) {
-      var valid = true;
-
-      // check if all requirements are matched
-      if (fileMap[file].length != searchterms.length)
-        continue;
-
-      // ensure that none of the excluded terms is in the
-      // search result.
-      for (var i = 0; i < excluded.length; i++) {
-        if (terms[excluded[i]] == file ||
-            $.contains(terms[excluded[i]] || [], file)) {
-          valid = false;
-          break;
-        }
-      }
+    // lookup as search terms in fulltext
+    results = results.concat(this.performTermsSearch(searchterms, excluded, terms, Scorer.term))
+                     .concat(this.performTermsSearch(searchterms, excluded, titleterms, Scorer.title));
 
 
-      // if we have still a valid result we can add it
-      // to the result list
-      if (valid)
-        regularResults.push([filenames[file], titles[file], '', null]);
+    // let the scorer override scores with a custom scoring function
+    if (Scorer.score) {
+      for (i = 0; i < results.length; i++)
+        results[i][4] = Scorer.score(results[i]);
     }
     }
 
 
-    // delete unused variables in order to not waste
-    // memory until list is retrieved completely
-    delete filenames, titles, terms;
-
-    // now sort the regular results descending by title
-    regularResults.sort(function(a, b) {
-      var left = a[1].toLowerCase();
-      var right = b[1].toLowerCase();
-      return (left > right) ? -1 : ((left < right) ? 1 : 0);
+    // now sort the results by score (in opposite order of appearance, since the
+    // display function below uses pop() to retrieve items) and then
+    // alphabetically
+    results.sort(function(a, b) {
+      var left = a[4];
+      var right = b[4];
+      if (left > right) {
+        return 1;
+      } else if (left < right) {
+        return -1;
+      } else {
+        // same score: sort alphabetically
+        left = a[1].toLowerCase();
+        right = b[1].toLowerCase();
+        return (left > right) ? -1 : ((left < right) ? 1 : 0);
+      }
     });
     });
 
 
-    // combine all results
-    var results = unimportantResults.concat(regularResults)
-      .concat(objectResults).concat(importantResults);
+    // for debugging
+    //Search.lastresults = results.slice();  // a copy
+    //console.info('search results:', Search.lastresults);
 
 
     // print the results
     // print the results
     var resultCount = results.length;
     var resultCount = results.length;
@@ -433,7 +412,7 @@ var Search = {
       if (results.length) {
       if (results.length) {
         var item = results.pop();
         var item = results.pop();
         var listItem = $('<li style="display:none"></li>');
         var listItem = $('<li style="display:none"></li>');
-        if (DOCUMENTATION_OPTIONS.FILE_SUFFIX == '') {
+        if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {
           // dirhtml builder
           // dirhtml builder
           var dirname = item[0] + '/';
           var dirname = item[0] + '/';
           if (dirname.match(/\/index\/$/)) {
           if (dirname.match(/\/index\/$/)) {
@@ -457,16 +436,18 @@ var Search = {
             displayNextItem();
             displayNextItem();
           });
           });
         } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
         } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
-          $.get(DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' +
-                item[0] + '.txt', function(data) {
-            if (data != '') {
-              listItem.append($.makeSearchSummary(data, searchterms, hlterms));
-              Search.output.append(listItem);
-            }
-            listItem.slideDown(5, function() {
-              displayNextItem();
-            });
-          }, "text");
+          $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[0] + '.txt',
+                  dataType: "text",
+                  complete: function(jqxhr, textstatus) {
+                    var data = jqxhr.responseText;
+                    if (data !== '' && data !== undefined) {
+                      listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
+                    }
+                    Search.output.append(listItem);
+                    listItem.slideDown(5, function() {
+                      displayNextItem();
+                    });
+                  }});
         } else {
         } else {
           // no source available, just display title
           // no source available, just display title
           Search.output.append(listItem);
           Search.output.append(listItem);
@@ -489,29 +470,42 @@ var Search = {
     displayNextItem();
     displayNextItem();
   },
   },
 
 
+  /**
+   * search for object names
+   */
   performObjectSearch : function(object, otherterms) {
   performObjectSearch : function(object, otherterms) {
     var filenames = this._index.filenames;
     var filenames = this._index.filenames;
     var objects = this._index.objects;
     var objects = this._index.objects;
     var objnames = this._index.objnames;
     var objnames = this._index.objnames;
     var titles = this._index.titles;
     var titles = this._index.titles;
 
 
-    var importantResults = [];
-    var objectResults = [];
-    var unimportantResults = [];
+    var i;
+    var results = [];
 
 
     for (var prefix in objects) {
     for (var prefix in objects) {
       for (var name in objects[prefix]) {
       for (var name in objects[prefix]) {
         var fullname = (prefix ? prefix + '.' : '') + name;
         var fullname = (prefix ? prefix + '.' : '') + name;
         if (fullname.toLowerCase().indexOf(object) > -1) {
         if (fullname.toLowerCase().indexOf(object) > -1) {
+          var score = 0;
+          var parts = fullname.split('.');
+          // check for different match types: exact matches of full name or
+          // "last name" (i.e. last dotted part)
+          if (fullname == object || parts[parts.length - 1] == object) {
+            score += Scorer.objNameMatch;
+          // matches in last name
+          } else if (parts[parts.length - 1].indexOf(object) > -1) {
+            score += Scorer.objPartialMatch;
+          }
           var match = objects[prefix][name];
           var match = objects[prefix][name];
-          var objname = objnames[match[1]];
+          var objname = objnames[match[1]][2];
           var title = titles[match[0]];
           var title = titles[match[0]];
           // If more than one term searched for, we require other words to be
           // If more than one term searched for, we require other words to be
           // found in the name/title/description
           // found in the name/title/description
           if (otherterms.length > 0) {
           if (otherterms.length > 0) {
-            var haystack = (prefix + ' ' + name + ' ' + objname + ' ' + title).toLowerCase();
+            var haystack = (prefix + ' ' + name + ' ' +
+                            objname + ' ' + title).toLowerCase();
             var allfound = true;
             var allfound = true;
-            for (var i = 0; i < otherterms.length; i++) {
+            for (i = 0; i < otherterms.length; i++) {
               if (haystack.indexOf(otherterms[i]) == -1) {
               if (haystack.indexOf(otherterms[i]) == -1) {
                 allfound = false;
                 allfound = false;
                 break;
                 break;
@@ -522,34 +516,107 @@ var Search = {
             }
             }
           }
           }
           var descr = objname + _(', in ') + title;
           var descr = objname + _(', in ') + title;
-          // XXX the generated anchors are not generally correct
-          // XXX there may be custom prefixes
-          result = [filenames[match[0]], fullname, '#'+fullname, descr];
-          switch (match[2]) {
-          case 1: objectResults.push(result); break;
-          case 0: importantResults.push(result); break;
-          case 2: unimportantResults.push(result); break;
+
+          var anchor = match[3];
+          if (anchor === '')
+            anchor = fullname;
+          else if (anchor == '-')
+            anchor = objnames[match[1]][1] + '-' + fullname;
+          // add custom score for some objects according to scorer
+          if (Scorer.objPrio.hasOwnProperty(match[2])) {
+            score += Scorer.objPrio[match[2]];
+          } else {
+            score += Scorer.objPrioDefault;
           }
           }
+          results.push([filenames[match[0]], fullname, '#'+anchor, descr, score]);
         }
         }
       }
       }
     }
     }
 
 
-    // sort results descending
-    objectResults.sort(function(a, b) {
-      return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
-    });
+    return results;
+  },
 
 
-    importantResults.sort(function(a, b) {
-      return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
-    });
+  /**
+   * search for full-text terms in the index
+   */
+  performTermsSearch : function(searchterms, excluded, terms, score) {
+    var filenames = this._index.filenames;
+    var titles = this._index.titles;
 
 
-    unimportantResults.sort(function(a, b) {
-      return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
-    });
+    var i, j, file, files;
+    var fileMap = {};
+    var results = [];
+
+    // perform the search on the required terms
+    for (i = 0; i < searchterms.length; i++) {
+      var word = searchterms[i];
+      // no match but word was a required one
+      if ((files = terms[word]) === undefined)
+        break;
+      if (files.length === undefined) {
+        files = [files];
+      }
+      // create the mapping
+      for (j = 0; j < files.length; j++) {
+        file = files[j];
+        if (file in fileMap)
+          fileMap[file].push(word);
+        else
+          fileMap[file] = [word];
+      }
+    }
+
+    // now check if the files don't contain excluded terms
+    for (file in fileMap) {
+      var valid = true;
+
+      // check if all requirements are matched
+      if (fileMap[file].length != searchterms.length)
+          continue;
+
+      // ensure that none of the excluded terms is in the search result
+      for (i = 0; i < excluded.length; i++) {
+        if (terms[excluded[i]] == file ||
+          $u.contains(terms[excluded[i]] || [], file)) {
+          valid = false;
+          break;
+        }
+      }
+
+      // if we have still a valid result we can add it to the result list
+      if (valid) {
+        results.push([filenames[file], titles[file], '', null, score]);
+      }
+    }
+    return results;
+  },
 
 
-    return [importantResults, objectResults, unimportantResults]
+  /**
+   * helper function to return a node containing the
+   * search summary for a given text. keywords is a list
+   * of stemmed words, hlwords is the list of normal, unstemmed
+   * words. the first one is used to find the occurrence, the
+   * latter for highlighting it.
+   */
+  makeSearchSummary : function(text, keywords, hlwords) {
+    var textLower = text.toLowerCase();
+    var start = 0;
+    $.each(keywords, function() {
+      var i = textLower.indexOf(this.toLowerCase());
+      if (i > -1)
+        start = i;
+    });
+    start = Math.max(start - 120, 0);
+    var excerpt = ((start > 0) ? '...' : '') +
+      $.trim(text.substr(start, 240)) +
+      ((start + 240 - text.length) ? '...' : '');
+    var rv = $('<div class="context"></div>').text(excerpt);
+    $.each(hlwords, function() {
+      rv = rv.highlightText(this, 'highlighted');
+    });
+    return rv;
   }
   }
-}
+};
 
 
 $(document).ready(function() {
 $(document).ready(function() {
   Search.init();
   Search.init();

二进制
doc/pub/tutorial/html/_static/transparent.gif


文件差异内容过多而无法显示
+ 31 - 16
doc/pub/tutorial/html/_static/underscore.js


二进制
doc/pub/tutorial/html/_static/up-pressed.png


二进制
doc/pub/tutorial/html/_static/up.png


+ 17 - 17
doc/pub/tutorial/html/_static/websupport.js

@@ -2,9 +2,9 @@
  * websupport.js
  * websupport.js
  * ~~~~~~~~~~~~~
  * ~~~~~~~~~~~~~
  *
  *
- * sphinx.websupport utilties for all documentation.
+ * sphinx.websupport utilities for all documentation.
  *
  *
- * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2015 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  * :license: BSD, see LICENSE for details.
  *
  *
  */
  */
@@ -50,51 +50,51 @@
   }
   }
 
 
   function initEvents() {
   function initEvents() {
-    $('a.comment-close').live("click", function(event) {
+    $(document).on("click", 'a.comment-close', function(event) {
       event.preventDefault();
       event.preventDefault();
       hide($(this).attr('id').substring(2));
       hide($(this).attr('id').substring(2));
     });
     });
-    $('a.vote').live("click", function(event) {
+    $(document).on("click", 'a.vote', function(event) {
       event.preventDefault();
       event.preventDefault();
       handleVote($(this));
       handleVote($(this));
     });
     });
-    $('a.reply').live("click", function(event) {
+    $(document).on("click", 'a.reply', function(event) {
       event.preventDefault();
       event.preventDefault();
       openReply($(this).attr('id').substring(2));
       openReply($(this).attr('id').substring(2));
     });
     });
-    $('a.close-reply').live("click", function(event) {
+    $(document).on("click", 'a.close-reply', function(event) {
       event.preventDefault();
       event.preventDefault();
       closeReply($(this).attr('id').substring(2));
       closeReply($(this).attr('id').substring(2));
     });
     });
-    $('a.sort-option').live("click", function(event) {
+    $(document).on("click", 'a.sort-option', function(event) {
       event.preventDefault();
       event.preventDefault();
       handleReSort($(this));
       handleReSort($(this));
     });
     });
-    $('a.show-proposal').live("click", function(event) {
+    $(document).on("click", 'a.show-proposal', function(event) {
       event.preventDefault();
       event.preventDefault();
       showProposal($(this).attr('id').substring(2));
       showProposal($(this).attr('id').substring(2));
     });
     });
-    $('a.hide-proposal').live("click", function(event) {
+    $(document).on("click", 'a.hide-proposal', function(event) {
       event.preventDefault();
       event.preventDefault();
       hideProposal($(this).attr('id').substring(2));
       hideProposal($(this).attr('id').substring(2));
     });
     });
-    $('a.show-propose-change').live("click", function(event) {
+    $(document).on("click", 'a.show-propose-change', function(event) {
       event.preventDefault();
       event.preventDefault();
       showProposeChange($(this).attr('id').substring(2));
       showProposeChange($(this).attr('id').substring(2));
     });
     });
-    $('a.hide-propose-change').live("click", function(event) {
+    $(document).on("click", 'a.hide-propose-change', function(event) {
       event.preventDefault();
       event.preventDefault();
       hideProposeChange($(this).attr('id').substring(2));
       hideProposeChange($(this).attr('id').substring(2));
     });
     });
-    $('a.accept-comment').live("click", function(event) {
+    $(document).on("click", 'a.accept-comment', function(event) {
       event.preventDefault();
       event.preventDefault();
       acceptComment($(this).attr('id').substring(2));
       acceptComment($(this).attr('id').substring(2));
     });
     });
-    $('a.delete-comment').live("click", function(event) {
+    $(document).on("click", 'a.delete-comment', function(event) {
       event.preventDefault();
       event.preventDefault();
       deleteComment($(this).attr('id').substring(2));
       deleteComment($(this).attr('id').substring(2));
     });
     });
-    $('a.comment-markup').live("click", function(event) {
+    $(document).on("click", 'a.comment-markup', function(event) {
       event.preventDefault();
       event.preventDefault();
       toggleCommentMarkupBox($(this).attr('id').substring(2));
       toggleCommentMarkupBox($(this).attr('id').substring(2));
     });
     });
@@ -566,7 +566,7 @@
     var context = $.extend({}, opts, comment);
     var context = $.extend({}, opts, comment);
     var div = $(renderTemplate(commentTemplate, context));
     var div = $(renderTemplate(commentTemplate, context));
 
 
-    // If the user has voted on this comment, highblight the correct arrow.
+    // If the user has voted on this comment, highlight the correct arrow.
     if (comment.vote) {
     if (comment.vote) {
       var direction = (comment.vote == 1) ? 'u' : 'd';
       var direction = (comment.vote == 1) ? 'u' : 'd';
       div.find('#' + direction + 'v' + comment.id).hide();
       div.find('#' + direction + 'v' + comment.id).hide();
@@ -700,8 +700,8 @@
         (<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
         (<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
       <div class="comment-markup-box" id="mb<%id%>">\
       <div class="comment-markup-box" id="mb<%id%>">\
         reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
         reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
-        <tt>``code``</tt>, \
-        code blocks: <tt>::</tt> and an indented block after blank line</div>\
+        <code>``code``</code>, \
+        code blocks: <code>::</code> and an indented block after blank line</div>\
       <form method="post" id="cf<%id%>" class="comment-form" action="">\
       <form method="post" id="cf<%id%>" class="comment-form" action="">\
         <textarea name="comment" cols="80"></textarea>\
         <textarea name="comment" cols="80"></textarea>\
         <p class="propose-button">\
         <p class="propose-button">\

+ 29 - 38
doc/pub/tutorial/html/genindex.html

@@ -1,6 +1,4 @@
 
 
-
-
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
 
@@ -11,13 +9,13 @@
     
     
     <title>Index</title>
     <title>Index</title>
     
     
-    <link rel="stylesheet" href="_static/pyramid.css" type="text/css" />
+    <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     
     
     <script type="text/javascript">
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    './',
         URL_ROOT:    './',
-        VERSION:     '0.1',
+        VERSION:     '1.0',
         COLLAPSE_INDEX: false,
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
         HAS_SOURCE:  true
@@ -26,7 +24,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+    <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
 
 
         <script src="http://sagecell.sagemath.org/static/jquery.min.js"></script>
         <script src="http://sagecell.sagemath.org/static/jquery.min.js"></script>
         <script src="http://sagecell.sagemath.org/static/embedded_sagecell.js"></script>
         <script src="http://sagecell.sagemath.org/static/embedded_sagecell.js"></script>
@@ -44,13 +42,11 @@
         </style>
         </style>
 
 
     
     
-    <link rel="top" title="Using Pysketcher to Create Principal Sketches of Physics Problems" href="index.html" />
+    <link rel="top" title="Pysketcher: Create Principal Sketches of Physics Problems" href="index.html" />
 
 
-<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Neuton&amp;subset=latin" type="text/css" media="screen" charset="utf-8" />
-<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Nobile:regular,italic,bold,bolditalic&amp;subset=latin" type="text/css" media="screen" charset="utf-8" />
-<!--[if lte IE 6]>
-<link rel="stylesheet" href="_static/ie6.css" type="text/css" media="screen" charset="utf-8" />
-<![endif]-->
+   
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9">
 
 
   
   
        <style type="text/css">
        <style type="text/css">
@@ -61,22 +57,12 @@
        </style>
        </style>
       </head>
       </head>
     
     
-  <body>
-
-    <div class="related">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="#" title="General Index"
-             accesskey="I">index</a></li>
-        <li><a href="index.html">Using Pysketcher to Create Principal Sketches of Physics Problems</a> &raquo;</li> 
-      </ul>
-    </div>  
+  <body role="document">  
 
 
     <div class="document">
     <div class="document">
       <div class="documentwrapper">
       <div class="documentwrapper">
         <div class="bodywrapper">
         <div class="bodywrapper">
-          <div class="body">
+          <div class="body" role="main">
             
             
 
 
 <h1 id="index">Index</h1>
 <h1 id="index">Index</h1>
@@ -111,15 +97,21 @@
           </div>
           </div>
         </div>
         </div>
       </div>
       </div>
-      <div class="sphinxsidebar">
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
         <div class="sphinxsidebarwrapper">
         <div class="sphinxsidebarwrapper">
 
 
-   
+   <div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  </ul></li>
+</ul>
+</div>
 
 
-<div id="searchbox" style="display: none">
+<div id="searchbox" style="display: none" role="search">
   <h3>Quick search</h3>
   <h3>Quick search</h3>
     <form class="search" action="search.html" method="get">
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" size="18" />
+      <input type="text" name="q" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
       <input type="hidden" name="check_keywords" value="yes" />
       <input type="hidden" name="check_keywords" value="yes" />
       <input type="hidden" name="area" value="default" />
       <input type="hidden" name="area" value="default" />
@@ -133,18 +125,17 @@
       </div>
       </div>
       <div class="clearer"></div>
       <div class="clearer"></div>
     </div>
     </div>
-    <div class="related">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="#" title="General Index"
-             >index</a></li>
-        <li><a href="index.html">Using Pysketcher to Create Principal Sketches of Physics Problems</a> &raquo;</li> 
-      </ul>
-    </div>
     <div class="footer">
     <div class="footer">
-        &copy; Copyright 2015, H. P. Langtangen.
-      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.2.3.
+      &copy;2015, Hans Petter Langtangen.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 1.4a0+</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.6</a>
+      
     </div>
     </div>
+
+    
+
+    
   </body>
   </body>
 </html>
 </html>

+ 53 - 80
doc/pub/tutorial/html/index.html

@@ -1,4 +1,3 @@
-
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
 
@@ -7,15 +6,15 @@
   <head>
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
     
-    <title>Using Pysketcher to Create Principal Sketches of Physics Problems</title>
+    <title>Pysketcher: Create Principal Sketches of Physics Problems</title>
     
     
-    <link rel="stylesheet" href="_static/pyramid.css" type="text/css" />
+    <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     
     
     <script type="text/javascript">
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    './',
         URL_ROOT:    './',
-        VERSION:     '0.1',
+        VERSION:     '1.0',
         COLLAPSE_INDEX: false,
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
         HAS_SOURCE:  true
@@ -24,7 +23,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+    <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
 
 
         <script src="http://sagecell.sagemath.org/static/jquery.min.js"></script>
         <script src="http://sagecell.sagemath.org/static/jquery.min.js"></script>
         <script src="http://sagecell.sagemath.org/static/embedded_sagecell.js"></script>
         <script src="http://sagecell.sagemath.org/static/embedded_sagecell.js"></script>
@@ -42,14 +41,12 @@
         </style>
         </style>
 
 
     
     
-    <link rel="top" title="Using Pysketcher to Create Principal Sketches of Physics Problems" href="#" />
-    <link rel="next" title="Using Pysketcher to Create Principal Sketches of Physics Problems" href="main_sketcher.html" />
+    <link rel="top" title="Pysketcher: Create Principal Sketches of Physics Problems" href="#" />
+    <link rel="next" title="Pysketcher: Create Principal Sketches of Physics Problems" href="main_sketcher.html" />
 
 
-<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Neuton&amp;subset=latin" type="text/css" media="screen" charset="utf-8" />
-<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Nobile:regular,italic,bold,bolditalic&amp;subset=latin" type="text/css" media="screen" charset="utf-8" />
-<!--[if lte IE 6]>
-<link rel="stylesheet" href="_static/ie6.css" type="text/css" media="screen" charset="utf-8" />
-<![endif]-->
+   
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9">
 
 
   
   
        <style type="text/css">
        <style type="text/css">
@@ -60,65 +57,31 @@
        </style>
        </style>
       </head>
       </head>
     
     
-  <body>
-
-    <div class="related">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             accesskey="I">index</a></li>
-        <li class="right" >
-          <a href="main_sketcher.html" title="Using Pysketcher to Create Principal Sketches of Physics Problems"
-             accesskey="N">next</a> |</li>
-        <li><a href="#">Using Pysketcher to Create Principal Sketches of Physics Problems</a> &raquo;</li> 
-      </ul>
-    </div>  
+  <body role="document">  
 
 
     <div class="document">
     <div class="document">
       <div class="documentwrapper">
       <div class="documentwrapper">
         <div class="bodywrapper">
         <div class="bodywrapper">
-          <div class="body">
+          <div class="body" role="main">
             
             
-  <div class="section" id="using-pysketcher-to-create-principal-sketches-of-physics-problems">
-<h1>Using Pysketcher to Create Principal Sketches of Physics Problems<a class="headerlink" href="#using-pysketcher-to-create-principal-sketches-of-physics-problems" title="Permalink to this headline">¶</a></h1>
+  <div class="section" id="pysketcher-create-principal-sketches-of-physics-problems">
+<h1>Pysketcher: Create Principal Sketches of Physics Problems<a class="headerlink" href="#pysketcher-create-principal-sketches-of-physics-problems" title="Permalink to this headline">¶</a></h1>
 <p>Contents:</p>
 <p>Contents:</p>
 <div class="toctree-wrapper compound">
 <div class="toctree-wrapper compound">
 <ul>
 <ul>
-<li class="toctree-l1"><a class="reference internal" href="main_sketcher.html">Using Pysketcher to Create Principal Sketches of Physics Problems</a><ul>
-<li class="toctree-l2"><a class="reference internal" href="main_sketcher.html#a-first-glimpse-of-pysketcher">A First Glimpse of Pysketcher</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="main_sketcher.html#basic-construction-of-sketches">Basic Construction of Sketches</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="main_sketcher.html#basic-shapes">Basic Shapes</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="main_sketcher.html#axis">Axis</a></li>
-<li class="toctree-l3"><a class="reference internal" href="main_sketcher.html#distance-with-text">Distance with Text</a></li>
-<li class="toctree-l3"><a class="reference internal" href="main_sketcher.html#rectangle">Rectangle</a></li>
-<li class="toctree-l3"><a class="reference internal" href="main_sketcher.html#triangle">Triangle</a></li>
-<li class="toctree-l3"><a class="reference internal" href="main_sketcher.html#arc">Arc</a></li>
-<li class="toctree-l3"><a class="reference internal" href="main_sketcher.html#spring">Spring</a></li>
-<li class="toctree-l3"><a class="reference internal" href="main_sketcher.html#dashpot">Dashpot</a></li>
-<li class="toctree-l3"><a class="reference internal" href="main_sketcher.html#wavy">Wavy</a></li>
-<li class="toctree-l3"><a class="reference internal" href="main_sketcher.html#stochastic-curves">Stochastic curves</a></li>
-</ul>
-</li>
-<li class="toctree-l2"><a class="reference internal" href="main_sketcher.html#inner-workings-of-the-pysketcher-tool">Inner Workings of the Pysketcher Tool</a><ul>
-<li class="toctree-l3"><a class="reference internal" href="main_sketcher.html#example-of-classes-for-geometric-objects">Example of Classes for Geometric Objects</a></li>
-<li class="toctree-l3"><a class="reference internal" href="main_sketcher.html#adding-functionality-via-recursion">Adding Functionality via Recursion</a></li>
-<li class="toctree-l3"><a class="reference internal" href="main_sketcher.html#scaling-translating-and-rotating-a-figure">Scaling, Translating, and Rotating a Figure</a></li>
-</ul>
-</li>
+<li class="toctree-l1"><a class="reference internal" href="main_sketcher.html">Pysketcher: Create Principal Sketches of Physics Problems</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="main_sketcher.html#a-first-glimpse-of-pysketcher">A First Glimpse of Pysketcher</a></li>
+<li class="toctree-l2"><a class="reference internal" href="main_sketcher.html#basic-shapes">Basic Shapes</a></li>
+<li class="toctree-l2"><a class="reference internal" href="main_sketcher.html#inner-workings-of-the-pysketcher-tool">Inner Workings of the Pysketcher Tool</a></li>
 </ul>
 </ul>
 </li>
 </li>
 </ul>
 </ul>
 </div>
 </div>
 </div>
 </div>
-<div class="section" id="indices-and-tables">
-<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="index">
+<h1>Index<a class="headerlink" href="#index" title="Permalink to this headline">¶</a></h1>
 <ul class="simple">
 <ul class="simple">
-<li><a class="reference internal" href="genindex.html"><em>Index</em></a></li>
-<li><a class="reference internal" href="py-modindex.html"><em>Module Index</em></a></li>
-<li><a class="reference internal" href="search.html"><em>Search Page</em></a></li>
+<li><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></li>
 </ul>
 </ul>
 </div>
 </div>
 
 
@@ -126,21 +89,32 @@
           </div>
           </div>
         </div>
         </div>
       </div>
       </div>
-      <div class="sphinxsidebar">
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
         <div class="sphinxsidebarwrapper">
         <div class="sphinxsidebarwrapper">
   <h3><a href="#">Table Of Contents</a></h3>
   <h3><a href="#">Table Of Contents</a></h3>
   <ul>
   <ul>
-<li><a class="reference internal" href="#">Using Pysketcher to Create Principal Sketches of Physics Problems</a></li>
-<li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li>
+<li><a class="reference internal" href="#">Pysketcher: Create Principal Sketches of Physics Problems</a></li>
+<li><a class="reference internal" href="#index">Index</a></li>
 </ul>
 </ul>
-
-  <h4>Next topic</h4>
-  <p class="topless"><a href="main_sketcher.html"
-                        title="next chapter">Using Pysketcher to Create Principal Sketches of Physics Problems</a></p>
-<div id="searchbox" style="display: none">
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="#">Documentation overview</a><ul>
+      <li>Next: <a href="main_sketcher.html" title="next chapter">Pysketcher: Create Principal Sketches of Physics Problems</a></li>
+  </ul></li>
+</ul>
+</div>
+  <div role="note" aria-label="source link">
+    <h3>This Page</h3>
+    <ul class="this-page-menu">
+      <li><a href="_sources/index.txt"
+            rel="nofollow">Show Source</a></li>
+    </ul>
+   </div>
+<div id="searchbox" style="display: none" role="search">
   <h3>Quick search</h3>
   <h3>Quick search</h3>
     <form class="search" action="search.html" method="get">
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" size="18" />
+      <input type="text" name="q" />
       <input type="submit" value="Go" />
       <input type="submit" value="Go" />
       <input type="hidden" name="check_keywords" value="yes" />
       <input type="hidden" name="check_keywords" value="yes" />
       <input type="hidden" name="area" value="default" />
       <input type="hidden" name="area" value="default" />
@@ -154,21 +128,20 @@
       </div>
       </div>
       <div class="clearer"></div>
       <div class="clearer"></div>
     </div>
     </div>
-    <div class="related">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             >index</a></li>
-        <li class="right" >
-          <a href="main_sketcher.html" title="Using Pysketcher to Create Principal Sketches of Physics Problems"
-             >next</a> |</li>
-        <li><a href="#">Using Pysketcher to Create Principal Sketches of Physics Problems</a> &raquo;</li> 
-      </ul>
-    </div>
     <div class="footer">
     <div class="footer">
-        &copy; Copyright 2015, H. P. Langtangen.
-      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.2.3.
+      &copy;2015, Hans Petter Langtangen.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 1.4a0+</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.6</a>
+      
+      |
+      <a href="_sources/index.txt"
+          rel="nofollow">Page source</a>
     </div>
     </div>
+
+    
+
+    
   </body>
   </body>
 </html>
 </html>

二进制
doc/pub/tutorial/html/objects.inv


+ 29 - 35
doc/pub/tutorial/html/search.html

@@ -1,4 +1,3 @@
-
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
 
@@ -9,13 +8,13 @@
     
     
     <title>Search</title>
     <title>Search</title>
     
     
-    <link rel="stylesheet" href="_static/pyramid.css" type="text/css" />
+    <link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
     
     
     <script type="text/javascript">
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    './',
         URL_ROOT:    './',
-        VERSION:     '0.1',
+        VERSION:     '1.0',
         COLLAPSE_INDEX: false,
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
         FILE_SUFFIX: '.html',
         HAS_SOURCE:  true
         HAS_SOURCE:  true
@@ -24,7 +23,7 @@
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/jquery.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/underscore.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
     <script type="text/javascript" src="_static/doctools.js"></script>
-    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+    <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
     <script type="text/javascript" src="_static/searchtools.js"></script>
     <script type="text/javascript" src="_static/searchtools.js"></script>
 
 
         <script src="http://sagecell.sagemath.org/static/jquery.min.js"></script>
         <script src="http://sagecell.sagemath.org/static/jquery.min.js"></script>
@@ -43,17 +42,17 @@
         </style>
         </style>
 
 
     
     
-    <link rel="top" title="Using Pysketcher to Create Principal Sketches of Physics Problems" href="index.html" />
+    <link rel="top" title="Pysketcher: Create Principal Sketches of Physics Problems" href="index.html" />
 
 
   <script type="text/javascript">
   <script type="text/javascript">
     jQuery(function() { Search.loadIndex("searchindex.js"); });
     jQuery(function() { Search.loadIndex("searchindex.js"); });
   </script>
   </script>
   
   
-<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Neuton&amp;subset=latin" type="text/css" media="screen" charset="utf-8" />
-<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Nobile:regular,italic,bold,bolditalic&amp;subset=latin" type="text/css" media="screen" charset="utf-8" />
-<!--[if lte IE 6]>
-<link rel="stylesheet" href="_static/ie6.css" type="text/css" media="screen" charset="utf-8" />
-<![endif]-->
+  <script type="text/javascript" id="searchindexloader"></script>
+  
+   
+  
+  <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9">
 
 
 
 
   
   
@@ -65,22 +64,12 @@
        </style>
        </style>
       </head>
       </head>
     
     
-  <body>
-
-    <div class="related">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             accesskey="I">index</a></li>
-        <li><a href="index.html">Using Pysketcher to Create Principal Sketches of Physics Problems</a> &raquo;</li> 
-      </ul>
-    </div>  
+  <body role="document">  
 
 
     <div class="document">
     <div class="document">
       <div class="documentwrapper">
       <div class="documentwrapper">
         <div class="bodywrapper">
         <div class="bodywrapper">
-          <div class="body">
+          <div class="body" role="main">
             
             
   <h1 id="search-documentation">Search</h1>
   <h1 id="search-documentation">Search</h1>
   <div id="fallback" class="admonition warning">
   <div id="fallback" class="admonition warning">
@@ -109,24 +98,29 @@
           </div>
           </div>
         </div>
         </div>
       </div>
       </div>
-      <div class="sphinxsidebar">
-        <div class="sphinxsidebarwrapper">
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper"><div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  </ul></li>
+</ul>
+</div>
         </div>
         </div>
       </div>
       </div>
       <div class="clearer"></div>
       <div class="clearer"></div>
     </div>
     </div>
-    <div class="related">
-      <h3>Navigation</h3>
-      <ul>
-        <li class="right" style="margin-right: 10px">
-          <a href="genindex.html" title="General Index"
-             >index</a></li>
-        <li><a href="index.html">Using Pysketcher to Create Principal Sketches of Physics Problems</a> &raquo;</li> 
-      </ul>
-    </div>
     <div class="footer">
     <div class="footer">
-        &copy; Copyright 2015, H. P. Langtangen.
-      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.2.3.
+      &copy;2015, Hans Petter Langtangen.
+      
+      |
+      Powered by <a href="http://sphinx-doc.org/">Sphinx 1.4a0+</a>
+      &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.6</a>
+      
     </div>
     </div>
+
+    
+
+    
   </body>
   </body>
 </html>
 </html>

文件差异内容过多而无法显示
+ 1 - 1
doc/pub/tutorial/html/searchindex.js


+ 128 - 73
doc/pub/tutorial/pysketcher.html

@@ -11,31 +11,20 @@ Automatically generated HTML file from DocOnce source
 
 
 <title>Using Pysketcher to Create Principal Sketches of Physics Problems</title>
 <title>Using Pysketcher to Create Principal Sketches of Physics Problems</title>
 
 
+<!-- Bootstrap style: bootswatch_readable -->
+<link href="http://netdna.bootstrapcdn.com/bootswatch/3.1.1/readable/bootstrap.min.css" rel="stylesheet">
+<!-- not necessary
+<link href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
+-->
 
 
 <style type="text/css">
 <style type="text/css">
-/* blueish style */
-
-/* Color definitions:  http://www.december.com/html/spec/color0.html
-   CSS examples:       http://www.w3schools.com/css/css_examples.asp */
 
 
-body {
-  margin-top: 1.0em;
-  background-color: #ffffff;
-  font-family: Helvetica, Arial, FreeSans, san-serif;
-  color: #000000;
+/* Add scrollbar to dropdown menus in bootstrap navigation bar */
+.dropdown-menu {
+   height: auto;
+   max-height: 400px;
+   overflow-x: hidden;
 }
 }
-h1 { font-size: 1.8em; color: #1e36ce; }
-h2 { font-size: 1.6em; color: #1e36ce; }
-h3 { font-size: 1.4em; color: #1e36ce; }
-a { color: #1e36ce; text-decoration:none; }
-tt { font-family: "Courier New", Courier; }
-/* pre style removed because it will interfer with pygments */
-p { text-indent: 0px; }
-hr { border: 0; width: 80%; border-bottom: 1px solid #aaa}
-p.caption { width: 80%; font-style: normal; text-align: left; }
-hr.figure { border: 0; width: 80%; border-bottom: 1px solid #aaa}
-
-div { text-align: justify; text-justify: inter-word; }
 </style>
 </style>
 
 
 
 
@@ -43,51 +32,48 @@ div { text-align: justify; text-justify: inter-word; }
 
 
 <!-- tocinfo
 <!-- tocinfo
 {'highest level': 1,
 {'highest level': 1,
- 'sections': [(' A First Glimpse of Pysketcher ', 1, None, '___sec0'),
-              (' Basic Construction of Sketches ', 2, None, '___sec1'),
-              (' Basic Drawing ', 3, None, '___sec2'),
-              (' Groups of Objects ', 3, None, '___sec3'),
-              (' Changing Line Styles and Colors ', 3, None, '___sec4'),
-              (' The Figure Composition as an Object Hierarchy ',
+ 'sections': [('A First Glimpse of Pysketcher', 1, None, '___sec0'),
+              ('Basic Construction of Sketches', 2, None, '___sec1'),
+              ('Basic Drawing', 3, None, '___sec2'),
+              ('Groups of Objects', 3, None, '___sec3'),
+              ('Changing Line Styles and Colors', 3, None, '___sec4'),
+              ('The Figure Composition as an Object Hierarchy',
                3,
                3,
                None,
                None,
                '___sec5'),
                '___sec5'),
-              (' Animation: Translating the Vehicle ', 3, None, '___sec6'),
-              (' Animation: Rolling the Wheels ',
+              ('Animation: Translating the Vehicle', 3, None, '___sec6'),
+              ('Animation: Rolling the Wheels',
                3,
                3,
                'sketcher:vehicle1:anim',
                'sketcher:vehicle1:anim',
                'sketcher:vehicle1:anim'),
                'sketcher:vehicle1:anim'),
-              (' Basic Shapes ', 1, None, '___sec8'),
-              (' Axis ', 2, None, '___sec9'),
-              (' Distance with Text ', 2, None, '___sec10'),
-              (' Rectangle ', 2, None, '___sec11'),
-              (' Triangle ', 2, None, '___sec12'),
-              (' Arc ', 2, None, '___sec13'),
-              (' Spring ', 2, None, '___sec14'),
-              (' Dashpot ', 2, None, '___sec15'),
-              (' Wavy ', 2, None, '___sec16'),
-              (' Stochastic curves ', 2, None, '___sec17'),
-              (' Inner Workings of the Pysketcher Tool ',
-               1,
-               None,
-               '___sec18'),
-              (' Example of Classes for Geometric Objects ',
+              ('Basic Shapes', 1, None, '___sec8'),
+              ('Axis', 2, None, '___sec9'),
+              ('Distance with Text', 2, None, '___sec10'),
+              ('Rectangle', 2, None, '___sec11'),
+              ('Triangle', 2, None, '___sec12'),
+              ('Arc', 2, None, '___sec13'),
+              ('Spring', 2, None, '___sec14'),
+              ('Dashpot', 2, None, '___sec15'),
+              ('Wavy', 2, None, '___sec16'),
+              ('Stochastic curves', 2, None, '___sec17'),
+              ('Inner Workings of the Pysketcher Tool', 1, None, '___sec18'),
+              ('Example of Classes for Geometric Objects',
                2,
                2,
                None,
                None,
                '___sec19'),
                '___sec19'),
-              (' Simple Geometric Objects ', 3, None, '___sec20'),
-              (' Class Curve ', 3, None, '___sec21'),
-              (' Compound Geometric Objects ', 3, None, '___sec22'),
-              (' Adding Functionality via Recursion ', 2, None, '___sec23'),
-              (' Basic Principles of Recursion ', 3, None, '___sec24'),
-              (' Explaining Recursion ', 3, None, '___sec25'),
-              (' Scaling, Translating, and Rotating a Figure ',
+              ('Simple Geometric Objects', 3, None, '___sec20'),
+              ('Class Curve', 3, None, '___sec21'),
+              ('Compound Geometric Objects', 3, None, '___sec22'),
+              ('Adding Functionality via Recursion', 2, None, '___sec23'),
+              ('Basic Principles of Recursion', 3, None, '___sec24'),
+              ('Explaining Recursion', 3, None, '___sec25'),
+              ('Scaling, Translating, and Rotating a Figure',
                2,
                2,
                'sketcher:scaling',
                'sketcher:scaling',
                'sketcher:scaling'),
                'sketcher:scaling'),
-              (' Scaling ', 3, None, '___sec27'),
-              (' Translation ', 3, None, '___sec28'),
-              (' Rotation ', 3, None, '___sec29')]}
+              ('Scaling', 3, None, '___sec27'),
+              ('Translation', 3, None, '___sec28'),
+              ('Rotation', 3, None, '___sec29')]}
 end of tocinfo -->
 end of tocinfo -->
 
 
 <body>
 <body>
@@ -109,21 +95,70 @@ MathJax.Hub.Config({
 
 
 
 
     
     
-<a name="part0000"></a>
-<p>
-<!-- begin top navigation -->
-<table style="width: 100%"><tr><td>
-</td><td>
-<div style="text-align: right;"><a href="._pysketcher001.html"><img src="http://hplgit.github.io/doconce/bundled/html_images/next1.png" border=0 alt="Next &raquo;"></a></div>
-</td></tr></table>
-<!-- end top navigation -->
-</p>
+<!-- Bootstrap navigation bar -->
+<div class="navbar navbar-default navbar-fixed-top">
+  <div class="navbar-header">
+    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse">
+      <span class="icon-bar"></span>
+      <span class="icon-bar"></span>
+      <span class="icon-bar"></span>
+    </button>
+    <a class="navbar-brand" href="pysketcher.html">Using Pysketcher to Create Principal Sketches of Physics Problems</a>
+  </div>
+
+  <div class="navbar-collapse collapse navbar-responsive-collapse">
+    <ul class="nav navbar-nav navbar-right">
+      <li class="dropdown">
+        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Contents <b class="caret"></b></a>
+        <ul class="dropdown-menu">
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec0" style="font-size: 80%;"><b>A First Glimpse of Pysketcher</b></a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec1" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Basic Construction of Sketches</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec2" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Basic Drawing</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec3" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Groups of Objects</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec4" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Changing Line Styles and Colors</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec5" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Figure Composition as an Object Hierarchy</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#___sec6" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Animation: Translating the Vehicle</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher001.html#sketcher:vehicle1:anim" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Animation: Rolling the Wheels</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec8" style="font-size: 80%;"><b>Basic Shapes</b></a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec9" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Axis</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec10" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Distance with Text</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec11" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Rectangle</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec12" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Triangle</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec13" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Arc</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec14" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Spring</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec15" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Dashpot</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec16" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Wavy</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher002.html#___sec17" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Stochastic curves</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec18" style="font-size: 80%;"><b>Inner Workings of the Pysketcher Tool</b></a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec19" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Example of Classes for Geometric Objects</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec20" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Simple Geometric Objects</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec21" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class Curve</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec22" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compound Geometric Objects</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec23" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Adding Functionality via Recursion</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec24" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Basic Principles of Recursion</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec25" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Explaining Recursion</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#sketcher:scaling" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;Scaling, Translating, and Rotating a Figure</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec27" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Scaling</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec28" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Translation</a></li>
+     <!-- navigation toc: --> <li><a href="._pysketcher003.html#___sec29" style="font-size: 80%;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rotation</a></li>
+
+        </ul>
+      </li>
+    </ul>
+  </div>
+</div>
+</div> <!-- end of navigation bar -->
 
 
-<p>
+<div class="container">
+
+<p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p> <!-- add vertical space -->
+
+<a name="part0000"></a>
 <!-- ------------------- main content ---------------------- -->
 <!-- ------------------- main content ---------------------- -->
 
 
 
 
 
 
+<div class="jumbotron">
 <center><h1>Using Pysketcher to Create Principal Sketches of Physics Problems</h1></center>  <!-- document title -->
 <center><h1>Using Pysketcher to Create Principal Sketches of Physics Problems</h1></center>  <!-- document title -->
 
 
 <p>
 <p>
@@ -138,8 +173,10 @@ MathJax.Hub.Config({
 
 
 <center>[1] <b>Center for Biomedical Computing, Simula Research Laboratory</b></center>
 <center>[1] <b>Center for Biomedical Computing, Simula Research Laboratory</b></center>
 <center>[2] <b>Department of Informatics, University of Oslo</b></center>
 <center>[2] <b>Department of Informatics, University of Oslo</b></center>
+<br>
 <p>
 <p>
-<center><h4>Apr 27, 2015</h4></center> <!-- date -->
+<center><h4>Dec 22, 2015</h4></center> <!-- date -->
+<br>
 <p>
 <p>
 
 
 <!-- begin box -->
 <!-- begin box -->
@@ -179,17 +216,35 @@ no further background is required.
 <!-- which is just a part of this document... -->
 <!-- which is just a part of this document... -->
 
 
 <p>
 <p>
-<p>
-<!-- begin bottom navigation -->
-<table style="width: 100%"><tr><td>
-</td><td>
-<div style="text-align: right;"><a href="._pysketcher001.html"><img src="http://hplgit.github.io/doconce/bundled/html_images/next1.png" border=0 alt="Next &raquo;"></a></div>
-</td></tr></table>
-<!-- end bottom navigation -->
-</p>
 
 
+
+<p><a href="._pysketcher001.html" class="btn btn-primary btn-lg">Read &raquo;</a></p>
+
+
+</div> <!-- end jumbotron -->
+
+<p>
+<!-- navigation buttons at the bottom of the page -->
+<ul class="pagination">
+  <li class="active"><a href="._pysketcher000.html">1</a></li>
+  <li><a href="._pysketcher001.html">2</a></li>
+  <li><a href="._pysketcher002.html">3</a></li>
+  <li><a href="._pysketcher003.html">4</a></li>
+  <li><a href="._pysketcher001.html">&raquo;</a></li>
+</ul>
 <!-- ------------------- end of main content --------------- -->
 <!-- ------------------- end of main content --------------- -->
 
 
+</div>  <!-- end container -->
+<!-- include javascript, jQuery *first* -->
+<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
+<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
+
+<!-- Bootstrap footer
+<footer>
+<a href="http://..."><img width="250" align=right src="http://..."></a>
+</footer>
+-->
+
 
 
 </body>
 </body>
 </html>
 </html>

二进制
doc/pub/tutorial/pysketcher.pdf


+ 2 - 0
doc/src/tut/basics.do.txt

@@ -11,10 +11,12 @@ of a physics problem, here involving a rolling wheel on an inclined
 plane. The sketch
 plane. The sketch
 # #else
 # #else
 
 
+# #ifdef 2DO
 2DO:
 2DO:
  * two wheels of different radii on inclined plane coupled to
  * two wheels of different radii on inclined plane coupled to
    correct solution
    correct solution
  * "Pygame backend": "http://inventwithpython.com/chapter17.html"
  * "Pygame backend": "http://inventwithpython.com/chapter17.html"
+# #endif
 
 
 ======= A First Glimpse of Pysketcher =======
 ======= A First Glimpse of Pysketcher =======
 
 

+ 7 - 7
doc/src/tut/classes.do.txt

@@ -27,7 +27,7 @@ FIGURE: [fig-tut/Axis, width=500 frac=0.7]
 
 
 The corresponding code looks like this:
 The corresponding code looks like this:
 
 
-@@@CODE ../../../pysketcher/shapes.py fromto: def test_Axis@drawing_tool.savefig\('tmp_Axis'\)
+@@@CODE ../../../pysketcher/tests/test_pysketcher.py fromto: def test_Axis@drawing_tool.savefig\('tmp_Axis'\)
 
 
 ===== Distance with Text =====
 ===== Distance with Text =====
 
 
@@ -48,7 +48,7 @@ FIGURE: [fig-tut/Distance_wText, width=500 frac=0.7]
 
 
 was produced by this code:
 was produced by this code:
 
 
-@@@CODE ../../../pysketcher/shapes.py fromto: def test_Distance_wText@drawing_tool.savefig\('tmp_Distance
+@@@CODE ../../../pysketcher/tests/test_pysketcher.py fromto: def test_Distance_wText@drawing_tool.savefig\('tmp_Distance
 Note the use of `Text_wArrow` to write an explaining text with an
 Note the use of `Text_wArrow` to write an explaining text with an
 associated arrow, here used to explain how
 associated arrow, here used to explain how
 the `text_spacing` and `alignment` arguments can be used to adjust
 the `text_spacing` and `alignment` arguments can be used to adjust
@@ -63,7 +63,7 @@ FIGURE: [fig-tut/Rectangle, width=500 frac=0.7]
 
 
 The above figure can be produced by the following code.
 The above figure can be produced by the following code.
 
 
-@@@CODE ../../../pysketcher/shapes.py fromto: def test_Rectangle@drawing_tool.savefig\('tmp_Rectangle
+@@@CODE ../../../pysketcher/tests/test_pysketcher.py fromto: def test_Rectangle@drawing_tool.savefig\('tmp_Rectangle
 
 
 Note that the `draw_dimension` method adds explanation of dimensions and various
 Note that the `draw_dimension` method adds explanation of dimensions and various
 important argument in the construction of a shape. It adapts the annotations
 important argument in the construction of a shape. It adapts the annotations
@@ -78,7 +78,7 @@ FIGURE: [fig-tut/Triangle, width=500 frac=0.7]
 
 
 The code below produces the figure.
 The code below produces the figure.
 
 
-@@@CODE ../../../pysketcher/shapes.py fromto: def test_Triangle@drawing_tool.savefig\('tmp_Triangle
+@@@CODE ../../../pysketcher/tests/test_pysketcher.py fromto: def test_Triangle@drawing_tool.savefig\('tmp_Triangle
 Here, the `draw_dimension` method writes the name of the corners at the
 Here, the `draw_dimension` method writes the name of the corners at the
 position of the corners, which does not always look nice (the present figure
 position of the corners, which does not always look nice (the present figure
 is an example). For a high-quality sketch one would add some spacing
 is an example). For a high-quality sketch one would add some spacing
@@ -93,7 +93,7 @@ FIGURE: [fig-tut/Arc, width=400 frac=0.5]
 
 
 An arc like the one above is produced by
 An arc like the one above is produced by
 
 
-@@@CODE ../../../pysketcher/shapes.py fromto: def test_Arc@drawing_tool.savefig\('tmp_Arc
+@@@CODE ../../../pysketcher/tests/test_pysketcher.py fromto: def test_Arc@drawing_tool.savefig\('tmp_Arc
 
 
 ===== Spring =====
 ===== Spring =====
 
 
@@ -104,7 +104,7 @@ FIGURE: [fig-tut/Spring, width=800 frac=1]
 
 
 The code for making these two springs goes like this:
 The code for making these two springs goes like this:
 
 
-@@@CODE ../../../pysketcher/shapes.py fromto: def test_Spring@drawing_tool.savefig\('tmp_Spring
+@@@CODE ../../../pysketcher/tests/test_pysketcher.py fromto: def test_Spring@drawing_tool.savefig\('tmp_Spring
 
 
 ===== Dashpot =====
 ===== Dashpot =====
 
 
@@ -115,7 +115,7 @@ FIGURE: [fig-tut/Dashpot, width=600 frac=0.8]
 
 
 This dashpot is produced by
 This dashpot is produced by
 
 
-@@@CODE ../../../pysketcher/shapes.py fromto: def test_Dashpot@drawing_tool.savefig\('tmp_Dashpot
+@@@CODE ../../../pysketcher/tests/test_pysketcher.py fromto: def test_Dashpot@drawing_tool.savefig\('tmp_Dashpot
 
 
 ===== Wavy =====
 ===== Wavy =====
 
 

+ 5 - 0
doc/src/tut/main_sketcher.do.txt

@@ -1,4 +1,9 @@
+% if FORMAT == 'sphinx':
+# Sphinx can only have title with less than 63 chars...
+TITLE: Pysketcher: Create Principal Sketches of Physics Problems
+% else:
 TITLE: Using Pysketcher to Create Principal Sketches of Physics Problems
 TITLE: Using Pysketcher to Create Principal Sketches of Physics Problems
+% endif
 AUTHOR: Hans Petter Langtangen at Center for Biomedical Computing, Simula Research Laboratory & Department of Informatics, University of Oslo
 AUTHOR: Hans Petter Langtangen at Center for Biomedical Computing, Simula Research Laboratory & Department of Informatics, University of Oslo
 DATE: today
 DATE: today
 
 

+ 20 - 12
doc/src/tut/make.sh

@@ -1,30 +1,37 @@
-#!/bin/sh
+#!/bin/bash
+
+function system {
+  "$@"
+  if [ $? -ne 0 ]; then
+    echo "make.sh: unsuccessful command $@"
+    echo "abort!"
+    exit 1
+  fi
+}
 
 
 # Run spellcheck
 # Run spellcheck
-doconce spellcheck -d .dict4spell.txt *.do.txt
+system doconce spellcheck -d .dict4spell.txt *.do.txt
 if [ $? -ne 0 ]; then
 if [ $? -ne 0 ]; then
   echo "Abort due to misspellings."
   echo "Abort due to misspellings."
   exit 1
   exit 1
 fi
 fi
 
 
 name=main_sketcher
 name=main_sketcher
-doconce format html $name
+system system doconce format html $name --html_output=${name}-draft
 
 
-#cp .ptex2tex.cfg-minted .ptex2tex.cfg
-doconce format pdflatex $name --skip_inline_comments --latex_code_style=pyg
-#ptex2tex -DMINTED $name
-pdflatex -shell-escape $name
-makeindex $name
+system doconce format pdflatex $name --skip_inline_comments --latex_code_style=pyg
+system pdflatex -shell-escape $name
+system makeindex $name
 pdflatex -shell-escape $name
 pdflatex -shell-escape $name
 pdflatex -shell-escape $name
 pdflatex -shell-escape $name
 cp $name.pdf pysketcher.pdf
 cp $name.pdf pysketcher.pdf
 
 
 html=pysketcher
 html=pysketcher
-doconce format html $name --skip_inline_comments --html_style=boostrap_bluegray --html_output=$html
-doconce split_html ${html}.html
+system doconce format html $name --skip_inline_comments --html_style=bootswatch_readable --html_output=$html
+system doconce split_html ${html}.html --pagination
 
 
-doconce format sphinx $name --skip_inline_comments
-doconce sphinx_dir copyright="H. P. Langtangen" version=0.1 theme=pyramid $name
+system doconce format sphinx $name --skip_inline_comments
+system doconce sphinx_dir theme=alabaster $name
 python automake_sphinx.py
 python automake_sphinx.py
 
 
 # Publish
 # Publish
@@ -33,3 +40,4 @@ name=pysketcher
 cp ${name}.html ._${name}*.html ${name}.pdf $dest/
 cp ${name}.html ._${name}*.html ${name}.pdf $dest/
 rm -rf $dest/html
 rm -rf $dest/html
 cp -r sphinx-rootdir/_build/html $dest/html
 cp -r sphinx-rootdir/_build/html $dest/html
+cp -r fig-tut $dest

+ 39 - 0
doc/web/index.html

@@ -0,0 +1,39 @@
+<!doctype html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="chrome=1">
+    <title>pysketcher by hplgit</title>
+
+    <link rel="stylesheet" href="stylesheets/styles.css">
+    <link rel="stylesheet" href="stylesheets/github-dark.css">
+    <script src="javascripts/scale.fix.js"></script>
+    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+
+    <!--[if lt IE 9]>
+    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+  </head>
+  <body>
+    <div class="wrapper">
+      <header>
+        <h1>Pysketcher</h1>
+        <p class="view"><a href="https://github.com/hplgit/pysketcher">View the Project on GitHub <small>hplgit/pysketcher</small></a></p>
+      </header>
+      <section>
+        <h1>Tutorial</h1>
+	<ul>
+	  <li><p> <a href="../pub/tutorial/pysketcher.pdf">LaTeX PDF</a>
+	  <li><p> <a href="../pub/tutorial/pysketcher.html">Bootstrap HTML</a>
+	  <li><p> <a href="../pub/tutorial/html/index.html">Sphinx HTML</a>
+	</ul>
+      </section>
+    </div>
+    <footer>
+      <p>Project maintained by <a href="https://github.com/hplgit">hplgit</a></p>
+      <p>Hosted on GitHub Pages &mdash; Theme by <a href="https://github.com/orderedlist">orderedlist</a></p>
+    </footer>
+    <!--[if !IE]><script>fixScale(document);</script><![endif]-->
+
+  </body>
+</html>

+ 0 - 0
index.html


部分文件因为文件数量过多而无法显示